wxt 0.7.4 → 0.8.0
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/cli.cjs +91 -37
- package/dist/client.d.ts +5 -3
- package/dist/client.js +1 -1
- package/dist/index.cjs +90 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -3
- package/dist/index.d.ts +12 -3
- package/dist/index.js +90 -36
- package/dist/index.js.map +1 -1
- package/dist/sandbox.d.ts +28 -0
- package/dist/sandbox.js +10 -0
- package/dist/virtual-modules/background-entrypoint.js +1 -1
- package/dist/virtual-modules/background-entrypoint.js.map +1 -1
- package/dist/virtual-modules/content-script-entrypoint.js +4 -1
- package/dist/virtual-modules/content-script-entrypoint.js.map +1 -1
- package/dist/virtual-modules/unlisted-script-entrypoint.js +33 -0
- package/dist/virtual-modules/unlisted-script-entrypoint.js.map +1 -0
- package/package.json +11 -7
package/dist/cli.cjs
CHANGED
|
@@ -868,7 +868,7 @@ var require_merge_stream = __commonJS({
|
|
|
868
868
|
var import_cac = __toESM(require("cac"), 1);
|
|
869
869
|
|
|
870
870
|
// package.json
|
|
871
|
-
var version = "0.
|
|
871
|
+
var version = "0.8.0";
|
|
872
872
|
|
|
873
873
|
// src/core/utils/getInternalConfig.ts
|
|
874
874
|
var import_c12 = require("c12");
|
|
@@ -1208,7 +1208,11 @@ function getUnimportOptions(config) {
|
|
|
1208
1208
|
const defaultOptions = {
|
|
1209
1209
|
debugLog: config.logger.debug,
|
|
1210
1210
|
imports: [{ name: "defineConfig", from: "wxt" }],
|
|
1211
|
-
presets: [
|
|
1211
|
+
presets: [
|
|
1212
|
+
{ package: "wxt/client" },
|
|
1213
|
+
{ package: "wxt/browser" },
|
|
1214
|
+
{ package: "wxt/sandbox" }
|
|
1215
|
+
],
|
|
1212
1216
|
warn: config.logger.warn,
|
|
1213
1217
|
dirs: ["components", "composables", "hooks", "utils"]
|
|
1214
1218
|
};
|
|
@@ -1249,7 +1253,7 @@ function unimport(config) {
|
|
|
1249
1253
|
// src/core/vite-plugins/virtualEntrypoint.ts
|
|
1250
1254
|
var import_fs_extra4 = __toESM(require("fs-extra"), 1);
|
|
1251
1255
|
var import_path4 = require("path");
|
|
1252
|
-
function
|
|
1256
|
+
function virtualEntrypoint(type, config) {
|
|
1253
1257
|
const virtualId = `virtual:wxt-${type}?`;
|
|
1254
1258
|
const resolvedVirtualId = `\0${virtualId}`;
|
|
1255
1259
|
return {
|
|
@@ -1574,10 +1578,13 @@ async function resolveInternalViteConfig(env, mergedConfig, finalConfig) {
|
|
|
1574
1578
|
internalVite.plugins.push(devHtmlPrerender(finalConfig));
|
|
1575
1579
|
internalVite.plugins.push(unimport(finalConfig));
|
|
1576
1580
|
internalVite.plugins.push(
|
|
1577
|
-
|
|
1581
|
+
virtualEntrypoint("background", finalConfig)
|
|
1578
1582
|
);
|
|
1579
1583
|
internalVite.plugins.push(
|
|
1580
|
-
|
|
1584
|
+
virtualEntrypoint("content-script", finalConfig)
|
|
1585
|
+
);
|
|
1586
|
+
internalVite.plugins.push(
|
|
1587
|
+
virtualEntrypoint("unlisted-script", finalConfig)
|
|
1581
1588
|
);
|
|
1582
1589
|
internalVite.plugins.push(devServerGlobals(finalConfig));
|
|
1583
1590
|
internalVite.plugins.push(tsconfigPaths(finalConfig));
|
|
@@ -1742,7 +1749,11 @@ async function buildEntrypoints(groups, config, spinner) {
|
|
|
1742
1749
|
return { publicAssets, steps };
|
|
1743
1750
|
}
|
|
1744
1751
|
async function buildSingleEntrypoint(entrypoint, config) {
|
|
1745
|
-
const isVirtual = [
|
|
1752
|
+
const isVirtual = [
|
|
1753
|
+
"background",
|
|
1754
|
+
"content-script",
|
|
1755
|
+
"unlisted-script"
|
|
1756
|
+
].includes(entrypoint.type);
|
|
1746
1757
|
const entry = isVirtual ? `virtual:wxt-${entrypoint.type}?${entrypoint.inputPath}` : entrypoint.inputPath;
|
|
1747
1758
|
const plugins = [];
|
|
1748
1759
|
if (entrypoint.type === "content-script-style" || entrypoint.type === "unlisted-style") {
|
|
@@ -1884,6 +1895,7 @@ function removeImportStatements(text) {
|
|
|
1884
1895
|
function removeProjectImportStatements(text) {
|
|
1885
1896
|
const noImports = removeImportStatements(text);
|
|
1886
1897
|
return `import { defineContentScript, defineBackground } from 'wxt/client';
|
|
1898
|
+
import { defineUnlistedScript } from 'wxt/sandbox';
|
|
1887
1899
|
|
|
1888
1900
|
${noImports}`;
|
|
1889
1901
|
}
|
|
@@ -1909,7 +1921,6 @@ async function importEntrypointFile(path10, config) {
|
|
|
1909
1921
|
cache: false,
|
|
1910
1922
|
debug: config.debug,
|
|
1911
1923
|
esmResolve: true,
|
|
1912
|
-
interopDefault: true,
|
|
1913
1924
|
alias: {
|
|
1914
1925
|
"webextension-polyfill": (0, import_path7.resolve)(
|
|
1915
1926
|
config.root,
|
|
@@ -1928,7 +1939,8 @@ async function importEntrypointFile(path10, config) {
|
|
|
1928
1939
|
}
|
|
1929
1940
|
});
|
|
1930
1941
|
try {
|
|
1931
|
-
|
|
1942
|
+
const res = await jiti(path10);
|
|
1943
|
+
return res.default;
|
|
1932
1944
|
} catch (err) {
|
|
1933
1945
|
config.logger.error(err);
|
|
1934
1946
|
throw err;
|
|
@@ -1986,15 +1998,14 @@ ${JSON.stringify(
|
|
|
1986
1998
|
hasBackground = true;
|
|
1987
1999
|
break;
|
|
1988
2000
|
case "content-script":
|
|
1989
|
-
entrypoint = await getContentScriptEntrypoint(
|
|
1990
|
-
config,
|
|
1991
|
-
getEntrypointName(config.entrypointsDir, path10),
|
|
1992
|
-
path10
|
|
1993
|
-
);
|
|
2001
|
+
entrypoint = await getContentScriptEntrypoint(config, path10);
|
|
1994
2002
|
break;
|
|
1995
2003
|
case "unlisted-page":
|
|
1996
2004
|
entrypoint = await getUnlistedPageEntrypoint(config, path10);
|
|
1997
2005
|
break;
|
|
2006
|
+
case "unlisted-script":
|
|
2007
|
+
entrypoint = await getUnlistedScriptEntrypoint(config, path10);
|
|
2008
|
+
break;
|
|
1998
2009
|
case "content-script-style":
|
|
1999
2010
|
entrypoint = {
|
|
2000
2011
|
type,
|
|
@@ -2087,9 +2098,13 @@ async function getPopupEntrypoint(config, path10) {
|
|
|
2087
2098
|
);
|
|
2088
2099
|
}
|
|
2089
2100
|
}
|
|
2090
|
-
const
|
|
2091
|
-
if (
|
|
2092
|
-
options.mv2Key =
|
|
2101
|
+
const mv2TypeContent = document.querySelector("meta[name='manifest.type']")?.getAttribute("content");
|
|
2102
|
+
if (mv2TypeContent) {
|
|
2103
|
+
options.mv2Key = mv2TypeContent === "page_action" ? "page_action" : "browser_action";
|
|
2104
|
+
}
|
|
2105
|
+
const browserStyleContent = document.querySelector("meta[name='manifest.browser_style']")?.getAttribute("content");
|
|
2106
|
+
if (browserStyleContent) {
|
|
2107
|
+
options.browserStyle = browserStyleContent === "true";
|
|
2093
2108
|
}
|
|
2094
2109
|
return {
|
|
2095
2110
|
type: "popup",
|
|
@@ -2134,19 +2149,46 @@ async function getUnlistedPageEntrypoint(config, path10) {
|
|
|
2134
2149
|
options: getHtmlBaseOptions(document)
|
|
2135
2150
|
};
|
|
2136
2151
|
}
|
|
2152
|
+
async function getUnlistedScriptEntrypoint(config, path10) {
|
|
2153
|
+
const name = getEntrypointName(config.entrypointsDir, path10);
|
|
2154
|
+
const defaultExport = await importEntrypointFile(
|
|
2155
|
+
path10,
|
|
2156
|
+
config
|
|
2157
|
+
);
|
|
2158
|
+
if (defaultExport == null) {
|
|
2159
|
+
throw Error(
|
|
2160
|
+
`${name}: Default export not found, did you forget to call "export default defineUnlistedScript(...)"?`
|
|
2161
|
+
);
|
|
2162
|
+
}
|
|
2163
|
+
const { main: _, ...moduleOptions } = defaultExport;
|
|
2164
|
+
const options = moduleOptions;
|
|
2165
|
+
return {
|
|
2166
|
+
type: "unlisted-script",
|
|
2167
|
+
name,
|
|
2168
|
+
inputPath: path10,
|
|
2169
|
+
outputDir: config.outDir,
|
|
2170
|
+
options
|
|
2171
|
+
};
|
|
2172
|
+
}
|
|
2137
2173
|
async function getBackgroundEntrypoint(config, path10) {
|
|
2174
|
+
const name = "background";
|
|
2138
2175
|
let options = {};
|
|
2139
2176
|
if (path10 !== VIRTUAL_NOOP_BACKGROUND_MODULE_ID) {
|
|
2140
|
-
const defaultExport = await importEntrypointFile(
|
|
2177
|
+
const defaultExport = await importEntrypointFile(
|
|
2178
|
+
path10,
|
|
2179
|
+
config
|
|
2180
|
+
);
|
|
2141
2181
|
if (defaultExport == null) {
|
|
2142
|
-
throw Error(
|
|
2182
|
+
throw Error(
|
|
2183
|
+
`${name}: Default export not found, did you forget to call "export default defineBackground(...)"?`
|
|
2184
|
+
);
|
|
2143
2185
|
}
|
|
2144
2186
|
const { main: _, ...moduleOptions } = defaultExport;
|
|
2145
2187
|
options = moduleOptions;
|
|
2146
2188
|
}
|
|
2147
2189
|
return {
|
|
2148
2190
|
type: "background",
|
|
2149
|
-
name
|
|
2191
|
+
name,
|
|
2150
2192
|
inputPath: path10,
|
|
2151
2193
|
outputDir: config.outDir,
|
|
2152
2194
|
options: {
|
|
@@ -2156,14 +2198,17 @@ async function getBackgroundEntrypoint(config, path10) {
|
|
|
2156
2198
|
}
|
|
2157
2199
|
};
|
|
2158
2200
|
}
|
|
2159
|
-
async function getContentScriptEntrypoint(config,
|
|
2201
|
+
async function getContentScriptEntrypoint(config, path10) {
|
|
2202
|
+
const name = getEntrypointName(config.entrypointsDir, path10);
|
|
2160
2203
|
const { main: _, ...options } = await importEntrypointFile(path10, config);
|
|
2161
2204
|
if (options == null) {
|
|
2162
|
-
throw Error(
|
|
2205
|
+
throw Error(
|
|
2206
|
+
`${name}: Default export not found, did you forget to call "export default defineContentScript(...)"?`
|
|
2207
|
+
);
|
|
2163
2208
|
}
|
|
2164
2209
|
return {
|
|
2165
2210
|
type: "content-script",
|
|
2166
|
-
name
|
|
2211
|
+
name,
|
|
2167
2212
|
inputPath: path10,
|
|
2168
2213
|
outputDir: (0, import_path8.resolve)(config.outDir, CONTENT_SCRIPT_OUT_DIR),
|
|
2169
2214
|
options
|
|
@@ -2476,18 +2521,23 @@ var ContentSecurityPolicy = class _ContentSecurityPolicy {
|
|
|
2476
2521
|
};
|
|
2477
2522
|
|
|
2478
2523
|
// src/core/utils/content-scripts.ts
|
|
2479
|
-
function hashContentScriptOptions(options) {
|
|
2524
|
+
function hashContentScriptOptions(options, config) {
|
|
2525
|
+
const simplifiedOptions = mapWxtOptionsToContentScript(options, config);
|
|
2526
|
+
Object.keys(simplifiedOptions).forEach((key) => {
|
|
2527
|
+
if (simplifiedOptions[key] == null)
|
|
2528
|
+
delete simplifiedOptions[key];
|
|
2529
|
+
});
|
|
2480
2530
|
const withDefaults = {
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2531
|
+
exclude_globs: [],
|
|
2532
|
+
exclude_matches: [],
|
|
2533
|
+
include_globs: [],
|
|
2534
|
+
match_about_blank: false,
|
|
2535
|
+
run_at: "document_idle",
|
|
2536
|
+
all_frames: false,
|
|
2537
|
+
// @ts-expect-error - not in type
|
|
2538
|
+
match_origin_as_fallback: false,
|
|
2488
2539
|
world: "ISOLATED",
|
|
2489
|
-
|
|
2490
|
-
...options
|
|
2540
|
+
...simplifiedOptions
|
|
2491
2541
|
};
|
|
2492
2542
|
return JSON.stringify(
|
|
2493
2543
|
Object.entries(withDefaults).map(([key, value]) => {
|
|
@@ -2560,13 +2610,17 @@ async function writeManifest(manifest, output, config) {
|
|
|
2560
2610
|
}
|
|
2561
2611
|
async function generateMainfest(entrypoints, buildOutput, config) {
|
|
2562
2612
|
const pkg = await getPackageJson(config);
|
|
2613
|
+
const versionName = config.manifest.version_name ?? pkg?.version;
|
|
2614
|
+
const version3 = config.manifest.version ?? simplifyVersion(pkg?.version);
|
|
2563
2615
|
const baseManifest = {
|
|
2564
2616
|
manifest_version: config.manifestVersion,
|
|
2565
2617
|
name: pkg?.name,
|
|
2566
2618
|
description: pkg?.description,
|
|
2567
|
-
version:
|
|
2568
|
-
|
|
2569
|
-
|
|
2619
|
+
version: version3,
|
|
2620
|
+
version_name: (
|
|
2621
|
+
// Firefox doesn't support version_name
|
|
2622
|
+
config.browser === "firefox" || versionName === version3 ? void 0 : versionName
|
|
2623
|
+
),
|
|
2570
2624
|
short_name: pkg?.shortName,
|
|
2571
2625
|
icons: discoverIcons(buildOutput)
|
|
2572
2626
|
};
|
|
@@ -2760,7 +2814,7 @@ function addEntrypoints(manifest, entrypoints, buildOutput, config) {
|
|
|
2760
2814
|
);
|
|
2761
2815
|
} else {
|
|
2762
2816
|
const hashToEntrypointsMap = contentScripts.reduce((map, script) => {
|
|
2763
|
-
const hash = hashContentScriptOptions(script.options);
|
|
2817
|
+
const hash = hashContentScriptOptions(script.options, config);
|
|
2764
2818
|
if (map.has(hash))
|
|
2765
2819
|
map.get(hash)?.push(script);
|
|
2766
2820
|
else
|
|
@@ -4924,4 +4978,4 @@ cli.command("clean [root]", "clean generated files and caches").alias("cleanup")
|
|
|
4924
4978
|
cli.command("publish [root]", "publish to stores").action(publish);
|
|
4925
4979
|
cli.command("init [directory]", "initialize a new project").option("-t, --template <template>", "template to use").option("--pm <packageManager>", "which package manager to use").action(init);
|
|
4926
4980
|
cli.parse();
|
|
4927
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2lzZXhlQDIuMC4wL25vZGVfbW9kdWxlcy9pc2V4ZS93aW5kb3dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9pc2V4ZUAyLjAuMC9ub2RlX21vZHVsZXMvaXNleGUvbW9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaXNleGVAMi4wLjAvbm9kZV9tb2R1bGVzL2lzZXhlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS93aGljaEAyLjAuMi9ub2RlX21vZHVsZXMvd2hpY2gvd2hpY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3BhdGgta2V5QDMuMS4xL25vZGVfbW9kdWxlcy9wYXRoLWtleS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY3Jvc3Mtc3Bhd25ANy4wLjMvbm9kZV9tb2R1bGVzL2Nyb3NzLXNwYXduL2xpYi91dGlsL3Jlc29sdmVDb21tYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jcm9zcy1zcGF3bkA3LjAuMy9ub2RlX21vZHVsZXMvY3Jvc3Mtc3Bhd24vbGliL3V0aWwvZXNjYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zaGViYW5nLXJlZ2V4QDMuMC4wL25vZGVfbW9kdWxlcy9zaGViYW5nLXJlZ2V4L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zaGViYW5nLWNvbW1hbmRAMi4wLjAvbm9kZV9tb2R1bGVzL3NoZWJhbmctY29tbWFuZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY3Jvc3Mtc3Bhd25ANy4wLjMvbm9kZV9tb2R1bGVzL2Nyb3NzLXNwYXduL2xpYi91dGlsL3JlYWRTaGViYW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jcm9zcy1zcGF3bkA3LjAuMy9ub2RlX21vZHVsZXMvY3Jvc3Mtc3Bhd24vbGliL3BhcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jcm9zcy1zcGF3bkA3LjAuMy9ub2RlX21vZHVsZXMvY3Jvc3Mtc3Bhd24vbGliL2Vub2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY3Jvc3Mtc3Bhd25ANy4wLjMvbm9kZV9tb2R1bGVzL2Nyb3NzLXNwYXduL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zaWduYWwtZXhpdEAzLjAuNy9ub2RlX21vZHVsZXMvc2lnbmFsLWV4aXQvc2lnbmFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc2lnbmFsLWV4aXRAMy4wLjcvbm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9nZXQtc3RyZWFtQDYuMC4xL25vZGVfbW9kdWxlcy9nZXQtc3RyZWFtL2J1ZmZlci1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2dldC1zdHJlYW1ANi4wLjEvbm9kZV9tb2R1bGVzL2dldC1zdHJlYW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21lcmdlLXN0cmVhbUAyLjAuMC9ub2RlX21vZHVsZXMvbWVyZ2Utc3RyZWFtL2luZGV4LmpzIiwgIi4uL3NyYy9jbGkvaW5kZXgudHMiLCAiLi4vcGFja2FnZS5qc29uIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2dldEludGVybmFsQ29uZmlnLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2NyZWF0ZUZzQ2FjaGUudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZnMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvcGF0aHMudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL2Rldkh0bWxQcmVyZW5kZXIudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL2RldlNlcnZlckdsb2JhbHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvbmV0d29yay50cyIsICIuLi9zcmMvY29yZS91dGlscy9wcm9taXNlcy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvZG93bmxvYWQudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL211bHRpcGFnZU1vdmUudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL3VuaW1wb3J0LnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2F1dG8taW1wb3J0cy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvdmlydHVhbEVudHJ5cG9pbnQudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL3RzY29uZmlnUGF0aHMudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL25vb3BCYWNrZ3JvdW5kLnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy9jc3NFbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvYnVuZGxlQW5hbHlzaXMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZ2xvYmFscy50cyIsICIuLi9zcmMvaW5kZXgudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvYXJyYXlzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2RldGVjdERldkNoYW5nZXMudHMiLCAiLi4vc3JjL2NvcmUvYnVpbGQvYnVpbGRFbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9yZW1vdmVFbXB0eURpcnMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvcHVibGljLnRzIiwgIi4uL3NyYy9jb3JlL2J1aWxkL2ZpbmRFbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9pbXBvcnRFbnRyeXBvaW50RmlsZS50cyIsICIuLi9zcmMvY29yZS91dGlscy9zdHJpbmdzLnRzIiwgIi4uL3NyYy9jb3JlL2J1aWxkL2dlbmVyYXRlVHlwZXNEaXIudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvaTE4bi50cyIsICIuLi9zcmMvY29yZS91dGlscy9tYW5pZmVzdC50cyIsICIuLi9zcmMvY29yZS91dGlscy9Db250ZW50U2VjdXJpdHlQb2xpY3kudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvY29udGVudC1zY3JpcHRzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3BhY2thZ2UudHMiLCAiLi4vc3JjL2NvcmUvYnVpbGQudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZ3JvdXBFbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9mb3JtYXREdXJhdGlvbi50cyIsICIuLi9zcmMvY29yZS9sb2cvcHJpbnRCdWlsZFN1bW1hcnkudHMiLCAiLi4vc3JjL2NvcmUvbG9nL3ByaW50RmlsZUxpc3QudHMiLCAiLi4vc3JjL2NvcmUvbG9nL3ByaW50VGFibGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2V4ZWNhQDcuMi4wL25vZGVfbW9kdWxlcy9leGVjYS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaXAtZmluYWwtbmV3bGluZUAzLjAuMC9ub2RlX21vZHVsZXMvc3RyaXAtZmluYWwtbmV3bGluZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbnBtLXJ1bi1wYXRoQDUuMS4wL25vZGVfbW9kdWxlcy9ucG0tcnVuLXBhdGgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3BhdGgta2V5QDQuMC4wL25vZGVfbW9kdWxlcy9wYXRoLWtleS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWltaWMtZm5ANC4wLjAvbm9kZV9tb2R1bGVzL21pbWljLWZuL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9vbmV0aW1lQDYuMC4wL25vZGVfbW9kdWxlcy9vbmV0aW1lL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9leGVjYUA3LjIuMC9ub2RlX21vZHVsZXMvZXhlY2EvbGliL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9odW1hbi1zaWduYWxzQDQuMy4xL25vZGVfbW9kdWxlcy9odW1hbi1zaWduYWxzL2J1aWxkL3NyYy9tYWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9odW1hbi1zaWduYWxzQDQuMy4xL25vZGVfbW9kdWxlcy9odW1hbi1zaWduYWxzL2J1aWxkL3NyYy9yZWFsdGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaHVtYW4tc2lnbmFsc0A0LjMuMS9ub2RlX21vZHVsZXMvaHVtYW4tc2lnbmFscy9idWlsZC9zcmMvc2lnbmFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaHVtYW4tc2lnbmFsc0A0LjMuMS9ub2RlX21vZHVsZXMvaHVtYW4tc2lnbmFscy9idWlsZC9zcmMvY29yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZXhlY2FANy4yLjAvbm9kZV9tb2R1bGVzL2V4ZWNhL2xpYi9zdGRpby5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZXhlY2FANy4yLjAvbm9kZV9tb2R1bGVzL2V4ZWNhL2xpYi9raWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9leGVjYUA3LjIuMC9ub2RlX21vZHVsZXMvZXhlY2EvbGliL3BpcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2lzLXN0cmVhbUAzLjAuMC9ub2RlX21vZHVsZXMvaXMtc3RyZWFtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9leGVjYUA3LjIuMC9ub2RlX21vZHVsZXMvZXhlY2EvbGliL3N0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZXhlY2FANy4yLjAvbm9kZV9tb2R1bGVzL2V4ZWNhL2xpYi9wcm9taXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9leGVjYUA3LjIuMC9ub2RlX21vZHVsZXMvZXhlY2EvbGliL2NvbW1hbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2V4ZWNhQDcuMi4wL25vZGVfbW9kdWxlcy9leGVjYS9saWIvdmVyYm9zZS5qcyIsICIuLi9zcmMvY29yZS9zZXJ2ZXIudHMiLCAiLi4vc3JjL2NvcmUvcnVubmVycy93c2wudHMiLCAiLi4vc3JjL2NvcmUvcnVubmVycy93ZWItZXh0LnRzIiwgIi4uL3NyYy9jb3JlL3J1bm5lcnMvc2FmYXJpLnRzIiwgIi4uL3NyYy9jb3JlL3J1bm5lcnMvbWFudWFsLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3dzbC50cyIsICIuLi9zcmMvY29yZS9ydW5uZXJzL2luZGV4LnRzIiwgIi4uL3NyYy9jb3JlL2NsZWFuLnRzIiwgIi4uL3NyYy9jbGkvdXRpbHMvZGVmaW5lQ29tbWFuZC50cyIsICIuLi9zcmMvY29yZS9sb2cvcHJpbnRIZWFkZXIudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy9idWlsZC50cyIsICIuLi9zcmMvY2xpL2NvbW1hbmRzL2Rldi50cyIsICIuLi9zcmMvY2xpL2NvbW1hbmRzL2luaXQudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy9wcmVwYXJlLnRzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvcHVibGlzaC50cyIsICIuLi9zcmMvY29yZS96aXAudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy96aXAudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy9jbGVhbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsibW9kdWxlLmV4cG9ydHMgPSBpc2V4ZVxuaXNleGUuc3luYyA9IHN5bmNcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKVxuXG5mdW5jdGlvbiBjaGVja1BhdGhFeHQgKHBhdGgsIG9wdGlvbnMpIHtcbiAgdmFyIHBhdGhleHQgPSBvcHRpb25zLnBhdGhFeHQgIT09IHVuZGVmaW5lZCA/XG4gICAgb3B0aW9ucy5wYXRoRXh0IDogcHJvY2Vzcy5lbnYuUEFUSEVYVFxuXG4gIGlmICghcGF0aGV4dCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBwYXRoZXh0ID0gcGF0aGV4dC5zcGxpdCgnOycpXG4gIGlmIChwYXRoZXh0LmluZGV4T2YoJycpICE9PSAtMSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHAgPSBwYXRoZXh0W2ldLnRvTG93ZXJDYXNlKClcbiAgICBpZiAocCAmJiBwYXRoLnN1YnN0cigtcC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IHApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjaGVja1N0YXQgKHN0YXQsIHBhdGgsIG9wdGlvbnMpIHtcbiAgaWYgKCFzdGF0LmlzU3ltYm9saWNMaW5rKCkgJiYgIXN0YXQuaXNGaWxlKCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gY2hlY2tQYXRoRXh0KHBhdGgsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGlzZXhlIChwYXRoLCBvcHRpb25zLCBjYikge1xuICBmcy5zdGF0KHBhdGgsIGZ1bmN0aW9uIChlciwgc3RhdCkge1xuICAgIGNiKGVyLCBlciA/IGZhbHNlIDogY2hlY2tTdGF0KHN0YXQsIHBhdGgsIG9wdGlvbnMpKVxuICB9KVxufVxuXG5mdW5jdGlvbiBzeW5jIChwYXRoLCBvcHRpb25zKSB7XG4gIHJldHVybiBjaGVja1N0YXQoZnMuc3RhdFN5bmMocGF0aCksIHBhdGgsIG9wdGlvbnMpXG59XG4iLCAibW9kdWxlLmV4cG9ydHMgPSBpc2V4ZVxuaXNleGUuc3luYyA9IHN5bmNcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKVxuXG5mdW5jdGlvbiBpc2V4ZSAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgZnMuc3RhdChwYXRoLCBmdW5jdGlvbiAoZXIsIHN0YXQpIHtcbiAgICBjYihlciwgZXIgPyBmYWxzZSA6IGNoZWNrU3RhdChzdGF0LCBvcHRpb25zKSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gc3luYyAocGF0aCwgb3B0aW9ucykge1xuICByZXR1cm4gY2hlY2tTdGF0KGZzLnN0YXRTeW5jKHBhdGgpLCBvcHRpb25zKVxufVxuXG5mdW5jdGlvbiBjaGVja1N0YXQgKHN0YXQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHN0YXQuaXNGaWxlKCkgJiYgY2hlY2tNb2RlKHN0YXQsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGNoZWNrTW9kZSAoc3RhdCwgb3B0aW9ucykge1xuICB2YXIgbW9kID0gc3RhdC5tb2RlXG4gIHZhciB1aWQgPSBzdGF0LnVpZFxuICB2YXIgZ2lkID0gc3RhdC5naWRcblxuICB2YXIgbXlVaWQgPSBvcHRpb25zLnVpZCAhPT0gdW5kZWZpbmVkID9cbiAgICBvcHRpb25zLnVpZCA6IHByb2Nlc3MuZ2V0dWlkICYmIHByb2Nlc3MuZ2V0dWlkKClcbiAgdmFyIG15R2lkID0gb3B0aW9ucy5naWQgIT09IHVuZGVmaW5lZCA/XG4gICAgb3B0aW9ucy5naWQgOiBwcm9jZXNzLmdldGdpZCAmJiBwcm9jZXNzLmdldGdpZCgpXG5cbiAgdmFyIHUgPSBwYXJzZUludCgnMTAwJywgOClcbiAgdmFyIGcgPSBwYXJzZUludCgnMDEwJywgOClcbiAgdmFyIG8gPSBwYXJzZUludCgnMDAxJywgOClcbiAgdmFyIHVnID0gdSB8IGdcblxuICB2YXIgcmV0ID0gKG1vZCAmIG8pIHx8XG4gICAgKG1vZCAmIGcpICYmIGdpZCA9PT0gbXlHaWQgfHxcbiAgICAobW9kICYgdSkgJiYgdWlkID09PSBteVVpZCB8fFxuICAgIChtb2QgJiB1ZykgJiYgbXlVaWQgPT09IDBcblxuICByZXR1cm4gcmV0XG59XG4iLCAidmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIGNvcmVcbmlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInIHx8IGdsb2JhbC5URVNUSU5HX1dJTkRPV1MpIHtcbiAgY29yZSA9IHJlcXVpcmUoJy4vd2luZG93cy5qcycpXG59IGVsc2Uge1xuICBjb3JlID0gcmVxdWlyZSgnLi9tb2RlLmpzJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc2V4ZVxuaXNleGUuc3luYyA9IHN5bmNcblxuZnVuY3Rpb24gaXNleGUgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgaWYgKCFjYikge1xuICAgIGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2FsbGJhY2sgbm90IHByb3ZpZGVkJylcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgaXNleGUocGF0aCwgb3B0aW9ucyB8fCB7fSwgZnVuY3Rpb24gKGVyLCBpcykge1xuICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICByZWplY3QoZXIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShpcylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgY29yZShwYXRoLCBvcHRpb25zIHx8IHt9LCBmdW5jdGlvbiAoZXIsIGlzKSB7XG4gICAgLy8gaWdub3JlIEVBQ0NFUyBiZWNhdXNlIHRoYXQganVzdCBtZWFucyB3ZSBhcmVuJ3QgYWxsb3dlZCB0byBydW4gaXRcbiAgICBpZiAoZXIpIHtcbiAgICAgIGlmIChlci5jb2RlID09PSAnRUFDQ0VTJyB8fCBvcHRpb25zICYmIG9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgIGVyID0gbnVsbFxuICAgICAgICBpcyA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIGNiKGVyLCBpcylcbiAgfSlcbn1cblxuZnVuY3Rpb24gc3luYyAocGF0aCwgb3B0aW9ucykge1xuICAvLyBteSBraW5nZG9tIGZvciBhIGZpbHRlcmVkIGNhdGNoXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvcmUuc3luYyhwYXRoLCBvcHRpb25zIHx8IHt9KVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaWdub3JlRXJyb3JzIHx8IGVyLmNvZGUgPT09ICdFQUNDRVMnKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gIH1cbn1cbiIsICJjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInIHx8XG4gICAgcHJvY2Vzcy5lbnYuT1NUWVBFID09PSAnY3lnd2luJyB8fFxuICAgIHByb2Nlc3MuZW52Lk9TVFlQRSA9PT0gJ21zeXMnXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IENPTE9OID0gaXNXaW5kb3dzID8gJzsnIDogJzonXG5jb25zdCBpc2V4ZSA9IHJlcXVpcmUoJ2lzZXhlJylcblxuY29uc3QgZ2V0Tm90Rm91bmRFcnJvciA9IChjbWQpID0+XG4gIE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGBub3QgZm91bmQ6ICR7Y21kfWApLCB7IGNvZGU6ICdFTk9FTlQnIH0pXG5cbmNvbnN0IGdldFBhdGhJbmZvID0gKGNtZCwgb3B0KSA9PiB7XG4gIGNvbnN0IGNvbG9uID0gb3B0LmNvbG9uIHx8IENPTE9OXG5cbiAgLy8gSWYgaXQgaGFzIGEgc2xhc2gsIHRoZW4gd2UgZG9uJ3QgYm90aGVyIHNlYXJjaGluZyB0aGUgcGF0aGVudi5cbiAgLy8ganVzdCBjaGVjayB0aGUgZmlsZSBpdHNlbGYsIGFuZCB0aGF0J3MgaXQuXG4gIGNvbnN0IHBhdGhFbnYgPSBjbWQubWF0Y2goL1xcLy8pIHx8IGlzV2luZG93cyAmJiBjbWQubWF0Y2goL1xcXFwvKSA/IFsnJ11cbiAgICA6IChcbiAgICAgIFtcbiAgICAgICAgLy8gd2luZG93cyBhbHdheXMgY2hlY2tzIHRoZSBjd2QgZmlyc3RcbiAgICAgICAgLi4uKGlzV2luZG93cyA/IFtwcm9jZXNzLmN3ZCgpXSA6IFtdKSxcbiAgICAgICAgLi4uKG9wdC5wYXRoIHx8IHByb2Nlc3MuZW52LlBBVEggfHxcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogdmVyeSB1bnVzdWFsICovICcnKS5zcGxpdChjb2xvbiksXG4gICAgICBdXG4gICAgKVxuICBjb25zdCBwYXRoRXh0RXhlID0gaXNXaW5kb3dzXG4gICAgPyBvcHQucGF0aEV4dCB8fCBwcm9jZXNzLmVudi5QQVRIRVhUIHx8ICcuRVhFOy5DTUQ7LkJBVDsuQ09NJ1xuICAgIDogJydcbiAgY29uc3QgcGF0aEV4dCA9IGlzV2luZG93cyA/IHBhdGhFeHRFeGUuc3BsaXQoY29sb24pIDogWycnXVxuXG4gIGlmIChpc1dpbmRvd3MpIHtcbiAgICBpZiAoY21kLmluZGV4T2YoJy4nKSAhPT0gLTEgJiYgcGF0aEV4dFswXSAhPT0gJycpXG4gICAgICBwYXRoRXh0LnVuc2hpZnQoJycpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGhFbnYsXG4gICAgcGF0aEV4dCxcbiAgICBwYXRoRXh0RXhlLFxuICB9XG59XG5cbmNvbnN0IHdoaWNoID0gKGNtZCwgb3B0LCBjYikgPT4ge1xuICBpZiAodHlwZW9mIG9wdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0XG4gICAgb3B0ID0ge31cbiAgfVxuICBpZiAoIW9wdClcbiAgICBvcHQgPSB7fVxuXG4gIGNvbnN0IHsgcGF0aEVudiwgcGF0aEV4dCwgcGF0aEV4dEV4ZSB9ID0gZ2V0UGF0aEluZm8oY21kLCBvcHQpXG4gIGNvbnN0IGZvdW5kID0gW11cblxuICBjb25zdCBzdGVwID0gaSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGkgPT09IHBhdGhFbnYubGVuZ3RoKVxuICAgICAgcmV0dXJuIG9wdC5hbGwgJiYgZm91bmQubGVuZ3RoID8gcmVzb2x2ZShmb3VuZClcbiAgICAgICAgOiByZWplY3QoZ2V0Tm90Rm91bmRFcnJvcihjbWQpKVxuXG4gICAgY29uc3QgcHBSYXcgPSBwYXRoRW52W2ldXG4gICAgY29uc3QgcGF0aFBhcnQgPSAvXlwiLipcIiQvLnRlc3QocHBSYXcpID8gcHBSYXcuc2xpY2UoMSwgLTEpIDogcHBSYXdcblxuICAgIGNvbnN0IHBDbWQgPSBwYXRoLmpvaW4ocGF0aFBhcnQsIGNtZClcbiAgICBjb25zdCBwID0gIXBhdGhQYXJ0ICYmIC9eXFwuW1xcXFxcXC9dLy50ZXN0KGNtZCkgPyBjbWQuc2xpY2UoMCwgMikgKyBwQ21kXG4gICAgICA6IHBDbWRcblxuICAgIHJlc29sdmUoc3ViU3RlcChwLCBpLCAwKSlcbiAgfSlcblxuICBjb25zdCBzdWJTdGVwID0gKHAsIGksIGlpKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGlpID09PSBwYXRoRXh0Lmxlbmd0aClcbiAgICAgIHJldHVybiByZXNvbHZlKHN0ZXAoaSArIDEpKVxuICAgIGNvbnN0IGV4dCA9IHBhdGhFeHRbaWldXG4gICAgaXNleGUocCArIGV4dCwgeyBwYXRoRXh0OiBwYXRoRXh0RXhlIH0sIChlciwgaXMpID0+IHtcbiAgICAgIGlmICghZXIgJiYgaXMpIHtcbiAgICAgICAgaWYgKG9wdC5hbGwpXG4gICAgICAgICAgZm91bmQucHVzaChwICsgZXh0KVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUocCArIGV4dClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKHN1YlN0ZXAocCwgaSwgaWkgKyAxKSlcbiAgICB9KVxuICB9KVxuXG4gIHJldHVybiBjYiA/IHN0ZXAoMCkudGhlbihyZXMgPT4gY2IobnVsbCwgcmVzKSwgY2IpIDogc3RlcCgwKVxufVxuXG5jb25zdCB3aGljaFN5bmMgPSAoY21kLCBvcHQpID0+IHtcbiAgb3B0ID0gb3B0IHx8IHt9XG5cbiAgY29uc3QgeyBwYXRoRW52LCBwYXRoRXh0LCBwYXRoRXh0RXhlIH0gPSBnZXRQYXRoSW5mbyhjbWQsIG9wdClcbiAgY29uc3QgZm91bmQgPSBbXVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aEVudi5sZW5ndGg7IGkgKyspIHtcbiAgICBjb25zdCBwcFJhdyA9IHBhdGhFbnZbaV1cbiAgICBjb25zdCBwYXRoUGFydCA9IC9eXCIuKlwiJC8udGVzdChwcFJhdykgPyBwcFJhdy5zbGljZSgxLCAtMSkgOiBwcFJhd1xuXG4gICAgY29uc3QgcENtZCA9IHBhdGguam9pbihwYXRoUGFydCwgY21kKVxuICAgIGNvbnN0IHAgPSAhcGF0aFBhcnQgJiYgL15cXC5bXFxcXFxcL10vLnRlc3QoY21kKSA/IGNtZC5zbGljZSgwLCAyKSArIHBDbWRcbiAgICAgIDogcENtZFxuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXRoRXh0Lmxlbmd0aDsgaiArKykge1xuICAgICAgY29uc3QgY3VyID0gcCArIHBhdGhFeHRbal1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlzID0gaXNleGUuc3luYyhjdXIsIHsgcGF0aEV4dDogcGF0aEV4dEV4ZSB9KVxuICAgICAgICBpZiAoaXMpIHtcbiAgICAgICAgICBpZiAob3B0LmFsbClcbiAgICAgICAgICAgIGZvdW5kLnB1c2goY3VyKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBjdXJcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXgpIHt9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdC5hbGwgJiYgZm91bmQubGVuZ3RoKVxuICAgIHJldHVybiBmb3VuZFxuXG4gIGlmIChvcHQubm90aHJvdylcbiAgICByZXR1cm4gbnVsbFxuXG4gIHRocm93IGdldE5vdEZvdW5kRXJyb3IoY21kKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdoaWNoXG53aGljaC5zeW5jID0gd2hpY2hTeW5jXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBwYXRoS2V5ID0gKG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRjb25zdCBlbnZpcm9ubWVudCA9IG9wdGlvbnMuZW52IHx8IHByb2Nlc3MuZW52O1xuXHRjb25zdCBwbGF0Zm9ybSA9IG9wdGlvbnMucGxhdGZvcm0gfHwgcHJvY2Vzcy5wbGF0Zm9ybTtcblxuXHRpZiAocGxhdGZvcm0gIT09ICd3aW4zMicpIHtcblx0XHRyZXR1cm4gJ1BBVEgnO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdC5rZXlzKGVudmlyb25tZW50KS5yZXZlcnNlKCkuZmluZChrZXkgPT4ga2V5LnRvVXBwZXJDYXNlKCkgPT09ICdQQVRIJykgfHwgJ1BhdGgnO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoS2V5O1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgZm9yIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Vcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBwYXRoS2V5O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHdoaWNoID0gcmVxdWlyZSgnd2hpY2gnKTtcbmNvbnN0IGdldFBhdGhLZXkgPSByZXF1aXJlKCdwYXRoLWtleScpO1xuXG5mdW5jdGlvbiByZXNvbHZlQ29tbWFuZEF0dGVtcHQocGFyc2VkLCB3aXRob3V0UGF0aEV4dCkge1xuICAgIGNvbnN0IGVudiA9IHBhcnNlZC5vcHRpb25zLmVudiB8fCBwcm9jZXNzLmVudjtcbiAgICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGhhc0N1c3RvbUN3ZCA9IHBhcnNlZC5vcHRpb25zLmN3ZCAhPSBudWxsO1xuICAgIC8vIFdvcmtlciB0aHJlYWRzIGRvIG5vdCBoYXZlIHByb2Nlc3MuY2hkaXIoKVxuICAgIGNvbnN0IHNob3VsZFN3aXRjaEN3ZCA9IGhhc0N1c3RvbUN3ZCAmJiBwcm9jZXNzLmNoZGlyICE9PSB1bmRlZmluZWQgJiYgIXByb2Nlc3MuY2hkaXIuZGlzYWJsZWQ7XG5cbiAgICAvLyBJZiBhIGN1c3RvbSBgY3dkYCB3YXMgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgcHJvY2VzcyBjd2RcbiAgICAvLyBiZWNhdXNlIGB3aGljaGAgd2lsbCBkbyBzdGF0IGNhbGxzIGJ1dCBkb2VzIG5vdCBzdXBwb3J0IGEgY3VzdG9tIGN3ZFxuICAgIGlmIChzaG91bGRTd2l0Y2hDd2QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb2Nlc3MuY2hkaXIocGFyc2VkLm9wdGlvbnMuY3dkKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvKiBFbXB0eSAqL1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgcmVzb2x2ZWQgPSB3aGljaC5zeW5jKHBhcnNlZC5jb21tYW5kLCB7XG4gICAgICAgICAgICBwYXRoOiBlbnZbZ2V0UGF0aEtleSh7IGVudiB9KV0sXG4gICAgICAgICAgICBwYXRoRXh0OiB3aXRob3V0UGF0aEV4dCA/IHBhdGguZGVsaW1pdGVyIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEVtcHR5ICovXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHNob3VsZFN3aXRjaEN3ZCkge1xuICAgICAgICAgICAgcHJvY2Vzcy5jaGRpcihjd2QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2Ugc3VjY2Vzc2Z1bGx5IHJlc29sdmVkLCBlbnN1cmUgdGhhdCBhbiBhYnNvbHV0ZSBwYXRoIGlzIHJldHVybmVkXG4gICAgLy8gTm90ZSB0aGF0IHdoZW4gYSBjdXN0b20gYGN3ZGAgd2FzIHVzZWQsIHdlIG5lZWQgdG8gcmVzb2x2ZSB0byBhbiBhYnNvbHV0ZSBwYXRoIGJhc2VkIG9uIGl0XG4gICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICAgIHJlc29sdmVkID0gcGF0aC5yZXNvbHZlKGhhc0N1c3RvbUN3ZCA/IHBhcnNlZC5vcHRpb25zLmN3ZCA6ICcnLCByZXNvbHZlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29tbWFuZChwYXJzZWQpIHtcbiAgICByZXR1cm4gcmVzb2x2ZUNvbW1hbmRBdHRlbXB0KHBhcnNlZCkgfHwgcmVzb2x2ZUNvbW1hbmRBdHRlbXB0KHBhcnNlZCwgdHJ1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVzb2x2ZUNvbW1hbmQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vLyBTZWUgaHR0cDovL3d3dy5yb2J2YW5kZXJ3b3VkZS5jb20vZXNjYXBlY2hhcnMucGhwXG5jb25zdCBtZXRhQ2hhcnNSZWdFeHAgPSAvKFsoKVxcXVslIV5cImA8PiZ8OywgKj9dKS9nO1xuXG5mdW5jdGlvbiBlc2NhcGVDb21tYW5kKGFyZykge1xuICAgIC8vIEVzY2FwZSBtZXRhIGNoYXJzXG4gICAgYXJnID0gYXJnLnJlcGxhY2UobWV0YUNoYXJzUmVnRXhwLCAnXiQxJyk7XG5cbiAgICByZXR1cm4gYXJnO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVBcmd1bWVudChhcmcsIGRvdWJsZUVzY2FwZU1ldGFDaGFycykge1xuICAgIC8vIENvbnZlcnQgdG8gc3RyaW5nXG4gICAgYXJnID0gYCR7YXJnfWA7XG5cbiAgICAvLyBBbGdvcml0aG0gYmVsb3cgaXMgYmFzZWQgb24gaHR0cHM6Ly9xbnRtLm9yZy9jbWRcblxuICAgIC8vIFNlcXVlbmNlIG9mIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlOlxuICAgIC8vIGRvdWJsZSB1cCBhbGwgdGhlIGJhY2tzbGFzaGVzIGFuZCBlc2NhcGUgdGhlIGRvdWJsZSBxdW90ZVxuICAgIGFyZyA9IGFyZy5yZXBsYWNlKC8oXFxcXCopXCIvZywgJyQxJDFcXFxcXCInKTtcblxuICAgIC8vIFNlcXVlbmNlIG9mIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IHRoZSBlbmQgb2YgdGhlIHN0cmluZ1xuICAgIC8vICh3aGljaCB3aWxsIGJlY29tZSBhIGRvdWJsZSBxdW90ZSBsYXRlcik6XG4gICAgLy8gZG91YmxlIHVwIGFsbCB0aGUgYmFja3NsYXNoZXNcbiAgICBhcmcgPSBhcmcucmVwbGFjZSgvKFxcXFwqKSQvLCAnJDEkMScpO1xuXG4gICAgLy8gQWxsIG90aGVyIGJhY2tzbGFzaGVzIG9jY3VyIGxpdGVyYWxseVxuXG4gICAgLy8gUXVvdGUgdGhlIHdob2xlIHRoaW5nOlxuICAgIGFyZyA9IGBcIiR7YXJnfVwiYDtcblxuICAgIC8vIEVzY2FwZSBtZXRhIGNoYXJzXG4gICAgYXJnID0gYXJnLnJlcGxhY2UobWV0YUNoYXJzUmVnRXhwLCAnXiQxJyk7XG5cbiAgICAvLyBEb3VibGUgZXNjYXBlIG1ldGEgY2hhcnMgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKGRvdWJsZUVzY2FwZU1ldGFDaGFycykge1xuICAgICAgICBhcmcgPSBhcmcucmVwbGFjZShtZXRhQ2hhcnNSZWdFeHAsICdeJDEnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJnO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5jb21tYW5kID0gZXNjYXBlQ29tbWFuZDtcbm1vZHVsZS5leHBvcnRzLmFyZ3VtZW50ID0gZXNjYXBlQXJndW1lbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSAvXiMhKC4qKS87XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgc2hlYmFuZ1JlZ2V4ID0gcmVxdWlyZSgnc2hlYmFuZy1yZWdleCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChzdHJpbmcgPSAnJykgPT4ge1xuXHRjb25zdCBtYXRjaCA9IHN0cmluZy5tYXRjaChzaGViYW5nUmVnZXgpO1xuXG5cdGlmICghbWF0Y2gpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGNvbnN0IFtwYXRoLCBhcmd1bWVudF0gPSBtYXRjaFswXS5yZXBsYWNlKC8jISA/LywgJycpLnNwbGl0KCcgJyk7XG5cdGNvbnN0IGJpbmFyeSA9IHBhdGguc3BsaXQoJy8nKS5wb3AoKTtcblxuXHRpZiAoYmluYXJ5ID09PSAnZW52Jykge1xuXHRcdHJldHVybiBhcmd1bWVudDtcblx0fVxuXG5cdHJldHVybiBhcmd1bWVudCA/IGAke2JpbmFyeX0gJHthcmd1bWVudH1gIDogYmluYXJ5O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbmNvbnN0IHNoZWJhbmdDb21tYW5kID0gcmVxdWlyZSgnc2hlYmFuZy1jb21tYW5kJyk7XG5cbmZ1bmN0aW9uIHJlYWRTaGViYW5nKGNvbW1hbmQpIHtcbiAgICAvLyBSZWFkIHRoZSBmaXJzdCAxNTAgYnl0ZXMgZnJvbSB0aGUgZmlsZVxuICAgIGNvbnN0IHNpemUgPSAxNTA7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jKHNpemUpO1xuXG4gICAgbGV0IGZkO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgZmQgPSBmcy5vcGVuU3luYyhjb21tYW5kLCAncicpO1xuICAgICAgICBmcy5yZWFkU3luYyhmZCwgYnVmZmVyLCAwLCBzaXplLCAwKTtcbiAgICAgICAgZnMuY2xvc2VTeW5jKGZkKTtcbiAgICB9IGNhdGNoIChlKSB7IC8qIEVtcHR5ICovIH1cblxuICAgIC8vIEF0dGVtcHQgdG8gZXh0cmFjdCBzaGViYW5nIChudWxsIGlzIHJldHVybmVkIGlmIG5vdCBhIHNoZWJhbmcpXG4gICAgcmV0dXJuIHNoZWJhbmdDb21tYW5kKGJ1ZmZlci50b1N0cmluZygpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWFkU2hlYmFuZztcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCByZXNvbHZlQ29tbWFuZCA9IHJlcXVpcmUoJy4vdXRpbC9yZXNvbHZlQ29tbWFuZCcpO1xuY29uc3QgZXNjYXBlID0gcmVxdWlyZSgnLi91dGlsL2VzY2FwZScpO1xuY29uc3QgcmVhZFNoZWJhbmcgPSByZXF1aXJlKCcuL3V0aWwvcmVhZFNoZWJhbmcnKTtcblxuY29uc3QgaXNXaW4gPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuY29uc3QgaXNFeGVjdXRhYmxlUmVnRXhwID0gL1xcLig/OmNvbXxleGUpJC9pO1xuY29uc3QgaXNDbWRTaGltUmVnRXhwID0gL25vZGVfbW9kdWxlc1tcXFxcL10uYmluW1xcXFwvXVteXFxcXC9dK1xcLmNtZCQvaTtcblxuZnVuY3Rpb24gZGV0ZWN0U2hlYmFuZyhwYXJzZWQpIHtcbiAgICBwYXJzZWQuZmlsZSA9IHJlc29sdmVDb21tYW5kKHBhcnNlZCk7XG5cbiAgICBjb25zdCBzaGViYW5nID0gcGFyc2VkLmZpbGUgJiYgcmVhZFNoZWJhbmcocGFyc2VkLmZpbGUpO1xuXG4gICAgaWYgKHNoZWJhbmcpIHtcbiAgICAgICAgcGFyc2VkLmFyZ3MudW5zaGlmdChwYXJzZWQuZmlsZSk7XG4gICAgICAgIHBhcnNlZC5jb21tYW5kID0gc2hlYmFuZztcblxuICAgICAgICByZXR1cm4gcmVzb2x2ZUNvbW1hbmQocGFyc2VkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkLmZpbGU7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm9uU2hlbGwocGFyc2VkKSB7XG4gICAgaWYgKCFpc1dpbikge1xuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cblxuICAgIC8vIERldGVjdCAmIGFkZCBzdXBwb3J0IGZvciBzaGViYW5nc1xuICAgIGNvbnN0IGNvbW1hbmRGaWxlID0gZGV0ZWN0U2hlYmFuZyhwYXJzZWQpO1xuXG4gICAgLy8gV2UgZG9uJ3QgbmVlZCBhIHNoZWxsIGlmIHRoZSBjb21tYW5kIGZpbGVuYW1lIGlzIGFuIGV4ZWN1dGFibGVcbiAgICBjb25zdCBuZWVkc1NoZWxsID0gIWlzRXhlY3V0YWJsZVJlZ0V4cC50ZXN0KGNvbW1hbmRGaWxlKTtcblxuICAgIC8vIElmIGEgc2hlbGwgaXMgcmVxdWlyZWQsIHVzZSBjbWQuZXhlIGFuZCB0YWtlIGNhcmUgb2YgZXNjYXBpbmcgZXZlcnl0aGluZyBjb3JyZWN0bHlcbiAgICAvLyBOb3RlIHRoYXQgYGZvcmNlU2hlbGxgIGlzIGFuIGhpZGRlbiBvcHRpb24gdXNlZCBvbmx5IGluIHRlc3RzXG4gICAgaWYgKHBhcnNlZC5vcHRpb25zLmZvcmNlU2hlbGwgfHwgbmVlZHNTaGVsbCkge1xuICAgICAgICAvLyBOZWVkIHRvIGRvdWJsZSBlc2NhcGUgbWV0YSBjaGFycyBpZiB0aGUgY29tbWFuZCBpcyBhIGNtZC1zaGltIGxvY2F0ZWQgaW4gYG5vZGVfbW9kdWxlcy8uYmluL2BcbiAgICAgICAgLy8gVGhlIGNtZC1zaGltIHNpbXBseSBjYWxscyBleGVjdXRlIHRoZSBwYWNrYWdlIGJpbiBmaWxlIHdpdGggTm9kZUpTLCBwcm94eWluZyBhbnkgYXJndW1lbnRcbiAgICAgICAgLy8gQmVjYXVzZSB0aGUgZXNjYXBlIG9mIG1ldGFjaGFycyB3aXRoIF4gZ2V0cyBpbnRlcnByZXRlZCB3aGVuIHRoZSBjbWQuZXhlIGlzIGZpcnN0IGNhbGxlZCxcbiAgICAgICAgLy8gd2UgbmVlZCB0byBkb3VibGUgZXNjYXBlIHRoZW1cbiAgICAgICAgY29uc3QgbmVlZHNEb3VibGVFc2NhcGVNZXRhQ2hhcnMgPSBpc0NtZFNoaW1SZWdFeHAudGVzdChjb21tYW5kRmlsZSk7XG5cbiAgICAgICAgLy8gTm9ybWFsaXplIHBvc2l4IHBhdGhzIGludG8gT1MgY29tcGF0aWJsZSBwYXRocyAoZS5nLjogZm9vL2JhciAtPiBmb29cXGJhcilcbiAgICAgICAgLy8gVGhpcyBpcyBuZWNlc3Nhcnkgb3RoZXJ3aXNlIGl0IHdpbGwgYWx3YXlzIGZhaWwgd2l0aCBFTk9FTlQgaW4gdGhvc2UgY2FzZXNcbiAgICAgICAgcGFyc2VkLmNvbW1hbmQgPSBwYXRoLm5vcm1hbGl6ZShwYXJzZWQuY29tbWFuZCk7XG5cbiAgICAgICAgLy8gRXNjYXBlIGNvbW1hbmQgJiBhcmd1bWVudHNcbiAgICAgICAgcGFyc2VkLmNvbW1hbmQgPSBlc2NhcGUuY29tbWFuZChwYXJzZWQuY29tbWFuZCk7XG4gICAgICAgIHBhcnNlZC5hcmdzID0gcGFyc2VkLmFyZ3MubWFwKChhcmcpID0+IGVzY2FwZS5hcmd1bWVudChhcmcsIG5lZWRzRG91YmxlRXNjYXBlTWV0YUNoYXJzKSk7XG5cbiAgICAgICAgY29uc3Qgc2hlbGxDb21tYW5kID0gW3BhcnNlZC5jb21tYW5kXS5jb25jYXQocGFyc2VkLmFyZ3MpLmpvaW4oJyAnKTtcblxuICAgICAgICBwYXJzZWQuYXJncyA9IFsnL2QnLCAnL3MnLCAnL2MnLCBgXCIke3NoZWxsQ29tbWFuZH1cImBdO1xuICAgICAgICBwYXJzZWQuY29tbWFuZCA9IHByb2Nlc3MuZW52LmNvbXNwZWMgfHwgJ2NtZC5leGUnO1xuICAgICAgICBwYXJzZWQub3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMgPSB0cnVlOyAvLyBUZWxsIG5vZGUncyBzcGF3biB0aGF0IHRoZSBhcmd1bWVudHMgYXJlIGFscmVhZHkgZXNjYXBlZFxuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlKGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgICAvLyBOb3JtYWxpemUgYXJndW1lbnRzLCBzaW1pbGFyIHRvIG5vZGVqc1xuICAgIGlmIChhcmdzICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICAgIG9wdGlvbnMgPSBhcmdzO1xuICAgICAgICBhcmdzID0gbnVsbDtcbiAgICB9XG5cbiAgICBhcmdzID0gYXJncyA/IGFyZ3Muc2xpY2UoMCkgOiBbXTsgLy8gQ2xvbmUgYXJyYXkgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIG9yaWdpbmFsXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpOyAvLyBDbG9uZSBvYmplY3QgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIG9yaWdpbmFsXG5cbiAgICAvLyBCdWlsZCBvdXIgcGFyc2VkIG9iamVjdFxuICAgIGNvbnN0IHBhcnNlZCA9IHtcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgZmlsZTogdW5kZWZpbmVkLFxuICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIERlbGVnYXRlIGZ1cnRoZXIgcGFyc2luZyB0byBzaGVsbCBvciBub24tc2hlbGxcbiAgICByZXR1cm4gb3B0aW9ucy5zaGVsbCA/IHBhcnNlZCA6IHBhcnNlTm9uU2hlbGwocGFyc2VkKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzV2luID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcblxuZnVuY3Rpb24gbm90Rm91bmRFcnJvcihvcmlnaW5hbCwgc3lzY2FsbCkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihgJHtzeXNjYWxsfSAke29yaWdpbmFsLmNvbW1hbmR9IEVOT0VOVGApLCB7XG4gICAgICAgIGNvZGU6ICdFTk9FTlQnLFxuICAgICAgICBlcnJubzogJ0VOT0VOVCcsXG4gICAgICAgIHN5c2NhbGw6IGAke3N5c2NhbGx9ICR7b3JpZ2luYWwuY29tbWFuZH1gLFxuICAgICAgICBwYXRoOiBvcmlnaW5hbC5jb21tYW5kLFxuICAgICAgICBzcGF3bmFyZ3M6IG9yaWdpbmFsLmFyZ3MsXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGhvb2tDaGlsZFByb2Nlc3MoY3AsIHBhcnNlZCkge1xuICAgIGlmICghaXNXaW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsRW1pdCA9IGNwLmVtaXQ7XG5cbiAgICBjcC5lbWl0ID0gZnVuY3Rpb24gKG5hbWUsIGFyZzEpIHtcbiAgICAgICAgLy8gSWYgZW1pdHRpbmcgXCJleGl0XCIgZXZlbnQgYW5kIGV4aXQgY29kZSBpcyAxLCB3ZSBuZWVkIHRvIGNoZWNrIGlmXG4gICAgICAgIC8vIHRoZSBjb21tYW5kIGV4aXN0cyBhbmQgZW1pdCBhbiBcImVycm9yXCIgaW5zdGVhZFxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0luZGlnb1VuaXRlZC9ub2RlLWNyb3NzLXNwYXduL2lzc3Vlcy8xNlxuICAgICAgICBpZiAobmFtZSA9PT0gJ2V4aXQnKSB7XG4gICAgICAgICAgICBjb25zdCBlcnIgPSB2ZXJpZnlFTk9FTlQoYXJnMSwgcGFyc2VkLCAnc3Bhd24nKTtcblxuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEVtaXQuY2FsbChjcCwgJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmlnaW5hbEVtaXQuYXBwbHkoY3AsIGFyZ3VtZW50cyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5RU5PRU5UKHN0YXR1cywgcGFyc2VkKSB7XG4gICAgaWYgKGlzV2luICYmIHN0YXR1cyA9PT0gMSAmJiAhcGFyc2VkLmZpbGUpIHtcbiAgICAgICAgcmV0dXJuIG5vdEZvdW5kRXJyb3IocGFyc2VkLm9yaWdpbmFsLCAnc3Bhd24nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5RU5PRU5UU3luYyhzdGF0dXMsIHBhcnNlZCkge1xuICAgIGlmIChpc1dpbiAmJiBzdGF0dXMgPT09IDEgJiYgIXBhcnNlZC5maWxlKSB7XG4gICAgICAgIHJldHVybiBub3RGb3VuZEVycm9yKHBhcnNlZC5vcmlnaW5hbCwgJ3NwYXduU3luYycpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBob29rQ2hpbGRQcm9jZXNzLFxuICAgIHZlcmlmeUVOT0VOVCxcbiAgICB2ZXJpZnlFTk9FTlRTeW5jLFxuICAgIG5vdEZvdW5kRXJyb3IsXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY3AgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vbGliL3BhcnNlJyk7XG5jb25zdCBlbm9lbnQgPSByZXF1aXJlKCcuL2xpYi9lbm9lbnQnKTtcblxuZnVuY3Rpb24gc3Bhd24oY29tbWFuZCwgYXJncywgb3B0aW9ucykge1xuICAgIC8vIFBhcnNlIHRoZSBhcmd1bWVudHNcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZShjb21tYW5kLCBhcmdzLCBvcHRpb25zKTtcblxuICAgIC8vIFNwYXduIHRoZSBjaGlsZCBwcm9jZXNzXG4gICAgY29uc3Qgc3Bhd25lZCA9IGNwLnNwYXduKHBhcnNlZC5jb21tYW5kLCBwYXJzZWQuYXJncywgcGFyc2VkLm9wdGlvbnMpO1xuXG4gICAgLy8gSG9vayBpbnRvIGNoaWxkIHByb2Nlc3MgXCJleGl0XCIgZXZlbnQgdG8gZW1pdCBhbiBlcnJvciBpZiB0aGUgY29tbWFuZFxuICAgIC8vIGRvZXMgbm90IGV4aXN0cywgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vSW5kaWdvVW5pdGVkL25vZGUtY3Jvc3Mtc3Bhd24vaXNzdWVzLzE2XG4gICAgZW5vZW50Lmhvb2tDaGlsZFByb2Nlc3Moc3Bhd25lZCwgcGFyc2VkKTtcblxuICAgIHJldHVybiBzcGF3bmVkO1xufVxuXG5mdW5jdGlvbiBzcGF3blN5bmMoY29tbWFuZCwgYXJncywgb3B0aW9ucykge1xuICAgIC8vIFBhcnNlIHRoZSBhcmd1bWVudHNcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZShjb21tYW5kLCBhcmdzLCBvcHRpb25zKTtcblxuICAgIC8vIFNwYXduIHRoZSBjaGlsZCBwcm9jZXNzXG4gICAgY29uc3QgcmVzdWx0ID0gY3Auc3Bhd25TeW5jKHBhcnNlZC5jb21tYW5kLCBwYXJzZWQuYXJncywgcGFyc2VkLm9wdGlvbnMpO1xuXG4gICAgLy8gQW5hbHl6ZSBpZiB0aGUgY29tbWFuZCBkb2VzIG5vdCBleGlzdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vSW5kaWdvVW5pdGVkL25vZGUtY3Jvc3Mtc3Bhd24vaXNzdWVzLzE2XG4gICAgcmVzdWx0LmVycm9yID0gcmVzdWx0LmVycm9yIHx8IGVub2VudC52ZXJpZnlFTk9FTlRTeW5jKHJlc3VsdC5zdGF0dXMsIHBhcnNlZCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNwYXduO1xubW9kdWxlLmV4cG9ydHMuc3Bhd24gPSBzcGF3bjtcbm1vZHVsZS5leHBvcnRzLnN5bmMgPSBzcGF3blN5bmM7XG5cbm1vZHVsZS5leHBvcnRzLl9wYXJzZSA9IHBhcnNlO1xubW9kdWxlLmV4cG9ydHMuX2Vub2VudCA9IGVub2VudDtcbiIsICIvLyBUaGlzIGlzIG5vdCB0aGUgc2V0IG9mIGFsbCBwb3NzaWJsZSBzaWduYWxzLlxuLy9cbi8vIEl0IElTLCBob3dldmVyLCB0aGUgc2V0IG9mIGFsbCBzaWduYWxzIHRoYXQgdHJpZ2dlclxuLy8gYW4gZXhpdCBvbiBlaXRoZXIgTGludXggb3IgQlNEIHN5c3RlbXMuICBMaW51eCBpcyBhXG4vLyBzdXBlcnNldCBvZiB0aGUgc2lnbmFsIG5hbWVzIHN1cHBvcnRlZCBvbiBCU0QsIGFuZFxuLy8gdGhlIHVua25vd24gc2lnbmFscyBqdXN0IGZhaWwgdG8gcmVnaXN0ZXIsIHNvIHdlIGNhblxuLy8gY2F0Y2ggdGhhdCBlYXNpbHkgZW5vdWdoLlxuLy9cbi8vIERvbid0IGJvdGhlciB3aXRoIFNJR0tJTEwuICBJdCdzIHVuY2F0Y2hhYmxlLCB3aGljaFxuLy8gbWVhbnMgdGhhdCB3ZSBjYW4ndCBmaXJlIGFueSBjYWxsYmFja3MgYW55d2F5LlxuLy9cbi8vIElmIGEgdXNlciBkb2VzIGhhcHBlbiB0byByZWdpc3RlciBhIGhhbmRsZXIgb24gYSBub24tXG4vLyBmYXRhbCBzaWduYWwgbGlrZSBTSUdXSU5DSCBvciBzb21ldGhpbmcsIGFuZCB0aGVuXG4vLyBleGl0LCBpdCdsbCBlbmQgdXAgZmlyaW5nIGBwcm9jZXNzLmVtaXQoJ2V4aXQnKWAsIHNvXG4vLyB0aGUgaGFuZGxlciB3aWxsIGJlIGZpcmVkIGFueXdheS5cbi8vXG4vLyBTSUdCVVMsIFNJR0ZQRSwgU0lHU0VHViBhbmQgU0lHSUxMLCB3aGVuIG5vdCByYWlzZWRcbi8vIGFydGlmaWNpYWxseSwgaW5oZXJlbnRseSBsZWF2ZSB0aGUgcHJvY2VzcyBpbiBhXG4vLyBzdGF0ZSBmcm9tIHdoaWNoIGl0IGlzIG5vdCBzYWZlIHRvIHRyeSBhbmQgZW50ZXIgSlNcbi8vIGxpc3RlbmVycy5cbm1vZHVsZS5leHBvcnRzID0gW1xuICAnU0lHQUJSVCcsXG4gICdTSUdBTFJNJyxcbiAgJ1NJR0hVUCcsXG4gICdTSUdJTlQnLFxuICAnU0lHVEVSTSdcbl1cblxuaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgbW9kdWxlLmV4cG9ydHMucHVzaChcbiAgICAnU0lHVlRBTFJNJyxcbiAgICAnU0lHWENQVScsXG4gICAgJ1NJR1hGU1onLFxuICAgICdTSUdVU1IyJyxcbiAgICAnU0lHVFJBUCcsXG4gICAgJ1NJR1NZUycsXG4gICAgJ1NJR1FVSVQnLFxuICAgICdTSUdJT1QnXG4gICAgLy8gc2hvdWxkIGRldGVjdCBwcm9maWxlciBhbmQgZW5hYmxlL2Rpc2FibGUgYWNjb3JkaW5nbHkuXG4gICAgLy8gc2VlICMyMVxuICAgIC8vICdTSUdQUk9GJ1xuICApXG59XG5cbmlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gIG1vZHVsZS5leHBvcnRzLnB1c2goXG4gICAgJ1NJR0lPJyxcbiAgICAnU0lHUE9MTCcsXG4gICAgJ1NJR1BXUicsXG4gICAgJ1NJR1NUS0ZMVCcsXG4gICAgJ1NJR1VOVVNFRCdcbiAgKVxufVxuIiwgIi8vIE5vdGU6IHNpbmNlIG55YyB1c2VzIHRoaXMgbW9kdWxlIHRvIG91dHB1dCBjb3ZlcmFnZSwgYW55IGxpbmVzXG4vLyB0aGF0IGFyZSBpbiB0aGUgZGlyZWN0IHN5bmMgZmxvdyBvZiBueWMncyBvdXRwdXRDb3ZlcmFnZSBhcmVcbi8vIGlnbm9yZWQsIHNpbmNlIHdlIGNhbiBuZXZlciBnZXQgY292ZXJhZ2UgZm9yIHRoZW0uXG4vLyBncmFiIGEgcmVmZXJlbmNlIHRvIG5vZGUncyByZWFsIHByb2Nlc3Mgb2JqZWN0IHJpZ2h0IGF3YXlcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3NcblxuY29uc3QgcHJvY2Vzc09rID0gZnVuY3Rpb24gKHByb2Nlc3MpIHtcbiAgcmV0dXJuIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmVtaXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5yZWFsbHlFeGl0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3MubGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3Mua2lsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBpZCA9PT0gJ251bWJlcicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5vbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG4vLyBzb21lIGtpbmQgb2Ygbm9uLW5vZGUgZW52aXJvbm1lbnQsIGp1c3Qgbm8tb3Bcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKCFwcm9jZXNzT2socHJvY2VzcykpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHt9XG4gIH1cbn0gZWxzZSB7XG4gIHZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuICB2YXIgc2lnbmFscyA9IHJlcXVpcmUoJy4vc2lnbmFscy5qcycpXG4gIHZhciBpc1dpbiA9IC9ed2luL2kudGVzdChwcm9jZXNzLnBsYXRmb3JtKVxuXG4gIHZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAodHlwZW9mIEVFICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgRUUgPSBFRS5FdmVudEVtaXR0ZXJcbiAgfVxuXG4gIHZhciBlbWl0dGVyXG4gIGlmIChwcm9jZXNzLl9fc2lnbmFsX2V4aXRfZW1pdHRlcl9fKSB7XG4gICAgZW1pdHRlciA9IHByb2Nlc3MuX19zaWduYWxfZXhpdF9lbWl0dGVyX19cbiAgfSBlbHNlIHtcbiAgICBlbWl0dGVyID0gcHJvY2Vzcy5fX3NpZ25hbF9leGl0X2VtaXR0ZXJfXyA9IG5ldyBFRSgpXG4gICAgZW1pdHRlci5jb3VudCA9IDBcbiAgICBlbWl0dGVyLmVtaXR0ZWQgPSB7fVxuICB9XG5cbiAgLy8gQmVjYXVzZSB0aGlzIGVtaXR0ZXIgaXMgYSBnbG9iYWwsIHdlIGhhdmUgdG8gY2hlY2sgdG8gc2VlIGlmIGFcbiAgLy8gcHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIGxpYnJhcnkgZmFpbGVkIHRvIGVuYWJsZSBpbmZpbml0ZSBsaXN0ZW5lcnMuXG4gIC8vIEkga25vdyB3aGF0IHlvdSdyZSBhYm91dCB0byBzYXkuICBCdXQgbGl0ZXJhbGx5IGV2ZXJ5dGhpbmcgYWJvdXRcbiAgLy8gc2lnbmFsLWV4aXQgaXMgYSBjb21wcm9taXNlIHdpdGggZXZpbC4gIEdldCB1c2VkIHRvIGl0LlxuICBpZiAoIWVtaXR0ZXIuaW5maW5pdGUpIHtcbiAgICBlbWl0dGVyLnNldE1heExpc3RlbmVycyhJbmZpbml0eSlcbiAgICBlbWl0dGVyLmluZmluaXRlID0gdHJ1ZVxuICB9XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY2IsIG9wdHMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fVxuICAgIH1cbiAgICBhc3NlcnQuZXF1YWwodHlwZW9mIGNiLCAnZnVuY3Rpb24nLCAnYSBjYWxsYmFjayBtdXN0IGJlIHByb3ZpZGVkIGZvciBleGl0IGhhbmRsZXInKVxuXG4gICAgaWYgKGxvYWRlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGxvYWQoKVxuICAgIH1cblxuICAgIHZhciBldiA9ICdleGl0J1xuICAgIGlmIChvcHRzICYmIG9wdHMuYWx3YXlzTGFzdCkge1xuICAgICAgZXYgPSAnYWZ0ZXJleGl0J1xuICAgIH1cblxuICAgIHZhciByZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKGV2LCBjYilcbiAgICAgIGlmIChlbWl0dGVyLmxpc3RlbmVycygnZXhpdCcpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgIGVtaXR0ZXIubGlzdGVuZXJzKCdhZnRlcmV4aXQnKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdW5sb2FkKClcbiAgICAgIH1cbiAgICB9XG4gICAgZW1pdHRlci5vbihldiwgY2IpXG5cbiAgICByZXR1cm4gcmVtb3ZlXG4gIH1cblxuICB2YXIgdW5sb2FkID0gZnVuY3Rpb24gdW5sb2FkICgpIHtcbiAgICBpZiAoIWxvYWRlZCB8fCAhcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGxvYWRlZCA9IGZhbHNlXG5cbiAgICBzaWduYWxzLmZvckVhY2goZnVuY3Rpb24gKHNpZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcihzaWcsIHNpZ0xpc3RlbmVyc1tzaWddKVxuICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgfSlcbiAgICBwcm9jZXNzLmVtaXQgPSBvcmlnaW5hbFByb2Nlc3NFbWl0XG4gICAgcHJvY2Vzcy5yZWFsbHlFeGl0ID0gb3JpZ2luYWxQcm9jZXNzUmVhbGx5RXhpdFxuICAgIGVtaXR0ZXIuY291bnQgLT0gMVxuICB9XG4gIG1vZHVsZS5leHBvcnRzLnVubG9hZCA9IHVubG9hZFxuXG4gIHZhciBlbWl0ID0gZnVuY3Rpb24gZW1pdCAoZXZlbnQsIGNvZGUsIHNpZ25hbCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlbWl0dGVyLmVtaXR0ZWRbZXZlbnRdKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZW1pdHRlci5lbWl0dGVkW2V2ZW50XSA9IHRydWVcbiAgICBlbWl0dGVyLmVtaXQoZXZlbnQsIGNvZGUsIHNpZ25hbClcbiAgfVxuXG4gIC8vIHsgPHNpZ25hbD46IDxsaXN0ZW5lciBmbj4sIC4uLiB9XG4gIHZhciBzaWdMaXN0ZW5lcnMgPSB7fVxuICBzaWduYWxzLmZvckVhY2goZnVuY3Rpb24gKHNpZykge1xuICAgIHNpZ0xpc3RlbmVyc1tzaWddID0gZnVuY3Rpb24gbGlzdGVuZXIgKCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgbGlzdGVuZXJzLCBhbiBleGl0IGlzIGNvbWluZyFcbiAgICAgIC8vIFNpbXBsZXN0IHdheTogcmVtb3ZlIHVzIGFuZCB0aGVuIHJlLXNlbmQgdGhlIHNpZ25hbC5cbiAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIHdpbGwga2lsbCB0aGUgcHJvY2Vzcywgc28gd2UgY2FuXG4gICAgICAvLyBzYWZlbHkgZW1pdCBub3cuXG4gICAgICB2YXIgbGlzdGVuZXJzID0gcHJvY2Vzcy5saXN0ZW5lcnMoc2lnKVxuICAgICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPT09IGVtaXR0ZXIuY291bnQpIHtcbiAgICAgICAgdW5sb2FkKClcbiAgICAgICAgZW1pdCgnZXhpdCcsIG51bGwsIHNpZylcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZW1pdCgnYWZ0ZXJleGl0JywgbnVsbCwgc2lnKVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBpZiAoaXNXaW4gJiYgc2lnID09PSAnU0lHSFVQJykge1xuICAgICAgICAgIC8vIFwiU0lHSFVQXCIgdGhyb3dzIGFuIGBFTk9TWVNgIGVycm9yIG9uIFdpbmRvd3MsXG4gICAgICAgICAgLy8gc28gdXNlIGEgc3VwcG9ydGVkIHNpZ25hbCBpbnN0ZWFkXG4gICAgICAgICAgc2lnID0gJ1NJR0lOVCdcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsIHNpZylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2lnbmFscyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc2lnbmFsc1xuICB9XG5cbiAgdmFyIGxvYWRlZCA9IGZhbHNlXG5cbiAgdmFyIGxvYWQgPSBmdW5jdGlvbiBsb2FkICgpIHtcbiAgICBpZiAobG9hZGVkIHx8ICFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbG9hZGVkID0gdHJ1ZVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIG9uU2lnbmFsRXhpdCdzIHRoYXQgYXJlIGluIHBsYXkuXG4gICAgLy8gSXQncyBpbXBvcnRhbnQgc28gdGhhdCB3ZSBjYW4gY291bnQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mXG4gICAgLy8gbGlzdGVuZXJzIG9uIHNpZ25hbHMsIGFuZCBkb24ndCB3YWl0IGZvciB0aGUgb3RoZXIgb25lIHRvXG4gICAgLy8gaGFuZGxlIGl0IGluc3RlYWQgb2YgdXMuXG4gICAgZW1pdHRlci5jb3VudCArPSAxXG5cbiAgICBzaWduYWxzID0gc2lnbmFscy5maWx0ZXIoZnVuY3Rpb24gKHNpZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJvY2Vzcy5vbihzaWcsIHNpZ0xpc3RlbmVyc1tzaWddKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHByb2Nlc3MuZW1pdCA9IHByb2Nlc3NFbWl0XG4gICAgcHJvY2Vzcy5yZWFsbHlFeGl0ID0gcHJvY2Vzc1JlYWxseUV4aXRcbiAgfVxuICBtb2R1bGUuZXhwb3J0cy5sb2FkID0gbG9hZFxuXG4gIHZhciBvcmlnaW5hbFByb2Nlc3NSZWFsbHlFeGl0ID0gcHJvY2Vzcy5yZWFsbHlFeGl0XG4gIHZhciBwcm9jZXNzUmVhbGx5RXhpdCA9IGZ1bmN0aW9uIHByb2Nlc3NSZWFsbHlFeGl0IChjb2RlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IGNvZGUgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gMFxuICAgIGVtaXQoJ2V4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZW1pdCgnYWZ0ZXJleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIG9yaWdpbmFsUHJvY2Vzc1JlYWxseUV4aXQuY2FsbChwcm9jZXNzLCBwcm9jZXNzLmV4aXRDb2RlKVxuICB9XG5cbiAgdmFyIG9yaWdpbmFsUHJvY2Vzc0VtaXQgPSBwcm9jZXNzLmVtaXRcbiAgdmFyIHByb2Nlc3NFbWl0ID0gZnVuY3Rpb24gcHJvY2Vzc0VtaXQgKGV2LCBhcmcpIHtcbiAgICBpZiAoZXYgPT09ICdleGl0JyAmJiBwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGFyZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSBhcmdcbiAgICAgIH1cbiAgICAgIHZhciByZXQgPSBvcmlnaW5hbFByb2Nlc3NFbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBlbWl0KCdleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBlbWl0KCdhZnRlcmV4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiByZXRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsUHJvY2Vzc0VtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHtQYXNzVGhyb3VnaDogUGFzc1Rocm91Z2hTdHJlYW19ID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gb3B0aW9ucyA9PiB7XG5cdG9wdGlvbnMgPSB7Li4ub3B0aW9uc307XG5cblx0Y29uc3Qge2FycmF5fSA9IG9wdGlvbnM7XG5cdGxldCB7ZW5jb2Rpbmd9ID0gb3B0aW9ucztcblx0Y29uc3QgaXNCdWZmZXIgPSBlbmNvZGluZyA9PT0gJ2J1ZmZlcic7XG5cdGxldCBvYmplY3RNb2RlID0gZmFsc2U7XG5cblx0aWYgKGFycmF5KSB7XG5cdFx0b2JqZWN0TW9kZSA9ICEoZW5jb2RpbmcgfHwgaXNCdWZmZXIpO1xuXHR9IGVsc2Uge1xuXHRcdGVuY29kaW5nID0gZW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXHR9XG5cblx0aWYgKGlzQnVmZmVyKSB7XG5cdFx0ZW5jb2RpbmcgPSBudWxsO1xuXHR9XG5cblx0Y29uc3Qgc3RyZWFtID0gbmV3IFBhc3NUaHJvdWdoU3RyZWFtKHtvYmplY3RNb2RlfSk7XG5cblx0aWYgKGVuY29kaW5nKSB7XG5cdFx0c3RyZWFtLnNldEVuY29kaW5nKGVuY29kaW5nKTtcblx0fVxuXG5cdGxldCBsZW5ndGggPSAwO1xuXHRjb25zdCBjaHVua3MgPSBbXTtcblxuXHRzdHJlYW0ub24oJ2RhdGEnLCBjaHVuayA9PiB7XG5cdFx0Y2h1bmtzLnB1c2goY2h1bmspO1xuXG5cdFx0aWYgKG9iamVjdE1vZGUpIHtcblx0XHRcdGxlbmd0aCA9IGNodW5rcy5sZW5ndGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxlbmd0aCArPSBjaHVuay5sZW5ndGg7XG5cdFx0fVxuXHR9KTtcblxuXHRzdHJlYW0uZ2V0QnVmZmVyZWRWYWx1ZSA9ICgpID0+IHtcblx0XHRpZiAoYXJyYXkpIHtcblx0XHRcdHJldHVybiBjaHVua3M7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQnVmZmVyID8gQnVmZmVyLmNvbmNhdChjaHVua3MsIGxlbmd0aCkgOiBjaHVua3Muam9pbignJyk7XG5cdH07XG5cblx0c3RyZWFtLmdldEJ1ZmZlcmVkTGVuZ3RoID0gKCkgPT4gbGVuZ3RoO1xuXG5cdHJldHVybiBzdHJlYW07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHtjb25zdGFudHM6IEJ1ZmZlckNvbnN0YW50c30gPSByZXF1aXJlKCdidWZmZXInKTtcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuY29uc3Qge3Byb21pc2lmeX0gPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCBidWZmZXJTdHJlYW0gPSByZXF1aXJlKCcuL2J1ZmZlci1zdHJlYW0nKTtcblxuY29uc3Qgc3RyZWFtUGlwZWxpbmVQcm9taXNpZmllZCA9IHByb21pc2lmeShzdHJlYW0ucGlwZWxpbmUpO1xuXG5jbGFzcyBNYXhCdWZmZXJFcnJvciBleHRlbmRzIEVycm9yIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoJ21heEJ1ZmZlciBleGNlZWRlZCcpO1xuXHRcdHRoaXMubmFtZSA9ICdNYXhCdWZmZXJFcnJvcic7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U3RyZWFtKGlucHV0U3RyZWFtLCBvcHRpb25zKSB7XG5cdGlmICghaW5wdXRTdHJlYW0pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGEgc3RyZWFtJyk7XG5cdH1cblxuXHRvcHRpb25zID0ge1xuXHRcdG1heEJ1ZmZlcjogSW5maW5pdHksXG5cdFx0Li4ub3B0aW9uc1xuXHR9O1xuXG5cdGNvbnN0IHttYXhCdWZmZXJ9ID0gb3B0aW9ucztcblx0Y29uc3Qgc3RyZWFtID0gYnVmZmVyU3RyZWFtKG9wdGlvbnMpO1xuXG5cdGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRjb25zdCByZWplY3RQcm9taXNlID0gZXJyb3IgPT4ge1xuXHRcdFx0Ly8gRG9uJ3QgcmV0cmlldmUgYW4gb3ZlcnNpemVkIGJ1ZmZlci5cblx0XHRcdGlmIChlcnJvciAmJiBzdHJlYW0uZ2V0QnVmZmVyZWRMZW5ndGgoKSA8PSBCdWZmZXJDb25zdGFudHMuTUFYX0xFTkdUSCkge1xuXHRcdFx0XHRlcnJvci5idWZmZXJlZERhdGEgPSBzdHJlYW0uZ2V0QnVmZmVyZWRWYWx1ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdH07XG5cblx0XHQoYXN5bmMgKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgc3RyZWFtUGlwZWxpbmVQcm9taXNpZmllZChpbnB1dFN0cmVhbSwgc3RyZWFtKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0cmVqZWN0UHJvbWlzZShlcnJvcik7XG5cdFx0XHR9XG5cdFx0fSkoKTtcblxuXHRcdHN0cmVhbS5vbignZGF0YScsICgpID0+IHtcblx0XHRcdGlmIChzdHJlYW0uZ2V0QnVmZmVyZWRMZW5ndGgoKSA+IG1heEJ1ZmZlcikge1xuXHRcdFx0XHRyZWplY3RQcm9taXNlKG5ldyBNYXhCdWZmZXJFcnJvcigpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cblx0cmV0dXJuIHN0cmVhbS5nZXRCdWZmZXJlZFZhbHVlKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3RyZWFtO1xubW9kdWxlLmV4cG9ydHMuYnVmZmVyID0gKHN0cmVhbSwgb3B0aW9ucykgPT4gZ2V0U3RyZWFtKHN0cmVhbSwgey4uLm9wdGlvbnMsIGVuY29kaW5nOiAnYnVmZmVyJ30pO1xubW9kdWxlLmV4cG9ydHMuYXJyYXkgPSAoc3RyZWFtLCBvcHRpb25zKSA9PiBnZXRTdHJlYW0oc3RyZWFtLCB7Li4ub3B0aW9ucywgYXJyYXk6IHRydWV9KTtcbm1vZHVsZS5leHBvcnRzLk1heEJ1ZmZlckVycm9yID0gTWF4QnVmZmVyRXJyb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IFBhc3NUaHJvdWdoIH0gPSByZXF1aXJlKCdzdHJlYW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoLypzdHJlYW1zLi4uKi8pIHtcbiAgdmFyIHNvdXJjZXMgPSBbXVxuICB2YXIgb3V0cHV0ICA9IG5ldyBQYXNzVGhyb3VnaCh7b2JqZWN0TW9kZTogdHJ1ZX0pXG5cbiAgb3V0cHV0LnNldE1heExpc3RlbmVycygwKVxuXG4gIG91dHB1dC5hZGQgPSBhZGRcbiAgb3V0cHV0LmlzRW1wdHkgPSBpc0VtcHR5XG5cbiAgb3V0cHV0Lm9uKCd1bnBpcGUnLCByZW1vdmUpXG5cbiAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5mb3JFYWNoKGFkZClcblxuICByZXR1cm4gb3V0cHV0XG5cbiAgZnVuY3Rpb24gYWRkIChzb3VyY2UpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICBzb3VyY2UuZm9yRWFjaChhZGQpXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHNvdXJjZXMucHVzaChzb3VyY2UpO1xuICAgIHNvdXJjZS5vbmNlKCdlbmQnLCByZW1vdmUuYmluZChudWxsLCBzb3VyY2UpKVxuICAgIHNvdXJjZS5vbmNlKCdlcnJvcicsIG91dHB1dC5lbWl0LmJpbmQob3V0cHV0LCAnZXJyb3InKSlcbiAgICBzb3VyY2UucGlwZShvdXRwdXQsIHtlbmQ6IGZhbHNlfSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZnVuY3Rpb24gaXNFbXB0eSAoKSB7XG4gICAgcmV0dXJuIHNvdXJjZXMubGVuZ3RoID09IDA7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUgKHNvdXJjZSkge1xuICAgIHNvdXJjZXMgPSBzb3VyY2VzLmZpbHRlcihmdW5jdGlvbiAoaXQpIHsgcmV0dXJuIGl0ICE9PSBzb3VyY2UgfSlcbiAgICBpZiAoIXNvdXJjZXMubGVuZ3RoICYmIG91dHB1dC5yZWFkYWJsZSkgeyBvdXRwdXQuZW5kKCkgfVxuICB9XG59XG4iLCAiaW1wb3J0IGNhYyBmcm9tICdjYWMnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7XG5pbXBvcnQgKiBhcyBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzJztcblxuY29uc3QgY2xpID0gY2FjKCd3eHQnKTtcbmNsaS5oZWxwKCk7XG5jbGkudmVyc2lvbih2ZXJzaW9uKTtcblxuY2xpLm9wdGlvbignLS1kZWJ1ZycsICdlbmFibGUgZGVidWcgbW9kZScpO1xuXG4vLyBERVZcbmNsaVxuICAuY29tbWFuZCgnW3Jvb3RdJywgJ3N0YXJ0IGRldiBzZXJ2ZXInKVxuICAub3B0aW9uKCctYywgLS1jb25maWcgPGZpbGU+JywgJ3VzZSBzcGVjaWZpZWQgY29uZmlnIGZpbGUnKVxuICAub3B0aW9uKCctbSwgLS1tb2RlIDxtb2RlPicsICdzZXQgZW52IG1vZGUnKVxuICAub3B0aW9uKCctYiwgLS1icm93c2VyIDxicm93c2VyPicsICdzcGVjaWZ5IGEgYnJvd3NlcicpXG4gIC5vcHRpb24oJy0tbXYzJywgJ3RhcmdldCBtYW5pZmVzdCB2MycpXG4gIC5vcHRpb24oJy0tbXYyJywgJ3RhcmdldCBtYW5pZmVzdCB2MicpXG4gIC5hY3Rpb24oY29tbWFuZHMuZGV2KTtcblxuLy8gQlVJTERcbmNsaVxuICAuY29tbWFuZCgnYnVpbGQgW3Jvb3RdJywgJ2J1aWxkIGZvciBwcm9kdWN0aW9uJylcbiAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxmaWxlPicsICd1c2Ugc3BlY2lmaWVkIGNvbmZpZyBmaWxlJylcbiAgLm9wdGlvbignLW0sIC0tbW9kZSA8bW9kZT4nLCAnc2V0IGVudiBtb2RlJylcbiAgLm9wdGlvbignLWIsIC0tYnJvd3NlciA8YnJvd3Nlcj4nLCAnc3BlY2lmeSBhIGJyb3dzZXInKVxuICAub3B0aW9uKCctLW12MycsICd0YXJnZXQgbWFuaWZlc3QgdjMnKVxuICAub3B0aW9uKCctLW12MicsICd0YXJnZXQgbWFuaWZlc3QgdjInKVxuICAub3B0aW9uKCctLWFuYWx5emUnLCAndmlzdWFsaXplIGV4dGVuc2lvbiBidW5kbGUnKVxuICAuYWN0aW9uKGNvbW1hbmRzLmJ1aWxkKTtcblxuLy8gWklQXG5jbGlcbiAgLmNvbW1hbmQoJ3ppcCBbcm9vdF0nLCAnYnVpbGQgZm9yIHByb2R1Y3Rpb24gYW5kIHppcCBvdXRwdXQnKVxuICAub3B0aW9uKCctYywgLS1jb25maWcgPGZpbGU+JywgJ3VzZSBzcGVjaWZpZWQgY29uZmlnIGZpbGUnKVxuICAub3B0aW9uKCctbSwgLS1tb2RlIDxtb2RlPicsICdzZXQgZW52IG1vZGUnKVxuICAub3B0aW9uKCctYiwgLS1icm93c2VyIDxicm93c2VyPicsICdzcGVjaWZ5IGEgYnJvd3NlcicpXG4gIC5vcHRpb24oJy0tbXYzJywgJ3RhcmdldCBtYW5pZmVzdCB2MycpXG4gIC5vcHRpb24oJy0tbXYyJywgJ3RhcmdldCBtYW5pZmVzdCB2MicpXG4gIC5hY3Rpb24oY29tbWFuZHMuemlwKTtcblxuLy8gUFJFUEFSRVxuY2xpXG4gIC5jb21tYW5kKCdwcmVwYXJlIFtyb290XScsICdwcmVwYXJlIHR5cGVzY3JpcHQgcHJvamVjdCcpXG4gIC5vcHRpb24oJy1jLCAtLWNvbmZpZyA8ZmlsZT4nLCAndXNlIHNwZWNpZmllZCBjb25maWcgZmlsZScpXG4gIC5hY3Rpb24oY29tbWFuZHMucHJlcGFyZSk7XG5cbi8vIENMRUFOXG5jbGlcbiAgLmNvbW1hbmQoJ2NsZWFuIFtyb290XScsICdjbGVhbiBnZW5lcmF0ZWQgZmlsZXMgYW5kIGNhY2hlcycpXG4gIC5hbGlhcygnY2xlYW51cCcpXG4gIC5hY3Rpb24oY29tbWFuZHMuY2xlYW4pO1xuXG4vLyBQVUJMSVNIXG5jbGkuY29tbWFuZCgncHVibGlzaCBbcm9vdF0nLCAncHVibGlzaCB0byBzdG9yZXMnKS5hY3Rpb24oY29tbWFuZHMucHVibGlzaCk7XG5cbi8vIElOSVRcbmNsaVxuICAuY29tbWFuZCgnaW5pdCBbZGlyZWN0b3J5XScsICdpbml0aWFsaXplIGEgbmV3IHByb2plY3QnKVxuICAub3B0aW9uKCctdCwgLS10ZW1wbGF0ZSA8dGVtcGxhdGU+JywgJ3RlbXBsYXRlIHRvIHVzZScpXG4gIC5vcHRpb24oJy0tcG0gPHBhY2thZ2VNYW5hZ2VyPicsICd3aGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlJylcbiAgLmFjdGlvbihjb21tYW5kcy5pbml0KTtcblxuY2xpLnBhcnNlKCk7XG4iLCAie1xuICBcIm5hbWVcIjogXCJ3eHRcIixcbiAgXCJ0eXBlXCI6IFwibW9kdWxlXCIsXG4gIFwidmVyc2lvblwiOiBcIjAuNy40XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJOZXh0IGdlbiBmcmFtZXdvcmsgZm9yIGRldmVsb3Bpbmcgd2ViIGV4dGVuc2lvbnNcIixcbiAgXCJlbmdpbmVzXCI6IHtcbiAgICBcIm5vZGVcIjogXCI+PTE4LjE2LjBcIixcbiAgICBcInBucG1cIjogXCI+PThcIlxuICB9LFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3d4dC1kZXYvd3h0XCJcbiAgfSxcbiAgXCJob21lcGFnZVwiOiBcImh0dHBzOi8vd3h0LmRldlwiLFxuICBcImtleXdvcmRzXCI6IFtcbiAgICBcInZpdGVcIixcbiAgICBcImNocm9tZVwiLFxuICAgIFwid2ViXCIsXG4gICAgXCJleHRlbnNpb25cIixcbiAgICBcImJyb3dzZXJcIixcbiAgICBcImJ1bmRsZXJcIixcbiAgICBcImZyYW1ld29ya1wiXG4gIF0sXG4gIFwiYXV0aG9yXCI6IHtcbiAgICBcIm5hbWVcIjogXCJBYXJvbiBLbGlua2VyXCIsXG4gICAgXCJlbWFpbFwiOiBcImFhcm9ua2xpbmtlcjErd3h0QGdtYWlsLmNvbVwiXG4gIH0sXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpblwiLFxuICAgIFwiZGlzdFwiXG4gIF0sXG4gIFwiYmluXCI6IFwiLi9iaW4vd3h0LmNqc1wiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvaW5kZXguY2pzXCIsXG4gIFwibW9kdWxlXCI6IFwiLi9kaXN0L2luZGV4LmpzXCIsXG4gIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICBcImV4cG9ydHNcIjoge1xuICAgIFwiLlwiOiB7XG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvaW5kZXguY2pzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9pbmRleC5qc1wiLFxuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9pbmRleC5kLnRzXCJcbiAgICB9LFxuICAgIFwiLi9jbGllbnRcIjoge1xuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvY2xpZW50LmpzXCIsXG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2NsaWVudC5kLnRzXCJcbiAgICB9LFxuICAgIFwiLi9icm93c2VyXCI6IHtcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2Jyb3dzZXIuanNcIixcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvYnJvd3Nlci5kLnRzXCJcbiAgICB9XG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJ3eHRcIjogXCJ0c3ggc3JjL2NsaS9pbmRleC50c1wiLFxuICAgIFwiYnVpbGRcIjogXCJ0c3ggc2NyaXB0cy9idWlsZC50c1wiLFxuICAgIFwiZm9ybWF0XCI6IFwicHJldHRpZXIgLS13cml0ZSAuXCIsXG4gICAgXCJmb3JtYXQ6Y2hlY2tcIjogXCJwcmV0dGllciAtLXdyaXRlIC5cIixcbiAgICBcImNvbXBpbGVcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJ2aXRlc3RcIixcbiAgICBcInRlc3Q6Y292ZXJhZ2VcIjogXCJ2aXRlc3QgcnVuIC0tY292ZXJhZ2UuZW5hYmxlZCAtLWNvdmVyYWdlLmV4Y2x1ZGU9ZTJlIC0tY292ZXJhZ2UuZXhjbHVkZT1zcmMvdGVzdGluZ1wiLFxuICAgIFwicHJlcGFyZVwiOiBcInNpbXBsZS1naXQtaG9va3NcIixcbiAgICBcInByZXB1Ymxpc2hcIjogXCJwbnBtIC1zIGJ1aWxkXCIsXG4gICAgXCJkb2NzOmRldlwiOiBcInZpdGVwcmVzcyBkZXYgZG9jc1wiLFxuICAgIFwiZG9jczpidWlsZFwiOiBcInZpdGVwcmVzcyBidWlsZCBkb2NzXCIsXG4gICAgXCJkb2NzOnByZXZpZXdcIjogXCJ2aXRlcHJlc3MgcHJldmlldyBkb2NzXCIsXG4gICAgXCJzeW5jLXJlbGVhc2VzXCI6IFwicG5weCBjaGFuZ2Vsb2dlbkBsYXRlc3QgZ2ggcmVsZWFzZVwiXG4gIH0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkB0eXBlcy93ZWJleHRlbnNpb24tcG9seWZpbGxcIjogXCJeMC4xMC4xXCIsXG4gICAgXCJAd2ViZXh0LWNvcmUvZmFrZS1icm93c2VyXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJAd2ViZXh0LWNvcmUvaXNvbGF0ZWQtZWxlbWVudFwiOiBcIl4xLjAuNFwiLFxuICAgIFwiQHdlYmV4dC1jb3JlL21hdGNoLXBhdHRlcm5zXCI6IFwiXjEuMC4yXCIsXG4gICAgXCJhc3luYy1tdXRleFwiOiBcIl4wLjQuMFwiLFxuICAgIFwiYzEyXCI6IFwiXjEuNC4yXCIsXG4gICAgXCJjYWNcIjogXCJeNi43LjE0XCIsXG4gICAgXCJjb25zb2xhXCI6IFwiXjMuMi4zXCIsXG4gICAgXCJlc2J1aWxkXCI6IFwiXjAuMTkuNFwiLFxuICAgIFwiZmFzdC1nbG9iXCI6IFwiXjMuMy4xXCIsXG4gICAgXCJmaWxlc2l6ZVwiOiBcIl4xMC4wLjhcIixcbiAgICBcImZzLWV4dHJhXCI6IFwiXjExLjEuMVwiLFxuICAgIFwiZ2V0LXBvcnRcIjogXCJeNy4wLjBcIixcbiAgICBcImdpZ2V0XCI6IFwiXjEuMS4yXCIsXG4gICAgXCJpbW1lclwiOiBcIl4xMC4wLjJcIixcbiAgICBcImlzLXdzbFwiOiBcIl4zLjAuMFwiLFxuICAgIFwiaml0aVwiOiBcIl4xLjE5LjFcIixcbiAgICBcImpzb241XCI6IFwiXjIuMi4zXCIsXG4gICAgXCJsaW5rZWRvbVwiOiBcIl4wLjE1LjFcIixcbiAgICBcIm1pbmltYXRjaFwiOiBcIl45LjAuM1wiLFxuICAgIFwib3JhXCI6IFwiXjcuMC4xXCIsXG4gICAgXCJwaWNvY29sb3JzXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJwcm9tcHRzXCI6IFwiXjIuNC4yXCIsXG4gICAgXCJyb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXJcIjogXCJeNS45LjJcIixcbiAgICBcInVuaW1wb3J0XCI6IFwiXjMuMS4wXCIsXG4gICAgXCJ2aXRlXCI6IFwiXjQuNC43XCIsXG4gICAgXCJ3ZWItZXh0LXJ1blwiOiBcIl4wLjEuMFwiLFxuICAgIFwid2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCI6IFwiXjAuMTAuMFwiLFxuICAgIFwiemlwLWRpclwiOiBcIl4yLjAuMFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBmYWtlci1qcy9mYWtlclwiOiBcIl44LjAuMlwiLFxuICAgIFwiQHR5cGVzL2ZzLWV4dHJhXCI6IFwiXjExLjAuMVwiLFxuICAgIFwiQHR5cGVzL2xvZGFzaC5tZXJnZVwiOiBcIl40LjYuN1wiLFxuICAgIFwiQHR5cGVzL25vZGVcIjogXCJeMjAuNC41XCIsXG4gICAgXCJAdHlwZXMvcHJvbXB0c1wiOiBcIl4yLjQuNFwiLFxuICAgIFwiQHZpdGVzdC9jb3ZlcmFnZS12OFwiOiBcIl4wLjM0LjFcIixcbiAgICBcImV4ZWNhXCI6IFwiXjcuMi4wXCIsXG4gICAgXCJqc2RvbVwiOiBcIl4yMi4xLjBcIixcbiAgICBcImxpbnQtc3RhZ2VkXCI6IFwiXjE0LjAuMFwiLFxuICAgIFwibG9kYXNoLm1lcmdlXCI6IFwiXjQuNi4yXCIsXG4gICAgXCJucG0tcnVuLWFsbFwiOiBcIl40LjEuNVwiLFxuICAgIFwicHJldHRpZXJcIjogXCJeMy4wLjFcIixcbiAgICBcInNpbXBsZS1naXQtaG9va3NcIjogXCJeMi45LjBcIixcbiAgICBcInRzLW1vcnBoXCI6IFwiXjIwLjAuMFwiLFxuICAgIFwidHN1cFwiOiBcIl43LjEuMFwiLFxuICAgIFwidHN4XCI6IFwiXjMuMTIuN1wiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjIuMlwiLFxuICAgIFwidml0ZXByZXNzXCI6IFwiMS4wLjAtcmMuMTBcIixcbiAgICBcInZpdGVzdFwiOiBcIl4wLjM0LjFcIixcbiAgICBcInZpdGVzdC1tb2NrLWV4dGVuZGVkXCI6IFwiXjEuMS40XCIsXG4gICAgXCJ2dWVcIjogXCJeMy4zLjRcIixcbiAgICBcIndlYmV4dGVuc2lvbi1wb2x5ZmlsbFwiOiBcIl4wLjEwLjBcIlxuICB9LFxuICBcInBlZXJEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwid2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCI6IFwiPj0wLjEwLjBcIlxuICB9LFxuICBcInBhY2thZ2VNYW5hZ2VyXCI6IFwicG5wbUA4LjYuM1wiLFxuICBcInNpbXBsZS1naXQtaG9va3NcIjoge1xuICAgIFwicHJlLWNvbW1pdFwiOiBcInBucG0gbGludC1zdGFnZWRcIlxuICB9LFxuICBcImxpbnQtc3RhZ2VkXCI6IHtcbiAgICBcIipcIjogXCJwcmV0dGllciAtLXdyaXRlXCJcbiAgfSxcbiAgXCJjaGFuZ2Vsb2dcIjoge1xuICAgIFwiZXhjbHVkZUF1dGhvcnNcIjogW1xuICAgICAgXCJhYXJvbmtsaW5rZXIxQGdtYWlsLmNvbVwiXG4gICAgXVxuICB9LFxuICBcInBucG1cIjoge1xuICAgIFwicGVlckRlcGVuZGVuY3lSdWxlc1wiOiB7XG4gICAgICBcImlnbm9yZU1pc3NpbmdcIjogW1xuICAgICAgICBcIkBhbGdvbGlhL2NsaWVudC1zZWFyY2hcIixcbiAgICAgICAgXCJzZWFyY2gtaW5zaWdodHNcIlxuICAgICAgXVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IGxvYWRDb25maWcgfSBmcm9tICdjMTInO1xuaW1wb3J0IHtcbiAgSW5saW5lQ29uZmlnLFxuICBJbnRlcm5hbENvbmZpZyxcbiAgVXNlckNvbmZpZyxcbiAgQ29uZmlnRW52LFxuICBVc2VyTWFuaWZlc3RGbixcbiAgVXNlck1hbmlmZXN0LFxuICBXeHRWaXRlQ29uZmlnLFxuICBFeHRlbnNpb25SdW5uZXJDb25maWcsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgY3JlYXRlRnNDYWNoZSB9IGZyb20gJy4vY3JlYXRlRnNDYWNoZSc7XG5pbXBvcnQgY29uc29sYSwgeyBMb2dMZXZlbHMgfSBmcm9tICdjb25zb2xhJztcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi4vdml0ZS1wbHVnaW5zJztcbmltcG9ydCB7IGdldEdsb2JhbHMgfSBmcm9tICcuL2dsb2JhbHMnO1xuXG4vKipcbiAqIEdpdmVuIGFuIGlubGluZSBjb25maWcsIGRpc2NvdmVyIHRoZSBjb25maWcgZmlsZSBpZiBuZWNlc3NhcnksIG1lcmdlIHRoZSByZXN1bHRzLCByZXNvbHZlIGFueVxuICogcmVsYXRpdmUgcGF0aHMsIGFuZCBhcHBseSBhbnkgZGVmYXVsdHMuXG4gKlxuICogSW5saW5lIGNvbmZpZyBhbHdheXMgaGFzIHByaW9yaXR5IG92ZXIgdXNlciBjb25maWcuIENsaSBmbGFncyBhcmUgcGFzc2VkIGFzIGlubGluZSBjb25maWcgaWYgc2V0LlxuICogSWYgdW5zZXQsIHVuZGVmaW5lZCBpcyBwYXNzZWQgaW4sIGxldHRpbmcgdGhpcyBmdW5jdGlvbiBkZWNpZGUgZGVmYXVsdCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRJbnRlcm5hbENvbmZpZyhcbiAgaW5saW5lQ29uZmlnOiBJbmxpbmVDb25maWcsXG4gIGNvbW1hbmQ6ICdidWlsZCcgfCAnc2VydmUnLFxuKTogUHJvbWlzZTxJbnRlcm5hbENvbmZpZz4ge1xuICAvLyBMb2FkIHVzZXIgY29uZmlnXG5cbiAgbGV0IHVzZXJDb25maWc6IFVzZXJDb25maWcgPSB7fTtcbiAgbGV0IHVzZXJDb25maWdNZXRhZGF0YTogSW50ZXJuYWxDb25maWdbJ3VzZXJDb25maWdNZXRhZGF0YSddIHwgdW5kZWZpbmVkO1xuICBpZiAoaW5saW5lQ29uZmlnLmNvbmZpZ0ZpbGUgIT09IGZhbHNlKSB7XG4gICAgY29uc3QgeyBjb25maWc6IGxvYWRlZENvbmZpZywgLi4ubWV0YWRhdGEgfSA9IGF3YWl0IGxvYWRDb25maWc8VXNlckNvbmZpZz4oe1xuICAgICAgbmFtZTogJ3d4dCcsXG4gICAgICBjd2Q6IGlubGluZUNvbmZpZy5yb290ID8/IHByb2Nlc3MuY3dkKCksXG4gICAgICByY0ZpbGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIHVzZXJDb25maWcgPSBsb2FkZWRDb25maWcgPz8ge307XG4gICAgdXNlckNvbmZpZ01ldGFkYXRhID0gbWV0YWRhdGE7XG4gIH1cblxuICAvLyBNZXJnZSBpdCBpbnRvIHRoZSBpbmxpbmUgY29uZmlnXG5cbiAgY29uc3QgbWVyZ2VkQ29uZmlnID0gbWVyZ2VJbmxpbmVDb25maWcoaW5saW5lQ29uZmlnLCB1c2VyQ29uZmlnKTtcblxuICAvLyBBcHBseSBkZWZhdWx0cyB0byBtYWtlIGludGVybmFsIGNvbmZpZy5cblxuICBjb25zdCBkZWJ1ZyA9IG1lcmdlZENvbmZpZy5kZWJ1ZyA/PyBmYWxzZTtcbiAgY29uc3QgbG9nZ2VyID0gbWVyZ2VkQ29uZmlnLmxvZ2dlciA/PyBjb25zb2xhO1xuICBpZiAoZGVidWcpIGxvZ2dlci5sZXZlbCA9IExvZ0xldmVscy5kZWJ1ZztcblxuICBjb25zdCBicm93c2VyID0gbWVyZ2VkQ29uZmlnLmJyb3dzZXIgPz8gJ2Nocm9tZSc7XG4gIGNvbnN0IG1hbmlmZXN0VmVyc2lvbiA9XG4gICAgbWVyZ2VkQ29uZmlnLm1hbmlmZXN0VmVyc2lvbiA/P1xuICAgIChicm93c2VyID09PSAnZmlyZWZveCcgfHwgYnJvd3NlciA9PT0gJ3NhZmFyaScgPyAyIDogMyk7XG4gIGNvbnN0IG1vZGUgPVxuICAgIG1lcmdlZENvbmZpZy5tb2RlID8/IChjb21tYW5kID09PSAnYnVpbGQnID8gJ3Byb2R1Y3Rpb24nIDogJ2RldmVsb3BtZW50Jyk7XG4gIGNvbnN0IGVudjogQ29uZmlnRW52ID0geyBicm93c2VyLCBjb21tYW5kLCBtYW5pZmVzdFZlcnNpb24sIG1vZGUgfTtcblxuICBjb25zdCByb290ID0gcGF0aC5yZXNvbHZlKFxuICAgIGlubGluZUNvbmZpZy5yb290ID8/IHVzZXJDb25maWcucm9vdCA/PyBwcm9jZXNzLmN3ZCgpLFxuICApO1xuICBjb25zdCB3eHREaXIgPSBwYXRoLnJlc29sdmUocm9vdCwgJy53eHQnKTtcbiAgY29uc3Qgc3JjRGlyID0gcGF0aC5yZXNvbHZlKHJvb3QsIG1lcmdlZENvbmZpZy5zcmNEaXIgPz8gcm9vdCk7XG4gIGNvbnN0IGVudHJ5cG9pbnRzRGlyID0gcGF0aC5yZXNvbHZlKFxuICAgIHNyY0RpcixcbiAgICBtZXJnZWRDb25maWcuZW50cnlwb2ludHNEaXIgPz8gJ2VudHJ5cG9pbnRzJyxcbiAgKTtcbiAgY29uc3QgcHVibGljRGlyID0gcGF0aC5yZXNvbHZlKHNyY0RpciwgbWVyZ2VkQ29uZmlnLnB1YmxpY0RpciA/PyAncHVibGljJyk7XG4gIGNvbnN0IHR5cGVzRGlyID0gcGF0aC5yZXNvbHZlKHd4dERpciwgJ3R5cGVzJyk7XG4gIGNvbnN0IG91dEJhc2VEaXIgPSBwYXRoLnJlc29sdmUocm9vdCwgJy5vdXRwdXQnKTtcbiAgY29uc3Qgb3V0RGlyID0gcGF0aC5yZXNvbHZlKG91dEJhc2VEaXIsIGAke2Jyb3dzZXJ9LW12JHttYW5pZmVzdFZlcnNpb259YCk7XG5cbiAgY29uc3QgcnVubmVyQ29uZmlnID0gYXdhaXQgbG9hZENvbmZpZzxFeHRlbnNpb25SdW5uZXJDb25maWc+KHtcbiAgICBuYW1lOiAnd2ViLWV4dCcsXG4gICAgY3dkOiByb290LFxuICAgIGdsb2JhbFJjOiB0cnVlLFxuICAgIHJjRmlsZTogJy53ZWJleHRyYycsXG4gICAgb3ZlcnJpZGVzOiBpbmxpbmVDb25maWcucnVubmVyLFxuICAgIGRlZmF1bHRzOiB1c2VyQ29uZmlnLnJ1bm5lcixcbiAgfSk7XG5cbiAgY29uc3QgZmluYWxDb25maWc6IEludGVybmFsQ29uZmlnID0ge1xuICAgIGJyb3dzZXIsXG4gICAgY29tbWFuZCxcbiAgICBkZWJ1ZyxcbiAgICBlbnRyeXBvaW50c0RpcixcbiAgICBlbnYsXG4gICAgZnNDYWNoZTogY3JlYXRlRnNDYWNoZSh3eHREaXIpLFxuICAgIGltcG9ydHM6IG1lcmdlZENvbmZpZy5pbXBvcnRzID8/IHt9LFxuICAgIGxvZ2dlcixcbiAgICBtYW5pZmVzdDogYXdhaXQgcmVzb2x2ZU1hbmlmZXN0Q29uZmlnKGVudiwgbWVyZ2VkQ29uZmlnLm1hbmlmZXN0KSxcbiAgICBtYW5pZmVzdFZlcnNpb24sXG4gICAgbW9kZSxcbiAgICBvdXRCYXNlRGlyLFxuICAgIG91dERpcixcbiAgICBwdWJsaWNEaXIsXG4gICAgcm9vdCxcbiAgICBydW5uZXJDb25maWcsXG4gICAgc3JjRGlyLFxuICAgIHR5cGVzRGlyLFxuICAgIHZpdGU6ICgpID0+ICh7fSksIC8vIFJlYWwgdmFsdWUgYWRkZWQgYWZ0ZXIgdGhpcyBvYmplY3QgaXMgaW5pdGlhbGl6ZWQuXG4gICAgd3h0RGlyLFxuICAgIHppcDogcmVzb2x2ZUludGVybmFsWmlwQ29uZmlnKHJvb3QsIG1lcmdlZENvbmZpZyksXG4gICAgdHJhbnNmb3JtTWFuaWZlc3QobWFuaWZlc3QpIHtcbiAgICAgIHVzZXJDb25maWcudHJhbnNmb3JtTWFuaWZlc3Q/LihtYW5pZmVzdCk7XG4gICAgICBpbmxpbmVDb25maWcudHJhbnNmb3JtTWFuaWZlc3Q/LihtYW5pZmVzdCk7XG4gICAgfSxcbiAgICBhbmFseXNpczoge1xuICAgICAgZW5hYmxlZDogbWVyZ2VkQ29uZmlnLmFuYWx5c2lzPy5lbmFibGVkID8/IGZhbHNlLFxuICAgICAgdGVtcGxhdGU6IG1lcmdlZENvbmZpZy5hbmFseXNpcz8udGVtcGxhdGUgPz8gJ3RyZWVtYXAnLFxuICAgIH0sXG4gICAgdXNlckNvbmZpZ01ldGFkYXRhOiB1c2VyQ29uZmlnTWV0YWRhdGEgPz8ge30sXG4gIH07XG5cbiAgZmluYWxDb25maWcudml0ZSA9IChlbnYpID0+XG4gICAgcmVzb2x2ZUludGVybmFsVml0ZUNvbmZpZyhlbnYsIG1lcmdlZENvbmZpZywgZmluYWxDb25maWcpO1xuXG4gIHJldHVybiBmaW5hbENvbmZpZztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZU1hbmlmZXN0Q29uZmlnKFxuICBlbnY6IENvbmZpZ0VudixcbiAgbWFuaWZlc3Q6IFVzZXJNYW5pZmVzdCB8IFByb21pc2U8VXNlck1hbmlmZXN0PiB8IFVzZXJNYW5pZmVzdEZuIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxVc2VyTWFuaWZlc3Q+IHtcbiAgcmV0dXJuIGF3YWl0ICh0eXBlb2YgbWFuaWZlc3QgPT09ICdmdW5jdGlvbidcbiAgICA/IG1hbmlmZXN0KGVudilcbiAgICA6IG1hbmlmZXN0ID8/IHt9KTtcbn1cblxuLyoqXG4gKiBNZXJnZSB0aGUgaW5saW5lIGNvbmZpZyBhbmQgdXNlciBjb25maWcuIElubGluZSBjb25maWcgaXMgZ2l2ZW4gcHJpb3JpdHkuIERlZmF1bHRzIGFyZSBub3QgYXBwbGllZCBoZXJlLlxuICovXG5mdW5jdGlvbiBtZXJnZUlubGluZUNvbmZpZyhcbiAgaW5saW5lQ29uZmlnOiBJbmxpbmVDb25maWcsXG4gIHVzZXJDb25maWc6IFVzZXJDb25maWcsXG4pOiBJbmxpbmVDb25maWcge1xuICBsZXQgaW1wb3J0czogSW5saW5lQ29uZmlnWydpbXBvcnRzJ107XG4gIGlmIChpbmxpbmVDb25maWcuaW1wb3J0cyA9PT0gZmFsc2UgfHwgdXNlckNvbmZpZy5pbXBvcnRzID09PSBmYWxzZSkge1xuICAgIGltcG9ydHMgPSBmYWxzZTtcbiAgfSBlbHNlIGlmICh1c2VyQ29uZmlnLmltcG9ydHMgPT0gbnVsbCAmJiBpbmxpbmVDb25maWcuaW1wb3J0cyA9PSBudWxsKSB7XG4gICAgaW1wb3J0cyA9IHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICBpbXBvcnRzID0gdml0ZS5tZXJnZUNvbmZpZyhcbiAgICAgIHVzZXJDb25maWcuaW1wb3J0cyA/PyB7fSxcbiAgICAgIGlubGluZUNvbmZpZy5pbXBvcnRzID8/IHt9LFxuICAgICk7XG4gIH1cbiAgY29uc3QgbWFuaWZlc3Q6IFVzZXJNYW5pZmVzdEZuID0gYXN5bmMgKGVudikgPT4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCByZXNvbHZlTWFuaWZlc3RDb25maWcoZW52LCB1c2VyQ29uZmlnLm1hbmlmZXN0KTtcbiAgICBjb25zdCBpbmxpbmUgPSBhd2FpdCByZXNvbHZlTWFuaWZlc3RDb25maWcoZW52LCBpbmxpbmVDb25maWcubWFuaWZlc3QpO1xuICAgIHJldHVybiB2aXRlLm1lcmdlQ29uZmlnKHVzZXIsIGlubGluZSk7XG4gIH07XG4gIGNvbnN0IHZpdGVDb25maWcgPSBhc3luYyAoZW52OiBDb25maWdFbnYpOiBQcm9taXNlPFd4dFZpdGVDb25maWc+ID0+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgdXNlckNvbmZpZy52aXRlPy4oZW52KTtcbiAgICBjb25zdCBpbmxpbmUgPSBhd2FpdCBpbmxpbmVDb25maWcudml0ZT8uKGVudik7XG4gICAgcmV0dXJuIHZpdGUubWVyZ2VDb25maWcodXNlciA/PyB7fSwgaW5saW5lID8/IHt9KTtcbiAgfTtcbiAgY29uc3QgcnVubmVyOiBJbmxpbmVDb25maWdbJ3J1bm5lciddID0gdml0ZS5tZXJnZUNvbmZpZyhcbiAgICB1c2VyQ29uZmlnLnJ1bm5lciA/PyB7fSxcbiAgICBpbmxpbmVDb25maWcucnVubmVyID8/IHt9LFxuICApO1xuICBjb25zdCB6aXA6IElubGluZUNvbmZpZ1snemlwJ10gPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgIHVzZXJDb25maWcuemlwID8/IHt9LFxuICAgIGlubGluZUNvbmZpZy56aXAgPz8ge30sXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICByb290OiBpbmxpbmVDb25maWcucm9vdCA/PyB1c2VyQ29uZmlnLnJvb3QsXG4gICAgYnJvd3NlcjogaW5saW5lQ29uZmlnLmJyb3dzZXIgPz8gdXNlckNvbmZpZy5icm93c2VyLFxuICAgIG1hbmlmZXN0VmVyc2lvbjogaW5saW5lQ29uZmlnLm1hbmlmZXN0VmVyc2lvbiA/PyB1c2VyQ29uZmlnLm1hbmlmZXN0VmVyc2lvbixcbiAgICBjb25maWdGaWxlOiBpbmxpbmVDb25maWcuY29uZmlnRmlsZSxcbiAgICBkZWJ1ZzogaW5saW5lQ29uZmlnLmRlYnVnID8/IHVzZXJDb25maWcuZGVidWcsXG4gICAgZW50cnlwb2ludHNEaXI6IGlubGluZUNvbmZpZy5lbnRyeXBvaW50c0RpciA/PyB1c2VyQ29uZmlnLmVudHJ5cG9pbnRzRGlyLFxuICAgIGltcG9ydHMsXG4gICAgbG9nZ2VyOiBpbmxpbmVDb25maWcubG9nZ2VyID8/IHVzZXJDb25maWcubG9nZ2VyLFxuICAgIG1hbmlmZXN0LFxuICAgIG1vZGU6IGlubGluZUNvbmZpZy5tb2RlID8/IHVzZXJDb25maWcubW9kZSxcbiAgICBwdWJsaWNEaXI6IGlubGluZUNvbmZpZy5wdWJsaWNEaXIgPz8gdXNlckNvbmZpZy5wdWJsaWNEaXIsXG4gICAgcnVubmVyLFxuICAgIHNyY0RpcjogaW5saW5lQ29uZmlnLnNyY0RpciA/PyB1c2VyQ29uZmlnLnNyY0RpcixcbiAgICB2aXRlOiB2aXRlQ29uZmlnLFxuICAgIHppcCxcbiAgICBhbmFseXNpczoge1xuICAgICAgZW5hYmxlZDogaW5saW5lQ29uZmlnLmFuYWx5c2lzPy5lbmFibGVkID8/IHVzZXJDb25maWcuYW5hbHlzaXM/LmVuYWJsZWQsXG4gICAgICB0ZW1wbGF0ZTpcbiAgICAgICAgaW5saW5lQ29uZmlnLmFuYWx5c2lzPy50ZW1wbGF0ZSA/PyB1c2VyQ29uZmlnLmFuYWx5c2lzPy50ZW1wbGF0ZSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlSW50ZXJuYWxaaXBDb25maWcoXG4gIHJvb3Q6IHN0cmluZyxcbiAgbWVyZ2VkQ29uZmlnOiBJbmxpbmVDb25maWcsXG4pOiBJbnRlcm5hbENvbmZpZ1snemlwJ10ge1xuICByZXR1cm4ge1xuICAgIHNvdXJjZXNUZW1wbGF0ZTogJ3t7bmFtZX19LXt7dmVyc2lvbn19LXNvdXJjZXMuemlwJyxcbiAgICBhcnRpZmFjdFRlbXBsYXRlOiAne3tuYW1lfX0te3t2ZXJzaW9ufX0te3ticm93c2VyfX0uemlwJyxcbiAgICBzb3VyY2VzUm9vdDogcm9vdCxcbiAgICAuLi5tZXJnZWRDb25maWcuemlwLFxuICAgIGlnbm9yZWRTb3VyY2VzOiBbXG4gICAgICAnKiovbm9kZV9tb2R1bGVzJyxcbiAgICAgIC8vIFdYVCBmaWxlc1xuICAgICAgJyoqL3dlYi1leHQuY29uZmlnLnRzJyxcbiAgICAgIC8vIEhpZGRlbiBmaWxlc1xuICAgICAgJyoqLy4qJyxcbiAgICAgIC8vIFRlc3RzXG4gICAgICAnKiovX190ZXN0c19fLyoqJyxcbiAgICAgICcqKi8qLisodGVzdHxzcGVjKS4/KGN8bSkrKGp8dClzPyh4KScsXG4gICAgICAvLyBGcm9tIHVzZXJcbiAgICAgIC4uLihtZXJnZWRDb25maWcuemlwPy5pZ25vcmVkU291cmNlcyA/PyBbXSksXG4gICAgXSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUludGVybmFsVml0ZUNvbmZpZyhcbiAgZW52OiBDb25maWdFbnYsXG4gIG1lcmdlZENvbmZpZzogSW5saW5lQ29uZmlnLFxuICBmaW5hbENvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pIHtcbiAgY29uc3QgaW50ZXJuYWxWaXRlOiB2aXRlLklubGluZUNvbmZpZyA9XG4gICAgKGF3YWl0IG1lcmdlZENvbmZpZy52aXRlPy4oZW52KSkgPz8ge307XG5cbiAgaW50ZXJuYWxWaXRlLnJvb3QgPSBmaW5hbENvbmZpZy5yb290O1xuICBpbnRlcm5hbFZpdGUuY29uZmlnRmlsZSA9IGZhbHNlO1xuICBpbnRlcm5hbFZpdGUubG9nTGV2ZWwgPSAnd2Fybic7XG4gIGludGVybmFsVml0ZS5tb2RlID0gZW52Lm1vZGU7XG5cbiAgaW50ZXJuYWxWaXRlLmJ1aWxkID8/PSB7fTtcbiAgaW50ZXJuYWxWaXRlLmJ1aWxkLm91dERpciA9IGZpbmFsQ29uZmlnLm91dERpcjtcbiAgaW50ZXJuYWxWaXRlLmJ1aWxkLmVtcHR5T3V0RGlyID0gZmFsc2U7XG5cbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMgPz89IFtdO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMuZG93bmxvYWQoZmluYWxDb25maWcpKTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLmRldkh0bWxQcmVyZW5kZXIoZmluYWxDb25maWcpKTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLnVuaW1wb3J0KGZpbmFsQ29uZmlnKSk7XG4gIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2goXG4gICAgcGx1Z2lucy52aXJ0dWFsRW50cnlwb2luKCdiYWNrZ3JvdW5kJywgZmluYWxDb25maWcpLFxuICApO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKFxuICAgIHBsdWdpbnMudmlydHVhbEVudHJ5cG9pbignY29udGVudC1zY3JpcHQnLCBmaW5hbENvbmZpZyksXG4gICk7XG4gIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy5kZXZTZXJ2ZXJHbG9iYWxzKGZpbmFsQ29uZmlnKSk7XG4gIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy50c2NvbmZpZ1BhdGhzKGZpbmFsQ29uZmlnKSk7XG4gIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy5ub29wQmFja2dyb3VuZCgpKTtcbiAgaWYgKGZpbmFsQ29uZmlnLmFuYWx5c2lzLmVuYWJsZWQpIHtcbiAgICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMuYnVuZGxlQW5hbHlzaXMoKSk7XG4gIH1cblxuICBpbnRlcm5hbFZpdGUuZGVmaW5lID8/PSB7fTtcbiAgZm9yIChjb25zdCBnbG9iYWwgb2YgZ2V0R2xvYmFscyhmaW5hbENvbmZpZykpIHtcbiAgICBpbnRlcm5hbFZpdGUuZGVmaW5lW2dsb2JhbC5uYW1lXSA9IEpTT04uc3RyaW5naWZ5KGdsb2JhbC52YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGludGVybmFsVml0ZTtcbn1cbiIsICJpbXBvcnQgZnMsIHsgZW5zdXJlRGlyIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgRnNDYWNoZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGRpcm5hbWUsIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHdyaXRlRmlsZUlmRGlmZmVyZW50IH0gZnJvbSAnLi9mcyc7XG5cbi8qKlxuICogQSBiYXNpYyBmaWxlIHN5c3RlbSBjYWNoZSBzdG9yZWQgYXQgYDxzcmNEaXI+Ly53eHQvY2FjaGUvPGtleT5gLiBKdXN0IGNhY2hlcyBhIHN0cmluZyBpbiBhXG4gKiBmaWxlIGZvciB0aGUgZ2l2ZW4ga2V5LlxuICpcbiAqIEBwYXJhbSBzcmNEaXIgQWJzb2x1dGUgcGF0aCB0byBzb3VyY2UgZGlyZWN0b3J5LiBTZWUgYEludGVybmFsQ29uZmlnLnNyY0RpcmBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZzQ2FjaGUod3h0RGlyOiBzdHJpbmcpOiBGc0NhY2hlIHtcbiAgY29uc3QgZ2V0UGF0aCA9IChrZXk6IHN0cmluZykgPT5cbiAgICByZXNvbHZlKHd4dERpciwgJ2NhY2hlJywgZW5jb2RlVVJJQ29tcG9uZW50KGtleSkpO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBwYXRoID0gZ2V0UGF0aChrZXkpO1xuICAgICAgYXdhaXQgZW5zdXJlRGlyKGRpcm5hbWUocGF0aCkpO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlSWZEaWZmZXJlbnQocGF0aCwgdmFsdWUpO1xuICAgIH0sXG4gICAgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBnZXRQYXRoKGtleSk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZnMucmVhZEZpbGUocGF0aCwgJ3V0Zi04Jyk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5cbi8qKlxuICogT25seSB3cml0ZSB0aGUgY29udGVudHMgdG8gYSBmaWxlIGlmIGl0IHJlc3VsdHMgaW4gYSBjaGFuZ2UuIFRoaXMgcHJldmVudHMgdW5uZWNlc3NhcnkgZmlsZVxuICogd2F0Y2hlcnMgZnJvbSBiZWluZyB0cmlnZ2VyZWQsIGxpa2UgV1hUJ3MgZGV2IHNlcnZlciBvciB0aGUgVFMgbGFuZ3VhZ2Ugc2VydmVyIGluIGVkaXRvcnMuXG4gKlxuICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgdG8gd3JpdGUgdG8uXG4gKiBAcGFyYW0gbmV3Q29udGVudHMgVGhlIG5ldyB0ZXh0IGNvbnRlbnQgdG8gd3JpdGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUZpbGVJZkRpZmZlcmVudChcbiAgZmlsZTogc3RyaW5nLFxuICBuZXdDb250ZW50czogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGV4aXN0aW5nQ29udGVudHMgPSBhd2FpdCBmc1xuICAgIC5yZWFkRmlsZShmaWxlLCAndXRmLTgnKVxuICAgIC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuXG4gIGlmIChleGlzdGluZ0NvbnRlbnRzICE9PSBuZXdDb250ZW50cykge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCBuZXdDb250ZW50cyk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFbnRyeXBvaW50LCBQZXJCcm93c2VyT3B0aW9uLCBUYXJnZXRCcm93c2VyIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHBhdGgsIHsgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50cnlwb2ludE5hbWUoXG4gIGVudHJ5cG9pbnRzRGlyOiBzdHJpbmcsXG4gIGlucHV0UGF0aDogc3RyaW5nLFxuICAvLyB0eXBlOiBFbnRyeXBvaW50Wyd0eXBlJ10sXG4pOiBzdHJpbmcge1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKGVudHJ5cG9pbnRzRGlyLCBpbnB1dFBhdGgpO1xuICAvLyBHcmFiIHRoZSBzdHJpbmcgdXAgdG8gdGhlIGZpcnN0IC4gb3IgLyBvciBcXFxcXG4gIGNvbnN0IG5hbWUgPSByZWxhdGl2ZVBhdGguc3BsaXQoL1tcXC5cXC9cXFxcXS8sIDIpWzBdO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50cnlwb2ludE91dHB1dEZpbGUoXG4gIGVudHJ5cG9pbnQ6IEVudHJ5cG9pbnQsXG4gIGV4dDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc29sdmUoZW50cnlwb2ludC5vdXRwdXREaXIsIGAke2VudHJ5cG9pbnQubmFtZX0ke2V4dH1gKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4ncyB0aGUgZW50cnlwb2ludCdzIG91dHB1dCBwYXRoIHJlbGF0aXZlIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LiBVc2VkIGZvciBwYXRocyBpbiB0aGVcbiAqIG1hbmlmZXN0IGFuZCByb2xsdXAncyBidW5kbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgZW50cnlwb2ludDogRW50cnlwb2ludCxcbiAgb3V0RGlyOiBzdHJpbmcsXG4gIGV4dDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgoXG4gICAgcmVsYXRpdmUob3V0RGlyLCBnZXRFbnRyeXBvaW50T3V0cHV0RmlsZShlbnRyeXBvaW50LCBleHQpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBlbnRyeXBvaW50IG9wdGlvbiwgcmVzb2x2ZSBpdCdzIHZhbHVlIGJhc2VkIG9uIGEgdGFyZ2V0IGJyb3dzZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGVyQnJvd3Nlck9wdGlvbjxUPihcbiAgb3B0aW9uOiBQZXJCcm93c2VyT3B0aW9uPFQ+LFxuICBicm93c2VyOiBUYXJnZXRCcm93c2VyLFxuKTogVCB7XG4gIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShvcHRpb24pKVxuICAgIHJldHVybiAob3B0aW9uIGFzIGFueSlbYnJvd3Nlcl07XG4gIHJldHVybiBvcHRpb247XG59XG4iLCAiaW1wb3J0IG5vZGVQYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuXG4vKipcbiAqIENvbnZlcnRzIHN5c3RlbSBwYXRocyB0byBub3JtYWxpemVkIGJ1bmRsZXIgcGF0aC4gT24gd2luZG93cyBhbmQgdW5peCwgdGhpcyByZXR1cm5zIHBhdGhzIHdpdGggL1xuICogaW5zdGVhZCBvZiBcXC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZpdGUubm9ybWFsaXplUGF0aChwYXRoKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIG5vcm1hbGl6ZWQgcGF0aCwgY29udmVydCBpdCB0byB0aGUgc3lzdGVtIHBhdGggc3R5bGUuIE9uIFdpbmRvd3MsIHN3aXRjaCB0byBcXCwgb3RoZXJ3aXNlIHVzZSAvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5ub3JtYWxpemVQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBub2RlUGF0aC5ub3JtYWxpemUocGF0aCk7XG59XG5cbmV4cG9ydCBjb25zdCBDU1NfRVhURU5TSU9OUyA9IFsnY3NzJywgJ3Njc3MnLCAnc2FzcycsICdsZXNzJywgJ3N0eWwnLCAnc3R5bHVzJ107XG5cbi8vIC5tb2R1bGUuY3NzIGZpbGVzIGFyZSBub3Qgc3VwcG9ydGVkIGJlY2F1c2UgdGhlc2UgYXJlIGdsb2JhbCBDU1MgZmlsZXMsIHNvIHVzaW5nIENTUyBtb2R1bGVzIGRvZXNuJ3QgbWFrZSBzZW5zZS5cbmV4cG9ydCBjb25zdCBDU1NfRVhURU5TSU9OU19QQVRURVJOID0gYCsoJHtDU1NfRVhURU5TSU9OUy5qb2luKCd8Jyl9KWA7XG4iLCAiaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludE5hbWUgfSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBwYXJzZUhUTUwgfSBmcm9tICdsaW5rZWRvbSc7XG5pbXBvcnQgeyBkaXJuYW1lLCBpc0Fic29sdXRlLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuXG4vLyBDYWNoZSB0aGUgcHJlYW1ibGUgc2NyaXB0IGZvciBhbGwgZGV2SHRtbFByZXJlbmRlciBwbHVnaW5zLCBub3QganVzdCBvbmVcbmxldCByZWFjdFJlZnJlc2hQcmVhbWJsZSA9ICcnO1xuXG4vKipcbiAqIFByZS1yZW5kZXJzIHRoZSBIVE1MIGVudHJ5cG9pbnRzIHdoZW4gYnVpbGRpbmcgdGhlIGV4dGVuc2lvbiB0byBjb25uZWN0IHRvIHRoZSBkZXYgc2VydmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV2SHRtbFByZXJlbmRlcihjb25maWc6IEludGVybmFsQ29uZmlnKTogdml0ZS5QbHVnaW5PcHRpb24ge1xuICBjb25zdCBodG1sUmVsb2FkSWQgPSAnQHd4dC9yZWxvYWQtaHRtbCc7XG4gIGNvbnN0IHJlc29sdmVkSHRtbFJlbG9hZElkID0gcmVzb2x2ZShcbiAgICBjb25maWcucm9vdCxcbiAgICAnbm9kZV9tb2R1bGVzL3d4dC9kaXN0L3ZpcnR1YWwtbW9kdWxlcy9yZWxvYWQtaHRtbC5qcycsXG4gICk7XG4gIGNvbnN0IHZpcnR1YWxSZWFjdFJlZnJlc2hJZCA9ICdAd3h0L3ZpcnR1YWwtcmVhY3QtcmVmcmVzaCc7XG4gIGNvbnN0IHJlc29sdmVkVmlydHVhbFJlYWN0UmVmcmVzaElkID0gJ1xcMCcgKyB2aXJ0dWFsUmVhY3RSZWZyZXNoSWQ7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBhcHBseTogJ2J1aWxkJyxcbiAgICAgIG5hbWU6ICd3eHQ6ZGV2LWh0bWwtcHJlcmVuZGVyJyxcbiAgICAgIGNvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNvbHZlOiB7XG4gICAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgICBbaHRtbFJlbG9hZElkXTogcmVzb2x2ZWRIdG1sUmVsb2FkSWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgLy8gQ29udmVydCBzY3JpcHRzIGxpa2Ugc3JjPVwiLi9tYWluLnRzeFwiIC0+IHNyYz1cImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9lbnRyeXBvaW50cy9wb3B1cC9tYWluLnRzeFwiXG4gICAgICAvLyBiZWZvcmUgdGhlIHBhdGhzIGFyZSByZXBsYWNlZCB3aXRoIHRoZWlyIGJ1bmRsZWQgcGF0aFxuICAgICAgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICAgIGNvbnN0IHNlcnZlciA9IGNvbmZpZy5zZXJ2ZXI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb25maWcuY29tbWFuZCAhPT0gJ3NlcnZlJyB8fFxuICAgICAgICAgIHNlcnZlciA9PSBudWxsIHx8XG4gICAgICAgICAgIWlkLmVuZHNXaXRoKCcuaHRtbCcpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgeyBkb2N1bWVudCB9ID0gcGFyc2VIVE1MKGNvZGUpO1xuXG4gICAgICAgIGNvbnN0IHBvaW50VG9EZXZTZXJ2ZXIgPSAoXG4gICAgICAgICAgcXVlcnlTZWxlY3Rvcjogc3RyaW5nLFxuICAgICAgICAgIGF0dHI6IHN0cmluZyxcbiAgICAgICAgKTogdm9pZCA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyKTtcbiAgICAgICAgICAgIGlmICghc3JjKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChpc0Fic29sdXRlKHNyYykpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0ciwgc2VydmVyLm9yaWdpbiArIHNyYyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNyYy5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWJzID0gcmVzb2x2ZShkaXJuYW1lKGlkKSwgc3JjKTtcbiAgICAgICAgICAgICAgY29uc3QgcGF0aG5hbWUgPSByZWxhdGl2ZShjb25maWcucm9vdCwgYWJzKTtcbiAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0ciwgYCR7c2VydmVyLm9yaWdpbn0vJHtwYXRobmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgcG9pbnRUb0RldlNlcnZlcignc2NyaXB0W3R5cGU9bW9kdWxlXScsICdzcmMnKTtcbiAgICAgICAgcG9pbnRUb0RldlNlcnZlcignbGlua1tyZWw9c3R5bGVzaGVldF0nLCAnaHJlZicpO1xuXG4gICAgICAgIC8vIEFkZCBhIHNjcmlwdCB0byBhZGQgcGFnZSByZWxvYWRpbmdcbiAgICAgICAgY29uc3QgcmVsb2FkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgcmVsb2FkZXIuc3JjID0gaHRtbFJlbG9hZElkO1xuICAgICAgICByZWxvYWRlci50eXBlID0gJ21vZHVsZSc7XG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocmVsb2FkZXIpO1xuXG4gICAgICAgIGNvbnN0IG5ld0h0bWwgPSBkb2N1bWVudC50b1N0cmluZygpO1xuICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCd0cmFuc2Zvcm0gJyArIGlkKTtcbiAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnT2xkIEhUTUw6XFxuJyArIGNvZGUpO1xuICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCdOZXcgSFRNTDpcXG4nICsgbmV3SHRtbCk7XG4gICAgICAgIHJldHVybiBuZXdIdG1sO1xuICAgICAgfSxcblxuICAgICAgLy8gUGFzcyB0aGUgSFRNTCB0aHJvdWdoIHRoZSBkZXYgc2VydmVyIHRvIGFkZCBkZXYtbW9kZSBzcGVjaWZpYyBjb2RlXG4gICAgICBhc3luYyB0cmFuc2Zvcm1JbmRleEh0bWwoaHRtbCwgY3R4KSB7XG4gICAgICAgIGNvbnN0IHNlcnZlciA9IGNvbmZpZy5zZXJ2ZXI7XG4gICAgICAgIGlmIChjb25maWcuY29tbWFuZCAhPT0gJ3NlcnZlJyB8fCBzZXJ2ZXIgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVXJsID0gYCR7c2VydmVyLm9yaWdpbn0ke2N0eC5wYXRofWA7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBnZXRFbnRyeXBvaW50TmFtZShjb25maWcuZW50cnlwb2ludHNEaXIsIGN0eC5maWxlbmFtZSk7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3NlcnZlci5vcmlnaW59LyR7bmFtZX0uaHRtbGA7XG4gICAgICAgIGNvbnN0IHNlcnZlckh0bWwgPSBhd2FpdCBzZXJ2ZXIudHJhbnNmb3JtSW5kZXhIdG1sKFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBodG1sLFxuICAgICAgICAgIG9yaWdpbmFsVXJsLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB7IGRvY3VtZW50IH0gPSBwYXJzZUhUTUwoc2VydmVySHRtbCk7XG5cbiAgICAgICAgLy8gUmVhY3QgcGFnZXMgaW5jbHVkZSBhIHByZWFtYmxlIGFzIGFuIHVuc2FmZS1pbmxpbmUgdHlwZT1cIm1vZHVsZVwiIHNjcmlwdCB0byBlbmFibGUgZmFzdCByZWZyZXNoLCBhcyBzaG93biBoZXJlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd3h0LWRldi93eHQvaXNzdWVzLzE1NyNpc3N1ZWNvbW1lbnQtMTc1NjQ5NzYxNlxuICAgICAgICAvLyBTaW5jZSB1bnNhZmUtaW5saW5lIHNjcmlwdHMgYXJlIGJsb2NrZWQgYnkgTVYzIENTUHMsIHdlIG5lZWQgdG8gdmlydHVhbGl6ZSBpdC5cbiAgICAgICAgY29uc3QgcmVhY3RSZWZyZXNoU2NyaXB0ID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHRbdHlwZT1tb2R1bGVdJyksXG4gICAgICAgICkuZmluZCgoc2NyaXB0KSA9PiBzY3JpcHQuaW5uZXJIVE1MLmluY2x1ZGVzKCdAcmVhY3QtcmVmcmVzaCcpKTtcbiAgICAgICAgaWYgKHJlYWN0UmVmcmVzaFNjcmlwdCkge1xuICAgICAgICAgIC8vIFNhdmUgcHJlYW1ibGUgdG8gc2VydmUgZnJvbSBzZXJ2ZXJcbiAgICAgICAgICByZWFjdFJlZnJlc2hQcmVhbWJsZSA9IHJlYWN0UmVmcmVzaFNjcmlwdC5pbm5lckhUTUw7XG5cbiAgICAgICAgICAvLyBSZXBsYWNlIHVuc2FmZSBpbmxpbmUgc2NyaXB0XG4gICAgICAgICAgY29uc3QgdmlydHVhbFNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgIHZpcnR1YWxTY3JpcHQudHlwZSA9ICdtb2R1bGUnO1xuICAgICAgICAgIHZpcnR1YWxTY3JpcHQuc3JjID0gYCR7c2VydmVyLm9yaWdpbn0vJHt2aXJ0dWFsUmVhY3RSZWZyZXNoSWR9YDtcbiAgICAgICAgICByZWFjdFJlZnJlc2hTY3JpcHQucmVwbGFjZVdpdGgodmlydHVhbFNjcmlwdCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGFuZ2UgL0B2aXRlL2NsaWVudCAtPiBodHRwOi8vbG9jYWxob3N0OjMwMDAvQHZpdGUvY2xpZW50XG4gICAgICAgIGNvbnN0IHZpdGVDbGllbnRTY3JpcHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxTY3JpcHRFbGVtZW50PihcbiAgICAgICAgICBcInNjcmlwdFtzcmM9Jy9Adml0ZS9jbGllbnQnXVwiLFxuICAgICAgICApO1xuICAgICAgICBpZiAodml0ZUNsaWVudFNjcmlwdCkge1xuICAgICAgICAgIHZpdGVDbGllbnRTY3JpcHQuc3JjID0gYCR7c2VydmVyLm9yaWdpbn0ke3ZpdGVDbGllbnRTY3JpcHQuc3JjfWA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdIdG1sID0gZG9jdW1lbnQudG9TdHJpbmcoKTtcbiAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygndHJhbnNmb3JtSW5kZXhIdG1sICcgKyBjdHguZmlsZW5hbWUpO1xuICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCdPbGQgSFRNTDpcXG4nICsgaHRtbCk7XG4gICAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoJ05ldyBIVE1MOlxcbicgKyBuZXdIdG1sKTtcbiAgICAgICAgcmV0dXJuIG5ld0h0bWw7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3d4dDp2aXJ0dWFsaXplLXJlYWN0LXJlZnJlc2gnLFxuICAgICAgYXBwbHk6ICdzZXJ2ZScsXG4gICAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgICAgaWYgKGlkID09PSBgLyR7dmlydHVhbFJlYWN0UmVmcmVzaElkfWApIHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRWaXJ0dWFsUmVhY3RSZWZyZXNoSWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWdub3JlIGNodW5rIGNvbnRlbnRzIHdoZW4gcHJlLXJlbmRlcmluZ1xuICAgICAgICBpZiAoaWQuc3RhcnRzV2l0aCgnL2NodW5rcy8nKSkge1xuICAgICAgICAgIHJldHVybiAnXFwwbm9vcCc7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBsb2FkKGlkKSB7XG4gICAgICAgIGlmIChpZCA9PT0gcmVzb2x2ZWRWaXJ0dWFsUmVhY3RSZWZyZXNoSWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVhY3RSZWZyZXNoUHJlYW1ibGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkID09PSAnXFwwbm9vcCcpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cbiIsICJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIERlZmluZXMgZ2xvYmFsIGNvbnN0YW50cyBhYm91dCB0aGUgZGV2IHNlcnZlci4gSGVscHMgc2NyaXB0cyBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIncyB3ZWIgc29ja2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV2U2VydmVyR2xvYmFscyhpbnRlcm5hbENvbmZpZzogSW50ZXJuYWxDb25maWcpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6ZGV2LXNlcnZlci1nbG9iYWxzJyxcbiAgICBjb25maWcoKSB7XG4gICAgICBpZiAoaW50ZXJuYWxDb25maWcuc2VydmVyID09IG51bGwgfHwgaW50ZXJuYWxDb25maWcuY29tbWFuZCA9PSAnYnVpbGQnKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlZmluZToge1xuICAgICAgICAgIF9fREVWX1NFUlZFUl9QUk9UT0NPTF9fOiBKU09OLnN0cmluZ2lmeSgnd3M6JyksXG4gICAgICAgICAgX19ERVZfU0VSVkVSX0hPU1ROQU1FX186IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgaW50ZXJuYWxDb25maWcuc2VydmVyLmhvc3RuYW1lLFxuICAgICAgICAgICksXG4gICAgICAgICAgX19ERVZfU0VSVkVSX1BPUlRfXzogSlNPTi5zdHJpbmdpZnkoaW50ZXJuYWxDb25maWcuc2VydmVyLnBvcnQpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCBkbnMgZnJvbSAnbm9kZTpkbnMnO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tICcuL3Byb21pc2VzJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5mdW5jdGlvbiBpc09mZmxpbmUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGlzT2ZmbGluZSA9IG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXMpID0+IHtcbiAgICBkbnMucmVzb2x2ZSgnZ29vZ2xlLmNvbScsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIgPT0gbnVsbCkge1xuICAgICAgICByZXMoZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KGlzT2ZmbGluZSwgMWUzKS5jYXRjaCgoKSA9PiB0cnVlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzT25saW5lKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBvZmZsaW5lID0gYXdhaXQgaXNPZmZsaW5lKCk7XG4gIHJldHVybiAhb2ZmbGluZTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGEgVVJMIHdpdGggYSBzaW1wbGUgR0VUIHJlcXVlc3QuIEdyYWJzIGl0IGZyb20gY2FjaGUgaWYgaXQgZG9lc24ndCBleGlzdCwgb3IgdGhyb3dzIGFuXG4gKiBlcnJvciBpZiBpdCBjYW4ndCBiZSByZXNvbHZlZCB2aWEgdGhlIG5ldHdvcmsgb3IgY2FjaGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaENhY2hlZChcbiAgdXJsOiBzdHJpbmcsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBsZXQgY29udGVudDogc3RyaW5nID0gJyc7XG5cbiAgaWYgKGF3YWl0IGlzT25saW5lKCkpIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGlmIChyZXMuc3RhdHVzIDwgMzAwKSB7XG4gICAgICBjb250ZW50ID0gYXdhaXQgcmVzLnRleHQoKTtcbiAgICAgIGF3YWl0IGNvbmZpZy5mc0NhY2hlLnNldCh1cmwsIGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgRmFpbGVkIHRvIGRvd25sb2FkIFwiJHt1cmx9XCIsIGZhbGxpbmcgYmFjayB0byBjYWNoZS4uLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGVudCkgY29udGVudCA9IChhd2FpdCBjb25maWcuZnNDYWNoZS5nZXQodXJsKSkgPz8gJyc7XG4gIGlmICghY29udGVudClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBPZmZsaW5lIGFuZCBcIiR7dXJsfVwiIGhhcyBub3QgYmVlbiBjYWNoZWQuIFRyeSBhZ2FpbiB3aGVuIG9ubGluZS5gLFxuICAgICk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiLyoqXG4gKiBBZGQgYSB0aW1lb3V0IHRvIGEgcHJvbWlzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KFxuICBwcm9taXNlOiBQcm9taXNlPFQ+LFxuICBkdXJhdGlvbjogbnVtYmVyLFxuKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZWooYFByb21pc2UgdGltZWQgb3V0IGFmdGVyICR7ZHVyYXRpb259bXNgKTtcbiAgICB9LCBkdXJhdGlvbik7XG4gICAgcHJvbWlzZVxuICAgICAgLnRoZW4ocmVzKVxuICAgICAgLmNhdGNoKHJlailcbiAgICAgIC5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIERvbid0IHVzZSBpbiBwcm9kdWN0aW9uLCBqdXN0IGZvciB0ZXN0aW5nIGFuZCBzbG93aW5nIHRoaW5ncyBkb3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlcykgPT4gc2V0VGltZW91dChyZXMsIG1zKSk7XG59XG4iLCAiaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGZldGNoQ2FjaGVkIH0gZnJvbSAnLi4vdXRpbHMvbmV0d29yayc7XG5cbi8qKlxuICogRG93bmxvYWRzIGFueSBVUkwgaW1wb3J0cywgbGlrZSBHb29nbGUgQW5hbHl0aWNzLCBpbnRvIHZpcnR1YWwgbW9kdWxlcyBzbyB0aGV5IGFyZSBidW5kbGVkIHdpdGhcbiAqIHRoZSBleHRlbnNpb24gaW5zdGVhZCBvZiBkZXBlbmRpbmcgb24gcmVtb3RlIGNvZGUgYXQgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IFwidXJsOmh0dHBzOi8vZ29vZ2xlLXRhZ21hbmFnZXIuY29tL2d0YWc/aWQ9WFlaXCI7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZChjb25maWc6IEludGVybmFsQ29uZmlnKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OmRvd25sb2FkJyxcbiAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgIGlmIChpZC5zdGFydHNXaXRoKCd1cmw6JykpIHJldHVybiAnXFwwJyArIGlkO1xuICAgIH0sXG4gICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgaWYgKCFpZC5zdGFydHNXaXRoKCdcXDB1cmw6JykpIHJldHVybjtcblxuICAgICAgLy8gTG9hZCBmaWxlIGZyb20gbmV0d29yayBvciBjYWNoZVxuICAgICAgY29uc3QgdXJsID0gaWQucmVwbGFjZSgnXFwwdXJsOicsICcnKTtcbiAgICAgIHJldHVybiBhd2FpdCBmZXRjaENhY2hlZCh1cmwsIGNvbmZpZyk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgRW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBleHRuYW1lLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IGZzLCB7IGVuc3VyZURpciB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgSFRNTCBmaWxlcyBvdXRwdXQgYnkgYSBtdWx0aXBhZ2UgYnVpbGQgYXJlIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uLiBUaGlzIGRvZXMgdHdvXG4gKiB0aGluZ3M6XG4gKlxuICogMS4gTW92ZXMgdGhlIEhNVEwgZmlsZXMgdG8gdGhlaXIgZmluYWwgbG9jYXRpb24gYXQgYDxvdXREaXI+LzxlbnRyeXBvaW50Lm5hbWU+Lmh0bWxgLlxuICogMi4gVXBkYXRlcyB0aGUgYnVuZGxlIHNvIGl0IHN1bW1hcml6ZXMgdGhlIGZpbGVzIGNvcnJlY3RseSBpbiB0aGUgcmV0dXJuZWQgYnVpbGQgb3V0cHV0LlxuICpcbiAqIEFzc2V0cyAoSlMgYW5kIENTUykgYXJlIG91dHB1dCB0byB0aGUgYDxvdXREaXI+L2Fzc2V0c2AgZGlyZWN0b3J5LCBhbmQgZG9uJ3QgbmVlZCB0byBiZSBtb2RpZmllZC5cbiAqIEhUTUwgZmlsZXMgYWNjZXNzIHRoZW0gdmlhIGFic29sdXRlIFVSTHMsIHNvIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIGFueSBpbXBvcnQgcGF0aHMgaW4gdGhlIEhUTUxcbiAqIGZpbGVzIGVpdGhlci5cbiAqXG4gKiBUSElTIFBMVUdJTiBTSE9VTEQgT05MWSBCRSBBUFBMSUVEIFRPIE1VTFRJUEFHRSBCVUlMRFMuIEl0IHNob3VsZCBub3QgYmUgYWRkZWQgdG8gZXZlcnkgYnVpbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBhZ2VNb3ZlKFxuICBlbnRyeXBvaW50czogRW50cnlwb2ludFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6bXVsdGlwYWdlLW1vdmUnLFxuICAgIGFzeW5jIHdyaXRlQnVuZGxlKF8sIGJ1bmRsZSkge1xuICAgICAgZm9yIChjb25zdCBvbGRCdW5kbGVQYXRoIGluIGJ1bmRsZSkge1xuICAgICAgICAvLyBvbGRCdW5kbGVQYXRoID0gJ2VudHJ5cG9pbnRzL3BvcHVwLmh0bWwnIG9yICdlbnRyeXBvaW50cy9vcHRpb25zL2luZGV4Lmh0bWwnXG5cbiAgICAgICAgLy8gRmluZCBhIG1hdGNoaW5nIGVudHJ5cG9pbnQgLSBvbGRCdW5kbGVQYXRoIGlzIHRoZSBzYW1lIGFzIGVuZCBlbmQgb2YgdGhlIGlucHV0IHBhdGguXG4gICAgICAgIGNvbnN0IGVudHJ5cG9pbnQgPSBlbnRyeXBvaW50cy5maW5kKFxuICAgICAgICAgIChlbnRyeSkgPT4gISFub3JtYWxpemVQYXRoKGVudHJ5LmlucHV0UGF0aCkuZW5kc1dpdGgob2xkQnVuZGxlUGF0aCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChlbnRyeXBvaW50ID09IG51bGwpIHtcbiAgICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYE5vIGVudHJ5cG9pbnQgZm91bmQgZm9yICR7b2xkQnVuZGxlUGF0aH0sIGxlYXZpbmcgaW4gY2h1bmtzIGRpcmVjdG9yeWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgbmV3IGJ1bmRsZSBwYXRoXG4gICAgICAgIGNvbnN0IG5ld0J1bmRsZVBhdGggPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgICAgICBlbnRyeXBvaW50LFxuICAgICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICAgZXh0bmFtZShvbGRCdW5kbGVQYXRoKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG5ld0J1bmRsZVBhdGggPT09IG9sZEJ1bmRsZVBhdGgpIHtcbiAgICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgJ0hUTUwgZmlsZSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uJyxcbiAgICAgICAgICAgIG9sZEJ1bmRsZVBhdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vdmUgZmlsZSBhbmQgdXBkYXRlIGJ1bmRsZVxuICAgICAgICAvLyBEbyB0aGlzIGluc2lkZSBhIG11dGV4IGxvY2sgc28gaXQgb25seSBydW5zIG9uZSBhdCBhIHRpbWUgZm9yIGNvbmN1cnJlbnQgbXVsdGlwYWdlIGJ1aWxkc1xuICAgICAgICBjb25zdCBvbGRBYnNQYXRoID0gcmVzb2x2ZShjb25maWcub3V0RGlyLCBvbGRCdW5kbGVQYXRoKTtcbiAgICAgICAgY29uc3QgbmV3QWJzUGF0aCA9IHJlc29sdmUoY29uZmlnLm91dERpciwgbmV3QnVuZGxlUGF0aCk7XG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJuYW1lKG5ld0Fic1BhdGgpKTtcbiAgICAgICAgYXdhaXQgZnMubW92ZShvbGRBYnNQYXRoLCBuZXdBYnNQYXRoLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcblxuICAgICAgICBjb25zdCByZW5hbWVkQ2h1bmsgPSB7XG4gICAgICAgICAgLi4uYnVuZGxlW29sZEJ1bmRsZVBhdGhdLFxuICAgICAgICAgIGZpbGVOYW1lOiBuZXdCdW5kbGVQYXRoLFxuICAgICAgICB9O1xuICAgICAgICBkZWxldGUgYnVuZGxlW29sZEJ1bmRsZVBhdGhdO1xuICAgICAgICBidW5kbGVbbmV3QnVuZGxlUGF0aF0gPSByZW5hbWVkQ2h1bms7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVVbmltcG9ydCB9IGZyb20gJ3VuaW1wb3J0JztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0VW5pbXBvcnRPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvYXV0by1pbXBvcnRzJztcbmltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBleHRuYW1lIH0gZnJvbSAncGF0aCc7XG5cbmNvbnN0IEVOQUJMRURfRVhURU5TSU9OUzogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IHVuZGVmaW5lZD4gPSB7XG4gICcuanMnOiB0cnVlLFxuICAnLmpzeCc6IHRydWUsXG4gICcudHMnOiB0cnVlLFxuICAnLnRzeCc6IHRydWUsXG4gICcudnVlJzogdHJ1ZSxcbiAgJy5zdmVsdGUnOiB0cnVlLFxufTtcblxuLyoqXG4gKiBJbmplY3QgYW55IGdsb2JhbCBpbXBvcnRzIGRlZmluZWQgYnkgdW5pbXBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaW1wb3J0KGNvbmZpZzogSW50ZXJuYWxDb25maWcpOiB2aXRlLlBsdWdpbk9wdGlvbiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRVbmltcG9ydE9wdGlvbnMoY29uZmlnKTtcbiAgaWYgKG9wdGlvbnMgPT09IGZhbHNlKSByZXR1cm4gW107XG5cbiAgY29uc3QgdW5pbXBvcnQgPSBjcmVhdGVVbmltcG9ydChvcHRpb25zKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6dW5pbXBvcnQnLFxuICAgIGFzeW5jIGNvbmZpZygpIHtcbiAgICAgIGF3YWl0IHVuaW1wb3J0LnNjYW5JbXBvcnRzRnJvbURpcih1bmRlZmluZWQsIHsgY3dkOiBjb25maWcuc3JjRGlyIH0pO1xuICAgIH0sXG4gICAgYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICBjb25zdCBleHQgPSBleHRuYW1lKGlkKTtcbiAgICAgIGlmIChFTkFCTEVEX0VYVEVOU0lPTlNbZXh0XSkgcmV0dXJuIHVuaW1wb3J0LmluamVjdEltcG9ydHMoY29kZSwgaWQpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgVW5pbXBvcnRPcHRpb25zIH0gZnJvbSAndW5pbXBvcnQnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBtZXJnZUNvbmZpZyB9IGZyb20gJ3ZpdGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pbXBvcnRPcHRpb25zKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUGFydGlhbDxVbmltcG9ydE9wdGlvbnMgfCBmYWxzZT4ge1xuICBpZiAoY29uZmlnLmltcG9ydHMgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgZGVmYXVsdE9wdGlvbnM6IFBhcnRpYWw8VW5pbXBvcnRPcHRpb25zPiA9IHtcbiAgICBkZWJ1Z0xvZzogY29uZmlnLmxvZ2dlci5kZWJ1ZyxcbiAgICBpbXBvcnRzOiBbeyBuYW1lOiAnZGVmaW5lQ29uZmlnJywgZnJvbTogJ3d4dCcgfV0sXG4gICAgcHJlc2V0czogW3sgcGFja2FnZTogJ3d4dC9jbGllbnQnIH0sIHsgcGFja2FnZTogJ3d4dC9icm93c2VyJyB9XSxcbiAgICB3YXJuOiBjb25maWcubG9nZ2VyLndhcm4sXG4gICAgZGlyczogWydjb21wb25lbnRzJywgJ2NvbXBvc2FibGVzJywgJ2hvb2tzJywgJ3V0aWxzJ10sXG4gIH07XG5cbiAgcmV0dXJuIG1lcmdlQ29uZmlnKFxuICAgIGRlZmF1bHRPcHRpb25zLFxuICAgIGNvbmZpZy5pbXBvcnRzLFxuICApIGFzIFBhcnRpYWw8VW5pbXBvcnRPcHRpb25zPjtcbn1cbiIsICJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEVudHJ5cG9pbnQsIEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5cbi8qKlxuICogV3JhcHMgYSB1c2VyJ3MgZW50cnlwb2ludCB3aXRoIGEgdml0dWFsIHZlcnNpb24gd2l0aCBhZGRpdGlvbmFsIGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmlydHVhbEVudHJ5cG9pbihcbiAgdHlwZTogRW50cnlwb2ludFsndHlwZSddLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUGx1Z2luIHtcbiAgY29uc3QgdmlydHVhbElkID0gYHZpcnR1YWw6d3h0LSR7dHlwZX0/YDtcbiAgY29uc3QgcmVzb2x2ZWRWaXJ0dWFsSWQgPSBgXFwwJHt2aXJ0dWFsSWR9YDtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IGB3eHQ6dmlydHVhbC1lbnRyeXBvaW50YCxcbiAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgIC8vIElkIGRvZXNuJ3Qgc3RhcnQgd2l0aCBwcmVmaXgsIGl0IGxvb2tzIGxpa2UgdGhpczpcbiAgICAgIC8vIC9wYXRoL3RvL3Byb2plY3QvdmlydHVhbDpiYWNrZ3JvdW5kPy9wYXRoL3RvL3Byb2plY3QvZW50cnlwb2ludHMvYmFja2dyb3VuZC50c1xuICAgICAgY29uc3QgaW5kZXggPSBpZC5pbmRleE9mKHZpcnR1YWxJZCk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGlucHV0UGF0aCA9IG5vcm1hbGl6ZVBhdGgoaWQuc3Vic3RyaW5nKGluZGV4ICsgdmlydHVhbElkLmxlbmd0aCkpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkVmlydHVhbElkICsgaW5wdXRQYXRoO1xuICAgIH0sXG4gICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgaWYgKCFpZC5zdGFydHNXaXRoKHJlc29sdmVkVmlydHVhbElkKSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBpbnB1dFBhdGggPSBpZC5yZXBsYWNlKHJlc29sdmVkVmlydHVhbElkLCAnJyk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IGZzLnJlYWRGaWxlKFxuICAgICAgICByZXNvbHZlKFxuICAgICAgICAgIGNvbmZpZy5yb290LFxuICAgICAgICAgIGBub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzLyR7dHlwZX0tZW50cnlwb2ludC5qc2AsXG4gICAgICAgICksXG4gICAgICAgICd1dGYtOCcsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoYHZpcnR1YWw6dXNlci0ke3R5cGV9YCwgaW5wdXRQYXRoKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRzY29uZmlnUGF0aHMoY29uZmlnOiBJbnRlcm5hbENvbmZpZyk6IHZpdGUuUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OmFsaWFzZXMnLFxuICAgIGFzeW5jIGNvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgJ0BAJzogY29uZmlnLnJvb3QsXG4gICAgICAgICAgICAnfn4nOiBjb25maWcucm9vdCxcbiAgICAgICAgICAgICdAJzogY29uZmlnLnNyY0RpcixcbiAgICAgICAgICAgICd+JzogY29uZmlnLnNyY0RpcixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuXG4vKipcbiAqIEluIGRldiBtb2RlLCBpZiB0aGVyZSdzIG5vdCBhIGJhY2tncm91bmQgc2NyaXB0IGxpc3RlZCwgd2UgbmVlZCB0byBhZGQgb25lLlxuICpcbiAqIFRoaXMgZGVmaW5lJ3MgYSB2aXJ0dWFsIG1vZHVsZSB0aGF0IGlzIGJhc2ljYWxseSBqdXN0IGEgbm9vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vb3BCYWNrZ3JvdW5kKCk6IFBsdWdpbiB7XG4gIGNvbnN0IHZpcnR1YWxNb2R1bGVJZCA9IFZJUlRVQUxfTk9PUF9CQUNLR1JPVU5EX01PRFVMRV9JRDtcbiAgY29uc3QgcmVzb2x2ZWRWaXJ0dWFsTW9kdWxlSWQgPSAnXFwwJyArIHZpcnR1YWxNb2R1bGVJZDtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0Om5vb3AtYmFja2dyb3VuZCcsXG4gICAgcmVzb2x2ZUlkKGlkKSB7XG4gICAgICBpZiAoaWQgPT09IHZpcnR1YWxNb2R1bGVJZCkgcmV0dXJuIHJlc29sdmVkVmlydHVhbE1vZHVsZUlkO1xuICAgIH0sXG4gICAgbG9hZChpZCkge1xuICAgICAgaWYgKGlkID09PSByZXNvbHZlZFZpcnR1YWxNb2R1bGVJZCkge1xuICAgICAgICByZXR1cm4gYGltcG9ydCB7IGRlZmluZUJhY2tncm91bmQgfSBmcm9tICd3eHQvY2xpZW50JztcXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVCYWNrZ3JvdW5kKCgpID0+IHZvaWQgMClgO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBWSVJUVUFMX05PT1BfQkFDS0dST1VORF9NT0RVTEVfSUQgPSAndmlydHVhbDp1c2VyLWJhY2tncm91bmQnO1xuIiwgImltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBFbnRyeXBvaW50LCBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuXG4vKipcbiAqIFJlbmFtZSBDU1MgZW50cnlwb2ludCBvdXRwdXRzIHRvIGVuc3VyZSBhIEpTIGZpbGUgaXMgbm90IGdlbmVyYXRlZCwgYW5kIHRoYXQgdGhlIENTUyBmaWxlIGlzXG4gKiBwbGFjZWQgaW4gdGhlIGNvcnJlY3QgcGxhY2UuXG4gKlxuICogSXQ6XG4gKiAxLiBSZW5hbWVzIENTUyBmaWxlcyB0byB0aGVpciBmaW5hbCBwYXRoc1xuICogMi4gUmVtb3ZlcyB0aGUgSlMgZmlsZSB0aGF0IGdldCdzIG91dHB1dCBieSBsaWIgbW9kZVxuICpcbiAqIFRISVMgUExVR0lOIFNIT1VMRCBPTkxZIEJFIEFQUExJRUQgVE8gQ1NTIExJQiBNT0RFIEJVSUxEUy4gSXQgc2hvdWxkIG5vdCBiZSBhZGRlZCB0byBldmVyeSBidWlsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0VudHJ5cG9pbnRzKFxuICBlbnRyeXBvaW50OiBFbnRyeXBvaW50LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6Y3NzLWVudHJ5cG9pbnQnLFxuICAgIGNvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiAoKSA9PlxuICAgICAgICAgICAgICAgIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5cG9pbnQsIGNvbmZpZy5vdXREaXIsICcuY3NzJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgZ2VuZXJhdGVCdW5kbGUoXywgYnVuZGxlKSB7XG4gICAgICBPYmplY3Qua2V5cyhidW5kbGUpLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoJy5qcycpKSBkZWxldGUgYnVuZGxlW2ZpbGVdO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgdmlzdWFsaXplciB9IGZyb20gJ3JvbGx1cC1wbHVnaW4tdmlzdWFsaXplcic7XG5cbmxldCBpbmNyZW1lbnQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVuZGxlQW5hbHlzaXMoKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4gdmlzdWFsaXplcih7XG4gICAgZW1pdEZpbGU6IHRydWUsXG4gICAgdGVtcGxhdGU6ICdyYXctZGF0YScsXG4gICAgZmlsZW5hbWU6IGBzdGF0cy0ke2luY3JlbWVudCsrfS5qc29uYCxcbiAgfSkgYXMgdml0ZS5QbHVnaW47XG59XG4iLCAiaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxzKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBhbnk7IHR5cGU6IHN0cmluZyB9PiB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgbmFtZTogJ19fTUFOSUZFU1RfVkVSU0lPTl9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcubWFuaWZlc3RWZXJzaW9uLFxuICAgICAgdHlwZTogYDIgfCAzYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0JST1dTRVJfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmJyb3dzZXIsXG4gICAgICB0eXBlOiBgc3RyaW5nYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0lTX0NIUk9NRV9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ2Nocm9tZScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19JU19GSVJFRk9YX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19JU19TQUZBUklfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmJyb3dzZXIgPT09ICdzYWZhcmknLFxuICAgICAgdHlwZTogYGJvb2xlYW5gLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ19fSVNfRURHRV9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ2VkZ2UnLFxuICAgICAgdHlwZTogYGJvb2xlYW5gLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ19fSVNfT1BFUkFfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmJyb3dzZXIgPT09ICdvcGVyYScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19DT01NQU5EX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5jb21tYW5kLFxuICAgICAgdHlwZTogYFwiYnVpbGRcIiB8IFwic2VydmVcImAsXG4gICAgfSxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudHJ5cG9pbnRHbG9iYWxzKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBlbnRyeXBvaW50TmFtZTogc3RyaW5nLFxuKSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgbmFtZTogJ19fRU5UUllQT0lOVF9fJyxcbiAgICAgIHZhbHVlOiBlbnRyeXBvaW50TmFtZSxcbiAgICAgIHR5cGU6IGBzdHJpbmdgLFxuICAgIH0sXG4gIF07XG59XG4iLCAiaW1wb3J0IHsgQnVpbGRPdXRwdXQsIFd4dERldlNlcnZlciwgSW5saW5lQ29uZmlnIH0gZnJvbSAnLi9jb3JlL3R5cGVzJztcbmltcG9ydCB7IGdldEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi9jb3JlL3V0aWxzL2dldEludGVybmFsQ29uZmlnJztcbmltcG9ydCBwYyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IGRldGVjdERldkNoYW5nZXMgfSBmcm9tICcuL2NvcmUvdXRpbHMvZGV0ZWN0RGV2Q2hhbmdlcyc7XG5pbXBvcnQgeyBNdXRleCB9IGZyb20gJ2FzeW5jLW11dGV4JztcbmltcG9ydCB7IGNvbnNvbGEgfSBmcm9tICdjb25zb2xhJztcbmltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRPdXRwdXRGaWxlIH0gZnJvbSAnLi9jb3JlL3V0aWxzL2VudHJ5cG9pbnRzJztcbmltcG9ydCB7IGJ1aWxkSW50ZXJuYWwsIHJlYnVpbGQgfSBmcm9tICcuL2NvcmUvYnVpbGQnO1xuaW1wb3J0IHtcbiAgZ2V0U2VydmVySW5mbyxcbiAgcmVsb2FkQ29udGVudFNjcmlwdHMsXG4gIHJlbG9hZEh0bWxQYWdlcyxcbiAgc2V0dXBTZXJ2ZXIsXG59IGZyb20gJy4vY29yZS9zZXJ2ZXInO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvcmUvY2xlYW4nO1xuZXhwb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uL3BhY2thZ2UuanNvbic7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUvdHlwZXMvZXh0ZXJuYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3V0aWxzL2RlZmluZUNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUvdXRpbHMvZGVmaW5lUnVubmVyQ29uZmlnJztcblxuLyoqXG4gKiBCdW5kbGVzIHRoZSBleHRlbnNpb24gZm9yIHByb2R1Y3Rpb24uIFJldHVybnMgYSBwcm9taXNlIG9mIHRoZSBidWlsZCByZXN1bHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZChjb25maWc6IElubGluZUNvbmZpZyk6IFByb21pc2U8QnVpbGRPdXRwdXQ+IHtcbiAgY29uc3QgaW50ZXJuYWxDb25maWcgPSBhd2FpdCBnZXRJbnRlcm5hbENvbmZpZyhjb25maWcsICdidWlsZCcpO1xuICByZXR1cm4gYXdhaXQgYnVpbGRJbnRlcm5hbChpbnRlcm5hbENvbmZpZyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRldiBzZXJ2ZXIsIHByZS1idWlsZHMgYWxsIHRoZSBmaWxlcyB0aGF0IG5lZWQgdG8gZXhpc3QgdG8gbG9hZCB0aGUgZXh0ZW5zaW9uLCBhbmQgb3BlblxuICogdGhlIGJyb3dzZXIgd2l0aCB0aGUgZXh0ZW5zaW9uIGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNlcnZlcihcbiAgY29uZmlnPzogSW5saW5lQ29uZmlnLFxuKTogUHJvbWlzZTxXeHREZXZTZXJ2ZXI+IHtcbiAgY29uc3Qgc2VydmVySW5mbyA9IGF3YWl0IGdldFNlcnZlckluZm8oKTtcblxuICBjb25zdCBnZXRMYXRlc3RJbnRlcm5hbENvbmZpZyA9IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxDb25maWcoXG4gICAgICB7XG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgdml0ZTogKCkgPT4gc2VydmVySW5mby52aXRlU2VydmVyQ29uZmlnLFxuICAgICAgfSxcbiAgICAgICdzZXJ2ZScsXG4gICAgKTtcbiAgfTtcblxuICBsZXQgaW50ZXJuYWxDb25maWcgPSBhd2FpdCBnZXRMYXRlc3RJbnRlcm5hbENvbmZpZygpO1xuICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzZXR1cFNlcnZlcihzZXJ2ZXJJbmZvLCBpbnRlcm5hbENvbmZpZyk7XG4gIGludGVybmFsQ29uZmlnLnNlcnZlciA9IHNlcnZlcjtcblxuICBjb25zdCBmaWxlQ2hhbmdlZE11dGV4ID0gbmV3IE11dGV4KCk7XG4gIGNvbnN0IGNoYW5nZVF1ZXVlOiBBcnJheTxbc3RyaW5nLCBzdHJpbmddPiA9IFtdO1xuXG4gIHNlcnZlci53cy5vbignd3h0OmJhY2tncm91bmQtaW5pdGlhbGl6ZWQnLCAoKSA9PiB7XG4gICAgLy8gUmVnaXN0ZXIgY29udGVudCBzY3JpcHRzIGZvciB0aGUgZmlyc3QgdGltZSBzaW5jZSB0aGV5J3JlIG5vdCBsaXN0ZWQgaW4gdGhlIG1hbmlmZXN0XG4gICAgcmVsb2FkQ29udGVudFNjcmlwdHMoc2VydmVyLmN1cnJlbnRPdXRwdXQuc3RlcHMsIGludGVybmFsQ29uZmlnLCBzZXJ2ZXIpO1xuICB9KTtcblxuICBzZXJ2ZXIud2F0Y2hlci5vbignYWxsJywgYXN5bmMgKGV2ZW50LCBwYXRoLCBfc3RhdHMpID0+IHtcbiAgICAvLyBIZXJlLCBcInBhdGhcIiBpcyBhIG5vbi1ub3JtYWxpemVkIHBhdGggKGllOiBDOlxcXFx1c2Vyc1xcXFwuLi4gaW5zdGVhZCBvZiBDOi91c2Vycy8uLi4pXG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChpbnRlcm5hbENvbmZpZy5vdXRCYXNlRGlyKSkgcmV0dXJuO1xuICAgIGNoYW5nZVF1ZXVlLnB1c2goW2V2ZW50LCBwYXRoXSk7XG5cbiAgICBhd2FpdCBmaWxlQ2hhbmdlZE11dGV4LnJ1bkV4Y2x1c2l2ZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IGNoYW5nZVF1ZXVlLnNwbGljZSgwLCBjaGFuZ2VRdWV1ZS5sZW5ndGgpO1xuICAgICAgaWYgKGZpbGVDaGFuZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBjaGFuZ2VzID0gZGV0ZWN0RGV2Q2hhbmdlcyhmaWxlQ2hhbmdlcywgc2VydmVyLmN1cnJlbnRPdXRwdXQpO1xuICAgICAgaWYgKGNoYW5nZXMudHlwZSA9PT0gJ25vLWNoYW5nZScpIHJldHVybjtcblxuICAgICAgLy8gTG9nIHRoZSBlbnRyeXBvaW50cyB0aGF0IHdlcmUgZWZmZWN0ZWRcbiAgICAgIGludGVybmFsQ29uZmlnLmxvZ2dlci5pbmZvKFxuICAgICAgICBgQ2hhbmdlZDogJHtBcnJheS5mcm9tKG5ldyBTZXQoZmlsZUNoYW5nZXMubWFwKChjaGFuZ2UpID0+IGNoYW5nZVsxXSkpKVxuICAgICAgICAgIC5tYXAoKGZpbGUpID0+IHBjLmRpbShyZWxhdGl2ZShpbnRlcm5hbENvbmZpZy5yb290LCBmaWxlKSkpXG4gICAgICAgICAgLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgICBjb25zdCByZWJ1aWx0TmFtZXMgPSBjaGFuZ2VzLnJlYnVpbGRHcm91cHNcbiAgICAgICAgLmZsYXQoKVxuICAgICAgICAubWFwKChlbnRyeSkgPT4ge1xuICAgICAgICAgIHJldHVybiBwYy5jeWFuKFxuICAgICAgICAgICAgcmVsYXRpdmUoaW50ZXJuYWxDb25maWcub3V0RGlyLCBnZXRFbnRyeXBvaW50T3V0cHV0RmlsZShlbnRyeSwgJycpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihwYy5kaW0oJywgJykpO1xuXG4gICAgICAvLyBHZXQgbGF0ZXN0IGNvbmZpZyBhbmQgUmVidWlsZCBncm91cHMgd2l0aCBjaGFuZ2VzXG4gICAgICBpbnRlcm5hbENvbmZpZyA9IGF3YWl0IGdldExhdGVzdEludGVybmFsQ29uZmlnKCk7XG4gICAgICBpbnRlcm5hbENvbmZpZy5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gICAgICBjb25zdCB7IG91dHB1dDogbmV3T3V0cHV0IH0gPSBhd2FpdCByZWJ1aWxkKFxuICAgICAgICBpbnRlcm5hbENvbmZpZyxcbiAgICAgICAgLy8gVE9ETzogdGhpcyBleGNsdWRlcyBuZXcgZW50cnlwb2ludHMsIHNvIHRoZXkncmUgbm90IGJ1aWx0IHVudGlsIHRoZSBkZXYgY29tbWFuZCBpcyByZXN0YXJ0ZWRcbiAgICAgICAgY2hhbmdlcy5yZWJ1aWxkR3JvdXBzLFxuICAgICAgICBjaGFuZ2VzLmNhY2hlZE91dHB1dCxcbiAgICAgICk7XG4gICAgICBzZXJ2ZXIuY3VycmVudE91dHB1dCA9IG5ld091dHB1dDtcblxuICAgICAgLy8gUGVyZm9ybSByZWxvYWRzXG4gICAgICBzd2l0Y2ggKGNoYW5nZXMudHlwZSkge1xuICAgICAgICBjYXNlICdleHRlbnNpb24tcmVsb2FkJzpcbiAgICAgICAgICBzZXJ2ZXIucmVsb2FkRXh0ZW5zaW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bWwtcmVsb2FkJzpcbiAgICAgICAgICByZWxvYWRIdG1sUGFnZXMoY2hhbmdlcy5yZWJ1aWxkR3JvdXBzLCBzZXJ2ZXIsIGludGVybmFsQ29uZmlnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY29udGVudC1zY3JpcHQtcmVsb2FkJzpcbiAgICAgICAgICByZWxvYWRDb250ZW50U2NyaXB0cyhjaGFuZ2VzLmNoYW5nZWRTdGVwcywgaW50ZXJuYWxDb25maWcsIHNlcnZlcik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb25zb2xhLnN1Y2Nlc3MoYFJlbG9hZGVkOiAke3JlYnVpbHROYW1lc31gKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNlcnZlcjtcbn1cbiIsICIvKipcbiAqIENoZWNrcyBpZiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgYWxsIGVsZW1lbnRzIG9mIHRoZSBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5PFQ+KFxuICBhcnJheTogVFtdLFxuICBwcmVkaWNhdGU6IChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuLFxuKTogYm9vbGVhbiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspXG4gICAgaWYgKCFwcmVkaWNhdGUoYXJyYXlbaV0sIGkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuIiwgImltcG9ydCB7IEJ1aWxkT3V0cHV0LCBCdWlsZFN0ZXBPdXRwdXQsIEVudHJ5cG9pbnRHcm91cCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBldmVyeSB9IGZyb20gJy4vYXJyYXlzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuL3BhdGhzJztcblxuLyoqXG4gKiBDb21wYXJlIHRoZSBjaGFuZ2VkIGZpbGVzIHZzIHRoZSBidWlsZCBvdXRwdXQgYW5kIGRldGVybWluZSB3aGF0IGtpbmQgb2YgcmVsb2FkIG5lZWRzIHRvIGhhcHBlbjpcbiAqXG4gKiAtIERvIG5vdGhpbmdcbiAqICAgLSBDU1Mgb3IgSlMgZmlsZSBhc3NvY2lhdGVkIHdpdGggYW4gSFRNTCBwYWdlIGlzIGNoYW5nZWQgLSB0aGlzIGlzIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGVcbiAqICAgICBkZXYgc2VydmVyXG4gKiAgIC0gQ2hhbmdlIGlzbid0IHVzZWQgYnkgYW55IG9mIHRoZSBlbnRyeXBvaW50c1xuICogLSBSZWxvYWQgQ29udGVudCBzY3JpcHRcbiAqICAgLSBDU1Mgb3IgSlMgZmlsZSBhc3NvY2lhdGVkIHdpdGggYSBjb250ZW50IHNjcmlwdFxuICogICAtIEJhY2tncm91bmQgc2NyaXB0IHdpbGwgYmUgdG9sZCB0byByZWxvYWQgdGhlIGNvbnRlbnQgc2NyaXB0XG4gKiAtIFJlbG9hZCBIVE1MIGZpbGVcbiAqICAgLSBIVE1MIGZpbGUgaXRzZWxmIGlzIHNhdmVkIC0gSE1SIGRvZXNuJ3QgaGFuZGxlIHRoaXMgYmVjYXVzZSB0aGUgSFRNTCBwYWdlcyBhcmUgcHJlLXJlbmRlcmVkXG4gKiAgIC0gQ2hyb21lIGlzIE9LIHJlbG9hZGluZyB0aGUgcGFnZSB3aGVuIHRoZSBIVE1MIGZpbGUgaXMgY2hhbmdlZCB3aXRob3V0IHJlbG9hZGluZyB0aGUgd2hvbGVcbiAqICAgICBleHRlbnNpb24uIE5vdCBzdXJlIGFib3V0IGZpcmVmb3gsIHRoaXMgbWlnaHQgbmVlZCB0byBjaGFuZ2UgdG8gYW4gZXh0ZW5zaW9uIHJlbG9hZFxuICogLSBSZWxvYWQgZXh0ZW5zaW9uXG4gKiAgIC0gQmFja2dyb3VuZCBzY3JpcHQgaXMgY2hhbmdlZFxuICogICAtIE1hbmlmZXN0IGlzIGRpZmZlcmVudFxuICogLSBSZXN0YXJ0IGJyb3dzZXJcbiAqICAgLSBDb25maWcgZmlsZSBjaGFuZ2VkICh3eHQuY29uZmlnLnRzLCAuZW52LCB3ZWItZXh0LmNvbmZpZy50cywgZXRjKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0RGV2Q2hhbmdlcyhcbiAgY2hhbmdlZEZpbGVzOiBbZXZlbnQ6IHN0cmluZywgcGF0aDogc3RyaW5nXVtdLFxuICBjdXJyZW50T3V0cHV0OiBCdWlsZE91dHB1dCB8IHVuZGVmaW5lZCxcbik6IERldk1vZGVDaGFuZ2Uge1xuICBpZiAoY3VycmVudE91dHB1dCA9PSBudWxsKSByZXR1cm4geyB0eXBlOiAnbm8tY2hhbmdlJyB9O1xuXG4gIGNvbnN0IGNoYW5nZWRTdGVwcyA9IG5ldyBTZXQoXG4gICAgY2hhbmdlZEZpbGVzLmZsYXRNYXAoKGNoYW5nZWRGaWxlKSA9PlxuICAgICAgZmluZEVmZmVjdGVkU3RlcHMoY2hhbmdlZEZpbGUsIGN1cnJlbnRPdXRwdXQpLFxuICAgICksXG4gICk7XG4gIGlmIChjaGFuZ2VkU3RlcHMuc2l6ZSA9PT0gMCkgcmV0dXJuIHsgdHlwZTogJ25vLWNoYW5nZScgfTtcblxuICBjb25zdCB1bmNoYW5nZWRPdXRwdXQ6IEJ1aWxkT3V0cHV0ID0ge1xuICAgIG1hbmlmZXN0OiBjdXJyZW50T3V0cHV0Lm1hbmlmZXN0LFxuICAgIHN0ZXBzOiBbXSxcbiAgICBwdWJsaWNBc3NldHM6IFtdLFxuICB9O1xuICBjb25zdCBjaGFuZ2VkT3V0cHV0OiBCdWlsZE91dHB1dCA9IHtcbiAgICBtYW5pZmVzdDogY3VycmVudE91dHB1dC5tYW5pZmVzdCxcbiAgICBzdGVwczogW10sXG4gICAgcHVibGljQXNzZXRzOiBbXSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHN0ZXAgb2YgY3VycmVudE91dHB1dC5zdGVwcykge1xuICAgIGlmIChjaGFuZ2VkU3RlcHMuaGFzKHN0ZXApKSB7XG4gICAgICBjaGFuZ2VkT3V0cHV0LnN0ZXBzLnB1c2goc3RlcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuY2hhbmdlZE91dHB1dC5zdGVwcy5wdXNoKHN0ZXApO1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGFzc2V0IG9mIGN1cnJlbnRPdXRwdXQucHVibGljQXNzZXRzKSB7XG4gICAgaWYgKGNoYW5nZWRTdGVwcy5oYXMoYXNzZXQpKSB7XG4gICAgICBjaGFuZ2VkT3V0cHV0LnB1YmxpY0Fzc2V0cy5wdXNoKGFzc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5jaGFuZ2VkT3V0cHV0LnB1YmxpY0Fzc2V0cy5wdXNoKGFzc2V0KTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBpc09ubHlIdG1sQ2hhbmdlcyA9XG4gICAgY2hhbmdlZEZpbGVzLmxlbmd0aCA+IDAgJiZcbiAgICBldmVyeShjaGFuZ2VkRmlsZXMsIChbXywgZmlsZV0pID0+IGZpbGUuZW5kc1dpdGgoJy5odG1sJykpO1xuICBpZiAoaXNPbmx5SHRtbENoYW5nZXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2h0bWwtcmVsb2FkJyxcbiAgICAgIGNhY2hlZE91dHB1dDogdW5jaGFuZ2VkT3V0cHV0LFxuICAgICAgcmVidWlsZEdyb3VwczogY2hhbmdlZE91dHB1dC5zdGVwcy5tYXAoKHN0ZXApID0+IHN0ZXAuZW50cnlwb2ludHMpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBpc09ubHlDb250ZW50U2NyaXB0cyA9XG4gICAgY2hhbmdlZE91dHB1dC5zdGVwcy5sZW5ndGggPiAwICYmXG4gICAgZXZlcnkoXG4gICAgICBjaGFuZ2VkT3V0cHV0LnN0ZXBzLmZsYXRNYXAoKHN0ZXApID0+IHN0ZXAuZW50cnlwb2ludHMpLFxuICAgICAgKGVudHJ5KSA9PiBlbnRyeS50eXBlID09PSAnY29udGVudC1zY3JpcHQnLFxuICAgICk7XG4gIGlmIChpc09ubHlDb250ZW50U2NyaXB0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnY29udGVudC1zY3JpcHQtcmVsb2FkJyxcbiAgICAgIGNhY2hlZE91dHB1dDogdW5jaGFuZ2VkT3V0cHV0LFxuICAgICAgY2hhbmdlZFN0ZXBzOiBjaGFuZ2VkT3V0cHV0LnN0ZXBzLFxuICAgICAgcmVidWlsZEdyb3VwczogY2hhbmdlZE91dHB1dC5zdGVwcy5tYXAoKHN0ZXApID0+IHN0ZXAuZW50cnlwb2ludHMpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdleHRlbnNpb24tcmVsb2FkJyxcbiAgICBjYWNoZWRPdXRwdXQ6IHVuY2hhbmdlZE91dHB1dCxcbiAgICByZWJ1aWxkR3JvdXBzOiBjaGFuZ2VkT3V0cHV0LnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5lbnRyeXBvaW50cyksXG4gIH07XG59XG5cbi8qKlxuICogRm9yIGEgc2luZ2xlIGNoYW5nZSwgcmV0dXJuIGFsbCB0aGUgc3RlcCBvZiB0aGUgYnVpbGQgb3V0cHV0IHRoYXQgd2VyZSBlZmZlY3RlZCBieSBpdC5cbiAqL1xuZnVuY3Rpb24gZmluZEVmZmVjdGVkU3RlcHMoXG4gIGNoYW5nZWRGaWxlOiBbZXZlbnQ6IHN0cmluZywgcGF0aDogc3RyaW5nXSxcbiAgY3VycmVudE91dHB1dDogQnVpbGRPdXRwdXQsXG4pOiBEZXRlY3RlZENoYW5nZVtdIHtcbiAgY29uc3QgY2hhbmdlczogRGV0ZWN0ZWRDaGFuZ2VbXSA9IFtdO1xuICBjb25zdCBjaGFuZ2VkUGF0aCA9IG5vcm1hbGl6ZVBhdGgoY2hhbmdlZEZpbGVbMV0pO1xuXG4gIGNvbnN0IGlzQ2h1bmtFZmZlY3RlZCA9IChcbiAgICBjaHVuazogdml0ZS5Sb2xsdXAuT3V0cHV0Q2h1bmsgfCB2aXRlLlJvbGx1cC5PdXRwdXRBc3NldCxcbiAgKTogYm9vbGVhbiA9PlxuICAgIC8vIElmIGl0J3MgYW4gSFRNTCBmaWxlIHdpdGggdGhlIHNhbWUgcGF0aCwgaXMgaXMgZWZmZWN0ZWQgYmVjYXVzZSBIVE1MIGZpbGVzIG5lZWQgdG8gYmUgcHJlLXJlbmRlcmVkXG4gICAgLy8gZmlsZU5hbWUgaXMgbm9ybWFsaXplZCwgcmVsYXRpdmUgYnVuZGxlIHBhdGhcbiAgICAoY2h1bmsudHlwZSA9PT0gJ2Fzc2V0JyAmJiBjaGFuZ2VkUGF0aC5lbmRzV2l0aChjaHVuay5maWxlTmFtZSkpIHx8XG4gICAgLy8gSWYgaXQncyBhIGNodW5rIHRoYXQgZGVwZW5kcyBvbiB0aGUgY2hhbmdlZCBmaWxlLCBpdCBpcyBlZmZlY3RlZFxuICAgIC8vIG1vZHVsZUlkcyBhcmUgYWJzb2x1dGUsIG5vcm1hbGl6ZWQgcGF0aHNcbiAgICAoY2h1bmsudHlwZSA9PT0gJ2NodW5rJyAmJiBjaHVuay5tb2R1bGVJZHMuaW5jbHVkZXMoY2hhbmdlZFBhdGgpKTtcblxuICBmb3IgKGNvbnN0IHN0ZXAgb2YgY3VycmVudE91dHB1dC5zdGVwcykge1xuICAgIGNvbnN0IGVmZmVjdGVkQ2h1bmsgPSBzdGVwLmNodW5rcy5maW5kKChjaHVuaykgPT4gaXNDaHVua0VmZmVjdGVkKGNodW5rKSk7XG4gICAgaWYgKGVmZmVjdGVkQ2h1bmspIGNoYW5nZXMucHVzaChzdGVwKTtcbiAgfVxuXG4gIGNvbnN0IGVmZmVjdGVkQXNzZXQgPSBjdXJyZW50T3V0cHV0LnB1YmxpY0Fzc2V0cy5maW5kKChjaHVuaykgPT5cbiAgICBpc0NodW5rRWZmZWN0ZWQoY2h1bmspLFxuICApO1xuICBpZiAoZWZmZWN0ZWRBc3NldCkgY2hhbmdlcy5wdXNoKGVmZmVjdGVkQXNzZXQpO1xuXG4gIHJldHVybiBjaGFuZ2VzO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgZmlsZXMgY2hhbmdlZCwgd2hhdCBuZWVkcyByZWJ1aWx0LCBhbmQgdGhlIHR5cGUgb2YgcmVsb2FkIHRoYXQgaXNcbiAqIHJlcXVpcmVkLlxuICovXG5leHBvcnQgdHlwZSBEZXZNb2RlQ2hhbmdlID1cbiAgfCBOb0NoYW5nZVxuICB8IEh0bWxSZWxvYWRcbiAgfCBFeHRlbnNpb25SZWxvYWRcbiAgfCBDb250ZW50U2NyaXB0UmVsb2FkO1xuLy8gfCBCcm93c2VyUmVzdGFydFxuXG5pbnRlcmZhY2UgTm9DaGFuZ2Uge1xuICB0eXBlOiAnbm8tY2hhbmdlJztcbn1cblxuaW50ZXJmYWNlIFJlYnVpbGRDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgZW50cnlwb2ludHMgdGhhdCBuZWVkIHJlYnVpbHQuXG4gICAqL1xuICByZWJ1aWxkR3JvdXBzOiBFbnRyeXBvaW50R3JvdXBbXTtcbiAgLyoqXG4gICAqIFRoZSBwcmV2aW91cyBvdXRwdXQgc3RyaXBwZWQgb2YgYW55IGZpbGVzIGFyZSBnb2luZyB0byBjaGFuZ2UuXG4gICAqL1xuICBjYWNoZWRPdXRwdXQ6IEJ1aWxkT3V0cHV0O1xufVxuXG5pbnRlcmZhY2UgSHRtbFJlbG9hZCBleHRlbmRzIFJlYnVpbGRDaGFuZ2Uge1xuICB0eXBlOiAnaHRtbC1yZWxvYWQnO1xufVxuXG5pbnRlcmZhY2UgRXh0ZW5zaW9uUmVsb2FkIGV4dGVuZHMgUmVidWlsZENoYW5nZSB7XG4gIHR5cGU6ICdleHRlbnNpb24tcmVsb2FkJztcbn1cblxuLy8gaW50ZXJmYWNlIEJyb3dzZXJSZXN0YXJ0IGV4dGVuZHMgUmVidWlsZENoYW5nZSB7XG4vLyAgIHR5cGU6ICdicm93c2VyLXJlc3RhcnQnO1xuLy8gfVxuXG5pbnRlcmZhY2UgQ29udGVudFNjcmlwdFJlbG9hZCBleHRlbmRzIFJlYnVpbGRDaGFuZ2Uge1xuICB0eXBlOiAnY29udGVudC1zY3JpcHQtcmVsb2FkJztcbiAgY2hhbmdlZFN0ZXBzOiBCdWlsZFN0ZXBPdXRwdXRbXTtcbn1cblxuLyoqXG4gKiBXaGVuIGZpZ3VyaW5nIG91dCB3aGF0IG5lZWRzIHJlbG9hZGVkLCB0aGlzIHN0b3JlcyB0aGUgc3RlcCB0aGF0IHdhcyBjaGFuZ2VkLCBvciB0aGUgcHVibGljXG4gKiBkaXJlY3RvcnkgYXNzZXQgdGhhdCB3YXMgY2hhbmdlZC4gSXQgZG9lc24ndCBrbm93IHdoYXQgdHlwZSBvZiBjaGFuZ2UgaXMgcmVxdWlyZWQgeWV0LiBKdXN0IGFuXG4gKiBpbnRlcm1lZGlhdGUgdHlwZS5cbiAqL1xudHlwZSBEZXRlY3RlZENoYW5nZSA9IEJ1aWxkU3RlcE91dHB1dCB8IHZpdGUuUm9sbHVwLk91dHB1dEFzc2V0O1xuIiwgImltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQge1xuICBCdWlsZE91dHB1dCxcbiAgQnVpbGRTdGVwT3V0cHV0LFxuICBFbnRyeXBvaW50LFxuICBFbnRyeXBvaW50R3JvdXAsXG4gIEludGVybmFsQ29uZmlnLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB3eHRQbHVnaW5zIGZyb20gJy4uL3ZpdGUtcGx1Z2lucyc7XG5pbXBvcnQgeyByZW1vdmVFbXB0eURpcnMgfSBmcm9tICcuLi91dGlscy9yZW1vdmVFbXB0eURpcnMnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGggfSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgZGlybmFtZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZ2V0UHVibGljRmlsZXMgfSBmcm9tICcuLi91dGlscy9wdWJsaWMnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEdsb2JhbHMgfSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcbmltcG9ydCB0eXBlIHsgT3JhIH0gZnJvbSAnb3JhJztcbmltcG9ydCBwYyBmcm9tICdwaWNvY29sb3JzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkRW50cnlwb2ludHMoXG4gIGdyb3VwczogRW50cnlwb2ludEdyb3VwW10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIHNwaW5uZXI6IE9yYSxcbik6IFByb21pc2U8T21pdDxCdWlsZE91dHB1dCwgJ21hbmlmZXN0Jz4+IHtcbiAgY29uc3Qgc3RlcHM6IEJ1aWxkU3RlcE91dHB1dFtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBncm91cHNbaV07XG5cbiAgICBzcGlubmVyLnRleHQgPVxuICAgICAgcGMuZGltKGBbJHtpICsgMX0vJHtncm91cHMubGVuZ3RofV1gKSArXG4gICAgICBgICR7W2dyb3VwXVxuICAgICAgICAuZmxhdCgpXG4gICAgICAgIC5tYXAoKGUpID0+IGUubmFtZSlcbiAgICAgICAgLmpvaW4ocGMuZGltKCcsICcpKX1gO1xuXG4gICAgY29uc3Qgc3RlcCA9IEFycmF5LmlzQXJyYXkoZ3JvdXApXG4gICAgICA/IGF3YWl0IGJ1aWxkTXVsdGlwbGVFbnRyeXBvaW50cyhncm91cCwgY29uZmlnKVxuICAgICAgOiBhd2FpdCBidWlsZFNpbmdsZUVudHJ5cG9pbnQoZ3JvdXAsIGNvbmZpZyk7XG4gICAgc3RlcHMucHVzaChzdGVwKTtcbiAgfVxuICBjb25zdCBwdWJsaWNBc3NldHMgPSBhd2FpdCBjb3B5UHVibGljRGlyZWN0b3J5KGNvbmZpZyk7XG5cbiAgLy8gUmVtb3ZlIGFueSBlbXB0eSBkaXJlY3RvcmllcyBmcm9tIG1vdmluZyBvdXRwdXRzIGFyb3VuZFxuICBhd2FpdCByZW1vdmVFbXB0eURpcnMoY29uZmlnLm91dERpcik7XG5cbiAgcmV0dXJuIHsgcHVibGljQXNzZXRzLCBzdGVwcyB9O1xufVxuXG4vKipcbiAqIFVzZSBWaXRlJ3MgbGliIG1vZGUgKyBJSUZFIGZvcm1hdCB0byBidW5kbGUgdGhlIGVudHJ5cG9pbnQgdG8gYSBzaW5nbGUgZmlsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRTaW5nbGVFbnRyeXBvaW50KFxuICBlbnRyeXBvaW50OiBFbnRyeXBvaW50LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxCdWlsZFN0ZXBPdXRwdXQ+IHtcbiAgLy8gU2hvdWxkIHRoaXMgZW50cnlwb2ludCBiZSB3cmFwcGVkIGJ5IHRoZSB2aXRlLXBsdWdpbnMvdmlydHVhbEVudHJ5cG9pbnQgcGx1Z2luP1xuICBjb25zdCBpc1ZpcnR1YWwgPSBbJ2JhY2tncm91bmQnLCAnY29udGVudC1zY3JpcHQnXS5pbmNsdWRlcyhlbnRyeXBvaW50LnR5cGUpO1xuICBjb25zdCBlbnRyeSA9IGlzVmlydHVhbFxuICAgID8gYHZpcnR1YWw6d3h0LSR7ZW50cnlwb2ludC50eXBlfT8ke2VudHJ5cG9pbnQuaW5wdXRQYXRofWBcbiAgICA6IGVudHJ5cG9pbnQuaW5wdXRQYXRoO1xuXG4gIGNvbnN0IHBsdWdpbnM6IE5vbk51bGxhYmxlPHZpdGUuVXNlckNvbmZpZ1sncGx1Z2lucyddPiA9IFtdO1xuICBpZiAoXG4gICAgZW50cnlwb2ludC50eXBlID09PSAnY29udGVudC1zY3JpcHQtc3R5bGUnIHx8XG4gICAgZW50cnlwb2ludC50eXBlID09PSAndW5saXN0ZWQtc3R5bGUnXG4gICkge1xuICAgIHBsdWdpbnMucHVzaCh3eHRQbHVnaW5zLmNzc0VudHJ5cG9pbnRzKGVudHJ5cG9pbnQsIGNvbmZpZykpO1xuICB9XG5cbiAgY29uc3QgbGliTW9kZTogdml0ZS5Vc2VyQ29uZmlnID0ge1xuICAgIHBsdWdpbnMsXG4gICAgYnVpbGQ6IHtcbiAgICAgIGxpYjoge1xuICAgICAgICBlbnRyeSxcbiAgICAgICAgZm9ybWF0czogWydpaWZlJ10sXG4gICAgICAgIG5hbWU6ICdfJyxcbiAgICAgICAgZmlsZU5hbWU6IGVudHJ5cG9pbnQubmFtZSxcbiAgICAgIH0sXG4gICAgICByb2xsdXBPcHRpb25zOiB7XG4gICAgICAgIG91dHB1dDoge1xuICAgICAgICAgIC8vIFRoZXJlJ3Mgb25seSBhIHNpbmdsZSBvdXRwdXQgZm9yIHRoaXMgYnVpbGQsIHNvIHdlIHVzZSB0aGUgZGVzaXJlZCBidW5kbGUgcGF0aCBmb3IgdGhlXG4gICAgICAgICAgLy8gZW50cnkgb3V0cHV0IChsaWtlIFwiY29udGVudC1zY3JpcHRzL292ZXJsYXkuanNcIilcbiAgICAgICAgICBlbnRyeUZpbGVOYW1lczogZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICAgICAgICBlbnRyeXBvaW50LFxuICAgICAgICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICAgICAgICcuanMnLFxuICAgICAgICAgICksXG4gICAgICAgICAgLy8gT3V0cHV0IGNvbnRlbnQgc2NyaXB0IENTUyB0byBgY29udGVudC1zY3JpcHRzL2AsIGJ1dCBhbGwgb3RoZXIgc2NyaXB0cyBhcmUgd3JpdHRlbiB0b1xuICAgICAgICAgIC8vIGBhc3NldHMvYC5cbiAgICAgICAgICBhc3NldEZpbGVOYW1lczogKHsgbmFtZSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoZW50cnlwb2ludC50eXBlID09PSAnY29udGVudC1zY3JpcHQnICYmIG5hbWU/LmVuZHNXaXRoKCdjc3MnKSkge1xuICAgICAgICAgICAgICByZXR1cm4gYGNvbnRlbnQtc2NyaXB0cy8ke2VudHJ5cG9pbnQubmFtZX0uW2V4dF1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGBhc3NldHMvJHtlbnRyeXBvaW50Lm5hbWV9LltleHRdYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRlZmluZToge1xuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ha2xpbmtlcjEvdml0ZS1wbHVnaW4td2ViLWV4dGVuc2lvbi9pc3N1ZXMvOTZcbiAgICAgICdwcm9jZXNzLmVudi5OT0RFX0VOVic6IEpTT04uc3RyaW5naWZ5KGNvbmZpZy5tb2RlKSxcbiAgICB9LFxuICB9O1xuICBmb3IgKGNvbnN0IGdsb2JhbCBvZiBnZXRFbnRyeXBvaW50R2xvYmFscyhjb25maWcsIGVudHJ5cG9pbnQubmFtZSkpIHtcbiAgICBsaWJNb2RlLmRlZmluZSFbZ2xvYmFsLm5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZ2xvYmFsLnZhbHVlKTtcbiAgfVxuICBjb25zdCBlbnRyeUNvbmZpZyA9IHZpdGUubWVyZ2VDb25maWcoXG4gICAgbGliTW9kZSxcbiAgICBhd2FpdCBjb25maWcudml0ZShjb25maWcuZW52KSxcbiAgKSBhcyB2aXRlLklubGluZUNvbmZpZztcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCB2aXRlLmJ1aWxkKGVudHJ5Q29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICBlbnRyeXBvaW50czogZW50cnlwb2ludCxcbiAgICBjaHVua3M6IGdldEJ1aWxkT3V0cHV0Q2h1bmtzKHJlc3VsdCksXG4gIH07XG59XG5cbi8qKlxuICogVXNlIFZpdGUncyBtdWx0aXBhZ2UgYnVpbGQgdG8gYnVuZGxlIGFsbCB0aGUgZW50cnlwb2ludHMgaW4gYSBzaW5nbGUgc3RlcC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRNdWx0aXBsZUVudHJ5cG9pbnRzKFxuICBlbnRyeXBvaW50czogRW50cnlwb2ludFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxCdWlsZFN0ZXBPdXRwdXQ+IHtcbiAgY29uc3QgbXVsdGlQYWdlOiB2aXRlLlVzZXJDb25maWcgPSB7XG4gICAgcGx1Z2luczogW3d4dFBsdWdpbnMubXVsdGlwYWdlTW92ZShlbnRyeXBvaW50cywgY29uZmlnKV0sXG4gICAgYnVpbGQ6IHtcbiAgICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgICAgaW5wdXQ6IGVudHJ5cG9pbnRzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoaW5wdXQsIGVudHJ5KSA9PiB7XG4gICAgICAgICAgaW5wdXRbZW50cnkubmFtZV0gPSBlbnRyeS5pbnB1dFBhdGg7XG4gICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9LCB7fSksXG4gICAgICAgIG91dHB1dDoge1xuICAgICAgICAgIC8vIEluY2x1ZGUgYSBoYXNoIHRvIHByZXZlbnQgY29uZmxpY3RzXG4gICAgICAgICAgY2h1bmtGaWxlTmFtZXM6ICdjaHVua3MvW25hbWVdLVtoYXNoXS5qcycsXG4gICAgICAgICAgLy8gSW5jbHVkZSBhIGhhc2ggdG8gcHJldmVudCBjb25mbGljdHNcbiAgICAgICAgICBlbnRyeUZpbGVOYW1lczogJ2NodW5rcy9bbmFtZV0tW2hhc2hdLmpzJyxcbiAgICAgICAgICAvLyBXZSBjYW4ndCBjb250cm9sIHRoZSBcIm5hbWVcIiwgc28gd2UgbmVlZCBhIGhhc2ggdG8gcHJldmVudCBjb25mbGljdHNcbiAgICAgICAgICBhc3NldEZpbGVOYW1lczogJ2Fzc2V0cy9bbmFtZV0tW2hhc2hdLltleHRdJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkZWZpbmU6IHt9LFxuICB9O1xuICBmb3IgKGNvbnN0IGdsb2JhbCBvZiBnZXRFbnRyeXBvaW50R2xvYmFscyhjb25maWcsICdodG1sJykpIHtcbiAgICBtdWx0aVBhZ2UuZGVmaW5lIVtnbG9iYWwubmFtZV0gPSBKU09OLnN0cmluZ2lmeShnbG9iYWwudmFsdWUpO1xuICB9XG5cbiAgY29uc3QgZW50cnlDb25maWcgPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgIG11bHRpUGFnZSxcbiAgICBhd2FpdCBjb25maWcudml0ZShjb25maWcuZW52KSxcbiAgKSBhcyB2aXRlLlVzZXJDb25maWc7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdml0ZS5idWlsZChlbnRyeUNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgZW50cnlwb2ludHMsXG4gICAgY2h1bmtzOiBnZXRCdWlsZE91dHB1dENodW5rcyhyZXN1bHQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRCdWlsZE91dHB1dENodW5rcyhcbiAgcmVzdWx0OiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHZpdGUuYnVpbGQ+Pixcbik6IEJ1aWxkU3RlcE91dHB1dFsnY2h1bmtzJ10ge1xuICBpZiAoJ29uJyBpbiByZXN1bHQpIHRocm93IEVycm9yKCd3eHQgZG9lcyBub3Qgc3VwcG9ydCB2aXRlIHdhdGNoIG1vZGUuJyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHJldHVybiByZXN1bHQuZmxhdE1hcCgoeyBvdXRwdXQgfSkgPT4gb3V0cHV0KTtcbiAgcmV0dXJuIHJlc3VsdC5vdXRwdXQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHlQdWJsaWNEaXJlY3RvcnkoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPEJ1aWxkT3V0cHV0WydwdWJsaWNBc3NldHMnXT4ge1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGdldFB1YmxpY0ZpbGVzKGNvbmZpZyk7XG4gIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICBjb25zdCBwdWJsaWNBc3NldHM6IEJ1aWxkT3V0cHV0WydwdWJsaWNBc3NldHMnXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBjb25zdCBzcmNQYXRoID0gcmVzb2x2ZShjb25maWcucHVibGljRGlyLCBmaWxlKTtcbiAgICBjb25zdCBvdXRQYXRoID0gcmVzb2x2ZShjb25maWcub3V0RGlyLCBmaWxlKTtcblxuICAgIGF3YWl0IGZzLmVuc3VyZURpcihkaXJuYW1lKG91dFBhdGgpKTtcbiAgICBhd2FpdCBmcy5jb3B5RmlsZShzcmNQYXRoLCBvdXRQYXRoKTtcbiAgICBwdWJsaWNBc3NldHMucHVzaCh7XG4gICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgZmlsZU5hbWU6IGZpbGUsXG4gICAgICBuYW1lOiBmaWxlLFxuICAgICAgbmVlZHNDb2RlUmVmZXJlbmNlOiBmYWxzZSxcbiAgICAgIHNvdXJjZTogYXdhaXQgZnMucmVhZEZpbGUoc3JjUGF0aCksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcHVibGljQXNzZXRzO1xufVxuIiwgImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUVtcHR5RGlycyhkaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBmaWxlKTtcbiAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBhd2FpdCByZW1vdmVFbXB0eURpcnMoZmlsZVBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgZnMucm1kaXIoZGlyKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gbm9vcCBvbiBmYWlsdXJlIC0gdGhpcyBtZWFucyB0aGUgZGlyZWN0b3J5IHdhcyBub3QgZW1wdHkuXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgZ2xvYiBmcm9tICdmYXN0LWdsb2InO1xuaW1wb3J0IHsgdW5ub3JtYWxpemVQYXRoIH0gZnJvbSAnLi9wYXRocyc7XG5cbi8qKlxuICogR2V0IGFsbCB0aGUgZmlsZXMgaW4gdGhlIHByb2plY3QncyBwdWJsaWMgZGlyZWN0b3J5LiBSZXR1cm5lZCBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlXG4gKiBgY29uZmlnLnB1YmxpY0RpcmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQdWJsaWNGaWxlcyhcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKGNvbmZpZy5wdWJsaWNEaXIpKSkgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYignKiovKicsIHsgY3dkOiBjb25maWcucHVibGljRGlyIH0pO1xuICByZXR1cm4gZmlsZXMubWFwKHVubm9ybWFsaXplUGF0aCk7XG59XG4iLCAiaW1wb3J0IHsgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7XG4gIEJhY2tncm91bmRFbnRyeXBvaW50LFxuICBCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24sXG4gIEJhc2VFbnRyeXBvaW50T3B0aW9ucyxcbiAgQ29udGVudFNjcmlwdERlZmluaXRpb24sXG4gIENvbnRlbnRTY3JpcHRFbnRyeXBvaW50LFxuICBFbnRyeXBvaW50LFxuICBHZW5lcmljRW50cnlwb2ludCxcbiAgSW50ZXJuYWxDb25maWcsXG4gIE9wdGlvbnNFbnRyeXBvaW50LFxuICBQb3B1cEVudHJ5cG9pbnQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBtaW5pbWF0Y2ggfSBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHsgcGFyc2VIVE1MIH0gZnJvbSAnbGlua2Vkb20nO1xuaW1wb3J0IEpTT041IGZyb20gJ2pzb241JztcbmltcG9ydCB7IGltcG9ydEVudHJ5cG9pbnRGaWxlIH0gZnJvbSAnLi4vdXRpbHMvaW1wb3J0RW50cnlwb2ludEZpbGUnO1xuaW1wb3J0IGdsb2IgZnJvbSAnZmFzdC1nbG9iJztcbmltcG9ydCB7XG4gIGdldEVudHJ5cG9pbnROYW1lLFxuICByZXNvbHZlUGVyQnJvd3Nlck9wdGlvbixcbn0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEIH0gZnJvbSAnLi4vdml0ZS1wbHVnaW5zL25vb3BCYWNrZ3JvdW5kJztcbmltcG9ydCB7IENTU19FWFRFTlNJT05TX1BBVFRFUk4gfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5cbi8qKlxuICogUmV0dXJuIGVudHJ5cG9pbnRzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIGJ5IGxvb2tpbmcgdGhyb3VnaCB0aGUgcHJvamVjdCdzIGZpbGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZEVudHJ5cG9pbnRzKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxFbnRyeXBvaW50W10+IHtcbiAgY29uc3QgcmVsYXRpdmVQYXRocyA9IGF3YWl0IGdsb2IoJyoqLyonLCB7XG4gICAgY3dkOiBjb25maWcuZW50cnlwb2ludHNEaXIsXG4gIH0pO1xuICAvLyBFbnN1cmUgY29uc2lzdGVudCBvdXRwdXRcbiAgcmVsYXRpdmVQYXRocy5zb3J0KCk7XG5cbiAgY29uc3QgcGF0aEdsb2JzID0gT2JqZWN0LmtleXMoUEFUSF9HTE9CX1RPX1RZUEVfTUFQKTtcbiAgY29uc3QgZXhpc3RpbmdOYW1lczogUmVjb3JkPHN0cmluZywgRW50cnlwb2ludCB8IHVuZGVmaW5lZD4gPSB7fTtcblxuICBjb25zdCBlbnRyeXBvaW50czogRW50cnlwb2ludFtdID0gW107XG4gIGxldCBoYXNCYWNrZ3JvdW5kID0gZmFsc2U7XG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHJlbGF0aXZlUGF0aHMubWFwKGFzeW5jIChyZWxhdGl2ZVBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSByZXNvbHZlKGNvbmZpZy5lbnRyeXBvaW50c0RpciwgcmVsYXRpdmVQYXRoKTtcbiAgICAgIGNvbnN0IG1hdGNoaW5nR2xvYiA9IHBhdGhHbG9icy5maW5kKChnbG9iKSA9PlxuICAgICAgICBtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBnbG9iKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChtYXRjaGluZ0dsb2IgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICAgIGAke3JlbGF0aXZlUGF0aH0gZG9lcyBub3QgbWF0Y2ggYW55IGtub3duIGVudHJ5cG9pbnQuIEtub3duIGVudHJ5cG9pbnRzOlxcbiR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICBQQVRIX0dMT0JfVE9fVFlQRV9NQVAsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICApfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBQQVRIX0dMT0JfVE9fVFlQRV9NQVBbbWF0Y2hpbmdHbG9iXTtcbiAgICAgIGlmICh0eXBlID09PSAnaWdub3JlZCcpIHJldHVybjtcblxuICAgICAgbGV0IGVudHJ5cG9pbnQ6IEVudHJ5cG9pbnQ7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAncG9wdXAnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSBhd2FpdCBnZXRQb3B1cEVudHJ5cG9pbnQoY29uZmlnLCBwYXRoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb3B0aW9ucyc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldE9wdGlvbnNFbnRyeXBvaW50KGNvbmZpZywgcGF0aCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JhY2tncm91bmQnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSBhd2FpdCBnZXRCYWNrZ3JvdW5kRW50cnlwb2ludChjb25maWcsIHBhdGgpO1xuICAgICAgICAgIGhhc0JhY2tncm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb250ZW50LXNjcmlwdCc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldENvbnRlbnRTY3JpcHRFbnRyeXBvaW50KFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndW5saXN0ZWQtcGFnZSc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldFVubGlzdGVkUGFnZUVudHJ5cG9pbnQoY29uZmlnLCBwYXRoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY29udGVudC1zY3JpcHQtc3R5bGUnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbmFtZTogZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICAgICAgICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICAgICAgICAgIG91dHB1dERpcjogcmVzb2x2ZShjb25maWcub3V0RGlyLCBDT05URU5UX1NDUklQVF9PVVRfRElSKSxcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgaW5jbHVkZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBleGNsdWRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgZW50cnlwb2ludCA9IHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBuYW1lOiBnZXRFbnRyeXBvaW50TmFtZShjb25maWcuZW50cnlwb2ludHNEaXIsIHBhdGgpLFxuICAgICAgICAgICAgaW5wdXRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBjb25maWcub3V0RGlyLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBpbmNsdWRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGV4Y2x1ZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2l0aFNhbWVOYW1lID0gZXhpc3RpbmdOYW1lc1tlbnRyeXBvaW50Lm5hbWVdO1xuICAgICAgaWYgKHdpdGhTYW1lTmFtZSkge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBgTXVsdGlwbGUgZW50cnlwb2ludHMgd2l0aCB0aGUgbmFtZSBcIiR7XG4gICAgICAgICAgICBlbnRyeXBvaW50Lm5hbWVcbiAgICAgICAgICB9XCIgZGV0ZWN0ZWQsIGJ1dCBvbmx5IG9uZSBpcyBhbGxvd2VkOiAke1tcbiAgICAgICAgICAgIHJlbGF0aXZlKGNvbmZpZy5yb290LCB3aXRoU2FtZU5hbWUuaW5wdXRQYXRoKSxcbiAgICAgICAgICAgIHJlbGF0aXZlKGNvbmZpZy5yb290LCBlbnRyeXBvaW50LmlucHV0UGF0aCksXG4gICAgICAgICAgXS5qb2luKCcsICcpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBlbnRyeXBvaW50cy5wdXNoKGVudHJ5cG9pbnQpO1xuICAgICAgZXhpc3RpbmdOYW1lc1tlbnRyeXBvaW50Lm5hbWVdID0gZW50cnlwb2ludDtcbiAgICB9KSxcbiAgKTtcbiAgaWYgKGNvbmZpZy5jb21tYW5kID09PSAnc2VydmUnICYmICFoYXNCYWNrZ3JvdW5kKSB7XG4gICAgZW50cnlwb2ludHMucHVzaChcbiAgICAgIGF3YWl0IGdldEJhY2tncm91bmRFbnRyeXBvaW50KGNvbmZpZywgVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEKSxcbiAgICApO1xuICB9XG5cbiAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnQWxsIGVudHJ5cG9pbnRzOicsIGVudHJ5cG9pbnRzKTtcbiAgY29uc3QgdGFyZ2V0RW50cnlwb2ludHMgPSBlbnRyeXBvaW50cy5maWx0ZXIoKGVudHJ5KSA9PiB7XG4gICAgY29uc3QgeyBpbmNsdWRlLCBleGNsdWRlIH0gPSBlbnRyeS5vcHRpb25zO1xuICAgIGlmIChpbmNsdWRlPy5sZW5ndGggJiYgZXhjbHVkZT8ubGVuZ3RoKSB7XG4gICAgICBjb25maWcubG9nZ2VyLndhcm4oXG4gICAgICAgIGBUaGUgJHtlbnRyeS5uYW1lfSBlbnRyeXBvaW50IGxpc3RzIGJvdGggaW5jbHVkZSBhbmQgZXhjbHVkZSwgYnV0IG9ubHkgb25lIGNhbiBiZSB1c2VkIHBlciBlbnRyeXBvaW50LiBFbnRyeXBvaW50IGlnbm9yZWQuYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChleGNsdWRlPy5sZW5ndGggJiYgIWluY2x1ZGU/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuICFleGNsdWRlLmluY2x1ZGVzKGNvbmZpZy5icm93c2VyKTtcbiAgICB9XG4gICAgaWYgKGluY2x1ZGU/Lmxlbmd0aCAmJiAhZXhjbHVkZT8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaW5jbHVkZS5pbmNsdWRlcyhjb25maWcuYnJvd3Nlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuICBjb25maWcubG9nZ2VyLmRlYnVnKGAke2NvbmZpZy5icm93c2VyfSBlbnRyeXBvaW50czpgLCB0YXJnZXRFbnRyeXBvaW50cyk7XG4gIHJldHVybiB0YXJnZXRFbnRyeXBvaW50cztcbn1cblxuZnVuY3Rpb24gZ2V0SHRtbEJhc2VPcHRpb25zKGRvY3VtZW50OiBEb2N1bWVudCk6IEJhc2VFbnRyeXBvaW50T3B0aW9ucyB7XG4gIGNvbnN0IG9wdGlvbnM6IEJhc2VFbnRyeXBvaW50T3B0aW9ucyA9IHt9O1xuXG4gIGNvbnN0IGluY2x1ZGVDb250ZW50ID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nbWFuaWZlc3QuaW5jbHVkZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGluY2x1ZGVDb250ZW50KSB7XG4gICAgb3B0aW9ucy5pbmNsdWRlID0gSlNPTjUucGFyc2UoaW5jbHVkZUNvbnRlbnQpO1xuICB9XG5cbiAgY29uc3QgZXhjbHVkZUNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5leGNsdWRlJ11cIilcbiAgICA/LmdldEF0dHJpYnV0ZSgnY29udGVudCcpO1xuICBpZiAoZXhjbHVkZUNvbnRlbnQpIHtcbiAgICBvcHRpb25zLmV4Y2x1ZGUgPSBKU09ONS5wYXJzZShleGNsdWRlQ29udGVudCk7XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGF0aCBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwb3B1cCBIVE1MIGZpbGUuXG4gKiBAcGFyYW0gY29udGVudCBTdHJpbmcgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIHBhdGguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBvcHVwRW50cnlwb2ludChcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbiAgcGF0aDogc3RyaW5nLFxuKTogUHJvbWlzZTxQb3B1cEVudHJ5cG9pbnQ+IHtcbiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICBjb25zdCB7IGRvY3VtZW50IH0gPSBwYXJzZUhUTUwoY29udGVudCk7XG5cbiAgY29uc3Qgb3B0aW9uczogUG9wdXBFbnRyeXBvaW50WydvcHRpb25zJ10gPSBnZXRIdG1sQmFzZU9wdGlvbnMoZG9jdW1lbnQpO1xuXG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndGl0bGUnKTtcbiAgaWYgKHRpdGxlICE9IG51bGwpIG9wdGlvbnMuZGVmYXVsdFRpdGxlID0gdGl0bGUudGV4dENvbnRlbnQgPz8gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGRlZmF1bHRJY29uQ29udGVudCA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J21hbmlmZXN0LmRlZmF1bHRfaWNvbiddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGRlZmF1bHRJY29uQ29udGVudCkge1xuICAgIHRyeSB7XG4gICAgICBvcHRpb25zLmRlZmF1bHRJY29uID0gSlNPTjUucGFyc2UoZGVmYXVsdEljb25Db250ZW50KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIuZmF0YWwoXG4gICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgZGVmYXVsdF9pY29uIG1ldGEgdGFnIGNvbnRlbnQgYXMgSlNPTjUuIGNvbnRlbnQ9JHtkZWZhdWx0SWNvbkNvbnRlbnR9YCxcbiAgICAgICAgZXJyLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtdjJLZXlDb250ZW50ID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nbWFuaWZlc3QudHlwZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKG12MktleUNvbnRlbnQpIHtcbiAgICBvcHRpb25zLm12MktleSA9XG4gICAgICBtdjJLZXlDb250ZW50ID09PSAncGFnZV9hY3Rpb24nID8gJ3BhZ2VfYWN0aW9uJyA6ICdicm93c2VyX2FjdGlvbic7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdwb3B1cCcsXG4gICAgbmFtZTogJ3BvcHVwJyxcbiAgICBvcHRpb25zLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IGNvbmZpZy5vdXREaXIsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgb3B0aW9ucyBIVE1MIGZpbGUuXG4gKiBAcGFyYW0gY29udGVudCBTdHJpbmcgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIHBhdGguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE9wdGlvbnNFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPE9wdGlvbnNFbnRyeXBvaW50PiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgeyBkb2N1bWVudCB9ID0gcGFyc2VIVE1MKGNvbnRlbnQpO1xuXG4gIGNvbnN0IG9wdGlvbnM6IE9wdGlvbnNFbnRyeXBvaW50WydvcHRpb25zJ10gPSBnZXRIdG1sQmFzZU9wdGlvbnMoZG9jdW1lbnQpO1xuXG4gIGNvbnN0IG9wZW5JblRhYkNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5vcGVuX2luX3RhYiddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKG9wZW5JblRhYkNvbnRlbnQpIHtcbiAgICBvcHRpb25zLm9wZW5JblRhYiA9IG9wZW5JblRhYkNvbnRlbnQgPT09ICd0cnVlJztcbiAgfVxuXG4gIGNvbnN0IGNocm9tZVN0eWxlQ29udGVudCA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J21hbmlmZXN0LmNocm9tZV9zdHlsZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGNocm9tZVN0eWxlQ29udGVudCkge1xuICAgIG9wdGlvbnMuY2hyb21lU3R5bGUgPSBjaHJvbWVTdHlsZUNvbnRlbnQgPT09ICd0cnVlJztcbiAgfVxuXG4gIGNvbnN0IGJyb3dzZXJTdHlsZUNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5icm93c2VyX3N0eWxlJ11cIilcbiAgICA/LmdldEF0dHJpYnV0ZSgnY29udGVudCcpO1xuICBpZiAoYnJvd3NlclN0eWxlQ29udGVudCkge1xuICAgIG9wdGlvbnMuYnJvd3NlclN0eWxlID0gYnJvd3NlclN0eWxlQ29udGVudCA9PT0gJ3RydWUnO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnb3B0aW9ucycsXG4gICAgbmFtZTogJ29wdGlvbnMnLFxuICAgIG9wdGlvbnMsXG4gICAgaW5wdXRQYXRoOiBwYXRoLFxuICAgIG91dHB1dERpcjogY29uZmlnLm91dERpcixcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGF0aCBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBIVE1MIGZpbGUuXG4gKiBAcGFyYW0gY29udGVudCBTdHJpbmcgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIHBhdGguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFVubGlzdGVkUGFnZUVudHJ5cG9pbnQoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIHBhdGg6IHN0cmluZyxcbik6IFByb21pc2U8R2VuZXJpY0VudHJ5cG9pbnQ+IHtcbiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICBjb25zdCB7IGRvY3VtZW50IH0gPSBwYXJzZUhUTUwoY29udGVudCk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAndW5saXN0ZWQtcGFnZScsXG4gICAgbmFtZTogZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICBpbnB1dFBhdGg6IHBhdGgsXG4gICAgb3V0cHV0RGlyOiBjb25maWcub3V0RGlyLFxuICAgIG9wdGlvbnM6IGdldEh0bWxCYXNlT3B0aW9ucyhkb2N1bWVudCksXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgYmFja2dyb3VuZCdzIFRTIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEJhY2tncm91bmRFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPEJhY2tncm91bmRFbnRyeXBvaW50PiB7XG4gIGxldCBvcHRpb25zOiBPbWl0PEJhY2tncm91bmRTY3JpcHREZWZpbnRpdGlvbiwgJ21haW4nPiA9IHt9O1xuICBpZiAocGF0aCAhPT0gVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEKSB7XG4gICAgY29uc3QgZGVmYXVsdEV4cG9ydCA9XG4gICAgICBhd2FpdCBpbXBvcnRFbnRyeXBvaW50RmlsZTxCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24+KHBhdGgsIGNvbmZpZyk7XG4gICAgaWYgKGRlZmF1bHRFeHBvcnQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0JhY2tncm91bmQgc2NyaXB0IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IGV4cG9ydCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1haW46IF8sIC4uLm1vZHVsZU9wdGlvbnMgfSA9IGRlZmF1bHRFeHBvcnQ7XG4gICAgb3B0aW9ucyA9IG1vZHVsZU9wdGlvbnM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnYmFja2dyb3VuZCcsXG4gICAgbmFtZTogJ2JhY2tncm91bmQnLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IGNvbmZpZy5vdXREaXIsXG4gICAgb3B0aW9uczoge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHR5cGU6IHJlc29sdmVQZXJCcm93c2VyT3B0aW9uKG9wdGlvbnMudHlwZSwgY29uZmlnLmJyb3dzZXIpLFxuICAgICAgcGVyc2lzdGVudDogcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24ob3B0aW9ucy5wZXJzaXN0ZW50LCBjb25maWcuYnJvd3NlciksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGF0aCBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBjb250ZW50IHNjcmlwdCdzIFRTIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENvbnRlbnRTY3JpcHRFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBuYW1lOiBzdHJpbmcsXG4gIHBhdGg6IHN0cmluZyxcbik6IFByb21pc2U8Q29udGVudFNjcmlwdEVudHJ5cG9pbnQ+IHtcbiAgY29uc3QgeyBtYWluOiBfLCAuLi5vcHRpb25zIH0gPVxuICAgIGF3YWl0IGltcG9ydEVudHJ5cG9pbnRGaWxlPENvbnRlbnRTY3JpcHREZWZpbml0aW9uPihwYXRoLCBjb25maWcpO1xuICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgdGhyb3cgRXJyb3IoYENvbnRlbnQgc2NyaXB0ICR7bmFtZX0gZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgZXhwb3J0YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnY29udGVudC1zY3JpcHQnLFxuICAgIG5hbWU6IGdldEVudHJ5cG9pbnROYW1lKGNvbmZpZy5lbnRyeXBvaW50c0RpciwgcGF0aCksXG4gICAgaW5wdXRQYXRoOiBwYXRoLFxuICAgIG91dHB1dERpcjogcmVzb2x2ZShjb25maWcub3V0RGlyLCBDT05URU5UX1NDUklQVF9PVVRfRElSKSxcbiAgICBvcHRpb25zLFxuICB9O1xufVxuXG5jb25zdCBQQVRIX0dMT0JfVE9fVFlQRV9NQVA6IFJlY29yZDxzdHJpbmcsIEVudHJ5cG9pbnRbJ3R5cGUnXSB8ICdpZ25vcmVkJz4gPSB7XG4gICdzYW5kYm94Lmh0bWwnOiAnc2FuZGJveCcsXG4gICdzYW5kYm94L2luZGV4Lmh0bWwnOiAnc2FuZGJveCcsXG4gICcqLnNhbmRib3guaHRtbCc6ICdzYW5kYm94JyxcbiAgJyouc2FuZGJveC9pbmRleC5odG1sJzogJ3NhbmRib3gnLFxuXG4gICdib29rbWFya3MuaHRtbCc6ICdib29rbWFya3MnLFxuICAnYm9va21hcmtzL2luZGV4Lmh0bWwnOiAnYm9va21hcmtzJyxcblxuICAnaGlzdG9yeS5odG1sJzogJ2hpc3RvcnknLFxuICAnaGlzdG9yeS9pbmRleC5odG1sJzogJ2hpc3RvcnknLFxuXG4gICduZXd0YWIuaHRtbCc6ICduZXd0YWInLFxuICAnbmV3dGFiL2luZGV4Lmh0bWwnOiAnbmV3dGFiJyxcblxuICAnc2lkZXBhbmVsLmh0bWwnOiAnc2lkZXBhbmVsJyxcbiAgJ3NpZGVwYW5lbC9pbmRleC5odG1sJzogJ3NpZGVwYW5lbCcsXG4gICcqLnNpZGVwYW5lbC5odG1sJzogJ3NpZGVwYW5lbCcsXG4gICcqLnNpZGVwYW5lbC9pbmRleC5odG1sJzogJ3NpZGVwYW5lbCcsXG5cbiAgJ2RldnRvb2xzLmh0bWwnOiAnZGV2dG9vbHMnLFxuICAnZGV2dG9vbHMvaW5kZXguaHRtbCc6ICdkZXZ0b29scycsXG5cbiAgJ2JhY2tncm91bmQuW2p0XXMnOiAnYmFja2dyb3VuZCcsXG4gICdiYWNrZ3JvdW5kL2luZGV4LltqdF1zJzogJ2JhY2tncm91bmQnLFxuICBbVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEXTogJ2JhY2tncm91bmQnLFxuXG4gICdjb250ZW50LltqdF1zPyh4KSc6ICdjb250ZW50LXNjcmlwdCcsXG4gICdjb250ZW50L2luZGV4LltqdF1zPyh4KSc6ICdjb250ZW50LXNjcmlwdCcsXG4gICcqLmNvbnRlbnQuW2p0XXM/KHgpJzogJ2NvbnRlbnQtc2NyaXB0JyxcbiAgJyouY29udGVudC9pbmRleC5banRdcz8oeCknOiAnY29udGVudC1zY3JpcHQnLFxuICBbYGNvbnRlbnQuJHtDU1NfRVhURU5TSU9OU19QQVRURVJOfWBdOiAnY29udGVudC1zY3JpcHQtc3R5bGUnLFxuICBbYCouY29udGVudC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICdjb250ZW50LXNjcmlwdC1zdHlsZScsXG4gIFtgY29udGVudC9pbmRleC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICdjb250ZW50LXNjcmlwdC1zdHlsZScsXG4gIFtgKi5jb250ZW50L2luZGV4LiR7Q1NTX0VYVEVOU0lPTlNfUEFUVEVSTn1gXTogJ2NvbnRlbnQtc2NyaXB0LXN0eWxlJyxcblxuICAncG9wdXAuaHRtbCc6ICdwb3B1cCcsXG4gICdwb3B1cC9pbmRleC5odG1sJzogJ3BvcHVwJyxcblxuICAnb3B0aW9ucy5odG1sJzogJ29wdGlvbnMnLFxuICAnb3B0aW9ucy9pbmRleC5odG1sJzogJ29wdGlvbnMnLFxuXG4gICcqLmh0bWwnOiAndW5saXN0ZWQtcGFnZScsXG4gICcqL2luZGV4Lmh0bWwnOiAndW5saXN0ZWQtcGFnZScsXG4gICcqLltqdF1zJzogJ3VubGlzdGVkLXNjcmlwdCcsXG4gICcqL2luZGV4LnRzJzogJ3VubGlzdGVkLXNjcmlwdCcsXG4gIFtgKi4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICd1bmxpc3RlZC1zdHlsZScsXG4gIFtgKi9pbmRleC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICd1bmxpc3RlZC1zdHlsZScsXG5cbiAgLy8gRG9uJ3Qgd2FybiBhYm91dCBhbnkgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMsIGxpa2UgQ1NTIG9yIEpTIGVudHJ5cG9pbnRzIGZvciBIVE1MIGZpbGVzIG9yIHRlc3RzXG4gICcqLyoqJzogJ2lnbm9yZWQnLFxufTtcblxuY29uc3QgQ09OVEVOVF9TQ1JJUFRfT1VUX0RJUiA9ICdjb250ZW50LXNjcmlwdHMnO1xuIiwgImltcG9ydCBjcmVhdGVKSVRJLCB7IFRyYW5zZm9ybU9wdGlvbnMgYXMgSml0aVRyYW5zZm9ybU9wdGlvbnMgfSBmcm9tICdqaXRpJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlVW5pbXBvcnQgfSBmcm9tICd1bmltcG9ydCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZ2V0VW5pbXBvcnRPcHRpb25zIH0gZnJvbSAnLi9hdXRvLWltcG9ydHMnO1xuaW1wb3J0IHsgcmVtb3ZlUHJvamVjdEltcG9ydFN0YXRlbWVudHMgfSBmcm9tICcuL3N0cmluZ3MnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuaW1wb3J0IHsgVHJhbnNmb3JtT3B0aW9ucywgdHJhbnNmb3JtU3luYyB9IGZyb20gJ2VzYnVpbGQnO1xuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBleHBvcnQgb2YgYSBgcGF0aGAuXG4gKlxuICogSXQgd29ya3MgYnk6XG4gKlxuICogMS4gUmVhZGluZyB0aGUgZmlsZSB0ZXh0XG4gKiAyLiBTdHJpcHBpbmcgYWxsIGltcG9ydHMgZnJvbSBpdCB2aWEgcmVnZXhcbiAqIDMuIEF1dG8taW1wb3J0IG9ubHkgdGhlIGNsaWVudCBoZWxwZXIgZnVuY3Rpb25zXG4gKlxuICogVGhpcyBwcmV2ZW50cyByZXNvbHZpbmcgaW1wb3J0cyBvZiBpbXBvcnRzLCBzcGVlZGluZyB0aGluZ3MgdXAgYW5kIHByZXZlbnRpbmcgXCJ4eHggaXMgbm90XG4gKiBkZWZpbmVkXCIgZXJyb3JzLlxuICpcbiAqIERvd25zaWRlIGlzIHRoYXQgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgb3V0c2lkZSBvZiB0aGUgbWFpbiBmdWNudGlvbiBmb3IgdGhlIGVudHJ5cG9pbnQsXG4gKiBvdGhlcndpc2UgeW91IHdpbGwgc2VlIFwieHh4IGlzIG5vdCBkZWZpbmVkXCIgZXJyb3JzIGZvciBhbnkgaW1wb3J0cyB1c2VkIG91dHNpZGUgb2YgbWFpbiBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydEVudHJ5cG9pbnRGaWxlPFQ+KFxuICBwYXRoOiBzdHJpbmcsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBmaWxlIG1ldGFkYXRhOicsIHBhdGgpO1xuICAvLyBKSVRJICYgQmFiZWwgdXNlcyBub3JtYWxpemVkIHBhdGhzLlxuICBjb25zdCBub3JtYWxQYXRoID0gbm9ybWFsaXplUGF0aChwYXRoKTtcblxuICBjb25zdCB1bmltcG9ydCA9IGNyZWF0ZVVuaW1wb3J0KHtcbiAgICAuLi5nZXRVbmltcG9ydE9wdGlvbnMoY29uZmlnKSxcbiAgICAvLyBPbmx5IGFsbG93IHNwZWNpZmljIGltcG9ydHMsIG5vdCBhbGwgZnJvbSB0aGUgcHJvamVjdFxuICAgIGRpcnM6IFtdLFxuICB9KTtcbiAgYXdhaXQgdW5pbXBvcnQuaW5pdCgpO1xuXG4gIGNvbnN0IHRleHQgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgdGV4dE5vSW1wb3J0cyA9IHJlbW92ZVByb2plY3RJbXBvcnRTdGF0ZW1lbnRzKHRleHQpO1xuICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHVuaW1wb3J0LmluamVjdEltcG9ydHModGV4dE5vSW1wb3J0cyk7XG4gIGNvbmZpZy5sb2dnZXIuZGVidWcoXG4gICAgWydUZXh0OicsIHRleHQsICdObyBpbXBvcnRzOicsIHRleHROb0ltcG9ydHMsICdDb2RlOicsIGNvZGVdLmpvaW4oJ1xcbicpLFxuICApO1xuXG4gIGNvbnN0IGppdGkgPSBjcmVhdGVKSVRJKF9fZmlsZW5hbWUsIHtcbiAgICBjYWNoZTogZmFsc2UsXG4gICAgZGVidWc6IGNvbmZpZy5kZWJ1ZyxcbiAgICBlc21SZXNvbHZlOiB0cnVlLFxuICAgIGludGVyb3BEZWZhdWx0OiB0cnVlLFxuICAgIGFsaWFzOiB7XG4gICAgICAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJzogcmVzb2x2ZShcbiAgICAgICAgY29uZmlnLnJvb3QsXG4gICAgICAgICdub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzL2Zha2UtYnJvd3Nlci5qcycsXG4gICAgICApLFxuICAgIH0sXG4gICAgLy8gTGlzdCBvZiBleHRlbnNpb25zIHRvIHRyYW5zZm9ybSB3aXRoIGVzYnVpbGRcbiAgICBleHRlbnNpb25zOiBbJy50cycsICcuY3RzJywgJy5tdHMnLCAnLnRzeCcsICcuanMnLCAnLmNqcycsICcubWpzJywgJy5qc3gnXSxcbiAgICB0cmFuc2Zvcm0ob3B0cykge1xuICAgICAgY29uc3QgaXNFbnRyeXBvaW50ID0gb3B0cy5maWxlbmFtZSA9PT0gbm9ybWFsUGF0aDtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm1TeW5jKFxuICAgICAgICAvLyBVc2UgbW9kaWZpZWQgc291cmNlIGNvZGUgZm9yIGVudHJ5cG9pbnRzXG4gICAgICAgIGlzRW50cnlwb2ludCA/IGNvZGUgOiBvcHRzLnNvdXJjZSxcbiAgICAgICAgZ2V0RXNidWlsZE9wdGlvbnMob3B0cyksXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGppdGkocGF0aCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbmZpZy5sb2dnZXIuZXJyb3IoZXJyKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RXNidWlsZE9wdGlvbnMob3B0czogSml0aVRyYW5zZm9ybU9wdGlvbnMpOiBUcmFuc2Zvcm1PcHRpb25zIHtcbiAgY29uc3QgaXNKc3ggPSBvcHRzLmZpbGVuYW1lPy5lbmRzV2l0aCgneCcpO1xuICByZXR1cm4ge1xuICAgIGZvcm1hdDogJ2NqcycsXG4gICAgbG9hZGVyOiBpc0pzeCA/ICd0c3gnIDogJ3RzJyxcbiAgICBqc3g6IGlzSnN4ID8gJ2F1dG9tYXRpYycgOiB1bmRlZmluZWQsXG4gIH07XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGtlYmFiQ2FzZUFscGhhbnVtZXJpYyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOS1cXHNdL2csICcnKSAvLyBSZW1vdmUgYWxsIG5vbi1hbHBoYW51bWVyaWMsIG5vbi1oeXBoZW4gY2hhcmFjdGVyc1xuICAgIC5yZXBsYWNlKC9cXHMrL2csICctJyk7IC8vIFJlcGxhY2Ugc3BhY2VzIHdpdGggaHlwaGVuc1xufVxuXG4vKipcbiAqIFJlbW92ZXMgaW1wb3J0IHN0YXRlbWVudHMgZnJvbSB0aGUgdG9wIG9mIGEgZmlsZS4gS2VlcHMgaW1wb3J0Lm1ldGEgYW5kIGlubGluZSwgYXN5bmMgYGltcG9ydCgpYFxuICogY2FsbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVJbXBvcnRTdGF0ZW1lbnRzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UoXG4gICAgLyhpbXBvcnRcXHM/W3tcXHddW1xcc1xcU10qP2Zyb21cXHM/W1wiJ11bXFxzXFxTXSo/W1wiJ107P3xpbXBvcnRcXHM/W1wiJ11bXFxzXFxTXSo/W1wiJ107PykvZ20sXG4gICAgJycsXG4gICk7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBpbXBvcnRzLCBlbnN1cmluZyB0aGF0IHNvbWUgb2YgV1hUJ3MgY2xpZW50IGltcG9ydHMgYXJlIHByZXNlbnQsIHNvIHRoYXQgZW50cnlwb2ludHMgY2FuIGJlIHBhcnNlZCBpZiBhdXRvLWltcG9ydHMgYXJlIGRpc2FibGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlUHJvamVjdEltcG9ydFN0YXRlbWVudHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9JbXBvcnRzID0gcmVtb3ZlSW1wb3J0U3RhdGVtZW50cyh0ZXh0KTtcblxuICByZXR1cm4gYGltcG9ydCB7IGRlZmluZUNvbnRlbnRTY3JpcHQsIGRlZmluZUJhY2tncm91bmQgfSBmcm9tICd3eHQvY2xpZW50JztcblxuJHtub0ltcG9ydHN9YDtcbn1cbiIsICJpbXBvcnQgeyBVbmltcG9ydE9wdGlvbnMsIGNyZWF0ZVVuaW1wb3J0IH0gZnJvbSAndW5pbXBvcnQnO1xuaW1wb3J0IHsgRW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgZ2V0VW5pbXBvcnRPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvYXV0by1pbXBvcnRzJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRHbG9iYWxzLCBnZXRHbG9iYWxzIH0gZnJvbSAnLi4vdXRpbHMvZ2xvYmFscyc7XG5pbXBvcnQgeyBnZXRQdWJsaWNGaWxlcyB9IGZyb20gJy4uL3V0aWxzL3B1YmxpYyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvcGF0aHMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IE1lc3NhZ2UsIHBhcnNlSTE4bk1lc3NhZ2VzIH0gZnJvbSAnLi4vdXRpbHMvaTE4bic7XG5pbXBvcnQgeyB3cml0ZUZpbGVJZkRpZmZlcmVudCB9IGZyb20gJy4uL3V0aWxzL2ZzJztcblxuLyoqXG4gKiBHZW5lcmF0ZSBhbmQgd3JpdGUgYWxsIHRoZSBmaWxlcyBpbnNpZGUgdGhlIGBJbnRlcm5hbENvbmZpZy50eXBlc0RpcmAgZGlyZWN0b3J5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVUeXBlc0RpcihcbiAgZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBmcy5lbnN1cmVEaXIoY29uZmlnLnR5cGVzRGlyKTtcblxuICBjb25zdCByZWZlcmVuY2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0IGltcG9ydHMgPSBnZXRVbmltcG9ydE9wdGlvbnMoY29uZmlnKTtcbiAgaWYgKGltcG9ydHMgIT09IGZhbHNlKSB7XG4gICAgcmVmZXJlbmNlcy5wdXNoKGF3YWl0IHdyaXRlSW1wb3J0c0RlY2xhcmF0aW9uRmlsZShjb25maWcsIGltcG9ydHMpKTtcbiAgfVxuXG4gIHJlZmVyZW5jZXMucHVzaChhd2FpdCB3cml0ZVBhdGhzRGVjbGFyYXRpb25GaWxlKGVudHJ5cG9pbnRzLCBjb25maWcpKTtcbiAgcmVmZXJlbmNlcy5wdXNoKGF3YWl0IHdyaXRlSTE4bkRlY2xhcmF0aW9uRmlsZShjb25maWcpKTtcbiAgcmVmZXJlbmNlcy5wdXNoKGF3YWl0IHdyaXRlR2xvYmFsc0RlY2xhcmF0aW9uRmlsZShjb25maWcpKTtcblxuICBjb25zdCBtYWluUmVmZXJlbmNlID0gYXdhaXQgd3JpdGVNYWluRGVjbGFyYXRpb25GaWxlKHJlZmVyZW5jZXMsIGNvbmZpZyk7XG4gIGF3YWl0IHdyaXRlVHNDb25maWdGaWxlKG1haW5SZWZlcmVuY2UsIGNvbmZpZyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlSW1wb3J0c0RlY2xhcmF0aW9uRmlsZShcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbiAgdW5pbXBvcnRPcHRpb25zOiBQYXJ0aWFsPFVuaW1wb3J0T3B0aW9ucz4sXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUoY29uZmlnLnR5cGVzRGlyLCAnaW1wb3J0cy5kLnRzJyk7XG4gIGNvbnN0IHVuaW1wb3J0ID0gY3JlYXRlVW5pbXBvcnQodW5pbXBvcnRPcHRpb25zKTtcblxuICAvLyBMb2FkIHByb2plY3QgaW1wb3J0cyBpbnRvIHVuaW1wb3J0IG1lbW9yeSBzbyB0aGV5IGFyZSBvdXRwdXQgdmlhIGdlbmVyYXRlVHlwZURlY2xhcmF0aW9uc1xuICBhd2FpdCB1bmltcG9ydC5zY2FuSW1wb3J0c0Zyb21EaXIodW5kZWZpbmVkLCB7IGN3ZDogY29uZmlnLnNyY0RpciB9KTtcblxuICBhd2FpdCB3cml0ZUZpbGVJZkRpZmZlcmVudChcbiAgICBmaWxlUGF0aCxcbiAgICBbJy8vIEdlbmVyYXRlZCBieSB3eHQnLCBhd2FpdCB1bmltcG9ydC5nZW5lcmF0ZVR5cGVEZWNsYXJhdGlvbnMoKV0uam9pbihcbiAgICAgICdcXG4nLFxuICAgICkgKyAnXFxuJyxcbiAgKTtcblxuICByZXR1cm4gZmlsZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlUGF0aHNEZWNsYXJhdGlvbkZpbGUoXG4gIGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUoY29uZmlnLnR5cGVzRGlyLCAncGF0aHMuZC50cycpO1xuICBjb25zdCB1bmlvbnMgPSBlbnRyeXBvaW50c1xuICAgIC5tYXAoKGVudHJ5KSA9PlxuICAgICAgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICAgIGVudHJ5LFxuICAgICAgICBjb25maWcub3V0RGlyLFxuICAgICAgICBlbnRyeS5pbnB1dFBhdGguZW5kc1dpdGgoJy5odG1sJykgPyAnLmh0bWwnIDogJy5qcycsXG4gICAgICApLFxuICAgIClcbiAgICAuY29uY2F0KGF3YWl0IGdldFB1YmxpY0ZpbGVzKGNvbmZpZykpXG4gICAgLm1hcChub3JtYWxpemVQYXRoKVxuICAgIC5tYXAoKHBhdGgpID0+IGAgICAgfCBcIi8ke3BhdGh9XCJgKVxuICAgIC5zb3J0KClcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBgLy8gR2VuZXJhdGVkIGJ5IHd4dFxuaW1wb3J0IFwid3h0L2Jyb3dzZXJcIjtcblxuZGVjbGFyZSBtb2R1bGUgXCJ3eHQvYnJvd3NlclwiIHtcbiAgdHlwZSBQdWJsaWNQYXRoID1cbnt7IHVuaW9uIH19XG4gIGV4cG9ydCBpbnRlcmZhY2UgV3h0UnVudGltZSBleHRlbmRzIFJ1bnRpbWUuU3RhdGljIHtcbiAgICBnZXRVUkwocGF0aDogUHVibGljUGF0aCk6IHN0cmluZztcbiAgfVxufVxuYDtcblxuICBhd2FpdCB3cml0ZUZpbGVJZkRpZmZlcmVudChcbiAgICBmaWxlUGF0aCxcbiAgICB0ZW1wbGF0ZS5yZXBsYWNlKCd7eyB1bmlvbiB9fScsIHVuaW9ucyB8fCAnICAgIHwgbmV2ZXInKSxcbiAgKTtcblxuICByZXR1cm4gZmlsZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlSTE4bkRlY2xhcmF0aW9uRmlsZShcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVQYXRoID0gcmVzb2x2ZShjb25maWcudHlwZXNEaXIsICdpMThuLmQudHMnKTtcbiAgY29uc3QgZGVmYXVsdExvY2FsZSA9IGNvbmZpZy5tYW5pZmVzdC5kZWZhdWx0X2xvY2FsZTtcbiAgY29uc3QgdGVtcGxhdGUgPSBgLy8gR2VuZXJhdGVkIGJ5IHd4dFxuaW1wb3J0IFwid3h0L2Jyb3dzZXJcIjtcblxuZGVjbGFyZSBtb2R1bGUgXCJ3eHQvYnJvd3NlclwiIHtcbiAgLyoqXG4gICAqIFNlZSBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2RvY3MvZXh0ZW5zaW9ucy9yZWZlcmVuY2UvaTE4bi8jbWV0aG9kLWdldE1lc3NhZ2VcbiAgICovXG4gIGludGVyZmFjZSBHZXRNZXNzYWdlT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vZG9jcy9leHRlbnNpb25zL3JlZmVyZW5jZS9pMThuLyNtZXRob2QtZ2V0TWVzc2FnZVxuICAgICAqL1xuICAgIGVzY2FwZUx0PzogYm9vbGVhblxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBXeHRJMThuIGV4dGVuZHMgSTE4bi5TdGF0aWMge1xue3sgb3ZlcnJpZGVzIH19XG4gIH1cbn1cbmA7XG5cbiAgbGV0IG1lc3NhZ2VzOiBNZXNzYWdlW107XG4gIGlmIChkZWZhdWx0TG9jYWxlKSB7XG4gICAgY29uc3QgZGVmYXVsdExvY2FsZVBhdGggPSBwYXRoLnJlc29sdmUoXG4gICAgICBjb25maWcucHVibGljRGlyLFxuICAgICAgJ19sb2NhbGVzJyxcbiAgICAgIGRlZmF1bHRMb2NhbGUsXG4gICAgICAnbWVzc2FnZXMuanNvbicsXG4gICAgKTtcbiAgICBjb25zdCBjb250ZW50ID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShkZWZhdWx0TG9jYWxlUGF0aCwgJ3V0Zi04JykpO1xuICAgIG1lc3NhZ2VzID0gcGFyc2VJMThuTWVzc2FnZXMoY29udGVudCk7XG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZXMgPSBwYXJzZUkxOG5NZXNzYWdlcyh7fSk7XG4gIH1cblxuICBjb25zdCBvdmVycmlkZXMgPSBtZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IHtcbiAgICByZXR1cm4gYCAgICAvKipcbiAgICAgKiAke21lc3NhZ2UuZGVzY3JpcHRpb24gPz8gJ05vIG1lc3NhZ2UgZGVzY3JpcHRpb24uJ31cbiAgICAgKiBcbiAgICAgKiBcIiR7bWVzc2FnZS5tZXNzYWdlfVwiXG4gICAgICovXG4gICAgZ2V0TWVzc2FnZShcbiAgICAgIG1lc3NhZ2VOYW1lOiBcIiR7bWVzc2FnZS5uYW1lfVwiLFxuICAgICAgc3Vic3RpdHV0aW9ucz86IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgICAgb3B0aW9ucz86IEdldE1lc3NhZ2VPcHRpb25zLFxuICAgICk6IHN0cmluZztgO1xuICB9KTtcbiAgYXdhaXQgd3JpdGVGaWxlSWZEaWZmZXJlbnQoXG4gICAgZmlsZVBhdGgsXG4gICAgdGVtcGxhdGUucmVwbGFjZSgne3sgb3ZlcnJpZGVzIH19Jywgb3ZlcnJpZGVzLmpvaW4oJ1xcbicpKSxcbiAgKTtcblxuICByZXR1cm4gZmlsZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlR2xvYmFsc0RlY2xhcmF0aW9uRmlsZShcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVQYXRoID0gcmVzb2x2ZShjb25maWcudHlwZXNEaXIsICdnbG9iYWxzLmQudHMnKTtcbiAgY29uc3QgZ2xvYmFscyA9IFsuLi5nZXRHbG9iYWxzKGNvbmZpZyksIC4uLmdldEVudHJ5cG9pbnRHbG9iYWxzKGNvbmZpZywgJycpXTtcbiAgYXdhaXQgd3JpdGVGaWxlSWZEaWZmZXJlbnQoXG4gICAgZmlsZVBhdGgsXG4gICAgW1xuICAgICAgJy8vIEdlbmVyYXRlZCBieSB3eHQnLFxuICAgICAgJ2V4cG9ydCB7fScsXG4gICAgICAnZGVjbGFyZSBnbG9iYWwgeycsXG4gICAgICAuLi5nbG9iYWxzLm1hcCgoZ2xvYmFsKSA9PiBgICBjb25zdCAke2dsb2JhbC5uYW1lfTogJHtnbG9iYWwudHlwZX07YCksXG4gICAgICAnfScsXG4gICAgXS5qb2luKCdcXG4nKSArICdcXG4nLFxuICApO1xuICByZXR1cm4gZmlsZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlTWFpbkRlY2xhcmF0aW9uRmlsZShcbiAgcmVmZXJlbmNlczogc3RyaW5nW10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkaXIgPSBjb25maWcud3h0RGlyO1xuICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUoZGlyLCAnd3h0LmQudHMnKTtcbiAgYXdhaXQgd3JpdGVGaWxlSWZEaWZmZXJlbnQoXG4gICAgZmlsZVBhdGgsXG4gICAgW1xuICAgICAgJy8vIEdlbmVyYXRlZCBieSB3eHQnLFxuICAgICAgYC8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZS9jbGllbnRcIiAvPmAsXG4gICAgICAuLi5yZWZlcmVuY2VzLm1hcChcbiAgICAgICAgKHJlZikgPT5cbiAgICAgICAgICBgLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuLyR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShkaXIsIHJlZikpfVwiIC8+YCxcbiAgICAgICksXG4gICAgXS5qb2luKCdcXG4nKSArICdcXG4nLFxuICApO1xuICByZXR1cm4gZmlsZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlVHNDb25maWdGaWxlKFxuICBtYWluUmVmZXJlbmNlOiBzdHJpbmcsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pIHtcbiAgY29uc3QgZGlyID0gY29uZmlnLnd4dERpcjtcbiAgY29uc3Qgcm9vdFBhdGggPSBub3JtYWxpemVQYXRoKHJlbGF0aXZlKGRpciwgY29uZmlnLnJvb3QpKTtcbiAgY29uc3Qgc3JjUGF0aCA9IG5vcm1hbGl6ZVBhdGgocmVsYXRpdmUoZGlyLCBjb25maWcuc3JjRGlyKSk7XG4gIGF3YWl0IHdyaXRlRmlsZUlmRGlmZmVyZW50KFxuICAgIHJlc29sdmUoZGlyLCAndHNjb25maWcuanNvbicpLFxuICAgIGB7XG4gIFwiY29tcGlsZXJPcHRpb25zXCI6IHtcbiAgICBcInRhcmdldFwiOiBcIkVTTmV4dFwiLFxuICAgIFwibW9kdWxlXCI6IFwiRVNOZXh0XCIsXG4gICAgXCJtb2R1bGVSZXNvbHV0aW9uXCI6IFwiQnVuZGxlclwiLFxuICAgIFwibm9FbWl0XCI6IHRydWUsXG4gICAgXCJlc01vZHVsZUludGVyb3BcIjogdHJ1ZSxcbiAgICBcImZvcmNlQ29uc2lzdGVudENhc2luZ0luRmlsZU5hbWVzXCI6IHRydWUsXG4gICAgXCJyZXNvbHZlSnNvbk1vZHVsZVwiOiB0cnVlLFxuICAgIFwic3RyaWN0XCI6IHRydWUsXG4gICAgXCJsaWJcIjogW1wiRE9NXCIsIFwiV2ViV29ya2VyXCJdLFxuICAgIFwic2tpcExpYkNoZWNrXCI6IHRydWUsXG4gICAgXCJwYXRoc1wiOiB7XG4gICAgICBcIkBcIjogW1wiJHtzcmNQYXRofVwiXSxcbiAgICAgIFwiQC8qXCI6IFtcIiR7c3JjUGF0aH0vKlwiXSxcbiAgICAgIFwiflwiOiBbXCIke3NyY1BhdGh9XCJdLFxuICAgICAgXCJ+LypcIjogW1wiJHtzcmNQYXRofS8qXCJdLFxuICAgICAgXCJAQFwiOiBbXCIke3Jvb3RQYXRofVwiXSxcbiAgICAgIFwiQEAvKlwiOiBbXCIke3Jvb3RQYXRofS8qXCJdLFxuICAgICAgXCJ+flwiOiBbXCIke3Jvb3RQYXRofVwiXSxcbiAgICAgIFwifn4vKlwiOiBbXCIke3Jvb3RQYXRofS8qXCJdXG4gICAgfVxuICB9LFxuICBcImluY2x1ZGVcIjogW1xuICAgIFwiJHtub3JtYWxpemVQYXRoKHJlbGF0aXZlKGRpciwgY29uZmlnLnJvb3QpKX0vKiovKlwiLFxuICAgIFwiLi8ke25vcm1hbGl6ZVBhdGgocmVsYXRpdmUoZGlyLCBtYWluUmVmZXJlbmNlKSl9XCJcbiAgXSxcbiAgXCJleGNsdWRlXCI6IFtcIiR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShkaXIsIGNvbmZpZy5vdXRCYXNlRGlyKSl9XCJdXG59YCxcbiAgKTtcbn1cbiIsICJleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2Uge1xuICBuYW1lOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbmNvbnN0IHByZWRlZmluZWRNZXNzYWdlcyA9IHtcbiAgJ0BAZXh0ZW5zaW9uX2lkJzoge1xuICAgIG1lc3NhZ2U6ICc8YnJvd3Nlci5ydW50aW1lLmlkPicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlRoZSBleHRlbnNpb24gb3IgYXBwIElEOyB5b3UgbWlnaHQgdXNlIHRoaXMgc3RyaW5nIHRvIGNvbnN0cnVjdCBVUkxzIGZvciByZXNvdXJjZXMgaW5zaWRlIHRoZSBleHRlbnNpb24uIEV2ZW4gdW5sb2NhbGl6ZWQgZXh0ZW5zaW9ucyBjYW4gdXNlIHRoaXMgbWVzc2FnZS5cXG5Ob3RlOiBZb3UgY2FuJ3QgdXNlIHRoaXMgbWVzc2FnZSBpbiBhIG1hbmlmZXN0IGZpbGUuXCIsXG4gIH0sXG4gICdAQHVpX2xvY2FsZSc6IHtcbiAgICBtZXNzYWdlOiAnPGJyb3dzZXIuaTE4bi5nZXRVaUxvY2FsZSgpPicsXG4gICAgZGVzY3JpcHRpb246ICcnLFxuICB9LFxuICAnQEBiaWRpX2Rpcic6IHtcbiAgICBtZXNzYWdlOiAnPGx0cnxydGw+JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdUaGUgdGV4dCBkaXJlY3Rpb24gZm9yIHRoZSBjdXJyZW50IGxvY2FsZSwgZWl0aGVyIFwibHRyXCIgZm9yIGxlZnQtdG8tcmlnaHQgbGFuZ3VhZ2VzIHN1Y2ggYXMgRW5nbGlzaCBvciBcInJ0bFwiIGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlcyBzdWNoIGFzIEphcGFuZXNlLicsXG4gIH0sXG4gICdAQGJpZGlfcmV2ZXJzZWRfZGlyJzoge1xuICAgIG1lc3NhZ2U6ICc8cnRsfGx0cj4nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0lmIHRoZSBAQGJpZGlfZGlyIGlzIFwibHRyXCIsIHRoZW4gdGhpcyBpcyBcInJ0bFwiOyBvdGhlcndpc2UsIGl0XFwncyBcImx0clwiLicsXG4gIH0sXG4gICdAQGJpZGlfc3RhcnRfZWRnZSc6IHtcbiAgICBtZXNzYWdlOiAnPGxlZnR8cmlnaHQ+JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdJZiB0aGUgQEBiaWRpX2RpciBpcyBcImx0clwiLCB0aGVuIHRoaXMgaXMgXCJsZWZ0XCI7IG90aGVyd2lzZSwgaXRcXCdzIFwicmlnaHRcIi4nLFxuICB9LFxuICAnQEBiaWRpX2VuZF9lZGdlJzoge1xuICAgIG1lc3NhZ2U6ICc8cmlnaHR8bGVmdD4nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0lmIHRoZSBAQGJpZGlfZGlyIGlzIFwibHRyXCIsIHRoZW4gdGhpcyBpcyBcInJpZ2h0XCI7IG90aGVyd2lzZSwgaXRcXCdzIFwibGVmdFwiLicsXG4gIH0sXG59O1xuXG4vKipcbiAqIEdldCBhIGxpc3Qgb2YgYWxsIG1lc3NhZ2VzIGFuZCB0aGVpciBtZXRhZGF0YSBmcm9tIEpTT04gZmlsZSBjb250ZW50cy5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZXNKc29uIFRoZSBjb250ZW50cyBvZiBhIGBfbG9jYWxlcy9lbi9tZXNzYWdlcy5qc29uYCBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJMThuTWVzc2FnZXMobWVzc2FnZXNKc29uOiBvYmplY3QpOiBNZXNzYWdlW10ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoe1xuICAgIC4uLnByZWRlZmluZWRNZXNzYWdlcyxcbiAgICAuLi5tZXNzYWdlc0pzb24sXG4gIH0pLm1hcDxNZXNzYWdlPigoW25hbWUsIGRldGFpbHNdKSA9PiAoe1xuICAgIG5hbWUsXG4gICAgLi4uZGV0YWlscyxcbiAgfSkpO1xufVxuIiwgImltcG9ydCB7IEVudHJ5cG9pbnQgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBNYW5pZmVzdCB9IGZyb20gJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc7XG5pbXBvcnQge1xuICBCYWNrZ3JvdW5kRW50cnlwb2ludCxcbiAgQnVpbGRPdXRwdXQsXG4gIENvbnRlbnRTY3JpcHRFbnRyeXBvaW50LFxuICBJbnRlcm5hbENvbmZpZyxcbiAgT3B0aW9uc0VudHJ5cG9pbnQsXG4gIFBvcHVwRW50cnlwb2ludCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7XG4gIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoLFxuICByZXNvbHZlUGVyQnJvd3Nlck9wdGlvbixcbn0gZnJvbSAnLi9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBDb250ZW50U2VjdXJpdHlQb2xpY3kgfSBmcm9tICcuL0NvbnRlbnRTZWN1cml0eVBvbGljeSc7XG5pbXBvcnQge1xuICBoYXNoQ29udGVudFNjcmlwdE9wdGlvbnMsXG4gIG1hcFd4dE9wdGlvbnNUb0NvbnRlbnRTY3JpcHQsXG59IGZyb20gJy4vY29udGVudC1zY3JpcHRzJztcbmltcG9ydCB7IGdldFBhY2thZ2VKc29uIH0gZnJvbSAnLi9wYWNrYWdlJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuL3BhdGhzJztcbmltcG9ydCB7IHdyaXRlRmlsZUlmRGlmZmVyZW50IH0gZnJvbSAnLi9mcyc7XG5pbXBvcnQgeyBwcm9kdWNlIH0gZnJvbSAnaW1tZXInO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcblxuLyoqXG4gKiBXcml0ZXMgdGhlIG1hbmlmZXN0IHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGFuZCB0aGUgYnVpbGQgb3V0cHV0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVNYW5pZmVzdChcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBvdXRwdXQ6IEJ1aWxkT3V0cHV0LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN0ciA9XG4gICAgY29uZmlnLm1vZGUgPT09ICdwcm9kdWN0aW9uJ1xuICAgICAgPyBKU09OLnN0cmluZ2lmeShtYW5pZmVzdClcbiAgICAgIDogSlNPTi5zdHJpbmdpZnkobWFuaWZlc3QsIG51bGwsIDIpO1xuXG4gIGF3YWl0IGZzLmVuc3VyZURpcihjb25maWcub3V0RGlyKTtcbiAgYXdhaXQgd3JpdGVGaWxlSWZEaWZmZXJlbnQocmVzb2x2ZShjb25maWcub3V0RGlyLCAnbWFuaWZlc3QuanNvbicpLCBzdHIpO1xuXG4gIG91dHB1dC5wdWJsaWNBc3NldHMudW5zaGlmdCh7XG4gICAgdHlwZTogJ2Fzc2V0JyxcbiAgICBmaWxlTmFtZTogJ21hbmlmZXN0Lmpzb24nLFxuICAgIG5hbWU6ICdtYW5pZmVzdCcsXG4gICAgbmVlZHNDb2RlUmVmZXJlbmNlOiBmYWxzZSxcbiAgICBzb3VyY2U6IHN0cixcbiAgfSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBtYW5pZmVzdCBiYXNlZCBvbiB0aGUgY29uZmlnIGFuZCBlbnRyeXBvaW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlTWFpbmZlc3QoXG4gIGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10sXG4gIGJ1aWxkT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPixcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8TWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3Q+IHtcbiAgY29uc3QgcGtnID0gYXdhaXQgZ2V0UGFja2FnZUpzb24oY29uZmlnKTtcblxuICBjb25zdCBiYXNlTWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0ID0ge1xuICAgIG1hbmlmZXN0X3ZlcnNpb246IGNvbmZpZy5tYW5pZmVzdFZlcnNpb24sXG4gICAgbmFtZTogcGtnPy5uYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBwa2c/LmRlc2NyaXB0aW9uLFxuICAgIHZlcnNpb246IHBrZz8udmVyc2lvbiAmJiBzaW1wbGlmeVZlcnNpb24ocGtnLnZlcnNpb24pLFxuICAgIC8vIE9ubHkgYWRkIHRoZSB2ZXJzaW9uIG5hbWUgdG8gY2hyb21pdW0gYW5kIGlmIHRoZSB1c2VyIGhhc24ndCBzcGVjaWZpZWQgYSBjdXN0b20gdmVyc2lvbi5cbiAgICB2ZXJzaW9uX25hbWU6XG4gICAgICBjb25maWcuYnJvd3NlciAhPT0gJ2ZpcmVmb3gnICYmICFjb25maWcubWFuaWZlc3QudmVyc2lvblxuICAgICAgICA/IHBrZz8udmVyc2lvblxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICBzaG9ydF9uYW1lOiBwa2c/LnNob3J0TmFtZSxcbiAgICBpY29uczogZGlzY292ZXJJY29ucyhidWlsZE91dHB1dCksXG4gIH07XG4gIGNvbnN0IHVzZXJNYW5pZmVzdCA9IGNvbmZpZy5tYW5pZmVzdDtcblxuICBjb25zdCBtYW5pZmVzdCA9IHZpdGUubWVyZ2VDb25maWcoXG4gICAgYmFzZU1hbmlmZXN0LFxuICAgIHVzZXJNYW5pZmVzdCxcbiAgKSBhcyBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdDtcblxuICBhZGRFbnRyeXBvaW50cyhtYW5pZmVzdCwgZW50cnlwb2ludHMsIGJ1aWxkT3V0cHV0LCBjb25maWcpO1xuXG4gIGlmIChjb25maWcuY29tbWFuZCA9PT0gJ3NlcnZlJykgYWRkRGV2TW9kZUNzcChtYW5pZmVzdCwgY29uZmlnKTtcbiAgaWYgKGNvbmZpZy5jb21tYW5kID09PSAnc2VydmUnKSBhZGREZXZNb2RlUGVybWlzc2lvbnMobWFuaWZlc3QsIGNvbmZpZyk7XG5cbiAgY29uc3QgZmluYWxNYW5pZmVzdCA9IHByb2R1Y2UobWFuaWZlc3QsIGNvbmZpZy50cmFuc2Zvcm1NYW5pZmVzdCk7XG5cbiAgaWYgKGZpbmFsTWFuaWZlc3QubmFtZSA9PSBudWxsKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJNYW5pZmVzdCAnbmFtZScgaXMgbWlzc2luZy4gRWl0aGVyOlxcbjEuIFNldCB0aGUgbmFtZSBpbiB5b3VyIDxyb290RGlyPi9wYWNrYWdlLmpzb25cXG4yLiBTZXQgYSBuYW1lIHZpYSB0aGUgbWFuaWZlc3Qgb3B0aW9uIGluIHlvdXIgd3h0LmNvbmZpZy50c1wiLFxuICAgICk7XG4gIGlmIChmaW5hbE1hbmlmZXN0LnZlcnNpb24gPT0gbnVsbCkge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJNYW5pZmVzdCAndmVyc2lvbicgaXMgbWlzc2luZy4gRWl0aGVyOlxcbjEuIEFkZCBhIHZlcnNpb24gaW4geW91ciA8cm9vdERpcj4vcGFja2FnZS5qc29uXFxuMi4gUGFzcyB0aGUgdmVyc2lvbiB2aWEgdGhlIG1hbmlmZXN0IG9wdGlvbiBpbiB5b3VyIHd4dC5jb25maWcudHNcIixcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGZpbmFsTWFuaWZlc3Q7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBzdWZmaXhlcyBmcm9tIHRoZSB2ZXJzaW9uLCBsaWtlIFguWS5aLWFscGhhMSAod2hpY2ggYnJvc2VycyBkb24ndCBhbGxvdyksIHNvIGl0J3MgYVxuICogc2ltcGxlIHZlcnNpb24gbnVtYmVyLCBsaWtlIFggb3IgWC5ZIG9yIFguWS5aLCB3aGljaCBicm93c2VycyBhbGxvdy5cbiAqL1xuZnVuY3Rpb24gc2ltcGxpZnlWZXJzaW9uKHZlcnNpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBSZWdleCBhZGFwdGVkIGZyb20gaGVyZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL0FkZC1vbnMvV2ViRXh0ZW5zaW9ucy9tYW5pZmVzdC5qc29uL3ZlcnNpb24jdmVyc2lvbl9mb3JtYXRcbiAgY29uc3QgdmVyc2lvbiA9IC9eKCgwfFsxLTldWzAtOV17MCw4fSkoWy5dKDB8WzEtOV1bMC05XXswLDh9KSl7MCwzfSkuKiQvLmV4ZWMoXG4gICAgdmVyc2lvbk5hbWUsXG4gICk/LlsxXTtcblxuICBpZiAodmVyc2lvbiA9PSBudWxsKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgYENhbm5vdCBzaW1wbGlmeSBwYWNrYWdlLmpzb24gdmVyc2lvbiBcIiR7dmVyc2lvbk5hbWV9XCIgdG8gYSB2YWxpZCBleHRlbnNpb24gdmVyc2lvbiwgXCJYLlkuWlwiYCxcbiAgICApO1xuXG4gIHJldHVybiB2ZXJzaW9uO1xufVxuXG5mdW5jdGlvbiBhZGRFbnRyeXBvaW50cyhcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBlbnRyeXBvaW50czogRW50cnlwb2ludFtdLFxuICBidWlsZE91dHB1dDogT21pdDxCdWlsZE91dHB1dCwgJ21hbmlmZXN0Jz4sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiB2b2lkIHtcbiAgY29uc3QgZW50cmllc0J5VHlwZSA9IGVudHJ5cG9pbnRzLnJlZHVjZTxcbiAgICBQYXJ0aWFsPFJlY29yZDxFbnRyeXBvaW50Wyd0eXBlJ10sIEVudHJ5cG9pbnRbXT4+XG4gID4oKG1hcCwgZW50cnlwb2ludCkgPT4ge1xuICAgIG1hcFtlbnRyeXBvaW50LnR5cGVdID8/PSBbXTtcbiAgICBtYXBbZW50cnlwb2ludC50eXBlXT8ucHVzaChlbnRyeXBvaW50KTtcbiAgICByZXR1cm4gbWFwO1xuICB9LCB7fSk7XG5cbiAgY29uc3QgYmFja2dyb3VuZCA9IGVudHJpZXNCeVR5cGVbJ2JhY2tncm91bmQnXT8uWzBdIGFzXG4gICAgfCBCYWNrZ3JvdW5kRW50cnlwb2ludFxuICAgIHwgdW5kZWZpbmVkO1xuICBjb25zdCBib29rbWFya3MgPSBlbnRyaWVzQnlUeXBlWydib29rbWFya3MnXT8uWzBdO1xuICBjb25zdCBjb250ZW50U2NyaXB0cyA9IGVudHJpZXNCeVR5cGVbJ2NvbnRlbnQtc2NyaXB0J10gYXNcbiAgICB8IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50W11cbiAgICB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZGV2dG9vbHMgPSBlbnRyaWVzQnlUeXBlWydkZXZ0b29scyddPy5bMF07XG4gIGNvbnN0IGhpc3RvcnkgPSBlbnRyaWVzQnlUeXBlWydoaXN0b3J5J10/LlswXTtcbiAgY29uc3QgbmV3dGFiID0gZW50cmllc0J5VHlwZVsnbmV3dGFiJ10/LlswXTtcbiAgY29uc3Qgb3B0aW9ucyA9IGVudHJpZXNCeVR5cGVbJ29wdGlvbnMnXT8uWzBdIGFzXG4gICAgfCBPcHRpb25zRW50cnlwb2ludFxuICAgIHwgdW5kZWZpbmVkO1xuICBjb25zdCBwb3B1cCA9IGVudHJpZXNCeVR5cGVbJ3BvcHVwJ10/LlswXSBhcyBQb3B1cEVudHJ5cG9pbnQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHNhbmRib3hlcyA9IGVudHJpZXNCeVR5cGVbJ3NhbmRib3gnXTtcbiAgY29uc3Qgc2lkZXBhbmVscyA9IGVudHJpZXNCeVR5cGVbJ3NpZGVwYW5lbCddO1xuXG4gIGlmIChiYWNrZ3JvdW5kKSB7XG4gICAgY29uc3Qgc2NyaXB0ID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoYmFja2dyb3VuZCwgY29uZmlnLm91dERpciwgJy5qcycpO1xuICAgIGlmIChtYW5pZmVzdC5tYW5pZmVzdF92ZXJzaW9uID09PSAzKSB7XG4gICAgICBtYW5pZmVzdC5iYWNrZ3JvdW5kID0ge1xuICAgICAgICB0eXBlOiBiYWNrZ3JvdW5kLm9wdGlvbnMudHlwZSxcbiAgICAgICAgc2VydmljZV93b3JrZXI6IHNjcmlwdCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hbmlmZXN0LmJhY2tncm91bmQgPSB7XG4gICAgICAgIHBlcnNpc3RlbnQ6IGJhY2tncm91bmQub3B0aW9ucy5wZXJzaXN0ZW50LFxuICAgICAgICBzY3JpcHRzOiBbc2NyaXB0XSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKGJvb2ttYXJrcykge1xuICAgIGlmIChjb25maWcuYnJvd3NlciA9PT0gJ2ZpcmVmb3gnKSB7XG4gICAgICBjb25maWcubG9nZ2VyLndhcm4oXG4gICAgICAgICdCb29rbWFya3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgRmlyZWZveC4gY2hyb21lX3VybF9vdmVycmlkZXMuYm9va21hcmtzIHdhcyBub3QgYWRkZWQgdG8gdGhlIG1hbmlmZXN0JyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzID8/PSB7fTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGJvb2ttYXJrcyBpcyB1bnR5cGVkIGluIHdlYmV4dGVuc2lvbi1wb2x5ZmlsbCwgYnV0IHN1cHBvcnRlZCBieSBjaHJvbWVcbiAgICAgIG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzLmJvb2ttYXJrcyA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgICBib29rbWFya3MsXG4gICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICcuaHRtbCcsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChoaXN0b3J5KSB7XG4gICAgaWYgKGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcpIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIud2FybihcbiAgICAgICAgJ0Jvb2ttYXJrcyBhcmUgbm90IHN1cHBvcnRlZCBieSBGaXJlZm94LiBjaHJvbWVfdXJsX292ZXJyaWRlcy5oaXN0b3J5IHdhcyBub3QgYWRkZWQgdG8gdGhlIG1hbmlmZXN0JyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzID8/PSB7fTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGhpc3RvcnkgaXMgdW50eXBlZCBpbiB3ZWJleHRlbnNpb24tcG9seWZpbGwsIGJ1dCBzdXBwb3J0ZWQgYnkgY2hyb21lXG4gICAgICBtYW5pZmVzdC5jaHJvbWVfdXJsX292ZXJyaWRlcy5oaXN0b3J5ID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICcuaHRtbCcsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChuZXd0YWIpIHtcbiAgICBtYW5pZmVzdC5jaHJvbWVfdXJsX292ZXJyaWRlcyA/Pz0ge307XG4gICAgbWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMubmV3dGFiID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICBuZXd0YWIsXG4gICAgICBjb25maWcub3V0RGlyLFxuICAgICAgJy5odG1sJyxcbiAgICApO1xuICB9XG5cbiAgaWYgKHBvcHVwKSB7XG4gICAgY29uc3QgZGVmYXVsdF9wb3B1cCA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgcG9wdXAsXG4gICAgICBjb25maWcub3V0RGlyLFxuICAgICAgJy5odG1sJyxcbiAgICApO1xuICAgIGNvbnN0IG9wdGlvbnM6IE1hbmlmZXN0LkFjdGlvbk1hbmlmZXN0ID0ge1xuICAgICAgZGVmYXVsdF9pY29uOiBwb3B1cC5vcHRpb25zLmRlZmF1bHRJY29uLFxuICAgICAgZGVmYXVsdF90aXRsZTogcG9wdXAub3B0aW9ucy5kZWZhdWx0VGl0bGUsXG4gICAgfTtcbiAgICBpZiAobWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gMykge1xuICAgICAgbWFuaWZlc3QuYWN0aW9uID0ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBkZWZhdWx0X3BvcHVwLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaWZlc3RbcG9wdXAub3B0aW9ucy5tdjJLZXkgPz8gJ2Jyb3dzZXJfYWN0aW9uJ10gPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGRlZmF1bHRfcG9wdXAsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZXZ0b29scykge1xuICAgIG1hbmlmZXN0LmRldnRvb2xzX3BhZ2UgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgIGRldnRvb2xzLFxuICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICcuaHRtbCcsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3QgcGFnZSA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKG9wdGlvbnMsIGNvbmZpZy5vdXREaXIsICcuaHRtbCcpO1xuICAgIG1hbmlmZXN0Lm9wdGlvbnNfdWkgPSB7XG4gICAgICBvcGVuX2luX3RhYjogb3B0aW9ucy5vcHRpb25zLm9wZW5JblRhYixcbiAgICAgIGJyb3dzZXJfc3R5bGU6XG4gICAgICAgIGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcgPyBvcHRpb25zLm9wdGlvbnMuYnJvd3NlclN0eWxlIDogdW5kZWZpbmVkLFxuICAgICAgY2hyb21lX3N0eWxlOlxuICAgICAgICBjb25maWcuYnJvd3NlciAhPT0gJ2ZpcmVmb3gnID8gb3B0aW9ucy5vcHRpb25zLmNocm9tZVN0eWxlIDogdW5kZWZpbmVkLFxuICAgICAgcGFnZSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHNhbmRib3hlcz8ubGVuZ3RoKSB7XG4gICAgaWYgKGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcpIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIud2FybihcbiAgICAgICAgJ1NhbmRib3hlZCBwYWdlcyBub3Qgc3VwcG9ydGVkIGJ5IEZpcmVmb3guIHNhbmRib3gucGFnZXMgd2FzIG5vdCBhZGRlZCB0byB0aGUgbWFuaWZlc3QnLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogc2FuZGJveCBub3QgdHlwZWRcbiAgICAgIG1hbmlmZXN0LnNhbmRib3ggPSB7XG4gICAgICAgIHBhZ2VzOiBzYW5kYm94ZXMubWFwKChlbnRyeSkgPT5cbiAgICAgICAgICBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChlbnRyeSwgY29uZmlnLm91dERpciwgJy5odG1sJyksXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChzaWRlcGFuZWxzPy5sZW5ndGgpIHtcbiAgICBjb25zdCBkZWZhdWx0U2lkZXBhbmVsID1cbiAgICAgIHNpZGVwYW5lbHMuZmluZCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09ICdzaWRlcGFuZWwnKSA/PyBzaWRlcGFuZWxzWzBdO1xuICAgIGNvbnN0IHBhZ2UgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgIGRlZmF1bHRTaWRlcGFuZWwsXG4gICAgICBjb25maWcub3V0RGlyLFxuICAgICAgJy5odG1sJyxcbiAgICApO1xuXG4gICAgaWYgKGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcpIHtcbiAgICAgIG1hbmlmZXN0LnNpZGViYXJfYWN0aW9uID0ge1xuICAgICAgICAvLyBUT0RPOiBBZGQgb3B0aW9ucyB0byBzaWRlIHBhbmVsXG4gICAgICAgIC8vIC4uLmRlZmF1bHRTaWRlcGFuZWwub3B0aW9ucyxcbiAgICAgICAgZGVmYXVsdF9wYW5lbDogcGFnZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChjb25maWcubWFuaWZlc3RWZXJzaW9uID09PSAzKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBVbnR5cGVkXG4gICAgICBtYW5pZmVzdC5zaWRlX3BhbmVsID0ge1xuICAgICAgICBkZWZhdWx0X3BhdGg6IHBhZ2UsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcubG9nZ2VyLndhcm4oXG4gICAgICAgICdTaWRlIHBhbmVsIG5vdCBzdXBwb3J0ZWQgYnkgQ2hyb21pdW0gdXNpbmcgTVYyLiBzaWRlX3BhbmVsLmRlZmF1bHRfcGF0aCB3YXMgbm90IGFkZGVkIHRvIHRoZSBtYW5pZmVzdCcsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb250ZW50U2NyaXB0cz8ubGVuZ3RoKSB7XG4gICAgY29uc3QgY3NzTWFwID0gZ2V0Q29udGVudFNjcmlwdHNDc3NNYXAoYnVpbGRPdXRwdXQsIGNvbnRlbnRTY3JpcHRzKTtcblxuICAgIC8vIERvbid0IGFkZCBjb250ZW50IHNjcmlwdHMgdG8gdGhlIG1hbmlmZXN0IGluIGRldiBtb2RlIGZvciBNVjMgLSB0aGV5J3JlIG1hbmFnZWQgYW5kIHJlbG9hZGVkXG4gICAgLy8gYXQgcnVudGltZVxuICAgIGlmIChjb25maWcuY29tbWFuZCA9PT0gJ3NlcnZlJyAmJiBjb25maWcubWFuaWZlc3RWZXJzaW9uID09PSAzKSB7XG4gICAgICBjb25zdCBob3N0UGVybWlzc2lvbnMgPSBuZXcgU2V0PHN0cmluZz4obWFuaWZlc3QuaG9zdF9wZXJtaXNzaW9ucyA/PyBbXSk7XG4gICAgICBjb250ZW50U2NyaXB0cy5mb3JFYWNoKChzY3JpcHQpID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHJlc29sdmVQZXJCcm93c2VyT3B0aW9uKFxuICAgICAgICAgIHNjcmlwdC5vcHRpb25zLm1hdGNoZXMsXG4gICAgICAgICAgY29uZmlnLmJyb3dzZXIsXG4gICAgICAgICk7XG4gICAgICAgIG1hdGNoZXMuZm9yRWFjaCgobWF0Y2hQYXR0ZXJuKSA9PiB7XG4gICAgICAgICAgaG9zdFBlcm1pc3Npb25zLmFkZChtYXRjaFBhdHRlcm4pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaG9zdFBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+XG4gICAgICAgIGFkZEhvc3RQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhhc2hUb0VudHJ5cG9pbnRzTWFwID0gY29udGVudFNjcmlwdHMucmVkdWNlKChtYXAsIHNjcmlwdCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoID0gaGFzaENvbnRlbnRTY3JpcHRPcHRpb25zKHNjcmlwdC5vcHRpb25zKTtcbiAgICAgICAgaWYgKG1hcC5oYXMoaGFzaCkpIG1hcC5nZXQoaGFzaCk/LnB1c2goc2NyaXB0KTtcbiAgICAgICAgZWxzZSBtYXAuc2V0KGhhc2gsIFtzY3JpcHRdKTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgIH0sIG5ldyBNYXA8c3RyaW5nLCBDb250ZW50U2NyaXB0RW50cnlwb2ludFtdPigpKTtcblxuICAgICAgY29uc3QgbmV3Q29udGVudFNjcmlwdHMgPSBBcnJheS5mcm9tKGhhc2hUb0VudHJ5cG9pbnRzTWFwLmVudHJpZXMoKSkubWFwKFxuICAgICAgICAoWywgc2NyaXB0c10pID0+ICh7XG4gICAgICAgICAgLi4ubWFwV3h0T3B0aW9uc1RvQ29udGVudFNjcmlwdChzY3JpcHRzWzBdLm9wdGlvbnMsIGNvbmZpZyksXG4gICAgICAgICAgLy8gVE9PRDogU29ydGluZyBjc3MgYW5kIGpzIGFycmF5cyBoZXJlIHNvIHdlIGdldCBjb25zaXN0ZW50IHRlc3QgcmVzdWx0cy4uLiBidXQgd2VcbiAgICAgICAgICAvLyBzaG91bGRuJ3QgaGF2ZSB0by4gV2hlcmUgaXMgdGhlIGluY29uc2lzdGVuY3kgY29taW5nIGZyb20/XG4gICAgICAgICAgY3NzOiBnZXRDb250ZW50U2NyaXB0Q3NzRmlsZXMoc2NyaXB0cywgY3NzTWFwKT8uc29ydCgpLFxuICAgICAgICAgIGpzOiBzY3JpcHRzXG4gICAgICAgICAgICAubWFwKChlbnRyeSkgPT5cbiAgICAgICAgICAgICAgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoZW50cnksIGNvbmZpZy5vdXREaXIsICcuanMnKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zb3J0KCksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGlmIChuZXdDb250ZW50U2NyaXB0cy5sZW5ndGggPj0gMCkge1xuICAgICAgICBtYW5pZmVzdC5jb250ZW50X3NjcmlwdHMgPz89IFtdO1xuICAgICAgICBtYW5pZmVzdC5jb250ZW50X3NjcmlwdHMucHVzaCguLi5uZXdDb250ZW50U2NyaXB0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudFNjcmlwdENzc1Jlc291cmNlcyA9IGdldENvbnRlbnRTY3JpcHRDc3NXZWJBY2Nlc3NpYmxlUmVzb3VyY2VzKFxuICAgICAgY29uZmlnLFxuICAgICAgY29udGVudFNjcmlwdHMsXG4gICAgICBjc3NNYXAsXG4gICAgKTtcbiAgICBpZiAoY29udGVudFNjcmlwdENzc1Jlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBtYW5pZmVzdC53ZWJfYWNjZXNzaWJsZV9yZXNvdXJjZXMgPz89IFtdO1xuICAgICAgbWFuaWZlc3Qud2ViX2FjY2Vzc2libGVfcmVzb3VyY2VzLnB1c2goLi4uY29udGVudFNjcmlwdENzc1Jlc291cmNlcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRpc2NvdmVySWNvbnMoXG4gIGJ1aWxkT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPixcbik6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0WydpY29ucyddIHtcbiAgY29uc3QgaWNvbnM6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtdO1xuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgLy8gI3JlZ2lvbiBzbmlwcGV0XG4gIGNvbnN0IGljb25SZWdleCA9IFtcbiAgICAvXmljb24tKFswLTldKylcXC4ocG5nfGJtcHxqcGVnfGpwZ3xpY298Z2lmKSQvLCAgICAgICAgICAgICAvLyBpY29uLTE2LnBuZ1xuICAgIC9eaWNvbi0oWzAtOV0rKXhbMC05XStcXC4ocG5nfGJtcHxqcGVnfGpwZ3xpY298Z2lmKSQvLCAgICAgIC8vIGljb24tMTZ4MTYucG5nXG4gICAgL15pY29uQChbMC05XSspd1xcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sICAgICAgICAgICAgLy8gaWNvbkAxNncucG5nXG4gICAgL15pY29uQChbMC05XSspaFxcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sICAgICAgICAgICAgLy8gaWNvbkAxNmgucG5nXG4gICAgL15pY29uQChbMC05XSspXFwuKHBuZ3xibXB8anBlZ3xqcGd8aWNvfGdpZikkLywgICAgICAgICAgICAgLy8gaWNvbkAxNi5wbmdcbiAgICAvXmljb25bXFwvXFxcXF0oWzAtOV0rKVxcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sICAgICAgICAvLyBpY29uLzE2LnBuZ1xuICAgIC9eaWNvbltcXC9cXFxcXShbMC05XSspeFswLTldK1xcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sIC8vIGljb24vMTZ4MTYucG5nXG4gIF07XG4gIC8vICNlbmRyZWdpb24gc25pcHBldFxuXG4gIGJ1aWxkT3V0cHV0LnB1YmxpY0Fzc2V0cy5mb3JFYWNoKChhc3NldCkgPT4ge1xuICAgIGxldCBzaXplOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCByZWdleCBvZiBpY29uUmVnZXgpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gYXNzZXQuZmlsZU5hbWUubWF0Y2gocmVnZXgpO1xuICAgICAgaWYgKG1hdGNoPy5bMV0gIT0gbnVsbCkge1xuICAgICAgICBzaXplID0gbWF0Y2hbMV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2l6ZSA9PSBudWxsKSByZXR1cm47XG5cbiAgICBpY29ucy5wdXNoKFtzaXplLCBub3JtYWxpemVQYXRoKGFzc2V0LmZpbGVOYW1lKV0pO1xuICB9KTtcblxuICByZXR1cm4gaWNvbnMubGVuZ3RoID4gMCA/IE9iamVjdC5mcm9tRW50cmllcyhpY29ucykgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFkZERldk1vZGVDc3AoXG4gIG1hbmlmZXN0OiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdCxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IHZvaWQge1xuICBjb25zdCBwZXJtaXNzaW9uID0gYGh0dHA6Ly8ke2NvbmZpZy5zZXJ2ZXI/Lmhvc3RuYW1lID8/ICcnfS8qYDtcbiAgY29uc3QgYWxsb3dlZENzcCA9IGNvbmZpZy5zZXJ2ZXI/Lm9yaWdpbiA/PyAnaHR0cDovL2xvY2FsaG9zdDoqJztcblxuICBpZiAobWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gMykge1xuICAgIGFkZEhvc3RQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKTtcbiAgfSBlbHNlIHtcbiAgICBhZGRQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKTtcbiAgfVxuXG4gIGNvbnN0IGNzcCA9IG5ldyBDb250ZW50U2VjdXJpdHlQb2xpY3koXG4gICAgbWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gM1xuICAgICAgPyAvLyBAdHMtZXhwZWN0LWVycm9yOiBleHRlbnNpb25fcGFnZXMgaXMgbm90IHR5cGVkXG4gICAgICAgIG1hbmlmZXN0LmNvbnRlbnRfc2VjdXJpdHlfcG9saWN5Py5leHRlbnNpb25fcGFnZXMgPz9cbiAgICAgICAgXCJzY3JpcHQtc3JjICdzZWxmJyAnd2FzbS11bnNhZmUtZXZhbCc7IG9iamVjdC1zcmMgJ3NlbGYnO1wiIC8vIGRlZmF1bHQgQ1NQIGZvciBNVjNcbiAgICAgIDogbWFuaWZlc3QuY29udGVudF9zZWN1cml0eV9wb2xpY3kgPz9cbiAgICAgICAgXCJzY3JpcHQtc3JjICdzZWxmJzsgb2JqZWN0LXNyYyAnc2VsZic7XCIsIC8vIGRlZmF1bHQgQ1NQIGZvciBNVjJcbiAgKTtcblxuICBpZiAoY29uZmlnLnNlcnZlcikgY3NwLmFkZCgnc2NyaXB0LXNyYycsIGFsbG93ZWRDc3ApO1xuXG4gIGlmIChtYW5pZmVzdC5tYW5pZmVzdF92ZXJzaW9uID09PSAzKSB7XG4gICAgbWFuaWZlc3QuY29udGVudF9zZWN1cml0eV9wb2xpY3kgPz89IHt9O1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGV4dGVuc2lvbl9wYWdlcyBpcyBub3QgdHlwZWRcbiAgICBtYW5pZmVzdC5jb250ZW50X3NlY3VyaXR5X3BvbGljeS5leHRlbnNpb25fcGFnZXMgPSBjc3AudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICBtYW5pZmVzdC5jb250ZW50X3NlY3VyaXR5X3BvbGljeSA9IGNzcC50b1N0cmluZygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZERldk1vZGVQZXJtaXNzaW9ucyhcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKSB7XG4gIC8vIEZvciByZWxvYWRpbmcgdGhlIHBhZ2VcbiAgYWRkUGVybWlzc2lvbihtYW5pZmVzdCwgJ3RhYnMnKTtcblxuICAvLyBGb3IgcmVnaXN0ZXJpbmcgY29udGVudCBzY3JpcHRzXG4gIGlmIChjb25maWcubWFuaWZlc3RWZXJzaW9uID09PSAzKSBhZGRQZXJtaXNzaW9uKG1hbmlmZXN0LCAnc2NyaXB0aW5nJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYnVuZGxlIHBhdGhzIHRvIENTUyBmaWxlcyBhc3NvY2lhdGVkIHdpdGggYSBsaXN0IG9mIGNvbnRlbnQgc2NyaXB0cywgb3IgdW5kZWZpbmVkIGlmXG4gKiB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIENTUy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRlbnRTY3JpcHRDc3NGaWxlcyhcbiAgY29udGVudFNjcmlwdHM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50W10sXG4gIGNvbnRlbnRTY3JpcHRDc3NNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNzczogc3RyaW5nW10gPSBbXTtcblxuICBjb250ZW50U2NyaXB0cy5mb3JFYWNoKChzY3JpcHQpID0+IHtcbiAgICBpZiAoXG4gICAgICBzY3JpcHQub3B0aW9ucy5jc3NJbmplY3Rpb25Nb2RlID09PSAnbWFudWFsJyB8fFxuICAgICAgc2NyaXB0Lm9wdGlvbnMuY3NzSW5qZWN0aW9uTW9kZSA9PT0gJ3VpJ1xuICAgIClcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IGNzc0ZpbGUgPSBjb250ZW50U2NyaXB0Q3NzTWFwW3NjcmlwdC5uYW1lXTtcbiAgICBpZiAoY3NzRmlsZSA9PSBudWxsKSByZXR1cm47XG5cbiAgICBpZiAoY3NzRmlsZSkgY3NzLnB1c2goY3NzRmlsZSk7XG4gIH0pO1xuXG4gIGlmIChjc3MubGVuZ3RoID4gMCkgcmV0dXJuIGNzcztcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb250ZW50IHNjcmlwdHMgY29uZmlndXJlZCB3aXRoIGBjc3NJbmplY3Rpb25Nb2RlOiBcInVpXCJgIG5lZWQgdG8gYWRkIHRoZWlyIENTUyBmaWxlcyB0byB3ZWJcbiAqIGFjY2Vzc2libGUgcmVzb3VyY2VzIHNvIHRoZXkgY2FuIGJlIGZldGNoZWQgYXMgdGV4dCBhbmQgYWRkZWQgdG8gc2hhZG93IHJvb3RzIHRoYXQgdGhlIFVJIGlzXG4gKiBhZGRlZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRlbnRTY3JpcHRDc3NXZWJBY2Nlc3NpYmxlUmVzb3VyY2VzKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBjb250ZW50U2NyaXB0czogQ29udGVudFNjcmlwdEVudHJ5cG9pbnRbXSxcbiAgY29udGVudFNjcmlwdENzc01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPixcbik6IGFueVtdIHtcbiAgY29uc3QgcmVzb3VyY2VzOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnRlbnRTY3JpcHRzLmZvckVhY2goKHNjcmlwdCkgPT4ge1xuICAgIGlmIChzY3JpcHQub3B0aW9ucy5jc3NJbmplY3Rpb25Nb2RlICE9PSAndWknKSByZXR1cm47XG5cbiAgICBjb25zdCBjc3NGaWxlID0gY29udGVudFNjcmlwdENzc01hcFtzY3JpcHQubmFtZV07XG4gICAgaWYgKGNzc0ZpbGUgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgaWYgKGNvbmZpZy5tYW5pZmVzdFZlcnNpb24gPT09IDIpIHtcbiAgICAgIHJlc291cmNlcy5wdXNoKGNzc0ZpbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvdXJjZXMucHVzaCh7XG4gICAgICAgIHJlc291cmNlczogW2Nzc0ZpbGVdLFxuICAgICAgICBtYXRjaGVzOiBzY3JpcHQub3B0aW9ucy5tYXRjaGVzLFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzb3VyY2VzO1xufVxuXG4vKipcbiAqIEJhc2VkIG9uIHRoZSBidWlsZCBvdXRwdXQsIHJldHVybiBhIFJlY29yZCBvZiBlYWNoIGNvbnRlbnQgc2NyaXB0J3MgbmFtZSB0byBpdCBDU1MgZmlsZSBpZiB0aGVcbiAqIHNjcmlwdCBpbmNsdWRlcyBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZW50U2NyaXB0c0Nzc01hcChcbiAgYnVpbGRPdXRwdXQ6IE9taXQ8QnVpbGRPdXRwdXQsICdtYW5pZmVzdCc+LFxuICBzY3JpcHRzOiBDb250ZW50U2NyaXB0RW50cnlwb2ludFtdLFxuKSB7XG4gIGNvbnN0IG1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiA9IHt9O1xuICBjb25zdCBhbGxDaHVua3MgPSBidWlsZE91dHB1dC5zdGVwcy5mbGF0TWFwKChzdGVwKSA9PiBzdGVwLmNodW5rcyk7XG4gIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiB7XG4gICAgY29uc3QgcmVsYXRlZENzcyA9IGFsbENodW5rcy5maW5kKFxuICAgICAgKGNodW5rKSA9PiBjaHVuay5maWxlTmFtZSA9PT0gYGNvbnRlbnQtc2NyaXB0cy8ke3NjcmlwdC5uYW1lfS5jc3NgLFxuICAgICk7XG4gICAgaWYgKHJlbGF0ZWRDc3MgIT0gbnVsbCkgbWFwW3NjcmlwdC5uYW1lXSA9IHJlbGF0ZWRDc3MuZmlsZU5hbWU7XG4gIH0pO1xuICByZXR1cm4gbWFwO1xufVxuXG5mdW5jdGlvbiBhZGRQZXJtaXNzaW9uKFxuICBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QsXG4gIHBlcm1pc3Npb246IHN0cmluZyxcbik6IHZvaWQge1xuICBtYW5pZmVzdC5wZXJtaXNzaW9ucyA/Pz0gW107XG4gIGlmIChtYW5pZmVzdC5wZXJtaXNzaW9ucy5pbmNsdWRlcyhwZXJtaXNzaW9uKSkgcmV0dXJuO1xuICBtYW5pZmVzdC5wZXJtaXNzaW9ucy5wdXNoKHBlcm1pc3Npb24pO1xufVxuXG5mdW5jdGlvbiBhZGRIb3N0UGVybWlzc2lvbihcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBob3N0UGVybWlzc2lvbjogc3RyaW5nLFxuKTogdm9pZCB7XG4gIG1hbmlmZXN0Lmhvc3RfcGVybWlzc2lvbnMgPz89IFtdO1xuICBpZiAobWFuaWZlc3QuaG9zdF9wZXJtaXNzaW9ucy5pbmNsdWRlcyhob3N0UGVybWlzc2lvbikpIHJldHVybjtcbiAgbWFuaWZlc3QuaG9zdF9wZXJtaXNzaW9ucy5wdXNoKGhvc3RQZXJtaXNzaW9uKTtcbn1cbiIsICIvKipcbiAqIERpcmVjdGl2ZSBuYW1lcyB0aGF0IG1ha2UgdXAgQ1NQcy4gVGhlcmUgYXJlIG1vcmUsIHRoaXMgaXMgYWxsIEkgbmVlZCBmb3IgdGhlIHBsdWdpbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ3NwRGlyZWN0aXZlID0gJ2RlZmF1bHQtc3JjJyB8ICdzY3JpcHQtc3JjJyB8ICdvYmplY3Qtc3JjJztcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeSB7XG4gIHByaXZhdGUgc3RhdGljIERJUkVDVElWRV9PUkRFUjogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IHtcbiAgICAnZGVmYXVsdC1zcmMnOiAwLFxuICAgICdzY3JpcHQtc3JjJzogMSxcbiAgICAnb2JqZWN0LXNyYyc6IDIsXG4gIH07XG5cbiAgZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG4gIGNvbnN0cnVjdG9yKGNzcD86IHN0cmluZykge1xuICAgIGlmIChjc3ApIHtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gY3NwLnNwbGl0KCc7JykubWFwKChzZWN0aW9uKSA9PiBzZWN0aW9uLnRyaW0oKSk7XG4gICAgICB0aGlzLmRhdGEgPSBzZWN0aW9ucy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nW10+PigoZGF0YSwgc2VjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBba2V5LCAuLi52YWx1ZXNdID0gc2VjdGlvbi5zcGxpdCgnICcpLm1hcCgoaXRlbSkgPT4gaXRlbS50cmltKCkpO1xuICAgICAgICBpZiAoa2V5KSBkYXRhW2tleV0gPSB2YWx1ZXM7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGEgc2V0IG9mIHZhbHVlcyBhcmUgbGlzdGVkIHVuZGVyIGEgZGlyZWN0aXZlLlxuICAgKi9cbiAgYWRkKGRpcmVjdGl2ZTogQ3NwRGlyZWN0aXZlLCAuLi5uZXdWYWx1ZXM6IHN0cmluZ1tdKTogQ29udGVudFNlY3VyaXR5UG9saWN5IHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmRhdGFbZGlyZWN0aXZlXSA/PyBbXTtcbiAgICBuZXdWYWx1ZXMuZm9yRWFjaCgobmV3VmFsdWUpID0+IHtcbiAgICAgIGlmICghdmFsdWVzLmluY2x1ZGVzKG5ld1ZhbHVlKSkgdmFsdWVzLnB1c2gobmV3VmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMuZGF0YVtkaXJlY3RpdmVdID0gdmFsdWVzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXJlY3RpdmVzID0gT2JqZWN0LmVudHJpZXModGhpcy5kYXRhKS5zb3J0KChbbF0sIFtyXSkgPT4ge1xuICAgICAgY29uc3QgbG8gPSBDb250ZW50U2VjdXJpdHlQb2xpY3kuRElSRUNUSVZFX09SREVSW2xdID8/IDI7XG4gICAgICBjb25zdCBybyA9IENvbnRlbnRTZWN1cml0eVBvbGljeS5ESVJFQ1RJVkVfT1JERVJbcl0gPz8gMjtcbiAgICAgIHJldHVybiBsbyAtIHJvO1xuICAgIH0pO1xuICAgIHJldHVybiBkaXJlY3RpdmVzLm1hcCgoZW50cnkpID0+IGVudHJ5LmZsYXQoKS5qb2luKCcgJykpLmpvaW4oJzsgJykgKyAnOyc7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBNYW5pZmVzdCB9IGZyb20gJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc7XG5pbXBvcnQgeyBDb250ZW50U2NyaXB0RW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyByZXNvbHZlUGVyQnJvd3Nlck9wdGlvbiB9IGZyb20gJy4vZW50cnlwb2ludHMnO1xuXG4vKipcbiAqIFJldHVybnMgYSB1bmlxdWUgYW5kIGNvbnNpc3RlbnQgc3RyaW5nIGhhc2ggYmFzZWQgb24gYSBjb250ZW50IHNjcmlwdHMgb3B0aW9ucy5cbiAqXG4gKiBJdCBpcyBhYmxlIHRvIHJlY29nbml6ZSBkZWZhdWx0IHZhbHVlcyxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hDb250ZW50U2NyaXB0T3B0aW9ucyhcbiAgb3B0aW9uczogQ29udGVudFNjcmlwdEVudHJ5cG9pbnRbJ29wdGlvbnMnXSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHdpdGhEZWZhdWx0czogQ29udGVudFNjcmlwdEVudHJ5cG9pbnRbJ29wdGlvbnMnXSA9IHtcbiAgICBleGNsdWRlR2xvYnM6IFtdLFxuICAgIGV4Y2x1ZGVNYXRjaGVzOiBbXSxcbiAgICBpbmNsdWRlR2xvYnM6IFtdLFxuICAgIG1hdGNoQWJvdXRCbGFuazogZmFsc2UsXG4gICAgbWF0Y2hPcmlnaW5Bc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICBydW5BdDogJ2RvY3VtZW50X2lkbGUnLFxuICAgIGFsbEZyYW1lczogZmFsc2UsXG4gICAgd29ybGQ6ICdJU09MQVRFRCcsXG4gICAgLy8gVE9ETzogc3RyaXAgdW5kZWZpbmVkIGZpZWxkcyBmcm9tIG9wdGlvbnMgb2JqZWN0IHRvIGltcHJvdmUgY29udGVudCBzY3JpcHQgZ3JvdXBpbmcuXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgIE9iamVjdC5lbnRyaWVzKHdpdGhEZWZhdWx0cylcbiAgICAgIC8vIFNvcnQgYW55IGFycmF5cyBzbyB0aGVpciB2YWx1ZXMgYXJlIGNvbnNpc3RlbnRcbiAgICAgIC5tYXA8W3N0cmluZywgdW5rbm93bl0+KChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gW2tleSwgdmFsdWUuc29ydCgpXTtcbiAgICAgICAgZWxzZSByZXR1cm4gW2tleSwgdmFsdWVdO1xuICAgICAgfSlcbiAgICAgIC8vIFNvcnQgYWxsIHRoZSBmaWVsZHMgYWxwaGFiZXRpY2FsbHlcbiAgICAgIC5zb3J0KChsLCByKSA9PiBsWzBdLmxvY2FsZUNvbXBhcmUoclswXSkpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwV3h0T3B0aW9uc1RvQ29udGVudFNjcmlwdChcbiAgb3B0aW9uczogQ29udGVudFNjcmlwdEVudHJ5cG9pbnRbJ29wdGlvbnMnXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IE9taXQ8TWFuaWZlc3QuQ29udGVudFNjcmlwdCwgJ2pzJyB8ICdjc3MnPiB7XG4gIHJldHVybiB7XG4gICAgbWF0Y2hlczogcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24ob3B0aW9ucy5tYXRjaGVzLCBjb25maWcuYnJvd3NlciksXG4gICAgYWxsX2ZyYW1lczogcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24ob3B0aW9ucy5hbGxGcmFtZXMsIGNvbmZpZy5icm93c2VyKSxcbiAgICBtYXRjaF9hYm91dF9ibGFuazogcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24oXG4gICAgICBvcHRpb25zLm1hdGNoQWJvdXRCbGFuayxcbiAgICAgIGNvbmZpZy5icm93c2VyLFxuICAgICksXG4gICAgZXhjbHVkZV9nbG9iczogcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24oXG4gICAgICBvcHRpb25zLmV4Y2x1ZGVHbG9icyxcbiAgICAgIGNvbmZpZy5icm93c2VyLFxuICAgICksXG4gICAgZXhjbHVkZV9tYXRjaGVzOiByZXNvbHZlUGVyQnJvd3Nlck9wdGlvbihcbiAgICAgIG9wdGlvbnMuZXhjbHVkZU1hdGNoZXMsXG4gICAgICBjb25maWcuYnJvd3NlcixcbiAgICApLFxuICAgIGluY2x1ZGVfZ2xvYnM6IHJlc29sdmVQZXJCcm93c2VyT3B0aW9uKFxuICAgICAgb3B0aW9ucy5pbmNsdWRlR2xvYnMsXG4gICAgICBjb25maWcuYnJvd3NlcixcbiAgICApLFxuICAgIHJ1bl9hdDogcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24ob3B0aW9ucy5ydW5BdCwgY29uZmlnLmJyb3dzZXIpLFxuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogdW50eXBlZCBjaHJvbWUgb3B0aW9uc1xuICAgIG1hdGNoX29yaWdpbl9hc19mYWxsYmFjazogcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24oXG4gICAgICBvcHRpb25zLm1hdGNoT3JpZ2luQXNGYWxsYmFjayxcbiAgICAgIGNvbmZpZy5icm93c2VyLFxuICAgICksXG4gICAgd29ybGQ6IG9wdGlvbnMud29ybGQsXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5cbi8qKlxuICogUmVhZCB0aGUgcHJvamVjdCdzIHBhY2thZ2UuanNvbi5cbiAqXG4gKiBUT0RPOiBsb29rIGluIHJvb3QgYW5kIHVwIGRpcmVjdG9yaWVzIHVudGlsIGl0J3MgZm91bmRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBhY2thZ2VKc29uKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIGFueT4+IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGZpbGUgPSByZXNvbHZlKGNvbmZpZy5yb290LCAncGFja2FnZS5qc29uJyk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLnJlYWRKc29uKGZpbGUpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgYEZhaWxlZCB0byByZWFkIHBhY2thZ2UuanNvbiBhdDogJHtmaWxlfS4gUmV0dXJuaW5nIHVuZGVmaW5lZC5gLFxuICAgICk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTWFuaWZlc3QgfSBmcm9tICd3ZWJleHRlbnNpb24tcG9seWZpbGwnO1xuaW1wb3J0IHsgQnVpbGRPdXRwdXQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGJ1aWxkRW50cnlwb2ludHMgfSBmcm9tICcuL2J1aWxkL2J1aWxkRW50cnlwb2ludHMnO1xuaW1wb3J0IHsgZmluZEVudHJ5cG9pbnRzIH0gZnJvbSAnLi9idWlsZC9maW5kRW50cnlwb2ludHMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVUeXBlc0RpciB9IGZyb20gJy4vYnVpbGQvZ2VuZXJhdGVUeXBlc0Rpcic7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZywgRW50cnlwb2ludEdyb3VwIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZU1haW5mZXN0LCB3cml0ZU1hbmlmZXN0IH0gZnJvbSAnLi91dGlscy9tYW5pZmVzdCc7XG5pbXBvcnQgcGMgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGdyb3VwRW50cnlwb2ludHMgfSBmcm9tICcuL3V0aWxzL2dyb3VwRW50cnlwb2ludHMnO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24gfSBmcm9tICcuL3V0aWxzL2Zvcm1hdER1cmF0aW9uJztcbmltcG9ydCB7IHByaW50QnVpbGRTdW1tYXJ5IH0gZnJvbSAnLi9sb2cvcHJpbnRCdWlsZFN1bW1hcnknO1xuaW1wb3J0IHsgZXhlY2FDb21tYW5kIH0gZnJvbSAnZXhlY2EnO1xuaW1wb3J0IGdsb2IgZnJvbSAnZmFzdC1nbG9iJztcbmltcG9ydCB7IHVubm9ybWFsaXplUGF0aCB9IGZyb20gJy4vdXRpbHMvcGF0aHMnO1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZXh0ZW5zaW9uIGJhc2VkIG9uIGFuIGludGVybmFsIGNvbmZpZy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uOlxuICogMS4gQ2xlYW5zIHRoZSBvdXRwdXQgZGlyZWN0b3J5XG4gKiAyLiBFeGVjdXRlcyB0aGUgcmVidWlsZCBmdW5jdGlvbiB3aXRoIGEgYmxhbmsgcHJldmlvdXMgb3V0cHV0IHNvIGV2ZXJ5dGhpbmcgaXMgYnVpbHQgKHNlZVxuICogICAgYHJlYnVpbGRgIGZvciBtb3JlIGRldGFpbHMpXG4gKiAzLiBQcmludHMgdGhlIHN1bW1hcnlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkSW50ZXJuYWwoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPEJ1aWxkT3V0cHV0PiB7XG4gIGNvbnN0IHZlcmIgPSBjb25maWcuY29tbWFuZCA9PT0gJ3NlcnZlJyA/ICdQcmUtcmVuZGVyaW5nJyA6ICdCdWlsZGluZyc7XG4gIGNvbnN0IHRhcmdldCA9IGAke2NvbmZpZy5icm93c2VyfS1tdiR7Y29uZmlnLm1hbmlmZXN0VmVyc2lvbn1gO1xuICBjb25maWcubG9nZ2VyLmluZm8oXG4gICAgYCR7dmVyYn0gJHtwYy5jeWFuKHRhcmdldCl9IGZvciAke3BjLmN5YW4oY29uZmlnLm1vZGUpfSB3aXRoICR7cGMuZ3JlZW4oXG4gICAgICBgVml0ZSAke3ZpdGUudmVyc2lvbn1gLFxuICAgICl9YCxcbiAgKTtcbiAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAvLyBDbGVhbnVwXG4gIGF3YWl0IGZzLnJtKGNvbmZpZy5vdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgYXdhaXQgZnMuZW5zdXJlRGlyKGNvbmZpZy5vdXREaXIpO1xuXG4gIGNvbnN0IGVudHJ5cG9pbnRzID0gYXdhaXQgZmluZEVudHJ5cG9pbnRzKGNvbmZpZyk7XG4gIGNvbmZpZy5sb2dnZXIuZGVidWcoJ0RldGVjdGVkIGVudHJ5cG9pbnRzOicsIGVudHJ5cG9pbnRzKTtcbiAgY29uc3QgZ3JvdXBzID0gZ3JvdXBFbnRyeXBvaW50cyhlbnRyeXBvaW50cyk7XG4gIGNvbnN0IHsgb3V0cHV0IH0gPSBhd2FpdCByZWJ1aWxkKGNvbmZpZywgZ3JvdXBzLCB1bmRlZmluZWQpO1xuXG4gIC8vIFBvc3QtYnVpbGRcbiAgYXdhaXQgcHJpbnRCdWlsZFN1bW1hcnkoXG4gICAgY29uZmlnLmxvZ2dlci5zdWNjZXNzLFxuICAgIGBCdWlsdCBleHRlbnNpb24gaW4gJHtmb3JtYXREdXJhdGlvbihEYXRlLm5vdygpIC0gc3RhcnRUaW1lKX1gLFxuICAgIG91dHB1dCxcbiAgICBjb25maWcsXG4gICk7XG5cbiAgaWYgKGNvbmZpZy5hbmFseXNpcy5lbmFibGVkKSB7XG4gICAgYXdhaXQgY29tYmluZUFuYWx5c2lzU3RhdHMoY29uZmlnKTtcbiAgICBjb25maWcubG9nZ2VyLmluZm8oXG4gICAgICBgQW5hbHlzaXMgY29tcGxldGU6XFxuICAke3BjLmdyYXkoJ1x1MjUxNFx1MjUwMCcpfSAke3BjLnllbGxvdygnc3RhdHMuaHRtbCcpfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBjb25maWd1cmF0aW9uLCBsaXN0IG9mIGVudHJ5cG9pbnRzLCBhbmQgYW4gZXhpc3RpbmcsIHBhcnRpYWwgb3V0cHV0LCBidWlsZCB0aGVcbiAqIGVudHJ5cG9pbnRzIGFuZCBtZXJnZSB0aGUgbmV3IG91dHB1dCB3aXRoIHRoZSBleGlzdGluZyBvdXRwdXQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsOlxuICogMS4gR2VuZXJhdGUgdGhlIC53eHQgZGlyZWN0b3J5J3MgdHlwZXNcbiAqIDIuIEJ1aWxkIHRoZSBgZW50cnlwb2ludEdyb3Vwc2AgKGFuZCBjb3BpZXMgcHVibGljIGZpbGVzKVxuICogMy4gR2VuZXJhdGUgdGhlIGxhdGVzdCBtYW5pZmVzdCBmb3IgYWxsIGVudHJ5cG9pbnRzXG4gKiA0LiBXcml0ZSB0aGUgbmV3IG1hbmlmZXN0IHRvIHRoZSBmaWxlIHN5c3RlbVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVidWlsZChcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbiAgZW50cnlwb2ludEdyb3VwczogRW50cnlwb2ludEdyb3VwW10sXG4gIGV4aXN0aW5nT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPiA9IHtcbiAgICBzdGVwczogW10sXG4gICAgcHVibGljQXNzZXRzOiBbXSxcbiAgfSxcbik6IFByb21pc2U8eyBvdXRwdXQ6IEJ1aWxkT3V0cHV0OyBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QgfT4ge1xuICBjb25zdCB7IGRlZmF1bHQ6IG9yYSB9ID0gYXdhaXQgaW1wb3J0KCdvcmEnKTtcbiAgY29uc3Qgc3Bpbm5lciA9IG9yYShgUHJlcGFyaW5nLi4uYCkuc3RhcnQoKTtcblxuICAvLyBVcGRhdGUgdHlwZXMgZGlyZWN0b3J5IHdpdGggbmV3IGZpbGVzIGFuZCB0eXBlc1xuICBjb25zdCBhbGxFbnRyeXBvaW50cyA9IGF3YWl0IGZpbmRFbnRyeXBvaW50cyhjb25maWcpO1xuICBhd2FpdCBnZW5lcmF0ZVR5cGVzRGlyKGFsbEVudHJ5cG9pbnRzLCBjb25maWcpLmNhdGNoKChlcnIpID0+IHtcbiAgICBjb25maWcubG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byB1cGRhdGUgLnd4dCBkaXJlY3Rvcnk6JywgZXJyKTtcbiAgICAvLyBUaHJvdyB0aGUgZXJyb3IgaWYgZG9pbmcgYSByZWd1bGFyIGJ1aWxkLCBkb24ndCBmb3IgZGV2IG1vZGUuXG4gICAgaWYgKGNvbmZpZy5jb21tYW5kID09PSAnYnVpbGQnKSB0aHJvdyBlcnI7XG4gIH0pO1xuXG4gIC8vIEJ1aWxkIGFuZCBtZXJnZSB0aGUgb3V0cHV0c1xuICBjb25zdCBuZXdPdXRwdXQgPSBhd2FpdCBidWlsZEVudHJ5cG9pbnRzKGVudHJ5cG9pbnRHcm91cHMsIGNvbmZpZywgc3Bpbm5lcik7XG4gIGNvbnN0IG1lcmdlZE91dHB1dDogT21pdDxCdWlsZE91dHB1dCwgJ21hbmlmZXN0Jz4gPSB7XG4gICAgc3RlcHM6IFsuLi5leGlzdGluZ091dHB1dC5zdGVwcywgLi4ubmV3T3V0cHV0LnN0ZXBzXSxcbiAgICBwdWJsaWNBc3NldHM6IFsuLi5leGlzdGluZ091dHB1dC5wdWJsaWNBc3NldHMsIC4uLm5ld091dHB1dC5wdWJsaWNBc3NldHNdLFxuICB9O1xuXG4gIGNvbnN0IG5ld01hbmlmZXN0ID0gYXdhaXQgZ2VuZXJhdGVNYWluZmVzdChcbiAgICBhbGxFbnRyeXBvaW50cyxcbiAgICBtZXJnZWRPdXRwdXQsXG4gICAgY29uZmlnLFxuICApO1xuICBjb25zdCBmaW5hbE91dHB1dDogQnVpbGRPdXRwdXQgPSB7XG4gICAgbWFuaWZlc3Q6IG5ld01hbmlmZXN0LFxuICAgIC4uLm5ld091dHB1dCxcbiAgfTtcblxuICAvLyBXcml0ZSBtYW5pZmVzdFxuICBhd2FpdCB3cml0ZU1hbmlmZXN0KG5ld01hbmlmZXN0LCBmaW5hbE91dHB1dCwgY29uZmlnKTtcblxuICAvLyBTdG9wIHRoZSBzcGlubmVyIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgQ0xJIG91dHB1dFxuICBzcGlubmVyLmNsZWFyKCkuc3RvcCgpO1xuXG4gIHJldHVybiB7XG4gICAgb3V0cHV0OiB7XG4gICAgICBtYW5pZmVzdDogbmV3TWFuaWZlc3QsXG4gICAgICBzdGVwczogWy4uLmV4aXN0aW5nT3V0cHV0LnN0ZXBzLCAuLi5maW5hbE91dHB1dC5zdGVwc10sXG4gICAgICBwdWJsaWNBc3NldHM6IFtcbiAgICAgICAgLi4uZXhpc3RpbmdPdXRwdXQucHVibGljQXNzZXRzLFxuICAgICAgICAuLi5maW5hbE91dHB1dC5wdWJsaWNBc3NldHMsXG4gICAgICBdLFxuICAgIH0sXG4gICAgbWFuaWZlc3Q6IG5ld01hbmlmZXN0LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb21iaW5lQW5hbHlzaXNTdGF0cyhjb25maWc6IEludGVybmFsQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHVuaXhGaWxlcyA9IGF3YWl0IGdsb2IoYHN0YXRzLSouanNvbmAsIHtcbiAgICBjd2Q6IGNvbmZpZy5vdXREaXIsXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gIH0pO1xuICBjb25zdCBhYnNvbHV0ZVBhdGhzID0gdW5peEZpbGVzLm1hcCh1bm5vcm1hbGl6ZVBhdGgpO1xuXG4gIGF3YWl0IGV4ZWNhQ29tbWFuZChcbiAgICBgcm9sbHVwLXBsdWdpbi12aXN1YWxpemVyICR7YWJzb2x1dGVQYXRocy5qb2luKCcgJyl9IC0tdGVtcGxhdGUgJHtcbiAgICAgIGNvbmZpZy5hbmFseXNpcy50ZW1wbGF0ZVxuICAgIH1gLFxuICAgIHsgY3dkOiBjb25maWcucm9vdCwgc3RkaW86ICdpbmhlcml0JyB9LFxuICApO1xufVxuIiwgImltcG9ydCB7IEVudHJ5cG9pbnQgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBFbnRyeXBvaW50R3JvdXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogRW50cnlwb2ludHMgY2FuIGJlIGJ1aWxkIGluIGdyb3Vwcy4gSFRNTCBwYWdlcyBjYW4gYWxsIGJlIGJ1aWx0IHRvZ2V0aGVyIGluIGEgc2luZ2xlIHN0ZXAsIHdoaWxlXG4gKiBjb250ZW50IHNjcmlwdHMgbXVzdCBiZSBidWlsZCBpbmRpdmlkdWFsbHkuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBlbnRyeXBvaW50cyBwdXQgaW50byB0aGVzZSB0eXBlcyBvZiBncm91cHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncm91cEVudHJ5cG9pbnRzKGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10pOiBFbnRyeXBvaW50R3JvdXBbXSB7XG4gIGNvbnN0IGdyb3VwSW5kZXhNYXA6IFBhcnRpYWw8UmVjb3JkPEdyb3VwLCBudW1iZXI+PiA9IHt9O1xuICBjb25zdCBncm91cHM6IEVudHJ5cG9pbnRHcm91cFtdID0gW107XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyeXBvaW50cykge1xuICAgIGNvbnN0IGdyb3VwID0gRU5UUllfVFlQRV9UT19HUk9VUF9NQVBbZW50cnkudHlwZV07XG4gICAgaWYgKGdyb3VwID09PSAnbm8tZ3JvdXAnKSB7XG4gICAgICBncm91cHMucHVzaChlbnRyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBncm91cEluZGV4ID0gZ3JvdXBJbmRleE1hcFtncm91cF07XG4gICAgICBpZiAoZ3JvdXBJbmRleCA9PSBudWxsKSB7XG4gICAgICAgIGdyb3VwSW5kZXggPSBncm91cHMucHVzaChbXSkgLSAxO1xuICAgICAgICBncm91cEluZGV4TWFwW2dyb3VwXSA9IGdyb3VwSW5kZXg7XG4gICAgICB9XG4gICAgICAoZ3JvdXBzW2dyb3VwSW5kZXhdIGFzIEVudHJ5cG9pbnRbXSkucHVzaChlbnRyeSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdyb3Vwcztcbn1cblxuY29uc3QgRU5UUllfVFlQRV9UT19HUk9VUF9NQVA6IFJlY29yZDxFbnRyeXBvaW50Wyd0eXBlJ10sIEdyb3VwPiA9IHtcbiAgc2FuZGJveDogJ3NhbmRib3gtcGFnZScsXG5cbiAgcG9wdXA6ICdleHRlbnNpb24tcGFnZScsXG4gIG5ld3RhYjogJ2V4dGVuc2lvbi1wYWdlJyxcbiAgaGlzdG9yeTogJ2V4dGVuc2lvbi1wYWdlJyxcbiAgb3B0aW9uczogJ2V4dGVuc2lvbi1wYWdlJyxcbiAgZGV2dG9vbHM6ICdleHRlbnNpb24tcGFnZScsXG4gIGJvb2ttYXJrczogJ2V4dGVuc2lvbi1wYWdlJyxcbiAgc2lkZXBhbmVsOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICAndW5saXN0ZWQtcGFnZSc6ICdleHRlbnNpb24tcGFnZScsXG5cbiAgYmFja2dyb3VuZDogJ25vLWdyb3VwJyxcbiAgJ2NvbnRlbnQtc2NyaXB0JzogJ25vLWdyb3VwJyxcbiAgJ3VubGlzdGVkLXNjcmlwdCc6ICduby1ncm91cCcsXG4gICd1bmxpc3RlZC1zdHlsZSc6ICduby1ncm91cCcsXG4gICdjb250ZW50LXNjcmlwdC1zdHlsZSc6ICduby1ncm91cCcsXG59O1xuXG50eXBlIEdyb3VwID0gJ2V4dGVuc2lvbi1wYWdlJyB8ICdzYW5kYm94LXBhZ2UnIHwgJ25vLWdyb3VwJztcbiIsICJleHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24oZHVyYXRpb246IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChkdXJhdGlvbiA8IDFlMykgcmV0dXJuIGAke2R1cmF0aW9ufSBtc2A7XG4gIGlmIChkdXJhdGlvbiA8IDEwZTMpIHJldHVybiBgJHsoZHVyYXRpb24gLyAxZTMpLnRvRml4ZWQoMyl9IHNgO1xuICBpZiAoZHVyYXRpb24gPCA2MGUzKSByZXR1cm4gYCR7KGR1cmF0aW9uIC8gMWUzKS50b0ZpeGVkKDEpfSBzYDtcbiAgcmV0dXJuIGAkeyhkdXJhdGlvbiAvIDFlMykudG9GaXhlZCgwKX0gc2A7XG59XG4iLCAiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQnVpbGRPdXRwdXQsIEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgcHJpbnRGaWxlTGlzdCB9IGZyb20gJy4vcHJpbnRGaWxlTGlzdCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmludEJ1aWxkU3VtbWFyeShcbiAgbG9nOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQsXG4gIGhlYWRlcjogc3RyaW5nLFxuICBvdXRwdXQ6IEJ1aWxkT3V0cHV0LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKSB7XG4gIGNvbnN0IGNodW5rcyA9IFtcbiAgICAuLi5vdXRwdXQuc3RlcHMuZmxhdE1hcCgoc3RlcCkgPT4gc3RlcC5jaHVua3MpLFxuICAgIC4uLm91dHB1dC5wdWJsaWNBc3NldHMsXG4gIF0uc29ydCgobCwgcikgPT4ge1xuICAgIGNvbnN0IGxXZWlnaHQgPSBnZXRDaHVua1NvcnRXZWlnaHQobC5maWxlTmFtZSk7XG4gICAgY29uc3QgcldlaWdodCA9IGdldENodW5rU29ydFdlaWdodChyLmZpbGVOYW1lKTtcbiAgICBjb25zdCBkaWZmID0gbFdlaWdodCAtIHJXZWlnaHQ7XG4gICAgaWYgKGRpZmYgIT09IDApIHJldHVybiBkaWZmO1xuICAgIHJldHVybiBsLmZpbGVOYW1lLmxvY2FsZUNvbXBhcmUoci5maWxlTmFtZSk7XG4gIH0pO1xuXG4gIGNvbnN0IGZpbGVzID0gY2h1bmtzLm1hcCgoY2h1bmspID0+IHJlc29sdmUoY29uZmlnLm91dERpciwgY2h1bmsuZmlsZU5hbWUpKTtcbiAgYXdhaXQgcHJpbnRGaWxlTGlzdChsb2csIGhlYWRlciwgY29uZmlnLm91dERpciwgZmlsZXMpO1xufVxuXG5jb25zdCBERUZBVUxUX1NPUlRfV0VJR0hUID0gMTAwO1xuY29uc3QgQ0hVTktfU09SVF9XRUlHSFRTOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge1xuICAnbWFuaWZlc3QuanNvbic6IDAsXG4gICcuaHRtbCc6IDEsXG4gICcuanMubWFwJzogMixcbiAgJy5qcyc6IDIsXG4gICcuY3NzJzogMyxcbn07XG5mdW5jdGlvbiBnZXRDaHVua1NvcnRXZWlnaHQoZmlsZW5hbWU6IHN0cmluZykge1xuICByZXR1cm4gKFxuICAgIE9iamVjdC5lbnRyaWVzKENIVU5LX1NPUlRfV0VJR0hUUykuZmluZCgoW2tleV0pID0+XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aChrZXkpLFxuICAgICk/LlsxXSA/PyBERUZBVUxUX1NPUlRfV0VJR0hUXG4gICk7XG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwYyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJztcbmltcG9ydCB7IHByaW50VGFibGUgfSBmcm9tICcuL3ByaW50VGFibGUnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJpbnRGaWxlTGlzdChcbiAgbG9nOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkLFxuICBoZWFkZXI6IHN0cmluZyxcbiAgYmFzZURpcjogc3RyaW5nLFxuICBmaWxlczogc3RyaW5nW10sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IHRvdGFsU2l6ZSA9IDA7XG5cbiAgY29uc3QgZmlsZVJvd3M6IHN0cmluZ1tdW10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBmaWxlcy5tYXAoYXN5bmMgKGZpbGUsIGkpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gW1xuICAgICAgICBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGJhc2VEaXIpICsgcGF0aC5zZXAsXG4gICAgICAgIHBhdGgucmVsYXRpdmUoYmFzZURpciwgZmlsZSksXG4gICAgICBdO1xuICAgICAgY29uc3QgcHJlZml4ID0gaSA9PT0gZmlsZXMubGVuZ3RoIC0gMSA/ICcgIFx1MjUxNFx1MjUwMCcgOiAnICBcdTI1MUNcdTI1MDAnO1xuICAgICAgY29uc3QgY29sb3IgPSBnZXRDaHVua0NvbG9yKGZpbGUpO1xuICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5sc3RhdChmaWxlKTtcbiAgICAgIHRvdGFsU2l6ZSArPSBzdGF0cy5zaXplO1xuICAgICAgY29uc3Qgc2l6ZSA9IFN0cmluZyhmaWxlc2l6ZShzdGF0cy5zaXplKSk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBgJHtwYy5ncmF5KHByZWZpeCl9ICR7cGMuZGltKHBhcnRzWzBdKX0ke2NvbG9yKHBhcnRzWzFdKX1gLFxuICAgICAgICBwYy5kaW0oc2l6ZSksXG4gICAgICBdO1xuICAgIH0pLFxuICApO1xuXG4gIGZpbGVSb3dzLnB1c2goW2Ake3BjLmN5YW4oJ1x1MDNBMyBUb3RhbCBzaXplOicpfSAke1N0cmluZyhmaWxlc2l6ZSh0b3RhbFNpemUpKX1gXSk7XG5cbiAgcHJpbnRUYWJsZShsb2csIGhlYWRlciwgZmlsZVJvd3MpO1xufVxuXG5jb25zdCBERUZBVUxUX0NPTE9SID0gcGMuYmx1ZTtcbmNvbnN0IENIVU5LX0NPTE9SUzogUmVjb3JkPHN0cmluZywgKHRleHQ6IHN0cmluZykgPT4gc3RyaW5nPiA9IHtcbiAgJy5qcy5tYXAnOiBwYy5ncmF5LFxuICAnLmh0bWwnOiBwYy5ncmVlbixcbiAgJy5jc3MnOiBwYy5tYWdlbnRhLFxuICAnLmpzJzogcGMuY3lhbixcbiAgJy56aXAnOiBwYy55ZWxsb3csXG59O1xuZnVuY3Rpb24gZ2V0Q2h1bmtDb2xvcihmaWxlbmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiAoXG4gICAgT2JqZWN0LmVudHJpZXMoQ0hVTktfQ09MT1JTKS5maW5kKChba2V5XSkgPT4gZmlsZW5hbWUuZW5kc1dpdGgoa2V5KSk/LlsxXSA/P1xuICAgIERFRkFVTFRfQ09MT1JcbiAgKTtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gcHJpbnRUYWJsZShcbiAgbG9nOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkLFxuICBoZWFkZXI6IHN0cmluZyxcbiAgcm93czogc3RyaW5nW11bXSxcbiAgZ2FwID0gMixcbik6IHZvaWQge1xuICBpZiAocm93cy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICBjb25zdCBjb2x1bW5XaWR0aHMgPSByb3dzLnJlZHVjZShcbiAgICAod2lkdGhzLCByb3cpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5tYXgod2lkdGhzLmxlbmd0aCwgcm93Lmxlbmd0aCk7IGkrKykge1xuICAgICAgICB3aWR0aHNbaV0gPSBNYXRoLm1heChyb3dbaV0/Lmxlbmd0aCA/PyAwLCB3aWR0aHNbaV0gPz8gMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2lkdGhzO1xuICAgIH0sXG4gICAgcm93c1swXS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmxlbmd0aCksXG4gICk7XG5cbiAgbGV0IHN0ciA9ICcnO1xuICByb3dzLmZvckVhY2goKHJvdywgaSkgPT4ge1xuICAgIHJvdy5mb3JFYWNoKChjb2wsIGopID0+IHtcbiAgICAgIHN0ciArPSBjb2wucGFkRW5kKGNvbHVtbldpZHRoc1tqXSwgJyAnKTtcbiAgICAgIGlmIChqICE9PSByb3cubGVuZ3RoIC0gMSkgc3RyICs9ICcnLnBhZEVuZChnYXAsICcgJyk7XG4gICAgfSk7XG4gICAgaWYgKGkgIT09IHJvd3MubGVuZ3RoIC0gMSkgc3RyICs9ICdcXG4nO1xuICB9KTtcblxuICBsb2coYCR7aGVhZGVyfVxcbiR7c3RyfWApO1xufVxuIiwgImltcG9ydCB7QnVmZmVyfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IGNoaWxkUHJvY2VzcyBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCBjcm9zc1NwYXduIGZyb20gJ2Nyb3NzLXNwYXduJztcbmltcG9ydCBzdHJpcEZpbmFsTmV3bGluZSBmcm9tICdzdHJpcC1maW5hbC1uZXdsaW5lJztcbmltcG9ydCB7bnBtUnVuUGF0aEVudn0gZnJvbSAnbnBtLXJ1bi1wYXRoJztcbmltcG9ydCBvbmV0aW1lIGZyb20gJ29uZXRpbWUnO1xuaW1wb3J0IHttYWtlRXJyb3J9IGZyb20gJy4vbGliL2Vycm9yLmpzJztcbmltcG9ydCB7bm9ybWFsaXplU3RkaW8sIG5vcm1hbGl6ZVN0ZGlvTm9kZX0gZnJvbSAnLi9saWIvc3RkaW8uanMnO1xuaW1wb3J0IHtzcGF3bmVkS2lsbCwgc3Bhd25lZENhbmNlbCwgc2V0dXBUaW1lb3V0LCB2YWxpZGF0ZVRpbWVvdXQsIHNldEV4aXRIYW5kbGVyfSBmcm9tICcuL2xpYi9raWxsLmpzJztcbmltcG9ydCB7YWRkUGlwZU1ldGhvZHN9IGZyb20gJy4vbGliL3BpcGUuanMnO1xuaW1wb3J0IHtoYW5kbGVJbnB1dCwgZ2V0U3Bhd25lZFJlc3VsdCwgbWFrZUFsbFN0cmVhbSwgaGFuZGxlSW5wdXRTeW5jfSBmcm9tICcuL2xpYi9zdHJlYW0uanMnO1xuaW1wb3J0IHttZXJnZVByb21pc2UsIGdldFNwYXduZWRQcm9taXNlfSBmcm9tICcuL2xpYi9wcm9taXNlLmpzJztcbmltcG9ydCB7am9pbkNvbW1hbmQsIHBhcnNlQ29tbWFuZCwgcGFyc2VUZW1wbGF0ZXMsIGdldEVzY2FwZWRDb21tYW5kfSBmcm9tICcuL2xpYi9jb21tYW5kLmpzJztcbmltcG9ydCB7bG9nQ29tbWFuZCwgdmVyYm9zZURlZmF1bHR9IGZyb20gJy4vbGliL3ZlcmJvc2UuanMnO1xuXG5jb25zdCBERUZBVUxUX01BWF9CVUZGRVIgPSAxMDAwICogMTAwMCAqIDEwMDtcblxuY29uc3QgZ2V0RW52ID0gKHtlbnY6IGVudk9wdGlvbiwgZXh0ZW5kRW52LCBwcmVmZXJMb2NhbCwgbG9jYWxEaXIsIGV4ZWNQYXRofSkgPT4ge1xuXHRjb25zdCBlbnYgPSBleHRlbmRFbnYgPyB7Li4ucHJvY2Vzcy5lbnYsIC4uLmVudk9wdGlvbn0gOiBlbnZPcHRpb247XG5cblx0aWYgKHByZWZlckxvY2FsKSB7XG5cdFx0cmV0dXJuIG5wbVJ1blBhdGhFbnYoe2VudiwgY3dkOiBsb2NhbERpciwgZXhlY1BhdGh9KTtcblx0fVxuXG5cdHJldHVybiBlbnY7XG59O1xuXG5jb25zdCBoYW5kbGVBcmd1bWVudHMgPSAoZmlsZSwgYXJncywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGNvbnN0IHBhcnNlZCA9IGNyb3NzU3Bhd24uX3BhcnNlKGZpbGUsIGFyZ3MsIG9wdGlvbnMpO1xuXHRmaWxlID0gcGFyc2VkLmNvbW1hbmQ7XG5cdGFyZ3MgPSBwYXJzZWQuYXJncztcblx0b3B0aW9ucyA9IHBhcnNlZC5vcHRpb25zO1xuXG5cdG9wdGlvbnMgPSB7XG5cdFx0bWF4QnVmZmVyOiBERUZBVUxUX01BWF9CVUZGRVIsXG5cdFx0YnVmZmVyOiB0cnVlLFxuXHRcdHN0cmlwRmluYWxOZXdsaW5lOiB0cnVlLFxuXHRcdGV4dGVuZEVudjogdHJ1ZSxcblx0XHRwcmVmZXJMb2NhbDogZmFsc2UsXG5cdFx0bG9jYWxEaXI6IG9wdGlvbnMuY3dkIHx8IHByb2Nlc3MuY3dkKCksXG5cdFx0ZXhlY1BhdGg6IHByb2Nlc3MuZXhlY1BhdGgsXG5cdFx0ZW5jb2Rpbmc6ICd1dGY4Jyxcblx0XHRyZWplY3Q6IHRydWUsXG5cdFx0Y2xlYW51cDogdHJ1ZSxcblx0XHRhbGw6IGZhbHNlLFxuXHRcdHdpbmRvd3NIaWRlOiB0cnVlLFxuXHRcdHZlcmJvc2U6IHZlcmJvc2VEZWZhdWx0LFxuXHRcdC4uLm9wdGlvbnMsXG5cdH07XG5cblx0b3B0aW9ucy5lbnYgPSBnZXRFbnYob3B0aW9ucyk7XG5cblx0b3B0aW9ucy5zdGRpbyA9IG5vcm1hbGl6ZVN0ZGlvKG9wdGlvbnMpO1xuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmIHBhdGguYmFzZW5hbWUoZmlsZSwgJy5leGUnKSA9PT0gJ2NtZCcpIHtcblx0XHQvLyAjMTE2XG5cdFx0YXJncy51bnNoaWZ0KCcvcScpO1xuXHR9XG5cblx0cmV0dXJuIHtmaWxlLCBhcmdzLCBvcHRpb25zLCBwYXJzZWR9O1xufTtcblxuY29uc3QgaGFuZGxlT3V0cHV0ID0gKG9wdGlvbnMsIHZhbHVlLCBlcnJvcikgPT4ge1xuXHRpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuXHRcdC8vIFdoZW4gYGV4ZWNhU3luYygpYCBlcnJvcnMsIHdlIG5vcm1hbGl6ZSBpdCB0byAnJyB0byBtaW1pYyBgZXhlY2EoKWBcblx0XHRyZXR1cm4gZXJyb3IgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICcnO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMuc3RyaXBGaW5hbE5ld2xpbmUpIHtcblx0XHRyZXR1cm4gc3RyaXBGaW5hbE5ld2xpbmUodmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIHZhbHVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNhKGZpbGUsIGFyZ3MsIG9wdGlvbnMpIHtcblx0Y29uc3QgcGFyc2VkID0gaGFuZGxlQXJndW1lbnRzKGZpbGUsIGFyZ3MsIG9wdGlvbnMpO1xuXHRjb25zdCBjb21tYW5kID0gam9pbkNvbW1hbmQoZmlsZSwgYXJncyk7XG5cdGNvbnN0IGVzY2FwZWRDb21tYW5kID0gZ2V0RXNjYXBlZENvbW1hbmQoZmlsZSwgYXJncyk7XG5cdGxvZ0NvbW1hbmQoZXNjYXBlZENvbW1hbmQsIHBhcnNlZC5vcHRpb25zKTtcblxuXHR2YWxpZGF0ZVRpbWVvdXQocGFyc2VkLm9wdGlvbnMpO1xuXG5cdGxldCBzcGF3bmVkO1xuXHR0cnkge1xuXHRcdHNwYXduZWQgPSBjaGlsZFByb2Nlc3Muc3Bhd24ocGFyc2VkLmZpbGUsIHBhcnNlZC5hcmdzLCBwYXJzZWQub3B0aW9ucyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gRW5zdXJlIHRoZSByZXR1cm5lZCBlcnJvciBpcyBhbHdheXMgYm90aCBhIHByb21pc2UgYW5kIGEgY2hpbGQgcHJvY2Vzc1xuXHRcdGNvbnN0IGR1bW15U3Bhd25lZCA9IG5ldyBjaGlsZFByb2Nlc3MuQ2hpbGRQcm9jZXNzKCk7XG5cdFx0Y29uc3QgZXJyb3JQcm9taXNlID0gUHJvbWlzZS5yZWplY3QobWFrZUVycm9yKHtcblx0XHRcdGVycm9yLFxuXHRcdFx0c3Rkb3V0OiAnJyxcblx0XHRcdHN0ZGVycjogJycsXG5cdFx0XHRhbGw6ICcnLFxuXHRcdFx0Y29tbWFuZCxcblx0XHRcdGVzY2FwZWRDb21tYW5kLFxuXHRcdFx0cGFyc2VkLFxuXHRcdFx0dGltZWRPdXQ6IGZhbHNlLFxuXHRcdFx0aXNDYW5jZWxlZDogZmFsc2UsXG5cdFx0XHRraWxsZWQ6IGZhbHNlLFxuXHRcdH0pKTtcblx0XHRtZXJnZVByb21pc2UoZHVtbXlTcGF3bmVkLCBlcnJvclByb21pc2UpO1xuXHRcdHJldHVybiBkdW1teVNwYXduZWQ7XG5cdH1cblxuXHRjb25zdCBzcGF3bmVkUHJvbWlzZSA9IGdldFNwYXduZWRQcm9taXNlKHNwYXduZWQpO1xuXHRjb25zdCB0aW1lZFByb21pc2UgPSBzZXR1cFRpbWVvdXQoc3Bhd25lZCwgcGFyc2VkLm9wdGlvbnMsIHNwYXduZWRQcm9taXNlKTtcblx0Y29uc3QgcHJvY2Vzc0RvbmUgPSBzZXRFeGl0SGFuZGxlcihzcGF3bmVkLCBwYXJzZWQub3B0aW9ucywgdGltZWRQcm9taXNlKTtcblxuXHRjb25zdCBjb250ZXh0ID0ge2lzQ2FuY2VsZWQ6IGZhbHNlfTtcblxuXHRzcGF3bmVkLmtpbGwgPSBzcGF3bmVkS2lsbC5iaW5kKG51bGwsIHNwYXduZWQua2lsbC5iaW5kKHNwYXduZWQpKTtcblx0c3Bhd25lZC5jYW5jZWwgPSBzcGF3bmVkQ2FuY2VsLmJpbmQobnVsbCwgc3Bhd25lZCwgY29udGV4dCk7XG5cblx0Y29uc3QgaGFuZGxlUHJvbWlzZSA9IGFzeW5jICgpID0+IHtcblx0XHRjb25zdCBbe2Vycm9yLCBleGl0Q29kZSwgc2lnbmFsLCB0aW1lZE91dH0sIHN0ZG91dFJlc3VsdCwgc3RkZXJyUmVzdWx0LCBhbGxSZXN1bHRdID0gYXdhaXQgZ2V0U3Bhd25lZFJlc3VsdChzcGF3bmVkLCBwYXJzZWQub3B0aW9ucywgcHJvY2Vzc0RvbmUpO1xuXHRcdGNvbnN0IHN0ZG91dCA9IGhhbmRsZU91dHB1dChwYXJzZWQub3B0aW9ucywgc3Rkb3V0UmVzdWx0KTtcblx0XHRjb25zdCBzdGRlcnIgPSBoYW5kbGVPdXRwdXQocGFyc2VkLm9wdGlvbnMsIHN0ZGVyclJlc3VsdCk7XG5cdFx0Y29uc3QgYWxsID0gaGFuZGxlT3V0cHV0KHBhcnNlZC5vcHRpb25zLCBhbGxSZXN1bHQpO1xuXG5cdFx0aWYgKGVycm9yIHx8IGV4aXRDb2RlICE9PSAwIHx8IHNpZ25hbCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgcmV0dXJuZWRFcnJvciA9IG1ha2VFcnJvcih7XG5cdFx0XHRcdGVycm9yLFxuXHRcdFx0XHRleGl0Q29kZSxcblx0XHRcdFx0c2lnbmFsLFxuXHRcdFx0XHRzdGRvdXQsXG5cdFx0XHRcdHN0ZGVycixcblx0XHRcdFx0YWxsLFxuXHRcdFx0XHRjb21tYW5kLFxuXHRcdFx0XHRlc2NhcGVkQ29tbWFuZCxcblx0XHRcdFx0cGFyc2VkLFxuXHRcdFx0XHR0aW1lZE91dCxcblx0XHRcdFx0aXNDYW5jZWxlZDogY29udGV4dC5pc0NhbmNlbGVkIHx8IChwYXJzZWQub3B0aW9ucy5zaWduYWwgPyBwYXJzZWQub3B0aW9ucy5zaWduYWwuYWJvcnRlZCA6IGZhbHNlKSxcblx0XHRcdFx0a2lsbGVkOiBzcGF3bmVkLmtpbGxlZCxcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoIXBhcnNlZC5vcHRpb25zLnJlamVjdCkge1xuXHRcdFx0XHRyZXR1cm4gcmV0dXJuZWRFcnJvcjtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgcmV0dXJuZWRFcnJvcjtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Y29tbWFuZCxcblx0XHRcdGVzY2FwZWRDb21tYW5kLFxuXHRcdFx0ZXhpdENvZGU6IDAsXG5cdFx0XHRzdGRvdXQsXG5cdFx0XHRzdGRlcnIsXG5cdFx0XHRhbGwsXG5cdFx0XHRmYWlsZWQ6IGZhbHNlLFxuXHRcdFx0dGltZWRPdXQ6IGZhbHNlLFxuXHRcdFx0aXNDYW5jZWxlZDogZmFsc2UsXG5cdFx0XHRraWxsZWQ6IGZhbHNlLFxuXHRcdH07XG5cdH07XG5cblx0Y29uc3QgaGFuZGxlUHJvbWlzZU9uY2UgPSBvbmV0aW1lKGhhbmRsZVByb21pc2UpO1xuXG5cdGhhbmRsZUlucHV0KHNwYXduZWQsIHBhcnNlZC5vcHRpb25zKTtcblxuXHRzcGF3bmVkLmFsbCA9IG1ha2VBbGxTdHJlYW0oc3Bhd25lZCwgcGFyc2VkLm9wdGlvbnMpO1xuXG5cdGFkZFBpcGVNZXRob2RzKHNwYXduZWQpO1xuXHRtZXJnZVByb21pc2Uoc3Bhd25lZCwgaGFuZGxlUHJvbWlzZU9uY2UpO1xuXHRyZXR1cm4gc3Bhd25lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNhU3luYyhmaWxlLCBhcmdzLCBvcHRpb25zKSB7XG5cdGNvbnN0IHBhcnNlZCA9IGhhbmRsZUFyZ3VtZW50cyhmaWxlLCBhcmdzLCBvcHRpb25zKTtcblx0Y29uc3QgY29tbWFuZCA9IGpvaW5Db21tYW5kKGZpbGUsIGFyZ3MpO1xuXHRjb25zdCBlc2NhcGVkQ29tbWFuZCA9IGdldEVzY2FwZWRDb21tYW5kKGZpbGUsIGFyZ3MpO1xuXHRsb2dDb21tYW5kKGVzY2FwZWRDb21tYW5kLCBwYXJzZWQub3B0aW9ucyk7XG5cblx0Y29uc3QgaW5wdXQgPSBoYW5kbGVJbnB1dFN5bmMocGFyc2VkLm9wdGlvbnMpO1xuXG5cdGxldCByZXN1bHQ7XG5cdHRyeSB7XG5cdFx0cmVzdWx0ID0gY2hpbGRQcm9jZXNzLnNwYXduU3luYyhwYXJzZWQuZmlsZSwgcGFyc2VkLmFyZ3MsIHsuLi5wYXJzZWQub3B0aW9ucywgaW5wdXR9KTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHR0aHJvdyBtYWtlRXJyb3Ioe1xuXHRcdFx0ZXJyb3IsXG5cdFx0XHRzdGRvdXQ6ICcnLFxuXHRcdFx0c3RkZXJyOiAnJyxcblx0XHRcdGFsbDogJycsXG5cdFx0XHRjb21tYW5kLFxuXHRcdFx0ZXNjYXBlZENvbW1hbmQsXG5cdFx0XHRwYXJzZWQsXG5cdFx0XHR0aW1lZE91dDogZmFsc2UsXG5cdFx0XHRpc0NhbmNlbGVkOiBmYWxzZSxcblx0XHRcdGtpbGxlZDogZmFsc2UsXG5cdFx0fSk7XG5cdH1cblxuXHRjb25zdCBzdGRvdXQgPSBoYW5kbGVPdXRwdXQocGFyc2VkLm9wdGlvbnMsIHJlc3VsdC5zdGRvdXQsIHJlc3VsdC5lcnJvcik7XG5cdGNvbnN0IHN0ZGVyciA9IGhhbmRsZU91dHB1dChwYXJzZWQub3B0aW9ucywgcmVzdWx0LnN0ZGVyciwgcmVzdWx0LmVycm9yKTtcblxuXHRpZiAocmVzdWx0LmVycm9yIHx8IHJlc3VsdC5zdGF0dXMgIT09IDAgfHwgcmVzdWx0LnNpZ25hbCAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IGVycm9yID0gbWFrZUVycm9yKHtcblx0XHRcdHN0ZG91dCxcblx0XHRcdHN0ZGVycixcblx0XHRcdGVycm9yOiByZXN1bHQuZXJyb3IsXG5cdFx0XHRzaWduYWw6IHJlc3VsdC5zaWduYWwsXG5cdFx0XHRleGl0Q29kZTogcmVzdWx0LnN0YXR1cyxcblx0XHRcdGNvbW1hbmQsXG5cdFx0XHRlc2NhcGVkQ29tbWFuZCxcblx0XHRcdHBhcnNlZCxcblx0XHRcdHRpbWVkT3V0OiByZXN1bHQuZXJyb3IgJiYgcmVzdWx0LmVycm9yLmNvZGUgPT09ICdFVElNRURPVVQnLFxuXHRcdFx0aXNDYW5jZWxlZDogZmFsc2UsXG5cdFx0XHRraWxsZWQ6IHJlc3VsdC5zaWduYWwgIT09IG51bGwsXG5cdFx0fSk7XG5cblx0XHRpZiAoIXBhcnNlZC5vcHRpb25zLnJlamVjdCkge1xuXHRcdFx0cmV0dXJuIGVycm9yO1xuXHRcdH1cblxuXHRcdHRocm93IGVycm9yO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRjb21tYW5kLFxuXHRcdGVzY2FwZWRDb21tYW5kLFxuXHRcdGV4aXRDb2RlOiAwLFxuXHRcdHN0ZG91dCxcblx0XHRzdGRlcnIsXG5cdFx0ZmFpbGVkOiBmYWxzZSxcblx0XHR0aW1lZE91dDogZmFsc2UsXG5cdFx0aXNDYW5jZWxlZDogZmFsc2UsXG5cdFx0a2lsbGVkOiBmYWxzZSxcblx0fTtcbn1cblxuY29uc3Qgbm9ybWFsaXplU2NyaXB0U3RkaW4gPSAoe2lucHV0LCBpbnB1dEZpbGUsIHN0ZGlvfSkgPT4gaW5wdXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dEZpbGUgPT09IHVuZGVmaW5lZCAmJiBzdGRpbyA9PT0gdW5kZWZpbmVkXG5cdD8ge3N0ZGluOiAnaW5oZXJpdCd9XG5cdDoge307XG5cbmNvbnN0IG5vcm1hbGl6ZVNjcmlwdE9wdGlvbnMgPSAob3B0aW9ucyA9IHt9KSA9PiAoe1xuXHRwcmVmZXJMb2NhbDogdHJ1ZSxcblx0Li4ubm9ybWFsaXplU2NyaXB0U3RkaW4ob3B0aW9ucyksXG5cdC4uLm9wdGlvbnMsXG59KTtcblxuZnVuY3Rpb24gY3JlYXRlJChvcHRpb25zKSB7XG5cdGZ1bmN0aW9uICQodGVtcGxhdGVzT3JPcHRpb25zLCAuLi5leHByZXNzaW9ucykge1xuXHRcdGlmICghQXJyYXkuaXNBcnJheSh0ZW1wbGF0ZXNPck9wdGlvbnMpKSB7XG5cdFx0XHRyZXR1cm4gY3JlYXRlJCh7Li4ub3B0aW9ucywgLi4udGVtcGxhdGVzT3JPcHRpb25zfSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgW2ZpbGUsIC4uLmFyZ3NdID0gcGFyc2VUZW1wbGF0ZXModGVtcGxhdGVzT3JPcHRpb25zLCBleHByZXNzaW9ucyk7XG5cdFx0cmV0dXJuIGV4ZWNhKGZpbGUsIGFyZ3MsIG5vcm1hbGl6ZVNjcmlwdE9wdGlvbnMob3B0aW9ucykpO1xuXHR9XG5cblx0JC5zeW5jID0gKHRlbXBsYXRlcywgLi4uZXhwcmVzc2lvbnMpID0+IHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkodGVtcGxhdGVzKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSAkKG9wdGlvbnMpLnN5bmNgY29tbWFuZGAgaW5zdGVhZCBvZiAkLnN5bmMob3B0aW9ucylgY29tbWFuZGAuJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgW2ZpbGUsIC4uLmFyZ3NdID0gcGFyc2VUZW1wbGF0ZXModGVtcGxhdGVzLCBleHByZXNzaW9ucyk7XG5cdFx0cmV0dXJuIGV4ZWNhU3luYyhmaWxlLCBhcmdzLCBub3JtYWxpemVTY3JpcHRPcHRpb25zKG9wdGlvbnMpKTtcblx0fTtcblxuXHRyZXR1cm4gJDtcbn1cblxuZXhwb3J0IGNvbnN0ICQgPSBjcmVhdGUkKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjYUNvbW1hbmQoY29tbWFuZCwgb3B0aW9ucykge1xuXHRjb25zdCBbZmlsZSwgLi4uYXJnc10gPSBwYXJzZUNvbW1hbmQoY29tbWFuZCk7XG5cdHJldHVybiBleGVjYShmaWxlLCBhcmdzLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNhQ29tbWFuZFN5bmMoY29tbWFuZCwgb3B0aW9ucykge1xuXHRjb25zdCBbZmlsZSwgLi4uYXJnc10gPSBwYXJzZUNvbW1hbmQoY29tbWFuZCk7XG5cdHJldHVybiBleGVjYVN5bmMoZmlsZSwgYXJncywgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjYU5vZGUoc2NyaXB0UGF0aCwgYXJncywgb3B0aW9ucyA9IHt9KSB7XG5cdGlmIChhcmdzICYmICFBcnJheS5pc0FycmF5KGFyZ3MpICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0Jykge1xuXHRcdG9wdGlvbnMgPSBhcmdzO1xuXHRcdGFyZ3MgPSBbXTtcblx0fVxuXG5cdGNvbnN0IHN0ZGlvID0gbm9ybWFsaXplU3RkaW9Ob2RlKG9wdGlvbnMpO1xuXHRjb25zdCBkZWZhdWx0RXhlY0FyZ3YgPSBwcm9jZXNzLmV4ZWNBcmd2LmZpbHRlcihhcmcgPT4gIWFyZy5zdGFydHNXaXRoKCctLWluc3BlY3QnKSk7XG5cblx0Y29uc3Qge1xuXHRcdG5vZGVQYXRoID0gcHJvY2Vzcy5leGVjUGF0aCxcblx0XHRub2RlT3B0aW9ucyA9IGRlZmF1bHRFeGVjQXJndixcblx0fSA9IG9wdGlvbnM7XG5cblx0cmV0dXJuIGV4ZWNhKFxuXHRcdG5vZGVQYXRoLFxuXHRcdFtcblx0XHRcdC4uLm5vZGVPcHRpb25zLFxuXHRcdFx0c2NyaXB0UGF0aCxcblx0XHRcdC4uLihBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFtdKSxcblx0XHRdLFxuXHRcdHtcblx0XHRcdC4uLm9wdGlvbnMsXG5cdFx0XHRzdGRpbjogdW5kZWZpbmVkLFxuXHRcdFx0c3Rkb3V0OiB1bmRlZmluZWQsXG5cdFx0XHRzdGRlcnI6IHVuZGVmaW5lZCxcblx0XHRcdHN0ZGlvLFxuXHRcdFx0c2hlbGw6IGZhbHNlLFxuXHRcdH0sXG5cdCk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RyaXBGaW5hbE5ld2xpbmUoaW5wdXQpIHtcblx0Y29uc3QgTEYgPSB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gJ1xcbicgOiAnXFxuJy5jaGFyQ29kZUF0KCk7XG5cdGNvbnN0IENSID0gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyA/ICdcXHInIDogJ1xccicuY2hhckNvZGVBdCgpO1xuXG5cdGlmIChpbnB1dFtpbnB1dC5sZW5ndGggLSAxXSA9PT0gTEYpIHtcblx0XHRpbnB1dCA9IGlucHV0LnNsaWNlKDAsIC0xKTtcblx0fVxuXG5cdGlmIChpbnB1dFtpbnB1dC5sZW5ndGggLSAxXSA9PT0gQ1IpIHtcblx0XHRpbnB1dCA9IGlucHV0LnNsaWNlKDAsIC0xKTtcblx0fVxuXG5cdHJldHVybiBpbnB1dDtcbn1cbiIsICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB1cmwgZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHBhdGhLZXkgZnJvbSAncGF0aC1rZXknO1xuXG5leHBvcnQgZnVuY3Rpb24gbnBtUnVuUGF0aChvcHRpb25zID0ge30pIHtcblx0Y29uc3Qge1xuXHRcdGN3ZCA9IHByb2Nlc3MuY3dkKCksXG5cdFx0cGF0aDogcGF0aF8gPSBwcm9jZXNzLmVudltwYXRoS2V5KCldLFxuXHRcdGV4ZWNQYXRoID0gcHJvY2Vzcy5leGVjUGF0aCxcblx0fSA9IG9wdGlvbnM7XG5cblx0bGV0IHByZXZpb3VzO1xuXHRjb25zdCBjd2RTdHJpbmcgPSBjd2QgaW5zdGFuY2VvZiBVUkwgPyB1cmwuZmlsZVVSTFRvUGF0aChjd2QpIDogY3dkO1xuXHRsZXQgY3dkUGF0aCA9IHBhdGgucmVzb2x2ZShjd2RTdHJpbmcpO1xuXHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHR3aGlsZSAocHJldmlvdXMgIT09IGN3ZFBhdGgpIHtcblx0XHRyZXN1bHQucHVzaChwYXRoLmpvaW4oY3dkUGF0aCwgJ25vZGVfbW9kdWxlcy8uYmluJykpO1xuXHRcdHByZXZpb3VzID0gY3dkUGF0aDtcblx0XHRjd2RQYXRoID0gcGF0aC5yZXNvbHZlKGN3ZFBhdGgsICcuLicpO1xuXHR9XG5cblx0Ly8gRW5zdXJlIHRoZSBydW5uaW5nIGBub2RlYCBiaW5hcnkgaXMgdXNlZC5cblx0cmVzdWx0LnB1c2gocGF0aC5yZXNvbHZlKGN3ZFN0cmluZywgZXhlY1BhdGgsICcuLicpKTtcblxuXHRyZXR1cm4gWy4uLnJlc3VsdCwgcGF0aF9dLmpvaW4ocGF0aC5kZWxpbWl0ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbnBtUnVuUGF0aEVudih7ZW52ID0gcHJvY2Vzcy5lbnYsIC4uLm9wdGlvbnN9ID0ge30pIHtcblx0ZW52ID0gey4uLmVudn07XG5cblx0Y29uc3QgcGF0aCA9IHBhdGhLZXkoe2Vudn0pO1xuXHRvcHRpb25zLnBhdGggPSBlbnZbcGF0aF07XG5cdGVudltwYXRoXSA9IG5wbVJ1blBhdGgob3B0aW9ucyk7XG5cblx0cmV0dXJuIGVudjtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXRoS2V5KG9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCB7XG5cdFx0ZW52ID0gcHJvY2Vzcy5lbnYsXG5cdFx0cGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtXG5cdH0gPSBvcHRpb25zO1xuXG5cdGlmIChwbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuXHRcdHJldHVybiAnUEFUSCc7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0LmtleXMoZW52KS5yZXZlcnNlKCkuZmluZChrZXkgPT4ga2V5LnRvVXBwZXJDYXNlKCkgPT09ICdQQVRIJykgfHwgJ1BhdGgnO1xufVxuIiwgImNvbnN0IGNvcHlQcm9wZXJ0eSA9ICh0bywgZnJvbSwgcHJvcGVydHksIGlnbm9yZU5vbkNvbmZpZ3VyYWJsZSkgPT4ge1xuXHQvLyBgRnVuY3Rpb24jbGVuZ3RoYCBzaG91bGQgcmVmbGVjdCB0aGUgcGFyYW1ldGVycyBvZiBgdG9gIG5vdCBgZnJvbWAgc2luY2Ugd2Uga2VlcCBpdHMgYm9keS5cblx0Ly8gYEZ1bmN0aW9uI3Byb3RvdHlwZWAgaXMgbm9uLXdyaXRhYmxlIGFuZCBub24tY29uZmlndXJhYmxlIHNvIGNhbiBuZXZlciBiZSBtb2RpZmllZC5cblx0aWYgKHByb3BlcnR5ID09PSAnbGVuZ3RoJyB8fCBwcm9wZXJ0eSA9PT0gJ3Byb3RvdHlwZScpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBgRnVuY3Rpb24jYXJndW1lbnRzYCBhbmQgYEZ1bmN0aW9uI2NhbGxlcmAgc2hvdWxkIG5vdCBiZSBjb3BpZWQuIFRoZXkgd2VyZSByZXBvcnRlZCB0byBiZSBwcmVzZW50IGluIGBSZWZsZWN0Lm93bktleXNgIGZvciBzb21lIGRldmljZXMgaW4gUmVhY3QgTmF0aXZlICgjNDEpLCBzbyB3ZSBleHBsaWNpdGx5IGlnbm9yZSB0aGVtIGhlcmUuXG5cdGlmIChwcm9wZXJ0eSA9PT0gJ2FyZ3VtZW50cycgfHwgcHJvcGVydHkgPT09ICdjYWxsZXInKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgdG9EZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0bywgcHJvcGVydHkpO1xuXHRjb25zdCBmcm9tRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZnJvbSwgcHJvcGVydHkpO1xuXG5cdGlmICghY2FuQ29weVByb3BlcnR5KHRvRGVzY3JpcHRvciwgZnJvbURlc2NyaXB0b3IpICYmIGlnbm9yZU5vbkNvbmZpZ3VyYWJsZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0bywgcHJvcGVydHksIGZyb21EZXNjcmlwdG9yKTtcbn07XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHkoKWAgdGhyb3dzIGlmIHRoZSBwcm9wZXJ0eSBleGlzdHMsIGlzIG5vdCBjb25maWd1cmFibGUgYW5kIGVpdGhlcjpcbi8vIC0gb25lIGl0cyBkZXNjcmlwdG9ycyBpcyBjaGFuZ2VkXG4vLyAtIGl0IGlzIG5vbi13cml0YWJsZSBhbmQgaXRzIHZhbHVlIGlzIGNoYW5nZWRcbmNvbnN0IGNhbkNvcHlQcm9wZXJ0eSA9IGZ1bmN0aW9uICh0b0Rlc2NyaXB0b3IsIGZyb21EZXNjcmlwdG9yKSB7XG5cdHJldHVybiB0b0Rlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCB8fCB0b0Rlc2NyaXB0b3IuY29uZmlndXJhYmxlIHx8IChcblx0XHR0b0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZyb21EZXNjcmlwdG9yLndyaXRhYmxlICYmXG5cdFx0dG9EZXNjcmlwdG9yLmVudW1lcmFibGUgPT09IGZyb21EZXNjcmlwdG9yLmVudW1lcmFibGUgJiZcblx0XHR0b0Rlc2NyaXB0b3IuY29uZmlndXJhYmxlID09PSBmcm9tRGVzY3JpcHRvci5jb25maWd1cmFibGUgJiZcblx0XHQodG9EZXNjcmlwdG9yLndyaXRhYmxlIHx8IHRvRGVzY3JpcHRvci52YWx1ZSA9PT0gZnJvbURlc2NyaXB0b3IudmFsdWUpXG5cdCk7XG59O1xuXG5jb25zdCBjaGFuZ2VQcm90b3R5cGUgPSAodG8sIGZyb20pID0+IHtcblx0Y29uc3QgZnJvbVByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihmcm9tKTtcblx0aWYgKGZyb21Qcm90b3R5cGUgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0bykpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YodG8sIGZyb21Qcm90b3R5cGUpO1xufTtcblxuY29uc3Qgd3JhcHBlZFRvU3RyaW5nID0gKHdpdGhOYW1lLCBmcm9tQm9keSkgPT4gYC8qIFdyYXBwZWQgJHt3aXRoTmFtZX0qL1xcbiR7ZnJvbUJvZHl9YDtcblxuY29uc3QgdG9TdHJpbmdEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihGdW5jdGlvbi5wcm90b3R5cGUsICd0b1N0cmluZycpO1xuY29uc3QgdG9TdHJpbmdOYW1lID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsICduYW1lJyk7XG5cbi8vIFdlIGNhbGwgYGZyb20udG9TdHJpbmcoKWAgZWFybHkgKG5vdCBsYXppbHkpIHRvIGVuc3VyZSBgZnJvbWAgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuLy8gV2UgdXNlIGBiaW5kKClgIGluc3RlYWQgb2YgYSBjbG9zdXJlIGZvciB0aGUgc2FtZSByZWFzb24uXG4vLyBDYWxsaW5nIGBmcm9tLnRvU3RyaW5nKClgIGVhcmx5IGFsc28gYWxsb3dzIGNhY2hpbmcgaXQgaW4gY2FzZSBgdG8udG9TdHJpbmcoKWAgaXMgY2FsbGVkIHNldmVyYWwgdGltZXMuXG5jb25zdCBjaGFuZ2VUb1N0cmluZyA9ICh0bywgZnJvbSwgbmFtZSkgPT4ge1xuXHRjb25zdCB3aXRoTmFtZSA9IG5hbWUgPT09ICcnID8gJycgOiBgd2l0aCAke25hbWUudHJpbSgpfSgpIGA7XG5cdGNvbnN0IG5ld1RvU3RyaW5nID0gd3JhcHBlZFRvU3RyaW5nLmJpbmQobnVsbCwgd2l0aE5hbWUsIGZyb20udG9TdHJpbmcoKSk7XG5cdC8vIEVuc3VyZSBgdG8udG9TdHJpbmcudG9TdHJpbmdgIGlzIG5vbi1lbnVtZXJhYmxlIGFuZCBoYXMgdGhlIHNhbWUgYHNhbWVgXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdUb1N0cmluZywgJ25hbWUnLCB0b1N0cmluZ05hbWUpO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkodG8sICd0b1N0cmluZycsIHsuLi50b1N0cmluZ0Rlc2NyaXB0b3IsIHZhbHVlOiBuZXdUb1N0cmluZ30pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWltaWNGdW5jdGlvbih0bywgZnJvbSwge2lnbm9yZU5vbkNvbmZpZ3VyYWJsZSA9IGZhbHNlfSA9IHt9KSB7XG5cdGNvbnN0IHtuYW1lfSA9IHRvO1xuXG5cdGZvciAoY29uc3QgcHJvcGVydHkgb2YgUmVmbGVjdC5vd25LZXlzKGZyb20pKSB7XG5cdFx0Y29weVByb3BlcnR5KHRvLCBmcm9tLCBwcm9wZXJ0eSwgaWdub3JlTm9uQ29uZmlndXJhYmxlKTtcblx0fVxuXG5cdGNoYW5nZVByb3RvdHlwZSh0bywgZnJvbSk7XG5cdGNoYW5nZVRvU3RyaW5nKHRvLCBmcm9tLCBuYW1lKTtcblxuXHRyZXR1cm4gdG87XG59XG4iLCAiaW1wb3J0IG1pbWljRnVuY3Rpb24gZnJvbSAnbWltaWMtZm4nO1xuXG5jb25zdCBjYWxsZWRGdW5jdGlvbnMgPSBuZXcgV2Vha01hcCgpO1xuXG5jb25zdCBvbmV0aW1lID0gKGZ1bmN0aW9uXywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmICh0eXBlb2YgZnVuY3Rpb25fICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBmdW5jdGlvbicpO1xuXHR9XG5cblx0bGV0IHJldHVyblZhbHVlO1xuXHRsZXQgY2FsbENvdW50ID0gMDtcblx0Y29uc3QgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25fLmRpc3BsYXlOYW1lIHx8IGZ1bmN0aW9uXy5uYW1lIHx8ICc8YW5vbnltb3VzPic7XG5cblx0Y29uc3Qgb25ldGltZSA9IGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0Y2FsbGVkRnVuY3Rpb25zLnNldChvbmV0aW1lLCArK2NhbGxDb3VudCk7XG5cblx0XHRpZiAoY2FsbENvdW50ID09PSAxKSB7XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IGZ1bmN0aW9uXy5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0XHRcdGZ1bmN0aW9uXyA9IG51bGw7XG5cdFx0fSBlbHNlIGlmIChvcHRpb25zLnRocm93ID09PSB0cnVlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIFxcYCR7ZnVuY3Rpb25OYW1lfVxcYCBjYW4gb25seSBiZSBjYWxsZWQgb25jZWApO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXR1cm5WYWx1ZTtcblx0fTtcblxuXHRtaW1pY0Z1bmN0aW9uKG9uZXRpbWUsIGZ1bmN0aW9uXyk7XG5cdGNhbGxlZEZ1bmN0aW9ucy5zZXQob25ldGltZSwgY2FsbENvdW50KTtcblxuXHRyZXR1cm4gb25ldGltZTtcbn07XG5cbm9uZXRpbWUuY2FsbENvdW50ID0gZnVuY3Rpb25fID0+IHtcblx0aWYgKCFjYWxsZWRGdW5jdGlvbnMuaGFzKGZ1bmN0aW9uXykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFRoZSBnaXZlbiBmdW5jdGlvbiBcXGAke2Z1bmN0aW9uXy5uYW1lfVxcYCBpcyBub3Qgd3JhcHBlZCBieSB0aGUgXFxgb25ldGltZVxcYCBwYWNrYWdlYCk7XG5cdH1cblxuXHRyZXR1cm4gY2FsbGVkRnVuY3Rpb25zLmdldChmdW5jdGlvbl8pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb25ldGltZTtcbiIsICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHtzaWduYWxzQnlOYW1lfSBmcm9tICdodW1hbi1zaWduYWxzJztcblxuY29uc3QgZ2V0RXJyb3JQcmVmaXggPSAoe3RpbWVkT3V0LCB0aW1lb3V0LCBlcnJvckNvZGUsIHNpZ25hbCwgc2lnbmFsRGVzY3JpcHRpb24sIGV4aXRDb2RlLCBpc0NhbmNlbGVkfSkgPT4ge1xuXHRpZiAodGltZWRPdXQpIHtcblx0XHRyZXR1cm4gYHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXR9IG1pbGxpc2Vjb25kc2A7XG5cdH1cblxuXHRpZiAoaXNDYW5jZWxlZCkge1xuXHRcdHJldHVybiAnd2FzIGNhbmNlbGVkJztcblx0fVxuXG5cdGlmIChlcnJvckNvZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBgZmFpbGVkIHdpdGggJHtlcnJvckNvZGV9YDtcblx0fVxuXG5cdGlmIChzaWduYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBgd2FzIGtpbGxlZCB3aXRoICR7c2lnbmFsfSAoJHtzaWduYWxEZXNjcmlwdGlvbn0pYDtcblx0fVxuXG5cdGlmIChleGl0Q29kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHtleGl0Q29kZX1gO1xuXHR9XG5cblx0cmV0dXJuICdmYWlsZWQnO1xufTtcblxuZXhwb3J0IGNvbnN0IG1ha2VFcnJvciA9ICh7XG5cdHN0ZG91dCxcblx0c3RkZXJyLFxuXHRhbGwsXG5cdGVycm9yLFxuXHRzaWduYWwsXG5cdGV4aXRDb2RlLFxuXHRjb21tYW5kLFxuXHRlc2NhcGVkQ29tbWFuZCxcblx0dGltZWRPdXQsXG5cdGlzQ2FuY2VsZWQsXG5cdGtpbGxlZCxcblx0cGFyc2VkOiB7b3B0aW9uczoge3RpbWVvdXQsIGN3ZCA9IHByb2Nlc3MuY3dkKCl9fSxcbn0pID0+IHtcblx0Ly8gYHNpZ25hbGAgYW5kIGBleGl0Q29kZWAgZW1pdHRlZCBvbiBgc3Bhd25lZC5vbignZXhpdCcpYCBldmVudCBjYW4gYmUgYG51bGxgLlxuXHQvLyBXZSBub3JtYWxpemUgdGhlbSB0byBgdW5kZWZpbmVkYFxuXHRleGl0Q29kZSA9IGV4aXRDb2RlID09PSBudWxsID8gdW5kZWZpbmVkIDogZXhpdENvZGU7XG5cdHNpZ25hbCA9IHNpZ25hbCA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHNpZ25hbDtcblx0Y29uc3Qgc2lnbmFsRGVzY3JpcHRpb24gPSBzaWduYWwgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNpZ25hbHNCeU5hbWVbc2lnbmFsXS5kZXNjcmlwdGlvbjtcblxuXHRjb25zdCBlcnJvckNvZGUgPSBlcnJvciAmJiBlcnJvci5jb2RlO1xuXG5cdGNvbnN0IHByZWZpeCA9IGdldEVycm9yUHJlZml4KHt0aW1lZE91dCwgdGltZW91dCwgZXJyb3JDb2RlLCBzaWduYWwsIHNpZ25hbERlc2NyaXB0aW9uLCBleGl0Q29kZSwgaXNDYW5jZWxlZH0pO1xuXHRjb25zdCBleGVjYU1lc3NhZ2UgPSBgQ29tbWFuZCAke3ByZWZpeH06ICR7Y29tbWFuZH1gO1xuXHRjb25zdCBpc0Vycm9yID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVycm9yKSA9PT0gJ1tvYmplY3QgRXJyb3JdJztcblx0Y29uc3Qgc2hvcnRNZXNzYWdlID0gaXNFcnJvciA/IGAke2V4ZWNhTWVzc2FnZX1cXG4ke2Vycm9yLm1lc3NhZ2V9YCA6IGV4ZWNhTWVzc2FnZTtcblx0Y29uc3QgbWVzc2FnZSA9IFtzaG9ydE1lc3NhZ2UsIHN0ZGVyciwgc3Rkb3V0XS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG5cblx0aWYgKGlzRXJyb3IpIHtcblx0XHRlcnJvci5vcmlnaW5hbE1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuXHRcdGVycm9yLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXHR9IGVsc2Uge1xuXHRcdGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuXHR9XG5cblx0ZXJyb3Iuc2hvcnRNZXNzYWdlID0gc2hvcnRNZXNzYWdlO1xuXHRlcnJvci5jb21tYW5kID0gY29tbWFuZDtcblx0ZXJyb3IuZXNjYXBlZENvbW1hbmQgPSBlc2NhcGVkQ29tbWFuZDtcblx0ZXJyb3IuZXhpdENvZGUgPSBleGl0Q29kZTtcblx0ZXJyb3Iuc2lnbmFsID0gc2lnbmFsO1xuXHRlcnJvci5zaWduYWxEZXNjcmlwdGlvbiA9IHNpZ25hbERlc2NyaXB0aW9uO1xuXHRlcnJvci5zdGRvdXQgPSBzdGRvdXQ7XG5cdGVycm9yLnN0ZGVyciA9IHN0ZGVycjtcblx0ZXJyb3IuY3dkID0gY3dkO1xuXG5cdGlmIChhbGwgIT09IHVuZGVmaW5lZCkge1xuXHRcdGVycm9yLmFsbCA9IGFsbDtcblx0fVxuXG5cdGlmICgnYnVmZmVyZWREYXRhJyBpbiBlcnJvcikge1xuXHRcdGRlbGV0ZSBlcnJvci5idWZmZXJlZERhdGE7XG5cdH1cblxuXHRlcnJvci5mYWlsZWQgPSB0cnVlO1xuXHRlcnJvci50aW1lZE91dCA9IEJvb2xlYW4odGltZWRPdXQpO1xuXHRlcnJvci5pc0NhbmNlbGVkID0gaXNDYW5jZWxlZDtcblx0ZXJyb3Iua2lsbGVkID0ga2lsbGVkICYmICF0aW1lZE91dDtcblxuXHRyZXR1cm4gZXJyb3I7XG59O1xuIiwgImltcG9ydHtjb25zdGFudHN9ZnJvbVwibm9kZTpvc1wiO1xuXG5pbXBvcnR7U0lHUlRNQVh9ZnJvbVwiLi9yZWFsdGltZS5qc1wiO1xuaW1wb3J0e2dldFNpZ25hbHN9ZnJvbVwiLi9zaWduYWxzLmpzXCI7XG5cblxuXG5jb25zdCBnZXRTaWduYWxzQnlOYW1lPSgpPT57XG5jb25zdCBzaWduYWxzPWdldFNpZ25hbHMoKTtcbnJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoc2lnbmFscy5tYXAoZ2V0U2lnbmFsQnlOYW1lKSk7XG59O1xuXG5jb25zdCBnZXRTaWduYWxCeU5hbWU9KHtcbm5hbWUsXG5udW1iZXIsXG5kZXNjcmlwdGlvbixcbnN1cHBvcnRlZCxcbmFjdGlvbixcbmZvcmNlZCxcbnN0YW5kYXJkXG59KT0+W25hbWUse25hbWUsbnVtYmVyLGRlc2NyaXB0aW9uLHN1cHBvcnRlZCxhY3Rpb24sZm9yY2VkLHN0YW5kYXJkfV07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxzQnlOYW1lPWdldFNpZ25hbHNCeU5hbWUoKTtcblxuXG5cblxuY29uc3QgZ2V0U2lnbmFsc0J5TnVtYmVyPSgpPT57XG5jb25zdCBzaWduYWxzPWdldFNpZ25hbHMoKTtcbmNvbnN0IGxlbmd0aD1TSUdSVE1BWCsxO1xuY29uc3Qgc2lnbmFsc0E9QXJyYXkuZnJvbSh7bGVuZ3RofSwodmFsdWUsbnVtYmVyKT0+XG5nZXRTaWduYWxCeU51bWJlcihudW1iZXIsc2lnbmFscykpO1xuXG5yZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwuLi5zaWduYWxzQSk7XG59O1xuXG5jb25zdCBnZXRTaWduYWxCeU51bWJlcj0obnVtYmVyLHNpZ25hbHMpPT57XG5jb25zdCBzaWduYWw9ZmluZFNpZ25hbEJ5TnVtYmVyKG51bWJlcixzaWduYWxzKTtcblxuaWYoc2lnbmFsPT09dW5kZWZpbmVkKXtcbnJldHVybnt9O1xufVxuXG5jb25zdHtuYW1lLGRlc2NyaXB0aW9uLHN1cHBvcnRlZCxhY3Rpb24sZm9yY2VkLHN0YW5kYXJkfT1zaWduYWw7XG5yZXR1cm57XG5bbnVtYmVyXTp7XG5uYW1lLFxubnVtYmVyLFxuZGVzY3JpcHRpb24sXG5zdXBwb3J0ZWQsXG5hY3Rpb24sXG5mb3JjZWQsXG5zdGFuZGFyZFxufVxufTtcbn07XG5cblxuXG5jb25zdCBmaW5kU2lnbmFsQnlOdW1iZXI9KG51bWJlcixzaWduYWxzKT0+e1xuY29uc3Qgc2lnbmFsPXNpZ25hbHMuZmluZCgoe25hbWV9KT0+Y29uc3RhbnRzLnNpZ25hbHNbbmFtZV09PT1udW1iZXIpO1xuXG5pZihzaWduYWwhPT11bmRlZmluZWQpe1xucmV0dXJuIHNpZ25hbDtcbn1cblxucmV0dXJuIHNpZ25hbHMuZmluZCgoc2lnbmFsQSk9PnNpZ25hbEEubnVtYmVyPT09bnVtYmVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxzQnlOdW1iZXI9Z2V0U2lnbmFsc0J5TnVtYmVyKCk7IiwgIlxuZXhwb3J0IGNvbnN0IGdldFJlYWx0aW1lU2lnbmFscz0oKT0+e1xuY29uc3QgbGVuZ3RoPVNJR1JUTUFYLVNJR1JUTUlOKzE7XG5yZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RofSxnZXRSZWFsdGltZVNpZ25hbCk7XG59O1xuXG5jb25zdCBnZXRSZWFsdGltZVNpZ25hbD0odmFsdWUsaW5kZXgpPT4oe1xubmFtZTpgU0lHUlQke2luZGV4KzF9YCxcbm51bWJlcjpTSUdSVE1JTitpbmRleCxcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJBcHBsaWNhdGlvbi1zcGVjaWZpYyBzaWduYWwgKHJlYWx0aW1lKVwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwiXG59KTtcblxuY29uc3QgU0lHUlRNSU49MzQ7XG5leHBvcnQgY29uc3QgU0lHUlRNQVg9NjQ7IiwgImltcG9ydHtjb25zdGFudHN9ZnJvbVwibm9kZTpvc1wiO1xuXG5pbXBvcnR7U0lHTkFMU31mcm9tXCIuL2NvcmUuanNcIjtcbmltcG9ydHtnZXRSZWFsdGltZVNpZ25hbHN9ZnJvbVwiLi9yZWFsdGltZS5qc1wiO1xuXG5cblxuZXhwb3J0IGNvbnN0IGdldFNpZ25hbHM9KCk9PntcbmNvbnN0IHJlYWx0aW1lU2lnbmFscz1nZXRSZWFsdGltZVNpZ25hbHMoKTtcbmNvbnN0IHNpZ25hbHM9Wy4uLlNJR05BTFMsLi4ucmVhbHRpbWVTaWduYWxzXS5tYXAobm9ybWFsaXplU2lnbmFsKTtcbnJldHVybiBzaWduYWxzO1xufTtcblxuXG5cblxuXG5cblxuY29uc3Qgbm9ybWFsaXplU2lnbmFsPSh7XG5uYW1lLFxubnVtYmVyOmRlZmF1bHROdW1iZXIsXG5kZXNjcmlwdGlvbixcbmFjdGlvbixcbmZvcmNlZD1mYWxzZSxcbnN0YW5kYXJkXG59KT0+e1xuY29uc3R7XG5zaWduYWxzOntbbmFtZV06Y29uc3RhbnRTaWduYWx9XG59PWNvbnN0YW50cztcbmNvbnN0IHN1cHBvcnRlZD1jb25zdGFudFNpZ25hbCE9PXVuZGVmaW5lZDtcbmNvbnN0IG51bWJlcj1zdXBwb3J0ZWQ/Y29uc3RhbnRTaWduYWw6ZGVmYXVsdE51bWJlcjtcbnJldHVybntuYW1lLG51bWJlcixkZXNjcmlwdGlvbixzdXBwb3J0ZWQsYWN0aW9uLGZvcmNlZCxzdGFuZGFyZH07XG59OyIsICJcblxuZXhwb3J0IGNvbnN0IFNJR05BTFM9W1xue1xubmFtZTpcIlNJR0hVUFwiLFxubnVtYmVyOjEsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiVGVybWluYWwgY2xvc2VkXCIsXG5zdGFuZGFyZDpcInBvc2l4XCJcbn0sXG57XG5uYW1lOlwiU0lHSU5UXCIsXG5udW1iZXI6MixcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJVc2VyIGludGVycnVwdGlvbiB3aXRoIENUUkwtQ1wiLFxuc3RhbmRhcmQ6XCJhbnNpXCJcbn0sXG57XG5uYW1lOlwiU0lHUVVJVFwiLFxubnVtYmVyOjMsXG5hY3Rpb246XCJjb3JlXCIsXG5kZXNjcmlwdGlvbjpcIlVzZXIgaW50ZXJydXB0aW9uIHdpdGggQ1RSTC1cXFxcXCIsXG5zdGFuZGFyZDpcInBvc2l4XCJcbn0sXG57XG5uYW1lOlwiU0lHSUxMXCIsXG5udW1iZXI6NCxcbmFjdGlvbjpcImNvcmVcIixcbmRlc2NyaXB0aW9uOlwiSW52YWxpZCBtYWNoaW5lIGluc3RydWN0aW9uXCIsXG5zdGFuZGFyZDpcImFuc2lcIlxufSxcbntcbm5hbWU6XCJTSUdUUkFQXCIsXG5udW1iZXI6NSxcbmFjdGlvbjpcImNvcmVcIixcbmRlc2NyaXB0aW9uOlwiRGVidWdnZXIgYnJlYWtwb2ludFwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwiXG59LFxue1xubmFtZTpcIlNJR0FCUlRcIixcbm51bWJlcjo2LFxuYWN0aW9uOlwiY29yZVwiLFxuZGVzY3JpcHRpb246XCJBYm9ydGVkXCIsXG5zdGFuZGFyZDpcImFuc2lcIlxufSxcbntcbm5hbWU6XCJTSUdJT1RcIixcbm51bWJlcjo2LFxuYWN0aW9uOlwiY29yZVwiLFxuZGVzY3JpcHRpb246XCJBYm9ydGVkXCIsXG5zdGFuZGFyZDpcImJzZFwiXG59LFxue1xubmFtZTpcIlNJR0JVU1wiLFxubnVtYmVyOjcsXG5hY3Rpb246XCJjb3JlXCIsXG5kZXNjcmlwdGlvbjpcblwiQnVzIGVycm9yIGR1ZSB0byBtaXNhbGlnbmVkLCBub24tZXhpc3RpbmcgYWRkcmVzcyBvciBwYWdpbmcgZXJyb3JcIixcbnN0YW5kYXJkOlwiYnNkXCJcbn0sXG57XG5uYW1lOlwiU0lHRU1UXCIsXG5udW1iZXI6NyxcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJDb21tYW5kIHNob3VsZCBiZSBlbXVsYXRlZCBidXQgaXMgbm90IGltcGxlbWVudGVkXCIsXG5zdGFuZGFyZDpcIm90aGVyXCJcbn0sXG57XG5uYW1lOlwiU0lHRlBFXCIsXG5udW1iZXI6OCxcbmFjdGlvbjpcImNvcmVcIixcbmRlc2NyaXB0aW9uOlwiRmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYyBlcnJvclwiLFxuc3RhbmRhcmQ6XCJhbnNpXCJcbn0sXG57XG5uYW1lOlwiU0lHS0lMTFwiLFxubnVtYmVyOjksXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiRm9yY2VkIHRlcm1pbmF0aW9uXCIsXG5zdGFuZGFyZDpcInBvc2l4XCIsXG5mb3JjZWQ6dHJ1ZVxufSxcbntcbm5hbWU6XCJTSUdVU1IxXCIsXG5udW1iZXI6MTAsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiQXBwbGljYXRpb24tc3BlY2lmaWMgc2lnbmFsXCIsXG5zdGFuZGFyZDpcInBvc2l4XCJcbn0sXG57XG5uYW1lOlwiU0lHU0VHVlwiLFxubnVtYmVyOjExLFxuYWN0aW9uOlwiY29yZVwiLFxuZGVzY3JpcHRpb246XCJTZWdtZW50YXRpb24gZmF1bHRcIixcbnN0YW5kYXJkOlwiYW5zaVwiXG59LFxue1xubmFtZTpcIlNJR1VTUjJcIixcbm51bWJlcjoxMixcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJBcHBsaWNhdGlvbi1zcGVjaWZpYyBzaWduYWxcIixcbnN0YW5kYXJkOlwicG9zaXhcIlxufSxcbntcbm5hbWU6XCJTSUdQSVBFXCIsXG5udW1iZXI6MTMsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiQnJva2VuIHBpcGUgb3Igc29ja2V0XCIsXG5zdGFuZGFyZDpcInBvc2l4XCJcbn0sXG57XG5uYW1lOlwiU0lHQUxSTVwiLFxubnVtYmVyOjE0LFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIlRpbWVvdXQgb3IgdGltZXJcIixcbnN0YW5kYXJkOlwicG9zaXhcIlxufSxcbntcbm5hbWU6XCJTSUdURVJNXCIsXG5udW1iZXI6MTUsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiVGVybWluYXRpb25cIixcbnN0YW5kYXJkOlwiYW5zaVwiXG59LFxue1xubmFtZTpcIlNJR1NUS0ZMVFwiLFxubnVtYmVyOjE2LFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIlN0YWNrIGlzIGVtcHR5IG9yIG92ZXJmbG93ZWRcIixcbnN0YW5kYXJkOlwib3RoZXJcIlxufSxcbntcbm5hbWU6XCJTSUdDSExEXCIsXG5udW1iZXI6MTcsXG5hY3Rpb246XCJpZ25vcmVcIixcbmRlc2NyaXB0aW9uOlwiQ2hpbGQgcHJvY2VzcyB0ZXJtaW5hdGVkLCBwYXVzZWQgb3IgdW5wYXVzZWRcIixcbnN0YW5kYXJkOlwicG9zaXhcIlxufSxcbntcbm5hbWU6XCJTSUdDTERcIixcbm51bWJlcjoxNyxcbmFjdGlvbjpcImlnbm9yZVwiLFxuZGVzY3JpcHRpb246XCJDaGlsZCBwcm9jZXNzIHRlcm1pbmF0ZWQsIHBhdXNlZCBvciB1bnBhdXNlZFwiLFxuc3RhbmRhcmQ6XCJvdGhlclwiXG59LFxue1xubmFtZTpcIlNJR0NPTlRcIixcbm51bWJlcjoxOCxcbmFjdGlvbjpcInVucGF1c2VcIixcbmRlc2NyaXB0aW9uOlwiVW5wYXVzZWRcIixcbnN0YW5kYXJkOlwicG9zaXhcIixcbmZvcmNlZDp0cnVlXG59LFxue1xubmFtZTpcIlNJR1NUT1BcIixcbm51bWJlcjoxOSxcbmFjdGlvbjpcInBhdXNlXCIsXG5kZXNjcmlwdGlvbjpcIlBhdXNlZFwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwiLFxuZm9yY2VkOnRydWVcbn0sXG57XG5uYW1lOlwiU0lHVFNUUFwiLFxubnVtYmVyOjIwLFxuYWN0aW9uOlwicGF1c2VcIixcbmRlc2NyaXB0aW9uOlwiUGF1c2VkIHVzaW5nIENUUkwtWiBvciBcXFwic3VzcGVuZFxcXCJcIixcbnN0YW5kYXJkOlwicG9zaXhcIlxufSxcbntcbm5hbWU6XCJTSUdUVElOXCIsXG5udW1iZXI6MjEsXG5hY3Rpb246XCJwYXVzZVwiLFxuZGVzY3JpcHRpb246XCJCYWNrZ3JvdW5kIHByb2Nlc3MgY2Fubm90IHJlYWQgdGVybWluYWwgaW5wdXRcIixcbnN0YW5kYXJkOlwicG9zaXhcIlxufSxcbntcbm5hbWU6XCJTSUdCUkVBS1wiLFxubnVtYmVyOjIxLFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIlVzZXIgaW50ZXJydXB0aW9uIHdpdGggQ1RSTC1CUkVBS1wiLFxuc3RhbmRhcmQ6XCJvdGhlclwiXG59LFxue1xubmFtZTpcIlNJR1RUT1VcIixcbm51bWJlcjoyMixcbmFjdGlvbjpcInBhdXNlXCIsXG5kZXNjcmlwdGlvbjpcIkJhY2tncm91bmQgcHJvY2VzcyBjYW5ub3Qgd3JpdGUgdG8gdGVybWluYWwgb3V0cHV0XCIsXG5zdGFuZGFyZDpcInBvc2l4XCJcbn0sXG57XG5uYW1lOlwiU0lHVVJHXCIsXG5udW1iZXI6MjMsXG5hY3Rpb246XCJpZ25vcmVcIixcbmRlc2NyaXB0aW9uOlwiU29ja2V0IHJlY2VpdmVkIG91dC1vZi1iYW5kIGRhdGFcIixcbnN0YW5kYXJkOlwiYnNkXCJcbn0sXG57XG5uYW1lOlwiU0lHWENQVVwiLFxubnVtYmVyOjI0LFxuYWN0aW9uOlwiY29yZVwiLFxuZGVzY3JpcHRpb246XCJQcm9jZXNzIHRpbWVkIG91dFwiLFxuc3RhbmRhcmQ6XCJic2RcIlxufSxcbntcbm5hbWU6XCJTSUdYRlNaXCIsXG5udW1iZXI6MjUsXG5hY3Rpb246XCJjb3JlXCIsXG5kZXNjcmlwdGlvbjpcIkZpbGUgdG9vIGJpZ1wiLFxuc3RhbmRhcmQ6XCJic2RcIlxufSxcbntcbm5hbWU6XCJTSUdWVEFMUk1cIixcbm51bWJlcjoyNixcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJUaW1lb3V0IG9yIHRpbWVyXCIsXG5zdGFuZGFyZDpcImJzZFwiXG59LFxue1xubmFtZTpcIlNJR1BST0ZcIixcbm51bWJlcjoyNyxcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJUaW1lb3V0IG9yIHRpbWVyXCIsXG5zdGFuZGFyZDpcImJzZFwiXG59LFxue1xubmFtZTpcIlNJR1dJTkNIXCIsXG5udW1iZXI6MjgsXG5hY3Rpb246XCJpZ25vcmVcIixcbmRlc2NyaXB0aW9uOlwiVGVybWluYWwgd2luZG93IHNpemUgY2hhbmdlZFwiLFxuc3RhbmRhcmQ6XCJic2RcIlxufSxcbntcbm5hbWU6XCJTSUdJT1wiLFxubnVtYmVyOjI5LFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIkkvTyBpcyBhdmFpbGFibGVcIixcbnN0YW5kYXJkOlwib3RoZXJcIlxufSxcbntcbm5hbWU6XCJTSUdQT0xMXCIsXG5udW1iZXI6MjksXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiV2F0Y2hlZCBldmVudFwiLFxuc3RhbmRhcmQ6XCJvdGhlclwiXG59LFxue1xubmFtZTpcIlNJR0lORk9cIixcbm51bWJlcjoyOSxcbmFjdGlvbjpcImlnbm9yZVwiLFxuZGVzY3JpcHRpb246XCJSZXF1ZXN0IGZvciBwcm9jZXNzIGluZm9ybWF0aW9uXCIsXG5zdGFuZGFyZDpcIm90aGVyXCJcbn0sXG57XG5uYW1lOlwiU0lHUFdSXCIsXG5udW1iZXI6MzAsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiRGV2aWNlIHJ1bm5pbmcgb3V0IG9mIHBvd2VyXCIsXG5zdGFuZGFyZDpcInN5c3RlbXZcIlxufSxcbntcbm5hbWU6XCJTSUdTWVNcIixcbm51bWJlcjozMSxcbmFjdGlvbjpcImNvcmVcIixcbmRlc2NyaXB0aW9uOlwiSW52YWxpZCBzeXN0ZW0gY2FsbFwiLFxuc3RhbmRhcmQ6XCJvdGhlclwiXG59LFxue1xubmFtZTpcIlNJR1VOVVNFRFwiLFxubnVtYmVyOjMxLFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIkludmFsaWQgc3lzdGVtIGNhbGxcIixcbnN0YW5kYXJkOlwib3RoZXJcIlxufV07IiwgImNvbnN0IGFsaWFzZXMgPSBbJ3N0ZGluJywgJ3N0ZG91dCcsICdzdGRlcnInXTtcblxuY29uc3QgaGFzQWxpYXMgPSBvcHRpb25zID0+IGFsaWFzZXMuc29tZShhbGlhcyA9PiBvcHRpb25zW2FsaWFzXSAhPT0gdW5kZWZpbmVkKTtcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVN0ZGlvID0gb3B0aW9ucyA9PiB7XG5cdGlmICghb3B0aW9ucykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHtzdGRpb30gPSBvcHRpb25zO1xuXG5cdGlmIChzdGRpbyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGFsaWFzZXMubWFwKGFsaWFzID0+IG9wdGlvbnNbYWxpYXNdKTtcblx0fVxuXG5cdGlmIChoYXNBbGlhcyhvcHRpb25zKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgSXQncyBub3QgcG9zc2libGUgdG8gcHJvdmlkZSBcXGBzdGRpb1xcYCBpbiBjb21iaW5hdGlvbiB3aXRoIG9uZSBvZiAke2FsaWFzZXMubWFwKGFsaWFzID0+IGBcXGAke2FsaWFzfVxcYGApLmpvaW4oJywgJyl9YCk7XG5cdH1cblxuXHRpZiAodHlwZW9mIHN0ZGlvID09PSAnc3RyaW5nJykge1xuXHRcdHJldHVybiBzdGRpbztcblx0fVxuXG5cdGlmICghQXJyYXkuaXNBcnJheShzdGRpbykpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBzdGRpb1xcYCB0byBiZSBvZiB0eXBlIFxcYHN0cmluZ1xcYCBvciBcXGBBcnJheVxcYCwgZ290IFxcYCR7dHlwZW9mIHN0ZGlvfVxcYGApO1xuXHR9XG5cblx0Y29uc3QgbGVuZ3RoID0gTWF0aC5tYXgoc3RkaW8ubGVuZ3RoLCBhbGlhc2VzLmxlbmd0aCk7XG5cdHJldHVybiBBcnJheS5mcm9tKHtsZW5ndGh9LCAodmFsdWUsIGluZGV4KSA9PiBzdGRpb1tpbmRleF0pO1xufTtcblxuLy8gYGlwY2AgaXMgcHVzaGVkIHVubGVzcyBpdCBpcyBhbHJlYWR5IHByZXNlbnRcbmV4cG9ydCBjb25zdCBub3JtYWxpemVTdGRpb05vZGUgPSBvcHRpb25zID0+IHtcblx0Y29uc3Qgc3RkaW8gPSBub3JtYWxpemVTdGRpbyhvcHRpb25zKTtcblxuXHRpZiAoc3RkaW8gPT09ICdpcGMnKSB7XG5cdFx0cmV0dXJuICdpcGMnO1xuXHR9XG5cblx0aWYgKHN0ZGlvID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHN0ZGlvID09PSAnc3RyaW5nJykge1xuXHRcdHJldHVybiBbc3RkaW8sIHN0ZGlvLCBzdGRpbywgJ2lwYyddO1xuXHR9XG5cblx0aWYgKHN0ZGlvLmluY2x1ZGVzKCdpcGMnKSkge1xuXHRcdHJldHVybiBzdGRpbztcblx0fVxuXG5cdHJldHVybiBbLi4uc3RkaW8sICdpcGMnXTtcbn07XG4iLCAiaW1wb3J0IG9zIGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IG9uRXhpdCBmcm9tICdzaWduYWwtZXhpdCc7XG5cbmNvbnN0IERFRkFVTFRfRk9SQ0VfS0lMTF9USU1FT1VUID0gMTAwMCAqIDU7XG5cbi8vIE1vbmtleS1wYXRjaGVzIGBjaGlsZFByb2Nlc3Mua2lsbCgpYCB0byBhZGQgYGZvcmNlS2lsbEFmdGVyVGltZW91dGAgYmVoYXZpb3JcbmV4cG9ydCBjb25zdCBzcGF3bmVkS2lsbCA9IChraWxsLCBzaWduYWwgPSAnU0lHVEVSTScsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRjb25zdCBraWxsUmVzdWx0ID0ga2lsbChzaWduYWwpO1xuXHRzZXRLaWxsVGltZW91dChraWxsLCBzaWduYWwsIG9wdGlvbnMsIGtpbGxSZXN1bHQpO1xuXHRyZXR1cm4ga2lsbFJlc3VsdDtcbn07XG5cbmNvbnN0IHNldEtpbGxUaW1lb3V0ID0gKGtpbGwsIHNpZ25hbCwgb3B0aW9ucywga2lsbFJlc3VsdCkgPT4ge1xuXHRpZiAoIXNob3VsZEZvcmNlS2lsbChzaWduYWwsIG9wdGlvbnMsIGtpbGxSZXN1bHQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgdGltZW91dCA9IGdldEZvcmNlS2lsbEFmdGVyVGltZW91dChvcHRpb25zKTtcblx0Y29uc3QgdCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGtpbGwoJ1NJR0tJTEwnKTtcblx0fSwgdGltZW91dCk7XG5cblx0Ly8gR3VhcmRlZCBiZWNhdXNlIHRoZXJlJ3Mgbm8gYC51bnJlZigpYCB3aGVuIGBleGVjYWAgaXMgdXNlZCBpbiB0aGUgcmVuZGVyZXJcblx0Ly8gcHJvY2VzcyBpbiBFbGVjdHJvbi4gVGhpcyBjYW5ub3QgYmUgdGVzdGVkIHNpbmNlIHdlIGRvbid0IHJ1biB0ZXN0cyBpblxuXHQvLyBFbGVjdHJvbi5cblx0Ly8gaXN0YW5idWwgaWdub3JlIGVsc2Vcblx0aWYgKHQudW5yZWYpIHtcblx0XHR0LnVucmVmKCk7XG5cdH1cbn07XG5cbmNvbnN0IHNob3VsZEZvcmNlS2lsbCA9IChzaWduYWwsIHtmb3JjZUtpbGxBZnRlclRpbWVvdXR9LCBraWxsUmVzdWx0KSA9PiBpc1NpZ3Rlcm0oc2lnbmFsKSAmJiBmb3JjZUtpbGxBZnRlclRpbWVvdXQgIT09IGZhbHNlICYmIGtpbGxSZXN1bHQ7XG5cbmNvbnN0IGlzU2lndGVybSA9IHNpZ25hbCA9PiBzaWduYWwgPT09IG9zLmNvbnN0YW50cy5zaWduYWxzLlNJR1RFUk1cblx0XHR8fCAodHlwZW9mIHNpZ25hbCA9PT0gJ3N0cmluZycgJiYgc2lnbmFsLnRvVXBwZXJDYXNlKCkgPT09ICdTSUdURVJNJyk7XG5cbmNvbnN0IGdldEZvcmNlS2lsbEFmdGVyVGltZW91dCA9ICh7Zm9yY2VLaWxsQWZ0ZXJUaW1lb3V0ID0gdHJ1ZX0pID0+IHtcblx0aWYgKGZvcmNlS2lsbEFmdGVyVGltZW91dCA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiBERUZBVUxUX0ZPUkNFX0tJTExfVElNRU9VVDtcblx0fVxuXG5cdGlmICghTnVtYmVyLmlzRmluaXRlKGZvcmNlS2lsbEFmdGVyVGltZW91dCkgfHwgZm9yY2VLaWxsQWZ0ZXJUaW1lb3V0IDwgMCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIHRoZSBcXGBmb3JjZUtpbGxBZnRlclRpbWVvdXRcXGAgb3B0aW9uIHRvIGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIGdvdCBcXGAke2ZvcmNlS2lsbEFmdGVyVGltZW91dH1cXGAgKCR7dHlwZW9mIGZvcmNlS2lsbEFmdGVyVGltZW91dH0pYCk7XG5cdH1cblxuXHRyZXR1cm4gZm9yY2VLaWxsQWZ0ZXJUaW1lb3V0O1xufTtcblxuLy8gYGNoaWxkUHJvY2Vzcy5jYW5jZWwoKWBcbmV4cG9ydCBjb25zdCBzcGF3bmVkQ2FuY2VsID0gKHNwYXduZWQsIGNvbnRleHQpID0+IHtcblx0Y29uc3Qga2lsbFJlc3VsdCA9IHNwYXduZWQua2lsbCgpO1xuXG5cdGlmIChraWxsUmVzdWx0KSB7XG5cdFx0Y29udGV4dC5pc0NhbmNlbGVkID0gdHJ1ZTtcblx0fVxufTtcblxuY29uc3QgdGltZW91dEtpbGwgPSAoc3Bhd25lZCwgc2lnbmFsLCByZWplY3QpID0+IHtcblx0c3Bhd25lZC5raWxsKHNpZ25hbCk7XG5cdHJlamVjdChPYmplY3QuYXNzaWduKG5ldyBFcnJvcignVGltZWQgb3V0JyksIHt0aW1lZE91dDogdHJ1ZSwgc2lnbmFsfSkpO1xufTtcblxuLy8gYHRpbWVvdXRgIG9wdGlvbiBoYW5kbGluZ1xuZXhwb3J0IGNvbnN0IHNldHVwVGltZW91dCA9IChzcGF3bmVkLCB7dGltZW91dCwga2lsbFNpZ25hbCA9ICdTSUdURVJNJ30sIHNwYXduZWRQcm9taXNlKSA9PiB7XG5cdGlmICh0aW1lb3V0ID09PSAwIHx8IHRpbWVvdXQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBzcGF3bmVkUHJvbWlzZTtcblx0fVxuXG5cdGxldCB0aW1lb3V0SWQ7XG5cdGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGltZW91dEtpbGwoc3Bhd25lZCwga2lsbFNpZ25hbCwgcmVqZWN0KTtcblx0XHR9LCB0aW1lb3V0KTtcblx0fSk7XG5cblx0Y29uc3Qgc2FmZVNwYXduZWRQcm9taXNlID0gc3Bhd25lZFByb21pc2UuZmluYWxseSgoKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG5cdH0pO1xuXG5cdHJldHVybiBQcm9taXNlLnJhY2UoW3RpbWVvdXRQcm9taXNlLCBzYWZlU3Bhd25lZFByb21pc2VdKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVRpbWVvdXQgPSAoe3RpbWVvdXR9KSA9PiB7XG5cdGlmICh0aW1lb3V0ICE9PSB1bmRlZmluZWQgJiYgKCFOdW1iZXIuaXNGaW5pdGUodGltZW91dCkgfHwgdGltZW91dCA8IDApKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgdGhlIFxcYHRpbWVvdXRcXGAgb3B0aW9uIHRvIGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIGdvdCBcXGAke3RpbWVvdXR9XFxgICgke3R5cGVvZiB0aW1lb3V0fSlgKTtcblx0fVxufTtcblxuLy8gYGNsZWFudXBgIG9wdGlvbiBoYW5kbGluZ1xuZXhwb3J0IGNvbnN0IHNldEV4aXRIYW5kbGVyID0gYXN5bmMgKHNwYXduZWQsIHtjbGVhbnVwLCBkZXRhY2hlZH0sIHRpbWVkUHJvbWlzZSkgPT4ge1xuXHRpZiAoIWNsZWFudXAgfHwgZGV0YWNoZWQpIHtcblx0XHRyZXR1cm4gdGltZWRQcm9taXNlO1xuXHR9XG5cblx0Y29uc3QgcmVtb3ZlRXhpdEhhbmRsZXIgPSBvbkV4aXQoKCkgPT4ge1xuXHRcdHNwYXduZWQua2lsbCgpO1xuXHR9KTtcblxuXHRyZXR1cm4gdGltZWRQcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuXHRcdHJlbW92ZUV4aXRIYW5kbGVyKCk7XG5cdH0pO1xufTtcbiIsICJpbXBvcnQge2NyZWF0ZVdyaXRlU3RyZWFtfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7Q2hpbGRQcm9jZXNzfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtpc1dyaXRhYmxlU3RyZWFtfSBmcm9tICdpcy1zdHJlYW0nO1xuXG5jb25zdCBpc0V4ZWNhQ2hpbGRQcm9jZXNzID0gdGFyZ2V0ID0+IHRhcmdldCBpbnN0YW5jZW9mIENoaWxkUHJvY2VzcyAmJiB0eXBlb2YgdGFyZ2V0LnRoZW4gPT09ICdmdW5jdGlvbic7XG5cbmNvbnN0IHBpcGVUb1RhcmdldCA9IChzcGF3bmVkLCBzdHJlYW1OYW1lLCB0YXJnZXQpID0+IHtcblx0aWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XG5cdFx0c3Bhd25lZFtzdHJlYW1OYW1lXS5waXBlKGNyZWF0ZVdyaXRlU3RyZWFtKHRhcmdldCkpO1xuXHRcdHJldHVybiBzcGF3bmVkO1xuXHR9XG5cblx0aWYgKGlzV3JpdGFibGVTdHJlYW0odGFyZ2V0KSkge1xuXHRcdHNwYXduZWRbc3RyZWFtTmFtZV0ucGlwZSh0YXJnZXQpO1xuXHRcdHJldHVybiBzcGF3bmVkO1xuXHR9XG5cblx0aWYgKCFpc0V4ZWNhQ2hpbGRQcm9jZXNzKHRhcmdldCkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIGEgc3RyZWFtIG9yIGFuIEV4ZWNhIGNoaWxkIHByb2Nlc3MuJyk7XG5cdH1cblxuXHRpZiAoIWlzV3JpdGFibGVTdHJlYW0odGFyZ2V0LnN0ZGluKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB0YXJnZXQgY2hpbGQgcHJvY2Vzc1xcJ3Mgc3RkaW4gbXVzdCBiZSBhdmFpbGFibGUuJyk7XG5cdH1cblxuXHRzcGF3bmVkW3N0cmVhbU5hbWVdLnBpcGUodGFyZ2V0LnN0ZGluKTtcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRQaXBlTWV0aG9kcyA9IHNwYXduZWQgPT4ge1xuXHRpZiAoc3Bhd25lZC5zdGRvdXQgIT09IG51bGwpIHtcblx0XHRzcGF3bmVkLnBpcGVTdGRvdXQgPSBwaXBlVG9UYXJnZXQuYmluZCh1bmRlZmluZWQsIHNwYXduZWQsICdzdGRvdXQnKTtcblx0fVxuXG5cdGlmIChzcGF3bmVkLnN0ZGVyciAhPT0gbnVsbCkge1xuXHRcdHNwYXduZWQucGlwZVN0ZGVyciA9IHBpcGVUb1RhcmdldC5iaW5kKHVuZGVmaW5lZCwgc3Bhd25lZCwgJ3N0ZGVycicpO1xuXHR9XG5cblx0aWYgKHNwYXduZWQuYWxsICE9PSB1bmRlZmluZWQpIHtcblx0XHRzcGF3bmVkLnBpcGVBbGwgPSBwaXBlVG9UYXJnZXQuYmluZCh1bmRlZmluZWQsIHNwYXduZWQsICdhbGwnKTtcblx0fVxufTtcbiIsICJleHBvcnQgZnVuY3Rpb24gaXNTdHJlYW0oc3RyZWFtKSB7XG5cdHJldHVybiBzdHJlYW0gIT09IG51bGxcblx0XHQmJiB0eXBlb2Ygc3RyZWFtID09PSAnb2JqZWN0J1xuXHRcdCYmIHR5cGVvZiBzdHJlYW0ucGlwZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV3JpdGFibGVTdHJlYW0oc3RyZWFtKSB7XG5cdHJldHVybiBpc1N0cmVhbShzdHJlYW0pXG5cdFx0JiYgc3RyZWFtLndyaXRhYmxlICE9PSBmYWxzZVxuXHRcdCYmIHR5cGVvZiBzdHJlYW0uX3dyaXRlID09PSAnZnVuY3Rpb24nXG5cdFx0JiYgdHlwZW9mIHN0cmVhbS5fd3JpdGFibGVTdGF0ZSA9PT0gJ29iamVjdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtKHN0cmVhbSkge1xuXHRyZXR1cm4gaXNTdHJlYW0oc3RyZWFtKVxuXHRcdCYmIHN0cmVhbS5yZWFkYWJsZSAhPT0gZmFsc2Vcblx0XHQmJiB0eXBlb2Ygc3RyZWFtLl9yZWFkID09PSAnZnVuY3Rpb24nXG5cdFx0JiYgdHlwZW9mIHN0cmVhbS5fcmVhZGFibGVTdGF0ZSA9PT0gJ29iamVjdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0R1cGxleFN0cmVhbShzdHJlYW0pIHtcblx0cmV0dXJuIGlzV3JpdGFibGVTdHJlYW0oc3RyZWFtKVxuXHRcdCYmIGlzUmVhZGFibGVTdHJlYW0oc3RyZWFtKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVHJhbnNmb3JtU3RyZWFtKHN0cmVhbSkge1xuXHRyZXR1cm4gaXNEdXBsZXhTdHJlYW0oc3RyZWFtKVxuXHRcdCYmIHR5cGVvZiBzdHJlYW0uX3RyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsICJpbXBvcnQge2NyZWF0ZVJlYWRTdHJlYW0sIHJlYWRGaWxlU3luY30gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge2lzU3RyZWFtfSBmcm9tICdpcy1zdHJlYW0nO1xuaW1wb3J0IGdldFN0cmVhbSBmcm9tICdnZXQtc3RyZWFtJztcbmltcG9ydCBtZXJnZVN0cmVhbSBmcm9tICdtZXJnZS1zdHJlYW0nO1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0T3B0aW9ucyA9IGlucHV0ID0+IHtcblx0aWYgKGlucHV0ICE9PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYGlucHV0YCBhbmQgYGlucHV0RmlsZWAgb3B0aW9ucyBjYW5ub3QgYmUgYm90aCBzZXQuJyk7XG5cdH1cbn07XG5cbmNvbnN0IGdldElucHV0U3luYyA9ICh7aW5wdXQsIGlucHV0RmlsZX0pID0+IHtcblx0aWYgKHR5cGVvZiBpbnB1dEZpbGUgIT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuIGlucHV0O1xuXHR9XG5cblx0dmFsaWRhdGVJbnB1dE9wdGlvbnMoaW5wdXQpO1xuXHRyZXR1cm4gcmVhZEZpbGVTeW5jKGlucHV0RmlsZSk7XG59O1xuXG4vLyBgaW5wdXRgIGFuZCBgaW5wdXRGaWxlYCBvcHRpb24gaW4gc3luYyBtb2RlXG5leHBvcnQgY29uc3QgaGFuZGxlSW5wdXRTeW5jID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGlucHV0ID0gZ2V0SW5wdXRTeW5jKG9wdGlvbnMpO1xuXG5cdGlmIChpc1N0cmVhbShpbnB1dCkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYGlucHV0YCBvcHRpb24gY2Fubm90IGJlIGEgc3RyZWFtIGluIHN5bmMgbW9kZScpO1xuXHR9XG5cblx0cmV0dXJuIGlucHV0O1xufTtcblxuY29uc3QgZ2V0SW5wdXQgPSAoe2lucHV0LCBpbnB1dEZpbGV9KSA9PiB7XG5cdGlmICh0eXBlb2YgaW5wdXRGaWxlICE9PSAnc3RyaW5nJykge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXG5cdHZhbGlkYXRlSW5wdXRPcHRpb25zKGlucHV0KTtcblx0cmV0dXJuIGNyZWF0ZVJlYWRTdHJlYW0oaW5wdXRGaWxlKTtcbn07XG5cbi8vIGBpbnB1dGAgYW5kIGBpbnB1dEZpbGVgIG9wdGlvbiBpbiBhc3luYyBtb2RlXG5leHBvcnQgY29uc3QgaGFuZGxlSW5wdXQgPSAoc3Bhd25lZCwgb3B0aW9ucykgPT4ge1xuXHRjb25zdCBpbnB1dCA9IGdldElucHV0KG9wdGlvbnMpO1xuXG5cdGlmIChpbnB1dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGlzU3RyZWFtKGlucHV0KSkge1xuXHRcdGlucHV0LnBpcGUoc3Bhd25lZC5zdGRpbik7XG5cdH0gZWxzZSB7XG5cdFx0c3Bhd25lZC5zdGRpbi5lbmQoaW5wdXQpO1xuXHR9XG59O1xuXG4vLyBgYWxsYCBpbnRlcmxlYXZlcyBgc3Rkb3V0YCBhbmQgYHN0ZGVycmBcbmV4cG9ydCBjb25zdCBtYWtlQWxsU3RyZWFtID0gKHNwYXduZWQsIHthbGx9KSA9PiB7XG5cdGlmICghYWxsIHx8ICghc3Bhd25lZC5zdGRvdXQgJiYgIXNwYXduZWQuc3RkZXJyKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IG1peGVkID0gbWVyZ2VTdHJlYW0oKTtcblxuXHRpZiAoc3Bhd25lZC5zdGRvdXQpIHtcblx0XHRtaXhlZC5hZGQoc3Bhd25lZC5zdGRvdXQpO1xuXHR9XG5cblx0aWYgKHNwYXduZWQuc3RkZXJyKSB7XG5cdFx0bWl4ZWQuYWRkKHNwYXduZWQuc3RkZXJyKTtcblx0fVxuXG5cdHJldHVybiBtaXhlZDtcbn07XG5cbi8vIE9uIGZhaWx1cmUsIGByZXN1bHQuc3Rkb3V0fHN0ZGVycnxhbGxgIHNob3VsZCBjb250YWluIHRoZSBjdXJyZW50bHkgYnVmZmVyZWQgc3RyZWFtXG5jb25zdCBnZXRCdWZmZXJlZERhdGEgPSBhc3luYyAoc3RyZWFtLCBzdHJlYW1Qcm9taXNlKSA9PiB7XG5cdC8vIFdoZW4gYGJ1ZmZlcmAgaXMgYGZhbHNlYCwgYHN0cmVhbVByb21pc2VgIGlzIGB1bmRlZmluZWRgIGFuZCB0aGVyZSBpcyBubyBidWZmZXJlZCBkYXRhIHRvIHJldHJpZXZlXG5cdGlmICghc3RyZWFtIHx8IHN0cmVhbVByb21pc2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHN0cmVhbS5kZXN0cm95KCk7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gYXdhaXQgc3RyZWFtUHJvbWlzZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRyZXR1cm4gZXJyb3IuYnVmZmVyZWREYXRhO1xuXHR9XG59O1xuXG5jb25zdCBnZXRTdHJlYW1Qcm9taXNlID0gKHN0cmVhbSwge2VuY29kaW5nLCBidWZmZXIsIG1heEJ1ZmZlcn0pID0+IHtcblx0aWYgKCFzdHJlYW0gfHwgIWJ1ZmZlcikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChlbmNvZGluZykge1xuXHRcdHJldHVybiBnZXRTdHJlYW0oc3RyZWFtLCB7ZW5jb2RpbmcsIG1heEJ1ZmZlcn0pO1xuXHR9XG5cblx0cmV0dXJuIGdldFN0cmVhbS5idWZmZXIoc3RyZWFtLCB7bWF4QnVmZmVyfSk7XG59O1xuXG4vLyBSZXRyaWV2ZSByZXN1bHQgb2YgY2hpbGQgcHJvY2VzczogZXhpdCBjb2RlLCBzaWduYWwsIGVycm9yLCBzdHJlYW1zIChzdGRvdXQvc3RkZXJyL2FsbClcbmV4cG9ydCBjb25zdCBnZXRTcGF3bmVkUmVzdWx0ID0gYXN5bmMgKHtzdGRvdXQsIHN0ZGVyciwgYWxsfSwge2VuY29kaW5nLCBidWZmZXIsIG1heEJ1ZmZlcn0sIHByb2Nlc3NEb25lKSA9PiB7XG5cdGNvbnN0IHN0ZG91dFByb21pc2UgPSBnZXRTdHJlYW1Qcm9taXNlKHN0ZG91dCwge2VuY29kaW5nLCBidWZmZXIsIG1heEJ1ZmZlcn0pO1xuXHRjb25zdCBzdGRlcnJQcm9taXNlID0gZ2V0U3RyZWFtUHJvbWlzZShzdGRlcnIsIHtlbmNvZGluZywgYnVmZmVyLCBtYXhCdWZmZXJ9KTtcblx0Y29uc3QgYWxsUHJvbWlzZSA9IGdldFN0cmVhbVByb21pc2UoYWxsLCB7ZW5jb2RpbmcsIGJ1ZmZlciwgbWF4QnVmZmVyOiBtYXhCdWZmZXIgKiAyfSk7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoW3Byb2Nlc3NEb25lLCBzdGRvdXRQcm9taXNlLCBzdGRlcnJQcm9taXNlLCBhbGxQcm9taXNlXSk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdHtlcnJvciwgc2lnbmFsOiBlcnJvci5zaWduYWwsIHRpbWVkT3V0OiBlcnJvci50aW1lZE91dH0sXG5cdFx0XHRnZXRCdWZmZXJlZERhdGEoc3Rkb3V0LCBzdGRvdXRQcm9taXNlKSxcblx0XHRcdGdldEJ1ZmZlcmVkRGF0YShzdGRlcnIsIHN0ZGVyclByb21pc2UpLFxuXHRcdFx0Z2V0QnVmZmVyZWREYXRhKGFsbCwgYWxsUHJvbWlzZSksXG5cdFx0XSk7XG5cdH1cbn07XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLXRvcC1sZXZlbC1hd2FpdFxuY29uc3QgbmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IChhc3luYyAoKSA9PiB7fSkoKS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbmNvbnN0IGRlc2NyaXB0b3JzID0gWyd0aGVuJywgJ2NhdGNoJywgJ2ZpbmFsbHknXS5tYXAocHJvcGVydHkgPT4gW1xuXHRwcm9wZXJ0eSxcblx0UmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgcHJvcGVydHkpLFxuXSk7XG5cbi8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBtaXhpbiBvZiBgY2hpbGRQcm9jZXNzYCBhbmQgYFByb21pc2VgXG5leHBvcnQgY29uc3QgbWVyZ2VQcm9taXNlID0gKHNwYXduZWQsIHByb21pc2UpID0+IHtcblx0Zm9yIChjb25zdCBbcHJvcGVydHksIGRlc2NyaXB0b3JdIG9mIGRlc2NyaXB0b3JzKSB7XG5cdFx0Ly8gU3RhcnRpbmcgdGhlIG1haW4gYHByb21pc2VgIGlzIGRlZmVycmVkIHRvIGF2b2lkIGNvbnN1bWluZyBzdHJlYW1zXG5cdFx0Y29uc3QgdmFsdWUgPSB0eXBlb2YgcHJvbWlzZSA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0PyAoLi4uYXJncykgPT4gUmVmbGVjdC5hcHBseShkZXNjcmlwdG9yLnZhbHVlLCBwcm9taXNlKCksIGFyZ3MpXG5cdFx0XHQ6IGRlc2NyaXB0b3IudmFsdWUuYmluZChwcm9taXNlKTtcblxuXHRcdFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoc3Bhd25lZCwgcHJvcGVydHksIHsuLi5kZXNjcmlwdG9yLCB2YWx1ZX0pO1xuXHR9XG59O1xuXG4vLyBVc2UgcHJvbWlzZXMgaW5zdGVhZCBvZiBgY2hpbGRfcHJvY2Vzc2AgZXZlbnRzXG5leHBvcnQgY29uc3QgZ2V0U3Bhd25lZFByb21pc2UgPSBzcGF3bmVkID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0c3Bhd25lZC5vbignZXhpdCcsIChleGl0Q29kZSwgc2lnbmFsKSA9PiB7XG5cdFx0cmVzb2x2ZSh7ZXhpdENvZGUsIHNpZ25hbH0pO1xuXHR9KTtcblxuXHRzcGF3bmVkLm9uKCdlcnJvcicsIGVycm9yID0+IHtcblx0XHRyZWplY3QoZXJyb3IpO1xuXHR9KTtcblxuXHRpZiAoc3Bhd25lZC5zdGRpbikge1xuXHRcdHNwYXduZWQuc3RkaW4ub24oJ2Vycm9yJywgZXJyb3IgPT4ge1xuXHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHR9KTtcblx0fVxufSk7XG4iLCAiaW1wb3J0IHtCdWZmZXJ9IGZyb20gJ25vZGU6YnVmZmVyJztcbmltcG9ydCB7Q2hpbGRQcm9jZXNzfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuXG5jb25zdCBub3JtYWxpemVBcmdzID0gKGZpbGUsIGFyZ3MgPSBbXSkgPT4ge1xuXHRpZiAoIUFycmF5LmlzQXJyYXkoYXJncykpIHtcblx0XHRyZXR1cm4gW2ZpbGVdO1xuXHR9XG5cblx0cmV0dXJuIFtmaWxlLCAuLi5hcmdzXTtcbn07XG5cbmNvbnN0IE5PX0VTQ0FQRV9SRUdFWFAgPSAvXltcXHcuLV0rJC87XG5jb25zdCBET1VCTEVfUVVPVEVTX1JFR0VYUCA9IC9cIi9nO1xuXG5jb25zdCBlc2NhcGVBcmcgPSBhcmcgPT4ge1xuXHRpZiAodHlwZW9mIGFyZyAhPT0gJ3N0cmluZycgfHwgTk9fRVNDQVBFX1JFR0VYUC50ZXN0KGFyZykpIHtcblx0XHRyZXR1cm4gYXJnO1xuXHR9XG5cblx0cmV0dXJuIGBcIiR7YXJnLnJlcGxhY2UoRE9VQkxFX1FVT1RFU19SRUdFWFAsICdcXFxcXCInKX1cImA7XG59O1xuXG5leHBvcnQgY29uc3Qgam9pbkNvbW1hbmQgPSAoZmlsZSwgYXJncykgPT4gbm9ybWFsaXplQXJncyhmaWxlLCBhcmdzKS5qb2luKCcgJyk7XG5cbmV4cG9ydCBjb25zdCBnZXRFc2NhcGVkQ29tbWFuZCA9IChmaWxlLCBhcmdzKSA9PiBub3JtYWxpemVBcmdzKGZpbGUsIGFyZ3MpLm1hcChhcmcgPT4gZXNjYXBlQXJnKGFyZykpLmpvaW4oJyAnKTtcblxuY29uc3QgU1BBQ0VTX1JFR0VYUCA9IC8gKy9nO1xuXG4vLyBIYW5kbGUgYGV4ZWNhQ29tbWFuZCgpYFxuZXhwb3J0IGNvbnN0IHBhcnNlQ29tbWFuZCA9IGNvbW1hbmQgPT4ge1xuXHRjb25zdCB0b2tlbnMgPSBbXTtcblx0Zm9yIChjb25zdCB0b2tlbiBvZiBjb21tYW5kLnRyaW0oKS5zcGxpdChTUEFDRVNfUkVHRVhQKSkge1xuXHRcdC8vIEFsbG93IHNwYWNlcyB0byBiZSBlc2NhcGVkIGJ5IGEgYmFja3NsYXNoIGlmIG5vdCBtZWFudCBhcyBhIGRlbGltaXRlclxuXHRcdGNvbnN0IHByZXZpb3VzVG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuXHRcdGlmIChwcmV2aW91c1Rva2VuICYmIHByZXZpb3VzVG9rZW4uZW5kc1dpdGgoJ1xcXFwnKSkge1xuXHRcdFx0Ly8gTWVyZ2UgcHJldmlvdXMgdG9rZW4gd2l0aCBjdXJyZW50IG9uZVxuXHRcdFx0dG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSA9IGAke3ByZXZpb3VzVG9rZW4uc2xpY2UoMCwgLTEpfSAke3Rva2VufWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRva2Vucy5wdXNoKHRva2VuKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG9rZW5zO1xufTtcblxuY29uc3QgcGFyc2VFeHByZXNzaW9uID0gZXhwcmVzc2lvbiA9PiB7XG5cdGNvbnN0IHR5cGVPZkV4cHJlc3Npb24gPSB0eXBlb2YgZXhwcmVzc2lvbjtcblxuXHRpZiAodHlwZU9mRXhwcmVzc2lvbiA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gZXhwcmVzc2lvbjtcblx0fVxuXG5cdGlmICh0eXBlT2ZFeHByZXNzaW9uID09PSAnbnVtYmVyJykge1xuXHRcdHJldHVybiBTdHJpbmcoZXhwcmVzc2lvbik7XG5cdH1cblxuXHRpZiAoXG5cdFx0dHlwZU9mRXhwcmVzc2lvbiA9PT0gJ29iamVjdCdcblx0XHQmJiBleHByZXNzaW9uICE9PSBudWxsXG5cdFx0JiYgIShleHByZXNzaW9uIGluc3RhbmNlb2YgQ2hpbGRQcm9jZXNzKVxuXHRcdCYmICdzdGRvdXQnIGluIGV4cHJlc3Npb25cblx0KSB7XG5cdFx0Y29uc3QgdHlwZU9mU3Rkb3V0ID0gdHlwZW9mIGV4cHJlc3Npb24uc3Rkb3V0O1xuXG5cdFx0aWYgKHR5cGVPZlN0ZG91dCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiBleHByZXNzaW9uLnN0ZG91dDtcblx0XHR9XG5cblx0XHRpZiAoQnVmZmVyLmlzQnVmZmVyKGV4cHJlc3Npb24uc3Rkb3V0KSkge1xuXHRcdFx0cmV0dXJuIGV4cHJlc3Npb24uc3Rkb3V0LnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgVW5leHBlY3RlZCBcIiR7dHlwZU9mU3Rkb3V0fVwiIHN0ZG91dCBpbiB0ZW1wbGF0ZSBleHByZXNzaW9uYCk7XG5cdH1cblxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmV4cGVjdGVkIFwiJHt0eXBlT2ZFeHByZXNzaW9ufVwiIGluIHRlbXBsYXRlIGV4cHJlc3Npb25gKTtcbn07XG5cbmNvbnN0IGNvbmNhdFRva2VucyA9ICh0b2tlbnMsIG5leHRUb2tlbnMsIGlzTmV3KSA9PiBpc05ldyB8fCB0b2tlbnMubGVuZ3RoID09PSAwIHx8IG5leHRUb2tlbnMubGVuZ3RoID09PSAwXG5cdD8gWy4uLnRva2VucywgLi4ubmV4dFRva2Vuc11cblx0OiBbXG5cdFx0Li4udG9rZW5zLnNsaWNlKDAsIC0xKSxcblx0XHRgJHt0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdfSR7bmV4dFRva2Vuc1swXX1gLFxuXHRcdC4uLm5leHRUb2tlbnMuc2xpY2UoMSksXG5cdF07XG5cbmNvbnN0IHBhcnNlVGVtcGxhdGUgPSAoe3RlbXBsYXRlcywgZXhwcmVzc2lvbnMsIHRva2VucywgaW5kZXgsIHRlbXBsYXRlfSkgPT4ge1xuXHRjb25zdCB0ZW1wbGF0ZVN0cmluZyA9IHRlbXBsYXRlID8/IHRlbXBsYXRlcy5yYXdbaW5kZXhdO1xuXHRjb25zdCB0ZW1wbGF0ZVRva2VucyA9IHRlbXBsYXRlU3RyaW5nLnNwbGl0KFNQQUNFU19SRUdFWFApLmZpbHRlcihCb29sZWFuKTtcblx0Y29uc3QgbmV3VG9rZW5zID0gY29uY2F0VG9rZW5zKFxuXHRcdHRva2Vucyxcblx0XHR0ZW1wbGF0ZVRva2Vucyxcblx0XHR0ZW1wbGF0ZVN0cmluZy5zdGFydHNXaXRoKCcgJyksXG5cdCk7XG5cblx0aWYgKGluZGV4ID09PSBleHByZXNzaW9ucy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gbmV3VG9rZW5zO1xuXHR9XG5cblx0Y29uc3QgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zW2luZGV4XTtcblx0Y29uc3QgZXhwcmVzc2lvblRva2VucyA9IEFycmF5LmlzQXJyYXkoZXhwcmVzc2lvbilcblx0XHQ/IGV4cHJlc3Npb24ubWFwKGV4cHJlc3Npb24gPT4gcGFyc2VFeHByZXNzaW9uKGV4cHJlc3Npb24pKVxuXHRcdDogW3BhcnNlRXhwcmVzc2lvbihleHByZXNzaW9uKV07XG5cdHJldHVybiBjb25jYXRUb2tlbnMoXG5cdFx0bmV3VG9rZW5zLFxuXHRcdGV4cHJlc3Npb25Ub2tlbnMsXG5cdFx0dGVtcGxhdGVTdHJpbmcuZW5kc1dpdGgoJyAnKSxcblx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVRlbXBsYXRlcyA9ICh0ZW1wbGF0ZXMsIGV4cHJlc3Npb25zKSA9PiB7XG5cdGxldCB0b2tlbnMgPSBbXTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgdGVtcGxhdGVdIG9mIHRlbXBsYXRlcy5lbnRyaWVzKCkpIHtcblx0XHR0b2tlbnMgPSBwYXJzZVRlbXBsYXRlKHt0ZW1wbGF0ZXMsIGV4cHJlc3Npb25zLCB0b2tlbnMsIGluZGV4LCB0ZW1wbGF0ZX0pO1xuXHR9XG5cblx0cmV0dXJuIHRva2Vucztcbn07XG5cbiIsICJpbXBvcnQge2RlYnVnbG9nfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuZXhwb3J0IGNvbnN0IHZlcmJvc2VEZWZhdWx0ID0gZGVidWdsb2coJ2V4ZWNhJykuZW5hYmxlZDtcblxuY29uc3QgcGFkRmllbGQgPSAoZmllbGQsIHBhZGRpbmcpID0+IFN0cmluZyhmaWVsZCkucGFkU3RhcnQocGFkZGluZywgJzAnKTtcblxuY29uc3QgZ2V0VGltZXN0YW1wID0gKCkgPT4ge1xuXHRjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcblx0cmV0dXJuIGAke3BhZEZpZWxkKGRhdGUuZ2V0SG91cnMoKSwgMil9OiR7cGFkRmllbGQoZGF0ZS5nZXRNaW51dGVzKCksIDIpfToke3BhZEZpZWxkKGRhdGUuZ2V0U2Vjb25kcygpLCAyKX0uJHtwYWRGaWVsZChkYXRlLmdldE1pbGxpc2Vjb25kcygpLCAzKX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvZ0NvbW1hbmQgPSAoZXNjYXBlZENvbW1hbmQsIHt2ZXJib3NlfSkgPT4ge1xuXHRpZiAoIXZlcmJvc2UpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRwcm9jZXNzLnN0ZGVyci53cml0ZShgWyR7Z2V0VGltZXN0YW1wKCl9XSAke2VzY2FwZWRDb21tYW5kfVxcbmApO1xufTtcbiIsICJpbXBvcnQge1xuICBCdWlsZFN0ZXBPdXRwdXQsXG4gIEVudHJ5cG9pbnRHcm91cCxcbiAgSW50ZXJuYWxDb25maWcsXG4gIFd4dERldlNlcnZlcixcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgU2NyaXB0aW5nIH0gZnJvbSAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJztcbmltcG9ydCB7XG4gIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoLFxuICByZXNvbHZlUGVyQnJvd3Nlck9wdGlvbixcbn0gZnJvbSAnLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQge1xuICBnZXRDb250ZW50U2NyaXB0Q3NzRmlsZXMsXG4gIGdldENvbnRlbnRTY3JpcHRzQ3NzTWFwLFxufSBmcm9tICcuL3V0aWxzL21hbmlmZXN0JztcbmltcG9ydCB7IGJ1aWxkSW50ZXJuYWwgfSBmcm9tICcuL2J1aWxkJztcbmltcG9ydCB7IGNyZWF0ZUV4dGVuc2lvblJ1bm5lciB9IGZyb20gJy4vcnVubmVycyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTZXJ2ZXJJbmZvKCk6IFByb21pc2U8U2VydmVySW5mbz4ge1xuICBjb25zdCB7IGRlZmF1bHQ6IGdldFBvcnQsIHBvcnROdW1iZXJzIH0gPSBhd2FpdCBpbXBvcnQoJ2dldC1wb3J0Jyk7XG4gIGNvbnN0IHBvcnQgPSBhd2FpdCBnZXRQb3J0KHsgcG9ydDogcG9ydE51bWJlcnMoMzAwMCwgMzAxMCkgfSk7XG4gIGNvbnN0IGhvc3RuYW1lID0gJ2xvY2FsaG9zdCc7XG4gIGNvbnN0IG9yaWdpbiA9IGBodHRwOi8vJHtob3N0bmFtZX06JHtwb3J0fWA7XG4gIGNvbnN0IHNlcnZlckNvbmZpZzogdml0ZS5JbmxpbmVDb25maWcgPSB7XG4gICAgc2VydmVyOiB7XG4gICAgICBvcmlnaW4sXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHBvcnQsXG4gICAgaG9zdG5hbWUsXG4gICAgb3JpZ2luLFxuICAgIHZpdGVTZXJ2ZXJDb25maWc6IHNlcnZlckNvbmZpZyxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwU2VydmVyKFxuICBzZXJ2ZXJJbmZvOiBTZXJ2ZXJJbmZvLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxXeHREZXZTZXJ2ZXI+IHtcbiAgY29uc3QgcnVubmVyID0gYXdhaXQgY3JlYXRlRXh0ZW5zaW9uUnVubmVyKGNvbmZpZyk7XG5cbiAgY29uc3Qgdml0ZVNlcnZlciA9IGF3YWl0IHZpdGUuY3JlYXRlU2VydmVyKFxuICAgIHZpdGUubWVyZ2VDb25maWcoc2VydmVySW5mbywgYXdhaXQgY29uZmlnLnZpdGUoY29uZmlnLmVudikpLFxuICApO1xuXG4gIGNvbnN0IHN0YXJ0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHZpdGVTZXJ2ZXIubGlzdGVuKHNlcnZlci5wb3J0KTtcbiAgICBjb25maWcubG9nZ2VyLnN1Y2Nlc3MoYFN0YXJ0ZWQgZGV2IHNlcnZlciBAICR7c2VydmVySW5mby5vcmlnaW59YCk7XG5cbiAgICBzZXJ2ZXIuY3VycmVudE91dHB1dCA9IGF3YWl0IGJ1aWxkSW50ZXJuYWwoY29uZmlnKTtcbiAgICBhd2FpdCBydW5uZXIub3BlbkJyb3dzZXIoY29uZmlnKTtcbiAgfTtcblxuICBjb25zdCByZWxvYWRFeHRlbnNpb24gPSAoKSA9PiB7XG4gICAgdml0ZVNlcnZlci53cy5zZW5kKCd3eHQ6cmVsb2FkLWV4dGVuc2lvbicpO1xuICB9O1xuICBjb25zdCByZWxvYWRQYWdlID0gKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIC8vIENhbid0IHVzZSBWaXRlJ3MgYnVpbHQtaW4gXCJmdWxsLXJlbG9hZFwiIGV2ZW50IGJlY2F1c2UgaXQgZG9lc24ndCBsaWtlIG91ciBwYXRocywgaXQgZXhwZWN0c1xuICAgIC8vIHBhdGhzIGVuZGluZyBpbiBcIi9pbmRleC5odG1sXCJcbiAgICB2aXRlU2VydmVyLndzLnNlbmQoJ3d4dDpyZWxvYWQtcGFnZScsIHBhdGgpO1xuICB9O1xuICBjb25zdCByZWxvYWRDb250ZW50U2NyaXB0ID0gKFxuICAgIGNvbnRlbnRTY3JpcHQ6IE9taXQ8U2NyaXB0aW5nLlJlZ2lzdGVyZWRDb250ZW50U2NyaXB0LCAnaWQnPixcbiAgKSA9PiB7XG4gICAgdml0ZVNlcnZlci53cy5zZW5kKCd3eHQ6cmVsb2FkLWNvbnRlbnQtc2NyaXB0JywgY29udGVudFNjcmlwdCk7XG4gIH07XG5cbiAgY29uc3Qgc2VydmVyOiBXeHREZXZTZXJ2ZXIgPSB7XG4gICAgLi4udml0ZVNlcnZlcixcbiAgICBzdGFydCxcbiAgICBjdXJyZW50T3V0cHV0OiB7XG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICBtYW5pZmVzdF92ZXJzaW9uOiAzLFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmVyc2lvbjogJycsXG4gICAgICB9LFxuICAgICAgcHVibGljQXNzZXRzOiBbXSxcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICB9LFxuICAgIHBvcnQ6IHNlcnZlckluZm8ucG9ydCxcbiAgICBob3N0bmFtZTogc2VydmVySW5mby5ob3N0bmFtZSxcbiAgICBvcmlnaW46IHNlcnZlckluZm8ub3JpZ2luLFxuICAgIHJlbG9hZEV4dGVuc2lvbixcbiAgICByZWxvYWRQYWdlLFxuICAgIHJlbG9hZENvbnRlbnRTY3JpcHQsXG4gIH07XG5cbiAgcmV0dXJuIHNlcnZlcjtcbn1cblxuLyoqXG4gKiBGcm9tIHRoZSBzZXJ2ZXIsIHRlbGwgdGhlIGNsaWVudCB0byByZWxvYWQgY29udGVudCBzY3JpcHRzIGZyb20gdGhlIHByb3ZpZGVkIGJ1aWxkIHN0ZXAgb3V0cHV0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZENvbnRlbnRTY3JpcHRzKFxuICBzdGVwczogQnVpbGRTdGVwT3V0cHV0W10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIHNlcnZlcjogV3h0RGV2U2VydmVyLFxuKSB7XG4gIGlmIChjb25maWcubWFuaWZlc3RWZXJzaW9uID09PSAzKSB7XG4gICAgc3RlcHMuZm9yRWFjaCgoc3RlcCkgPT4ge1xuICAgICAgY29uc3QgZW50cnkgPSBzdGVwLmVudHJ5cG9pbnRzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW50cnkpIHx8IGVudHJ5LnR5cGUgIT09ICdjb250ZW50LXNjcmlwdCcpIHJldHVybjtcblxuICAgICAgY29uc3QganMgPSBbZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoZW50cnksIGNvbmZpZy5vdXREaXIsICcuanMnKV07XG4gICAgICBjb25zdCBjc3NNYXAgPSBnZXRDb250ZW50U2NyaXB0c0Nzc01hcChzZXJ2ZXIuY3VycmVudE91dHB1dCwgW2VudHJ5XSk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb250ZW50U2NyaXB0Q3NzRmlsZXMoW2VudHJ5XSwgY3NzTWFwKTtcblxuICAgICAgc2VydmVyLnJlbG9hZENvbnRlbnRTY3JpcHQoe1xuICAgICAgICBhbGxGcmFtZXM6IHJlc29sdmVQZXJCcm93c2VyT3B0aW9uKFxuICAgICAgICAgIGVudHJ5Lm9wdGlvbnMuYWxsRnJhbWVzLFxuICAgICAgICAgIGNvbmZpZy5icm93c2VyLFxuICAgICAgICApLFxuICAgICAgICBleGNsdWRlTWF0Y2hlczogcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24oXG4gICAgICAgICAgZW50cnkub3B0aW9ucy5leGNsdWRlTWF0Y2hlcyxcbiAgICAgICAgICBjb25maWcuYnJvd3NlcixcbiAgICAgICAgKSxcbiAgICAgICAgbWF0Y2hlczogcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24oZW50cnkub3B0aW9ucy5tYXRjaGVzLCBjb25maWcuYnJvd3NlciksXG4gICAgICAgIHJ1bkF0OiByZXNvbHZlUGVyQnJvd3Nlck9wdGlvbihlbnRyeS5vcHRpb25zLnJ1bkF0LCBjb25maWcuYnJvd3NlciksXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IENocm9tZSBhY2NlcHRzIHRoaXMsIG5vdCB0eXBlZCBpbiB3ZWJleHRlbnNpb24tcG9seWZpbGwgKGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vZG9jcy9leHRlbnNpb25zL3JlZmVyZW5jZS9zY3JpcHRpbmcvI3R5cGUtUmVnaXN0ZXJlZENvbnRlbnRTY3JpcHQpXG4gICAgICAgIHdvcmxkOiByZXNvbHZlUGVyQnJvd3Nlck9wdGlvbihlbnRyeS5vcHRpb25zLndvcmxkLCBjb25maWcuYnJvd3NlciksXG4gICAgICAgIGpzLFxuICAgICAgICBjc3MsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzZXJ2ZXIucmVsb2FkRXh0ZW5zaW9uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZEh0bWxQYWdlcyhcbiAgZ3JvdXBzOiBFbnRyeXBvaW50R3JvdXBbXSxcbiAgc2VydmVyOiBXeHREZXZTZXJ2ZXIsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pIHtcbiAgZ3JvdXBzLmZsYXQoKS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChlbnRyeSwgY29uZmlnLm91dERpciwgJy5odG1sJyk7XG4gICAgc2VydmVyLnJlbG9hZFBhZ2UocGF0aCk7XG4gIH0pO1xufVxuXG5pbnRlcmZhY2UgU2VydmVySW5mbyB7XG4gIHBvcnQ6IG51bWJlcjtcbiAgaG9zdG5hbWU6IHN0cmluZztcbiAgb3JpZ2luOiBzdHJpbmc7XG4gIHZpdGVTZXJ2ZXJDb25maWc6IHZpdGUuSW5saW5lQ29uZmlnO1xufVxuIiwgImltcG9ydCB7IEV4dGVuc2lvblJ1bm5lciB9IGZyb20gJy4vZXh0ZW5zaW9uLXJ1bm5lcic7XG5pbXBvcnQgeyByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbi8qKlxuICogVGhlIFdTTCBydW5uZXIganVzdCBsb2dzIGEgd2FybmluZyBtZXNzYWdlIGJlY2F1c2UgYHdlYi1leHRgIGRvZXNuJ3Qgd29yayBpbiBXU0wuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXc2xSdW5uZXIoKTogRXh0ZW5zaW9uUnVubmVyIHtcbiAgcmV0dXJuIHtcbiAgICBhc3luYyBvcGVuQnJvd3Nlcihjb25maWcpIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIud2FybihcbiAgICAgICAgYENhbm5vdCBvcGVuIGJyb3dzZXIgd2hlbiB1c2luZyBXU0wuIExvYWQgXCIke3JlbGF0aXZlKFxuICAgICAgICAgIHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICAgKX1cIiBhcyBhbiB1bnBhY2tlZCBleHRlbnNpb24gbWFudWFsbHlgLFxuICAgICAgKTtcbiAgICB9LFxuICAgIGFzeW5jIGNsb3NlQnJvd3NlcigpIHtcbiAgICAgIC8vIG5vb3BcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgV2ViRXh0UnVuSW5zdGFuY2UgfSBmcm9tICd3ZWItZXh0LXJ1bic7XG5pbXBvcnQgeyBFeHRlbnNpb25SdW5uZXIgfSBmcm9tICcuL2V4dGVuc2lvbi1ydW5uZXInO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBgRXh0ZW5zaW9uUnVubmVyYCBiYWNrZWQgYnkgYHdlYi1leHRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViRXh0UnVubmVyKCk6IEV4dGVuc2lvblJ1bm5lciB7XG4gIGxldCBydW5uZXI6IFdlYkV4dFJ1bkluc3RhbmNlIHwgdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgb3BlbkJyb3dzZXIoY29uZmlnKSB7XG4gICAgICBjb25maWcubG9nZ2VyLmluZm8oJ09wZW5pbmcgYnJvd3Nlci4uLicpO1xuXG4gICAgICAvLyBVc2UgdGhlIHBsdWdpbidzIGxvZ2dlciBpbnN0ZWFkIG9mIHdlYi1leHQncyBidWlsdC1pbiBvbmUuXG4gICAgICBjb25zdCB3ZWJFeHRMb2dnZXIgPSBhd2FpdCBpbXBvcnQoJ3dlYi1leHQtcnVuL3V0aWwvbG9nZ2VyJyk7XG4gICAgICB3ZWJFeHRMb2dnZXIuY29uc29sZVN0cmVhbS53cml0ZSA9ICh7IGxldmVsLCBtc2csIG5hbWUgfSkgPT4ge1xuICAgICAgICBpZiAobGV2ZWwgPj0gRVJST1JfTE9HX0xFVkVMKSBjb25maWcubG9nZ2VyLmVycm9yKG5hbWUsIG1zZyk7XG4gICAgICAgIGlmIChsZXZlbCA+PSBXQVJOX0xPR19MRVZFTCkgY29uZmlnLmxvZ2dlci53YXJuKG1zZyk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB3eHRVc2VyQ29uZmlnID0gY29uZmlnLnJ1bm5lckNvbmZpZy5jb25maWc7XG4gICAgICBjb25zdCB1c2VyQ29uZmlnID0ge1xuICAgICAgICBjb25zb2xlOiB3eHRVc2VyQ29uZmlnPy5vcGVuQ29uc29sZSxcbiAgICAgICAgZGV2dG9vbHM6IHd4dFVzZXJDb25maWc/Lm9wZW5EZXZ0b29scyxcbiAgICAgICAgc3RhcnRVcmw6IHd4dFVzZXJDb25maWc/LnN0YXJ0VXJscyxcbiAgICAgICAgLi4uKGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCdcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgZmlyZWZveDogd3h0VXNlckNvbmZpZz8uYmluYXJpZXM/LmZpcmVmb3gsXG4gICAgICAgICAgICAgIGZpcmVmb3hQcm9maWxlOiB3eHRVc2VyQ29uZmlnPy5maXJlZm94UHJvZmlsZSxcbiAgICAgICAgICAgICAgcHJlZnM6IHd4dFVzZXJDb25maWc/LmZpcmVmb3hQcmVmcyxcbiAgICAgICAgICAgICAgYXJnczogd3h0VXNlckNvbmZpZz8uZmlyZWZveEFyZ3MsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGNocm9taXVtQmluYXJ5OiB3eHRVc2VyQ29uZmlnPy5iaW5hcmllcz8uW2NvbmZpZy5icm93c2VyXSxcbiAgICAgICAgICAgICAgY2hyb21pdW1Qcm9maWxlOiB3eHRVc2VyQ29uZmlnPy5jaHJvbWl1bVByb2ZpbGUsXG4gICAgICAgICAgICAgIGFyZ3M6IHd4dFVzZXJDb25maWc/LmNocm9taXVtQXJncyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZmluYWxDb25maWcgPSB7XG4gICAgICAgIC4uLnVzZXJDb25maWcsXG4gICAgICAgIHRhcmdldDogY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94JyA/ICdmaXJlZm94LWRlc2t0b3AnIDogJ2Nocm9taXVtJyxcbiAgICAgICAgc291cmNlRGlyOiBjb25maWcub3V0RGlyLFxuICAgICAgICAvLyBXWFQgaGFuZGxlcyByZWxvYWRzLCBzbyBkaXNhYmxlIGF1dG8tcmVsb2FkIGJlaGF2aW9ycyBpbiB3ZWItZXh0XG4gICAgICAgIG5vUmVsb2FkOiB0cnVlLFxuICAgICAgICBub0lucHV0OiB0cnVlLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIC8vIERvbid0IGNhbGwgYHByb2Nlc3MuZXhpdCgwKWAgYWZ0ZXIgc3RhcnRpbmcgd2ViLWV4dFxuICAgICAgICBzaG91bGRFeGl0UHJvZ3JhbTogZmFsc2UsXG4gICAgICB9O1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1Zygnd2ViLWV4dCBjb25maWc6JywgZmluYWxDb25maWcpO1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1Zygnd2ViLWV4dCBvcHRpb25zOicsIG9wdGlvbnMpO1xuXG4gICAgICBjb25zdCB3ZWJFeHQgPSBhd2FpdCBpbXBvcnQoJ3dlYi1leHQtcnVuJyk7XG4gICAgICBydW5uZXIgPSBhd2FpdCB3ZWJFeHQuZGVmYXVsdC5jbWQucnVuKGZpbmFsQ29uZmlnLCBvcHRpb25zKTtcblxuICAgICAgY29uZmlnLmxvZ2dlci5zdWNjZXNzKCdPcGVuZWQhJyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlQnJvd3NlcigpIHtcbiAgICAgIHJldHVybiBhd2FpdCBydW5uZXI/LmV4aXQoKTtcbiAgICB9LFxuICB9O1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS93ZWItZXh0L2Jsb2IvZTM3ZTYwYTI3Mzg0NzhmNTEyZjEyNTVjNTM3MTMzMzIxZjMwMTc3MS9zcmMvdXRpbC9sb2dnZXIuanMjTDEyXG5jb25zdCBXQVJOX0xPR19MRVZFTCA9IDQwO1xuY29uc3QgRVJST1JfTE9HX0xFVkVMID0gNTA7XG4iLCAiaW1wb3J0IHsgRXh0ZW5zaW9uUnVubmVyIH0gZnJvbSAnLi9leHRlbnNpb24tcnVubmVyJztcbmltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSAnbm9kZTpwYXRoJztcblxuLyoqXG4gKiBUaGUgU2FmYXJpIHJ1bm5lciBqdXN0IGxvZ3MgYSB3YXJuaW5nIG1lc3NhZ2UgYmVjYXVzZSBgd2ViLWV4dGAgZG9lc24ndCB3b3JrIHdpdGggU2FmYXJpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2FmYXJpUnVubmVyKCk6IEV4dGVuc2lvblJ1bm5lciB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgb3BlbkJyb3dzZXIoY29uZmlnKSB7XG4gICAgICBjb25maWcubG9nZ2VyLndhcm4oXG4gICAgICAgIGBDYW5ub3QgU2FmYXJpIHVzaW5nIHdlYi1leHQuIExvYWQgXCIke3JlbGF0aXZlKFxuICAgICAgICAgIHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICAgKX1cIiBhcyBhbiB1bnBhY2tlZCBleHRlbnNpb24gbWFudWFsbHlgLFxuICAgICAgKTtcbiAgICB9LFxuICAgIGFzeW5jIGNsb3NlQnJvd3NlcigpIHtcbiAgICAgIC8vIG5vb3BcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IEV4dGVuc2lvblJ1bm5lciB9IGZyb20gJy4vZXh0ZW5zaW9uLXJ1bm5lcic7XG5pbXBvcnQgeyByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbi8qKlxuICogVGhlIG1hbnVhbCBydW5uZXIgdGVsbHMgdGhlIHVzZXIgdG8gbG9hZCB0aGUgdW5wYWNrZWQgZXh0ZW5zaW9uIG1hbnVhbGx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWFudWFsUnVubmVyKCk6IEV4dGVuc2lvblJ1bm5lciB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgb3BlbkJyb3dzZXIoY29uZmlnKSB7XG4gICAgICBjb25maWcubG9nZ2VyLmluZm8oXG4gICAgICAgIGBMb2FkIFwiJHtyZWxhdGl2ZShcbiAgICAgICAgICBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICl9XCIgYXMgYW4gdW5wYWNrZWQgZXh0ZW5zaW9uIG1hbnVhbGx5YCxcbiAgICAgICk7XG4gICAgfSxcbiAgICBhc3luYyBjbG9zZUJyb3dzZXIoKSB7XG4gICAgICAvLyBub29wXG4gICAgfSxcbiAgfTtcbn1cbiIsICIvKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHJ1bm5pbmcgb24gV1NMIG9yIFdTTDIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc1dzbCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgeyBkZWZhdWx0OiBpc1dzbCB9ID0gYXdhaXQgaW1wb3J0KCdpcy13c2wnKTsgLy8gRVNNIG9ubHksIHJlcXVpcmVzIGR5bmFtaWMgaW1wb3J0XG4gIHJldHVybiBpc1dzbDtcbn1cbiIsICJpbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEV4dGVuc2lvblJ1bm5lciB9IGZyb20gJy4vZXh0ZW5zaW9uLXJ1bm5lcic7XG5pbXBvcnQgeyBjcmVhdGVXc2xSdW5uZXIgfSBmcm9tICcuL3dzbCc7XG5pbXBvcnQgeyBjcmVhdGVXZWJFeHRSdW5uZXIgfSBmcm9tICcuL3dlYi1leHQnO1xuaW1wb3J0IHsgY3JlYXRlU2FmYXJpUnVubmVyIH0gZnJvbSAnLi9zYWZhcmknO1xuaW1wb3J0IHsgY3JlYXRlTWFudWFsUnVubmVyIH0gZnJvbSAnLi9tYW51YWwnO1xuaW1wb3J0IHsgaXNXc2wgfSBmcm9tICcuLi91dGlscy93c2wnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRXh0ZW5zaW9uUnVubmVyKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxFeHRlbnNpb25SdW5uZXI+IHtcbiAgaWYgKGNvbmZpZy5icm93c2VyID09PSAnc2FmYXJpJykgcmV0dXJuIGNyZWF0ZVNhZmFyaVJ1bm5lcigpO1xuXG4gIGlmIChhd2FpdCBpc1dzbCgpKSByZXR1cm4gY3JlYXRlV3NsUnVubmVyKCk7XG4gIGlmIChjb25maWcucnVubmVyQ29uZmlnLmNvbmZpZz8uZGlzYWJsZWQpIHJldHVybiBjcmVhdGVNYW51YWxSdW5uZXIoKTtcblxuICByZXR1cm4gY3JlYXRlV2ViRXh0UnVubmVyKCk7XG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBnbG9iIGZyb20gJ2Zhc3QtZ2xvYic7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuaW1wb3J0IHBjIGZyb20gJ3BpY29jb2xvcnMnO1xuXG4vKipcbiAqIFJlbW92ZSBnZW5lcmF0ZWQvdGVtcCBmaWxlcyBmcm9tIHRoZSBkaXJlY3RvcnkuXG4gKlxuICogQHBhcmFtIHJvb3QgVGhlIGRpcmVjdG9yeSB0byBsb29rIGZvciBnZW5lcmF0ZWQvdGVtcCBmaWxlcyBpbi4gRGVmYXVsdHMgdG8gYHByb2Nlc3MuY3dkKClgLiBDYW4gYmUgcmVsYXRpdmUgdG8gYHByb2Nlc3MuY3dkKClgIG9yIGFic29sdXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYW4ocm9vdCA9IHByb2Nlc3MuY3dkKCkpIHtcbiAgY29uc29sYS5pbmZvKCdDbGVhbmluZyBQcm9qZWN0Jyk7XG5cbiAgY29uc3QgdGVtcERpcnMgPSBbXG4gICAgJ25vZGVfbW9kdWxlcy8udml0ZScsXG4gICAgJ25vZGVfbW9kdWxlcy8uY2FjaGUnLFxuICAgICcqKi8ud3h0JyxcbiAgICAnLm91dHB1dC8qJyxcbiAgXTtcbiAgY29uc29sYS5kZWJ1ZygnTG9va2luZyBmb3I6JywgdGVtcERpcnMubWFwKHBjLmN5YW4pLmpvaW4oJywgJykpO1xuICBjb25zdCBkaXJlY3RvcmllcyA9IGF3YWl0IGdsb2IodGVtcERpcnMsIHtcbiAgICBjd2Q6IHBhdGgucmVzb2x2ZShyb290KSxcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBvbmx5RGlyZWN0b3JpZXM6IHRydWUsXG4gICAgZGVlcDogMixcbiAgfSk7XG4gIGlmIChkaXJlY3Rvcmllcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xhLmRlYnVnKCdObyBnZW5lcmF0ZWQgZmlsZXMgZm91bmQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc29sYS5kZWJ1ZyhcbiAgICAnRm91bmQ6JyxcbiAgICBkaXJlY3Rvcmllcy5tYXAoKGRpcikgPT4gcGMuY3lhbihwYXRoLnJlbGF0aXZlKHJvb3QsIGRpcikpKS5qb2luKCcsICcpLFxuICApO1xuICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBkaXJlY3Rvcmllcykge1xuICAgIGF3YWl0IGZzLnJtKGRpcmVjdG9yeSwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnNvbGEuZGVidWcoJ0RlbGV0ZWQgJyArIHBjLmN5YW4ocGF0aC5yZWxhdGl2ZShyb290LCBkaXJlY3RvcnkpKSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMb2dMZXZlbHMsIGNvbnNvbGEgfSBmcm9tICdjb25zb2xhJztcbmltcG9ydCB7IHByaW50SGVhZGVyIH0gZnJvbSAnLi4vLi4vY29yZS9sb2cvcHJpbnRIZWFkZXInO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2Zvcm1hdER1cmF0aW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbW1hbmQ8VEFyZ3MgZXh0ZW5kcyBhbnlbXT4oXG4gIGNiOiAoLi4uYXJnczogVEFyZ3MpID0+IHZvaWQgfCBib29sZWFuIHwgUHJvbWlzZTx2b2lkIHwgYm9vbGVhbj4sXG4gIG9wdGlvbnM/OiB7XG4gICAgZGlzYWJsZUZpbmlzaGVkTG9nPzogYm9vbGVhbjtcbiAgfSxcbikge1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IFRBcmdzKSA9PiB7XG4gICAgLy8gRW5hYmxlIGNvbnNvbGEncyBkZWJ1ZyBtb2RlIGdsb2JhbGx5IGF0IHRoZSBzdGFydCBvZiBhbGwgY29tbWFuZHMgd2hlbiB0aGUgYC0tZGVidWdgIGZsYWcgaXNcbiAgICAvLyBwYXNzZWRcbiAgICBjb25zdCBpc0RlYnVnID0gISFhcmdzLmZpbmQoKGFyZykgPT4gYXJnPy5kZWJ1Zyk7XG4gICAgaWYgKGlzRGVidWcpIHtcbiAgICAgIGNvbnNvbGEubGV2ZWwgPSBMb2dMZXZlbHMuZGVidWc7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0cnkge1xuICAgICAgcHJpbnRIZWFkZXIoKTtcblxuICAgICAgY29uc3Qgb25nb2luZyA9IGF3YWl0IGNiKC4uLmFyZ3MpO1xuXG4gICAgICBpZiAoIW9uZ29pbmcgJiYgIW9wdGlvbnM/LmRpc2FibGVGaW5pc2hlZExvZylcbiAgICAgICAgY29uc29sYS5zdWNjZXNzKFxuICAgICAgICAgIGBGaW5pc2hlZCBpbiAke2Zvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydFRpbWUpfWAsXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xhLmZhaWwoXG4gICAgICAgIGBDb21tYW5kIGZhaWxlZCBhZnRlciAke2Zvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydFRpbWUpfWAsXG4gICAgICApO1xuICAgICAgY29uc29sYS5lcnJvcihlcnIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfTtcbn1cbiIsICJpbXBvcnQgcGMgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRIZWFkZXIoKSB7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGEubG9nKGAke3BjLmdyYXkoJ1dYVCcpfSAke3BjLmdyYXkocGMuYm9sZCh2ZXJzaW9uKSl9YCk7XG59XG4iLCAiaW1wb3J0ICogYXMgd3h0IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkID0gZGVmaW5lQ29tbWFuZDxcbiAgW1xuICAgIHJvb3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBmbGFnczoge1xuICAgICAgbW9kZT86IHN0cmluZztcbiAgICAgIGNvbmZpZz86IHN0cmluZztcbiAgICAgIGJyb3dzZXI/OiB3eHQuVGFyZ2V0QnJvd3NlcjtcbiAgICAgIG12Mz86IGJvb2xlYW47XG4gICAgICBtdjI/OiBib29sZWFuO1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgYW5hbHl6ZT86IGJvb2xlYW47XG4gICAgfSxcbiAgXVxuPihhc3luYyAocm9vdCwgZmxhZ3MpID0+IHtcbiAgY29uc3QgY2xpQ29uZmlnOiB3eHQuSW5saW5lQ29uZmlnID0ge1xuICAgIHJvb3QsXG4gICAgbW9kZTogZmxhZ3MubW9kZSxcbiAgICBicm93c2VyOiBmbGFncy5icm93c2VyLFxuICAgIG1hbmlmZXN0VmVyc2lvbjogZmxhZ3MubXYzID8gMyA6IGZsYWdzLm12MiA/IDIgOiB1bmRlZmluZWQsXG4gICAgY29uZmlnRmlsZTogZmxhZ3MuY29uZmlnLFxuICAgIGRlYnVnOiBmbGFncy5kZWJ1ZyxcbiAgICBhbmFseXNpczoge1xuICAgICAgZW5hYmxlZDogZmxhZ3MuYW5hbHl6ZSxcbiAgICB9LFxuICB9O1xuXG4gIGF3YWl0IHd4dC5idWlsZChjbGlDb25maWcpO1xufSk7XG4iLCAiaW1wb3J0ICogYXMgd3h0IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcblxuZXhwb3J0IGNvbnN0IGRldiA9IGRlZmluZUNvbW1hbmQ8XG4gIFtcbiAgICByb290OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZmxhZ3M6IHtcbiAgICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgICBjb25maWc/OiBzdHJpbmc7XG4gICAgICBicm93c2VyPzogd3h0LlRhcmdldEJyb3dzZXI7XG4gICAgICBtdjM/OiBib29sZWFuO1xuICAgICAgbXYyPzogYm9vbGVhbjtcbiAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB9LFxuICBdXG4+KGFzeW5jIChyb290LCBmbGFncykgPT4ge1xuICBjb25zdCBjbGlDb25maWc6IHd4dC5JbmxpbmVDb25maWcgPSB7XG4gICAgcm9vdCxcbiAgICBtb2RlOiBmbGFncy5tb2RlLFxuICAgIGJyb3dzZXI6IGZsYWdzLmJyb3dzZXIsXG4gICAgbWFuaWZlc3RWZXJzaW9uOiBmbGFncy5tdjMgPyAzIDogZmxhZ3MubXYyID8gMiA6IHVuZGVmaW5lZCxcbiAgICBjb25maWdGaWxlOiBmbGFncy5jb25maWcsXG4gICAgZGVidWc6IGZsYWdzLmRlYnVnLFxuICB9O1xuXG4gIGNvbnN0IHNlcnZlciA9IGF3YWl0IHd4dC5jcmVhdGVTZXJ2ZXIoY2xpQ29uZmlnKTtcbiAgYXdhaXQgc2VydmVyLnN0YXJ0KCk7XG5cbiAgcmV0dXJuIHRydWU7XG59KTtcbiIsICJpbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5pbXBvcnQgcHJvbXB0cyBmcm9tICdwcm9tcHRzJztcbmltcG9ydCB7IGNvbnNvbGEgfSBmcm9tICdjb25zb2xhJztcbmltcG9ydCB7IGRvd25sb2FkVGVtcGxhdGUgfSBmcm9tICdnaWdldCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwYyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gJ3BpY29jb2xvcnMvdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgaW5pdCA9IGRlZmluZUNvbW1hbmQ8XG4gIFtcbiAgICBkaXJlY3Rvcnk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBvcHRpb25zOiB7IHRlbXBsYXRlPzogc3RyaW5nOyBwbT86IHN0cmluZzsgZGVidWc/OiBib29sZWFuIH0sXG4gIF1cbj4oXG4gIGFzeW5jICh1c2VyRGlyZWN0b3J5LCBmbGFncykgPT4ge1xuICAgIGNvbnNvbGEuaW5mbygnSW5pdGFsaXppbmcgbmV3IHByb2plY3QnKTtcblxuICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IGxpc3RUZW1wbGF0ZXMoKTtcbiAgICBjb25zdCBkZWZhdWx0VGVtcGxhdGUgPSB0ZW1wbGF0ZXMuZmluZChcbiAgICAgICh0ZW1wbGF0ZSkgPT4gdGVtcGxhdGUubmFtZSA9PT0gZmxhZ3MudGVtcGxhdGU/LnRvTG93ZXJDYXNlKCkudHJpbSgpLFxuICAgICk7XG5cbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHByb21wdHMoXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZGlyZWN0b3J5JyxcbiAgICAgICAgICB0eXBlOiAoKSA9PiAodXNlckRpcmVjdG9yeSA9PSBudWxsID8gJ3RleHQnIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICBtZXNzYWdlOiAnUHJvamVjdCBEaXJlY3RvcnknLFxuICAgICAgICAgIGluaXRpYWw6IHVzZXJEaXJlY3RvcnksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAndGVtcGxhdGUnLFxuICAgICAgICAgIHR5cGU6ICgpID0+IChkZWZhdWx0VGVtcGxhdGUgPT0gbnVsbCA/ICdzZWxlY3QnIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgdGVtcGxhdGUnLFxuICAgICAgICAgIGNob2ljZXM6IHRlbXBsYXRlcy5tYXAoKHRlbXBsYXRlKSA9PiAoe1xuICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgIFRFTVBMQVRFX0NPTE9SU1t0ZW1wbGF0ZS5uYW1lXT8uKHRlbXBsYXRlLm5hbWUpID8/IHRlbXBsYXRlLm5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogdGVtcGxhdGUsXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3BhY2thZ2VNYW5hZ2VyJyxcbiAgICAgICAgICB0eXBlOiAoKSA9PiAoZmxhZ3MucG0gPT0gbnVsbCA/ICdzZWxlY3QnIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICBtZXNzYWdlOiAnUGFja2FnZSBNYW5hZ2VyJyxcbiAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICB7IHRpdGxlOiAnbnBtJywgdmFsdWU6ICducG0nIH0sXG4gICAgICAgICAgICB7IHRpdGxlOiAncG5wbScsIHZhbHVlOiAncG5wbScgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6ICd5YXJuJywgdmFsdWU6ICd5YXJuJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAge1xuICAgICAgICBvbkNhbmNlbDogKCkgPT4gcHJvY2Vzcy5leGl0KDEpLFxuICAgICAgfSxcbiAgICApO1xuICAgIGlucHV0LmRpcmVjdG9yeSA/Pz0gdXNlckRpcmVjdG9yeTtcbiAgICBpbnB1dC50ZW1wbGF0ZSA/Pz0gZGVmYXVsdFRlbXBsYXRlO1xuICAgIGlucHV0LnBhY2thZ2VNYW5hZ2VyID8/PSBmbGFncy5wbTtcblxuICAgIGF3YWl0IGNsb25lUHJvamVjdChpbnB1dCk7XG5cbiAgICBjb25zdCBjZFBhdGggPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIHBhdGgucmVzb2x2ZShpbnB1dC5kaXJlY3RvcnkpKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGNvbnNvbGEubG9nKFxuICAgICAgYFx1MjcyOCBXWFQgcHJvamVjdCBjcmVhdGVkIHdpdGggdGhlICR7XG4gICAgICAgIFRFTVBMQVRFX0NPTE9SU1tpbnB1dC50ZW1wbGF0ZS5uYW1lXT8uKGlucHV0LnRlbXBsYXRlLm5hbWUpID8/XG4gICAgICAgIGlucHV0LnRlbXBsYXRlLm5hbWVcbiAgICAgIH0gdGVtcGxhdGUuYCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sYS5sb2coJ05leHQgc3RlcHM6Jyk7XG4gICAgbGV0IHN0ZXAgPSAwO1xuICAgIGlmIChjZFBhdGggIT09ICcnKSBjb25zb2xhLmxvZyhgICAkeysrc3RlcH0uYCwgcGMuY3lhbihgY2QgJHtjZFBhdGh9YCkpO1xuICAgIGNvbnNvbGEubG9nKGAgICR7KytzdGVwfS5gLCBwYy5jeWFuKGAke2lucHV0LnBhY2thZ2VNYW5hZ2VyfSBpbnN0YWxsYCkpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gIH0sXG4gIHsgZGlzYWJsZUZpbmlzaGVkTG9nOiB0cnVlIH0sXG4pO1xuXG5pbnRlcmZhY2UgVGVtcGxhdGUge1xuICAvKipcbiAgICogVGVtcGxhdGUncyBuYW1lLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogUGF0aCB0byB0ZW1wbGF0ZSBkaXJlY3RvcnkgaW4gZ2l0aHViIHJlcG8uXG4gICAqL1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3RUZW1wbGF0ZXMoKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy93eHQtZGV2L3d4dC9jb250ZW50cy90ZW1wbGF0ZXMnLFxuICAgICAge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uJyxcbiAgICAgICAgICAnWC1HaXRIdWItQXBpLVZlcnNpb24nOiAnMjAyMi0xMS0yOCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgaWYgKHJlcy5zdGF0dXMgPj0gMzAwKVxuICAgICAgdGhyb3cgRXJyb3IoYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzLnN0YXR1c30gJHtyZXMuc3RhdHVzVGV4dH1gKTtcblxuICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgQXJyYXk8e1xuICAgICAgdHlwZTogJ2ZpbGUnIHwgJ2Rpcic7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICBwYXRoOiBzdHJpbmc7XG4gICAgfT47XG4gICAgcmV0dXJuIGRhdGFcbiAgICAgIC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS50eXBlID09PSAnZGlyJylcbiAgICAgIC5tYXAoKGl0ZW0pID0+ICh7IG5hbWU6IGl0ZW0ubmFtZSwgcGF0aDogaXRlbS5wYXRoIH0pKVxuICAgICAgLnNvcnQoKGwsIHIpID0+IHtcbiAgICAgICAgY29uc3QgbFdlaWdodCA9IFRFTVBMQVRFX1NPUlRfV0VJR0hUW2wubmFtZV0gPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgIGNvbnN0IHJXZWlnaHQgPSBURU1QTEFURV9TT1JUX1dFSUdIVFtyLm5hbWVdID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgICAgICBjb25zdCBkaWZmID0gbFdlaWdodCAtIHJXZWlnaHQ7XG4gICAgICAgIGlmIChkaWZmICE9PSAwKSByZXR1cm4gZGlmZjtcbiAgICAgICAgcmV0dXJuIGwubmFtZS5sb2NhbGVDb21wYXJlKHIubmFtZSk7XG4gICAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgRXJyb3IoYENhbm5vdCBsb2FkIHRlbXBsYXRlczogJHtKU09OLnN0cmluZ2lmeShlcnIsIG51bGwsIDIpfWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsb25lUHJvamVjdCh7XG4gIGRpcmVjdG9yeSxcbiAgdGVtcGxhdGUsXG4gIHBhY2thZ2VNYW5hZ2VyLFxufToge1xuICBkaXJlY3Rvcnk6IHN0cmluZztcbiAgdGVtcGxhdGU6IFRlbXBsYXRlO1xuICBwYWNrYWdlTWFuYWdlcjogc3RyaW5nO1xufSkge1xuICBjb25zdCB7IGRlZmF1bHQ6IG9yYSB9ID0gYXdhaXQgaW1wb3J0KCdvcmEnKTtcbiAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnRG93bmxvYWRpbmcgdGVtcGxhdGUnKS5zdGFydCgpO1xuICB0cnkge1xuICAgIC8vIDEuIENsb25lIHJlcG9cbiAgICBhd2FpdCBkb3dubG9hZFRlbXBsYXRlKGBnaDp3eHQtZGV2L3d4dC8ke3RlbXBsYXRlLnBhdGh9YCwge1xuICAgICAgZGlyOiBkaXJlY3RvcnksXG4gICAgICBmb3JjZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIDIuIE1vdmUgX2dpdGlnbm9yZSAtPiAuZ2l0aWdub3JlXG4gICAgYXdhaXQgZnNcbiAgICAgIC5tb3ZlKFxuICAgICAgICBwYXRoLmpvaW4oZGlyZWN0b3J5LCAnX2dpdGlnbm9yZScpLFxuICAgICAgICBwYXRoLmpvaW4oZGlyZWN0b3J5LCAnLmdpdGlnbm9yZScpLFxuICAgICAgKVxuICAgICAgLmNhdGNoKChlcnIpID0+XG4gICAgICAgIGNvbnNvbGEud2FybignRmFpbGVkIHRvIG1vdmUgX2dpdGlnbm9yZSB0byAuZ2l0aWdub3JlOicsIGVyciksXG4gICAgICApO1xuXG4gICAgLy8gMy4gQWRkIC5ucG1yYyBmb3IgcG5wbVxuICAgIGlmIChwYWNrYWdlTWFuYWdlciA9PT0gJ3BucG0nKSB7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICAgIHBhdGguam9pbihkaXJlY3RvcnksICcubnBtcmMnKSxcbiAgICAgICAgJ3NoYW1lZnVsbHktaG9pc3Q9dHJ1ZVxcbicsXG4gICAgICApO1xuICAgIH1cblxuICAgIHNwaW5uZXIuc3VjY2VlZCgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzcGlubmVyLmZhaWwoKTtcbiAgICB0aHJvdyBFcnJvcihgRmFpbGVkIHRvIHNldHVwIG5ldyBwcm9qZWN0OiAke0pTT04uc3RyaW5naWZ5KGVyciwgbnVsbCwgMil9YCk7XG4gIH1cbn1cblxuY29uc3QgVEVNUExBVEVfQ09MT1JTOiBSZWNvcmQ8c3RyaW5nLCBGb3JtYXR0ZXI+ID0ge1xuICB2YW5pbGxhOiBwYy5ibHVlLFxuICB2dWU6IHBjLmdyZWVuLFxuICByZWFjdDogcGMuY3lhbixcbiAgc3ZlbHRlOiBwYy5yZWQsXG4gIHNvbGlkOiBwYy5ibHVlLFxufTtcblxuY29uc3QgVEVNUExBVEVfU09SVF9XRUlHSFQ6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gIHZhbmlsbGE6IDAsXG4gIHZ1ZTogMSxcbiAgcmVhY3Q6IDIsXG59O1xuIiwgImltcG9ydCB7IGdldEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9nZXRJbnRlcm5hbENvbmZpZyc7XG5pbXBvcnQgeyBmaW5kRW50cnlwb2ludHMgfSBmcm9tICcuLi8uLi9jb3JlL2J1aWxkL2ZpbmRFbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVR5cGVzRGlyIH0gZnJvbSAnLi4vLi4vY29yZS9idWlsZC9nZW5lcmF0ZVR5cGVzRGlyJztcbmltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcbmltcG9ydCAqIGFzIHd4dCBmcm9tICcuLi8uLic7XG5cbmV4cG9ydCBjb25zdCBwcmVwYXJlID0gZGVmaW5lQ29tbWFuZDxcbiAgW1xuICAgIHJvb3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBmbGFnczoge1xuICAgICAgY29uZmlnPzogc3RyaW5nO1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgIH0sXG4gIF1cbj4oYXN5bmMgKHJvb3QsIGZsYWdzKSA9PiB7XG4gIGNvbnN0IGNsaUNvbmZpZzogd3h0LklubGluZUNvbmZpZyA9IHtcbiAgICByb290LFxuICAgIGNvbmZpZ0ZpbGU6IGZsYWdzLmNvbmZpZyxcbiAgICBkZWJ1ZzogZmxhZ3MuZGVidWcsXG4gIH07XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGdldEludGVybmFsQ29uZmlnKGNsaUNvbmZpZywgJ2J1aWxkJyk7XG5cbiAgY29uZmlnLmxvZ2dlci5pbmZvKCdHZW5lcmF0aW5nIHR5cGVzLi4uJyk7XG5cbiAgY29uc3QgZW50cnlwb2ludHMgPSBhd2FpdCBmaW5kRW50cnlwb2ludHMoY29uZmlnKTtcbiAgYXdhaXQgZ2VuZXJhdGVUeXBlc0RpcihlbnRyeXBvaW50cywgY29uZmlnKTtcbn0pO1xuIiwgImltcG9ydCB7IGNvbnNvbGEgfSBmcm9tICdjb25zb2xhJztcbmltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcblxuZXhwb3J0IGNvbnN0IHB1Ymxpc2ggPSBkZWZpbmVDb21tYW5kKFxuICBhc3luYyAoXG4gICAgcm9vdDogYW55LFxuICAgIHsgY29uZmlnOiBjb25maWdGaWxlLCBkZWJ1ZyB9OiB7IGNvbmZpZz86IHN0cmluZzsgZGVidWc/OiBzdHJpbmcgfSxcbiAgKSA9PiB7XG4gICAgY29uc29sYS53YXJuKCd3eHQgcHVibGlzaDogTm90IGltcGxlbWVudGVkJyk7XG4gIH0sXG4pO1xuIiwgImltcG9ydCB7IEJ1aWxkT3V0cHV0LCBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHppcGRpciBmcm9tICd6aXAtZGlyJztcbmltcG9ydCB7IGRpcm5hbWUsIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBrZWJhYkNhc2VBbHBoYW51bWVyaWMgfSBmcm9tICcuL3V0aWxzL3N0cmluZ3MnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZUpzb24gfSBmcm9tICcuL3V0aWxzL3BhY2thZ2UnO1xuaW1wb3J0IHsgbWluaW1hdGNoIH0gZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uIH0gZnJvbSAnLi91dGlscy9mb3JtYXREdXJhdGlvbic7XG5pbXBvcnQgeyBwcmludEZpbGVMaXN0IH0gZnJvbSAnLi9sb2cvcHJpbnRGaWxlTGlzdCc7XG5cbi8qKlxuICogWmlwIHRoZSBleHRlbnNpb24gZm9yIGRpc3RyaWJ1dGlvbi4gRG9lcyBub3QgYnVpbGQsIGp1c3QgemlwcyB0aGUgb3V0cHV0IHRoYXQgc2hvdWxkIGV4aXN0IGZvclxuICogdGhlIGdpdmVuIGNvbmZpZy5cbiAqXG4gKiBSZXR1cm5zIGEgbGlzdCBvZiBaSVAgZmlsZXMgdGhhdCB3ZXJlIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB6aXBFeHRlbnNpb24oXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIGJ1aWxkT3V0cHV0OiBCdWlsZE91dHB1dCxcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICBjb25maWcubG9nZ2VyLmluZm8oJ1ppcHBpbmcgZXh0ZW5zaW9uLi4uJyk7XG4gIGNvbnN0IHppcEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0IHByb2plY3ROYW1lID1cbiAgICBjb25maWcuemlwLm5hbWUgPz9cbiAgICBrZWJhYkNhc2VBbHBoYW51bWVyaWMoXG4gICAgICAoYXdhaXQgZ2V0UGFja2FnZUpzb24oY29uZmlnKSk/Lm5hbWUgfHwgZGlybmFtZShwcm9jZXNzLmN3ZCgpKSxcbiAgICApO1xuICBjb25zdCBhcHBseVRlbXBsYXRlID0gKHRlbXBsYXRlOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICB0ZW1wbGF0ZVxuICAgICAgLnJlcGxhY2VBbGwoJ3t7bmFtZX19JywgcHJvamVjdE5hbWUpXG4gICAgICAucmVwbGFjZUFsbCgne3ticm93c2VyfX0nLCBjb25maWcuYnJvd3NlcilcbiAgICAgIC5yZXBsYWNlQWxsKFxuICAgICAgICAne3t2ZXJzaW9ufX0nLFxuICAgICAgICBidWlsZE91dHB1dC5tYW5pZmVzdC52ZXJzaW9uX25hbWUgPz8gYnVpbGRPdXRwdXQubWFuaWZlc3QudmVyc2lvbixcbiAgICAgIClcbiAgICAgIC5yZXBsYWNlQWxsKCd7e21hbmlmZXN0VmVyc2lvbn19JywgYG12JHtjb25maWcubWFuaWZlc3RWZXJzaW9ufWApO1xuXG4gIGF3YWl0IGZzLmVuc3VyZURpcihjb25maWcub3V0QmFzZURpcik7XG5cbiAgLy8gWklQIG91dHB1dCBkaXJlY3RvcnlcblxuICBjb25zdCBvdXRaaXBGaWxlbmFtZSA9IGFwcGx5VGVtcGxhdGUoY29uZmlnLnppcC5hcnRpZmFjdFRlbXBsYXRlKTtcbiAgY29uc3Qgb3V0WmlwUGF0aCA9IHJlc29sdmUoY29uZmlnLm91dEJhc2VEaXIsIG91dFppcEZpbGVuYW1lKTtcbiAgYXdhaXQgemlwZGlyKGNvbmZpZy5vdXREaXIsIHtcbiAgICBzYXZlVG86IG91dFppcFBhdGgsXG4gIH0pO1xuICB6aXBGaWxlcy5wdXNoKG91dFppcFBhdGgpO1xuXG4gIC8vIFpJUCBzb3VyY2VzIGZvciBGaXJlZm94XG5cbiAgaWYgKGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcpIHtcbiAgICBjb25zdCBzb3VyY2VzWmlwRmlsZW5hbWUgPSBhcHBseVRlbXBsYXRlKGNvbmZpZy56aXAuc291cmNlc1RlbXBsYXRlKTtcbiAgICBjb25zdCBzb3VyY2VzWmlwUGF0aCA9IHJlc29sdmUoY29uZmlnLm91dEJhc2VEaXIsIHNvdXJjZXNaaXBGaWxlbmFtZSk7XG4gICAgYXdhaXQgemlwZGlyKGNvbmZpZy56aXAuc291cmNlc1Jvb3QsIHtcbiAgICAgIHNhdmVUbzogc291cmNlc1ppcFBhdGgsXG4gICAgICBmaWx0ZXIocGF0aCkge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShjb25maWcuemlwLnNvdXJjZXNSb290LCBwYXRoKTtcbiAgICAgICAgY29uc3QgbWF0Y2hlZFBhdHRlcm4gPSBjb25maWcuemlwLmlnbm9yZWRTb3VyY2VzLmZpbmQoKHBhdHRlcm4pID0+XG4gICAgICAgICAgbWluaW1hdGNoKHJlbGF0aXZlUGF0aCwgcGF0dGVybiksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBtYXRjaGVkUGF0dGVybiA9PSBudWxsO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICB6aXBGaWxlcy5wdXNoKHNvdXJjZXNaaXBQYXRoKTtcbiAgfVxuXG4gIGF3YWl0IHByaW50RmlsZUxpc3QoXG4gICAgY29uZmlnLmxvZ2dlci5zdWNjZXNzLFxuICAgIGBaaXBwZWQgZXh0ZW5zaW9uIGluICR7Zm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIHN0YXJ0KX1gLFxuICAgIGNvbmZpZy5vdXRCYXNlRGlyLFxuICAgIHppcEZpbGVzLFxuICApO1xuXG4gIHJldHVybiB6aXBGaWxlcztcbn1cbiIsICJpbXBvcnQgKiBhcyB3eHQgZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgYnVpbGRJbnRlcm5hbCB9IGZyb20gJy4uLy4uL2NvcmUvYnVpbGQnO1xuaW1wb3J0IHsgZ2V0SW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2dldEludGVybmFsQ29uZmlnJztcbmltcG9ydCB7IHppcEV4dGVuc2lvbiB9IGZyb20gJy4uLy4uL2NvcmUvemlwJztcbmltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcblxuZXhwb3J0IGNvbnN0IHppcCA9IGRlZmluZUNvbW1hbmQ8XG4gIFtcbiAgICByb290OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZmxhZ3M6IHtcbiAgICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgICBjb25maWc/OiBzdHJpbmc7XG4gICAgICBicm93c2VyPzogd3h0LlRhcmdldEJyb3dzZXI7XG4gICAgICBtdjM/OiBib29sZWFuO1xuICAgICAgbXYyPzogYm9vbGVhbjtcbiAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB9LFxuICBdXG4+KGFzeW5jIChyb290LCBmbGFncykgPT4ge1xuICBjb25zdCBjbGlDb25maWc6IHd4dC5JbmxpbmVDb25maWcgPSB7XG4gICAgcm9vdCxcbiAgICBtb2RlOiBmbGFncy5tb2RlLFxuICAgIGJyb3dzZXI6IGZsYWdzLmJyb3dzZXIsXG4gICAgbWFuaWZlc3RWZXJzaW9uOiBmbGFncy5tdjMgPyAzIDogZmxhZ3MubXYyID8gMiA6IHVuZGVmaW5lZCxcbiAgICBjb25maWdGaWxlOiBmbGFncy5jb25maWcsXG4gICAgZGVidWc6IGZsYWdzLmRlYnVnLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGdldEludGVybmFsQ29uZmlnKGNsaUNvbmZpZywgJ2J1aWxkJyk7XG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IGJ1aWxkSW50ZXJuYWwoY29uZmlnKTtcbiAgYXdhaXQgemlwRXh0ZW5zaW9uKGNvbmZpZywgb3V0cHV0KTtcbn0pO1xuIiwgImltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcbmltcG9ydCAqIGFzIHd4dCBmcm9tICcuLi8uLic7XG5cbmV4cG9ydCBjb25zdCBjbGVhbiA9IGRlZmluZUNvbW1hbmQ8XG4gIFtcbiAgICByb290OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZmxhZ3M6IHtcbiAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB9LFxuICBdXG4+KHd4dC5jbGVhbik7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSwwRUFBQUEsU0FBQTtBQUFBO0FBQUEsSUFBQUEsUUFBTyxVQUFVO0FBQ2pCLFVBQU0sT0FBTztBQUViLFFBQUlDLE9BQUssUUFBUSxJQUFJO0FBRXJCLGFBQVMsYUFBY0MsUUFBTSxTQUFTO0FBQ3BDLFVBQUksVUFBVSxRQUFRLFlBQVksU0FDaEMsUUFBUSxVQUFVLFFBQVEsSUFBSTtBQUVoQyxVQUFJLENBQUMsU0FBUztBQUNaLGVBQU87QUFBQSxNQUNUO0FBRUEsZ0JBQVUsUUFBUSxNQUFNLEdBQUc7QUFDM0IsVUFBSSxRQUFRLFFBQVEsRUFBRSxNQUFNLElBQUk7QUFDOUIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxlQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQ3ZDLFlBQUksSUFBSSxRQUFRLENBQUMsRUFBRSxZQUFZO0FBQy9CLFlBQUksS0FBS0EsT0FBSyxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsWUFBWSxNQUFNLEdBQUc7QUFDbkQsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBRUEsYUFBUyxVQUFXLE1BQU1BLFFBQU0sU0FBUztBQUN2QyxVQUFJLENBQUMsS0FBSyxlQUFlLEtBQUssQ0FBQyxLQUFLLE9BQU8sR0FBRztBQUM1QyxlQUFPO0FBQUEsTUFDVDtBQUNBLGFBQU8sYUFBYUEsUUFBTSxPQUFPO0FBQUEsSUFDbkM7QUFFQSxhQUFTLE1BQU9BLFFBQU0sU0FBUyxJQUFJO0FBQ2pDLE1BQUFELEtBQUcsS0FBS0MsUUFBTSxTQUFVLElBQUksTUFBTTtBQUNoQyxXQUFHLElBQUksS0FBSyxRQUFRLFVBQVUsTUFBTUEsUUFBTSxPQUFPLENBQUM7QUFBQSxNQUNwRCxDQUFDO0FBQUEs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QUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUNBO0FBQUEsSUFDQSxVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsSUFDVCxRQUFPO0FBQUEsRUFDUDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxJQUNULFFBQU87QUFBQSxFQUNQO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLElBQ1QsUUFBTztBQUFBLEVBQ1A7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxF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LE9BQU8sU0FBUyxvQkFBb0IsRUFDcEMsT0FBTyxTQUFTLG9CQUFvQixFQUNwQyxPQUFPLGFBQWEsNEJBQTRCLEVBQ2hELE9BQWdCQyxNQUFLO0FBR3hCLElBQ0csUUFBUSxjQUFjLHFDQUFxQyxFQUMzRCxPQUFPLHVCQUF1QiwyQkFBMkIsRUFDekQsT0FBTyxxQkFBcUIsY0FBYyxFQUMxQyxPQUFPLDJCQUEyQixtQkFBbUIsRUFDckQsT0FBTyxTQUFTLG9CQUFvQixFQUNwQyxPQUFPLFNBQVMsb0JBQW9CLEVBQ3BDLE9BQWdCLEdBQUc7QUFHdEIsSUFDRyxRQUFRLGtCQUFrQiw0QkFBNEIsRUFDdEQsT0FBTyx1QkFBdUIsMkJBQTJCLEVBQ3pELE9BQWdCLE9BQU87QUFHMUIsSUFDRyxRQUFRLGdCQUFnQixrQ0FBa0MsRUFDMUQsTUFBTSxTQUFTLEVBQ2YsT0FBZ0JDLE1BQUs7QUFHeEIsSUFBSSxRQUFRLGtCQUFrQixtQkFBbUIsRUFBRSxPQUFnQixPQUFPO0FBRzFFLElBQ0csUUFBUSxvQkFBb0IsMEJBQTBCLEVBQ3RELE9BQU8sNkJBQTZCLGlCQUFpQixFQUNyRCxPQUFPLHlCQUF5Qiw4QkFBOEIsRUFDOUQsT0FBZ0IsSUFBSTtBQUV2QixJQUFJLE1BQU07IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInJlc29sdmUiLCAibW9kdWxlIiwgInBhdGgiLCAicmVzb2x2ZSIsICJtb2R1bGUiLCAicGF0aEtleSIsICJtb2R1bGUiLCAicGF0aCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJwYXRoIiwgIm1vZHVsZSIsICJmcyIsICJtb2R1bGUiLCAicGF0aCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAicHJvY2VzcyIsICJ1bmxvYWQiLCAiZW1pdCIsICJsb2FkIiwgInByb2Nlc3NSZWFsbHlFeGl0IiwgInByb2Nlc3NFbWl0IiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2V0U3RyZWFtIiwgInN0cmVhbSIsICJyZXNvbHZlIiwgIm1vZHVsZSIsICJpbXBvcnRfbm9kZV9wYXRoIiwgInZpdGUiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImZzIiwgInBhdGgiLCAiZnMiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJub3JtYWxpemVQYXRoIiwgInBhdGgiLCAibm9kZVBhdGgiLCAicGF0aCIsICJub3JtYWxpemVQYXRoIiwgImltcG9ydF9wYXRoIiwgInVybCIsICJpc09mZmxpbmUiLCAiZG5zIiwgInVybCIsICJ1cmwiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJpbXBvcnRfZnNfZXh0cmEiLCAibm9ybWFsaXplUGF0aCIsICJmcyIsICJpbXBvcnRfcGF0aCIsICJ1bmltcG9ydCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAibm9ybWFsaXplUGF0aCIsICJmcyIsICJjb25zb2xhIiwgInBhdGgiLCAiZW52IiwgInppcCIsICJnbG9iYWwiLCAiaW1wb3J0X3BpY29jb2xvcnMiLCAibm9ybWFsaXplUGF0aCIsICJpbXBvcnRfY29uc29sYSIsICJpbXBvcnRfbm9kZV9wYXRoIiwgInZpdGUiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgImZzIiwgInBhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9mc19leHRyYSIsICJmcyIsICJnbG9iIiwgInBjIiwgImdsb2JhbCIsICJmcyIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X2xpbmtlZG9tIiwgImltcG9ydF91bmltcG9ydCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAicGF0aCIsICJub3JtYWxpemVQYXRoIiwgInVuaW1wb3J0IiwgImZzIiwgImNyZWF0ZUpJVEkiLCAiaW1wb3J0X2Zhc3RfZ2xvYiIsICJnbG9iIiwgInBhdGgiLCAiSlNPTjUiLCAiZnMiLCAiaW1wb3J0X3VuaW1wb3J0IiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImZzIiwgInVuaW1wb3J0IiwgIm5vcm1hbGl6ZVBhdGgiLCAicGF0aCIsICJnbG9iYWwiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImZzIiwgInZpdGUiLCAiZnMiLCAidmVyc2lvbiIsICJvcHRpb25zIiwgIm5vcm1hbGl6ZVBhdGgiLCAiaW1wb3J0X3BpY29jb2xvcnMiLCAidml0ZSIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJpbXBvcnRfcGljb2NvbG9ycyIsICJpbXBvcnRfZnNfZXh0cmEiLCAicGF0aCIsICJmcyIsICJwYyIsICJpbXBvcnRfbm9kZV9idWZmZXIiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJpbXBvcnRfbm9kZV9jaGlsZF9wcm9jZXNzIiwgImltcG9ydF9ub2RlX3Byb2Nlc3MiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJwcm9jZXNzIiwgInVybCIsICJwYXRoIiwgIm9uZXRpbWUiLCAiaW1wb3J0X25vZGVfcHJvY2VzcyIsICJpbXBvcnRfbm9kZV9vcyIsICJwcm9jZXNzIiwgImltcG9ydF9ub2RlX29zIiwgIm9zIiwgInJlc29sdmUiLCAib25FeGl0IiwgImltcG9ydF9ub2RlX2ZzIiwgIm1lcmdlU3RyZWFtIiwgImdldFN0cmVhbSIsICJyZXNvbHZlIiwgImltcG9ydF9ub2RlX2NoaWxkX3Byb2Nlc3MiLCAiZXhwcmVzc2lvbiIsICJpbXBvcnRfbm9kZV9wcm9jZXNzIiwgInByb2Nlc3MiLCAicHJvY2VzcyIsICJjcm9zc1NwYXduIiwgInBhdGgiLCAiY2hpbGRQcm9jZXNzIiwgIiQiLCAiaW1wb3J0X2Zhc3RfZ2xvYiIsICJwYyIsICJmcyIsICJnbG9iIiwgInZpdGUiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaXNXc2wiLCAicGF0aCIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImltcG9ydF9mYXN0X2dsb2IiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9jb25zb2xhIiwgImltcG9ydF9waWNvY29sb3JzIiwgInBjIiwgImdsb2IiLCAicGF0aCIsICJmcyIsICJidWlsZCIsICJjcmVhdGVTZXJ2ZXIiLCAicGF0aCIsICJwYyIsICJpbXBvcnRfY29uc29sYSIsICJpbXBvcnRfcGljb2NvbG9ycyIsICJpbXBvcnRfY29uc29sYSIsICJwYyIsICJidWlsZCIsICJjcmVhdGVTZXJ2ZXIiLCAiaW1wb3J0X2NvbnNvbGEiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X3BpY29jb2xvcnMiLCAicHJvbXB0cyIsICJwYXRoIiwgInBjIiwgImZzIiwgImltcG9ydF9jb25zb2xhIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9taW5pbWF0Y2giLCAiZnMiLCAiemlwZGlyIiwgInBhdGgiLCAiY2xlYW4iLCAiY2FjIiwgImJ1aWxkIiwgImNsZWFuIl0KfQo=
|
|
4981
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2lzZXhlQDIuMC4wL25vZGVfbW9kdWxlcy9pc2V4ZS93aW5kb3dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9pc2V4ZUAyLjAuMC9ub2RlX21vZHVsZXMvaXNleGUvbW9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaXNleGVAMi4wLjAvbm9kZV9tb2R1bGVzL2lzZXhlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS93aGljaEAyLjAuMi9ub2RlX21vZHVsZXMvd2hpY2gvd2hpY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3BhdGgta2V5QDMuMS4xL25vZGVfbW9kdWxlcy9wYXRoLWtleS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY3Jvc3Mtc3Bhd25ANy4wLjMvbm9kZV9tb2R1bGVzL2Nyb3NzLXNwYXduL2xpYi91dGlsL3Jlc29sdmVDb21tYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jcm9zcy1zcGF3bkA3LjAuMy9ub2RlX21vZHVsZXMvY3Jvc3Mtc3Bhd24vbGliL3V0aWwvZXNjYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zaGViYW5nLXJlZ2V4QDMuMC4wL25vZGVfbW9kdWxlcy9zaGViYW5nLXJlZ2V4L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zaGViYW5nLWNvbW1hbmRAMi4wLjAvbm9kZV9tb2R1bGVzL3NoZWJhbmctY29tbWFuZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY3Jvc3Mtc3Bhd25ANy4wLjMvbm9kZV9tb2R1bGVzL2Nyb3NzLXNwYXduL2xpYi91dGlsL3JlYWRTaGViYW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jcm9zcy1zcGF3bkA3LjAuMy9ub2RlX21vZHVsZXMvY3Jvc3Mtc3Bhd24vbGliL3BhcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jcm9zcy1zcGF3bkA3LjAuMy9ub2RlX21vZHVsZXMvY3Jvc3Mtc3Bhd24vbGliL2Vub2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY3Jvc3Mtc3Bhd25ANy4wLjMvbm9kZV9tb2R1bGVzL2Nyb3NzLXNwYXduL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zaWduYWwtZXhpdEAzLjAuNy9ub2RlX21vZHVsZXMvc2lnbmFsLWV4aXQvc2lnbmFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc2lnbmFsLWV4aXRAMy4wLjcvbm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9nZXQtc3RyZWFtQDYuMC4xL25vZGVfbW9kdWxlcy9nZXQtc3RyZWFtL2J1ZmZlci1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2dldC1zdHJlYW1ANi4wLjEvbm9kZV9tb2R1bGVzL2dldC1zdHJlYW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21lcmdlLXN0cmVhbUAyLjAuMC9ub2RlX21vZHVsZXMvbWVyZ2Utc3RyZWFtL2luZGV4LmpzIiwgIi4uL3NyYy9jbGkvaW5kZXgudHMiLCAiLi4vcGFja2FnZS5qc29uIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2dldEludGVybmFsQ29uZmlnLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2NyZWF0ZUZzQ2FjaGUudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZnMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvcGF0aHMudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL2Rldkh0bWxQcmVyZW5kZXIudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL2RldlNlcnZlckdsb2JhbHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvbmV0d29yay50cyIsICIuLi9zcmMvY29yZS91dGlscy9wcm9taXNlcy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvZG93bmxvYWQudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL211bHRpcGFnZU1vdmUudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL3VuaW1wb3J0LnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2F1dG8taW1wb3J0cy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvdmlydHVhbEVudHJ5cG9pbnQudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL3RzY29uZmlnUGF0aHMudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL25vb3BCYWNrZ3JvdW5kLnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy9jc3NFbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvYnVuZGxlQW5hbHlzaXMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZ2xvYmFscy50cyIsICIuLi9zcmMvaW5kZXgudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvYXJyYXlzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2RldGVjdERldkNoYW5nZXMudHMiLCAiLi4vc3JjL2NvcmUvYnVpbGQvYnVpbGRFbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9yZW1vdmVFbXB0eURpcnMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvcHVibGljLnRzIiwgIi4uL3NyYy9jb3JlL2J1aWxkL2ZpbmRFbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9pbXBvcnRFbnRyeXBvaW50RmlsZS50cyIsICIuLi9zcmMvY29yZS91dGlscy9zdHJpbmdzLnRzIiwgIi4uL3NyYy9jb3JlL2J1aWxkL2dlbmVyYXRlVHlwZXNEaXIudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvaTE4bi50cyIsICIuLi9zcmMvY29yZS91dGlscy9tYW5pZmVzdC50cyIsICIuLi9zcmMvY29yZS91dGlscy9Db250ZW50U2VjdXJpdHlQb2xpY3kudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvY29udGVudC1zY3JpcHRzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3BhY2thZ2UudHMiLCAiLi4vc3JjL2NvcmUvYnVpbGQudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZ3JvdXBFbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9mb3JtYXREdXJhdGlvbi50cyIsICIuLi9zcmMvY29yZS9sb2cvcHJpbnRCdWlsZFN1bW1hcnkudHMiLCAiLi4vc3JjL2NvcmUvbG9nL3ByaW50RmlsZUxpc3QudHMiLCAiLi4vc3JjL2NvcmUvbG9nL3ByaW50VGFibGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2V4ZWNhQDcuMi4wL25vZGVfbW9kdWxlcy9leGVjYS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaXAtZmluYWwtbmV3bGluZUAzLjAuMC9ub2RlX21vZHVsZXMvc3RyaXAtZmluYWwtbmV3bGluZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbnBtLXJ1bi1wYXRoQDUuMS4wL25vZGVfbW9kdWxlcy9ucG0tcnVuLXBhdGgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3BhdGgta2V5QDQuMC4wL25vZGVfbW9kdWxlcy9wYXRoLWtleS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWltaWMtZm5ANC4wLjAvbm9kZV9tb2R1bGVzL21pbWljLWZuL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9vbmV0aW1lQDYuMC4wL25vZGVfbW9kdWxlcy9vbmV0aW1lL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9leGVjYUA3LjIuMC9ub2RlX21vZHVsZXMvZXhlY2EvbGliL2Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9odW1hbi1zaWduYWxzQDQuMy4xL25vZGVfbW9kdWxlcy9odW1hbi1zaWduYWxzL2J1aWxkL3NyYy9tYWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9odW1hbi1zaWduYWxzQDQuMy4xL25vZGVfbW9kdWxlcy9odW1hbi1zaWduYWxzL2J1aWxkL3NyYy9yZWFsdGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaHVtYW4tc2lnbmFsc0A0LjMuMS9ub2RlX21vZHVsZXMvaHVtYW4tc2lnbmFscy9idWlsZC9zcmMvc2lnbmFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaHVtYW4tc2lnbmFsc0A0LjMuMS9ub2RlX21vZHVsZXMvaHVtYW4tc2lnbmFscy9idWlsZC9zcmMvY29yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZXhlY2FANy4yLjAvbm9kZV9tb2R1bGVzL2V4ZWNhL2xpYi9zdGRpby5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZXhlY2FANy4yLjAvbm9kZV9tb2R1bGVzL2V4ZWNhL2xpYi9raWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9leGVjYUA3LjIuMC9ub2RlX21vZHVsZXMvZXhlY2EvbGliL3BpcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2lzLXN0cmVhbUAzLjAuMC9ub2RlX21vZHVsZXMvaXMtc3RyZWFtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9leGVjYUA3LjIuMC9ub2RlX21vZHVsZXMvZXhlY2EvbGliL3N0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZXhlY2FANy4yLjAvbm9kZV9tb2R1bGVzL2V4ZWNhL2xpYi9wcm9taXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9leGVjYUA3LjIuMC9ub2RlX21vZHVsZXMvZXhlY2EvbGliL2NvbW1hbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2V4ZWNhQDcuMi4wL25vZGVfbW9kdWxlcy9leGVjYS9saWIvdmVyYm9zZS5qcyIsICIuLi9zcmMvY29yZS9zZXJ2ZXIudHMiLCAiLi4vc3JjL2NvcmUvcnVubmVycy93c2wudHMiLCAiLi4vc3JjL2NvcmUvcnVubmVycy93ZWItZXh0LnRzIiwgIi4uL3NyYy9jb3JlL3J1bm5lcnMvc2FmYXJpLnRzIiwgIi4uL3NyYy9jb3JlL3J1bm5lcnMvbWFudWFsLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3dzbC50cyIsICIuLi9zcmMvY29yZS9ydW5uZXJzL2luZGV4LnRzIiwgIi4uL3NyYy9jb3JlL2NsZWFuLnRzIiwgIi4uL3NyYy9jbGkvdXRpbHMvZGVmaW5lQ29tbWFuZC50cyIsICIuLi9zcmMvY29yZS9sb2cvcHJpbnRIZWFkZXIudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy9idWlsZC50cyIsICIuLi9zcmMvY2xpL2NvbW1hbmRzL2Rldi50cyIsICIuLi9zcmMvY2xpL2NvbW1hbmRzL2luaXQudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy9wcmVwYXJlLnRzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvcHVibGlzaC50cyIsICIuLi9zcmMvY29yZS96aXAudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy96aXAudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy9jbGVhbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsibW9kdWxlLmV4cG9ydHMgPSBpc2V4ZVxuaXNleGUuc3luYyA9IHN5bmNcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKVxuXG5mdW5jdGlvbiBjaGVja1BhdGhFeHQgKHBhdGgsIG9wdGlvbnMpIHtcbiAgdmFyIHBhdGhleHQgPSBvcHRpb25zLnBhdGhFeHQgIT09IHVuZGVmaW5lZCA/XG4gICAgb3B0aW9ucy5wYXRoRXh0IDogcHJvY2Vzcy5lbnYuUEFUSEVYVFxuXG4gIGlmICghcGF0aGV4dCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBwYXRoZXh0ID0gcGF0aGV4dC5zcGxpdCgnOycpXG4gIGlmIChwYXRoZXh0LmluZGV4T2YoJycpICE9PSAtMSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHAgPSBwYXRoZXh0W2ldLnRvTG93ZXJDYXNlKClcbiAgICBpZiAocCAmJiBwYXRoLnN1YnN0cigtcC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IHApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjaGVja1N0YXQgKHN0YXQsIHBhdGgsIG9wdGlvbnMpIHtcbiAgaWYgKCFzdGF0LmlzU3ltYm9saWNMaW5rKCkgJiYgIXN0YXQuaXNGaWxlKCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gY2hlY2tQYXRoRXh0KHBhdGgsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGlzZXhlIChwYXRoLCBvcHRpb25zLCBjYikge1xuICBmcy5zdGF0KHBhdGgsIGZ1bmN0aW9uIChlciwgc3RhdCkge1xuICAgIGNiKGVyLCBlciA/IGZhbHNlIDogY2hlY2tTdGF0KHN0YXQsIHBhdGgsIG9wdGlvbnMpKVxuICB9KVxufVxuXG5mdW5jdGlvbiBzeW5jIChwYXRoLCBvcHRpb25zKSB7XG4gIHJldHVybiBjaGVja1N0YXQoZnMuc3RhdFN5bmMocGF0aCksIHBhdGgsIG9wdGlvbnMpXG59XG4iLCAibW9kdWxlLmV4cG9ydHMgPSBpc2V4ZVxuaXNleGUuc3luYyA9IHN5bmNcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKVxuXG5mdW5jdGlvbiBpc2V4ZSAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgZnMuc3RhdChwYXRoLCBmdW5jdGlvbiAoZXIsIHN0YXQpIHtcbiAgICBjYihlciwgZXIgPyBmYWxzZSA6IGNoZWNrU3RhdChzdGF0LCBvcHRpb25zKSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gc3luYyAocGF0aCwgb3B0aW9ucykge1xuICByZXR1cm4gY2hlY2tTdGF0KGZzLnN0YXRTeW5jKHBhdGgpLCBvcHRpb25zKVxufVxuXG5mdW5jdGlvbiBjaGVja1N0YXQgKHN0YXQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHN0YXQuaXNGaWxlKCkgJiYgY2hlY2tNb2RlKHN0YXQsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGNoZWNrTW9kZSAoc3RhdCwgb3B0aW9ucykge1xuICB2YXIgbW9kID0gc3RhdC5tb2RlXG4gIHZhciB1aWQgPSBzdGF0LnVpZFxuICB2YXIgZ2lkID0gc3RhdC5naWRcblxuICB2YXIgbXlVaWQgPSBvcHRpb25zLnVpZCAhPT0gdW5kZWZpbmVkID9cbiAgICBvcHRpb25zLnVpZCA6IHByb2Nlc3MuZ2V0dWlkICYmIHByb2Nlc3MuZ2V0dWlkKClcbiAgdmFyIG15R2lkID0gb3B0aW9ucy5naWQgIT09IHVuZGVmaW5lZCA/XG4gICAgb3B0aW9ucy5naWQgOiBwcm9jZXNzLmdldGdpZCAmJiBwcm9jZXNzLmdldGdpZCgpXG5cbiAgdmFyIHUgPSBwYXJzZUludCgnMTAwJywgOClcbiAgdmFyIGcgPSBwYXJzZUludCgnMDEwJywgOClcbiAgdmFyIG8gPSBwYXJzZUludCgnMDAxJywgOClcbiAgdmFyIHVnID0gdSB8IGdcblxuICB2YXIgcmV0ID0gKG1vZCAmIG8pIHx8XG4gICAgKG1vZCAmIGcpICYmIGdpZCA9PT0gbXlHaWQgfHxcbiAgICAobW9kICYgdSkgJiYgdWlkID09PSBteVVpZCB8fFxuICAgIChtb2QgJiB1ZykgJiYgbXlVaWQgPT09IDBcblxuICByZXR1cm4gcmV0XG59XG4iLCAidmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIGNvcmVcbmlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInIHx8IGdsb2JhbC5URVNUSU5HX1dJTkRPV1MpIHtcbiAgY29yZSA9IHJlcXVpcmUoJy4vd2luZG93cy5qcycpXG59IGVsc2Uge1xuICBjb3JlID0gcmVxdWlyZSgnLi9tb2RlLmpzJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc2V4ZVxuaXNleGUuc3luYyA9IHN5bmNcblxuZnVuY3Rpb24gaXNleGUgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgaWYgKCFjYikge1xuICAgIGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2FsbGJhY2sgbm90IHByb3ZpZGVkJylcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgaXNleGUocGF0aCwgb3B0aW9ucyB8fCB7fSwgZnVuY3Rpb24gKGVyLCBpcykge1xuICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICByZWplY3QoZXIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShpcylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgY29yZShwYXRoLCBvcHRpb25zIHx8IHt9LCBmdW5jdGlvbiAoZXIsIGlzKSB7XG4gICAgLy8gaWdub3JlIEVBQ0NFUyBiZWNhdXNlIHRoYXQganVzdCBtZWFucyB3ZSBhcmVuJ3QgYWxsb3dlZCB0byBydW4gaXRcbiAgICBpZiAoZXIpIHtcbiAgICAgIGlmIChlci5jb2RlID09PSAnRUFDQ0VTJyB8fCBvcHRpb25zICYmIG9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgIGVyID0gbnVsbFxuICAgICAgICBpcyA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIGNiKGVyLCBpcylcbiAgfSlcbn1cblxuZnVuY3Rpb24gc3luYyAocGF0aCwgb3B0aW9ucykge1xuICAvLyBteSBraW5nZG9tIGZvciBhIGZpbHRlcmVkIGNhdGNoXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvcmUuc3luYyhwYXRoLCBvcHRpb25zIHx8IHt9KVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaWdub3JlRXJyb3JzIHx8IGVyLmNvZGUgPT09ICdFQUNDRVMnKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gIH1cbn1cbiIsICJjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInIHx8XG4gICAgcHJvY2Vzcy5lbnYuT1NUWVBFID09PSAnY3lnd2luJyB8fFxuICAgIHByb2Nlc3MuZW52Lk9TVFlQRSA9PT0gJ21zeXMnXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IENPTE9OID0gaXNXaW5kb3dzID8gJzsnIDogJzonXG5jb25zdCBpc2V4ZSA9IHJlcXVpcmUoJ2lzZXhlJylcblxuY29uc3QgZ2V0Tm90Rm91bmRFcnJvciA9IChjbWQpID0+XG4gIE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGBub3QgZm91bmQ6ICR7Y21kfWApLCB7IGNvZGU6ICdFTk9FTlQnIH0pXG5cbmNvbnN0IGdldFBhdGhJbmZvID0gKGNtZCwgb3B0KSA9PiB7XG4gIGNvbnN0IGNvbG9uID0gb3B0LmNvbG9uIHx8IENPTE9OXG5cbiAgLy8gSWYgaXQgaGFzIGEgc2xhc2gsIHRoZW4gd2UgZG9uJ3QgYm90aGVyIHNlYXJjaGluZyB0aGUgcGF0aGVudi5cbiAgLy8ganVzdCBjaGVjayB0aGUgZmlsZSBpdHNlbGYsIGFuZCB0aGF0J3MgaXQuXG4gIGNvbnN0IHBhdGhFbnYgPSBjbWQubWF0Y2goL1xcLy8pIHx8IGlzV2luZG93cyAmJiBjbWQubWF0Y2goL1xcXFwvKSA/IFsnJ11cbiAgICA6IChcbiAgICAgIFtcbiAgICAgICAgLy8gd2luZG93cyBhbHdheXMgY2hlY2tzIHRoZSBjd2QgZmlyc3RcbiAgICAgICAgLi4uKGlzV2luZG93cyA/IFtwcm9jZXNzLmN3ZCgpXSA6IFtdKSxcbiAgICAgICAgLi4uKG9wdC5wYXRoIHx8IHByb2Nlc3MuZW52LlBBVEggfHxcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogdmVyeSB1bnVzdWFsICovICcnKS5zcGxpdChjb2xvbiksXG4gICAgICBdXG4gICAgKVxuICBjb25zdCBwYXRoRXh0RXhlID0gaXNXaW5kb3dzXG4gICAgPyBvcHQucGF0aEV4dCB8fCBwcm9jZXNzLmVudi5QQVRIRVhUIHx8ICcuRVhFOy5DTUQ7LkJBVDsuQ09NJ1xuICAgIDogJydcbiAgY29uc3QgcGF0aEV4dCA9IGlzV2luZG93cyA/IHBhdGhFeHRFeGUuc3BsaXQoY29sb24pIDogWycnXVxuXG4gIGlmIChpc1dpbmRvd3MpIHtcbiAgICBpZiAoY21kLmluZGV4T2YoJy4nKSAhPT0gLTEgJiYgcGF0aEV4dFswXSAhPT0gJycpXG4gICAgICBwYXRoRXh0LnVuc2hpZnQoJycpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGhFbnYsXG4gICAgcGF0aEV4dCxcbiAgICBwYXRoRXh0RXhlLFxuICB9XG59XG5cbmNvbnN0IHdoaWNoID0gKGNtZCwgb3B0LCBjYikgPT4ge1xuICBpZiAodHlwZW9mIG9wdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0XG4gICAgb3B0ID0ge31cbiAgfVxuICBpZiAoIW9wdClcbiAgICBvcHQgPSB7fVxuXG4gIGNvbnN0IHsgcGF0aEVudiwgcGF0aEV4dCwgcGF0aEV4dEV4ZSB9ID0gZ2V0UGF0aEluZm8oY21kLCBvcHQpXG4gIGNvbnN0IGZvdW5kID0gW11cblxuICBjb25zdCBzdGVwID0gaSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGkgPT09IHBhdGhFbnYubGVuZ3RoKVxuICAgICAgcmV0dXJuIG9wdC5hbGwgJiYgZm91bmQubGVuZ3RoID8gcmVzb2x2ZShmb3VuZClcbiAgICAgICAgOiByZWplY3QoZ2V0Tm90Rm91bmRFcnJvcihjbWQpKVxuXG4gICAgY29uc3QgcHBSYXcgPSBwYXRoRW52W2ldXG4gICAgY29uc3QgcGF0aFBhcnQgPSAvXlwiLipcIiQvLnRlc3QocHBSYXcpID8gcHBSYXcuc2xpY2UoMSwgLTEpIDogcHBSYXdcblxuICAgIGNvbnN0IHBDbWQgPSBwYXRoLmpvaW4ocGF0aFBhcnQsIGNtZClcbiAgICBjb25zdCBwID0gIXBhdGhQYXJ0ICYmIC9eXFwuW1xcXFxcXC9dLy50ZXN0KGNtZCkgPyBjbWQuc2xpY2UoMCwgMikgKyBwQ21kXG4gICAgICA6IHBDbWRcblxuICAgIHJlc29sdmUoc3ViU3RlcChwLCBpLCAwKSlcbiAgfSlcblxuICBjb25zdCBzdWJTdGVwID0gKHAsIGksIGlpKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGlpID09PSBwYXRoRXh0Lmxlbmd0aClcbiAgICAgIHJldHVybiByZXNvbHZlKHN0ZXAoaSArIDEpKVxuICAgIGNvbnN0IGV4dCA9IHBhdGhFeHRbaWldXG4gICAgaXNleGUocCArIGV4dCwgeyBwYXRoRXh0OiBwYXRoRXh0RXhlIH0sIChlciwgaXMpID0+IHtcbiAgICAgIGlmICghZXIgJiYgaXMpIHtcbiAgICAgICAgaWYgKG9wdC5hbGwpXG4gICAgICAgICAgZm91bmQucHVzaChwICsgZXh0KVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUocCArIGV4dClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKHN1YlN0ZXAocCwgaSwgaWkgKyAxKSlcbiAgICB9KVxuICB9KVxuXG4gIHJldHVybiBjYiA/IHN0ZXAoMCkudGhlbihyZXMgPT4gY2IobnVsbCwgcmVzKSwgY2IpIDogc3RlcCgwKVxufVxuXG5jb25zdCB3aGljaFN5bmMgPSAoY21kLCBvcHQpID0+IHtcbiAgb3B0ID0gb3B0IHx8IHt9XG5cbiAgY29uc3QgeyBwYXRoRW52LCBwYXRoRXh0LCBwYXRoRXh0RXhlIH0gPSBnZXRQYXRoSW5mbyhjbWQsIG9wdClcbiAgY29uc3QgZm91bmQgPSBbXVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aEVudi5sZW5ndGg7IGkgKyspIHtcbiAgICBjb25zdCBwcFJhdyA9IHBhdGhFbnZbaV1cbiAgICBjb25zdCBwYXRoUGFydCA9IC9eXCIuKlwiJC8udGVzdChwcFJhdykgPyBwcFJhdy5zbGljZSgxLCAtMSkgOiBwcFJhd1xuXG4gICAgY29uc3QgcENtZCA9IHBhdGguam9pbihwYXRoUGFydCwgY21kKVxuICAgIGNvbnN0IHAgPSAhcGF0aFBhcnQgJiYgL15cXC5bXFxcXFxcL10vLnRlc3QoY21kKSA/IGNtZC5zbGljZSgwLCAyKSArIHBDbWRcbiAgICAgIDogcENtZFxuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXRoRXh0Lmxlbmd0aDsgaiArKykge1xuICAgICAgY29uc3QgY3VyID0gcCArIHBhdGhFeHRbal1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlzID0gaXNleGUuc3luYyhjdXIsIHsgcGF0aEV4dDogcGF0aEV4dEV4ZSB9KVxuICAgICAgICBpZiAoaXMpIHtcbiAgICAgICAgICBpZiAob3B0LmFsbClcbiAgICAgICAgICAgIGZvdW5kLnB1c2goY3VyKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBjdXJcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXgpIHt9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdC5hbGwgJiYgZm91bmQubGVuZ3RoKVxuICAgIHJldHVybiBmb3VuZFxuXG4gIGlmIChvcHQubm90aHJvdylcbiAgICByZXR1cm4gbnVsbFxuXG4gIHRocm93IGdldE5vdEZvdW5kRXJyb3IoY21kKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdoaWNoXG53aGljaC5zeW5jID0gd2hpY2hTeW5jXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBwYXRoS2V5ID0gKG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRjb25zdCBlbnZpcm9ubWVudCA9IG9wdGlvbnMuZW52IHx8IHByb2Nlc3MuZW52O1xuXHRjb25zdCBwbGF0Zm9ybSA9IG9wdGlvbnMucGxhdGZvcm0gfHwgcHJvY2Vzcy5wbGF0Zm9ybTtcblxuXHRpZiAocGxhdGZvcm0gIT09ICd3aW4zMicpIHtcblx0XHRyZXR1cm4gJ1BBVEgnO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdC5rZXlzKGVudmlyb25tZW50KS5yZXZlcnNlKCkuZmluZChrZXkgPT4ga2V5LnRvVXBwZXJDYXNlKCkgPT09ICdQQVRIJykgfHwgJ1BhdGgnO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoS2V5O1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgZm9yIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Vcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBwYXRoS2V5O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHdoaWNoID0gcmVxdWlyZSgnd2hpY2gnKTtcbmNvbnN0IGdldFBhdGhLZXkgPSByZXF1aXJlKCdwYXRoLWtleScpO1xuXG5mdW5jdGlvbiByZXNvbHZlQ29tbWFuZEF0dGVtcHQocGFyc2VkLCB3aXRob3V0UGF0aEV4dCkge1xuICAgIGNvbnN0IGVudiA9IHBhcnNlZC5vcHRpb25zLmVudiB8fCBwcm9jZXNzLmVudjtcbiAgICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGhhc0N1c3RvbUN3ZCA9IHBhcnNlZC5vcHRpb25zLmN3ZCAhPSBudWxsO1xuICAgIC8vIFdvcmtlciB0aHJlYWRzIGRvIG5vdCBoYXZlIHByb2Nlc3MuY2hkaXIoKVxuICAgIGNvbnN0IHNob3VsZFN3aXRjaEN3ZCA9IGhhc0N1c3RvbUN3ZCAmJiBwcm9jZXNzLmNoZGlyICE9PSB1bmRlZmluZWQgJiYgIXByb2Nlc3MuY2hkaXIuZGlzYWJsZWQ7XG5cbiAgICAvLyBJZiBhIGN1c3RvbSBgY3dkYCB3YXMgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgcHJvY2VzcyBjd2RcbiAgICAvLyBiZWNhdXNlIGB3aGljaGAgd2lsbCBkbyBzdGF0IGNhbGxzIGJ1dCBkb2VzIG5vdCBzdXBwb3J0IGEgY3VzdG9tIGN3ZFxuICAgIGlmIChzaG91bGRTd2l0Y2hDd2QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb2Nlc3MuY2hkaXIocGFyc2VkLm9wdGlvbnMuY3dkKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvKiBFbXB0eSAqL1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgcmVzb2x2ZWQgPSB3aGljaC5zeW5jKHBhcnNlZC5jb21tYW5kLCB7XG4gICAgICAgICAgICBwYXRoOiBlbnZbZ2V0UGF0aEtleSh7IGVudiB9KV0sXG4gICAgICAgICAgICBwYXRoRXh0OiB3aXRob3V0UGF0aEV4dCA/IHBhdGguZGVsaW1pdGVyIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEVtcHR5ICovXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHNob3VsZFN3aXRjaEN3ZCkge1xuICAgICAgICAgICAgcHJvY2Vzcy5jaGRpcihjd2QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2Ugc3VjY2Vzc2Z1bGx5IHJlc29sdmVkLCBlbnN1cmUgdGhhdCBhbiBhYnNvbHV0ZSBwYXRoIGlzIHJldHVybmVkXG4gICAgLy8gTm90ZSB0aGF0IHdoZW4gYSBjdXN0b20gYGN3ZGAgd2FzIHVzZWQsIHdlIG5lZWQgdG8gcmVzb2x2ZSB0byBhbiBhYnNvbHV0ZSBwYXRoIGJhc2VkIG9uIGl0XG4gICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICAgIHJlc29sdmVkID0gcGF0aC5yZXNvbHZlKGhhc0N1c3RvbUN3ZCA/IHBhcnNlZC5vcHRpb25zLmN3ZCA6ICcnLCByZXNvbHZlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29tbWFuZChwYXJzZWQpIHtcbiAgICByZXR1cm4gcmVzb2x2ZUNvbW1hbmRBdHRlbXB0KHBhcnNlZCkgfHwgcmVzb2x2ZUNvbW1hbmRBdHRlbXB0KHBhcnNlZCwgdHJ1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVzb2x2ZUNvbW1hbmQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vLyBTZWUgaHR0cDovL3d3dy5yb2J2YW5kZXJ3b3VkZS5jb20vZXNjYXBlY2hhcnMucGhwXG5jb25zdCBtZXRhQ2hhcnNSZWdFeHAgPSAvKFsoKVxcXVslIV5cImA8PiZ8OywgKj9dKS9nO1xuXG5mdW5jdGlvbiBlc2NhcGVDb21tYW5kKGFyZykge1xuICAgIC8vIEVzY2FwZSBtZXRhIGNoYXJzXG4gICAgYXJnID0gYXJnLnJlcGxhY2UobWV0YUNoYXJzUmVnRXhwLCAnXiQxJyk7XG5cbiAgICByZXR1cm4gYXJnO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVBcmd1bWVudChhcmcsIGRvdWJsZUVzY2FwZU1ldGFDaGFycykge1xuICAgIC8vIENvbnZlcnQgdG8gc3RyaW5nXG4gICAgYXJnID0gYCR7YXJnfWA7XG5cbiAgICAvLyBBbGdvcml0aG0gYmVsb3cgaXMgYmFzZWQgb24gaHR0cHM6Ly9xbnRtLm9yZy9jbWRcblxuICAgIC8vIFNlcXVlbmNlIG9mIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlOlxuICAgIC8vIGRvdWJsZSB1cCBhbGwgdGhlIGJhY2tzbGFzaGVzIGFuZCBlc2NhcGUgdGhlIGRvdWJsZSBxdW90ZVxuICAgIGFyZyA9IGFyZy5yZXBsYWNlKC8oXFxcXCopXCIvZywgJyQxJDFcXFxcXCInKTtcblxuICAgIC8vIFNlcXVlbmNlIG9mIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IHRoZSBlbmQgb2YgdGhlIHN0cmluZ1xuICAgIC8vICh3aGljaCB3aWxsIGJlY29tZSBhIGRvdWJsZSBxdW90ZSBsYXRlcik6XG4gICAgLy8gZG91YmxlIHVwIGFsbCB0aGUgYmFja3NsYXNoZXNcbiAgICBhcmcgPSBhcmcucmVwbGFjZSgvKFxcXFwqKSQvLCAnJDEkMScpO1xuXG4gICAgLy8gQWxsIG90aGVyIGJhY2tzbGFzaGVzIG9jY3VyIGxpdGVyYWxseVxuXG4gICAgLy8gUXVvdGUgdGhlIHdob2xlIHRoaW5nOlxuICAgIGFyZyA9IGBcIiR7YXJnfVwiYDtcblxuICAgIC8vIEVzY2FwZSBtZXRhIGNoYXJzXG4gICAgYXJnID0gYXJnLnJlcGxhY2UobWV0YUNoYXJzUmVnRXhwLCAnXiQxJyk7XG5cbiAgICAvLyBEb3VibGUgZXNjYXBlIG1ldGEgY2hhcnMgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKGRvdWJsZUVzY2FwZU1ldGFDaGFycykge1xuICAgICAgICBhcmcgPSBhcmcucmVwbGFjZShtZXRhQ2hhcnNSZWdFeHAsICdeJDEnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJnO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5jb21tYW5kID0gZXNjYXBlQ29tbWFuZDtcbm1vZHVsZS5leHBvcnRzLmFyZ3VtZW50ID0gZXNjYXBlQXJndW1lbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSAvXiMhKC4qKS87XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgc2hlYmFuZ1JlZ2V4ID0gcmVxdWlyZSgnc2hlYmFuZy1yZWdleCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChzdHJpbmcgPSAnJykgPT4ge1xuXHRjb25zdCBtYXRjaCA9IHN0cmluZy5tYXRjaChzaGViYW5nUmVnZXgpO1xuXG5cdGlmICghbWF0Y2gpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGNvbnN0IFtwYXRoLCBhcmd1bWVudF0gPSBtYXRjaFswXS5yZXBsYWNlKC8jISA/LywgJycpLnNwbGl0KCcgJyk7XG5cdGNvbnN0IGJpbmFyeSA9IHBhdGguc3BsaXQoJy8nKS5wb3AoKTtcblxuXHRpZiAoYmluYXJ5ID09PSAnZW52Jykge1xuXHRcdHJldHVybiBhcmd1bWVudDtcblx0fVxuXG5cdHJldHVybiBhcmd1bWVudCA/IGAke2JpbmFyeX0gJHthcmd1bWVudH1gIDogYmluYXJ5O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbmNvbnN0IHNoZWJhbmdDb21tYW5kID0gcmVxdWlyZSgnc2hlYmFuZy1jb21tYW5kJyk7XG5cbmZ1bmN0aW9uIHJlYWRTaGViYW5nKGNvbW1hbmQpIHtcbiAgICAvLyBSZWFkIHRoZSBmaXJzdCAxNTAgYnl0ZXMgZnJvbSB0aGUgZmlsZVxuICAgIGNvbnN0IHNpemUgPSAxNTA7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jKHNpemUpO1xuXG4gICAgbGV0IGZkO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgZmQgPSBmcy5vcGVuU3luYyhjb21tYW5kLCAncicpO1xuICAgICAgICBmcy5yZWFkU3luYyhmZCwgYnVmZmVyLCAwLCBzaXplLCAwKTtcbiAgICAgICAgZnMuY2xvc2VTeW5jKGZkKTtcbiAgICB9IGNhdGNoIChlKSB7IC8qIEVtcHR5ICovIH1cblxuICAgIC8vIEF0dGVtcHQgdG8gZXh0cmFjdCBzaGViYW5nIChudWxsIGlzIHJldHVybmVkIGlmIG5vdCBhIHNoZWJhbmcpXG4gICAgcmV0dXJuIHNoZWJhbmdDb21tYW5kKGJ1ZmZlci50b1N0cmluZygpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWFkU2hlYmFuZztcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCByZXNvbHZlQ29tbWFuZCA9IHJlcXVpcmUoJy4vdXRpbC9yZXNvbHZlQ29tbWFuZCcpO1xuY29uc3QgZXNjYXBlID0gcmVxdWlyZSgnLi91dGlsL2VzY2FwZScpO1xuY29uc3QgcmVhZFNoZWJhbmcgPSByZXF1aXJlKCcuL3V0aWwvcmVhZFNoZWJhbmcnKTtcblxuY29uc3QgaXNXaW4gPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuY29uc3QgaXNFeGVjdXRhYmxlUmVnRXhwID0gL1xcLig/OmNvbXxleGUpJC9pO1xuY29uc3QgaXNDbWRTaGltUmVnRXhwID0gL25vZGVfbW9kdWxlc1tcXFxcL10uYmluW1xcXFwvXVteXFxcXC9dK1xcLmNtZCQvaTtcblxuZnVuY3Rpb24gZGV0ZWN0U2hlYmFuZyhwYXJzZWQpIHtcbiAgICBwYXJzZWQuZmlsZSA9IHJlc29sdmVDb21tYW5kKHBhcnNlZCk7XG5cbiAgICBjb25zdCBzaGViYW5nID0gcGFyc2VkLmZpbGUgJiYgcmVhZFNoZWJhbmcocGFyc2VkLmZpbGUpO1xuXG4gICAgaWYgKHNoZWJhbmcpIHtcbiAgICAgICAgcGFyc2VkLmFyZ3MudW5zaGlmdChwYXJzZWQuZmlsZSk7XG4gICAgICAgIHBhcnNlZC5jb21tYW5kID0gc2hlYmFuZztcblxuICAgICAgICByZXR1cm4gcmVzb2x2ZUNvbW1hbmQocGFyc2VkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkLmZpbGU7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm9uU2hlbGwocGFyc2VkKSB7XG4gICAgaWYgKCFpc1dpbikge1xuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cblxuICAgIC8vIERldGVjdCAmIGFkZCBzdXBwb3J0IGZvciBzaGViYW5nc1xuICAgIGNvbnN0IGNvbW1hbmRGaWxlID0gZGV0ZWN0U2hlYmFuZyhwYXJzZWQpO1xuXG4gICAgLy8gV2UgZG9uJ3QgbmVlZCBhIHNoZWxsIGlmIHRoZSBjb21tYW5kIGZpbGVuYW1lIGlzIGFuIGV4ZWN1dGFibGVcbiAgICBjb25zdCBuZWVkc1NoZWxsID0gIWlzRXhlY3V0YWJsZVJlZ0V4cC50ZXN0KGNvbW1hbmRGaWxlKTtcblxuICAgIC8vIElmIGEgc2hlbGwgaXMgcmVxdWlyZWQsIHVzZSBjbWQuZXhlIGFuZCB0YWtlIGNhcmUgb2YgZXNjYXBpbmcgZXZlcnl0aGluZyBjb3JyZWN0bHlcbiAgICAvLyBOb3RlIHRoYXQgYGZvcmNlU2hlbGxgIGlzIGFuIGhpZGRlbiBvcHRpb24gdXNlZCBvbmx5IGluIHRlc3RzXG4gICAgaWYgKHBhcnNlZC5vcHRpb25zLmZvcmNlU2hlbGwgfHwgbmVlZHNTaGVsbCkge1xuICAgICAgICAvLyBOZWVkIHRvIGRvdWJsZSBlc2NhcGUgbWV0YSBjaGFycyBpZiB0aGUgY29tbWFuZCBpcyBhIGNtZC1zaGltIGxvY2F0ZWQgaW4gYG5vZGVfbW9kdWxlcy8uYmluL2BcbiAgICAgICAgLy8gVGhlIGNtZC1zaGltIHNpbXBseSBjYWxscyBleGVjdXRlIHRoZSBwYWNrYWdlIGJpbiBmaWxlIHdpdGggTm9kZUpTLCBwcm94eWluZyBhbnkgYXJndW1lbnRcbiAgICAgICAgLy8gQmVjYXVzZSB0aGUgZXNjYXBlIG9mIG1ldGFjaGFycyB3aXRoIF4gZ2V0cyBpbnRlcnByZXRlZCB3aGVuIHRoZSBjbWQuZXhlIGlzIGZpcnN0IGNhbGxlZCxcbiAgICAgICAgLy8gd2UgbmVlZCB0byBkb3VibGUgZXNjYXBlIHRoZW1cbiAgICAgICAgY29uc3QgbmVlZHNEb3VibGVFc2NhcGVNZXRhQ2hhcnMgPSBpc0NtZFNoaW1SZWdFeHAudGVzdChjb21tYW5kRmlsZSk7XG5cbiAgICAgICAgLy8gTm9ybWFsaXplIHBvc2l4IHBhdGhzIGludG8gT1MgY29tcGF0aWJsZSBwYXRocyAoZS5nLjogZm9vL2JhciAtPiBmb29cXGJhcilcbiAgICAgICAgLy8gVGhpcyBpcyBuZWNlc3Nhcnkgb3RoZXJ3aXNlIGl0IHdpbGwgYWx3YXlzIGZhaWwgd2l0aCBFTk9FTlQgaW4gdGhvc2UgY2FzZXNcbiAgICAgICAgcGFyc2VkLmNvbW1hbmQgPSBwYXRoLm5vcm1hbGl6ZShwYXJzZWQuY29tbWFuZCk7XG5cbiAgICAgICAgLy8gRXNjYXBlIGNvbW1hbmQgJiBhcmd1bWVudHNcbiAgICAgICAgcGFyc2VkLmNvbW1hbmQgPSBlc2NhcGUuY29tbWFuZChwYXJzZWQuY29tbWFuZCk7XG4gICAgICAgIHBhcnNlZC5hcmdzID0gcGFyc2VkLmFyZ3MubWFwKChhcmcpID0+IGVzY2FwZS5hcmd1bWVudChhcmcsIG5lZWRzRG91YmxlRXNjYXBlTWV0YUNoYXJzKSk7XG5cbiAgICAgICAgY29uc3Qgc2hlbGxDb21tYW5kID0gW3BhcnNlZC5jb21tYW5kXS5jb25jYXQocGFyc2VkLmFyZ3MpLmpvaW4oJyAnKTtcblxuICAgICAgICBwYXJzZWQuYXJncyA9IFsnL2QnLCAnL3MnLCAnL2MnLCBgXCIke3NoZWxsQ29tbWFuZH1cImBdO1xuICAgICAgICBwYXJzZWQuY29tbWFuZCA9IHByb2Nlc3MuZW52LmNvbXNwZWMgfHwgJ2NtZC5leGUnO1xuICAgICAgICBwYXJzZWQub3B0aW9ucy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMgPSB0cnVlOyAvLyBUZWxsIG5vZGUncyBzcGF3biB0aGF0IHRoZSBhcmd1bWVudHMgYXJlIGFscmVhZHkgZXNjYXBlZFxuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlKGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgICAvLyBOb3JtYWxpemUgYXJndW1lbnRzLCBzaW1pbGFyIHRvIG5vZGVqc1xuICAgIGlmIChhcmdzICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICAgIG9wdGlvbnMgPSBhcmdzO1xuICAgICAgICBhcmdzID0gbnVsbDtcbiAgICB9XG5cbiAgICBhcmdzID0gYXJncyA/IGFyZ3Muc2xpY2UoMCkgOiBbXTsgLy8gQ2xvbmUgYXJyYXkgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIG9yaWdpbmFsXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpOyAvLyBDbG9uZSBvYmplY3QgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIG9yaWdpbmFsXG5cbiAgICAvLyBCdWlsZCBvdXIgcGFyc2VkIG9iamVjdFxuICAgIGNvbnN0IHBhcnNlZCA9IHtcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgZmlsZTogdW5kZWZpbmVkLFxuICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIERlbGVnYXRlIGZ1cnRoZXIgcGFyc2luZyB0byBzaGVsbCBvciBub24tc2hlbGxcbiAgICByZXR1cm4gb3B0aW9ucy5zaGVsbCA/IHBhcnNlZCA6IHBhcnNlTm9uU2hlbGwocGFyc2VkKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzV2luID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcblxuZnVuY3Rpb24gbm90Rm91bmRFcnJvcihvcmlnaW5hbCwgc3lzY2FsbCkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihgJHtzeXNjYWxsfSAke29yaWdpbmFsLmNvbW1hbmR9IEVOT0VOVGApLCB7XG4gICAgICAgIGNvZGU6ICdFTk9FTlQnLFxuICAgICAgICBlcnJubzogJ0VOT0VOVCcsXG4gICAgICAgIHN5c2NhbGw6IGAke3N5c2NhbGx9ICR7b3JpZ2luYWwuY29tbWFuZH1gLFxuICAgICAgICBwYXRoOiBvcmlnaW5hbC5jb21tYW5kLFxuICAgICAgICBzcGF3bmFyZ3M6IG9yaWdpbmFsLmFyZ3MsXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGhvb2tDaGlsZFByb2Nlc3MoY3AsIHBhcnNlZCkge1xuICAgIGlmICghaXNXaW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsRW1pdCA9IGNwLmVtaXQ7XG5cbiAgICBjcC5lbWl0ID0gZnVuY3Rpb24gKG5hbWUsIGFyZzEpIHtcbiAgICAgICAgLy8gSWYgZW1pdHRpbmcgXCJleGl0XCIgZXZlbnQgYW5kIGV4aXQgY29kZSBpcyAxLCB3ZSBuZWVkIHRvIGNoZWNrIGlmXG4gICAgICAgIC8vIHRoZSBjb21tYW5kIGV4aXN0cyBhbmQgZW1pdCBhbiBcImVycm9yXCIgaW5zdGVhZFxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0luZGlnb1VuaXRlZC9ub2RlLWNyb3NzLXNwYXduL2lzc3Vlcy8xNlxuICAgICAgICBpZiAobmFtZSA9PT0gJ2V4aXQnKSB7XG4gICAgICAgICAgICBjb25zdCBlcnIgPSB2ZXJpZnlFTk9FTlQoYXJnMSwgcGFyc2VkLCAnc3Bhd24nKTtcblxuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEVtaXQuY2FsbChjcCwgJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmlnaW5hbEVtaXQuYXBwbHkoY3AsIGFyZ3VtZW50cyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5RU5PRU5UKHN0YXR1cywgcGFyc2VkKSB7XG4gICAgaWYgKGlzV2luICYmIHN0YXR1cyA9PT0gMSAmJiAhcGFyc2VkLmZpbGUpIHtcbiAgICAgICAgcmV0dXJuIG5vdEZvdW5kRXJyb3IocGFyc2VkLm9yaWdpbmFsLCAnc3Bhd24nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5RU5PRU5UU3luYyhzdGF0dXMsIHBhcnNlZCkge1xuICAgIGlmIChpc1dpbiAmJiBzdGF0dXMgPT09IDEgJiYgIXBhcnNlZC5maWxlKSB7XG4gICAgICAgIHJldHVybiBub3RGb3VuZEVycm9yKHBhcnNlZC5vcmlnaW5hbCwgJ3NwYXduU3luYycpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBob29rQ2hpbGRQcm9jZXNzLFxuICAgIHZlcmlmeUVOT0VOVCxcbiAgICB2ZXJpZnlFTk9FTlRTeW5jLFxuICAgIG5vdEZvdW5kRXJyb3IsXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY3AgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vbGliL3BhcnNlJyk7XG5jb25zdCBlbm9lbnQgPSByZXF1aXJlKCcuL2xpYi9lbm9lbnQnKTtcblxuZnVuY3Rpb24gc3Bhd24oY29tbWFuZCwgYXJncywgb3B0aW9ucykge1xuICAgIC8vIFBhcnNlIHRoZSBhcmd1bWVudHNcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZShjb21tYW5kLCBhcmdzLCBvcHRpb25zKTtcblxuICAgIC8vIFNwYXduIHRoZSBjaGlsZCBwcm9jZXNzXG4gICAgY29uc3Qgc3Bhd25lZCA9IGNwLnNwYXduKHBhcnNlZC5jb21tYW5kLCBwYXJzZWQuYXJncywgcGFyc2VkLm9wdGlvbnMpO1xuXG4gICAgLy8gSG9vayBpbnRvIGNoaWxkIHByb2Nlc3MgXCJleGl0XCIgZXZlbnQgdG8gZW1pdCBhbiBlcnJvciBpZiB0aGUgY29tbWFuZFxuICAgIC8vIGRvZXMgbm90IGV4aXN0cywgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vSW5kaWdvVW5pdGVkL25vZGUtY3Jvc3Mtc3Bhd24vaXNzdWVzLzE2XG4gICAgZW5vZW50Lmhvb2tDaGlsZFByb2Nlc3Moc3Bhd25lZCwgcGFyc2VkKTtcblxuICAgIHJldHVybiBzcGF3bmVkO1xufVxuXG5mdW5jdGlvbiBzcGF3blN5bmMoY29tbWFuZCwgYXJncywgb3B0aW9ucykge1xuICAgIC8vIFBhcnNlIHRoZSBhcmd1bWVudHNcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZShjb21tYW5kLCBhcmdzLCBvcHRpb25zKTtcblxuICAgIC8vIFNwYXduIHRoZSBjaGlsZCBwcm9jZXNzXG4gICAgY29uc3QgcmVzdWx0ID0gY3Auc3Bhd25TeW5jKHBhcnNlZC5jb21tYW5kLCBwYXJzZWQuYXJncywgcGFyc2VkLm9wdGlvbnMpO1xuXG4gICAgLy8gQW5hbHl6ZSBpZiB0aGUgY29tbWFuZCBkb2VzIG5vdCBleGlzdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vSW5kaWdvVW5pdGVkL25vZGUtY3Jvc3Mtc3Bhd24vaXNzdWVzLzE2XG4gICAgcmVzdWx0LmVycm9yID0gcmVzdWx0LmVycm9yIHx8IGVub2VudC52ZXJpZnlFTk9FTlRTeW5jKHJlc3VsdC5zdGF0dXMsIHBhcnNlZCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNwYXduO1xubW9kdWxlLmV4cG9ydHMuc3Bhd24gPSBzcGF3bjtcbm1vZHVsZS5leHBvcnRzLnN5bmMgPSBzcGF3blN5bmM7XG5cbm1vZHVsZS5leHBvcnRzLl9wYXJzZSA9IHBhcnNlO1xubW9kdWxlLmV4cG9ydHMuX2Vub2VudCA9IGVub2VudDtcbiIsICIvLyBUaGlzIGlzIG5vdCB0aGUgc2V0IG9mIGFsbCBwb3NzaWJsZSBzaWduYWxzLlxuLy9cbi8vIEl0IElTLCBob3dldmVyLCB0aGUgc2V0IG9mIGFsbCBzaWduYWxzIHRoYXQgdHJpZ2dlclxuLy8gYW4gZXhpdCBvbiBlaXRoZXIgTGludXggb3IgQlNEIHN5c3RlbXMuICBMaW51eCBpcyBhXG4vLyBzdXBlcnNldCBvZiB0aGUgc2lnbmFsIG5hbWVzIHN1cHBvcnRlZCBvbiBCU0QsIGFuZFxuLy8gdGhlIHVua25vd24gc2lnbmFscyBqdXN0IGZhaWwgdG8gcmVnaXN0ZXIsIHNvIHdlIGNhblxuLy8gY2F0Y2ggdGhhdCBlYXNpbHkgZW5vdWdoLlxuLy9cbi8vIERvbid0IGJvdGhlciB3aXRoIFNJR0tJTEwuICBJdCdzIHVuY2F0Y2hhYmxlLCB3aGljaFxuLy8gbWVhbnMgdGhhdCB3ZSBjYW4ndCBmaXJlIGFueSBjYWxsYmFja3MgYW55d2F5LlxuLy9cbi8vIElmIGEgdXNlciBkb2VzIGhhcHBlbiB0byByZWdpc3RlciBhIGhhbmRsZXIgb24gYSBub24tXG4vLyBmYXRhbCBzaWduYWwgbGlrZSBTSUdXSU5DSCBvciBzb21ldGhpbmcsIGFuZCB0aGVuXG4vLyBleGl0LCBpdCdsbCBlbmQgdXAgZmlyaW5nIGBwcm9jZXNzLmVtaXQoJ2V4aXQnKWAsIHNvXG4vLyB0aGUgaGFuZGxlciB3aWxsIGJlIGZpcmVkIGFueXdheS5cbi8vXG4vLyBTSUdCVVMsIFNJR0ZQRSwgU0lHU0VHViBhbmQgU0lHSUxMLCB3aGVuIG5vdCByYWlzZWRcbi8vIGFydGlmaWNpYWxseSwgaW5oZXJlbnRseSBsZWF2ZSB0aGUgcHJvY2VzcyBpbiBhXG4vLyBzdGF0ZSBmcm9tIHdoaWNoIGl0IGlzIG5vdCBzYWZlIHRvIHRyeSBhbmQgZW50ZXIgSlNcbi8vIGxpc3RlbmVycy5cbm1vZHVsZS5leHBvcnRzID0gW1xuICAnU0lHQUJSVCcsXG4gICdTSUdBTFJNJyxcbiAgJ1NJR0hVUCcsXG4gICdTSUdJTlQnLFxuICAnU0lHVEVSTSdcbl1cblxuaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgbW9kdWxlLmV4cG9ydHMucHVzaChcbiAgICAnU0lHVlRBTFJNJyxcbiAgICAnU0lHWENQVScsXG4gICAgJ1NJR1hGU1onLFxuICAgICdTSUdVU1IyJyxcbiAgICAnU0lHVFJBUCcsXG4gICAgJ1NJR1NZUycsXG4gICAgJ1NJR1FVSVQnLFxuICAgICdTSUdJT1QnXG4gICAgLy8gc2hvdWxkIGRldGVjdCBwcm9maWxlciBhbmQgZW5hYmxlL2Rpc2FibGUgYWNjb3JkaW5nbHkuXG4gICAgLy8gc2VlICMyMVxuICAgIC8vICdTSUdQUk9GJ1xuICApXG59XG5cbmlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gIG1vZHVsZS5leHBvcnRzLnB1c2goXG4gICAgJ1NJR0lPJyxcbiAgICAnU0lHUE9MTCcsXG4gICAgJ1NJR1BXUicsXG4gICAgJ1NJR1NUS0ZMVCcsXG4gICAgJ1NJR1VOVVNFRCdcbiAgKVxufVxuIiwgIi8vIE5vdGU6IHNpbmNlIG55YyB1c2VzIHRoaXMgbW9kdWxlIHRvIG91dHB1dCBjb3ZlcmFnZSwgYW55IGxpbmVzXG4vLyB0aGF0IGFyZSBpbiB0aGUgZGlyZWN0IHN5bmMgZmxvdyBvZiBueWMncyBvdXRwdXRDb3ZlcmFnZSBhcmVcbi8vIGlnbm9yZWQsIHNpbmNlIHdlIGNhbiBuZXZlciBnZXQgY292ZXJhZ2UgZm9yIHRoZW0uXG4vLyBncmFiIGEgcmVmZXJlbmNlIHRvIG5vZGUncyByZWFsIHByb2Nlc3Mgb2JqZWN0IHJpZ2h0IGF3YXlcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3NcblxuY29uc3QgcHJvY2Vzc09rID0gZnVuY3Rpb24gKHByb2Nlc3MpIHtcbiAgcmV0dXJuIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmVtaXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5yZWFsbHlFeGl0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3MubGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3Mua2lsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBpZCA9PT0gJ251bWJlcicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5vbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG4vLyBzb21lIGtpbmQgb2Ygbm9uLW5vZGUgZW52aXJvbm1lbnQsIGp1c3Qgbm8tb3Bcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKCFwcm9jZXNzT2socHJvY2VzcykpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHt9XG4gIH1cbn0gZWxzZSB7XG4gIHZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuICB2YXIgc2lnbmFscyA9IHJlcXVpcmUoJy4vc2lnbmFscy5qcycpXG4gIHZhciBpc1dpbiA9IC9ed2luL2kudGVzdChwcm9jZXNzLnBsYXRmb3JtKVxuXG4gIHZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAodHlwZW9mIEVFICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgRUUgPSBFRS5FdmVudEVtaXR0ZXJcbiAgfVxuXG4gIHZhciBlbWl0dGVyXG4gIGlmIChwcm9jZXNzLl9fc2lnbmFsX2V4aXRfZW1pdHRlcl9fKSB7XG4gICAgZW1pdHRlciA9IHByb2Nlc3MuX19zaWduYWxfZXhpdF9lbWl0dGVyX19cbiAgfSBlbHNlIHtcbiAgICBlbWl0dGVyID0gcHJvY2Vzcy5fX3NpZ25hbF9leGl0X2VtaXR0ZXJfXyA9IG5ldyBFRSgpXG4gICAgZW1pdHRlci5jb3VudCA9IDBcbiAgICBlbWl0dGVyLmVtaXR0ZWQgPSB7fVxuICB9XG5cbiAgLy8gQmVjYXVzZSB0aGlzIGVtaXR0ZXIgaXMgYSBnbG9iYWwsIHdlIGhhdmUgdG8gY2hlY2sgdG8gc2VlIGlmIGFcbiAgLy8gcHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIGxpYnJhcnkgZmFpbGVkIHRvIGVuYWJsZSBpbmZpbml0ZSBsaXN0ZW5lcnMuXG4gIC8vIEkga25vdyB3aGF0IHlvdSdyZSBhYm91dCB0byBzYXkuICBCdXQgbGl0ZXJhbGx5IGV2ZXJ5dGhpbmcgYWJvdXRcbiAgLy8gc2lnbmFsLWV4aXQgaXMgYSBjb21wcm9taXNlIHdpdGggZXZpbC4gIEdldCB1c2VkIHRvIGl0LlxuICBpZiAoIWVtaXR0ZXIuaW5maW5pdGUpIHtcbiAgICBlbWl0dGVyLnNldE1heExpc3RlbmVycyhJbmZpbml0eSlcbiAgICBlbWl0dGVyLmluZmluaXRlID0gdHJ1ZVxuICB9XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY2IsIG9wdHMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fVxuICAgIH1cbiAgICBhc3NlcnQuZXF1YWwodHlwZW9mIGNiLCAnZnVuY3Rpb24nLCAnYSBjYWxsYmFjayBtdXN0IGJlIHByb3ZpZGVkIGZvciBleGl0IGhhbmRsZXInKVxuXG4gICAgaWYgKGxvYWRlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGxvYWQoKVxuICAgIH1cblxuICAgIHZhciBldiA9ICdleGl0J1xuICAgIGlmIChvcHRzICYmIG9wdHMuYWx3YXlzTGFzdCkge1xuICAgICAgZXYgPSAnYWZ0ZXJleGl0J1xuICAgIH1cblxuICAgIHZhciByZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKGV2LCBjYilcbiAgICAgIGlmIChlbWl0dGVyLmxpc3RlbmVycygnZXhpdCcpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgIGVtaXR0ZXIubGlzdGVuZXJzKCdhZnRlcmV4aXQnKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdW5sb2FkKClcbiAgICAgIH1cbiAgICB9XG4gICAgZW1pdHRlci5vbihldiwgY2IpXG5cbiAgICByZXR1cm4gcmVtb3ZlXG4gIH1cblxuICB2YXIgdW5sb2FkID0gZnVuY3Rpb24gdW5sb2FkICgpIHtcbiAgICBpZiAoIWxvYWRlZCB8fCAhcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGxvYWRlZCA9IGZhbHNlXG5cbiAgICBzaWduYWxzLmZvckVhY2goZnVuY3Rpb24gKHNpZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcihzaWcsIHNpZ0xpc3RlbmVyc1tzaWddKVxuICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgfSlcbiAgICBwcm9jZXNzLmVtaXQgPSBvcmlnaW5hbFByb2Nlc3NFbWl0XG4gICAgcHJvY2Vzcy5yZWFsbHlFeGl0ID0gb3JpZ2luYWxQcm9jZXNzUmVhbGx5RXhpdFxuICAgIGVtaXR0ZXIuY291bnQgLT0gMVxuICB9XG4gIG1vZHVsZS5leHBvcnRzLnVubG9hZCA9IHVubG9hZFxuXG4gIHZhciBlbWl0ID0gZnVuY3Rpb24gZW1pdCAoZXZlbnQsIGNvZGUsIHNpZ25hbCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlbWl0dGVyLmVtaXR0ZWRbZXZlbnRdKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZW1pdHRlci5lbWl0dGVkW2V2ZW50XSA9IHRydWVcbiAgICBlbWl0dGVyLmVtaXQoZXZlbnQsIGNvZGUsIHNpZ25hbClcbiAgfVxuXG4gIC8vIHsgPHNpZ25hbD46IDxsaXN0ZW5lciBmbj4sIC4uLiB9XG4gIHZhciBzaWdMaXN0ZW5lcnMgPSB7fVxuICBzaWduYWxzLmZvckVhY2goZnVuY3Rpb24gKHNpZykge1xuICAgIHNpZ0xpc3RlbmVyc1tzaWddID0gZnVuY3Rpb24gbGlzdGVuZXIgKCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgbGlzdGVuZXJzLCBhbiBleGl0IGlzIGNvbWluZyFcbiAgICAgIC8vIFNpbXBsZXN0IHdheTogcmVtb3ZlIHVzIGFuZCB0aGVuIHJlLXNlbmQgdGhlIHNpZ25hbC5cbiAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIHdpbGwga2lsbCB0aGUgcHJvY2Vzcywgc28gd2UgY2FuXG4gICAgICAvLyBzYWZlbHkgZW1pdCBub3cuXG4gICAgICB2YXIgbGlzdGVuZXJzID0gcHJvY2Vzcy5saXN0ZW5lcnMoc2lnKVxuICAgICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPT09IGVtaXR0ZXIuY291bnQpIHtcbiAgICAgICAgdW5sb2FkKClcbiAgICAgICAgZW1pdCgnZXhpdCcsIG51bGwsIHNpZylcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZW1pdCgnYWZ0ZXJleGl0JywgbnVsbCwgc2lnKVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBpZiAoaXNXaW4gJiYgc2lnID09PSAnU0lHSFVQJykge1xuICAgICAgICAgIC8vIFwiU0lHSFVQXCIgdGhyb3dzIGFuIGBFTk9TWVNgIGVycm9yIG9uIFdpbmRvd3MsXG4gICAgICAgICAgLy8gc28gdXNlIGEgc3VwcG9ydGVkIHNpZ25hbCBpbnN0ZWFkXG4gICAgICAgICAgc2lnID0gJ1NJR0lOVCdcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsIHNpZylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2lnbmFscyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc2lnbmFsc1xuICB9XG5cbiAgdmFyIGxvYWRlZCA9IGZhbHNlXG5cbiAgdmFyIGxvYWQgPSBmdW5jdGlvbiBsb2FkICgpIHtcbiAgICBpZiAobG9hZGVkIHx8ICFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbG9hZGVkID0gdHJ1ZVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIG9uU2lnbmFsRXhpdCdzIHRoYXQgYXJlIGluIHBsYXkuXG4gICAgLy8gSXQncyBpbXBvcnRhbnQgc28gdGhhdCB3ZSBjYW4gY291bnQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mXG4gICAgLy8gbGlzdGVuZXJzIG9uIHNpZ25hbHMsIGFuZCBkb24ndCB3YWl0IGZvciB0aGUgb3RoZXIgb25lIHRvXG4gICAgLy8gaGFuZGxlIGl0IGluc3RlYWQgb2YgdXMuXG4gICAgZW1pdHRlci5jb3VudCArPSAxXG5cbiAgICBzaWduYWxzID0gc2lnbmFscy5maWx0ZXIoZnVuY3Rpb24gKHNpZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJvY2Vzcy5vbihzaWcsIHNpZ0xpc3RlbmVyc1tzaWddKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHByb2Nlc3MuZW1pdCA9IHByb2Nlc3NFbWl0XG4gICAgcHJvY2Vzcy5yZWFsbHlFeGl0ID0gcHJvY2Vzc1JlYWxseUV4aXRcbiAgfVxuICBtb2R1bGUuZXhwb3J0cy5sb2FkID0gbG9hZFxuXG4gIHZhciBvcmlnaW5hbFByb2Nlc3NSZWFsbHlFeGl0ID0gcHJvY2Vzcy5yZWFsbHlFeGl0XG4gIHZhciBwcm9jZXNzUmVhbGx5RXhpdCA9IGZ1bmN0aW9uIHByb2Nlc3NSZWFsbHlFeGl0IChjb2RlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IGNvZGUgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gMFxuICAgIGVtaXQoJ2V4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZW1pdCgnYWZ0ZXJleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIG9yaWdpbmFsUHJvY2Vzc1JlYWxseUV4aXQuY2FsbChwcm9jZXNzLCBwcm9jZXNzLmV4aXRDb2RlKVxuICB9XG5cbiAgdmFyIG9yaWdpbmFsUHJvY2Vzc0VtaXQgPSBwcm9jZXNzLmVtaXRcbiAgdmFyIHByb2Nlc3NFbWl0ID0gZnVuY3Rpb24gcHJvY2Vzc0VtaXQgKGV2LCBhcmcpIHtcbiAgICBpZiAoZXYgPT09ICdleGl0JyAmJiBwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGFyZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSBhcmdcbiAgICAgIH1cbiAgICAgIHZhciByZXQgPSBvcmlnaW5hbFByb2Nlc3NFbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBlbWl0KCdleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBlbWl0KCdhZnRlcmV4aXQnLCBwcm9jZXNzLmV4aXRDb2RlLCBudWxsKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiByZXRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsUHJvY2Vzc0VtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHtQYXNzVGhyb3VnaDogUGFzc1Rocm91Z2hTdHJlYW19ID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gb3B0aW9ucyA9PiB7XG5cdG9wdGlvbnMgPSB7Li4ub3B0aW9uc307XG5cblx0Y29uc3Qge2FycmF5fSA9IG9wdGlvbnM7XG5cdGxldCB7ZW5jb2Rpbmd9ID0gb3B0aW9ucztcblx0Y29uc3QgaXNCdWZmZXIgPSBlbmNvZGluZyA9PT0gJ2J1ZmZlcic7XG5cdGxldCBvYmplY3RNb2RlID0gZmFsc2U7XG5cblx0aWYgKGFycmF5KSB7XG5cdFx0b2JqZWN0TW9kZSA9ICEoZW5jb2RpbmcgfHwgaXNCdWZmZXIpO1xuXHR9IGVsc2Uge1xuXHRcdGVuY29kaW5nID0gZW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXHR9XG5cblx0aWYgKGlzQnVmZmVyKSB7XG5cdFx0ZW5jb2RpbmcgPSBudWxsO1xuXHR9XG5cblx0Y29uc3Qgc3RyZWFtID0gbmV3IFBhc3NUaHJvdWdoU3RyZWFtKHtvYmplY3RNb2RlfSk7XG5cblx0aWYgKGVuY29kaW5nKSB7XG5cdFx0c3RyZWFtLnNldEVuY29kaW5nKGVuY29kaW5nKTtcblx0fVxuXG5cdGxldCBsZW5ndGggPSAwO1xuXHRjb25zdCBjaHVua3MgPSBbXTtcblxuXHRzdHJlYW0ub24oJ2RhdGEnLCBjaHVuayA9PiB7XG5cdFx0Y2h1bmtzLnB1c2goY2h1bmspO1xuXG5cdFx0aWYgKG9iamVjdE1vZGUpIHtcblx0XHRcdGxlbmd0aCA9IGNodW5rcy5sZW5ndGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxlbmd0aCArPSBjaHVuay5sZW5ndGg7XG5cdFx0fVxuXHR9KTtcblxuXHRzdHJlYW0uZ2V0QnVmZmVyZWRWYWx1ZSA9ICgpID0+IHtcblx0XHRpZiAoYXJyYXkpIHtcblx0XHRcdHJldHVybiBjaHVua3M7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQnVmZmVyID8gQnVmZmVyLmNvbmNhdChjaHVua3MsIGxlbmd0aCkgOiBjaHVua3Muam9pbignJyk7XG5cdH07XG5cblx0c3RyZWFtLmdldEJ1ZmZlcmVkTGVuZ3RoID0gKCkgPT4gbGVuZ3RoO1xuXG5cdHJldHVybiBzdHJlYW07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHtjb25zdGFudHM6IEJ1ZmZlckNvbnN0YW50c30gPSByZXF1aXJlKCdidWZmZXInKTtcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuY29uc3Qge3Byb21pc2lmeX0gPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCBidWZmZXJTdHJlYW0gPSByZXF1aXJlKCcuL2J1ZmZlci1zdHJlYW0nKTtcblxuY29uc3Qgc3RyZWFtUGlwZWxpbmVQcm9taXNpZmllZCA9IHByb21pc2lmeShzdHJlYW0ucGlwZWxpbmUpO1xuXG5jbGFzcyBNYXhCdWZmZXJFcnJvciBleHRlbmRzIEVycm9yIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoJ21heEJ1ZmZlciBleGNlZWRlZCcpO1xuXHRcdHRoaXMubmFtZSA9ICdNYXhCdWZmZXJFcnJvcic7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U3RyZWFtKGlucHV0U3RyZWFtLCBvcHRpb25zKSB7XG5cdGlmICghaW5wdXRTdHJlYW0pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGEgc3RyZWFtJyk7XG5cdH1cblxuXHRvcHRpb25zID0ge1xuXHRcdG1heEJ1ZmZlcjogSW5maW5pdHksXG5cdFx0Li4ub3B0aW9uc1xuXHR9O1xuXG5cdGNvbnN0IHttYXhCdWZmZXJ9ID0gb3B0aW9ucztcblx0Y29uc3Qgc3RyZWFtID0gYnVmZmVyU3RyZWFtKG9wdGlvbnMpO1xuXG5cdGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRjb25zdCByZWplY3RQcm9taXNlID0gZXJyb3IgPT4ge1xuXHRcdFx0Ly8gRG9uJ3QgcmV0cmlldmUgYW4gb3ZlcnNpemVkIGJ1ZmZlci5cblx0XHRcdGlmIChlcnJvciAmJiBzdHJlYW0uZ2V0QnVmZmVyZWRMZW5ndGgoKSA8PSBCdWZmZXJDb25zdGFudHMuTUFYX0xFTkdUSCkge1xuXHRcdFx0XHRlcnJvci5idWZmZXJlZERhdGEgPSBzdHJlYW0uZ2V0QnVmZmVyZWRWYWx1ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdH07XG5cblx0XHQoYXN5bmMgKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgc3RyZWFtUGlwZWxpbmVQcm9taXNpZmllZChpbnB1dFN0cmVhbSwgc3RyZWFtKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0cmVqZWN0UHJvbWlzZShlcnJvcik7XG5cdFx0XHR9XG5cdFx0fSkoKTtcblxuXHRcdHN0cmVhbS5vbignZGF0YScsICgpID0+IHtcblx0XHRcdGlmIChzdHJlYW0uZ2V0QnVmZmVyZWRMZW5ndGgoKSA+IG1heEJ1ZmZlcikge1xuXHRcdFx0XHRyZWplY3RQcm9taXNlKG5ldyBNYXhCdWZmZXJFcnJvcigpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cblx0cmV0dXJuIHN0cmVhbS5nZXRCdWZmZXJlZFZhbHVlKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3RyZWFtO1xubW9kdWxlLmV4cG9ydHMuYnVmZmVyID0gKHN0cmVhbSwgb3B0aW9ucykgPT4gZ2V0U3RyZWFtKHN0cmVhbSwgey4uLm9wdGlvbnMsIGVuY29kaW5nOiAnYnVmZmVyJ30pO1xubW9kdWxlLmV4cG9ydHMuYXJyYXkgPSAoc3RyZWFtLCBvcHRpb25zKSA9PiBnZXRTdHJlYW0oc3RyZWFtLCB7Li4ub3B0aW9ucywgYXJyYXk6IHRydWV9KTtcbm1vZHVsZS5leHBvcnRzLk1heEJ1ZmZlckVycm9yID0gTWF4QnVmZmVyRXJyb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IFBhc3NUaHJvdWdoIH0gPSByZXF1aXJlKCdzdHJlYW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoLypzdHJlYW1zLi4uKi8pIHtcbiAgdmFyIHNvdXJjZXMgPSBbXVxuICB2YXIgb3V0cHV0ICA9IG5ldyBQYXNzVGhyb3VnaCh7b2JqZWN0TW9kZTogdHJ1ZX0pXG5cbiAgb3V0cHV0LnNldE1heExpc3RlbmVycygwKVxuXG4gIG91dHB1dC5hZGQgPSBhZGRcbiAgb3V0cHV0LmlzRW1wdHkgPSBpc0VtcHR5XG5cbiAgb3V0cHV0Lm9uKCd1bnBpcGUnLCByZW1vdmUpXG5cbiAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5mb3JFYWNoKGFkZClcblxuICByZXR1cm4gb3V0cHV0XG5cbiAgZnVuY3Rpb24gYWRkIChzb3VyY2UpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICBzb3VyY2UuZm9yRWFjaChhZGQpXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHNvdXJjZXMucHVzaChzb3VyY2UpO1xuICAgIHNvdXJjZS5vbmNlKCdlbmQnLCByZW1vdmUuYmluZChudWxsLCBzb3VyY2UpKVxuICAgIHNvdXJjZS5vbmNlKCdlcnJvcicsIG91dHB1dC5lbWl0LmJpbmQob3V0cHV0LCAnZXJyb3InKSlcbiAgICBzb3VyY2UucGlwZShvdXRwdXQsIHtlbmQ6IGZhbHNlfSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZnVuY3Rpb24gaXNFbXB0eSAoKSB7XG4gICAgcmV0dXJuIHNvdXJjZXMubGVuZ3RoID09IDA7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUgKHNvdXJjZSkge1xuICAgIHNvdXJjZXMgPSBzb3VyY2VzLmZpbHRlcihmdW5jdGlvbiAoaXQpIHsgcmV0dXJuIGl0ICE9PSBzb3VyY2UgfSlcbiAgICBpZiAoIXNvdXJjZXMubGVuZ3RoICYmIG91dHB1dC5yZWFkYWJsZSkgeyBvdXRwdXQuZW5kKCkgfVxuICB9XG59XG4iLCAiaW1wb3J0IGNhYyBmcm9tICdjYWMnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7XG5pbXBvcnQgKiBhcyBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzJztcblxuY29uc3QgY2xpID0gY2FjKCd3eHQnKTtcbmNsaS5oZWxwKCk7XG5jbGkudmVyc2lvbih2ZXJzaW9uKTtcblxuY2xpLm9wdGlvbignLS1kZWJ1ZycsICdlbmFibGUgZGVidWcgbW9kZScpO1xuXG4vLyBERVZcbmNsaVxuICAuY29tbWFuZCgnW3Jvb3RdJywgJ3N0YXJ0IGRldiBzZXJ2ZXInKVxuICAub3B0aW9uKCctYywgLS1jb25maWcgPGZpbGU+JywgJ3VzZSBzcGVjaWZpZWQgY29uZmlnIGZpbGUnKVxuICAub3B0aW9uKCctbSwgLS1tb2RlIDxtb2RlPicsICdzZXQgZW52IG1vZGUnKVxuICAub3B0aW9uKCctYiwgLS1icm93c2VyIDxicm93c2VyPicsICdzcGVjaWZ5IGEgYnJvd3NlcicpXG4gIC5vcHRpb24oJy0tbXYzJywgJ3RhcmdldCBtYW5pZmVzdCB2MycpXG4gIC5vcHRpb24oJy0tbXYyJywgJ3RhcmdldCBtYW5pZmVzdCB2MicpXG4gIC5hY3Rpb24oY29tbWFuZHMuZGV2KTtcblxuLy8gQlVJTERcbmNsaVxuICAuY29tbWFuZCgnYnVpbGQgW3Jvb3RdJywgJ2J1aWxkIGZvciBwcm9kdWN0aW9uJylcbiAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxmaWxlPicsICd1c2Ugc3BlY2lmaWVkIGNvbmZpZyBmaWxlJylcbiAgLm9wdGlvbignLW0sIC0tbW9kZSA8bW9kZT4nLCAnc2V0IGVudiBtb2RlJylcbiAgLm9wdGlvbignLWIsIC0tYnJvd3NlciA8YnJvd3Nlcj4nLCAnc3BlY2lmeSBhIGJyb3dzZXInKVxuICAub3B0aW9uKCctLW12MycsICd0YXJnZXQgbWFuaWZlc3QgdjMnKVxuICAub3B0aW9uKCctLW12MicsICd0YXJnZXQgbWFuaWZlc3QgdjInKVxuICAub3B0aW9uKCctLWFuYWx5emUnLCAndmlzdWFsaXplIGV4dGVuc2lvbiBidW5kbGUnKVxuICAuYWN0aW9uKGNvbW1hbmRzLmJ1aWxkKTtcblxuLy8gWklQXG5jbGlcbiAgLmNvbW1hbmQoJ3ppcCBbcm9vdF0nLCAnYnVpbGQgZm9yIHByb2R1Y3Rpb24gYW5kIHppcCBvdXRwdXQnKVxuICAub3B0aW9uKCctYywgLS1jb25maWcgPGZpbGU+JywgJ3VzZSBzcGVjaWZpZWQgY29uZmlnIGZpbGUnKVxuICAub3B0aW9uKCctbSwgLS1tb2RlIDxtb2RlPicsICdzZXQgZW52IG1vZGUnKVxuICAub3B0aW9uKCctYiwgLS1icm93c2VyIDxicm93c2VyPicsICdzcGVjaWZ5IGEgYnJvd3NlcicpXG4gIC5vcHRpb24oJy0tbXYzJywgJ3RhcmdldCBtYW5pZmVzdCB2MycpXG4gIC5vcHRpb24oJy0tbXYyJywgJ3RhcmdldCBtYW5pZmVzdCB2MicpXG4gIC5hY3Rpb24oY29tbWFuZHMuemlwKTtcblxuLy8gUFJFUEFSRVxuY2xpXG4gIC5jb21tYW5kKCdwcmVwYXJlIFtyb290XScsICdwcmVwYXJlIHR5cGVzY3JpcHQgcHJvamVjdCcpXG4gIC5vcHRpb24oJy1jLCAtLWNvbmZpZyA8ZmlsZT4nLCAndXNlIHNwZWNpZmllZCBjb25maWcgZmlsZScpXG4gIC5hY3Rpb24oY29tbWFuZHMucHJlcGFyZSk7XG5cbi8vIENMRUFOXG5jbGlcbiAgLmNvbW1hbmQoJ2NsZWFuIFtyb290XScsICdjbGVhbiBnZW5lcmF0ZWQgZmlsZXMgYW5kIGNhY2hlcycpXG4gIC5hbGlhcygnY2xlYW51cCcpXG4gIC5hY3Rpb24oY29tbWFuZHMuY2xlYW4pO1xuXG4vLyBQVUJMSVNIXG5jbGkuY29tbWFuZCgncHVibGlzaCBbcm9vdF0nLCAncHVibGlzaCB0byBzdG9yZXMnKS5hY3Rpb24oY29tbWFuZHMucHVibGlzaCk7XG5cbi8vIElOSVRcbmNsaVxuICAuY29tbWFuZCgnaW5pdCBbZGlyZWN0b3J5XScsICdpbml0aWFsaXplIGEgbmV3IHByb2plY3QnKVxuICAub3B0aW9uKCctdCwgLS10ZW1wbGF0ZSA8dGVtcGxhdGU+JywgJ3RlbXBsYXRlIHRvIHVzZScpXG4gIC5vcHRpb24oJy0tcG0gPHBhY2thZ2VNYW5hZ2VyPicsICd3aGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlJylcbiAgLmFjdGlvbihjb21tYW5kcy5pbml0KTtcblxuY2xpLnBhcnNlKCk7XG4iLCAie1xuICBcIm5hbWVcIjogXCJ3eHRcIixcbiAgXCJ0eXBlXCI6IFwibW9kdWxlXCIsXG4gIFwidmVyc2lvblwiOiBcIjAuOC4wXCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJOZXh0IGdlbiBmcmFtZXdvcmsgZm9yIGRldmVsb3Bpbmcgd2ViIGV4dGVuc2lvbnNcIixcbiAgXCJlbmdpbmVzXCI6IHtcbiAgICBcIm5vZGVcIjogXCI+PTE4XCIsXG4gICAgXCJwbnBtXCI6IFwiPj04XCJcbiAgfSxcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS93eHQtZGV2L3d4dFwiXG4gIH0sXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwczovL3d4dC5kZXZcIixcbiAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgXCJ2aXRlXCIsXG4gICAgXCJjaHJvbWVcIixcbiAgICBcIndlYlwiLFxuICAgIFwiZXh0ZW5zaW9uXCIsXG4gICAgXCJicm93c2VyXCIsXG4gICAgXCJidW5kbGVyXCIsXG4gICAgXCJmcmFtZXdvcmtcIlxuICBdLFxuICBcImF1dGhvclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiQWFyb24gS2xpbmtlclwiLFxuICAgIFwiZW1haWxcIjogXCJhYXJvbmtsaW5rZXIxK3d4dEBnbWFpbC5jb21cIlxuICB9LFxuICBcImxpY2Vuc2VcIjogXCJNSVRcIixcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW5cIixcbiAgICBcImRpc3RcIlxuICBdLFxuICBcImJpblwiOiBcIi4vYmluL3d4dC5janNcIixcbiAgXCJtYWluXCI6IFwiLi9kaXN0L2luZGV4LmNqc1wiLFxuICBcIm1vZHVsZVwiOiBcIi4vZGlzdC9pbmRleC5qc1wiLFxuICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgXCJleHBvcnRzXCI6IHtcbiAgICBcIi5cIjoge1xuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmNqc1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiXG4gICAgfSxcbiAgICBcIi4vY2xpZW50XCI6IHtcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2NsaWVudC5qc1wiLFxuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9jbGllbnQuZC50c1wiXG4gICAgfSxcbiAgICBcIi4vc2FuZGJveFwiOiB7XG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9zYW5kYm94LmpzXCIsXG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L3NhbmRib3guZC50c1wiXG4gICAgfSxcbiAgICBcIi4vYnJvd3NlclwiOiB7XG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9icm93c2VyLmpzXCIsXG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2Jyb3dzZXIuZC50c1wiXG4gICAgfVxuICB9LFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwid3h0XCI6IFwidHN4IHNyYy9jbGkvaW5kZXgudHNcIixcbiAgICBcImJ1aWxkXCI6IFwidHN4IHNjcmlwdHMvYnVpbGQudHNcIixcbiAgICBcImZvcm1hdFwiOiBcInByZXR0aWVyIC0td3JpdGUgLlwiLFxuICAgIFwiZm9ybWF0OmNoZWNrXCI6IFwicHJldHRpZXIgLS13cml0ZSAuXCIsXG4gICAgXCJjb21waWxlXCI6IFwidHNjIC0tbm9FbWl0XCIsXG4gICAgXCJ0ZXN0XCI6IFwidml0ZXN0XCIsXG4gICAgXCJ0ZXN0OmNvdmVyYWdlXCI6IFwidml0ZXN0IHJ1biAtLWNvdmVyYWdlLmVuYWJsZWQgLS1jb3ZlcmFnZS5leGNsdWRlPWUyZSAtLWNvdmVyYWdlLmV4Y2x1ZGU9c3JjL3Rlc3RpbmdcIixcbiAgICBcInByZXBhcmVcIjogXCJzaW1wbGUtZ2l0LWhvb2tzXCIsXG4gICAgXCJwcmVwdWJsaXNoXCI6IFwicG5wbSAtcyBidWlsZFwiLFxuICAgIFwiZG9jczpkZXZcIjogXCJ2aXRlcHJlc3MgZGV2IGRvY3NcIixcbiAgICBcImRvY3M6YnVpbGRcIjogXCJ2aXRlcHJlc3MgYnVpbGQgZG9jc1wiLFxuICAgIFwiZG9jczpwcmV2aWV3XCI6IFwidml0ZXByZXNzIHByZXZpZXcgZG9jc1wiLFxuICAgIFwic3luYy1yZWxlYXNlc1wiOiBcInBucHggY2hhbmdlbG9nZW5AbGF0ZXN0IGdoIHJlbGVhc2VcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAdHlwZXMvd2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCI6IFwiXjAuMTAuMVwiLFxuICAgIFwiQHdlYmV4dC1jb3JlL2Zha2UtYnJvd3NlclwiOiBcIl4xLjIuMlwiLFxuICAgIFwiQHdlYmV4dC1jb3JlL2lzb2xhdGVkLWVsZW1lbnRcIjogXCJeMS4wLjRcIixcbiAgICBcIkB3ZWJleHQtY29yZS9tYXRjaC1wYXR0ZXJuc1wiOiBcIl4xLjAuMlwiLFxuICAgIFwiYXN5bmMtbXV0ZXhcIjogXCJeMC40LjBcIixcbiAgICBcImMxMlwiOiBcIl4xLjQuMlwiLFxuICAgIFwiY2FjXCI6IFwiXjYuNy4xNFwiLFxuICAgIFwiY29uc29sYVwiOiBcIl4zLjIuM1wiLFxuICAgIFwiZXNidWlsZFwiOiBcIl4wLjE5LjRcIixcbiAgICBcImZhc3QtZ2xvYlwiOiBcIl4zLjMuMVwiLFxuICAgIFwiZmlsZXNpemVcIjogXCJeMTAuMC44XCIsXG4gICAgXCJmcy1leHRyYVwiOiBcIl4xMS4xLjFcIixcbiAgICBcImdldC1wb3J0XCI6IFwiXjcuMC4wXCIsXG4gICAgXCJnaWdldFwiOiBcIl4xLjEuMlwiLFxuICAgIFwiaW1tZXJcIjogXCJeMTAuMC4yXCIsXG4gICAgXCJpcy13c2xcIjogXCJeMy4wLjBcIixcbiAgICBcImppdGlcIjogXCJeMS4xOS4xXCIsXG4gICAgXCJqc29uNVwiOiBcIl4yLjIuM1wiLFxuICAgIFwibGlua2Vkb21cIjogXCJeMC4xNS4xXCIsXG4gICAgXCJtaW5pbWF0Y2hcIjogXCJeOS4wLjNcIixcbiAgICBcIm9yYVwiOiBcIl43LjAuMVwiLFxuICAgIFwicGljb2NvbG9yc1wiOiBcIl4xLjAuMFwiLFxuICAgIFwicHJvbXB0c1wiOiBcIl4yLjQuMlwiLFxuICAgIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI6IFwiXjUuOS4yXCIsXG4gICAgXCJ1bmltcG9ydFwiOiBcIl4zLjEuMFwiLFxuICAgIFwidml0ZVwiOiBcIl40LjQuMTFcIixcbiAgICBcIndlYi1leHQtcnVuXCI6IFwiXjAuMS4wXCIsXG4gICAgXCJ3ZWJleHRlbnNpb24tcG9seWZpbGxcIjogXCJeMC4xMC4wXCIsXG4gICAgXCJ6aXAtZGlyXCI6IFwiXjIuMC4wXCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGZha2VyLWpzL2Zha2VyXCI6IFwiXjguMC4yXCIsXG4gICAgXCJAdHlwZXMvZnMtZXh0cmFcIjogXCJeMTEuMC4xXCIsXG4gICAgXCJAdHlwZXMvbG9kYXNoLm1lcmdlXCI6IFwiXjQuNi43XCIsXG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yMC44LjZcIixcbiAgICBcIkB0eXBlcy9wcm9tcHRzXCI6IFwiXjIuNC40XCIsXG4gICAgXCJAdml0ZXN0L2NvdmVyYWdlLXY4XCI6IFwiXjAuMzQuNlwiLFxuICAgIFwiZXhlY2FcIjogXCJeNy4yLjBcIixcbiAgICBcImpzZG9tXCI6IFwiXjIyLjEuMFwiLFxuICAgIFwibGludC1zdGFnZWRcIjogXCJeMTQuMC4wXCIsXG4gICAgXCJsb2Rhc2gubWVyZ2VcIjogXCJeNC42LjJcIixcbiAgICBcIm5wbS1ydW4tYWxsXCI6IFwiXjQuMS41XCIsXG4gICAgXCJwcmV0dGllclwiOiBcIl4zLjAuMVwiLFxuICAgIFwic2ltcGxlLWdpdC1ob29rc1wiOiBcIl4yLjkuMFwiLFxuICAgIFwidHMtbW9ycGhcIjogXCJeMjAuMC4wXCIsXG4gICAgXCJ0c3VwXCI6IFwiXjcuMS4wXCIsXG4gICAgXCJ0c3hcIjogXCJeMy4xMi43XCIsXG4gICAgXCJ0eXBlc2NyaXB0XCI6IFwiXjUuMi4yXCIsXG4gICAgXCJ2aXRlcHJlc3NcIjogXCIxLjAuMC1yYy4xMFwiLFxuICAgIFwidml0ZXN0XCI6IFwiXjAuMzQuNlwiLFxuICAgIFwidml0ZXN0LW1vY2stZXh0ZW5kZWRcIjogXCJeMS4zLjFcIixcbiAgICBcInZ1ZVwiOiBcIl4zLjMuNFwiLFxuICAgIFwid2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCI6IFwiXjAuMTAuMFwiXG4gIH0sXG4gIFwicGVlckRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJ3ZWJleHRlbnNpb24tcG9seWZpbGxcIjogXCI+PTAuMTAuMFwiXG4gIH0sXG4gIFwicGFja2FnZU1hbmFnZXJcIjogXCJwbnBtQDguNi4zXCIsXG4gIFwic2ltcGxlLWdpdC1ob29rc1wiOiB7XG4gICAgXCJwcmUtY29tbWl0XCI6IFwicG5wbSBsaW50LXN0YWdlZFwiXG4gIH0sXG4gIFwibGludC1zdGFnZWRcIjoge1xuICAgIFwiKlwiOiBcInByZXR0aWVyIC0td3JpdGVcIlxuICB9LFxuICBcImNoYW5nZWxvZ1wiOiB7XG4gICAgXCJleGNsdWRlQXV0aG9yc1wiOiBbXG4gICAgICBcImFhcm9ua2xpbmtlcjFAZ21haWwuY29tXCJcbiAgICBdXG4gIH0sXG4gIFwicG5wbVwiOiB7XG4gICAgXCJwZWVyRGVwZW5kZW5jeVJ1bGVzXCI6IHtcbiAgICAgIFwiaWdub3JlTWlzc2luZ1wiOiBbXG4gICAgICAgIFwiQGFsZ29saWEvY2xpZW50LXNlYXJjaFwiLFxuICAgICAgICBcInNlYXJjaC1pbnNpZ2h0c1wiXG4gICAgICBdXG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgbG9hZENvbmZpZyB9IGZyb20gJ2MxMic7XG5pbXBvcnQge1xuICBJbmxpbmVDb25maWcsXG4gIEludGVybmFsQ29uZmlnLFxuICBVc2VyQ29uZmlnLFxuICBDb25maWdFbnYsXG4gIFVzZXJNYW5pZmVzdEZuLFxuICBVc2VyTWFuaWZlc3QsXG4gIFd4dFZpdGVDb25maWcsXG4gIEV4dGVuc2lvblJ1bm5lckNvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBjcmVhdGVGc0NhY2hlIH0gZnJvbSAnLi9jcmVhdGVGc0NhY2hlJztcbmltcG9ydCBjb25zb2xhLCB7IExvZ0xldmVscyB9IGZyb20gJ2NvbnNvbGEnO1xuaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuLi92aXRlLXBsdWdpbnMnO1xuaW1wb3J0IHsgZ2V0R2xvYmFscyB9IGZyb20gJy4vZ2xvYmFscyc7XG5cbi8qKlxuICogR2l2ZW4gYW4gaW5saW5lIGNvbmZpZywgZGlzY292ZXIgdGhlIGNvbmZpZyBmaWxlIGlmIG5lY2Vzc2FyeSwgbWVyZ2UgdGhlIHJlc3VsdHMsIHJlc29sdmUgYW55XG4gKiByZWxhdGl2ZSBwYXRocywgYW5kIGFwcGx5IGFueSBkZWZhdWx0cy5cbiAqXG4gKiBJbmxpbmUgY29uZmlnIGFsd2F5cyBoYXMgcHJpb3JpdHkgb3ZlciB1c2VyIGNvbmZpZy4gQ2xpIGZsYWdzIGFyZSBwYXNzZWQgYXMgaW5saW5lIGNvbmZpZyBpZiBzZXQuXG4gKiBJZiB1bnNldCwgdW5kZWZpbmVkIGlzIHBhc3NlZCBpbiwgbGV0dGluZyB0aGlzIGZ1bmN0aW9uIGRlY2lkZSBkZWZhdWx0IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEludGVybmFsQ29uZmlnKFxuICBpbmxpbmVDb25maWc6IElubGluZUNvbmZpZyxcbiAgY29tbWFuZDogJ2J1aWxkJyB8ICdzZXJ2ZScsXG4pOiBQcm9taXNlPEludGVybmFsQ29uZmlnPiB7XG4gIC8vIExvYWQgdXNlciBjb25maWdcblxuICBsZXQgdXNlckNvbmZpZzogVXNlckNvbmZpZyA9IHt9O1xuICBsZXQgdXNlckNvbmZpZ01ldGFkYXRhOiBJbnRlcm5hbENvbmZpZ1sndXNlckNvbmZpZ01ldGFkYXRhJ10gfCB1bmRlZmluZWQ7XG4gIGlmIChpbmxpbmVDb25maWcuY29uZmlnRmlsZSAhPT0gZmFsc2UpIHtcbiAgICBjb25zdCB7IGNvbmZpZzogbG9hZGVkQ29uZmlnLCAuLi5tZXRhZGF0YSB9ID0gYXdhaXQgbG9hZENvbmZpZzxVc2VyQ29uZmlnPih7XG4gICAgICBuYW1lOiAnd3h0JyxcbiAgICAgIGN3ZDogaW5saW5lQ29uZmlnLnJvb3QgPz8gcHJvY2Vzcy5jd2QoKSxcbiAgICAgIHJjRmlsZTogZmFsc2UsXG4gICAgfSk7XG4gICAgdXNlckNvbmZpZyA9IGxvYWRlZENvbmZpZyA/PyB7fTtcbiAgICB1c2VyQ29uZmlnTWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgfVxuXG4gIC8vIE1lcmdlIGl0IGludG8gdGhlIGlubGluZSBjb25maWdcblxuICBjb25zdCBtZXJnZWRDb25maWcgPSBtZXJnZUlubGluZUNvbmZpZyhpbmxpbmVDb25maWcsIHVzZXJDb25maWcpO1xuXG4gIC8vIEFwcGx5IGRlZmF1bHRzIHRvIG1ha2UgaW50ZXJuYWwgY29uZmlnLlxuXG4gIGNvbnN0IGRlYnVnID0gbWVyZ2VkQ29uZmlnLmRlYnVnID8/IGZhbHNlO1xuICBjb25zdCBsb2dnZXIgPSBtZXJnZWRDb25maWcubG9nZ2VyID8/IGNvbnNvbGE7XG4gIGlmIChkZWJ1ZykgbG9nZ2VyLmxldmVsID0gTG9nTGV2ZWxzLmRlYnVnO1xuXG4gIGNvbnN0IGJyb3dzZXIgPSBtZXJnZWRDb25maWcuYnJvd3NlciA/PyAnY2hyb21lJztcbiAgY29uc3QgbWFuaWZlc3RWZXJzaW9uID1cbiAgICBtZXJnZWRDb25maWcubWFuaWZlc3RWZXJzaW9uID8/XG4gICAgKGJyb3dzZXIgPT09ICdmaXJlZm94JyB8fCBicm93c2VyID09PSAnc2FmYXJpJyA/IDIgOiAzKTtcbiAgY29uc3QgbW9kZSA9XG4gICAgbWVyZ2VkQ29uZmlnLm1vZGUgPz8gKGNvbW1hbmQgPT09ICdidWlsZCcgPyAncHJvZHVjdGlvbicgOiAnZGV2ZWxvcG1lbnQnKTtcbiAgY29uc3QgZW52OiBDb25maWdFbnYgPSB7IGJyb3dzZXIsIGNvbW1hbmQsIG1hbmlmZXN0VmVyc2lvbiwgbW9kZSB9O1xuXG4gIGNvbnN0IHJvb3QgPSBwYXRoLnJlc29sdmUoXG4gICAgaW5saW5lQ29uZmlnLnJvb3QgPz8gdXNlckNvbmZpZy5yb290ID8/IHByb2Nlc3MuY3dkKCksXG4gICk7XG4gIGNvbnN0IHd4dERpciA9IHBhdGgucmVzb2x2ZShyb290LCAnLnd4dCcpO1xuICBjb25zdCBzcmNEaXIgPSBwYXRoLnJlc29sdmUocm9vdCwgbWVyZ2VkQ29uZmlnLnNyY0RpciA/PyByb290KTtcbiAgY29uc3QgZW50cnlwb2ludHNEaXIgPSBwYXRoLnJlc29sdmUoXG4gICAgc3JjRGlyLFxuICAgIG1lcmdlZENvbmZpZy5lbnRyeXBvaW50c0RpciA/PyAnZW50cnlwb2ludHMnLFxuICApO1xuICBjb25zdCBwdWJsaWNEaXIgPSBwYXRoLnJlc29sdmUoc3JjRGlyLCBtZXJnZWRDb25maWcucHVibGljRGlyID8/ICdwdWJsaWMnKTtcbiAgY29uc3QgdHlwZXNEaXIgPSBwYXRoLnJlc29sdmUod3h0RGlyLCAndHlwZXMnKTtcbiAgY29uc3Qgb3V0QmFzZURpciA9IHBhdGgucmVzb2x2ZShyb290LCAnLm91dHB1dCcpO1xuICBjb25zdCBvdXREaXIgPSBwYXRoLnJlc29sdmUob3V0QmFzZURpciwgYCR7YnJvd3Nlcn0tbXYke21hbmlmZXN0VmVyc2lvbn1gKTtcblxuICBjb25zdCBydW5uZXJDb25maWcgPSBhd2FpdCBsb2FkQ29uZmlnPEV4dGVuc2lvblJ1bm5lckNvbmZpZz4oe1xuICAgIG5hbWU6ICd3ZWItZXh0JyxcbiAgICBjd2Q6IHJvb3QsXG4gICAgZ2xvYmFsUmM6IHRydWUsXG4gICAgcmNGaWxlOiAnLndlYmV4dHJjJyxcbiAgICBvdmVycmlkZXM6IGlubGluZUNvbmZpZy5ydW5uZXIsXG4gICAgZGVmYXVsdHM6IHVzZXJDb25maWcucnVubmVyLFxuICB9KTtcblxuICBjb25zdCBmaW5hbENvbmZpZzogSW50ZXJuYWxDb25maWcgPSB7XG4gICAgYnJvd3NlcixcbiAgICBjb21tYW5kLFxuICAgIGRlYnVnLFxuICAgIGVudHJ5cG9pbnRzRGlyLFxuICAgIGVudixcbiAgICBmc0NhY2hlOiBjcmVhdGVGc0NhY2hlKHd4dERpciksXG4gICAgaW1wb3J0czogbWVyZ2VkQ29uZmlnLmltcG9ydHMgPz8ge30sXG4gICAgbG9nZ2VyLFxuICAgIG1hbmlmZXN0OiBhd2FpdCByZXNvbHZlTWFuaWZlc3RDb25maWcoZW52LCBtZXJnZWRDb25maWcubWFuaWZlc3QpLFxuICAgIG1hbmlmZXN0VmVyc2lvbixcbiAgICBtb2RlLFxuICAgIG91dEJhc2VEaXIsXG4gICAgb3V0RGlyLFxuICAgIHB1YmxpY0RpcixcbiAgICByb290LFxuICAgIHJ1bm5lckNvbmZpZyxcbiAgICBzcmNEaXIsXG4gICAgdHlwZXNEaXIsXG4gICAgdml0ZTogKCkgPT4gKHt9KSwgLy8gUmVhbCB2YWx1ZSBhZGRlZCBhZnRlciB0aGlzIG9iamVjdCBpcyBpbml0aWFsaXplZC5cbiAgICB3eHREaXIsXG4gICAgemlwOiByZXNvbHZlSW50ZXJuYWxaaXBDb25maWcocm9vdCwgbWVyZ2VkQ29uZmlnKSxcbiAgICB0cmFuc2Zvcm1NYW5pZmVzdChtYW5pZmVzdCkge1xuICAgICAgdXNlckNvbmZpZy50cmFuc2Zvcm1NYW5pZmVzdD8uKG1hbmlmZXN0KTtcbiAgICAgIGlubGluZUNvbmZpZy50cmFuc2Zvcm1NYW5pZmVzdD8uKG1hbmlmZXN0KTtcbiAgICB9LFxuICAgIGFuYWx5c2lzOiB7XG4gICAgICBlbmFibGVkOiBtZXJnZWRDb25maWcuYW5hbHlzaXM/LmVuYWJsZWQgPz8gZmFsc2UsXG4gICAgICB0ZW1wbGF0ZTogbWVyZ2VkQ29uZmlnLmFuYWx5c2lzPy50ZW1wbGF0ZSA/PyAndHJlZW1hcCcsXG4gICAgfSxcbiAgICB1c2VyQ29uZmlnTWV0YWRhdGE6IHVzZXJDb25maWdNZXRhZGF0YSA/PyB7fSxcbiAgfTtcblxuICBmaW5hbENvbmZpZy52aXRlID0gKGVudikgPT5cbiAgICByZXNvbHZlSW50ZXJuYWxWaXRlQ29uZmlnKGVudiwgbWVyZ2VkQ29uZmlnLCBmaW5hbENvbmZpZyk7XG5cbiAgcmV0dXJuIGZpbmFsQ29uZmlnO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlTWFuaWZlc3RDb25maWcoXG4gIGVudjogQ29uZmlnRW52LFxuICBtYW5pZmVzdDogVXNlck1hbmlmZXN0IHwgUHJvbWlzZTxVc2VyTWFuaWZlc3Q+IHwgVXNlck1hbmlmZXN0Rm4gfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPFVzZXJNYW5pZmVzdD4ge1xuICByZXR1cm4gYXdhaXQgKHR5cGVvZiBtYW5pZmVzdCA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbWFuaWZlc3QoZW52KVxuICAgIDogbWFuaWZlc3QgPz8ge30pO1xufVxuXG4vKipcbiAqIE1lcmdlIHRoZSBpbmxpbmUgY29uZmlnIGFuZCB1c2VyIGNvbmZpZy4gSW5saW5lIGNvbmZpZyBpcyBnaXZlbiBwcmlvcml0eS4gRGVmYXVsdHMgYXJlIG5vdCBhcHBsaWVkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSW5saW5lQ29uZmlnKFxuICBpbmxpbmVDb25maWc6IElubGluZUNvbmZpZyxcbiAgdXNlckNvbmZpZzogVXNlckNvbmZpZyxcbik6IElubGluZUNvbmZpZyB7XG4gIGxldCBpbXBvcnRzOiBJbmxpbmVDb25maWdbJ2ltcG9ydHMnXTtcbiAgaWYgKGlubGluZUNvbmZpZy5pbXBvcnRzID09PSBmYWxzZSB8fCB1c2VyQ29uZmlnLmltcG9ydHMgPT09IGZhbHNlKSB7XG4gICAgaW1wb3J0cyA9IGZhbHNlO1xuICB9IGVsc2UgaWYgKHVzZXJDb25maWcuaW1wb3J0cyA9PSBudWxsICYmIGlubGluZUNvbmZpZy5pbXBvcnRzID09IG51bGwpIHtcbiAgICBpbXBvcnRzID0gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIGltcG9ydHMgPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgICAgdXNlckNvbmZpZy5pbXBvcnRzID8/IHt9LFxuICAgICAgaW5saW5lQ29uZmlnLmltcG9ydHMgPz8ge30sXG4gICAgKTtcbiAgfVxuICBjb25zdCBtYW5pZmVzdDogVXNlck1hbmlmZXN0Rm4gPSBhc3luYyAoZW52KSA9PiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IHJlc29sdmVNYW5pZmVzdENvbmZpZyhlbnYsIHVzZXJDb25maWcubWFuaWZlc3QpO1xuICAgIGNvbnN0IGlubGluZSA9IGF3YWl0IHJlc29sdmVNYW5pZmVzdENvbmZpZyhlbnYsIGlubGluZUNvbmZpZy5tYW5pZmVzdCk7XG4gICAgcmV0dXJuIHZpdGUubWVyZ2VDb25maWcodXNlciwgaW5saW5lKTtcbiAgfTtcbiAgY29uc3Qgdml0ZUNvbmZpZyA9IGFzeW5jIChlbnY6IENvbmZpZ0Vudik6IFByb21pc2U8V3h0Vml0ZUNvbmZpZz4gPT4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB1c2VyQ29uZmlnLnZpdGU/LihlbnYpO1xuICAgIGNvbnN0IGlubGluZSA9IGF3YWl0IGlubGluZUNvbmZpZy52aXRlPy4oZW52KTtcbiAgICByZXR1cm4gdml0ZS5tZXJnZUNvbmZpZyh1c2VyID8/IHt9LCBpbmxpbmUgPz8ge30pO1xuICB9O1xuICBjb25zdCBydW5uZXI6IElubGluZUNvbmZpZ1sncnVubmVyJ10gPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgIHVzZXJDb25maWcucnVubmVyID8/IHt9LFxuICAgIGlubGluZUNvbmZpZy5ydW5uZXIgPz8ge30sXG4gICk7XG4gIGNvbnN0IHppcDogSW5saW5lQ29uZmlnWyd6aXAnXSA9IHZpdGUubWVyZ2VDb25maWcoXG4gICAgdXNlckNvbmZpZy56aXAgPz8ge30sXG4gICAgaW5saW5lQ29uZmlnLnppcCA/PyB7fSxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHJvb3Q6IGlubGluZUNvbmZpZy5yb290ID8/IHVzZXJDb25maWcucm9vdCxcbiAgICBicm93c2VyOiBpbmxpbmVDb25maWcuYnJvd3NlciA/PyB1c2VyQ29uZmlnLmJyb3dzZXIsXG4gICAgbWFuaWZlc3RWZXJzaW9uOiBpbmxpbmVDb25maWcubWFuaWZlc3RWZXJzaW9uID8/IHVzZXJDb25maWcubWFuaWZlc3RWZXJzaW9uLFxuICAgIGNvbmZpZ0ZpbGU6IGlubGluZUNvbmZpZy5jb25maWdGaWxlLFxuICAgIGRlYnVnOiBpbmxpbmVDb25maWcuZGVidWcgPz8gdXNlckNvbmZpZy5kZWJ1ZyxcbiAgICBlbnRyeXBvaW50c0RpcjogaW5saW5lQ29uZmlnLmVudHJ5cG9pbnRzRGlyID8/IHVzZXJDb25maWcuZW50cnlwb2ludHNEaXIsXG4gICAgaW1wb3J0cyxcbiAgICBsb2dnZXI6IGlubGluZUNvbmZpZy5sb2dnZXIgPz8gdXNlckNvbmZpZy5sb2dnZXIsXG4gICAgbWFuaWZlc3QsXG4gICAgbW9kZTogaW5saW5lQ29uZmlnLm1vZGUgPz8gdXNlckNvbmZpZy5tb2RlLFxuICAgIHB1YmxpY0RpcjogaW5saW5lQ29uZmlnLnB1YmxpY0RpciA/PyB1c2VyQ29uZmlnLnB1YmxpY0RpcixcbiAgICBydW5uZXIsXG4gICAgc3JjRGlyOiBpbmxpbmVDb25maWcuc3JjRGlyID8/IHVzZXJDb25maWcuc3JjRGlyLFxuICAgIHZpdGU6IHZpdGVDb25maWcsXG4gICAgemlwLFxuICAgIGFuYWx5c2lzOiB7XG4gICAgICBlbmFibGVkOiBpbmxpbmVDb25maWcuYW5hbHlzaXM/LmVuYWJsZWQgPz8gdXNlckNvbmZpZy5hbmFseXNpcz8uZW5hYmxlZCxcbiAgICAgIHRlbXBsYXRlOlxuICAgICAgICBpbmxpbmVDb25maWcuYW5hbHlzaXM/LnRlbXBsYXRlID8/IHVzZXJDb25maWcuYW5hbHlzaXM/LnRlbXBsYXRlLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVJbnRlcm5hbFppcENvbmZpZyhcbiAgcm9vdDogc3RyaW5nLFxuICBtZXJnZWRDb25maWc6IElubGluZUNvbmZpZyxcbik6IEludGVybmFsQ29uZmlnWyd6aXAnXSB7XG4gIHJldHVybiB7XG4gICAgc291cmNlc1RlbXBsYXRlOiAne3tuYW1lfX0te3t2ZXJzaW9ufX0tc291cmNlcy56aXAnLFxuICAgIGFydGlmYWN0VGVtcGxhdGU6ICd7e25hbWV9fS17e3ZlcnNpb259fS17e2Jyb3dzZXJ9fS56aXAnLFxuICAgIHNvdXJjZXNSb290OiByb290LFxuICAgIC4uLm1lcmdlZENvbmZpZy56aXAsXG4gICAgaWdub3JlZFNvdXJjZXM6IFtcbiAgICAgICcqKi9ub2RlX21vZHVsZXMnLFxuICAgICAgLy8gV1hUIGZpbGVzXG4gICAgICAnKiovd2ViLWV4dC5jb25maWcudHMnLFxuICAgICAgLy8gSGlkZGVuIGZpbGVzXG4gICAgICAnKiovLionLFxuICAgICAgLy8gVGVzdHNcbiAgICAgICcqKi9fX3Rlc3RzX18vKionLFxuICAgICAgJyoqLyouKyh0ZXN0fHNwZWMpLj8oY3xtKSsoanx0KXM/KHgpJyxcbiAgICAgIC8vIEZyb20gdXNlclxuICAgICAgLi4uKG1lcmdlZENvbmZpZy56aXA/Lmlnbm9yZWRTb3VyY2VzID8/IFtdKSxcbiAgICBdLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlSW50ZXJuYWxWaXRlQ29uZmlnKFxuICBlbnY6IENvbmZpZ0VudixcbiAgbWVyZ2VkQ29uZmlnOiBJbmxpbmVDb25maWcsXG4gIGZpbmFsQ29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbikge1xuICBjb25zdCBpbnRlcm5hbFZpdGU6IHZpdGUuSW5saW5lQ29uZmlnID1cbiAgICAoYXdhaXQgbWVyZ2VkQ29uZmlnLnZpdGU/LihlbnYpKSA/PyB7fTtcblxuICBpbnRlcm5hbFZpdGUucm9vdCA9IGZpbmFsQ29uZmlnLnJvb3Q7XG4gIGludGVybmFsVml0ZS5jb25maWdGaWxlID0gZmFsc2U7XG4gIGludGVybmFsVml0ZS5sb2dMZXZlbCA9ICd3YXJuJztcbiAgaW50ZXJuYWxWaXRlLm1vZGUgPSBlbnYubW9kZTtcblxuICBpbnRlcm5hbFZpdGUuYnVpbGQgPz89IHt9O1xuICBpbnRlcm5hbFZpdGUuYnVpbGQub3V0RGlyID0gZmluYWxDb25maWcub3V0RGlyO1xuICBpbnRlcm5hbFZpdGUuYnVpbGQuZW1wdHlPdXREaXIgPSBmYWxzZTtcblxuICBpbnRlcm5hbFZpdGUucGx1Z2lucyA/Pz0gW107XG4gIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy5kb3dubG9hZChmaW5hbENvbmZpZykpO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMuZGV2SHRtbFByZXJlbmRlcihmaW5hbENvbmZpZykpO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMudW5pbXBvcnQoZmluYWxDb25maWcpKTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChcbiAgICBwbHVnaW5zLnZpcnR1YWxFbnRyeXBvaW50KCdiYWNrZ3JvdW5kJywgZmluYWxDb25maWcpLFxuICApO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKFxuICAgIHBsdWdpbnMudmlydHVhbEVudHJ5cG9pbnQoJ2NvbnRlbnQtc2NyaXB0JywgZmluYWxDb25maWcpLFxuICApO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKFxuICAgIHBsdWdpbnMudmlydHVhbEVudHJ5cG9pbnQoJ3VubGlzdGVkLXNjcmlwdCcsIGZpbmFsQ29uZmlnKSxcbiAgKTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLmRldlNlcnZlckdsb2JhbHMoZmluYWxDb25maWcpKTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLnRzY29uZmlnUGF0aHMoZmluYWxDb25maWcpKTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLm5vb3BCYWNrZ3JvdW5kKCkpO1xuICBpZiAoZmluYWxDb25maWcuYW5hbHlzaXMuZW5hYmxlZCkge1xuICAgIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy5idW5kbGVBbmFseXNpcygpKTtcbiAgfVxuXG4gIGludGVybmFsVml0ZS5kZWZpbmUgPz89IHt9O1xuICBmb3IgKGNvbnN0IGdsb2JhbCBvZiBnZXRHbG9iYWxzKGZpbmFsQ29uZmlnKSkge1xuICAgIGludGVybmFsVml0ZS5kZWZpbmVbZ2xvYmFsLm5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZ2xvYmFsLnZhbHVlKTtcbiAgfVxuICByZXR1cm4gaW50ZXJuYWxWaXRlO1xufVxuIiwgImltcG9ydCBmcywgeyBlbnN1cmVEaXIgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBGc0NhY2hlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZGlybmFtZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgd3JpdGVGaWxlSWZEaWZmZXJlbnQgfSBmcm9tICcuL2ZzJztcblxuLyoqXG4gKiBBIGJhc2ljIGZpbGUgc3lzdGVtIGNhY2hlIHN0b3JlZCBhdCBgPHNyY0Rpcj4vLnd4dC9jYWNoZS88a2V5PmAuIEp1c3QgY2FjaGVzIGEgc3RyaW5nIGluIGFcbiAqIGZpbGUgZm9yIHRoZSBnaXZlbiBrZXkuXG4gKlxuICogQHBhcmFtIHNyY0RpciBBYnNvbHV0ZSBwYXRoIHRvIHNvdXJjZSBkaXJlY3RvcnkuIFNlZSBgSW50ZXJuYWxDb25maWcuc3JjRGlyYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnNDYWNoZSh3eHREaXI6IHN0cmluZyk6IEZzQ2FjaGUge1xuICBjb25zdCBnZXRQYXRoID0gKGtleTogc3RyaW5nKSA9PlxuICAgIHJlc29sdmUod3h0RGlyLCAnY2FjaGUnLCBlbmNvZGVVUklDb21wb25lbnQoa2V5KSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBnZXRQYXRoKGtleSk7XG4gICAgICBhd2FpdCBlbnN1cmVEaXIoZGlybmFtZShwYXRoKSk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGVJZkRpZmZlcmVudChwYXRoLCB2YWx1ZSk7XG4gICAgfSxcbiAgICBhc3luYyBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGdldFBhdGgoa2V5KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcblxuLyoqXG4gKiBPbmx5IHdyaXRlIHRoZSBjb250ZW50cyB0byBhIGZpbGUgaWYgaXQgcmVzdWx0cyBpbiBhIGNoYW5nZS4gVGhpcyBwcmV2ZW50cyB1bm5lY2Vzc2FyeSBmaWxlXG4gKiB3YXRjaGVycyBmcm9tIGJlaW5nIHRyaWdnZXJlZCwgbGlrZSBXWFQncyBkZXYgc2VydmVyIG9yIHRoZSBUUyBsYW5ndWFnZSBzZXJ2ZXIgaW4gZWRpdG9ycy5cbiAqXG4gKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byB3cml0ZSB0by5cbiAqIEBwYXJhbSBuZXdDb250ZW50cyBUaGUgbmV3IHRleHQgY29udGVudCB0byB3cml0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlRmlsZUlmRGlmZmVyZW50KFxuICBmaWxlOiBzdHJpbmcsXG4gIG5ld0NvbnRlbnRzOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZXhpc3RpbmdDb250ZW50cyA9IGF3YWl0IGZzXG4gICAgLnJlYWRGaWxlKGZpbGUsICd1dGYtOCcpXG4gICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG5cbiAgaWYgKGV4aXN0aW5nQ29udGVudHMgIT09IG5ld0NvbnRlbnRzKSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGUsIG5ld0NvbnRlbnRzKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEVudHJ5cG9pbnQsIFBlckJyb3dzZXJPcHRpb24sIFRhcmdldEJyb3dzZXIgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgcGF0aCwgeyByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnLi9wYXRocyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRyeXBvaW50TmFtZShcbiAgZW50cnlwb2ludHNEaXI6IHN0cmluZyxcbiAgaW5wdXRQYXRoOiBzdHJpbmcsXG4gIC8vIHR5cGU6IEVudHJ5cG9pbnRbJ3R5cGUnXSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZW50cnlwb2ludHNEaXIsIGlucHV0UGF0aCk7XG4gIC8vIEdyYWIgdGhlIHN0cmluZyB1cCB0byB0aGUgZmlyc3QgLiBvciAvIG9yIFxcXFxcbiAgY29uc3QgbmFtZSA9IHJlbGF0aXZlUGF0aC5zcGxpdCgvW1xcLlxcL1xcXFxdLywgMilbMF07XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRyeXBvaW50T3V0cHV0RmlsZShcbiAgZW50cnlwb2ludDogRW50cnlwb2ludCxcbiAgZXh0OiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gcmVzb2x2ZShlbnRyeXBvaW50Lm91dHB1dERpciwgYCR7ZW50cnlwb2ludC5uYW1lfSR7ZXh0fWApO1xufVxuXG4vKipcbiAqIFJldHVybidzIHRoZSBlbnRyeXBvaW50J3Mgb3V0cHV0IHBhdGggcmVsYXRpdmUgdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuIFVzZWQgZm9yIHBhdGhzIGluIHRoZVxuICogbWFuaWZlc3QgYW5kIHJvbGx1cCdzIGJ1bmRsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICBlbnRyeXBvaW50OiBFbnRyeXBvaW50LFxuICBvdXREaXI6IHN0cmluZyxcbiAgZXh0OiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gbm9ybWFsaXplUGF0aChcbiAgICByZWxhdGl2ZShvdXREaXIsIGdldEVudHJ5cG9pbnRPdXRwdXRGaWxlKGVudHJ5cG9pbnQsIGV4dCkpLFxuICApO1xufVxuXG4vKipcbiAqIEdpdmVuIGFuIGVudHJ5cG9pbnQgb3B0aW9uLCByZXNvbHZlIGl0J3MgdmFsdWUgYmFzZWQgb24gYSB0YXJnZXQgYnJvd3Nlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQZXJCcm93c2VyT3B0aW9uPFQ+KFxuICBvcHRpb246IFBlckJyb3dzZXJPcHRpb248VD4sXG4gIGJyb3dzZXI6IFRhcmdldEJyb3dzZXIsXG4pOiBUIHtcbiAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG9wdGlvbikpXG4gICAgcmV0dXJuIChvcHRpb24gYXMgYW55KVticm93c2VyXTtcbiAgcmV0dXJuIG9wdGlvbjtcbn1cbiIsICJpbXBvcnQgbm9kZVBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5cbi8qKlxuICogQ29udmVydHMgc3lzdGVtIHBhdGhzIHRvIG5vcm1hbGl6ZWQgYnVuZGxlciBwYXRoLiBPbiB3aW5kb3dzIGFuZCB1bml4LCB0aGlzIHJldHVybnMgcGF0aHMgd2l0aCAvXG4gKiBpbnN0ZWFkIG9mIFxcLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdml0ZS5ub3JtYWxpemVQYXRoKHBhdGgpO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgbm9ybWFsaXplZCBwYXRoLCBjb252ZXJ0IGl0IHRvIHRoZSBzeXN0ZW0gcGF0aCBzdHlsZS4gT24gV2luZG93cywgc3dpdGNoIHRvIFxcLCBvdGhlcndpc2UgdXNlIC8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bm5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vZGVQYXRoLm5vcm1hbGl6ZShwYXRoKTtcbn1cblxuZXhwb3J0IGNvbnN0IENTU19FWFRFTlNJT05TID0gWydjc3MnLCAnc2NzcycsICdzYXNzJywgJ2xlc3MnLCAnc3R5bCcsICdzdHlsdXMnXTtcblxuLy8gLm1vZHVsZS5jc3MgZmlsZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYmVjYXVzZSB0aGVzZSBhcmUgZ2xvYmFsIENTUyBmaWxlcywgc28gdXNpbmcgQ1NTIG1vZHVsZXMgZG9lc24ndCBtYWtlIHNlbnNlLlxuZXhwb3J0IGNvbnN0IENTU19FWFRFTlNJT05TX1BBVFRFUk4gPSBgKygke0NTU19FWFRFTlNJT05TLmpvaW4oJ3wnKX0pYDtcbiIsICJpbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50TmFtZSB9IGZyb20gJy4uL3V0aWxzL2VudHJ5cG9pbnRzJztcbmltcG9ydCB7IHBhcnNlSFRNTCB9IGZyb20gJ2xpbmtlZG9tJztcbmltcG9ydCB7IGRpcm5hbWUsIGlzQWJzb2x1dGUsIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5cbi8vIENhY2hlIHRoZSBwcmVhbWJsZSBzY3JpcHQgZm9yIGFsbCBkZXZIdG1sUHJlcmVuZGVyIHBsdWdpbnMsIG5vdCBqdXN0IG9uZVxubGV0IHJlYWN0UmVmcmVzaFByZWFtYmxlID0gJyc7XG5cbi8qKlxuICogUHJlLXJlbmRlcnMgdGhlIEhUTUwgZW50cnlwb2ludHMgd2hlbiBidWlsZGluZyB0aGUgZXh0ZW5zaW9uIHRvIGNvbm5lY3QgdG8gdGhlIGRldiBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXZIdG1sUHJlcmVuZGVyKGNvbmZpZzogSW50ZXJuYWxDb25maWcpOiB2aXRlLlBsdWdpbk9wdGlvbiB7XG4gIGNvbnN0IGh0bWxSZWxvYWRJZCA9ICdAd3h0L3JlbG9hZC1odG1sJztcbiAgY29uc3QgcmVzb2x2ZWRIdG1sUmVsb2FkSWQgPSByZXNvbHZlKFxuICAgIGNvbmZpZy5yb290LFxuICAgICdub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzL3JlbG9hZC1odG1sLmpzJyxcbiAgKTtcbiAgY29uc3QgdmlydHVhbFJlYWN0UmVmcmVzaElkID0gJ0B3eHQvdmlydHVhbC1yZWFjdC1yZWZyZXNoJztcbiAgY29uc3QgcmVzb2x2ZWRWaXJ0dWFsUmVhY3RSZWZyZXNoSWQgPSAnXFwwJyArIHZpcnR1YWxSZWFjdFJlZnJlc2hJZDtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGFwcGx5OiAnYnVpbGQnLFxuICAgICAgbmFtZTogJ3d4dDpkZXYtaHRtbC1wcmVyZW5kZXInLFxuICAgICAgY29uZmlnKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAgIFtodG1sUmVsb2FkSWRdOiByZXNvbHZlZEh0bWxSZWxvYWRJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICAvLyBDb252ZXJ0IHNjcmlwdHMgbGlrZSBzcmM9XCIuL21haW4udHN4XCIgLT4gc3JjPVwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2VudHJ5cG9pbnRzL3BvcHVwL21haW4udHN4XCJcbiAgICAgIC8vIGJlZm9yZSB0aGUgcGF0aHMgYXJlIHJlcGxhY2VkIHdpdGggdGhlaXIgYnVuZGxlZCBwYXRoXG4gICAgICB0cmFuc2Zvcm0oY29kZSwgaWQpIHtcbiAgICAgICAgY29uc3Qgc2VydmVyID0gY29uZmlnLnNlcnZlcjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbmZpZy5jb21tYW5kICE9PSAnc2VydmUnIHx8XG4gICAgICAgICAgc2VydmVyID09IG51bGwgfHxcbiAgICAgICAgICAhaWQuZW5kc1dpdGgoJy5odG1sJylcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IGRvY3VtZW50IH0gPSBwYXJzZUhUTUwoY29kZSk7XG5cbiAgICAgICAgY29uc3QgcG9pbnRUb0RldlNlcnZlciA9IChcbiAgICAgICAgICBxdWVyeVNlbGVjdG9yOiBzdHJpbmcsXG4gICAgICAgICAgYXR0cjogc3RyaW5nLFxuICAgICAgICApOiB2b2lkID0+IHtcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5U2VsZWN0b3IpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHIpO1xuICAgICAgICAgICAgaWYgKCFzcmMpIHJldHVybjtcblxuICAgICAgICAgICAgaWYgKGlzQWJzb2x1dGUoc3JjKSkge1xuICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyLCBzZXJ2ZXIub3JpZ2luICsgc3JjKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICAgICAgICBjb25zdCBhYnMgPSByZXNvbHZlKGRpcm5hbWUoaWQpLCBzcmMpO1xuICAgICAgICAgICAgICBjb25zdCBwYXRobmFtZSA9IHJlbGF0aXZlKGNvbmZpZy5yb290LCBhYnMpO1xuICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyLCBgJHtzZXJ2ZXIub3JpZ2lufS8ke3BhdGhuYW1lfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBwb2ludFRvRGV2U2VydmVyKCdzY3JpcHRbdHlwZT1tb2R1bGVdJywgJ3NyYycpO1xuICAgICAgICBwb2ludFRvRGV2U2VydmVyKCdsaW5rW3JlbD1zdHlsZXNoZWV0XScsICdocmVmJyk7XG5cbiAgICAgICAgLy8gQWRkIGEgc2NyaXB0IHRvIGFkZCBwYWdlIHJlbG9hZGluZ1xuICAgICAgICBjb25zdCByZWxvYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICByZWxvYWRlci5zcmMgPSBodG1sUmVsb2FkSWQ7XG4gICAgICAgIHJlbG9hZGVyLnR5cGUgPSAnbW9kdWxlJztcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyZWxvYWRlcik7XG5cbiAgICAgICAgY29uc3QgbmV3SHRtbCA9IGRvY3VtZW50LnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoJ3RyYW5zZm9ybSAnICsgaWQpO1xuICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCdPbGQgSFRNTDpcXG4nICsgY29kZSk7XG4gICAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoJ05ldyBIVE1MOlxcbicgKyBuZXdIdG1sKTtcbiAgICAgICAgcmV0dXJuIG5ld0h0bWw7XG4gICAgICB9LFxuXG4gICAgICAvLyBQYXNzIHRoZSBIVE1MIHRocm91Z2ggdGhlIGRldiBzZXJ2ZXIgdG8gYWRkIGRldi1tb2RlIHNwZWNpZmljIGNvZGVcbiAgICAgIGFzeW5jIHRyYW5zZm9ybUluZGV4SHRtbChodG1sLCBjdHgpIHtcbiAgICAgICAgY29uc3Qgc2VydmVyID0gY29uZmlnLnNlcnZlcjtcbiAgICAgICAgaWYgKGNvbmZpZy5jb21tYW5kICE9PSAnc2VydmUnIHx8IHNlcnZlciA9PSBudWxsKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxVcmwgPSBgJHtzZXJ2ZXIub3JpZ2lufSR7Y3R4LnBhdGh9YDtcbiAgICAgICAgY29uc3QgbmFtZSA9IGdldEVudHJ5cG9pbnROYW1lKGNvbmZpZy5lbnRyeXBvaW50c0RpciwgY3R4LmZpbGVuYW1lKTtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7c2VydmVyLm9yaWdpbn0vJHtuYW1lfS5odG1sYDtcbiAgICAgICAgY29uc3Qgc2VydmVySHRtbCA9IGF3YWl0IHNlcnZlci50cmFuc2Zvcm1JbmRleEh0bWwoXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGh0bWwsXG4gICAgICAgICAgb3JpZ2luYWxVcmwsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgfSA9IHBhcnNlSFRNTChzZXJ2ZXJIdG1sKTtcblxuICAgICAgICAvLyBSZWFjdCBwYWdlcyBpbmNsdWRlIGEgcHJlYW1ibGUgYXMgYW4gdW5zYWZlLWlubGluZSB0eXBlPVwibW9kdWxlXCIgc2NyaXB0IHRvIGVuYWJsZSBmYXN0IHJlZnJlc2gsIGFzIHNob3duIGhlcmU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93eHQtZGV2L3d4dC9pc3N1ZXMvMTU3I2lzc3VlY29tbWVudC0xNzU2NDk3NjE2XG4gICAgICAgIC8vIFNpbmNlIHVuc2FmZS1pbmxpbmUgc2NyaXB0cyBhcmUgYmxvY2tlZCBieSBNVjMgQ1NQcywgd2UgbmVlZCB0byB2aXJ0dWFsaXplIGl0LlxuICAgICAgICBjb25zdCByZWFjdFJlZnJlc2hTY3JpcHQgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NjcmlwdFt0eXBlPW1vZHVsZV0nKSxcbiAgICAgICAgKS5maW5kKChzY3JpcHQpID0+IHNjcmlwdC5pbm5lckhUTUwuaW5jbHVkZXMoJ0ByZWFjdC1yZWZyZXNoJykpO1xuICAgICAgICBpZiAocmVhY3RSZWZyZXNoU2NyaXB0KSB7XG4gICAgICAgICAgLy8gU2F2ZSBwcmVhbWJsZSB0byBzZXJ2ZSBmcm9tIHNlcnZlclxuICAgICAgICAgIHJlYWN0UmVmcmVzaFByZWFtYmxlID0gcmVhY3RSZWZyZXNoU2NyaXB0LmlubmVySFRNTDtcblxuICAgICAgICAgIC8vIFJlcGxhY2UgdW5zYWZlIGlubGluZSBzY3JpcHRcbiAgICAgICAgICBjb25zdCB2aXJ0dWFsU2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgICAgdmlydHVhbFNjcmlwdC50eXBlID0gJ21vZHVsZSc7XG4gICAgICAgICAgdmlydHVhbFNjcmlwdC5zcmMgPSBgJHtzZXJ2ZXIub3JpZ2lufS8ke3ZpcnR1YWxSZWFjdFJlZnJlc2hJZH1gO1xuICAgICAgICAgIHJlYWN0UmVmcmVzaFNjcmlwdC5yZXBsYWNlV2l0aCh2aXJ0dWFsU2NyaXB0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoYW5nZSAvQHZpdGUvY2xpZW50IC0+IGh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9Adml0ZS9jbGllbnRcbiAgICAgICAgY29uc3Qgdml0ZUNsaWVudFNjcmlwdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFNjcmlwdEVsZW1lbnQ+KFxuICAgICAgICAgIFwic2NyaXB0W3NyYz0nL0B2aXRlL2NsaWVudCddXCIsXG4gICAgICAgICk7XG4gICAgICAgIGlmICh2aXRlQ2xpZW50U2NyaXB0KSB7XG4gICAgICAgICAgdml0ZUNsaWVudFNjcmlwdC5zcmMgPSBgJHtzZXJ2ZXIub3JpZ2lufSR7dml0ZUNsaWVudFNjcmlwdC5zcmN9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld0h0bWwgPSBkb2N1bWVudC50b1N0cmluZygpO1xuICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCd0cmFuc2Zvcm1JbmRleEh0bWwgJyArIGN0eC5maWxlbmFtZSk7XG4gICAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoJ09sZCBIVE1MOlxcbicgKyBodG1sKTtcbiAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnTmV3IEhUTUw6XFxuJyArIG5ld0h0bWwpO1xuICAgICAgICByZXR1cm4gbmV3SHRtbDtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd3h0OnZpcnR1YWxpemUtcmVhY3QtcmVmcmVzaCcsXG4gICAgICBhcHBseTogJ3NlcnZlJyxcbiAgICAgIHJlc29sdmVJZChpZCkge1xuICAgICAgICBpZiAoaWQgPT09IGAvJHt2aXJ0dWFsUmVhY3RSZWZyZXNoSWR9YCkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlZFZpcnR1YWxSZWFjdFJlZnJlc2hJZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZ25vcmUgY2h1bmsgY29udGVudHMgd2hlbiBwcmUtcmVuZGVyaW5nXG4gICAgICAgIGlmIChpZC5zdGFydHNXaXRoKCcvY2h1bmtzLycpKSB7XG4gICAgICAgICAgcmV0dXJuICdcXDBub29wJztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGxvYWQoaWQpIHtcbiAgICAgICAgaWYgKGlkID09PSByZXNvbHZlZFZpcnR1YWxSZWFjdFJlZnJlc2hJZCkge1xuICAgICAgICAgIHJldHVybiByZWFjdFJlZnJlc2hQcmVhbWJsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09ICdcXDBub29wJykge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICBdO1xufVxuIiwgImltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogRGVmaW5lcyBnbG9iYWwgY29uc3RhbnRzIGFib3V0IHRoZSBkZXYgc2VydmVyLiBIZWxwcyBzY3JpcHRzIGNvbm5lY3QgdG8gdGhlIHNlcnZlcidzIHdlYiBzb2NrZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXZTZXJ2ZXJHbG9iYWxzKGludGVybmFsQ29uZmlnOiBJbnRlcm5hbENvbmZpZyk6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3d4dDpkZXYtc2VydmVyLWdsb2JhbHMnLFxuICAgIGNvbmZpZygpIHtcbiAgICAgIGlmIChpbnRlcm5hbENvbmZpZy5zZXJ2ZXIgPT0gbnVsbCB8fCBpbnRlcm5hbENvbmZpZy5jb21tYW5kID09ICdidWlsZCcpXG4gICAgICAgIHJldHVybjtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVmaW5lOiB7XG4gICAgICAgICAgX19ERVZfU0VSVkVSX1BST1RPQ09MX186IEpTT04uc3RyaW5naWZ5KCd3czonKSxcbiAgICAgICAgICBfX0RFVl9TRVJWRVJfSE9TVE5BTUVfXzogSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICBpbnRlcm5hbENvbmZpZy5zZXJ2ZXIuaG9zdG5hbWUsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfX0RFVl9TRVJWRVJfUE9SVF9fOiBKU09OLnN0cmluZ2lmeShpbnRlcm5hbENvbmZpZy5zZXJ2ZXIucG9ydCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IGRucyBmcm9tICdub2RlOmRucyc7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gJy4vcHJvbWlzZXMnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5cbmZ1bmN0aW9uIGlzT2ZmbGluZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgaXNPZmZsaW5lID0gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlcykgPT4ge1xuICAgIGRucy5yZXNvbHZlKCdnb29nbGUuY29tJywgKGVycikgPT4ge1xuICAgICAgaWYgKGVyciA9PSBudWxsKSB7XG4gICAgICAgIHJlcyhmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXModHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gd2l0aFRpbWVvdXQoaXNPZmZsaW5lLCAxZTMpLmNhdGNoKCgpID0+IHRydWUpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNPbmxpbmUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IG9mZmxpbmUgPSBhd2FpdCBpc09mZmxpbmUoKTtcbiAgcmV0dXJuICFvZmZsaW5lO1xufVxuXG4vKipcbiAqIEZldGNoZXMgYSBVUkwgd2l0aCBhIHNpbXBsZSBHRVQgcmVxdWVzdC4gR3JhYnMgaXQgZnJvbSBjYWNoZSBpZiBpdCBkb2Vzbid0IGV4aXN0LCBvciB0aHJvd3MgYW5cbiAqIGVycm9yIGlmIGl0IGNhbid0IGJlIHJlc29sdmVkIHZpYSB0aGUgbmV0d29yayBvciBjYWNoZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoQ2FjaGVkKFxuICB1cmw6IHN0cmluZyxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGxldCBjb250ZW50OiBzdHJpbmcgPSAnJztcblxuICBpZiAoYXdhaXQgaXNPbmxpbmUoKSkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgaWYgKHJlcy5zdGF0dXMgPCAzMDApIHtcbiAgICAgIGNvbnRlbnQgPSBhd2FpdCByZXMudGV4dCgpO1xuICAgICAgYXdhaXQgY29uZmlnLmZzQ2FjaGUuc2V0KHVybCwgY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBGYWlsZWQgdG8gZG93bmxvYWQgXCIke3VybH1cIiwgZmFsbGluZyBiYWNrIHRvIGNhY2hlLi4uYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb250ZW50KSBjb250ZW50ID0gKGF3YWl0IGNvbmZpZy5mc0NhY2hlLmdldCh1cmwpKSA/PyAnJztcbiAgaWYgKCFjb250ZW50KVxuICAgIHRocm93IEVycm9yKFxuICAgICAgYE9mZmxpbmUgYW5kIFwiJHt1cmx9XCIgaGFzIG5vdCBiZWVuIGNhY2hlZC4gVHJ5IGFnYWluIHdoZW4gb25saW5lLmAsXG4gICAgKTtcblxuICByZXR1cm4gY29udGVudDtcbn1cbiIsICIvKipcbiAqIEFkZCBhIHRpbWVvdXQgdG8gYSBwcm9taXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRpbWVvdXQ8VD4oXG4gIHByb21pc2U6IFByb21pc2U8VD4sXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlaihgUHJvbWlzZSB0aW1lZCBvdXQgYWZ0ZXIgJHtkdXJhdGlvbn1tc2ApO1xuICAgIH0sIGR1cmF0aW9uKTtcbiAgICBwcm9taXNlXG4gICAgICAudGhlbihyZXMpXG4gICAgICAuY2F0Y2gocmVqKVxuICAgICAgLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgRG9uJ3QgdXNlIGluIHByb2R1Y3Rpb24sIGp1c3QgZm9yIHRlc3RpbmcgYW5kIHNsb3dpbmcgdGhpbmdzIGRvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzKSA9PiBzZXRUaW1lb3V0KHJlcywgbXMpKTtcbn1cbiIsICJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZmV0Y2hDYWNoZWQgfSBmcm9tICcuLi91dGlscy9uZXR3b3JrJztcblxuLyoqXG4gKiBEb3dubG9hZHMgYW55IFVSTCBpbXBvcnRzLCBsaWtlIEdvb2dsZSBBbmFseXRpY3MsIGludG8gdmlydHVhbCBtb2R1bGVzIHNvIHRoZXkgYXJlIGJ1bmRsZWQgd2l0aFxuICogdGhlIGV4dGVuc2lvbiBpbnN0ZWFkIG9mIGRlcGVuZGluZyBvbiByZW1vdGUgY29kZSBhdCBydW50aW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgXCJ1cmw6aHR0cHM6Ly9nb29nbGUtdGFnbWFuYWdlci5jb20vZ3RhZz9pZD1YWVpcIjtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkKGNvbmZpZzogSW50ZXJuYWxDb25maWcpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6ZG93bmxvYWQnLFxuICAgIHJlc29sdmVJZChpZCkge1xuICAgICAgaWYgKGlkLnN0YXJ0c1dpdGgoJ3VybDonKSkgcmV0dXJuICdcXDAnICsgaWQ7XG4gICAgfSxcbiAgICBhc3luYyBsb2FkKGlkKSB7XG4gICAgICBpZiAoIWlkLnN0YXJ0c1dpdGgoJ1xcMHVybDonKSkgcmV0dXJuO1xuXG4gICAgICAvLyBMb2FkIGZpbGUgZnJvbSBuZXR3b3JrIG9yIGNhY2hlXG4gICAgICBjb25zdCB1cmwgPSBpZC5yZXBsYWNlKCdcXDB1cmw6JywgJycpO1xuICAgICAgcmV0dXJuIGF3YWl0IGZldGNoQ2FjaGVkKHVybCwgY29uZmlnKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBFbnRyeXBvaW50LCBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGRpcm5hbWUsIGV4dG5hbWUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGggfSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgZnMsIHsgZW5zdXJlRGlyIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGhzJztcblxuLyoqXG4gKiBFbnN1cmVzIHRoZSBIVE1MIGZpbGVzIG91dHB1dCBieSBhIG11bHRpcGFnZSBidWlsZCBhcmUgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uIFRoaXMgZG9lcyB0d29cbiAqIHRoaW5nczpcbiAqXG4gKiAxLiBNb3ZlcyB0aGUgSE1UTCBmaWxlcyB0byB0aGVpciBmaW5hbCBsb2NhdGlvbiBhdCBgPG91dERpcj4vPGVudHJ5cG9pbnQubmFtZT4uaHRtbGAuXG4gKiAyLiBVcGRhdGVzIHRoZSBidW5kbGUgc28gaXQgc3VtbWFyaXplcyB0aGUgZmlsZXMgY29ycmVjdGx5IGluIHRoZSByZXR1cm5lZCBidWlsZCBvdXRwdXQuXG4gKlxuICogQXNzZXRzIChKUyBhbmQgQ1NTKSBhcmUgb3V0cHV0IHRvIHRoZSBgPG91dERpcj4vYXNzZXRzYCBkaXJlY3RvcnksIGFuZCBkb24ndCBuZWVkIHRvIGJlIG1vZGlmaWVkLlxuICogSFRNTCBmaWxlcyBhY2Nlc3MgdGhlbSB2aWEgYWJzb2x1dGUgVVJMcywgc28gd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgYW55IGltcG9ydCBwYXRocyBpbiB0aGUgSFRNTFxuICogZmlsZXMgZWl0aGVyLlxuICpcbiAqIFRISVMgUExVR0lOIFNIT1VMRCBPTkxZIEJFIEFQUExJRUQgVE8gTVVMVElQQUdFIEJVSUxEUy4gSXQgc2hvdWxkIG5vdCBiZSBhZGRlZCB0byBldmVyeSBidWlsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGFnZU1vdmUoXG4gIGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiB2aXRlLlBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3d4dDptdWx0aXBhZ2UtbW92ZScsXG4gICAgYXN5bmMgd3JpdGVCdW5kbGUoXywgYnVuZGxlKSB7XG4gICAgICBmb3IgKGNvbnN0IG9sZEJ1bmRsZVBhdGggaW4gYnVuZGxlKSB7XG4gICAgICAgIC8vIG9sZEJ1bmRsZVBhdGggPSAnZW50cnlwb2ludHMvcG9wdXAuaHRtbCcgb3IgJ2VudHJ5cG9pbnRzL29wdGlvbnMvaW5kZXguaHRtbCdcblxuICAgICAgICAvLyBGaW5kIGEgbWF0Y2hpbmcgZW50cnlwb2ludCAtIG9sZEJ1bmRsZVBhdGggaXMgdGhlIHNhbWUgYXMgZW5kIGVuZCBvZiB0aGUgaW5wdXQgcGF0aC5cbiAgICAgICAgY29uc3QgZW50cnlwb2ludCA9IGVudHJ5cG9pbnRzLmZpbmQoXG4gICAgICAgICAgKGVudHJ5KSA9PiAhIW5vcm1hbGl6ZVBhdGgoZW50cnkuaW5wdXRQYXRoKS5lbmRzV2l0aChvbGRCdW5kbGVQYXRoKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGVudHJ5cG9pbnQgPT0gbnVsbCkge1xuICAgICAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgTm8gZW50cnlwb2ludCBmb3VuZCBmb3IgJHtvbGRCdW5kbGVQYXRofSwgbGVhdmluZyBpbiBjaHVua3MgZGlyZWN0b3J5YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSBuZXcgYnVuZGxlIHBhdGhcbiAgICAgICAgY29uc3QgbmV3QnVuZGxlUGF0aCA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgICAgIGVudHJ5cG9pbnQsXG4gICAgICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICAgICBleHRuYW1lKG9sZEJ1bmRsZVBhdGgpLFxuICAgICAgICApO1xuICAgICAgICBpZiAobmV3QnVuZGxlUGF0aCA9PT0gb2xkQnVuZGxlUGF0aCkge1xuICAgICAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICAnSFRNTCBmaWxlIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24nLFxuICAgICAgICAgICAgb2xkQnVuZGxlUGF0aCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTW92ZSBmaWxlIGFuZCB1cGRhdGUgYnVuZGxlXG4gICAgICAgIC8vIERvIHRoaXMgaW5zaWRlIGEgbXV0ZXggbG9jayBzbyBpdCBvbmx5IHJ1bnMgb25lIGF0IGEgdGltZSBmb3IgY29uY3VycmVudCBtdWx0aXBhZ2UgYnVpbGRzXG4gICAgICAgIGNvbnN0IG9sZEFic1BhdGggPSByZXNvbHZlKGNvbmZpZy5vdXREaXIsIG9sZEJ1bmRsZVBhdGgpO1xuICAgICAgICBjb25zdCBuZXdBYnNQYXRoID0gcmVzb2x2ZShjb25maWcub3V0RGlyLCBuZXdCdW5kbGVQYXRoKTtcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKGRpcm5hbWUobmV3QWJzUGF0aCkpO1xuICAgICAgICBhd2FpdCBmcy5tb3ZlKG9sZEFic1BhdGgsIG5ld0Fic1BhdGgsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlbmFtZWRDaHVuayA9IHtcbiAgICAgICAgICAuLi5idW5kbGVbb2xkQnVuZGxlUGF0aF0sXG4gICAgICAgICAgZmlsZU5hbWU6IG5ld0J1bmRsZVBhdGgsXG4gICAgICAgIH07XG4gICAgICAgIGRlbGV0ZSBidW5kbGVbb2xkQnVuZGxlUGF0aF07XG4gICAgICAgIGJ1bmRsZVtuZXdCdW5kbGVQYXRoXSA9IHJlbmFtZWRDaHVuaztcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVVuaW1wb3J0IH0gZnJvbSAndW5pbXBvcnQnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRVbmltcG9ydE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9hdXRvLWltcG9ydHMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IGV4dG5hbWUgfSBmcm9tICdwYXRoJztcblxuY29uc3QgRU5BQkxFRF9FWFRFTlNJT05TOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgdW5kZWZpbmVkPiA9IHtcbiAgJy5qcyc6IHRydWUsXG4gICcuanN4JzogdHJ1ZSxcbiAgJy50cyc6IHRydWUsXG4gICcudHN4JzogdHJ1ZSxcbiAgJy52dWUnOiB0cnVlLFxuICAnLnN2ZWx0ZSc6IHRydWUsXG59O1xuXG4vKipcbiAqIEluamVjdCBhbnkgZ2xvYmFsIGltcG9ydHMgZGVmaW5lZCBieSB1bmltcG9ydFxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pbXBvcnQoY29uZmlnOiBJbnRlcm5hbENvbmZpZyk6IHZpdGUuUGx1Z2luT3B0aW9uIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGdldFVuaW1wb3J0T3B0aW9ucyhjb25maWcpO1xuICBpZiAob3B0aW9ucyA9PT0gZmFsc2UpIHJldHVybiBbXTtcblxuICBjb25zdCB1bmltcG9ydCA9IGNyZWF0ZVVuaW1wb3J0KG9wdGlvbnMpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3d4dDp1bmltcG9ydCcsXG4gICAgYXN5bmMgY29uZmlnKCkge1xuICAgICAgYXdhaXQgdW5pbXBvcnQuc2NhbkltcG9ydHNGcm9tRGlyKHVuZGVmaW5lZCwgeyBjd2Q6IGNvbmZpZy5zcmNEaXIgfSk7XG4gICAgfSxcbiAgICBhc3luYyB0cmFuc2Zvcm0oY29kZSwgaWQpIHtcbiAgICAgIGNvbnN0IGV4dCA9IGV4dG5hbWUoaWQpO1xuICAgICAgaWYgKEVOQUJMRURfRVhURU5TSU9OU1tleHRdKSByZXR1cm4gdW5pbXBvcnQuaW5qZWN0SW1wb3J0cyhjb2RlLCBpZCk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBVbmltcG9ydE9wdGlvbnMgfSBmcm9tICd1bmltcG9ydCc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG1lcmdlQ29uZmlnIH0gZnJvbSAndml0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmltcG9ydE9wdGlvbnMoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQYXJ0aWFsPFVuaW1wb3J0T3B0aW9ucyB8IGZhbHNlPiB7XG4gIGlmIChjb25maWcuaW1wb3J0cyA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBkZWZhdWx0T3B0aW9uczogUGFydGlhbDxVbmltcG9ydE9wdGlvbnM+ID0ge1xuICAgIGRlYnVnTG9nOiBjb25maWcubG9nZ2VyLmRlYnVnLFxuICAgIGltcG9ydHM6IFt7IG5hbWU6ICdkZWZpbmVDb25maWcnLCBmcm9tOiAnd3h0JyB9XSxcbiAgICBwcmVzZXRzOiBbXG4gICAgICB7IHBhY2thZ2U6ICd3eHQvY2xpZW50JyB9LFxuICAgICAgeyBwYWNrYWdlOiAnd3h0L2Jyb3dzZXInIH0sXG4gICAgICB7IHBhY2thZ2U6ICd3eHQvc2FuZGJveCcgfSxcbiAgICBdLFxuICAgIHdhcm46IGNvbmZpZy5sb2dnZXIud2FybixcbiAgICBkaXJzOiBbJ2NvbXBvbmVudHMnLCAnY29tcG9zYWJsZXMnLCAnaG9va3MnLCAndXRpbHMnXSxcbiAgfTtcblxuICByZXR1cm4gbWVyZ2VDb25maWcoXG4gICAgZGVmYXVsdE9wdGlvbnMsXG4gICAgY29uZmlnLmltcG9ydHMsXG4gICkgYXMgUGFydGlhbDxVbmltcG9ydE9wdGlvbnM+O1xufVxuIiwgImltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgRW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGhzJztcblxuLyoqXG4gKiBXcmFwcyBhIHVzZXIncyBlbnRyeXBvaW50IHdpdGggYSB2aXR1YWwgdmVyc2lvbiB3aXRoIGFkZGl0aW9uYWwgbG9naWMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2aXJ0dWFsRW50cnlwb2ludChcbiAgdHlwZTogRW50cnlwb2ludFsndHlwZSddLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUGx1Z2luIHtcbiAgY29uc3QgdmlydHVhbElkID0gYHZpcnR1YWw6d3h0LSR7dHlwZX0/YDtcbiAgY29uc3QgcmVzb2x2ZWRWaXJ0dWFsSWQgPSBgXFwwJHt2aXJ0dWFsSWR9YDtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IGB3eHQ6dmlydHVhbC1lbnRyeXBvaW50YCxcbiAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgIC8vIElkIGRvZXNuJ3Qgc3RhcnQgd2l0aCBwcmVmaXgsIGl0IGxvb2tzIGxpa2UgdGhpczpcbiAgICAgIC8vIC9wYXRoL3RvL3Byb2plY3QvdmlydHVhbDpiYWNrZ3JvdW5kPy9wYXRoL3RvL3Byb2plY3QvZW50cnlwb2ludHMvYmFja2dyb3VuZC50c1xuICAgICAgY29uc3QgaW5kZXggPSBpZC5pbmRleE9mKHZpcnR1YWxJZCk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGlucHV0UGF0aCA9IG5vcm1hbGl6ZVBhdGgoaWQuc3Vic3RyaW5nKGluZGV4ICsgdmlydHVhbElkLmxlbmd0aCkpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkVmlydHVhbElkICsgaW5wdXRQYXRoO1xuICAgIH0sXG4gICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgaWYgKCFpZC5zdGFydHNXaXRoKHJlc29sdmVkVmlydHVhbElkKSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBpbnB1dFBhdGggPSBpZC5yZXBsYWNlKHJlc29sdmVkVmlydHVhbElkLCAnJyk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IGZzLnJlYWRGaWxlKFxuICAgICAgICByZXNvbHZlKFxuICAgICAgICAgIGNvbmZpZy5yb290LFxuICAgICAgICAgIGBub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzLyR7dHlwZX0tZW50cnlwb2ludC5qc2AsXG4gICAgICAgICksXG4gICAgICAgICd1dGYtOCcsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoYHZpcnR1YWw6dXNlci0ke3R5cGV9YCwgaW5wdXRQYXRoKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRzY29uZmlnUGF0aHMoY29uZmlnOiBJbnRlcm5hbENvbmZpZyk6IHZpdGUuUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OmFsaWFzZXMnLFxuICAgIGFzeW5jIGNvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgJ0BAJzogY29uZmlnLnJvb3QsXG4gICAgICAgICAgICAnfn4nOiBjb25maWcucm9vdCxcbiAgICAgICAgICAgICdAJzogY29uZmlnLnNyY0RpcixcbiAgICAgICAgICAgICd+JzogY29uZmlnLnNyY0RpcixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuXG4vKipcbiAqIEluIGRldiBtb2RlLCBpZiB0aGVyZSdzIG5vdCBhIGJhY2tncm91bmQgc2NyaXB0IGxpc3RlZCwgd2UgbmVlZCB0byBhZGQgb25lLlxuICpcbiAqIFRoaXMgZGVmaW5lJ3MgYSB2aXJ0dWFsIG1vZHVsZSB0aGF0IGlzIGJhc2ljYWxseSBqdXN0IGEgbm9vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vb3BCYWNrZ3JvdW5kKCk6IFBsdWdpbiB7XG4gIGNvbnN0IHZpcnR1YWxNb2R1bGVJZCA9IFZJUlRVQUxfTk9PUF9CQUNLR1JPVU5EX01PRFVMRV9JRDtcbiAgY29uc3QgcmVzb2x2ZWRWaXJ0dWFsTW9kdWxlSWQgPSAnXFwwJyArIHZpcnR1YWxNb2R1bGVJZDtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0Om5vb3AtYmFja2dyb3VuZCcsXG4gICAgcmVzb2x2ZUlkKGlkKSB7XG4gICAgICBpZiAoaWQgPT09IHZpcnR1YWxNb2R1bGVJZCkgcmV0dXJuIHJlc29sdmVkVmlydHVhbE1vZHVsZUlkO1xuICAgIH0sXG4gICAgbG9hZChpZCkge1xuICAgICAgaWYgKGlkID09PSByZXNvbHZlZFZpcnR1YWxNb2R1bGVJZCkge1xuICAgICAgICByZXR1cm4gYGltcG9ydCB7IGRlZmluZUJhY2tncm91bmQgfSBmcm9tICd3eHQvY2xpZW50JztcXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVCYWNrZ3JvdW5kKCgpID0+IHZvaWQgMClgO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBWSVJUVUFMX05PT1BfQkFDS0dST1VORF9NT0RVTEVfSUQgPSAndmlydHVhbDp1c2VyLWJhY2tncm91bmQnO1xuIiwgImltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBFbnRyeXBvaW50LCBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuXG4vKipcbiAqIFJlbmFtZSBDU1MgZW50cnlwb2ludCBvdXRwdXRzIHRvIGVuc3VyZSBhIEpTIGZpbGUgaXMgbm90IGdlbmVyYXRlZCwgYW5kIHRoYXQgdGhlIENTUyBmaWxlIGlzXG4gKiBwbGFjZWQgaW4gdGhlIGNvcnJlY3QgcGxhY2UuXG4gKlxuICogSXQ6XG4gKiAxLiBSZW5hbWVzIENTUyBmaWxlcyB0byB0aGVpciBmaW5hbCBwYXRoc1xuICogMi4gUmVtb3ZlcyB0aGUgSlMgZmlsZSB0aGF0IGdldCdzIG91dHB1dCBieSBsaWIgbW9kZVxuICpcbiAqIFRISVMgUExVR0lOIFNIT1VMRCBPTkxZIEJFIEFQUExJRUQgVE8gQ1NTIExJQiBNT0RFIEJVSUxEUy4gSXQgc2hvdWxkIG5vdCBiZSBhZGRlZCB0byBldmVyeSBidWlsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0VudHJ5cG9pbnRzKFxuICBlbnRyeXBvaW50OiBFbnRyeXBvaW50LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6Y3NzLWVudHJ5cG9pbnQnLFxuICAgIGNvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiAoKSA9PlxuICAgICAgICAgICAgICAgIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5cG9pbnQsIGNvbmZpZy5vdXREaXIsICcuY3NzJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgZ2VuZXJhdGVCdW5kbGUoXywgYnVuZGxlKSB7XG4gICAgICBPYmplY3Qua2V5cyhidW5kbGUpLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoJy5qcycpKSBkZWxldGUgYnVuZGxlW2ZpbGVdO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgdmlzdWFsaXplciB9IGZyb20gJ3JvbGx1cC1wbHVnaW4tdmlzdWFsaXplcic7XG5cbmxldCBpbmNyZW1lbnQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVuZGxlQW5hbHlzaXMoKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4gdmlzdWFsaXplcih7XG4gICAgZW1pdEZpbGU6IHRydWUsXG4gICAgdGVtcGxhdGU6ICdyYXctZGF0YScsXG4gICAgZmlsZW5hbWU6IGBzdGF0cy0ke2luY3JlbWVudCsrfS5qc29uYCxcbiAgfSkgYXMgdml0ZS5QbHVnaW47XG59XG4iLCAiaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxzKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBhbnk7IHR5cGU6IHN0cmluZyB9PiB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgbmFtZTogJ19fTUFOSUZFU1RfVkVSU0lPTl9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcubWFuaWZlc3RWZXJzaW9uLFxuICAgICAgdHlwZTogYDIgfCAzYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0JST1dTRVJfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmJyb3dzZXIsXG4gICAgICB0eXBlOiBgc3RyaW5nYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0lTX0NIUk9NRV9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ2Nocm9tZScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19JU19GSVJFRk9YX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19JU19TQUZBUklfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmJyb3dzZXIgPT09ICdzYWZhcmknLFxuICAgICAgdHlwZTogYGJvb2xlYW5gLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ19fSVNfRURHRV9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ2VkZ2UnLFxuICAgICAgdHlwZTogYGJvb2xlYW5gLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ19fSVNfT1BFUkFfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmJyb3dzZXIgPT09ICdvcGVyYScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19DT01NQU5EX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5jb21tYW5kLFxuICAgICAgdHlwZTogYFwiYnVpbGRcIiB8IFwic2VydmVcImAsXG4gICAgfSxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudHJ5cG9pbnRHbG9iYWxzKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBlbnRyeXBvaW50TmFtZTogc3RyaW5nLFxuKSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgbmFtZTogJ19fRU5UUllQT0lOVF9fJyxcbiAgICAgIHZhbHVlOiBlbnRyeXBvaW50TmFtZSxcbiAgICAgIHR5cGU6IGBzdHJpbmdgLFxuICAgIH0sXG4gIF07XG59XG4iLCAiaW1wb3J0IHsgQnVpbGRPdXRwdXQsIFd4dERldlNlcnZlciwgSW5saW5lQ29uZmlnIH0gZnJvbSAnLi9jb3JlL3R5cGVzJztcbmltcG9ydCB7IGdldEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi9jb3JlL3V0aWxzL2dldEludGVybmFsQ29uZmlnJztcbmltcG9ydCBwYyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IGRldGVjdERldkNoYW5nZXMgfSBmcm9tICcuL2NvcmUvdXRpbHMvZGV0ZWN0RGV2Q2hhbmdlcyc7XG5pbXBvcnQgeyBNdXRleCB9IGZyb20gJ2FzeW5jLW11dGV4JztcbmltcG9ydCB7IGNvbnNvbGEgfSBmcm9tICdjb25zb2xhJztcbmltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRPdXRwdXRGaWxlIH0gZnJvbSAnLi9jb3JlL3V0aWxzL2VudHJ5cG9pbnRzJztcbmltcG9ydCB7IGJ1aWxkSW50ZXJuYWwsIHJlYnVpbGQgfSBmcm9tICcuL2NvcmUvYnVpbGQnO1xuaW1wb3J0IHtcbiAgZ2V0U2VydmVySW5mbyxcbiAgcmVsb2FkQ29udGVudFNjcmlwdHMsXG4gIHJlbG9hZEh0bWxQYWdlcyxcbiAgc2V0dXBTZXJ2ZXIsXG59IGZyb20gJy4vY29yZS9zZXJ2ZXInO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvcmUvY2xlYW4nO1xuZXhwb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uL3BhY2thZ2UuanNvbic7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUvdHlwZXMvZXh0ZXJuYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3V0aWxzL2RlZmluZUNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUvdXRpbHMvZGVmaW5lUnVubmVyQ29uZmlnJztcblxuLyoqXG4gKiBCdW5kbGVzIHRoZSBleHRlbnNpb24gZm9yIHByb2R1Y3Rpb24uIFJldHVybnMgYSBwcm9taXNlIG9mIHRoZSBidWlsZCByZXN1bHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZChjb25maWc6IElubGluZUNvbmZpZyk6IFByb21pc2U8QnVpbGRPdXRwdXQ+IHtcbiAgY29uc3QgaW50ZXJuYWxDb25maWcgPSBhd2FpdCBnZXRJbnRlcm5hbENvbmZpZyhjb25maWcsICdidWlsZCcpO1xuICByZXR1cm4gYXdhaXQgYnVpbGRJbnRlcm5hbChpbnRlcm5hbENvbmZpZyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRldiBzZXJ2ZXIsIHByZS1idWlsZHMgYWxsIHRoZSBmaWxlcyB0aGF0IG5lZWQgdG8gZXhpc3QgdG8gbG9hZCB0aGUgZXh0ZW5zaW9uLCBhbmQgb3BlblxuICogdGhlIGJyb3dzZXIgd2l0aCB0aGUgZXh0ZW5zaW9uIGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNlcnZlcihcbiAgY29uZmlnPzogSW5saW5lQ29uZmlnLFxuKTogUHJvbWlzZTxXeHREZXZTZXJ2ZXI+IHtcbiAgY29uc3Qgc2VydmVySW5mbyA9IGF3YWl0IGdldFNlcnZlckluZm8oKTtcblxuICBjb25zdCBnZXRMYXRlc3RJbnRlcm5hbENvbmZpZyA9IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxDb25maWcoXG4gICAgICB7XG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgdml0ZTogKCkgPT4gc2VydmVySW5mby52aXRlU2VydmVyQ29uZmlnLFxuICAgICAgfSxcbiAgICAgICdzZXJ2ZScsXG4gICAgKTtcbiAgfTtcblxuICBsZXQgaW50ZXJuYWxDb25maWcgPSBhd2FpdCBnZXRMYXRlc3RJbnRlcm5hbENvbmZpZygpO1xuICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzZXR1cFNlcnZlcihzZXJ2ZXJJbmZvLCBpbnRlcm5hbENvbmZpZyk7XG4gIGludGVybmFsQ29uZmlnLnNlcnZlciA9IHNlcnZlcjtcblxuICBjb25zdCBmaWxlQ2hhbmdlZE11dGV4ID0gbmV3IE11dGV4KCk7XG4gIGNvbnN0IGNoYW5nZVF1ZXVlOiBBcnJheTxbc3RyaW5nLCBzdHJpbmddPiA9IFtdO1xuXG4gIHNlcnZlci53cy5vbignd3h0OmJhY2tncm91bmQtaW5pdGlhbGl6ZWQnLCAoKSA9PiB7XG4gICAgLy8gUmVnaXN0ZXIgY29udGVudCBzY3JpcHRzIGZvciB0aGUgZmlyc3QgdGltZSBzaW5jZSB0aGV5J3JlIG5vdCBsaXN0ZWQgaW4gdGhlIG1hbmlmZXN0XG4gICAgcmVsb2FkQ29udGVudFNjcmlwdHMoc2VydmVyLmN1cnJlbnRPdXRwdXQuc3RlcHMsIGludGVybmFsQ29uZmlnLCBzZXJ2ZXIpO1xuICB9KTtcblxuICBzZXJ2ZXIud2F0Y2hlci5vbignYWxsJywgYXN5bmMgKGV2ZW50LCBwYXRoLCBfc3RhdHMpID0+IHtcbiAgICAvLyBIZXJlLCBcInBhdGhcIiBpcyBhIG5vbi1ub3JtYWxpemVkIHBhdGggKGllOiBDOlxcXFx1c2Vyc1xcXFwuLi4gaW5zdGVhZCBvZiBDOi91c2Vycy8uLi4pXG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChpbnRlcm5hbENvbmZpZy5vdXRCYXNlRGlyKSkgcmV0dXJuO1xuICAgIGNoYW5nZVF1ZXVlLnB1c2goW2V2ZW50LCBwYXRoXSk7XG5cbiAgICBhd2FpdCBmaWxlQ2hhbmdlZE11dGV4LnJ1bkV4Y2x1c2l2ZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IGNoYW5nZVF1ZXVlLnNwbGljZSgwLCBjaGFuZ2VRdWV1ZS5sZW5ndGgpO1xuICAgICAgaWYgKGZpbGVDaGFuZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBjaGFuZ2VzID0gZGV0ZWN0RGV2Q2hhbmdlcyhmaWxlQ2hhbmdlcywgc2VydmVyLmN1cnJlbnRPdXRwdXQpO1xuICAgICAgaWYgKGNoYW5nZXMudHlwZSA9PT0gJ25vLWNoYW5nZScpIHJldHVybjtcblxuICAgICAgLy8gTG9nIHRoZSBlbnRyeXBvaW50cyB0aGF0IHdlcmUgZWZmZWN0ZWRcbiAgICAgIGludGVybmFsQ29uZmlnLmxvZ2dlci5pbmZvKFxuICAgICAgICBgQ2hhbmdlZDogJHtBcnJheS5mcm9tKG5ldyBTZXQoZmlsZUNoYW5nZXMubWFwKChjaGFuZ2UpID0+IGNoYW5nZVsxXSkpKVxuICAgICAgICAgIC5tYXAoKGZpbGUpID0+IHBjLmRpbShyZWxhdGl2ZShpbnRlcm5hbENvbmZpZy5yb290LCBmaWxlKSkpXG4gICAgICAgICAgLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgICBjb25zdCByZWJ1aWx0TmFtZXMgPSBjaGFuZ2VzLnJlYnVpbGRHcm91cHNcbiAgICAgICAgLmZsYXQoKVxuICAgICAgICAubWFwKChlbnRyeSkgPT4ge1xuICAgICAgICAgIHJldHVybiBwYy5jeWFuKFxuICAgICAgICAgICAgcmVsYXRpdmUoaW50ZXJuYWxDb25maWcub3V0RGlyLCBnZXRFbnRyeXBvaW50T3V0cHV0RmlsZShlbnRyeSwgJycpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihwYy5kaW0oJywgJykpO1xuXG4gICAgICAvLyBHZXQgbGF0ZXN0IGNvbmZpZyBhbmQgUmVidWlsZCBncm91cHMgd2l0aCBjaGFuZ2VzXG4gICAgICBpbnRlcm5hbENvbmZpZyA9IGF3YWl0IGdldExhdGVzdEludGVybmFsQ29uZmlnKCk7XG4gICAgICBpbnRlcm5hbENvbmZpZy5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gICAgICBjb25zdCB7IG91dHB1dDogbmV3T3V0cHV0IH0gPSBhd2FpdCByZWJ1aWxkKFxuICAgICAgICBpbnRlcm5hbENvbmZpZyxcbiAgICAgICAgLy8gVE9ETzogdGhpcyBleGNsdWRlcyBuZXcgZW50cnlwb2ludHMsIHNvIHRoZXkncmUgbm90IGJ1aWx0IHVudGlsIHRoZSBkZXYgY29tbWFuZCBpcyByZXN0YXJ0ZWRcbiAgICAgICAgY2hhbmdlcy5yZWJ1aWxkR3JvdXBzLFxuICAgICAgICBjaGFuZ2VzLmNhY2hlZE91dHB1dCxcbiAgICAgICk7XG4gICAgICBzZXJ2ZXIuY3VycmVudE91dHB1dCA9IG5ld091dHB1dDtcblxuICAgICAgLy8gUGVyZm9ybSByZWxvYWRzXG4gICAgICBzd2l0Y2ggKGNoYW5nZXMudHlwZSkge1xuICAgICAgICBjYXNlICdleHRlbnNpb24tcmVsb2FkJzpcbiAgICAgICAgICBzZXJ2ZXIucmVsb2FkRXh0ZW5zaW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bWwtcmVsb2FkJzpcbiAgICAgICAgICByZWxvYWRIdG1sUGFnZXMoY2hhbmdlcy5yZWJ1aWxkR3JvdXBzLCBzZXJ2ZXIsIGludGVybmFsQ29uZmlnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY29udGVudC1zY3JpcHQtcmVsb2FkJzpcbiAgICAgICAgICByZWxvYWRDb250ZW50U2NyaXB0cyhjaGFuZ2VzLmNoYW5nZWRTdGVwcywgaW50ZXJuYWxDb25maWcsIHNlcnZlcik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb25zb2xhLnN1Y2Nlc3MoYFJlbG9hZGVkOiAke3JlYnVpbHROYW1lc31gKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNlcnZlcjtcbn1cbiIsICIvKipcbiAqIENoZWNrcyBpZiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgYWxsIGVsZW1lbnRzIG9mIHRoZSBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5PFQ+KFxuICBhcnJheTogVFtdLFxuICBwcmVkaWNhdGU6IChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuLFxuKTogYm9vbGVhbiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspXG4gICAgaWYgKCFwcmVkaWNhdGUoYXJyYXlbaV0sIGkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuIiwgImltcG9ydCB7IEJ1aWxkT3V0cHV0LCBCdWlsZFN0ZXBPdXRwdXQsIEVudHJ5cG9pbnRHcm91cCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBldmVyeSB9IGZyb20gJy4vYXJyYXlzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuL3BhdGhzJztcblxuLyoqXG4gKiBDb21wYXJlIHRoZSBjaGFuZ2VkIGZpbGVzIHZzIHRoZSBidWlsZCBvdXRwdXQgYW5kIGRldGVybWluZSB3aGF0IGtpbmQgb2YgcmVsb2FkIG5lZWRzIHRvIGhhcHBlbjpcbiAqXG4gKiAtIERvIG5vdGhpbmdcbiAqICAgLSBDU1Mgb3IgSlMgZmlsZSBhc3NvY2lhdGVkIHdpdGggYW4gSFRNTCBwYWdlIGlzIGNoYW5nZWQgLSB0aGlzIGlzIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGVcbiAqICAgICBkZXYgc2VydmVyXG4gKiAgIC0gQ2hhbmdlIGlzbid0IHVzZWQgYnkgYW55IG9mIHRoZSBlbnRyeXBvaW50c1xuICogLSBSZWxvYWQgQ29udGVudCBzY3JpcHRcbiAqICAgLSBDU1Mgb3IgSlMgZmlsZSBhc3NvY2lhdGVkIHdpdGggYSBjb250ZW50IHNjcmlwdFxuICogICAtIEJhY2tncm91bmQgc2NyaXB0IHdpbGwgYmUgdG9sZCB0byByZWxvYWQgdGhlIGNvbnRlbnQgc2NyaXB0XG4gKiAtIFJlbG9hZCBIVE1MIGZpbGVcbiAqICAgLSBIVE1MIGZpbGUgaXRzZWxmIGlzIHNhdmVkIC0gSE1SIGRvZXNuJ3QgaGFuZGxlIHRoaXMgYmVjYXVzZSB0aGUgSFRNTCBwYWdlcyBhcmUgcHJlLXJlbmRlcmVkXG4gKiAgIC0gQ2hyb21lIGlzIE9LIHJlbG9hZGluZyB0aGUgcGFnZSB3aGVuIHRoZSBIVE1MIGZpbGUgaXMgY2hhbmdlZCB3aXRob3V0IHJlbG9hZGluZyB0aGUgd2hvbGVcbiAqICAgICBleHRlbnNpb24uIE5vdCBzdXJlIGFib3V0IGZpcmVmb3gsIHRoaXMgbWlnaHQgbmVlZCB0byBjaGFuZ2UgdG8gYW4gZXh0ZW5zaW9uIHJlbG9hZFxuICogLSBSZWxvYWQgZXh0ZW5zaW9uXG4gKiAgIC0gQmFja2dyb3VuZCBzY3JpcHQgaXMgY2hhbmdlZFxuICogICAtIE1hbmlmZXN0IGlzIGRpZmZlcmVudFxuICogLSBSZXN0YXJ0IGJyb3dzZXJcbiAqICAgLSBDb25maWcgZmlsZSBjaGFuZ2VkICh3eHQuY29uZmlnLnRzLCAuZW52LCB3ZWItZXh0LmNvbmZpZy50cywgZXRjKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0RGV2Q2hhbmdlcyhcbiAgY2hhbmdlZEZpbGVzOiBbZXZlbnQ6IHN0cmluZywgcGF0aDogc3RyaW5nXVtdLFxuICBjdXJyZW50T3V0cHV0OiBCdWlsZE91dHB1dCB8IHVuZGVmaW5lZCxcbik6IERldk1vZGVDaGFuZ2Uge1xuICBpZiAoY3VycmVudE91dHB1dCA9PSBudWxsKSByZXR1cm4geyB0eXBlOiAnbm8tY2hhbmdlJyB9O1xuXG4gIGNvbnN0IGNoYW5nZWRTdGVwcyA9IG5ldyBTZXQoXG4gICAgY2hhbmdlZEZpbGVzLmZsYXRNYXAoKGNoYW5nZWRGaWxlKSA9PlxuICAgICAgZmluZEVmZmVjdGVkU3RlcHMoY2hhbmdlZEZpbGUsIGN1cnJlbnRPdXRwdXQpLFxuICAgICksXG4gICk7XG4gIGlmIChjaGFuZ2VkU3RlcHMuc2l6ZSA9PT0gMCkgcmV0dXJuIHsgdHlwZTogJ25vLWNoYW5nZScgfTtcblxuICBjb25zdCB1bmNoYW5nZWRPdXRwdXQ6IEJ1aWxkT3V0cHV0ID0ge1xuICAgIG1hbmlmZXN0OiBjdXJyZW50T3V0cHV0Lm1hbmlmZXN0LFxuICAgIHN0ZXBzOiBbXSxcbiAgICBwdWJsaWNBc3NldHM6IFtdLFxuICB9O1xuICBjb25zdCBjaGFuZ2VkT3V0cHV0OiBCdWlsZE91dHB1dCA9IHtcbiAgICBtYW5pZmVzdDogY3VycmVudE91dHB1dC5tYW5pZmVzdCxcbiAgICBzdGVwczogW10sXG4gICAgcHVibGljQXNzZXRzOiBbXSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHN0ZXAgb2YgY3VycmVudE91dHB1dC5zdGVwcykge1xuICAgIGlmIChjaGFuZ2VkU3RlcHMuaGFzKHN0ZXApKSB7XG4gICAgICBjaGFuZ2VkT3V0cHV0LnN0ZXBzLnB1c2goc3RlcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuY2hhbmdlZE91dHB1dC5zdGVwcy5wdXNoKHN0ZXApO1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGFzc2V0IG9mIGN1cnJlbnRPdXRwdXQucHVibGljQXNzZXRzKSB7XG4gICAgaWYgKGNoYW5nZWRTdGVwcy5oYXMoYXNzZXQpKSB7XG4gICAgICBjaGFuZ2VkT3V0cHV0LnB1YmxpY0Fzc2V0cy5wdXNoKGFzc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5jaGFuZ2VkT3V0cHV0LnB1YmxpY0Fzc2V0cy5wdXNoKGFzc2V0KTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBpc09ubHlIdG1sQ2hhbmdlcyA9XG4gICAgY2hhbmdlZEZpbGVzLmxlbmd0aCA+IDAgJiZcbiAgICBldmVyeShjaGFuZ2VkRmlsZXMsIChbXywgZmlsZV0pID0+IGZpbGUuZW5kc1dpdGgoJy5odG1sJykpO1xuICBpZiAoaXNPbmx5SHRtbENoYW5nZXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2h0bWwtcmVsb2FkJyxcbiAgICAgIGNhY2hlZE91dHB1dDogdW5jaGFuZ2VkT3V0cHV0LFxuICAgICAgcmVidWlsZEdyb3VwczogY2hhbmdlZE91dHB1dC5zdGVwcy5tYXAoKHN0ZXApID0+IHN0ZXAuZW50cnlwb2ludHMpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBpc09ubHlDb250ZW50U2NyaXB0cyA9XG4gICAgY2hhbmdlZE91dHB1dC5zdGVwcy5sZW5ndGggPiAwICYmXG4gICAgZXZlcnkoXG4gICAgICBjaGFuZ2VkT3V0cHV0LnN0ZXBzLmZsYXRNYXAoKHN0ZXApID0+IHN0ZXAuZW50cnlwb2ludHMpLFxuICAgICAgKGVudHJ5KSA9PiBlbnRyeS50eXBlID09PSAnY29udGVudC1zY3JpcHQnLFxuICAgICk7XG4gIGlmIChpc09ubHlDb250ZW50U2NyaXB0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnY29udGVudC1zY3JpcHQtcmVsb2FkJyxcbiAgICAgIGNhY2hlZE91dHB1dDogdW5jaGFuZ2VkT3V0cHV0LFxuICAgICAgY2hhbmdlZFN0ZXBzOiBjaGFuZ2VkT3V0cHV0LnN0ZXBzLFxuICAgICAgcmVidWlsZEdyb3VwczogY2hhbmdlZE91dHB1dC5zdGVwcy5tYXAoKHN0ZXApID0+IHN0ZXAuZW50cnlwb2ludHMpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdleHRlbnNpb24tcmVsb2FkJyxcbiAgICBjYWNoZWRPdXRwdXQ6IHVuY2hhbmdlZE91dHB1dCxcbiAgICByZWJ1aWxkR3JvdXBzOiBjaGFuZ2VkT3V0cHV0LnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5lbnRyeXBvaW50cyksXG4gIH07XG59XG5cbi8qKlxuICogRm9yIGEgc2luZ2xlIGNoYW5nZSwgcmV0dXJuIGFsbCB0aGUgc3RlcCBvZiB0aGUgYnVpbGQgb3V0cHV0IHRoYXQgd2VyZSBlZmZlY3RlZCBieSBpdC5cbiAqL1xuZnVuY3Rpb24gZmluZEVmZmVjdGVkU3RlcHMoXG4gIGNoYW5nZWRGaWxlOiBbZXZlbnQ6IHN0cmluZywgcGF0aDogc3RyaW5nXSxcbiAgY3VycmVudE91dHB1dDogQnVpbGRPdXRwdXQsXG4pOiBEZXRlY3RlZENoYW5nZVtdIHtcbiAgY29uc3QgY2hhbmdlczogRGV0ZWN0ZWRDaGFuZ2VbXSA9IFtdO1xuICBjb25zdCBjaGFuZ2VkUGF0aCA9IG5vcm1hbGl6ZVBhdGgoY2hhbmdlZEZpbGVbMV0pO1xuXG4gIGNvbnN0IGlzQ2h1bmtFZmZlY3RlZCA9IChcbiAgICBjaHVuazogdml0ZS5Sb2xsdXAuT3V0cHV0Q2h1bmsgfCB2aXRlLlJvbGx1cC5PdXRwdXRBc3NldCxcbiAgKTogYm9vbGVhbiA9PlxuICAgIC8vIElmIGl0J3MgYW4gSFRNTCBmaWxlIHdpdGggdGhlIHNhbWUgcGF0aCwgaXMgaXMgZWZmZWN0ZWQgYmVjYXVzZSBIVE1MIGZpbGVzIG5lZWQgdG8gYmUgcHJlLXJlbmRlcmVkXG4gICAgLy8gZmlsZU5hbWUgaXMgbm9ybWFsaXplZCwgcmVsYXRpdmUgYnVuZGxlIHBhdGhcbiAgICAoY2h1bmsudHlwZSA9PT0gJ2Fzc2V0JyAmJiBjaGFuZ2VkUGF0aC5lbmRzV2l0aChjaHVuay5maWxlTmFtZSkpIHx8XG4gICAgLy8gSWYgaXQncyBhIGNodW5rIHRoYXQgZGVwZW5kcyBvbiB0aGUgY2hhbmdlZCBmaWxlLCBpdCBpcyBlZmZlY3RlZFxuICAgIC8vIG1vZHVsZUlkcyBhcmUgYWJzb2x1dGUsIG5vcm1hbGl6ZWQgcGF0aHNcbiAgICAoY2h1bmsudHlwZSA9PT0gJ2NodW5rJyAmJiBjaHVuay5tb2R1bGVJZHMuaW5jbHVkZXMoY2hhbmdlZFBhdGgpKTtcblxuICBmb3IgKGNvbnN0IHN0ZXAgb2YgY3VycmVudE91dHB1dC5zdGVwcykge1xuICAgIGNvbnN0IGVmZmVjdGVkQ2h1bmsgPSBzdGVwLmNodW5rcy5maW5kKChjaHVuaykgPT4gaXNDaHVua0VmZmVjdGVkKGNodW5rKSk7XG4gICAgaWYgKGVmZmVjdGVkQ2h1bmspIGNoYW5nZXMucHVzaChzdGVwKTtcbiAgfVxuXG4gIGNvbnN0IGVmZmVjdGVkQXNzZXQgPSBjdXJyZW50T3V0cHV0LnB1YmxpY0Fzc2V0cy5maW5kKChjaHVuaykgPT5cbiAgICBpc0NodW5rRWZmZWN0ZWQoY2h1bmspLFxuICApO1xuICBpZiAoZWZmZWN0ZWRBc3NldCkgY2hhbmdlcy5wdXNoKGVmZmVjdGVkQXNzZXQpO1xuXG4gIHJldHVybiBjaGFuZ2VzO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgZmlsZXMgY2hhbmdlZCwgd2hhdCBuZWVkcyByZWJ1aWx0LCBhbmQgdGhlIHR5cGUgb2YgcmVsb2FkIHRoYXQgaXNcbiAqIHJlcXVpcmVkLlxuICovXG5leHBvcnQgdHlwZSBEZXZNb2RlQ2hhbmdlID1cbiAgfCBOb0NoYW5nZVxuICB8IEh0bWxSZWxvYWRcbiAgfCBFeHRlbnNpb25SZWxvYWRcbiAgfCBDb250ZW50U2NyaXB0UmVsb2FkO1xuLy8gfCBCcm93c2VyUmVzdGFydFxuXG5pbnRlcmZhY2UgTm9DaGFuZ2Uge1xuICB0eXBlOiAnbm8tY2hhbmdlJztcbn1cblxuaW50ZXJmYWNlIFJlYnVpbGRDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgZW50cnlwb2ludHMgdGhhdCBuZWVkIHJlYnVpbHQuXG4gICAqL1xuICByZWJ1aWxkR3JvdXBzOiBFbnRyeXBvaW50R3JvdXBbXTtcbiAgLyoqXG4gICAqIFRoZSBwcmV2aW91cyBvdXRwdXQgc3RyaXBwZWQgb2YgYW55IGZpbGVzIGFyZSBnb2luZyB0byBjaGFuZ2UuXG4gICAqL1xuICBjYWNoZWRPdXRwdXQ6IEJ1aWxkT3V0cHV0O1xufVxuXG5pbnRlcmZhY2UgSHRtbFJlbG9hZCBleHRlbmRzIFJlYnVpbGRDaGFuZ2Uge1xuICB0eXBlOiAnaHRtbC1yZWxvYWQnO1xufVxuXG5pbnRlcmZhY2UgRXh0ZW5zaW9uUmVsb2FkIGV4dGVuZHMgUmVidWlsZENoYW5nZSB7XG4gIHR5cGU6ICdleHRlbnNpb24tcmVsb2FkJztcbn1cblxuLy8gaW50ZXJmYWNlIEJyb3dzZXJSZXN0YXJ0IGV4dGVuZHMgUmVidWlsZENoYW5nZSB7XG4vLyAgIHR5cGU6ICdicm93c2VyLXJlc3RhcnQnO1xuLy8gfVxuXG5pbnRlcmZhY2UgQ29udGVudFNjcmlwdFJlbG9hZCBleHRlbmRzIFJlYnVpbGRDaGFuZ2Uge1xuICB0eXBlOiAnY29udGVudC1zY3JpcHQtcmVsb2FkJztcbiAgY2hhbmdlZFN0ZXBzOiBCdWlsZFN0ZXBPdXRwdXRbXTtcbn1cblxuLyoqXG4gKiBXaGVuIGZpZ3VyaW5nIG91dCB3aGF0IG5lZWRzIHJlbG9hZGVkLCB0aGlzIHN0b3JlcyB0aGUgc3RlcCB0aGF0IHdhcyBjaGFuZ2VkLCBvciB0aGUgcHVibGljXG4gKiBkaXJlY3RvcnkgYXNzZXQgdGhhdCB3YXMgY2hhbmdlZC4gSXQgZG9lc24ndCBrbm93IHdoYXQgdHlwZSBvZiBjaGFuZ2UgaXMgcmVxdWlyZWQgeWV0LiBKdXN0IGFuXG4gKiBpbnRlcm1lZGlhdGUgdHlwZS5cbiAqL1xudHlwZSBEZXRlY3RlZENoYW5nZSA9IEJ1aWxkU3RlcE91dHB1dCB8IHZpdGUuUm9sbHVwLk91dHB1dEFzc2V0O1xuIiwgImltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQge1xuICBCdWlsZE91dHB1dCxcbiAgQnVpbGRTdGVwT3V0cHV0LFxuICBFbnRyeXBvaW50LFxuICBFbnRyeXBvaW50R3JvdXAsXG4gIEludGVybmFsQ29uZmlnLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB3eHRQbHVnaW5zIGZyb20gJy4uL3ZpdGUtcGx1Z2lucyc7XG5pbXBvcnQgeyByZW1vdmVFbXB0eURpcnMgfSBmcm9tICcuLi91dGlscy9yZW1vdmVFbXB0eURpcnMnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGggfSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgZGlybmFtZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZ2V0UHVibGljRmlsZXMgfSBmcm9tICcuLi91dGlscy9wdWJsaWMnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEdsb2JhbHMgfSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcbmltcG9ydCB0eXBlIHsgT3JhIH0gZnJvbSAnb3JhJztcbmltcG9ydCBwYyBmcm9tICdwaWNvY29sb3JzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkRW50cnlwb2ludHMoXG4gIGdyb3VwczogRW50cnlwb2ludEdyb3VwW10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIHNwaW5uZXI6IE9yYSxcbik6IFByb21pc2U8T21pdDxCdWlsZE91dHB1dCwgJ21hbmlmZXN0Jz4+IHtcbiAgY29uc3Qgc3RlcHM6IEJ1aWxkU3RlcE91dHB1dFtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBncm91cHNbaV07XG5cbiAgICBzcGlubmVyLnRleHQgPVxuICAgICAgcGMuZGltKGBbJHtpICsgMX0vJHtncm91cHMubGVuZ3RofV1gKSArXG4gICAgICBgICR7W2dyb3VwXVxuICAgICAgICAuZmxhdCgpXG4gICAgICAgIC5tYXAoKGUpID0+IGUubmFtZSlcbiAgICAgICAgLmpvaW4ocGMuZGltKCcsICcpKX1gO1xuXG4gICAgY29uc3Qgc3RlcCA9IEFycmF5LmlzQXJyYXkoZ3JvdXApXG4gICAgICA/IGF3YWl0IGJ1aWxkTXVsdGlwbGVFbnRyeXBvaW50cyhncm91cCwgY29uZmlnKVxuICAgICAgOiBhd2FpdCBidWlsZFNpbmdsZUVudHJ5cG9pbnQoZ3JvdXAsIGNvbmZpZyk7XG4gICAgc3RlcHMucHVzaChzdGVwKTtcbiAgfVxuICBjb25zdCBwdWJsaWNBc3NldHMgPSBhd2FpdCBjb3B5UHVibGljRGlyZWN0b3J5KGNvbmZpZyk7XG5cbiAgLy8gUmVtb3ZlIGFueSBlbXB0eSBkaXJlY3RvcmllcyBmcm9tIG1vdmluZyBvdXRwdXRzIGFyb3VuZFxuICBhd2FpdCByZW1vdmVFbXB0eURpcnMoY29uZmlnLm91dERpcik7XG5cbiAgcmV0dXJuIHsgcHVibGljQXNzZXRzLCBzdGVwcyB9O1xufVxuXG4vKipcbiAqIFVzZSBWaXRlJ3MgbGliIG1vZGUgKyBJSUZFIGZvcm1hdCB0byBidW5kbGUgdGhlIGVudHJ5cG9pbnQgdG8gYSBzaW5nbGUgZmlsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRTaW5nbGVFbnRyeXBvaW50KFxuICBlbnRyeXBvaW50OiBFbnRyeXBvaW50LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxCdWlsZFN0ZXBPdXRwdXQ+IHtcbiAgLy8gU2hvdWxkIHRoaXMgZW50cnlwb2ludCBiZSB3cmFwcGVkIGJ5IHRoZSB2aXRlLXBsdWdpbnMvdmlydHVhbEVudHJ5cG9pbnQgcGx1Z2luP1xuICBjb25zdCBpc1ZpcnR1YWwgPSBbXG4gICAgJ2JhY2tncm91bmQnLFxuICAgICdjb250ZW50LXNjcmlwdCcsXG4gICAgJ3VubGlzdGVkLXNjcmlwdCcsXG4gIF0uaW5jbHVkZXMoZW50cnlwb2ludC50eXBlKTtcbiAgY29uc3QgZW50cnkgPSBpc1ZpcnR1YWxcbiAgICA/IGB2aXJ0dWFsOnd4dC0ke2VudHJ5cG9pbnQudHlwZX0/JHtlbnRyeXBvaW50LmlucHV0UGF0aH1gXG4gICAgOiBlbnRyeXBvaW50LmlucHV0UGF0aDtcblxuICBjb25zdCBwbHVnaW5zOiBOb25OdWxsYWJsZTx2aXRlLlVzZXJDb25maWdbJ3BsdWdpbnMnXT4gPSBbXTtcbiAgaWYgKFxuICAgIGVudHJ5cG9pbnQudHlwZSA9PT0gJ2NvbnRlbnQtc2NyaXB0LXN0eWxlJyB8fFxuICAgIGVudHJ5cG9pbnQudHlwZSA9PT0gJ3VubGlzdGVkLXN0eWxlJ1xuICApIHtcbiAgICBwbHVnaW5zLnB1c2god3h0UGx1Z2lucy5jc3NFbnRyeXBvaW50cyhlbnRyeXBvaW50LCBjb25maWcpKTtcbiAgfVxuXG4gIGNvbnN0IGxpYk1vZGU6IHZpdGUuVXNlckNvbmZpZyA9IHtcbiAgICBwbHVnaW5zLFxuICAgIGJ1aWxkOiB7XG4gICAgICBsaWI6IHtcbiAgICAgICAgZW50cnksXG4gICAgICAgIGZvcm1hdHM6IFsnaWlmZSddLFxuICAgICAgICBuYW1lOiAnXycsXG4gICAgICAgIGZpbGVOYW1lOiBlbnRyeXBvaW50Lm5hbWUsXG4gICAgICB9LFxuICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAvLyBUaGVyZSdzIG9ubHkgYSBzaW5nbGUgb3V0cHV0IGZvciB0aGlzIGJ1aWxkLCBzbyB3ZSB1c2UgdGhlIGRlc2lyZWQgYnVuZGxlIHBhdGggZm9yIHRoZVxuICAgICAgICAgIC8vIGVudHJ5IG91dHB1dCAobGlrZSBcImNvbnRlbnQtc2NyaXB0cy9vdmVybGF5LmpzXCIpXG4gICAgICAgICAgZW50cnlGaWxlTmFtZXM6IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgICAgICAgZW50cnlwb2ludCxcbiAgICAgICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICAgICAnLmpzJyxcbiAgICAgICAgICApLFxuICAgICAgICAgIC8vIE91dHB1dCBjb250ZW50IHNjcmlwdCBDU1MgdG8gYGNvbnRlbnQtc2NyaXB0cy9gLCBidXQgYWxsIG90aGVyIHNjcmlwdHMgYXJlIHdyaXR0ZW4gdG9cbiAgICAgICAgICAvLyBgYXNzZXRzL2AuXG4gICAgICAgICAgYXNzZXRGaWxlTmFtZXM6ICh7IG5hbWUgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVudHJ5cG9pbnQudHlwZSA9PT0gJ2NvbnRlbnQtc2NyaXB0JyAmJiBuYW1lPy5lbmRzV2l0aCgnY3NzJykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGBjb250ZW50LXNjcmlwdHMvJHtlbnRyeXBvaW50Lm5hbWV9LltleHRdYDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBgYXNzZXRzLyR7ZW50cnlwb2ludC5uYW1lfS5bZXh0XWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkZWZpbmU6IHtcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYWtsaW5rZXIxL3ZpdGUtcGx1Z2luLXdlYi1leHRlbnNpb24vaXNzdWVzLzk2XG4gICAgICAncHJvY2Vzcy5lbnYuTk9ERV9FTlYnOiBKU09OLnN0cmluZ2lmeShjb25maWcubW9kZSksXG4gICAgfSxcbiAgfTtcbiAgZm9yIChjb25zdCBnbG9iYWwgb2YgZ2V0RW50cnlwb2ludEdsb2JhbHMoY29uZmlnLCBlbnRyeXBvaW50Lm5hbWUpKSB7XG4gICAgbGliTW9kZS5kZWZpbmUhW2dsb2JhbC5uYW1lXSA9IEpTT04uc3RyaW5naWZ5KGdsb2JhbC52YWx1ZSk7XG4gIH1cbiAgY29uc3QgZW50cnlDb25maWcgPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgIGxpYk1vZGUsXG4gICAgYXdhaXQgY29uZmlnLnZpdGUoY29uZmlnLmVudiksXG4gICkgYXMgdml0ZS5JbmxpbmVDb25maWc7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdml0ZS5idWlsZChlbnRyeUNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgZW50cnlwb2ludHM6IGVudHJ5cG9pbnQsXG4gICAgY2h1bmtzOiBnZXRCdWlsZE91dHB1dENodW5rcyhyZXN1bHQpLFxuICB9O1xufVxuXG4vKipcbiAqIFVzZSBWaXRlJ3MgbXVsdGlwYWdlIGJ1aWxkIHRvIGJ1bmRsZSBhbGwgdGhlIGVudHJ5cG9pbnRzIGluIGEgc2luZ2xlIHN0ZXAuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkTXVsdGlwbGVFbnRyeXBvaW50cyhcbiAgZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8QnVpbGRTdGVwT3V0cHV0PiB7XG4gIGNvbnN0IG11bHRpUGFnZTogdml0ZS5Vc2VyQ29uZmlnID0ge1xuICAgIHBsdWdpbnM6IFt3eHRQbHVnaW5zLm11bHRpcGFnZU1vdmUoZW50cnlwb2ludHMsIGNvbmZpZyldLFxuICAgIGJ1aWxkOiB7XG4gICAgICByb2xsdXBPcHRpb25zOiB7XG4gICAgICAgIGlucHV0OiBlbnRyeXBvaW50cy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKGlucHV0LCBlbnRyeSkgPT4ge1xuICAgICAgICAgIGlucHV0W2VudHJ5Lm5hbWVdID0gZW50cnkuaW5wdXRQYXRoO1xuICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfSwge30pLFxuICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAvLyBJbmNsdWRlIGEgaGFzaCB0byBwcmV2ZW50IGNvbmZsaWN0c1xuICAgICAgICAgIGNodW5rRmlsZU5hbWVzOiAnY2h1bmtzL1tuYW1lXS1baGFzaF0uanMnLFxuICAgICAgICAgIC8vIEluY2x1ZGUgYSBoYXNoIHRvIHByZXZlbnQgY29uZmxpY3RzXG4gICAgICAgICAgZW50cnlGaWxlTmFtZXM6ICdjaHVua3MvW25hbWVdLVtoYXNoXS5qcycsXG4gICAgICAgICAgLy8gV2UgY2FuJ3QgY29udHJvbCB0aGUgXCJuYW1lXCIsIHNvIHdlIG5lZWQgYSBoYXNoIHRvIHByZXZlbnQgY29uZmxpY3RzXG4gICAgICAgICAgYXNzZXRGaWxlTmFtZXM6ICdhc3NldHMvW25hbWVdLVtoYXNoXS5bZXh0XScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGVmaW5lOiB7fSxcbiAgfTtcbiAgZm9yIChjb25zdCBnbG9iYWwgb2YgZ2V0RW50cnlwb2ludEdsb2JhbHMoY29uZmlnLCAnaHRtbCcpKSB7XG4gICAgbXVsdGlQYWdlLmRlZmluZSFbZ2xvYmFsLm5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZ2xvYmFsLnZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0IGVudHJ5Q29uZmlnID0gdml0ZS5tZXJnZUNvbmZpZyhcbiAgICBtdWx0aVBhZ2UsXG4gICAgYXdhaXQgY29uZmlnLnZpdGUoY29uZmlnLmVudiksXG4gICkgYXMgdml0ZS5Vc2VyQ29uZmlnO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZpdGUuYnVpbGQoZW50cnlDb25maWcpO1xuICByZXR1cm4ge1xuICAgIGVudHJ5cG9pbnRzLFxuICAgIGNodW5rczogZ2V0QnVpbGRPdXRwdXRDaHVua3MocmVzdWx0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QnVpbGRPdXRwdXRDaHVua3MoXG4gIHJlc3VsdDogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiB2aXRlLmJ1aWxkPj4sXG4pOiBCdWlsZFN0ZXBPdXRwdXRbJ2NodW5rcyddIHtcbiAgaWYgKCdvbicgaW4gcmVzdWx0KSB0aHJvdyBFcnJvcignd3h0IGRvZXMgbm90IHN1cHBvcnQgdml0ZSB3YXRjaCBtb2RlLicpO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXR1cm4gcmVzdWx0LmZsYXRNYXAoKHsgb3V0cHV0IH0pID0+IG91dHB1dCk7XG4gIHJldHVybiByZXN1bHQub3V0cHV0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb3B5UHVibGljRGlyZWN0b3J5KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxCdWlsZE91dHB1dFsncHVibGljQXNzZXRzJ10+IHtcbiAgY29uc3QgZmlsZXMgPSBhd2FpdCBnZXRQdWJsaWNGaWxlcyhjb25maWcpO1xuICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgY29uc3QgcHVibGljQXNzZXRzOiBCdWlsZE91dHB1dFsncHVibGljQXNzZXRzJ10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3Qgc3JjUGF0aCA9IHJlc29sdmUoY29uZmlnLnB1YmxpY0RpciwgZmlsZSk7XG4gICAgY29uc3Qgb3V0UGF0aCA9IHJlc29sdmUoY29uZmlnLm91dERpciwgZmlsZSk7XG5cbiAgICBhd2FpdCBmcy5lbnN1cmVEaXIoZGlybmFtZShvdXRQYXRoKSk7XG4gICAgYXdhaXQgZnMuY29weUZpbGUoc3JjUGF0aCwgb3V0UGF0aCk7XG4gICAgcHVibGljQXNzZXRzLnB1c2goe1xuICAgICAgdHlwZTogJ2Fzc2V0JyxcbiAgICAgIGZpbGVOYW1lOiBmaWxlLFxuICAgICAgbmFtZTogZmlsZSxcbiAgICAgIG5lZWRzQ29kZVJlZmVyZW5jZTogZmFsc2UsXG4gICAgICBzb3VyY2U6IGF3YWl0IGZzLnJlYWRGaWxlKHNyY1BhdGgpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHB1YmxpY0Fzc2V0cztcbn1cbiIsICJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1vdmVFbXB0eURpcnMoZGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpcik7XG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpciwgZmlsZSk7XG4gICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgYXdhaXQgcmVtb3ZlRW1wdHlEaXJzKGZpbGVQYXRoKTtcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGZzLnJtZGlyKGRpcik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIG5vb3Agb24gZmFpbHVyZSAtIHRoaXMgbWVhbnMgdGhlIGRpcmVjdG9yeSB3YXMgbm90IGVtcHR5LlxuICB9XG59XG4iLCAiaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IGdsb2IgZnJvbSAnZmFzdC1nbG9iJztcbmltcG9ydCB7IHVubm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuXG4vKipcbiAqIEdldCBhbGwgdGhlIGZpbGVzIGluIHRoZSBwcm9qZWN0J3MgcHVibGljIGRpcmVjdG9yeS4gUmV0dXJuZWQgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZVxuICogYGNvbmZpZy5wdWJsaWNEaXJgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHVibGljRmlsZXMoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGlmICghKGF3YWl0IGZzLmV4aXN0cyhjb25maWcucHVibGljRGlyKSkpIHJldHVybiBbXTtcblxuICBjb25zdCBmaWxlcyA9IGF3YWl0IGdsb2IoJyoqLyonLCB7IGN3ZDogY29uZmlnLnB1YmxpY0RpciB9KTtcbiAgcmV0dXJuIGZpbGVzLm1hcCh1bm5vcm1hbGl6ZVBhdGgpO1xufVxuIiwgImltcG9ydCB7IHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1xuICBCYWNrZ3JvdW5kRW50cnlwb2ludCxcbiAgQmFja2dyb3VuZERlZmluaXRpb24sXG4gIEJhc2VFbnRyeXBvaW50T3B0aW9ucyxcbiAgQ29udGVudFNjcmlwdERlZmluaXRpb24sXG4gIENvbnRlbnRTY3JpcHRFbnRyeXBvaW50LFxuICBFbnRyeXBvaW50LFxuICBHZW5lcmljRW50cnlwb2ludCxcbiAgSW50ZXJuYWxDb25maWcsXG4gIE9wdGlvbnNFbnRyeXBvaW50LFxuICBQb3B1cEVudHJ5cG9pbnQsXG4gIFVubGlzdGVkU2NyaXB0RGVmaW5pdGlvbixcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IG1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgeyBwYXJzZUhUTUwgfSBmcm9tICdsaW5rZWRvbSc7XG5pbXBvcnQgSlNPTjUgZnJvbSAnanNvbjUnO1xuaW1wb3J0IHsgaW1wb3J0RW50cnlwb2ludEZpbGUgfSBmcm9tICcuLi91dGlscy9pbXBvcnRFbnRyeXBvaW50RmlsZSc7XG5pbXBvcnQgZ2xvYiBmcm9tICdmYXN0LWdsb2InO1xuaW1wb3J0IHtcbiAgZ2V0RW50cnlwb2ludE5hbWUsXG4gIHJlc29sdmVQZXJCcm93c2VyT3B0aW9uLFxufSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBWSVJUVUFMX05PT1BfQkFDS0dST1VORF9NT0RVTEVfSUQgfSBmcm9tICcuLi92aXRlLXBsdWdpbnMvbm9vcEJhY2tncm91bmQnO1xuaW1wb3J0IHsgQ1NTX0VYVEVOU0lPTlNfUEFUVEVSTiB9IGZyb20gJy4uL3V0aWxzL3BhdGhzJztcblxuLyoqXG4gKiBSZXR1cm4gZW50cnlwb2ludHMgYW5kIHRoZWlyIGNvbmZpZ3VyYXRpb24gYnkgbG9va2luZyB0aHJvdWdoIHRoZSBwcm9qZWN0J3MgZmlsZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kRW50cnlwb2ludHMoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPEVudHJ5cG9pbnRbXT4ge1xuICBjb25zdCByZWxhdGl2ZVBhdGhzID0gYXdhaXQgZ2xvYignKiovKicsIHtcbiAgICBjd2Q6IGNvbmZpZy5lbnRyeXBvaW50c0RpcixcbiAgfSk7XG4gIC8vIEVuc3VyZSBjb25zaXN0ZW50IG91dHB1dFxuICByZWxhdGl2ZVBhdGhzLnNvcnQoKTtcblxuICBjb25zdCBwYXRoR2xvYnMgPSBPYmplY3Qua2V5cyhQQVRIX0dMT0JfVE9fVFlQRV9NQVApO1xuICBjb25zdCBleGlzdGluZ05hbWVzOiBSZWNvcmQ8c3RyaW5nLCBFbnRyeXBvaW50IHwgdW5kZWZpbmVkPiA9IHt9O1xuXG4gIGNvbnN0IGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10gPSBbXTtcbiAgbGV0IGhhc0JhY2tncm91bmQgPSBmYWxzZTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgcmVsYXRpdmVQYXRocy5tYXAoYXN5bmMgKHJlbGF0aXZlUGF0aCkgPT4ge1xuICAgICAgY29uc3QgcGF0aCA9IHJlc29sdmUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCByZWxhdGl2ZVBhdGgpO1xuICAgICAgY29uc3QgbWF0Y2hpbmdHbG9iID0gcGF0aEdsb2JzLmZpbmQoKGdsb2IpID0+XG4gICAgICAgIG1pbmltYXRjaChyZWxhdGl2ZVBhdGgsIGdsb2IpLFxuICAgICAgKTtcblxuICAgICAgaWYgKG1hdGNoaW5nR2xvYiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBjb25maWcubG9nZ2VyLndhcm4oXG4gICAgICAgICAgYCR7cmVsYXRpdmVQYXRofSBkb2VzIG5vdCBtYXRjaCBhbnkga25vd24gZW50cnlwb2ludC4gS25vd24gZW50cnlwb2ludHM6XFxuJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIFBBVEhfR0xPQl9UT19UWVBFX01BUCxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAyLFxuICAgICAgICAgICl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZSA9IFBBVEhfR0xPQl9UT19UWVBFX01BUFttYXRjaGluZ0dsb2JdO1xuICAgICAgaWYgKHR5cGUgPT09ICdpZ25vcmVkJykgcmV0dXJuO1xuXG4gICAgICBsZXQgZW50cnlwb2ludDogRW50cnlwb2ludDtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdwb3B1cCc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldFBvcHVwRW50cnlwb2ludChjb25maWcsIHBhdGgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvcHRpb25zJzpcbiAgICAgICAgICBlbnRyeXBvaW50ID0gYXdhaXQgZ2V0T3B0aW9uc0VudHJ5cG9pbnQoY29uZmlnLCBwYXRoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFja2dyb3VuZCc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldEJhY2tncm91bmRFbnRyeXBvaW50KGNvbmZpZywgcGF0aCk7XG4gICAgICAgICAgaGFzQmFja2dyb3VuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NvbnRlbnQtc2NyaXB0JzpcbiAgICAgICAgICBlbnRyeXBvaW50ID0gYXdhaXQgZ2V0Q29udGVudFNjcmlwdEVudHJ5cG9pbnQoY29uZmlnLCBwYXRoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndW5saXN0ZWQtcGFnZSc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldFVubGlzdGVkUGFnZUVudHJ5cG9pbnQoY29uZmlnLCBwYXRoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndW5saXN0ZWQtc2NyaXB0JzpcbiAgICAgICAgICBlbnRyeXBvaW50ID0gYXdhaXQgZ2V0VW5saXN0ZWRTY3JpcHRFbnRyeXBvaW50KGNvbmZpZywgcGF0aCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NvbnRlbnQtc2NyaXB0LXN0eWxlJzpcbiAgICAgICAgICBlbnRyeXBvaW50ID0ge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIG5hbWU6IGdldEVudHJ5cG9pbnROYW1lKGNvbmZpZy5lbnRyeXBvaW50c0RpciwgcGF0aCksXG4gICAgICAgICAgICBpbnB1dFBhdGg6IHBhdGgsXG4gICAgICAgICAgICBvdXRwdXREaXI6IHJlc29sdmUoY29uZmlnLm91dERpciwgQ09OVEVOVF9TQ1JJUFRfT1VUX0RJUiksXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIGluY2x1ZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgZXhjbHVkZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbmFtZTogZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICAgICAgICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICAgICAgICAgIG91dHB1dERpcjogY29uZmlnLm91dERpcixcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgaW5jbHVkZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBleGNsdWRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdpdGhTYW1lTmFtZSA9IGV4aXN0aW5nTmFtZXNbZW50cnlwb2ludC5uYW1lXTtcbiAgICAgIGlmICh3aXRoU2FtZU5hbWUpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgYE11bHRpcGxlIGVudHJ5cG9pbnRzIHdpdGggdGhlIG5hbWUgXCIke1xuICAgICAgICAgICAgZW50cnlwb2ludC5uYW1lXG4gICAgICAgICAgfVwiIGRldGVjdGVkLCBidXQgb25seSBvbmUgaXMgYWxsb3dlZDogJHtbXG4gICAgICAgICAgICByZWxhdGl2ZShjb25maWcucm9vdCwgd2l0aFNhbWVOYW1lLmlucHV0UGF0aCksXG4gICAgICAgICAgICByZWxhdGl2ZShjb25maWcucm9vdCwgZW50cnlwb2ludC5pbnB1dFBhdGgpLFxuICAgICAgICAgIF0uam9pbignLCAnKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZW50cnlwb2ludHMucHVzaChlbnRyeXBvaW50KTtcbiAgICAgIGV4aXN0aW5nTmFtZXNbZW50cnlwb2ludC5uYW1lXSA9IGVudHJ5cG9pbnQ7XG4gICAgfSksXG4gICk7XG4gIGlmIChjb25maWcuY29tbWFuZCA9PT0gJ3NlcnZlJyAmJiAhaGFzQmFja2dyb3VuZCkge1xuICAgIGVudHJ5cG9pbnRzLnB1c2goXG4gICAgICBhd2FpdCBnZXRCYWNrZ3JvdW5kRW50cnlwb2ludChjb25maWcsIFZJUlRVQUxfTk9PUF9CQUNLR1JPVU5EX01PRFVMRV9JRCksXG4gICAgKTtcbiAgfVxuXG4gIGNvbmZpZy5sb2dnZXIuZGVidWcoJ0FsbCBlbnRyeXBvaW50czonLCBlbnRyeXBvaW50cyk7XG4gIGNvbnN0IHRhcmdldEVudHJ5cG9pbnRzID0gZW50cnlwb2ludHMuZmlsdGVyKChlbnRyeSkgPT4ge1xuICAgIGNvbnN0IHsgaW5jbHVkZSwgZXhjbHVkZSB9ID0gZW50cnkub3B0aW9ucztcbiAgICBpZiAoaW5jbHVkZT8ubGVuZ3RoICYmIGV4Y2x1ZGU/Lmxlbmd0aCkge1xuICAgICAgY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICBgVGhlICR7ZW50cnkubmFtZX0gZW50cnlwb2ludCBsaXN0cyBib3RoIGluY2x1ZGUgYW5kIGV4Y2x1ZGUsIGJ1dCBvbmx5IG9uZSBjYW4gYmUgdXNlZCBwZXIgZW50cnlwb2ludC4gRW50cnlwb2ludCBpZ25vcmVkLmAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZXhjbHVkZT8ubGVuZ3RoICYmICFpbmNsdWRlPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAhZXhjbHVkZS5pbmNsdWRlcyhjb25maWcuYnJvd3Nlcik7XG4gICAgfVxuICAgIGlmIChpbmNsdWRlPy5sZW5ndGggJiYgIWV4Y2x1ZGU/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGluY2x1ZGUuaW5jbHVkZXMoY29uZmlnLmJyb3dzZXIpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbiAgY29uZmlnLmxvZ2dlci5kZWJ1ZyhgJHtjb25maWcuYnJvd3Nlcn0gZW50cnlwb2ludHM6YCwgdGFyZ2V0RW50cnlwb2ludHMpO1xuICByZXR1cm4gdGFyZ2V0RW50cnlwb2ludHM7XG59XG5cbmZ1bmN0aW9uIGdldEh0bWxCYXNlT3B0aW9ucyhkb2N1bWVudDogRG9jdW1lbnQpOiBCYXNlRW50cnlwb2ludE9wdGlvbnMge1xuICBjb25zdCBvcHRpb25zOiBCYXNlRW50cnlwb2ludE9wdGlvbnMgPSB7fTtcblxuICBjb25zdCBpbmNsdWRlQ29udGVudCA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J21hbmlmZXN0LmluY2x1ZGUnXVwiKVxuICAgID8uZ2V0QXR0cmlidXRlKCdjb250ZW50Jyk7XG4gIGlmIChpbmNsdWRlQ29udGVudCkge1xuICAgIG9wdGlvbnMuaW5jbHVkZSA9IEpTT041LnBhcnNlKGluY2x1ZGVDb250ZW50KTtcbiAgfVxuXG4gIGNvbnN0IGV4Y2x1ZGVDb250ZW50ID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nbWFuaWZlc3QuZXhjbHVkZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGV4Y2x1ZGVDb250ZW50KSB7XG4gICAgb3B0aW9ucy5leGNsdWRlID0gSlNPTjUucGFyc2UoZXhjbHVkZUNvbnRlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgcG9wdXAgSFRNTCBmaWxlLlxuICogQHBhcmFtIGNvbnRlbnQgU3RyaW5nIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGF0IHRoZSBwYXRoLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQb3B1cEVudHJ5cG9pbnQoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIHBhdGg6IHN0cmluZyxcbik6IFByb21pc2U8UG9wdXBFbnRyeXBvaW50PiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgeyBkb2N1bWVudCB9ID0gcGFyc2VIVE1MKGNvbnRlbnQpO1xuXG4gIGNvbnN0IG9wdGlvbnM6IFBvcHVwRW50cnlwb2ludFsnb3B0aW9ucyddID0gZ2V0SHRtbEJhc2VPcHRpb25zKGRvY3VtZW50KTtcblxuICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RpdGxlJyk7XG4gIGlmICh0aXRsZSAhPSBudWxsKSBvcHRpb25zLmRlZmF1bHRUaXRsZSA9IHRpdGxlLnRleHRDb250ZW50ID8/IHVuZGVmaW5lZDtcblxuICBjb25zdCBkZWZhdWx0SWNvbkNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5kZWZhdWx0X2ljb24nXVwiKVxuICAgID8uZ2V0QXR0cmlidXRlKCdjb250ZW50Jyk7XG4gIGlmIChkZWZhdWx0SWNvbkNvbnRlbnQpIHtcbiAgICB0cnkge1xuICAgICAgb3B0aW9ucy5kZWZhdWx0SWNvbiA9IEpTT041LnBhcnNlKGRlZmF1bHRJY29uQ29udGVudCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25maWcubG9nZ2VyLmZhdGFsKFxuICAgICAgICBgRmFpbGVkIHRvIHBhcnNlIGRlZmF1bHRfaWNvbiBtZXRhIHRhZyBjb250ZW50IGFzIEpTT041LiBjb250ZW50PSR7ZGVmYXVsdEljb25Db250ZW50fWAsXG4gICAgICAgIGVycixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbXYyVHlwZUNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC50eXBlJ11cIilcbiAgICA/LmdldEF0dHJpYnV0ZSgnY29udGVudCcpO1xuICBpZiAobXYyVHlwZUNvbnRlbnQpIHtcbiAgICBvcHRpb25zLm12MktleSA9XG4gICAgICBtdjJUeXBlQ29udGVudCA9PT0gJ3BhZ2VfYWN0aW9uJyA/ICdwYWdlX2FjdGlvbicgOiAnYnJvd3Nlcl9hY3Rpb24nO1xuICB9XG5cbiAgY29uc3QgYnJvd3NlclN0eWxlQ29udGVudCA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J21hbmlmZXN0LmJyb3dzZXJfc3R5bGUnXVwiKVxuICAgID8uZ2V0QXR0cmlidXRlKCdjb250ZW50Jyk7XG4gIGlmIChicm93c2VyU3R5bGVDb250ZW50KSB7XG4gICAgb3B0aW9ucy5icm93c2VyU3R5bGUgPSBicm93c2VyU3R5bGVDb250ZW50ID09PSAndHJ1ZSc7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdwb3B1cCcsXG4gICAgbmFtZTogJ3BvcHVwJyxcbiAgICBvcHRpb25zLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IGNvbmZpZy5vdXREaXIsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgb3B0aW9ucyBIVE1MIGZpbGUuXG4gKiBAcGFyYW0gY29udGVudCBTdHJpbmcgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIHBhdGguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE9wdGlvbnNFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPE9wdGlvbnNFbnRyeXBvaW50PiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgeyBkb2N1bWVudCB9ID0gcGFyc2VIVE1MKGNvbnRlbnQpO1xuXG4gIGNvbnN0IG9wdGlvbnM6IE9wdGlvbnNFbnRyeXBvaW50WydvcHRpb25zJ10gPSBnZXRIdG1sQmFzZU9wdGlvbnMoZG9jdW1lbnQpO1xuXG4gIGNvbnN0IG9wZW5JblRhYkNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5vcGVuX2luX3RhYiddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKG9wZW5JblRhYkNvbnRlbnQpIHtcbiAgICBvcHRpb25zLm9wZW5JblRhYiA9IG9wZW5JblRhYkNvbnRlbnQgPT09ICd0cnVlJztcbiAgfVxuXG4gIGNvbnN0IGNocm9tZVN0eWxlQ29udGVudCA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J21hbmlmZXN0LmNocm9tZV9zdHlsZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGNocm9tZVN0eWxlQ29udGVudCkge1xuICAgIG9wdGlvbnMuY2hyb21lU3R5bGUgPSBjaHJvbWVTdHlsZUNvbnRlbnQgPT09ICd0cnVlJztcbiAgfVxuXG4gIGNvbnN0IGJyb3dzZXJTdHlsZUNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5icm93c2VyX3N0eWxlJ11cIilcbiAgICA/LmdldEF0dHJpYnV0ZSgnY29udGVudCcpO1xuICBpZiAoYnJvd3NlclN0eWxlQ29udGVudCkge1xuICAgIG9wdGlvbnMuYnJvd3NlclN0eWxlID0gYnJvd3NlclN0eWxlQ29udGVudCA9PT0gJ3RydWUnO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnb3B0aW9ucycsXG4gICAgbmFtZTogJ29wdGlvbnMnLFxuICAgIG9wdGlvbnMsXG4gICAgaW5wdXRQYXRoOiBwYXRoLFxuICAgIG91dHB1dERpcjogY29uZmlnLm91dERpcixcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGF0aCBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBIVE1MIGZpbGUuXG4gKiBAcGFyYW0gY29udGVudCBTdHJpbmcgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIHBhdGguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFVubGlzdGVkUGFnZUVudHJ5cG9pbnQoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIHBhdGg6IHN0cmluZyxcbik6IFByb21pc2U8R2VuZXJpY0VudHJ5cG9pbnQ+IHtcbiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICBjb25zdCB7IGRvY3VtZW50IH0gPSBwYXJzZUhUTUwoY29udGVudCk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAndW5saXN0ZWQtcGFnZScsXG4gICAgbmFtZTogZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICBpbnB1dFBhdGg6IHBhdGgsXG4gICAgb3V0cHV0RGlyOiBjb25maWcub3V0RGlyLFxuICAgIG9wdGlvbnM6IGdldEh0bWxCYXNlT3B0aW9ucyhkb2N1bWVudCksXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgc2NyaXB0J3MgZmlsZS5cbiAqIEBwYXJhbSBjb250ZW50IFN0cmluZyBjb250ZW50cyBvZiB0aGUgZmlsZSBhdCB0aGUgcGF0aC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0VW5saXN0ZWRTY3JpcHRFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPEdlbmVyaWNFbnRyeXBvaW50PiB7XG4gIGNvbnN0IG5hbWUgPSBnZXRFbnRyeXBvaW50TmFtZShjb25maWcuZW50cnlwb2ludHNEaXIsIHBhdGgpO1xuICBjb25zdCBkZWZhdWx0RXhwb3J0ID0gYXdhaXQgaW1wb3J0RW50cnlwb2ludEZpbGU8VW5saXN0ZWRTY3JpcHREZWZpbml0aW9uPihcbiAgICBwYXRoLFxuICAgIGNvbmZpZyxcbiAgKTtcbiAgaWYgKGRlZmF1bHRFeHBvcnQgPT0gbnVsbCkge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgYCR7bmFtZX06IERlZmF1bHQgZXhwb3J0IG5vdCBmb3VuZCwgZGlkIHlvdSBmb3JnZXQgdG8gY2FsbCBcImV4cG9ydCBkZWZhdWx0IGRlZmluZVVubGlzdGVkU2NyaXB0KC4uLilcIj9gLFxuICAgICk7XG4gIH1cbiAgY29uc3QgeyBtYWluOiBfLCAuLi5tb2R1bGVPcHRpb25zIH0gPSBkZWZhdWx0RXhwb3J0O1xuICBjb25zdCBvcHRpb25zOiBPbWl0PFVubGlzdGVkU2NyaXB0RGVmaW5pdGlvbiwgJ21haW4nPiA9IG1vZHVsZU9wdGlvbnM7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3VubGlzdGVkLXNjcmlwdCcsXG4gICAgbmFtZSxcbiAgICBpbnB1dFBhdGg6IHBhdGgsXG4gICAgb3V0cHV0RGlyOiBjb25maWcub3V0RGlyLFxuICAgIG9wdGlvbnMsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgYmFja2dyb3VuZCdzIFRTIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEJhY2tncm91bmRFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPEJhY2tncm91bmRFbnRyeXBvaW50PiB7XG4gIGNvbnN0IG5hbWUgPSAnYmFja2dyb3VuZCc7XG4gIGxldCBvcHRpb25zOiBPbWl0PEJhY2tncm91bmREZWZpbml0aW9uLCAnbWFpbic+ID0ge307XG4gIGlmIChwYXRoICE9PSBWSVJUVUFMX05PT1BfQkFDS0dST1VORF9NT0RVTEVfSUQpIHtcbiAgICBjb25zdCBkZWZhdWx0RXhwb3J0ID0gYXdhaXQgaW1wb3J0RW50cnlwb2ludEZpbGU8QmFja2dyb3VuZERlZmluaXRpb24+KFxuICAgICAgcGF0aCxcbiAgICAgIGNvbmZpZyxcbiAgICApO1xuICAgIGlmIChkZWZhdWx0RXhwb3J0ID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgJHtuYW1lfTogRGVmYXVsdCBleHBvcnQgbm90IGZvdW5kLCBkaWQgeW91IGZvcmdldCB0byBjYWxsIFwiZXhwb3J0IGRlZmF1bHQgZGVmaW5lQmFja2dyb3VuZCguLi4pXCI/YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHsgbWFpbjogXywgLi4ubW9kdWxlT3B0aW9ucyB9ID0gZGVmYXVsdEV4cG9ydDtcbiAgICBvcHRpb25zID0gbW9kdWxlT3B0aW9ucztcbiAgfVxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdiYWNrZ3JvdW5kJyxcbiAgICBuYW1lLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IGNvbmZpZy5vdXREaXIsXG4gICAgb3B0aW9uczoge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHR5cGU6IHJlc29sdmVQZXJCcm93c2VyT3B0aW9uKG9wdGlvbnMudHlwZSwgY29uZmlnLmJyb3dzZXIpLFxuICAgICAgcGVyc2lzdGVudDogcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24ob3B0aW9ucy5wZXJzaXN0ZW50LCBjb25maWcuYnJvd3NlciksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGF0aCBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBjb250ZW50IHNjcmlwdCdzIFRTIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENvbnRlbnRTY3JpcHRFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPENvbnRlbnRTY3JpcHRFbnRyeXBvaW50PiB7XG4gIGNvbnN0IG5hbWUgPSBnZXRFbnRyeXBvaW50TmFtZShjb25maWcuZW50cnlwb2ludHNEaXIsIHBhdGgpO1xuICBjb25zdCB7IG1haW46IF8sIC4uLm9wdGlvbnMgfSA9XG4gICAgYXdhaXQgaW1wb3J0RW50cnlwb2ludEZpbGU8Q29udGVudFNjcmlwdERlZmluaXRpb24+KHBhdGgsIGNvbmZpZyk7XG4gIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGAke25hbWV9OiBEZWZhdWx0IGV4cG9ydCBub3QgZm91bmQsIGRpZCB5b3UgZm9yZ2V0IHRvIGNhbGwgXCJleHBvcnQgZGVmYXVsdCBkZWZpbmVDb250ZW50U2NyaXB0KC4uLilcIj9gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnY29udGVudC1zY3JpcHQnLFxuICAgIG5hbWUsXG4gICAgaW5wdXRQYXRoOiBwYXRoLFxuICAgIG91dHB1dERpcjogcmVzb2x2ZShjb25maWcub3V0RGlyLCBDT05URU5UX1NDUklQVF9PVVRfRElSKSxcbiAgICBvcHRpb25zLFxuICB9O1xufVxuXG5jb25zdCBQQVRIX0dMT0JfVE9fVFlQRV9NQVA6IFJlY29yZDxzdHJpbmcsIEVudHJ5cG9pbnRbJ3R5cGUnXSB8ICdpZ25vcmVkJz4gPSB7XG4gICdzYW5kYm94Lmh0bWwnOiAnc2FuZGJveCcsXG4gICdzYW5kYm94L2luZGV4Lmh0bWwnOiAnc2FuZGJveCcsXG4gICcqLnNhbmRib3guaHRtbCc6ICdzYW5kYm94JyxcbiAgJyouc2FuZGJveC9pbmRleC5odG1sJzogJ3NhbmRib3gnLFxuXG4gICdib29rbWFya3MuaHRtbCc6ICdib29rbWFya3MnLFxuICAnYm9va21hcmtzL2luZGV4Lmh0bWwnOiAnYm9va21hcmtzJyxcblxuICAnaGlzdG9yeS5odG1sJzogJ2hpc3RvcnknLFxuICAnaGlzdG9yeS9pbmRleC5odG1sJzogJ2hpc3RvcnknLFxuXG4gICduZXd0YWIuaHRtbCc6ICduZXd0YWInLFxuICAnbmV3dGFiL2luZGV4Lmh0bWwnOiAnbmV3dGFiJyxcblxuICAnc2lkZXBhbmVsLmh0bWwnOiAnc2lkZXBhbmVsJyxcbiAgJ3NpZGVwYW5lbC9pbmRleC5odG1sJzogJ3NpZGVwYW5lbCcsXG4gICcqLnNpZGVwYW5lbC5odG1sJzogJ3NpZGVwYW5lbCcsXG4gICcqLnNpZGVwYW5lbC9pbmRleC5odG1sJzogJ3NpZGVwYW5lbCcsXG5cbiAgJ2RldnRvb2xzLmh0bWwnOiAnZGV2dG9vbHMnLFxuICAnZGV2dG9vbHMvaW5kZXguaHRtbCc6ICdkZXZ0b29scycsXG5cbiAgJ2JhY2tncm91bmQuW2p0XXMnOiAnYmFja2dyb3VuZCcsXG4gICdiYWNrZ3JvdW5kL2luZGV4LltqdF1zJzogJ2JhY2tncm91bmQnLFxuICBbVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEXTogJ2JhY2tncm91bmQnLFxuXG4gICdjb250ZW50LltqdF1zPyh4KSc6ICdjb250ZW50LXNjcmlwdCcsXG4gICdjb250ZW50L2luZGV4LltqdF1zPyh4KSc6ICdjb250ZW50LXNjcmlwdCcsXG4gICcqLmNvbnRlbnQuW2p0XXM/KHgpJzogJ2NvbnRlbnQtc2NyaXB0JyxcbiAgJyouY29udGVudC9pbmRleC5banRdcz8oeCknOiAnY29udGVudC1zY3JpcHQnLFxuICBbYGNvbnRlbnQuJHtDU1NfRVhURU5TSU9OU19QQVRURVJOfWBdOiAnY29udGVudC1zY3JpcHQtc3R5bGUnLFxuICBbYCouY29udGVudC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICdjb250ZW50LXNjcmlwdC1zdHlsZScsXG4gIFtgY29udGVudC9pbmRleC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICdjb250ZW50LXNjcmlwdC1zdHlsZScsXG4gIFtgKi5jb250ZW50L2luZGV4LiR7Q1NTX0VYVEVOU0lPTlNfUEFUVEVSTn1gXTogJ2NvbnRlbnQtc2NyaXB0LXN0eWxlJyxcblxuICAncG9wdXAuaHRtbCc6ICdwb3B1cCcsXG4gICdwb3B1cC9pbmRleC5odG1sJzogJ3BvcHVwJyxcblxuICAnb3B0aW9ucy5odG1sJzogJ29wdGlvbnMnLFxuICAnb3B0aW9ucy9pbmRleC5odG1sJzogJ29wdGlvbnMnLFxuXG4gICcqLmh0bWwnOiAndW5saXN0ZWQtcGFnZScsXG4gICcqL2luZGV4Lmh0bWwnOiAndW5saXN0ZWQtcGFnZScsXG4gICcqLltqdF1zJzogJ3VubGlzdGVkLXNjcmlwdCcsXG4gICcqL2luZGV4LnRzJzogJ3VubGlzdGVkLXNjcmlwdCcsXG4gIFtgKi4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICd1bmxpc3RlZC1zdHlsZScsXG4gIFtgKi9pbmRleC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICd1bmxpc3RlZC1zdHlsZScsXG5cbiAgLy8gRG9uJ3Qgd2FybiBhYm91dCBhbnkgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMsIGxpa2UgQ1NTIG9yIEpTIGVudHJ5cG9pbnRzIGZvciBIVE1MIGZpbGVzIG9yIHRlc3RzXG4gICcqLyoqJzogJ2lnbm9yZWQnLFxufTtcblxuY29uc3QgQ09OVEVOVF9TQ1JJUFRfT1VUX0RJUiA9ICdjb250ZW50LXNjcmlwdHMnO1xuIiwgImltcG9ydCBjcmVhdGVKSVRJLCB7IFRyYW5zZm9ybU9wdGlvbnMgYXMgSml0aVRyYW5zZm9ybU9wdGlvbnMgfSBmcm9tICdqaXRpJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlVW5pbXBvcnQgfSBmcm9tICd1bmltcG9ydCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZ2V0VW5pbXBvcnRPcHRpb25zIH0gZnJvbSAnLi9hdXRvLWltcG9ydHMnO1xuaW1wb3J0IHsgcmVtb3ZlUHJvamVjdEltcG9ydFN0YXRlbWVudHMgfSBmcm9tICcuL3N0cmluZ3MnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuaW1wb3J0IHsgVHJhbnNmb3JtT3B0aW9ucywgdHJhbnNmb3JtU3luYyB9IGZyb20gJ2VzYnVpbGQnO1xuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBleHBvcnQgb2YgYSBgcGF0aGAuXG4gKlxuICogSXQgd29ya3MgYnk6XG4gKlxuICogMS4gUmVhZGluZyB0aGUgZmlsZSB0ZXh0XG4gKiAyLiBTdHJpcHBpbmcgYWxsIGltcG9ydHMgZnJvbSBpdCB2aWEgcmVnZXhcbiAqIDMuIEF1dG8taW1wb3J0IG9ubHkgdGhlIGNsaWVudCBoZWxwZXIgZnVuY3Rpb25zXG4gKlxuICogVGhpcyBwcmV2ZW50cyByZXNvbHZpbmcgaW1wb3J0cyBvZiBpbXBvcnRzLCBzcGVlZGluZyB0aGluZ3MgdXAgYW5kIHByZXZlbnRpbmcgXCJ4eHggaXMgbm90XG4gKiBkZWZpbmVkXCIgZXJyb3JzLlxuICpcbiAqIERvd25zaWRlIGlzIHRoYXQgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgb3V0c2lkZSBvZiB0aGUgbWFpbiBmdWNudGlvbiBmb3IgdGhlIGVudHJ5cG9pbnQsXG4gKiBvdGhlcndpc2UgeW91IHdpbGwgc2VlIFwieHh4IGlzIG5vdCBkZWZpbmVkXCIgZXJyb3JzIGZvciBhbnkgaW1wb3J0cyB1c2VkIG91dHNpZGUgb2YgbWFpbiBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydEVudHJ5cG9pbnRGaWxlPFQ+KFxuICBwYXRoOiBzdHJpbmcsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBmaWxlIG1ldGFkYXRhOicsIHBhdGgpO1xuICAvLyBKSVRJICYgQmFiZWwgdXNlcyBub3JtYWxpemVkIHBhdGhzLlxuICBjb25zdCBub3JtYWxQYXRoID0gbm9ybWFsaXplUGF0aChwYXRoKTtcblxuICBjb25zdCB1bmltcG9ydCA9IGNyZWF0ZVVuaW1wb3J0KHtcbiAgICAuLi5nZXRVbmltcG9ydE9wdGlvbnMoY29uZmlnKSxcbiAgICAvLyBPbmx5IGFsbG93IHNwZWNpZmljIGltcG9ydHMsIG5vdCBhbGwgZnJvbSB0aGUgcHJvamVjdFxuICAgIGRpcnM6IFtdLFxuICB9KTtcbiAgYXdhaXQgdW5pbXBvcnQuaW5pdCgpO1xuXG4gIGNvbnN0IHRleHQgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgdGV4dE5vSW1wb3J0cyA9IHJlbW92ZVByb2plY3RJbXBvcnRTdGF0ZW1lbnRzKHRleHQpO1xuICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHVuaW1wb3J0LmluamVjdEltcG9ydHModGV4dE5vSW1wb3J0cyk7XG4gIGNvbmZpZy5sb2dnZXIuZGVidWcoXG4gICAgWydUZXh0OicsIHRleHQsICdObyBpbXBvcnRzOicsIHRleHROb0ltcG9ydHMsICdDb2RlOicsIGNvZGVdLmpvaW4oJ1xcbicpLFxuICApO1xuXG4gIGNvbnN0IGppdGkgPSBjcmVhdGVKSVRJKF9fZmlsZW5hbWUsIHtcbiAgICBjYWNoZTogZmFsc2UsXG4gICAgZGVidWc6IGNvbmZpZy5kZWJ1ZyxcbiAgICBlc21SZXNvbHZlOiB0cnVlLFxuICAgIGFsaWFzOiB7XG4gICAgICAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJzogcmVzb2x2ZShcbiAgICAgICAgY29uZmlnLnJvb3QsXG4gICAgICAgICdub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzL2Zha2UtYnJvd3Nlci5qcycsXG4gICAgICApLFxuICAgIH0sXG4gICAgLy8gTGlzdCBvZiBleHRlbnNpb25zIHRvIHRyYW5zZm9ybSB3aXRoIGVzYnVpbGRcbiAgICBleHRlbnNpb25zOiBbJy50cycsICcuY3RzJywgJy5tdHMnLCAnLnRzeCcsICcuanMnLCAnLmNqcycsICcubWpzJywgJy5qc3gnXSxcbiAgICB0cmFuc2Zvcm0ob3B0cykge1xuICAgICAgY29uc3QgaXNFbnRyeXBvaW50ID0gb3B0cy5maWxlbmFtZSA9PT0gbm9ybWFsUGF0aDtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm1TeW5jKFxuICAgICAgICAvLyBVc2UgbW9kaWZpZWQgc291cmNlIGNvZGUgZm9yIGVudHJ5cG9pbnRzXG4gICAgICAgIGlzRW50cnlwb2ludCA/IGNvZGUgOiBvcHRzLnNvdXJjZSxcbiAgICAgICAgZ2V0RXNidWlsZE9wdGlvbnMob3B0cyksXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgaml0aShwYXRoKTtcbiAgICByZXR1cm4gcmVzLmRlZmF1bHQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbmZpZy5sb2dnZXIuZXJyb3IoZXJyKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RXNidWlsZE9wdGlvbnMob3B0czogSml0aVRyYW5zZm9ybU9wdGlvbnMpOiBUcmFuc2Zvcm1PcHRpb25zIHtcbiAgY29uc3QgaXNKc3ggPSBvcHRzLmZpbGVuYW1lPy5lbmRzV2l0aCgneCcpO1xuICByZXR1cm4ge1xuICAgIGZvcm1hdDogJ2NqcycsXG4gICAgbG9hZGVyOiBpc0pzeCA/ICd0c3gnIDogJ3RzJyxcbiAgICBqc3g6IGlzSnN4ID8gJ2F1dG9tYXRpYycgOiB1bmRlZmluZWQsXG4gIH07XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGtlYmFiQ2FzZUFscGhhbnVtZXJpYyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOS1cXHNdL2csICcnKSAvLyBSZW1vdmUgYWxsIG5vbi1hbHBoYW51bWVyaWMsIG5vbi1oeXBoZW4gY2hhcmFjdGVyc1xuICAgIC5yZXBsYWNlKC9cXHMrL2csICctJyk7IC8vIFJlcGxhY2Ugc3BhY2VzIHdpdGggaHlwaGVuc1xufVxuXG4vKipcbiAqIFJlbW92ZXMgaW1wb3J0IHN0YXRlbWVudHMgZnJvbSB0aGUgdG9wIG9mIGEgZmlsZS4gS2VlcHMgaW1wb3J0Lm1ldGEgYW5kIGlubGluZSwgYXN5bmMgYGltcG9ydCgpYFxuICogY2FsbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVJbXBvcnRTdGF0ZW1lbnRzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UoXG4gICAgLyhpbXBvcnRcXHM/W3tcXHddW1xcc1xcU10qP2Zyb21cXHM/W1wiJ11bXFxzXFxTXSo/W1wiJ107P3xpbXBvcnRcXHM/W1wiJ11bXFxzXFxTXSo/W1wiJ107PykvZ20sXG4gICAgJycsXG4gICk7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBpbXBvcnRzLCBlbnN1cmluZyB0aGF0IHNvbWUgb2YgV1hUJ3MgY2xpZW50IGltcG9ydHMgYXJlIHByZXNlbnQsIHNvIHRoYXQgZW50cnlwb2ludHMgY2FuIGJlIHBhcnNlZCBpZiBhdXRvLWltcG9ydHMgYXJlIGRpc2FibGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlUHJvamVjdEltcG9ydFN0YXRlbWVudHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9JbXBvcnRzID0gcmVtb3ZlSW1wb3J0U3RhdGVtZW50cyh0ZXh0KTtcblxuICByZXR1cm4gYGltcG9ydCB7IGRlZmluZUNvbnRlbnRTY3JpcHQsIGRlZmluZUJhY2tncm91bmQgfSBmcm9tICd3eHQvY2xpZW50JztcbmltcG9ydCB7IGRlZmluZVVubGlzdGVkU2NyaXB0IH0gZnJvbSAnd3h0L3NhbmRib3gnO1xuXG4ke25vSW1wb3J0c31gO1xufVxuIiwgImltcG9ydCB7IFVuaW1wb3J0T3B0aW9ucywgY3JlYXRlVW5pbXBvcnQgfSBmcm9tICd1bmltcG9ydCc7XG5pbXBvcnQgeyBFbnRyeXBvaW50LCBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGggfSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBnZXRVbmltcG9ydE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9hdXRvLWltcG9ydHMnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEdsb2JhbHMsIGdldEdsb2JhbHMgfSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcbmltcG9ydCB7IGdldFB1YmxpY0ZpbGVzIH0gZnJvbSAnLi4vdXRpbHMvcHVibGljJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgTWVzc2FnZSwgcGFyc2VJMThuTWVzc2FnZXMgfSBmcm9tICcuLi91dGlscy9pMThuJztcbmltcG9ydCB7IHdyaXRlRmlsZUlmRGlmZmVyZW50IH0gZnJvbSAnLi4vdXRpbHMvZnMnO1xuXG4vKipcbiAqIEdlbmVyYXRlIGFuZCB3cml0ZSBhbGwgdGhlIGZpbGVzIGluc2lkZSB0aGUgYEludGVybmFsQ29uZmlnLnR5cGVzRGlyYCBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVR5cGVzRGlyKFxuICBlbnRyeXBvaW50czogRW50cnlwb2ludFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGZzLmVuc3VyZURpcihjb25maWcudHlwZXNEaXIpO1xuXG4gIGNvbnN0IHJlZmVyZW5jZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3QgaW1wb3J0cyA9IGdldFVuaW1wb3J0T3B0aW9ucyhjb25maWcpO1xuICBpZiAoaW1wb3J0cyAhPT0gZmFsc2UpIHtcbiAgICByZWZlcmVuY2VzLnB1c2goYXdhaXQgd3JpdGVJbXBvcnRzRGVjbGFyYXRpb25GaWxlKGNvbmZpZywgaW1wb3J0cykpO1xuICB9XG5cbiAgcmVmZXJlbmNlcy5wdXNoKGF3YWl0IHdyaXRlUGF0aHNEZWNsYXJhdGlvbkZpbGUoZW50cnlwb2ludHMsIGNvbmZpZykpO1xuICByZWZlcmVuY2VzLnB1c2goYXdhaXQgd3JpdGVJMThuRGVjbGFyYXRpb25GaWxlKGNvbmZpZykpO1xuICByZWZlcmVuY2VzLnB1c2goYXdhaXQgd3JpdGVHbG9iYWxzRGVjbGFyYXRpb25GaWxlKGNvbmZpZykpO1xuXG4gIGNvbnN0IG1haW5SZWZlcmVuY2UgPSBhd2FpdCB3cml0ZU1haW5EZWNsYXJhdGlvbkZpbGUocmVmZXJlbmNlcywgY29uZmlnKTtcbiAgYXdhaXQgd3JpdGVUc0NvbmZpZ0ZpbGUobWFpblJlZmVyZW5jZSwgY29uZmlnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVJbXBvcnRzRGVjbGFyYXRpb25GaWxlKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICB1bmltcG9ydE9wdGlvbnM6IFBhcnRpYWw8VW5pbXBvcnRPcHRpb25zPixcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVQYXRoID0gcmVzb2x2ZShjb25maWcudHlwZXNEaXIsICdpbXBvcnRzLmQudHMnKTtcbiAgY29uc3QgdW5pbXBvcnQgPSBjcmVhdGVVbmltcG9ydCh1bmltcG9ydE9wdGlvbnMpO1xuXG4gIC8vIExvYWQgcHJvamVjdCBpbXBvcnRzIGludG8gdW5pbXBvcnQgbWVtb3J5IHNvIHRoZXkgYXJlIG91dHB1dCB2aWEgZ2VuZXJhdGVUeXBlRGVjbGFyYXRpb25zXG4gIGF3YWl0IHVuaW1wb3J0LnNjYW5JbXBvcnRzRnJvbURpcih1bmRlZmluZWQsIHsgY3dkOiBjb25maWcuc3JjRGlyIH0pO1xuXG4gIGF3YWl0IHdyaXRlRmlsZUlmRGlmZmVyZW50KFxuICAgIGZpbGVQYXRoLFxuICAgIFsnLy8gR2VuZXJhdGVkIGJ5IHd4dCcsIGF3YWl0IHVuaW1wb3J0LmdlbmVyYXRlVHlwZURlY2xhcmF0aW9ucygpXS5qb2luKFxuICAgICAgJ1xcbicsXG4gICAgKSArICdcXG4nLFxuICApO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVQYXRoc0RlY2xhcmF0aW9uRmlsZShcbiAgZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVQYXRoID0gcmVzb2x2ZShjb25maWcudHlwZXNEaXIsICdwYXRocy5kLnRzJyk7XG4gIGNvbnN0IHVuaW9ucyA9IGVudHJ5cG9pbnRzXG4gICAgLm1hcCgoZW50cnkpID0+XG4gICAgICBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgICAgZW50cnksXG4gICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgIGVudHJ5LmlucHV0UGF0aC5lbmRzV2l0aCgnLmh0bWwnKSA/ICcuaHRtbCcgOiAnLmpzJyxcbiAgICAgICksXG4gICAgKVxuICAgIC5jb25jYXQoYXdhaXQgZ2V0UHVibGljRmlsZXMoY29uZmlnKSlcbiAgICAubWFwKG5vcm1hbGl6ZVBhdGgpXG4gICAgLm1hcCgocGF0aCkgPT4gYCAgICB8IFwiLyR7cGF0aH1cImApXG4gICAgLnNvcnQoKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IGAvLyBHZW5lcmF0ZWQgYnkgd3h0XG5pbXBvcnQgXCJ3eHQvYnJvd3NlclwiO1xuXG5kZWNsYXJlIG1vZHVsZSBcInd4dC9icm93c2VyXCIge1xuICB0eXBlIFB1YmxpY1BhdGggPVxue3sgdW5pb24gfX1cbiAgZXhwb3J0IGludGVyZmFjZSBXeHRSdW50aW1lIGV4dGVuZHMgUnVudGltZS5TdGF0aWMge1xuICAgIGdldFVSTChwYXRoOiBQdWJsaWNQYXRoKTogc3RyaW5nO1xuICB9XG59XG5gO1xuXG4gIGF3YWl0IHdyaXRlRmlsZUlmRGlmZmVyZW50KFxuICAgIGZpbGVQYXRoLFxuICAgIHRlbXBsYXRlLnJlcGxhY2UoJ3t7IHVuaW9uIH19JywgdW5pb25zIHx8ICcgICAgfCBuZXZlcicpLFxuICApO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVJMThuRGVjbGFyYXRpb25GaWxlKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlKGNvbmZpZy50eXBlc0RpciwgJ2kxOG4uZC50cycpO1xuICBjb25zdCBkZWZhdWx0TG9jYWxlID0gY29uZmlnLm1hbmlmZXN0LmRlZmF1bHRfbG9jYWxlO1xuICBjb25zdCB0ZW1wbGF0ZSA9IGAvLyBHZW5lcmF0ZWQgYnkgd3h0XG5pbXBvcnQgXCJ3eHQvYnJvd3NlclwiO1xuXG5kZWNsYXJlIG1vZHVsZSBcInd4dC9icm93c2VyXCIge1xuICAvKipcbiAgICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vZG9jcy9leHRlbnNpb25zL3JlZmVyZW5jZS9pMThuLyNtZXRob2QtZ2V0TWVzc2FnZVxuICAgKi9cbiAgaW50ZXJmYWNlIEdldE1lc3NhZ2VPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9kb2NzL2V4dGVuc2lvbnMvcmVmZXJlbmNlL2kxOG4vI21ldGhvZC1nZXRNZXNzYWdlXG4gICAgICovXG4gICAgZXNjYXBlTHQ/OiBib29sZWFuXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFd4dEkxOG4gZXh0ZW5kcyBJMThuLlN0YXRpYyB7XG57eyBvdmVycmlkZXMgfX1cbiAgfVxufVxuYDtcblxuICBsZXQgbWVzc2FnZXM6IE1lc3NhZ2VbXTtcbiAgaWYgKGRlZmF1bHRMb2NhbGUpIHtcbiAgICBjb25zdCBkZWZhdWx0TG9jYWxlUGF0aCA9IHBhdGgucmVzb2x2ZShcbiAgICAgIGNvbmZpZy5wdWJsaWNEaXIsXG4gICAgICAnX2xvY2FsZXMnLFxuICAgICAgZGVmYXVsdExvY2FsZSxcbiAgICAgICdtZXNzYWdlcy5qc29uJyxcbiAgICApO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKGRlZmF1bHRMb2NhbGVQYXRoLCAndXRmLTgnKSk7XG4gICAgbWVzc2FnZXMgPSBwYXJzZUkxOG5NZXNzYWdlcyhjb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlcyA9IHBhcnNlSTE4bk1lc3NhZ2VzKHt9KTtcbiAgfVxuXG4gIGNvbnN0IG92ZXJyaWRlcyA9IG1lc3NhZ2VzLm1hcCgobWVzc2FnZSkgPT4ge1xuICAgIHJldHVybiBgICAgIC8qKlxuICAgICAqICR7bWVzc2FnZS5kZXNjcmlwdGlvbiA/PyAnTm8gbWVzc2FnZSBkZXNjcmlwdGlvbi4nfVxuICAgICAqIFxuICAgICAqIFwiJHttZXNzYWdlLm1lc3NhZ2V9XCJcbiAgICAgKi9cbiAgICBnZXRNZXNzYWdlKFxuICAgICAgbWVzc2FnZU5hbWU6IFwiJHttZXNzYWdlLm5hbWV9XCIsXG4gICAgICBzdWJzdGl0dXRpb25zPzogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgICBvcHRpb25zPzogR2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgKTogc3RyaW5nO2A7XG4gIH0pO1xuICBhd2FpdCB3cml0ZUZpbGVJZkRpZmZlcmVudChcbiAgICBmaWxlUGF0aCxcbiAgICB0ZW1wbGF0ZS5yZXBsYWNlKCd7eyBvdmVycmlkZXMgfX0nLCBvdmVycmlkZXMuam9pbignXFxuJykpLFxuICApO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVHbG9iYWxzRGVjbGFyYXRpb25GaWxlKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlKGNvbmZpZy50eXBlc0RpciwgJ2dsb2JhbHMuZC50cycpO1xuICBjb25zdCBnbG9iYWxzID0gWy4uLmdldEdsb2JhbHMoY29uZmlnKSwgLi4uZ2V0RW50cnlwb2ludEdsb2JhbHMoY29uZmlnLCAnJyldO1xuICBhd2FpdCB3cml0ZUZpbGVJZkRpZmZlcmVudChcbiAgICBmaWxlUGF0aCxcbiAgICBbXG4gICAgICAnLy8gR2VuZXJhdGVkIGJ5IHd4dCcsXG4gICAgICAnZXhwb3J0IHt9JyxcbiAgICAgICdkZWNsYXJlIGdsb2JhbCB7JyxcbiAgICAgIC4uLmdsb2JhbHMubWFwKChnbG9iYWwpID0+IGAgIGNvbnN0ICR7Z2xvYmFsLm5hbWV9OiAke2dsb2JhbC50eXBlfTtgKSxcbiAgICAgICd9JyxcbiAgICBdLmpvaW4oJ1xcbicpICsgJ1xcbicsXG4gICk7XG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVNYWluRGVjbGFyYXRpb25GaWxlKFxuICByZWZlcmVuY2VzOiBzdHJpbmdbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRpciA9IGNvbmZpZy53eHREaXI7XG4gIGNvbnN0IGZpbGVQYXRoID0gcmVzb2x2ZShkaXIsICd3eHQuZC50cycpO1xuICBhd2FpdCB3cml0ZUZpbGVJZkRpZmZlcmVudChcbiAgICBmaWxlUGF0aCxcbiAgICBbXG4gICAgICAnLy8gR2VuZXJhdGVkIGJ5IHd4dCcsXG4gICAgICBgLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJ2aXRlL2NsaWVudFwiIC8+YCxcbiAgICAgIC4uLnJlZmVyZW5jZXMubWFwKFxuICAgICAgICAocmVmKSA9PlxuICAgICAgICAgIGAvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vJHtub3JtYWxpemVQYXRoKHJlbGF0aXZlKGRpciwgcmVmKSl9XCIgLz5gLFxuICAgICAgKSxcbiAgICBdLmpvaW4oJ1xcbicpICsgJ1xcbicsXG4gICk7XG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVUc0NvbmZpZ0ZpbGUoXG4gIG1haW5SZWZlcmVuY2U6IHN0cmluZyxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbikge1xuICBjb25zdCBkaXIgPSBjb25maWcud3h0RGlyO1xuICBjb25zdCByb290UGF0aCA9IG5vcm1hbGl6ZVBhdGgocmVsYXRpdmUoZGlyLCBjb25maWcucm9vdCkpO1xuICBjb25zdCBzcmNQYXRoID0gbm9ybWFsaXplUGF0aChyZWxhdGl2ZShkaXIsIGNvbmZpZy5zcmNEaXIpKTtcbiAgYXdhaXQgd3JpdGVGaWxlSWZEaWZmZXJlbnQoXG4gICAgcmVzb2x2ZShkaXIsICd0c2NvbmZpZy5qc29uJyksXG4gICAgYHtcbiAgXCJjb21waWxlck9wdGlvbnNcIjoge1xuICAgIFwidGFyZ2V0XCI6IFwiRVNOZXh0XCIsXG4gICAgXCJtb2R1bGVcIjogXCJFU05leHRcIixcbiAgICBcIm1vZHVsZVJlc29sdXRpb25cIjogXCJCdW5kbGVyXCIsXG4gICAgXCJub0VtaXRcIjogdHJ1ZSxcbiAgICBcImVzTW9kdWxlSW50ZXJvcFwiOiB0cnVlLFxuICAgIFwiZm9yY2VDb25zaXN0ZW50Q2FzaW5nSW5GaWxlTmFtZXNcIjogdHJ1ZSxcbiAgICBcInJlc29sdmVKc29uTW9kdWxlXCI6IHRydWUsXG4gICAgXCJzdHJpY3RcIjogdHJ1ZSxcbiAgICBcImxpYlwiOiBbXCJET01cIiwgXCJXZWJXb3JrZXJcIl0sXG4gICAgXCJza2lwTGliQ2hlY2tcIjogdHJ1ZSxcbiAgICBcInBhdGhzXCI6IHtcbiAgICAgIFwiQFwiOiBbXCIke3NyY1BhdGh9XCJdLFxuICAgICAgXCJALypcIjogW1wiJHtzcmNQYXRofS8qXCJdLFxuICAgICAgXCJ+XCI6IFtcIiR7c3JjUGF0aH1cIl0sXG4gICAgICBcIn4vKlwiOiBbXCIke3NyY1BhdGh9LypcIl0sXG4gICAgICBcIkBAXCI6IFtcIiR7cm9vdFBhdGh9XCJdLFxuICAgICAgXCJAQC8qXCI6IFtcIiR7cm9vdFBhdGh9LypcIl0sXG4gICAgICBcIn5+XCI6IFtcIiR7cm9vdFBhdGh9XCJdLFxuICAgICAgXCJ+fi8qXCI6IFtcIiR7cm9vdFBhdGh9LypcIl1cbiAgICB9XG4gIH0sXG4gIFwiaW5jbHVkZVwiOiBbXG4gICAgXCIke25vcm1hbGl6ZVBhdGgocmVsYXRpdmUoZGlyLCBjb25maWcucm9vdCkpfS8qKi8qXCIsXG4gICAgXCIuLyR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShkaXIsIG1haW5SZWZlcmVuY2UpKX1cIlxuICBdLFxuICBcImV4Y2x1ZGVcIjogW1wiJHtub3JtYWxpemVQYXRoKHJlbGF0aXZlKGRpciwgY29uZmlnLm91dEJhc2VEaXIpKX1cIl1cbn1gLFxuICApO1xufVxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuY29uc3QgcHJlZGVmaW5lZE1lc3NhZ2VzID0ge1xuICAnQEBleHRlbnNpb25faWQnOiB7XG4gICAgbWVzc2FnZTogJzxicm93c2VyLnJ1bnRpbWUuaWQ+JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiVGhlIGV4dGVuc2lvbiBvciBhcHAgSUQ7IHlvdSBtaWdodCB1c2UgdGhpcyBzdHJpbmcgdG8gY29uc3RydWN0IFVSTHMgZm9yIHJlc291cmNlcyBpbnNpZGUgdGhlIGV4dGVuc2lvbi4gRXZlbiB1bmxvY2FsaXplZCBleHRlbnNpb25zIGNhbiB1c2UgdGhpcyBtZXNzYWdlLlxcbk5vdGU6IFlvdSBjYW4ndCB1c2UgdGhpcyBtZXNzYWdlIGluIGEgbWFuaWZlc3QgZmlsZS5cIixcbiAgfSxcbiAgJ0BAdWlfbG9jYWxlJzoge1xuICAgIG1lc3NhZ2U6ICc8YnJvd3Nlci5pMThuLmdldFVpTG9jYWxlKCk+JyxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gIH0sXG4gICdAQGJpZGlfZGlyJzoge1xuICAgIG1lc3NhZ2U6ICc8bHRyfHJ0bD4nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1RoZSB0ZXh0IGRpcmVjdGlvbiBmb3IgdGhlIGN1cnJlbnQgbG9jYWxlLCBlaXRoZXIgXCJsdHJcIiBmb3IgbGVmdC10by1yaWdodCBsYW5ndWFnZXMgc3VjaCBhcyBFbmdsaXNoIG9yIFwicnRsXCIgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzIHN1Y2ggYXMgSmFwYW5lc2UuJyxcbiAgfSxcbiAgJ0BAYmlkaV9yZXZlcnNlZF9kaXInOiB7XG4gICAgbWVzc2FnZTogJzxydGx8bHRyPicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnSWYgdGhlIEBAYmlkaV9kaXIgaXMgXCJsdHJcIiwgdGhlbiB0aGlzIGlzIFwicnRsXCI7IG90aGVyd2lzZSwgaXRcXCdzIFwibHRyXCIuJyxcbiAgfSxcbiAgJ0BAYmlkaV9zdGFydF9lZGdlJzoge1xuICAgIG1lc3NhZ2U6ICc8bGVmdHxyaWdodD4nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0lmIHRoZSBAQGJpZGlfZGlyIGlzIFwibHRyXCIsIHRoZW4gdGhpcyBpcyBcImxlZnRcIjsgb3RoZXJ3aXNlLCBpdFxcJ3MgXCJyaWdodFwiLicsXG4gIH0sXG4gICdAQGJpZGlfZW5kX2VkZ2UnOiB7XG4gICAgbWVzc2FnZTogJzxyaWdodHxsZWZ0PicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnSWYgdGhlIEBAYmlkaV9kaXIgaXMgXCJsdHJcIiwgdGhlbiB0aGlzIGlzIFwicmlnaHRcIjsgb3RoZXJ3aXNlLCBpdFxcJ3MgXCJsZWZ0XCIuJyxcbiAgfSxcbn07XG5cbi8qKlxuICogR2V0IGEgbGlzdCBvZiBhbGwgbWVzc2FnZXMgYW5kIHRoZWlyIG1ldGFkYXRhIGZyb20gSlNPTiBmaWxlIGNvbnRlbnRzLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlc0pzb24gVGhlIGNvbnRlbnRzIG9mIGEgYF9sb2NhbGVzL2VuL21lc3NhZ2VzLmpzb25gIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUkxOG5NZXNzYWdlcyhtZXNzYWdlc0pzb246IG9iamVjdCk6IE1lc3NhZ2VbXSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh7XG4gICAgLi4ucHJlZGVmaW5lZE1lc3NhZ2VzLFxuICAgIC4uLm1lc3NhZ2VzSnNvbixcbiAgfSkubWFwPE1lc3NhZ2U+KChbbmFtZSwgZGV0YWlsc10pID0+ICh7XG4gICAgbmFtZSxcbiAgICAuLi5kZXRhaWxzLFxuICB9KSk7XG59XG4iLCAiaW1wb3J0IHsgRW50cnlwb2ludCB9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IE1hbmlmZXN0IH0gZnJvbSAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJztcbmltcG9ydCB7XG4gIEJhY2tncm91bmRFbnRyeXBvaW50LFxuICBCdWlsZE91dHB1dCxcbiAgQ29udGVudFNjcmlwdEVudHJ5cG9pbnQsXG4gIEludGVybmFsQ29uZmlnLFxuICBPcHRpb25zRW50cnlwb2ludCxcbiAgUG9wdXBFbnRyeXBvaW50LFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcbiAgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgsXG4gIHJlc29sdmVQZXJCcm93c2VyT3B0aW9uLFxufSBmcm9tICcuL2VudHJ5cG9pbnRzJztcbmltcG9ydCB7IENvbnRlbnRTZWN1cml0eVBvbGljeSB9IGZyb20gJy4vQ29udGVudFNlY3VyaXR5UG9saWN5JztcbmltcG9ydCB7XG4gIGhhc2hDb250ZW50U2NyaXB0T3B0aW9ucyxcbiAgbWFwV3h0T3B0aW9uc1RvQ29udGVudFNjcmlwdCxcbn0gZnJvbSAnLi9jb250ZW50LXNjcmlwdHMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZUpzb24gfSBmcm9tICcuL3BhY2thZ2UnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuaW1wb3J0IHsgd3JpdGVGaWxlSWZEaWZmZXJlbnQgfSBmcm9tICcuL2ZzJztcbmltcG9ydCB7IHByb2R1Y2UgfSBmcm9tICdpbW1lcic7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuXG4vKipcbiAqIFdyaXRlcyB0aGUgbWFuaWZlc3QgdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkgYW5kIHRoZSBidWlsZCBvdXRwdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZU1hbmlmZXN0KFxuICBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QsXG4gIG91dHB1dDogQnVpbGRPdXRwdXQsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RyID1cbiAgICBjb25maWcubW9kZSA9PT0gJ3Byb2R1Y3Rpb24nXG4gICAgICA/IEpTT04uc3RyaW5naWZ5KG1hbmlmZXN0KVxuICAgICAgOiBKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgMik7XG5cbiAgYXdhaXQgZnMuZW5zdXJlRGlyKGNvbmZpZy5vdXREaXIpO1xuICBhd2FpdCB3cml0ZUZpbGVJZkRpZmZlcmVudChyZXNvbHZlKGNvbmZpZy5vdXREaXIsICdtYW5pZmVzdC5qc29uJyksIHN0cik7XG5cbiAgb3V0cHV0LnB1YmxpY0Fzc2V0cy51bnNoaWZ0KHtcbiAgICB0eXBlOiAnYXNzZXQnLFxuICAgIGZpbGVOYW1lOiAnbWFuaWZlc3QuanNvbicsXG4gICAgbmFtZTogJ21hbmlmZXN0JyxcbiAgICBuZWVkc0NvZGVSZWZlcmVuY2U6IGZhbHNlLFxuICAgIHNvdXJjZTogc3RyLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIG1hbmlmZXN0IGJhc2VkIG9uIHRoZSBjb25maWcgYW5kIGVudHJ5cG9pbnRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVNYWluZmVzdChcbiAgZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSxcbiAgYnVpbGRPdXRwdXQ6IE9taXQ8QnVpbGRPdXRwdXQsICdtYW5pZmVzdCc+LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdD4ge1xuICBjb25zdCBwa2cgPSBhd2FpdCBnZXRQYWNrYWdlSnNvbihjb25maWcpO1xuXG4gIGNvbnN0IHZlcnNpb25OYW1lID0gY29uZmlnLm1hbmlmZXN0LnZlcnNpb25fbmFtZSA/PyBwa2c/LnZlcnNpb247XG4gIGNvbnN0IHZlcnNpb24gPSBjb25maWcubWFuaWZlc3QudmVyc2lvbiA/PyBzaW1wbGlmeVZlcnNpb24ocGtnPy52ZXJzaW9uKTtcblxuICBjb25zdCBiYXNlTWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0ID0ge1xuICAgIG1hbmlmZXN0X3ZlcnNpb246IGNvbmZpZy5tYW5pZmVzdFZlcnNpb24sXG4gICAgbmFtZTogcGtnPy5uYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBwa2c/LmRlc2NyaXB0aW9uLFxuICAgIHZlcnNpb24sXG4gICAgdmVyc2lvbl9uYW1lOlxuICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgdmVyc2lvbl9uYW1lXG4gICAgICBjb25maWcuYnJvd3NlciA9PT0gJ2ZpcmVmb3gnIHx8IHZlcnNpb25OYW1lID09PSB2ZXJzaW9uXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogdmVyc2lvbk5hbWUsXG4gICAgc2hvcnRfbmFtZTogcGtnPy5zaG9ydE5hbWUsXG4gICAgaWNvbnM6IGRpc2NvdmVySWNvbnMoYnVpbGRPdXRwdXQpLFxuICB9O1xuICBjb25zdCB1c2VyTWFuaWZlc3QgPSBjb25maWcubWFuaWZlc3Q7XG5cbiAgY29uc3QgbWFuaWZlc3QgPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgIGJhc2VNYW5pZmVzdCxcbiAgICB1c2VyTWFuaWZlc3QsXG4gICkgYXMgTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3Q7XG5cbiAgYWRkRW50cnlwb2ludHMobWFuaWZlc3QsIGVudHJ5cG9pbnRzLCBidWlsZE91dHB1dCwgY29uZmlnKTtcblxuICBpZiAoY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScpIGFkZERldk1vZGVDc3AobWFuaWZlc3QsIGNvbmZpZyk7XG4gIGlmIChjb25maWcuY29tbWFuZCA9PT0gJ3NlcnZlJykgYWRkRGV2TW9kZVBlcm1pc3Npb25zKG1hbmlmZXN0LCBjb25maWcpO1xuXG4gIGNvbnN0IGZpbmFsTWFuaWZlc3QgPSBwcm9kdWNlKG1hbmlmZXN0LCBjb25maWcudHJhbnNmb3JtTWFuaWZlc3QpO1xuXG4gIGlmIChmaW5hbE1hbmlmZXN0Lm5hbWUgPT0gbnVsbClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiTWFuaWZlc3QgJ25hbWUnIGlzIG1pc3NpbmcuIEVpdGhlcjpcXG4xLiBTZXQgdGhlIG5hbWUgaW4geW91ciA8cm9vdERpcj4vcGFja2FnZS5qc29uXFxuMi4gU2V0IGEgbmFtZSB2aWEgdGhlIG1hbmlmZXN0IG9wdGlvbiBpbiB5b3VyIHd4dC5jb25maWcudHNcIixcbiAgICApO1xuICBpZiAoZmluYWxNYW5pZmVzdC52ZXJzaW9uID09IG51bGwpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiTWFuaWZlc3QgJ3ZlcnNpb24nIGlzIG1pc3NpbmcuIEVpdGhlcjpcXG4xLiBBZGQgYSB2ZXJzaW9uIGluIHlvdXIgPHJvb3REaXI+L3BhY2thZ2UuanNvblxcbjIuIFBhc3MgdGhlIHZlcnNpb24gdmlhIHRoZSBtYW5pZmVzdCBvcHRpb24gaW4geW91ciB3eHQuY29uZmlnLnRzXCIsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBmaW5hbE1hbmlmZXN0O1xufVxuXG4vKipcbiAqIFJlbW92ZXMgc3VmZml4ZXMgZnJvbSB0aGUgdmVyc2lvbiwgbGlrZSBYLlkuWi1hbHBoYTEgKHdoaWNoIGJyb3NlcnMgZG9uJ3QgYWxsb3cpLCBzbyBpdCdzIGFcbiAqIHNpbXBsZSB2ZXJzaW9uIG51bWJlciwgbGlrZSBYIG9yIFguWSBvciBYLlkuWiwgd2hpY2ggYnJvd3NlcnMgYWxsb3cuXG4gKi9cbmZ1bmN0aW9uIHNpbXBsaWZ5VmVyc2lvbih2ZXJzaW9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gUmVnZXggYWRhcHRlZCBmcm9tIGhlcmU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9BZGQtb25zL1dlYkV4dGVuc2lvbnMvbWFuaWZlc3QuanNvbi92ZXJzaW9uI3ZlcnNpb25fZm9ybWF0XG4gIGNvbnN0IHZlcnNpb24gPSAvXigoMHxbMS05XVswLTldezAsOH0pKFsuXSgwfFsxLTldWzAtOV17MCw4fSkpezAsM30pLiokLy5leGVjKFxuICAgIHZlcnNpb25OYW1lLFxuICApPy5bMV07XG5cbiAgaWYgKHZlcnNpb24gPT0gbnVsbClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBDYW5ub3Qgc2ltcGxpZnkgcGFja2FnZS5qc29uIHZlcnNpb24gXCIke3ZlcnNpb25OYW1lfVwiIHRvIGEgdmFsaWQgZXh0ZW5zaW9uIHZlcnNpb24sIFwiWC5ZLlpcImAsXG4gICAgKTtcblxuICByZXR1cm4gdmVyc2lvbjtcbn1cblxuZnVuY3Rpb24gYWRkRW50cnlwb2ludHMoXG4gIG1hbmlmZXN0OiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdCxcbiAgZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSxcbiAgYnVpbGRPdXRwdXQ6IE9taXQ8QnVpbGRPdXRwdXQsICdtYW5pZmVzdCc+LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogdm9pZCB7XG4gIGNvbnN0IGVudHJpZXNCeVR5cGUgPSBlbnRyeXBvaW50cy5yZWR1Y2U8XG4gICAgUGFydGlhbDxSZWNvcmQ8RW50cnlwb2ludFsndHlwZSddLCBFbnRyeXBvaW50W10+PlxuICA+KChtYXAsIGVudHJ5cG9pbnQpID0+IHtcbiAgICBtYXBbZW50cnlwb2ludC50eXBlXSA/Pz0gW107XG4gICAgbWFwW2VudHJ5cG9pbnQudHlwZV0/LnB1c2goZW50cnlwb2ludCk7XG4gICAgcmV0dXJuIG1hcDtcbiAgfSwge30pO1xuXG4gIGNvbnN0IGJhY2tncm91bmQgPSBlbnRyaWVzQnlUeXBlWydiYWNrZ3JvdW5kJ10/LlswXSBhc1xuICAgIHwgQmFja2dyb3VuZEVudHJ5cG9pbnRcbiAgICB8IHVuZGVmaW5lZDtcbiAgY29uc3QgYm9va21hcmtzID0gZW50cmllc0J5VHlwZVsnYm9va21hcmtzJ10/LlswXTtcbiAgY29uc3QgY29udGVudFNjcmlwdHMgPSBlbnRyaWVzQnlUeXBlWydjb250ZW50LXNjcmlwdCddIGFzXG4gICAgfCBDb250ZW50U2NyaXB0RW50cnlwb2ludFtdXG4gICAgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGRldnRvb2xzID0gZW50cmllc0J5VHlwZVsnZGV2dG9vbHMnXT8uWzBdO1xuICBjb25zdCBoaXN0b3J5ID0gZW50cmllc0J5VHlwZVsnaGlzdG9yeSddPy5bMF07XG4gIGNvbnN0IG5ld3RhYiA9IGVudHJpZXNCeVR5cGVbJ25ld3RhYiddPy5bMF07XG4gIGNvbnN0IG9wdGlvbnMgPSBlbnRyaWVzQnlUeXBlWydvcHRpb25zJ10/LlswXSBhc1xuICAgIHwgT3B0aW9uc0VudHJ5cG9pbnRcbiAgICB8IHVuZGVmaW5lZDtcbiAgY29uc3QgcG9wdXAgPSBlbnRyaWVzQnlUeXBlWydwb3B1cCddPy5bMF0gYXMgUG9wdXBFbnRyeXBvaW50IHwgdW5kZWZpbmVkO1xuICBjb25zdCBzYW5kYm94ZXMgPSBlbnRyaWVzQnlUeXBlWydzYW5kYm94J107XG4gIGNvbnN0IHNpZGVwYW5lbHMgPSBlbnRyaWVzQnlUeXBlWydzaWRlcGFuZWwnXTtcblxuICBpZiAoYmFja2dyb3VuZCkge1xuICAgIGNvbnN0IHNjcmlwdCA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGJhY2tncm91bmQsIGNvbmZpZy5vdXREaXIsICcuanMnKTtcbiAgICBpZiAobWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gMykge1xuICAgICAgbWFuaWZlc3QuYmFja2dyb3VuZCA9IHtcbiAgICAgICAgdHlwZTogYmFja2dyb3VuZC5vcHRpb25zLnR5cGUsXG4gICAgICAgIHNlcnZpY2Vfd29ya2VyOiBzY3JpcHQsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBtYW5pZmVzdC5iYWNrZ3JvdW5kID0ge1xuICAgICAgICBwZXJzaXN0ZW50OiBiYWNrZ3JvdW5kLm9wdGlvbnMucGVyc2lzdGVudCxcbiAgICAgICAgc2NyaXB0czogW3NjcmlwdF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChib29rbWFya3MpIHtcbiAgICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94Jykge1xuICAgICAgY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICAnQm9va21hcmtzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IEZpcmVmb3guIGNocm9tZV91cmxfb3ZlcnJpZGVzLmJvb2ttYXJrcyB3YXMgbm90IGFkZGVkIHRvIHRoZSBtYW5pZmVzdCcsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYW5pZmVzdC5jaHJvbWVfdXJsX292ZXJyaWRlcyA/Pz0ge307XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBib29rbWFya3MgaXMgdW50eXBlZCBpbiB3ZWJleHRlbnNpb24tcG9seWZpbGwsIGJ1dCBzdXBwb3J0ZWQgYnkgY2hyb21lXG4gICAgICBtYW5pZmVzdC5jaHJvbWVfdXJsX292ZXJyaWRlcy5ib29rbWFya3MgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgICAgYm9va21hcmtzLFxuICAgICAgICBjb25maWcub3V0RGlyLFxuICAgICAgICAnLmh0bWwnLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaGlzdG9yeSkge1xuICAgIGlmIChjb25maWcuYnJvd3NlciA9PT0gJ2ZpcmVmb3gnKSB7XG4gICAgICBjb25maWcubG9nZ2VyLndhcm4oXG4gICAgICAgICdCb29rbWFya3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgRmlyZWZveC4gY2hyb21lX3VybF9vdmVycmlkZXMuaGlzdG9yeSB3YXMgbm90IGFkZGVkIHRvIHRoZSBtYW5pZmVzdCcsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYW5pZmVzdC5jaHJvbWVfdXJsX292ZXJyaWRlcyA/Pz0ge307XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBoaXN0b3J5IGlzIHVudHlwZWQgaW4gd2ViZXh0ZW5zaW9uLXBvbHlmaWxsLCBidXQgc3VwcG9ydGVkIGJ5IGNocm9tZVxuICAgICAgbWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMuaGlzdG9yeSA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBjb25maWcub3V0RGlyLFxuICAgICAgICAnLmh0bWwnLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAobmV3dGFiKSB7XG4gICAgbWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMgPz89IHt9O1xuICAgIG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzLm5ld3RhYiA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgbmV3dGFiLFxuICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICcuaHRtbCcsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChwb3B1cCkge1xuICAgIGNvbnN0IGRlZmF1bHRfcG9wdXAgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgIHBvcHVwLFxuICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICcuaHRtbCcsXG4gICAgKTtcbiAgICBjb25zdCBvcHRpb25zOiBNYW5pZmVzdC5BY3Rpb25NYW5pZmVzdCA9IHtcbiAgICAgIGRlZmF1bHRfaWNvbjogcG9wdXAub3B0aW9ucy5kZWZhdWx0SWNvbixcbiAgICAgIGRlZmF1bHRfdGl0bGU6IHBvcHVwLm9wdGlvbnMuZGVmYXVsdFRpdGxlLFxuICAgIH07XG4gICAgaWYgKG1hbmlmZXN0Lm1hbmlmZXN0X3ZlcnNpb24gPT09IDMpIHtcbiAgICAgIG1hbmlmZXN0LmFjdGlvbiA9IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgZGVmYXVsdF9wb3B1cCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hbmlmZXN0W3BvcHVwLm9wdGlvbnMubXYyS2V5ID8/ICdicm93c2VyX2FjdGlvbiddID0ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBkZWZhdWx0X3BvcHVwLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGV2dG9vbHMpIHtcbiAgICBtYW5pZmVzdC5kZXZ0b29sc19wYWdlID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICBkZXZ0b29scyxcbiAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAnLmh0bWwnLFxuICAgICk7XG4gIH1cblxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IHBhZ2UgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChvcHRpb25zLCBjb25maWcub3V0RGlyLCAnLmh0bWwnKTtcbiAgICBtYW5pZmVzdC5vcHRpb25zX3VpID0ge1xuICAgICAgb3Blbl9pbl90YWI6IG9wdGlvbnMub3B0aW9ucy5vcGVuSW5UYWIsXG4gICAgICBicm93c2VyX3N0eWxlOlxuICAgICAgICBjb25maWcuYnJvd3NlciA9PT0gJ2ZpcmVmb3gnID8gb3B0aW9ucy5vcHRpb25zLmJyb3dzZXJTdHlsZSA6IHVuZGVmaW5lZCxcbiAgICAgIGNocm9tZV9zdHlsZTpcbiAgICAgICAgY29uZmlnLmJyb3dzZXIgIT09ICdmaXJlZm94JyA/IG9wdGlvbnMub3B0aW9ucy5jaHJvbWVTdHlsZSA6IHVuZGVmaW5lZCxcbiAgICAgIHBhZ2UsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChzYW5kYm94ZXM/Lmxlbmd0aCkge1xuICAgIGlmIChjb25maWcuYnJvd3NlciA9PT0gJ2ZpcmVmb3gnKSB7XG4gICAgICBjb25maWcubG9nZ2VyLndhcm4oXG4gICAgICAgICdTYW5kYm94ZWQgcGFnZXMgbm90IHN1cHBvcnRlZCBieSBGaXJlZm94LiBzYW5kYm94LnBhZ2VzIHdhcyBub3QgYWRkZWQgdG8gdGhlIG1hbmlmZXN0JyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHNhbmRib3ggbm90IHR5cGVkXG4gICAgICBtYW5pZmVzdC5zYW5kYm94ID0ge1xuICAgICAgICBwYWdlczogc2FuZGJveGVzLm1hcCgoZW50cnkpID0+XG4gICAgICAgICAgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoZW50cnksIGNvbmZpZy5vdXREaXIsICcuaHRtbCcpLFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBpZiAoc2lkZXBhbmVscz8ubGVuZ3RoKSB7XG4gICAgY29uc3QgZGVmYXVsdFNpZGVwYW5lbCA9XG4gICAgICBzaWRlcGFuZWxzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSAnc2lkZXBhbmVsJykgPz8gc2lkZXBhbmVsc1swXTtcbiAgICBjb25zdCBwYWdlID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICBkZWZhdWx0U2lkZXBhbmVsLFxuICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICcuaHRtbCcsXG4gICAgKTtcblxuICAgIGlmIChjb25maWcuYnJvd3NlciA9PT0gJ2ZpcmVmb3gnKSB7XG4gICAgICBtYW5pZmVzdC5zaWRlYmFyX2FjdGlvbiA9IHtcbiAgICAgICAgLy8gVE9ETzogQWRkIG9wdGlvbnMgdG8gc2lkZSBwYW5lbFxuICAgICAgICAvLyAuLi5kZWZhdWx0U2lkZXBhbmVsLm9wdGlvbnMsXG4gICAgICAgIGRlZmF1bHRfcGFuZWw6IHBhZ2UsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLm1hbmlmZXN0VmVyc2lvbiA9PT0gMykge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVW50eXBlZFxuICAgICAgbWFuaWZlc3Quc2lkZV9wYW5lbCA9IHtcbiAgICAgICAgZGVmYXVsdF9wYXRoOiBwYWdlLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICAnU2lkZSBwYW5lbCBub3Qgc3VwcG9ydGVkIGJ5IENocm9taXVtIHVzaW5nIE1WMi4gc2lkZV9wYW5lbC5kZWZhdWx0X3BhdGggd2FzIG5vdCBhZGRlZCB0byB0aGUgbWFuaWZlc3QnLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29udGVudFNjcmlwdHM/Lmxlbmd0aCkge1xuICAgIGNvbnN0IGNzc01hcCA9IGdldENvbnRlbnRTY3JpcHRzQ3NzTWFwKGJ1aWxkT3V0cHV0LCBjb250ZW50U2NyaXB0cyk7XG5cbiAgICAvLyBEb24ndCBhZGQgY29udGVudCBzY3JpcHRzIHRvIHRoZSBtYW5pZmVzdCBpbiBkZXYgbW9kZSBmb3IgTVYzIC0gdGhleSdyZSBtYW5hZ2VkIGFuZCByZWxvYWRlZFxuICAgIC8vIGF0IHJ1bnRpbWVcbiAgICBpZiAoY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScgJiYgY29uZmlnLm1hbmlmZXN0VmVyc2lvbiA9PT0gMykge1xuICAgICAgY29uc3QgaG9zdFBlcm1pc3Npb25zID0gbmV3IFNldDxzdHJpbmc+KG1hbmlmZXN0Lmhvc3RfcGVybWlzc2lvbnMgPz8gW10pO1xuICAgICAgY29udGVudFNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSByZXNvbHZlUGVyQnJvd3Nlck9wdGlvbihcbiAgICAgICAgICBzY3JpcHQub3B0aW9ucy5tYXRjaGVzLFxuICAgICAgICAgIGNvbmZpZy5icm93c2VyLFxuICAgICAgICApO1xuICAgICAgICBtYXRjaGVzLmZvckVhY2goKG1hdGNoUGF0dGVybikgPT4ge1xuICAgICAgICAgIGhvc3RQZXJtaXNzaW9ucy5hZGQobWF0Y2hQYXR0ZXJuKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGhvc3RQZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PlxuICAgICAgICBhZGRIb3N0UGVybWlzc2lvbihtYW5pZmVzdCwgcGVybWlzc2lvbiksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoYXNoVG9FbnRyeXBvaW50c01hcCA9IGNvbnRlbnRTY3JpcHRzLnJlZHVjZSgobWFwLCBzY3JpcHQpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaCA9IGhhc2hDb250ZW50U2NyaXB0T3B0aW9ucyhzY3JpcHQub3B0aW9ucywgY29uZmlnKTtcbiAgICAgICAgaWYgKG1hcC5oYXMoaGFzaCkpIG1hcC5nZXQoaGFzaCk/LnB1c2goc2NyaXB0KTtcbiAgICAgICAgZWxzZSBtYXAuc2V0KGhhc2gsIFtzY3JpcHRdKTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgIH0sIG5ldyBNYXA8c3RyaW5nLCBDb250ZW50U2NyaXB0RW50cnlwb2ludFtdPigpKTtcblxuICAgICAgY29uc3QgbmV3Q29udGVudFNjcmlwdHMgPSBBcnJheS5mcm9tKGhhc2hUb0VudHJ5cG9pbnRzTWFwLmVudHJpZXMoKSkubWFwKFxuICAgICAgICAoWywgc2NyaXB0c10pID0+ICh7XG4gICAgICAgICAgLi4ubWFwV3h0T3B0aW9uc1RvQ29udGVudFNjcmlwdChzY3JpcHRzWzBdLm9wdGlvbnMsIGNvbmZpZyksXG4gICAgICAgICAgLy8gVE9PRDogU29ydGluZyBjc3MgYW5kIGpzIGFycmF5cyBoZXJlIHNvIHdlIGdldCBjb25zaXN0ZW50IHRlc3QgcmVzdWx0cy4uLiBidXQgd2VcbiAgICAgICAgICAvLyBzaG91bGRuJ3QgaGF2ZSB0by4gV2hlcmUgaXMgdGhlIGluY29uc2lzdGVuY3kgY29taW5nIGZyb20/XG4gICAgICAgICAgY3NzOiBnZXRDb250ZW50U2NyaXB0Q3NzRmlsZXMoc2NyaXB0cywgY3NzTWFwKT8uc29ydCgpLFxuICAgICAgICAgIGpzOiBzY3JpcHRzXG4gICAgICAgICAgICAubWFwKChlbnRyeSkgPT5cbiAgICAgICAgICAgICAgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoZW50cnksIGNvbmZpZy5vdXREaXIsICcuanMnKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zb3J0KCksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGlmIChuZXdDb250ZW50U2NyaXB0cy5sZW5ndGggPj0gMCkge1xuICAgICAgICBtYW5pZmVzdC5jb250ZW50X3NjcmlwdHMgPz89IFtdO1xuICAgICAgICBtYW5pZmVzdC5jb250ZW50X3NjcmlwdHMucHVzaCguLi5uZXdDb250ZW50U2NyaXB0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudFNjcmlwdENzc1Jlc291cmNlcyA9IGdldENvbnRlbnRTY3JpcHRDc3NXZWJBY2Nlc3NpYmxlUmVzb3VyY2VzKFxuICAgICAgY29uZmlnLFxuICAgICAgY29udGVudFNjcmlwdHMsXG4gICAgICBjc3NNYXAsXG4gICAgKTtcbiAgICBpZiAoY29udGVudFNjcmlwdENzc1Jlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBtYW5pZmVzdC53ZWJfYWNjZXNzaWJsZV9yZXNvdXJjZXMgPz89IFtdO1xuICAgICAgbWFuaWZlc3Qud2ViX2FjY2Vzc2libGVfcmVzb3VyY2VzLnB1c2goLi4uY29udGVudFNjcmlwdENzc1Jlc291cmNlcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRpc2NvdmVySWNvbnMoXG4gIGJ1aWxkT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPixcbik6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0WydpY29ucyddIHtcbiAgY29uc3QgaWNvbnM6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtdO1xuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgLy8gI3JlZ2lvbiBzbmlwcGV0XG4gIGNvbnN0IGljb25SZWdleCA9IFtcbiAgICAvXmljb24tKFswLTldKylcXC4ocG5nfGJtcHxqcGVnfGpwZ3xpY298Z2lmKSQvLCAgICAgICAgICAgICAvLyBpY29uLTE2LnBuZ1xuICAgIC9eaWNvbi0oWzAtOV0rKXhbMC05XStcXC4ocG5nfGJtcHxqcGVnfGpwZ3xpY298Z2lmKSQvLCAgICAgIC8vIGljb24tMTZ4MTYucG5nXG4gICAgL15pY29uQChbMC05XSspd1xcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sICAgICAgICAgICAgLy8gaWNvbkAxNncucG5nXG4gICAgL15pY29uQChbMC05XSspaFxcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sICAgICAgICAgICAgLy8gaWNvbkAxNmgucG5nXG4gICAgL15pY29uQChbMC05XSspXFwuKHBuZ3xibXB8anBlZ3xqcGd8aWNvfGdpZikkLywgICAgICAgICAgICAgLy8gaWNvbkAxNi5wbmdcbiAgICAvXmljb25bXFwvXFxcXF0oWzAtOV0rKVxcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sICAgICAgICAvLyBpY29uLzE2LnBuZ1xuICAgIC9eaWNvbltcXC9cXFxcXShbMC05XSspeFswLTldK1xcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sIC8vIGljb24vMTZ4MTYucG5nXG4gIF07XG4gIC8vICNlbmRyZWdpb24gc25pcHBldFxuXG4gIGJ1aWxkT3V0cHV0LnB1YmxpY0Fzc2V0cy5mb3JFYWNoKChhc3NldCkgPT4ge1xuICAgIGxldCBzaXplOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCByZWdleCBvZiBpY29uUmVnZXgpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gYXNzZXQuZmlsZU5hbWUubWF0Y2gocmVnZXgpO1xuICAgICAgaWYgKG1hdGNoPy5bMV0gIT0gbnVsbCkge1xuICAgICAgICBzaXplID0gbWF0Y2hbMV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2l6ZSA9PSBudWxsKSByZXR1cm47XG5cbiAgICBpY29ucy5wdXNoKFtzaXplLCBub3JtYWxpemVQYXRoKGFzc2V0LmZpbGVOYW1lKV0pO1xuICB9KTtcblxuICByZXR1cm4gaWNvbnMubGVuZ3RoID4gMCA/IE9iamVjdC5mcm9tRW50cmllcyhpY29ucykgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFkZERldk1vZGVDc3AoXG4gIG1hbmlmZXN0OiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdCxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IHZvaWQge1xuICBjb25zdCBwZXJtaXNzaW9uID0gYGh0dHA6Ly8ke2NvbmZpZy5zZXJ2ZXI/Lmhvc3RuYW1lID8/ICcnfS8qYDtcbiAgY29uc3QgYWxsb3dlZENzcCA9IGNvbmZpZy5zZXJ2ZXI/Lm9yaWdpbiA/PyAnaHR0cDovL2xvY2FsaG9zdDoqJztcblxuICBpZiAobWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gMykge1xuICAgIGFkZEhvc3RQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKTtcbiAgfSBlbHNlIHtcbiAgICBhZGRQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKTtcbiAgfVxuXG4gIGNvbnN0IGNzcCA9IG5ldyBDb250ZW50U2VjdXJpdHlQb2xpY3koXG4gICAgbWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gM1xuICAgICAgPyAvLyBAdHMtZXhwZWN0LWVycm9yOiBleHRlbnNpb25fcGFnZXMgaXMgbm90IHR5cGVkXG4gICAgICAgIG1hbmlmZXN0LmNvbnRlbnRfc2VjdXJpdHlfcG9saWN5Py5leHRlbnNpb25fcGFnZXMgPz9cbiAgICAgICAgXCJzY3JpcHQtc3JjICdzZWxmJyAnd2FzbS11bnNhZmUtZXZhbCc7IG9iamVjdC1zcmMgJ3NlbGYnO1wiIC8vIGRlZmF1bHQgQ1NQIGZvciBNVjNcbiAgICAgIDogbWFuaWZlc3QuY29udGVudF9zZWN1cml0eV9wb2xpY3kgPz9cbiAgICAgICAgXCJzY3JpcHQtc3JjICdzZWxmJzsgb2JqZWN0LXNyYyAnc2VsZic7XCIsIC8vIGRlZmF1bHQgQ1NQIGZvciBNVjJcbiAgKTtcblxuICBpZiAoY29uZmlnLnNlcnZlcikgY3NwLmFkZCgnc2NyaXB0LXNyYycsIGFsbG93ZWRDc3ApO1xuXG4gIGlmIChtYW5pZmVzdC5tYW5pZmVzdF92ZXJzaW9uID09PSAzKSB7XG4gICAgbWFuaWZlc3QuY29udGVudF9zZWN1cml0eV9wb2xpY3kgPz89IHt9O1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGV4dGVuc2lvbl9wYWdlcyBpcyBub3QgdHlwZWRcbiAgICBtYW5pZmVzdC5jb250ZW50X3NlY3VyaXR5X3BvbGljeS5leHRlbnNpb25fcGFnZXMgPSBjc3AudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICBtYW5pZmVzdC5jb250ZW50X3NlY3VyaXR5X3BvbGljeSA9IGNzcC50b1N0cmluZygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZERldk1vZGVQZXJtaXNzaW9ucyhcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKSB7XG4gIC8vIEZvciByZWxvYWRpbmcgdGhlIHBhZ2VcbiAgYWRkUGVybWlzc2lvbihtYW5pZmVzdCwgJ3RhYnMnKTtcblxuICAvLyBGb3IgcmVnaXN0ZXJpbmcgY29udGVudCBzY3JpcHRzXG4gIGlmIChjb25maWcubWFuaWZlc3RWZXJzaW9uID09PSAzKSBhZGRQZXJtaXNzaW9uKG1hbmlmZXN0LCAnc2NyaXB0aW5nJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYnVuZGxlIHBhdGhzIHRvIENTUyBmaWxlcyBhc3NvY2lhdGVkIHdpdGggYSBsaXN0IG9mIGNvbnRlbnQgc2NyaXB0cywgb3IgdW5kZWZpbmVkIGlmXG4gKiB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIENTUy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRlbnRTY3JpcHRDc3NGaWxlcyhcbiAgY29udGVudFNjcmlwdHM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50W10sXG4gIGNvbnRlbnRTY3JpcHRDc3NNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNzczogc3RyaW5nW10gPSBbXTtcblxuICBjb250ZW50U2NyaXB0cy5mb3JFYWNoKChzY3JpcHQpID0+IHtcbiAgICBpZiAoXG4gICAgICBzY3JpcHQub3B0aW9ucy5jc3NJbmplY3Rpb25Nb2RlID09PSAnbWFudWFsJyB8fFxuICAgICAgc2NyaXB0Lm9wdGlvbnMuY3NzSW5qZWN0aW9uTW9kZSA9PT0gJ3VpJ1xuICAgIClcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IGNzc0ZpbGUgPSBjb250ZW50U2NyaXB0Q3NzTWFwW3NjcmlwdC5uYW1lXTtcbiAgICBpZiAoY3NzRmlsZSA9PSBudWxsKSByZXR1cm47XG5cbiAgICBpZiAoY3NzRmlsZSkgY3NzLnB1c2goY3NzRmlsZSk7XG4gIH0pO1xuXG4gIGlmIChjc3MubGVuZ3RoID4gMCkgcmV0dXJuIGNzcztcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb250ZW50IHNjcmlwdHMgY29uZmlndXJlZCB3aXRoIGBjc3NJbmplY3Rpb25Nb2RlOiBcInVpXCJgIG5lZWQgdG8gYWRkIHRoZWlyIENTUyBmaWxlcyB0byB3ZWJcbiAqIGFjY2Vzc2libGUgcmVzb3VyY2VzIHNvIHRoZXkgY2FuIGJlIGZldGNoZWQgYXMgdGV4dCBhbmQgYWRkZWQgdG8gc2hhZG93IHJvb3RzIHRoYXQgdGhlIFVJIGlzXG4gKiBhZGRlZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRlbnRTY3JpcHRDc3NXZWJBY2Nlc3NpYmxlUmVzb3VyY2VzKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBjb250ZW50U2NyaXB0czogQ29udGVudFNjcmlwdEVudHJ5cG9pbnRbXSxcbiAgY29udGVudFNjcmlwdENzc01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPixcbik6IGFueVtdIHtcbiAgY29uc3QgcmVzb3VyY2VzOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnRlbnRTY3JpcHRzLmZvckVhY2goKHNjcmlwdCkgPT4ge1xuICAgIGlmIChzY3JpcHQub3B0aW9ucy5jc3NJbmplY3Rpb25Nb2RlICE9PSAndWknKSByZXR1cm47XG5cbiAgICBjb25zdCBjc3NGaWxlID0gY29udGVudFNjcmlwdENzc01hcFtzY3JpcHQubmFtZV07XG4gICAgaWYgKGNzc0ZpbGUgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgaWYgKGNvbmZpZy5tYW5pZmVzdFZlcnNpb24gPT09IDIpIHtcbiAgICAgIHJlc291cmNlcy5wdXNoKGNzc0ZpbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvdXJjZXMucHVzaCh7XG4gICAgICAgIHJlc291cmNlczogW2Nzc0ZpbGVdLFxuICAgICAgICBtYXRjaGVzOiBzY3JpcHQub3B0aW9ucy5tYXRjaGVzLFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzb3VyY2VzO1xufVxuXG4vKipcbiAqIEJhc2VkIG9uIHRoZSBidWlsZCBvdXRwdXQsIHJldHVybiBhIFJlY29yZCBvZiBlYWNoIGNvbnRlbnQgc2NyaXB0J3MgbmFtZSB0byBpdCBDU1MgZmlsZSBpZiB0aGVcbiAqIHNjcmlwdCBpbmNsdWRlcyBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZW50U2NyaXB0c0Nzc01hcChcbiAgYnVpbGRPdXRwdXQ6IE9taXQ8QnVpbGRPdXRwdXQsICdtYW5pZmVzdCc+LFxuICBzY3JpcHRzOiBDb250ZW50U2NyaXB0RW50cnlwb2ludFtdLFxuKSB7XG4gIGNvbnN0IG1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiA9IHt9O1xuICBjb25zdCBhbGxDaHVua3MgPSBidWlsZE91dHB1dC5zdGVwcy5mbGF0TWFwKChzdGVwKSA9PiBzdGVwLmNodW5rcyk7XG4gIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiB7XG4gICAgY29uc3QgcmVsYXRlZENzcyA9IGFsbENodW5rcy5maW5kKFxuICAgICAgKGNodW5rKSA9PiBjaHVuay5maWxlTmFtZSA9PT0gYGNvbnRlbnQtc2NyaXB0cy8ke3NjcmlwdC5uYW1lfS5jc3NgLFxuICAgICk7XG4gICAgaWYgKHJlbGF0ZWRDc3MgIT0gbnVsbCkgbWFwW3NjcmlwdC5uYW1lXSA9IHJlbGF0ZWRDc3MuZmlsZU5hbWU7XG4gIH0pO1xuICByZXR1cm4gbWFwO1xufVxuXG5mdW5jdGlvbiBhZGRQZXJtaXNzaW9uKFxuICBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QsXG4gIHBlcm1pc3Npb246IHN0cmluZyxcbik6IHZvaWQge1xuICBtYW5pZmVzdC5wZXJtaXNzaW9ucyA/Pz0gW107XG4gIGlmIChtYW5pZmVzdC5wZXJtaXNzaW9ucy5pbmNsdWRlcyhwZXJtaXNzaW9uKSkgcmV0dXJuO1xuICBtYW5pZmVzdC5wZXJtaXNzaW9ucy5wdXNoKHBlcm1pc3Npb24pO1xufVxuXG5mdW5jdGlvbiBhZGRIb3N0UGVybWlzc2lvbihcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBob3N0UGVybWlzc2lvbjogc3RyaW5nLFxuKTogdm9pZCB7XG4gIG1hbmlmZXN0Lmhvc3RfcGVybWlzc2lvbnMgPz89IFtdO1xuICBpZiAobWFuaWZlc3QuaG9zdF9wZXJtaXNzaW9ucy5pbmNsdWRlcyhob3N0UGVybWlzc2lvbikpIHJldHVybjtcbiAgbWFuaWZlc3QuaG9zdF9wZXJtaXNzaW9ucy5wdXNoKGhvc3RQZXJtaXNzaW9uKTtcbn1cbiIsICIvKipcbiAqIERpcmVjdGl2ZSBuYW1lcyB0aGF0IG1ha2UgdXAgQ1NQcy4gVGhlcmUgYXJlIG1vcmUsIHRoaXMgaXMgYWxsIEkgbmVlZCBmb3IgdGhlIHBsdWdpbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ3NwRGlyZWN0aXZlID0gJ2RlZmF1bHQtc3JjJyB8ICdzY3JpcHQtc3JjJyB8ICdvYmplY3Qtc3JjJztcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeSB7XG4gIHByaXZhdGUgc3RhdGljIERJUkVDVElWRV9PUkRFUjogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IHtcbiAgICAnZGVmYXVsdC1zcmMnOiAwLFxuICAgICdzY3JpcHQtc3JjJzogMSxcbiAgICAnb2JqZWN0LXNyYyc6IDIsXG4gIH07XG5cbiAgZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG4gIGNvbnN0cnVjdG9yKGNzcD86IHN0cmluZykge1xuICAgIGlmIChjc3ApIHtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gY3NwLnNwbGl0KCc7JykubWFwKChzZWN0aW9uKSA9PiBzZWN0aW9uLnRyaW0oKSk7XG4gICAgICB0aGlzLmRhdGEgPSBzZWN0aW9ucy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nW10+PigoZGF0YSwgc2VjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBba2V5LCAuLi52YWx1ZXNdID0gc2VjdGlvbi5zcGxpdCgnICcpLm1hcCgoaXRlbSkgPT4gaXRlbS50cmltKCkpO1xuICAgICAgICBpZiAoa2V5KSBkYXRhW2tleV0gPSB2YWx1ZXM7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGEgc2V0IG9mIHZhbHVlcyBhcmUgbGlzdGVkIHVuZGVyIGEgZGlyZWN0aXZlLlxuICAgKi9cbiAgYWRkKGRpcmVjdGl2ZTogQ3NwRGlyZWN0aXZlLCAuLi5uZXdWYWx1ZXM6IHN0cmluZ1tdKTogQ29udGVudFNlY3VyaXR5UG9saWN5IHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmRhdGFbZGlyZWN0aXZlXSA/PyBbXTtcbiAgICBuZXdWYWx1ZXMuZm9yRWFjaCgobmV3VmFsdWUpID0+IHtcbiAgICAgIGlmICghdmFsdWVzLmluY2x1ZGVzKG5ld1ZhbHVlKSkgdmFsdWVzLnB1c2gobmV3VmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMuZGF0YVtkaXJlY3RpdmVdID0gdmFsdWVzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXJlY3RpdmVzID0gT2JqZWN0LmVudHJpZXModGhpcy5kYXRhKS5zb3J0KChbbF0sIFtyXSkgPT4ge1xuICAgICAgY29uc3QgbG8gPSBDb250ZW50U2VjdXJpdHlQb2xpY3kuRElSRUNUSVZFX09SREVSW2xdID8/IDI7XG4gICAgICBjb25zdCBybyA9IENvbnRlbnRTZWN1cml0eVBvbGljeS5ESVJFQ1RJVkVfT1JERVJbcl0gPz8gMjtcbiAgICAgIHJldHVybiBsbyAtIHJvO1xuICAgIH0pO1xuICAgIHJldHVybiBkaXJlY3RpdmVzLm1hcCgoZW50cnkpID0+IGVudHJ5LmZsYXQoKS5qb2luKCcgJykpLmpvaW4oJzsgJykgKyAnOyc7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBNYW5pZmVzdCB9IGZyb20gJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc7XG5pbXBvcnQgeyBDb250ZW50U2NyaXB0RW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyByZXNvbHZlUGVyQnJvd3Nlck9wdGlvbiB9IGZyb20gJy4vZW50cnlwb2ludHMnO1xuXG4vKipcbiAqIFJldHVybnMgYSB1bmlxdWUgYW5kIGNvbnNpc3RlbnQgc3RyaW5nIGhhc2ggYmFzZWQgb24gYSBjb250ZW50IHNjcmlwdHMgb3B0aW9ucy5cbiAqXG4gKiBJdCBpcyBhYmxlIHRvIHJlY29nbml6ZSBkZWZhdWx0IHZhbHVlcyxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hDb250ZW50U2NyaXB0T3B0aW9ucyhcbiAgb3B0aW9uczogQ29udGVudFNjcmlwdEVudHJ5cG9pbnRbJ29wdGlvbnMnXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHNpbXBsaWZpZWRPcHRpb25zID0gbWFwV3h0T3B0aW9uc1RvQ29udGVudFNjcmlwdChvcHRpb25zLCBjb25maWcpO1xuXG4gIC8vIFJlbW92ZSB1bmRlZmluZWQgZmllbGRzIGFuZCB1c2UgZGVmYXVsdHMgdG8gZ2VuZXJhdGUgaGFzaFxuICBPYmplY3Qua2V5cyhzaW1wbGlmaWVkT3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjoga2V5IG5vdCB0eXBlZCBhcyBrZXlvZiAuLi5cbiAgICBpZiAoc2ltcGxpZmllZE9wdGlvbnNba2V5XSA9PSBudWxsKSBkZWxldGUgc2ltcGxpZmllZE9wdGlvbnNba2V5XTtcbiAgfSk7XG5cbiAgY29uc3Qgd2l0aERlZmF1bHRzOiBNYW5pZmVzdC5Db250ZW50U2NyaXB0ID0ge1xuICAgIGV4Y2x1ZGVfZ2xvYnM6IFtdLFxuICAgIGV4Y2x1ZGVfbWF0Y2hlczogW10sXG4gICAgaW5jbHVkZV9nbG9iczogW10sXG4gICAgbWF0Y2hfYWJvdXRfYmxhbms6IGZhbHNlLFxuICAgIHJ1bl9hdDogJ2RvY3VtZW50X2lkbGUnLFxuICAgIGFsbF9mcmFtZXM6IGZhbHNlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBub3QgaW4gdHlwZVxuICAgIG1hdGNoX29yaWdpbl9hc19mYWxsYmFjazogZmFsc2UsXG4gICAgd29ybGQ6ICdJU09MQVRFRCcsXG4gICAgLi4uc2ltcGxpZmllZE9wdGlvbnMsXG4gIH07XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBPYmplY3QuZW50cmllcyh3aXRoRGVmYXVsdHMpXG4gICAgICAvLyBTb3J0IGFueSBhcnJheXMgc28gdGhlaXIgdmFsdWVzIGFyZSBjb25zaXN0ZW50XG4gICAgICAubWFwPFtzdHJpbmcsIHVua25vd25dPigoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIFtrZXksIHZhbHVlLnNvcnQoKV07XG4gICAgICAgIGVsc2UgcmV0dXJuIFtrZXksIHZhbHVlXTtcbiAgICAgIH0pXG4gICAgICAvLyBTb3J0IGFsbCB0aGUgZmllbGRzIGFscGhhYmV0aWNhbGx5XG4gICAgICAuc29ydCgobCwgcikgPT4gbFswXS5sb2NhbGVDb21wYXJlKHJbMF0pKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFd4dE9wdGlvbnNUb0NvbnRlbnRTY3JpcHQoXG4gIG9wdGlvbnM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50WydvcHRpb25zJ10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBPbWl0PE1hbmlmZXN0LkNvbnRlbnRTY3JpcHQsICdqcycgfCAnY3NzJz4ge1xuICByZXR1cm4ge1xuICAgIG1hdGNoZXM6IHJlc29sdmVQZXJCcm93c2VyT3B0aW9uKG9wdGlvbnMubWF0Y2hlcywgY29uZmlnLmJyb3dzZXIpLFxuICAgIGFsbF9mcmFtZXM6IHJlc29sdmVQZXJCcm93c2VyT3B0aW9uKG9wdGlvbnMuYWxsRnJhbWVzLCBjb25maWcuYnJvd3NlciksXG4gICAgbWF0Y2hfYWJvdXRfYmxhbms6IHJlc29sdmVQZXJCcm93c2VyT3B0aW9uKFxuICAgICAgb3B0aW9ucy5tYXRjaEFib3V0QmxhbmssXG4gICAgICBjb25maWcuYnJvd3NlcixcbiAgICApLFxuICAgIGV4Y2x1ZGVfZ2xvYnM6IHJlc29sdmVQZXJCcm93c2VyT3B0aW9uKFxuICAgICAgb3B0aW9ucy5leGNsdWRlR2xvYnMsXG4gICAgICBjb25maWcuYnJvd3NlcixcbiAgICApLFxuICAgIGV4Y2x1ZGVfbWF0Y2hlczogcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24oXG4gICAgICBvcHRpb25zLmV4Y2x1ZGVNYXRjaGVzLFxuICAgICAgY29uZmlnLmJyb3dzZXIsXG4gICAgKSxcbiAgICBpbmNsdWRlX2dsb2JzOiByZXNvbHZlUGVyQnJvd3Nlck9wdGlvbihcbiAgICAgIG9wdGlvbnMuaW5jbHVkZUdsb2JzLFxuICAgICAgY29uZmlnLmJyb3dzZXIsXG4gICAgKSxcbiAgICBydW5fYXQ6IHJlc29sdmVQZXJCcm93c2VyT3B0aW9uKG9wdGlvbnMucnVuQXQsIGNvbmZpZy5icm93c2VyKSxcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHVudHlwZWQgY2hyb21lIG9wdGlvbnNcbiAgICBtYXRjaF9vcmlnaW5fYXNfZmFsbGJhY2s6IHJlc29sdmVQZXJCcm93c2VyT3B0aW9uKFxuICAgICAgb3B0aW9ucy5tYXRjaE9yaWdpbkFzRmFsbGJhY2ssXG4gICAgICBjb25maWcuYnJvd3NlcixcbiAgICApLFxuICAgIHdvcmxkOiBvcHRpb25zLndvcmxkLFxuICB9O1xufVxuIiwgImltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG4vKipcbiAqIFJlYWQgdGhlIHByb2plY3QncyBwYWNrYWdlLmpzb24uXG4gKlxuICogVE9ETzogbG9vayBpbiByb290IGFuZCB1cCBkaXJlY3RvcmllcyB1bnRpbCBpdCdzIGZvdW5kXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQYWNrYWdlSnNvbihcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8UGFydGlhbDxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBmaWxlID0gcmVzb2x2ZShjb25maWcucm9vdCwgJ3BhY2thZ2UuanNvbicpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmcy5yZWFkSnNvbihmaWxlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uZmlnLmxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBGYWlsZWQgdG8gcmVhZCBwYWNrYWdlLmpzb24gYXQ6ICR7ZmlsZX0uIFJldHVybmluZyB1bmRlZmluZWQuYCxcbiAgICApO1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuIiwgImltcG9ydCB7IE1hbmlmZXN0IH0gZnJvbSAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJztcbmltcG9ydCB7IEJ1aWxkT3V0cHV0IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBidWlsZEVudHJ5cG9pbnRzIH0gZnJvbSAnLi9idWlsZC9idWlsZEVudHJ5cG9pbnRzJztcbmltcG9ydCB7IGZpbmRFbnRyeXBvaW50cyB9IGZyb20gJy4vYnVpbGQvZmluZEVudHJ5cG9pbnRzJztcbmltcG9ydCB7IGdlbmVyYXRlVHlwZXNEaXIgfSBmcm9tICcuL2J1aWxkL2dlbmVyYXRlVHlwZXNEaXInO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcsIEVudHJ5cG9pbnRHcm91cCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVNYWluZmVzdCwgd3JpdGVNYW5pZmVzdCB9IGZyb20gJy4vdXRpbHMvbWFuaWZlc3QnO1xuaW1wb3J0IHBjIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBncm91cEVudHJ5cG9pbnRzIH0gZnJvbSAnLi91dGlscy9ncm91cEVudHJ5cG9pbnRzJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uIH0gZnJvbSAnLi91dGlscy9mb3JtYXREdXJhdGlvbic7XG5pbXBvcnQgeyBwcmludEJ1aWxkU3VtbWFyeSB9IGZyb20gJy4vbG9nL3ByaW50QnVpbGRTdW1tYXJ5JztcbmltcG9ydCB7IGV4ZWNhQ29tbWFuZCB9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCBnbG9iIGZyb20gJ2Zhc3QtZ2xvYic7XG5pbXBvcnQgeyB1bm5vcm1hbGl6ZVBhdGggfSBmcm9tICcuL3V0aWxzL3BhdGhzJztcblxuLyoqXG4gKiBCdWlsZHMgdGhlIGV4dGVuc2lvbiBiYXNlZCBvbiBhbiBpbnRlcm5hbCBjb25maWcuXG4gKlxuICogVGhpcyBmdW5jdGlvbjpcbiAqIDEuIENsZWFucyB0aGUgb3V0cHV0IGRpcmVjdG9yeVxuICogMi4gRXhlY3V0ZXMgdGhlIHJlYnVpbGQgZnVuY3Rpb24gd2l0aCBhIGJsYW5rIHByZXZpb3VzIG91dHB1dCBzbyBldmVyeXRoaW5nIGlzIGJ1aWx0IChzZWVcbiAqICAgIGByZWJ1aWxkYCBmb3IgbW9yZSBkZXRhaWxzKVxuICogMy4gUHJpbnRzIHRoZSBzdW1tYXJ5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZEludGVybmFsKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxCdWlsZE91dHB1dD4ge1xuICBjb25zdCB2ZXJiID0gY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScgPyAnUHJlLXJlbmRlcmluZycgOiAnQnVpbGRpbmcnO1xuICBjb25zdCB0YXJnZXQgPSBgJHtjb25maWcuYnJvd3Nlcn0tbXYke2NvbmZpZy5tYW5pZmVzdFZlcnNpb259YDtcbiAgY29uZmlnLmxvZ2dlci5pbmZvKFxuICAgIGAke3ZlcmJ9ICR7cGMuY3lhbih0YXJnZXQpfSBmb3IgJHtwYy5jeWFuKGNvbmZpZy5tb2RlKX0gd2l0aCAke3BjLmdyZWVuKFxuICAgICAgYFZpdGUgJHt2aXRlLnZlcnNpb259YCxcbiAgICApfWAsXG4gICk7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgLy8gQ2xlYW51cFxuICBhd2FpdCBmcy5ybShjb25maWcub3V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIGF3YWl0IGZzLmVuc3VyZURpcihjb25maWcub3V0RGlyKTtcblxuICBjb25zdCBlbnRyeXBvaW50cyA9IGF3YWl0IGZpbmRFbnRyeXBvaW50cyhjb25maWcpO1xuICBjb25maWcubG9nZ2VyLmRlYnVnKCdEZXRlY3RlZCBlbnRyeXBvaW50czonLCBlbnRyeXBvaW50cyk7XG4gIGNvbnN0IGdyb3VwcyA9IGdyb3VwRW50cnlwb2ludHMoZW50cnlwb2ludHMpO1xuICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgcmVidWlsZChjb25maWcsIGdyb3VwcywgdW5kZWZpbmVkKTtcblxuICAvLyBQb3N0LWJ1aWxkXG4gIGF3YWl0IHByaW50QnVpbGRTdW1tYXJ5KFxuICAgIGNvbmZpZy5sb2dnZXIuc3VjY2VzcyxcbiAgICBgQnVpbHQgZXh0ZW5zaW9uIGluICR7Zm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSl9YCxcbiAgICBvdXRwdXQsXG4gICAgY29uZmlnLFxuICApO1xuXG4gIGlmIChjb25maWcuYW5hbHlzaXMuZW5hYmxlZCkge1xuICAgIGF3YWl0IGNvbWJpbmVBbmFseXNpc1N0YXRzKGNvbmZpZyk7XG4gICAgY29uZmlnLmxvZ2dlci5pbmZvKFxuICAgICAgYEFuYWx5c2lzIGNvbXBsZXRlOlxcbiAgJHtwYy5ncmF5KCdcdTI1MTRcdTI1MDAnKX0gJHtwYy55ZWxsb3coJ3N0YXRzLmh0bWwnKX1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIEdpdmVuIGEgY29uZmlndXJhdGlvbiwgbGlzdCBvZiBlbnRyeXBvaW50cywgYW5kIGFuIGV4aXN0aW5nLCBwYXJ0aWFsIG91dHB1dCwgYnVpbGQgdGhlXG4gKiBlbnRyeXBvaW50cyBhbmQgbWVyZ2UgdGhlIG5ldyBvdXRwdXQgd2l0aCB0aGUgZXhpc3Rpbmcgb3V0cHV0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbDpcbiAqIDEuIEdlbmVyYXRlIHRoZSAud3h0IGRpcmVjdG9yeSdzIHR5cGVzXG4gKiAyLiBCdWlsZCB0aGUgYGVudHJ5cG9pbnRHcm91cHNgIChhbmQgY29waWVzIHB1YmxpYyBmaWxlcylcbiAqIDMuIEdlbmVyYXRlIHRoZSBsYXRlc3QgbWFuaWZlc3QgZm9yIGFsbCBlbnRyeXBvaW50c1xuICogNC4gV3JpdGUgdGhlIG5ldyBtYW5pZmVzdCB0byB0aGUgZmlsZSBzeXN0ZW1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYnVpbGQoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIGVudHJ5cG9pbnRHcm91cHM6IEVudHJ5cG9pbnRHcm91cFtdLFxuICBleGlzdGluZ091dHB1dDogT21pdDxCdWlsZE91dHB1dCwgJ21hbmlmZXN0Jz4gPSB7XG4gICAgc3RlcHM6IFtdLFxuICAgIHB1YmxpY0Fzc2V0czogW10sXG4gIH0sXG4pOiBQcm9taXNlPHsgb3V0cHV0OiBCdWlsZE91dHB1dDsgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0IH0+IHtcbiAgY29uc3QgeyBkZWZhdWx0OiBvcmEgfSA9IGF3YWl0IGltcG9ydCgnb3JhJyk7XG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoYFByZXBhcmluZy4uLmApLnN0YXJ0KCk7XG5cbiAgLy8gVXBkYXRlIHR5cGVzIGRpcmVjdG9yeSB3aXRoIG5ldyBmaWxlcyBhbmQgdHlwZXNcbiAgY29uc3QgYWxsRW50cnlwb2ludHMgPSBhd2FpdCBmaW5kRW50cnlwb2ludHMoY29uZmlnKTtcbiAgYXdhaXQgZ2VuZXJhdGVUeXBlc0RpcihhbGxFbnRyeXBvaW50cywgY29uZmlnKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgY29uZmlnLmxvZ2dlci53YXJuKCdGYWlsZWQgdG8gdXBkYXRlIC53eHQgZGlyZWN0b3J5OicsIGVycik7XG4gICAgLy8gVGhyb3cgdGhlIGVycm9yIGlmIGRvaW5nIGEgcmVndWxhciBidWlsZCwgZG9uJ3QgZm9yIGRldiBtb2RlLlxuICAgIGlmIChjb25maWcuY29tbWFuZCA9PT0gJ2J1aWxkJykgdGhyb3cgZXJyO1xuICB9KTtcblxuICAvLyBCdWlsZCBhbmQgbWVyZ2UgdGhlIG91dHB1dHNcbiAgY29uc3QgbmV3T3V0cHV0ID0gYXdhaXQgYnVpbGRFbnRyeXBvaW50cyhlbnRyeXBvaW50R3JvdXBzLCBjb25maWcsIHNwaW5uZXIpO1xuICBjb25zdCBtZXJnZWRPdXRwdXQ6IE9taXQ8QnVpbGRPdXRwdXQsICdtYW5pZmVzdCc+ID0ge1xuICAgIHN0ZXBzOiBbLi4uZXhpc3RpbmdPdXRwdXQuc3RlcHMsIC4uLm5ld091dHB1dC5zdGVwc10sXG4gICAgcHVibGljQXNzZXRzOiBbLi4uZXhpc3RpbmdPdXRwdXQucHVibGljQXNzZXRzLCAuLi5uZXdPdXRwdXQucHVibGljQXNzZXRzXSxcbiAgfTtcblxuICBjb25zdCBuZXdNYW5pZmVzdCA9IGF3YWl0IGdlbmVyYXRlTWFpbmZlc3QoXG4gICAgYWxsRW50cnlwb2ludHMsXG4gICAgbWVyZ2VkT3V0cHV0LFxuICAgIGNvbmZpZyxcbiAgKTtcbiAgY29uc3QgZmluYWxPdXRwdXQ6IEJ1aWxkT3V0cHV0ID0ge1xuICAgIG1hbmlmZXN0OiBuZXdNYW5pZmVzdCxcbiAgICAuLi5uZXdPdXRwdXQsXG4gIH07XG5cbiAgLy8gV3JpdGUgbWFuaWZlc3RcbiAgYXdhaXQgd3JpdGVNYW5pZmVzdChuZXdNYW5pZmVzdCwgZmluYWxPdXRwdXQsIGNvbmZpZyk7XG5cbiAgLy8gU3RvcCB0aGUgc3Bpbm5lciBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIENMSSBvdXRwdXRcbiAgc3Bpbm5lci5jbGVhcigpLnN0b3AoKTtcblxuICByZXR1cm4ge1xuICAgIG91dHB1dDoge1xuICAgICAgbWFuaWZlc3Q6IG5ld01hbmlmZXN0LFxuICAgICAgc3RlcHM6IFsuLi5leGlzdGluZ091dHB1dC5zdGVwcywgLi4uZmluYWxPdXRwdXQuc3RlcHNdLFxuICAgICAgcHVibGljQXNzZXRzOiBbXG4gICAgICAgIC4uLmV4aXN0aW5nT3V0cHV0LnB1YmxpY0Fzc2V0cyxcbiAgICAgICAgLi4uZmluYWxPdXRwdXQucHVibGljQXNzZXRzLFxuICAgICAgXSxcbiAgICB9LFxuICAgIG1hbmlmZXN0OiBuZXdNYW5pZmVzdCxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tYmluZUFuYWx5c2lzU3RhdHMoY29uZmlnOiBJbnRlcm5hbENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB1bml4RmlsZXMgPSBhd2FpdCBnbG9iKGBzdGF0cy0qLmpzb25gLCB7XG4gICAgY3dkOiBjb25maWcub3V0RGlyLFxuICAgIGFic29sdXRlOiB0cnVlLFxuICB9KTtcbiAgY29uc3QgYWJzb2x1dGVQYXRocyA9IHVuaXhGaWxlcy5tYXAodW5ub3JtYWxpemVQYXRoKTtcblxuICBhd2FpdCBleGVjYUNvbW1hbmQoXG4gICAgYHJvbGx1cC1wbHVnaW4tdmlzdWFsaXplciAke2Fic29sdXRlUGF0aHMuam9pbignICcpfSAtLXRlbXBsYXRlICR7XG4gICAgICBjb25maWcuYW5hbHlzaXMudGVtcGxhdGVcbiAgICB9YCxcbiAgICB7IGN3ZDogY29uZmlnLnJvb3QsIHN0ZGlvOiAnaW5oZXJpdCcgfSxcbiAgKTtcbn1cbiIsICJpbXBvcnQgeyBFbnRyeXBvaW50IH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgRW50cnlwb2ludEdyb3VwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIEVudHJ5cG9pbnRzIGNhbiBiZSBidWlsZCBpbiBncm91cHMuIEhUTUwgcGFnZXMgY2FuIGFsbCBiZSBidWlsdCB0b2dldGhlciBpbiBhIHNpbmdsZSBzdGVwLCB3aGlsZVxuICogY29udGVudCBzY3JpcHRzIG11c3QgYmUgYnVpbGQgaW5kaXZpZHVhbGx5LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZW50cnlwb2ludHMgcHV0IGludG8gdGhlc2UgdHlwZXMgb2YgZ3JvdXBzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBFbnRyeXBvaW50cyhlbnRyeXBvaW50czogRW50cnlwb2ludFtdKTogRW50cnlwb2ludEdyb3VwW10ge1xuICBjb25zdCBncm91cEluZGV4TWFwOiBQYXJ0aWFsPFJlY29yZDxHcm91cCwgbnVtYmVyPj4gPSB7fTtcbiAgY29uc3QgZ3JvdXBzOiBFbnRyeXBvaW50R3JvdXBbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cnlwb2ludHMpIHtcbiAgICBjb25zdCBncm91cCA9IEVOVFJZX1RZUEVfVE9fR1JPVVBfTUFQW2VudHJ5LnR5cGVdO1xuICAgIGlmIChncm91cCA9PT0gJ25vLWdyb3VwJykge1xuICAgICAgZ3JvdXBzLnB1c2goZW50cnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZ3JvdXBJbmRleCA9IGdyb3VwSW5kZXhNYXBbZ3JvdXBdO1xuICAgICAgaWYgKGdyb3VwSW5kZXggPT0gbnVsbCkge1xuICAgICAgICBncm91cEluZGV4ID0gZ3JvdXBzLnB1c2goW10pIC0gMTtcbiAgICAgICAgZ3JvdXBJbmRleE1hcFtncm91cF0gPSBncm91cEluZGV4O1xuICAgICAgfVxuICAgICAgKGdyb3Vwc1tncm91cEluZGV4XSBhcyBFbnRyeXBvaW50W10pLnB1c2goZW50cnkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBncm91cHM7XG59XG5cbmNvbnN0IEVOVFJZX1RZUEVfVE9fR1JPVVBfTUFQOiBSZWNvcmQ8RW50cnlwb2ludFsndHlwZSddLCBHcm91cD4gPSB7XG4gIHNhbmRib3g6ICdzYW5kYm94LXBhZ2UnLFxuXG4gIHBvcHVwOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBuZXd0YWI6ICdleHRlbnNpb24tcGFnZScsXG4gIGhpc3Rvcnk6ICdleHRlbnNpb24tcGFnZScsXG4gIG9wdGlvbnM6ICdleHRlbnNpb24tcGFnZScsXG4gIGRldnRvb2xzOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBib29rbWFya3M6ICdleHRlbnNpb24tcGFnZScsXG4gIHNpZGVwYW5lbDogJ2V4dGVuc2lvbi1wYWdlJyxcbiAgJ3VubGlzdGVkLXBhZ2UnOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuXG4gIGJhY2tncm91bmQ6ICduby1ncm91cCcsXG4gICdjb250ZW50LXNjcmlwdCc6ICduby1ncm91cCcsXG4gICd1bmxpc3RlZC1zY3JpcHQnOiAnbm8tZ3JvdXAnLFxuICAndW5saXN0ZWQtc3R5bGUnOiAnbm8tZ3JvdXAnLFxuICAnY29udGVudC1zY3JpcHQtc3R5bGUnOiAnbm8tZ3JvdXAnLFxufTtcblxudHlwZSBHcm91cCA9ICdleHRlbnNpb24tcGFnZScgfCAnc2FuZGJveC1wYWdlJyB8ICduby1ncm91cCc7XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdER1cmF0aW9uKGR1cmF0aW9uOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoZHVyYXRpb24gPCAxZTMpIHJldHVybiBgJHtkdXJhdGlvbn0gbXNgO1xuICBpZiAoZHVyYXRpb24gPCAxMGUzKSByZXR1cm4gYCR7KGR1cmF0aW9uIC8gMWUzKS50b0ZpeGVkKDMpfSBzYDtcbiAgaWYgKGR1cmF0aW9uIDwgNjBlMykgcmV0dXJuIGAkeyhkdXJhdGlvbiAvIDFlMykudG9GaXhlZCgxKX0gc2A7XG4gIHJldHVybiBgJHsoZHVyYXRpb24gLyAxZTMpLnRvRml4ZWQoMCl9IHNgO1xufVxuIiwgImltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IEJ1aWxkT3V0cHV0LCBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHByaW50RmlsZUxpc3QgfSBmcm9tICcuL3ByaW50RmlsZUxpc3QnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJpbnRCdWlsZFN1bW1hcnkoXG4gIGxvZzogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkLFxuICBoZWFkZXI6IHN0cmluZyxcbiAgb3V0cHV0OiBCdWlsZE91dHB1dCxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbikge1xuICBjb25zdCBjaHVua3MgPSBbXG4gICAgLi4ub3V0cHV0LnN0ZXBzLmZsYXRNYXAoKHN0ZXApID0+IHN0ZXAuY2h1bmtzKSxcbiAgICAuLi5vdXRwdXQucHVibGljQXNzZXRzLFxuICBdLnNvcnQoKGwsIHIpID0+IHtcbiAgICBjb25zdCBsV2VpZ2h0ID0gZ2V0Q2h1bmtTb3J0V2VpZ2h0KGwuZmlsZU5hbWUpO1xuICAgIGNvbnN0IHJXZWlnaHQgPSBnZXRDaHVua1NvcnRXZWlnaHQoci5maWxlTmFtZSk7XG4gICAgY29uc3QgZGlmZiA9IGxXZWlnaHQgLSByV2VpZ2h0O1xuICAgIGlmIChkaWZmICE9PSAwKSByZXR1cm4gZGlmZjtcbiAgICByZXR1cm4gbC5maWxlTmFtZS5sb2NhbGVDb21wYXJlKHIuZmlsZU5hbWUpO1xuICB9KTtcblxuICBjb25zdCBmaWxlcyA9IGNodW5rcy5tYXAoKGNodW5rKSA9PiByZXNvbHZlKGNvbmZpZy5vdXREaXIsIGNodW5rLmZpbGVOYW1lKSk7XG4gIGF3YWl0IHByaW50RmlsZUxpc3QobG9nLCBoZWFkZXIsIGNvbmZpZy5vdXREaXIsIGZpbGVzKTtcbn1cblxuY29uc3QgREVGQVVMVF9TT1JUX1dFSUdIVCA9IDEwMDtcbmNvbnN0IENIVU5LX1NPUlRfV0VJR0hUUzogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgJ21hbmlmZXN0Lmpzb24nOiAwLFxuICAnLmh0bWwnOiAxLFxuICAnLmpzLm1hcCc6IDIsXG4gICcuanMnOiAyLFxuICAnLmNzcyc6IDMsXG59O1xuZnVuY3Rpb24gZ2V0Q2h1bmtTb3J0V2VpZ2h0KGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChcbiAgICBPYmplY3QuZW50cmllcyhDSFVOS19TT1JUX1dFSUdIVFMpLmZpbmQoKFtrZXldKSA9PlxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoa2V5KSxcbiAgICApPy5bMV0gPz8gREVGQVVMVF9TT1JUX1dFSUdIVFxuICApO1xufVxuIiwgImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcGMgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgZmlsZXNpemUgfSBmcm9tICdmaWxlc2l6ZSc7XG5pbXBvcnQgeyBwcmludFRhYmxlIH0gZnJvbSAnLi9wcmludFRhYmxlJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByaW50RmlsZUxpc3QoXG4gIGxvZzogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCxcbiAgaGVhZGVyOiBzdHJpbmcsXG4gIGJhc2VEaXI6IHN0cmluZyxcbiAgZmlsZXM6IHN0cmluZ1tdLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCB0b3RhbFNpemUgPSAwO1xuXG4gIGNvbnN0IGZpbGVSb3dzOiBzdHJpbmdbXVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgZmlsZXMubWFwKGFzeW5jIChmaWxlLCBpKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IFtcbiAgICAgICAgcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBiYXNlRGlyKSArIHBhdGguc2VwLFxuICAgICAgICBwYXRoLnJlbGF0aXZlKGJhc2VEaXIsIGZpbGUpLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHByZWZpeCA9IGkgPT09IGZpbGVzLmxlbmd0aCAtIDEgPyAnICBcdTI1MTRcdTI1MDAnIDogJyAgXHUyNTFDXHUyNTAwJztcbiAgICAgIGNvbnN0IGNvbG9yID0gZ2V0Q2h1bmtDb2xvcihmaWxlKTtcbiAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMubHN0YXQoZmlsZSk7XG4gICAgICB0b3RhbFNpemUgKz0gc3RhdHMuc2l6ZTtcbiAgICAgIGNvbnN0IHNpemUgPSBTdHJpbmcoZmlsZXNpemUoc3RhdHMuc2l6ZSkpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYCR7cGMuZ3JheShwcmVmaXgpfSAke3BjLmRpbShwYXJ0c1swXSl9JHtjb2xvcihwYXJ0c1sxXSl9YCxcbiAgICAgICAgcGMuZGltKHNpemUpLFxuICAgICAgXTtcbiAgICB9KSxcbiAgKTtcblxuICBmaWxlUm93cy5wdXNoKFtgJHtwYy5jeWFuKCdcdTAzQTMgVG90YWwgc2l6ZTonKX0gJHtTdHJpbmcoZmlsZXNpemUodG90YWxTaXplKSl9YF0pO1xuXG4gIHByaW50VGFibGUobG9nLCBoZWFkZXIsIGZpbGVSb3dzKTtcbn1cblxuY29uc3QgREVGQVVMVF9DT0xPUiA9IHBjLmJsdWU7XG5jb25zdCBDSFVOS19DT0xPUlM6IFJlY29yZDxzdHJpbmcsICh0ZXh0OiBzdHJpbmcpID0+IHN0cmluZz4gPSB7XG4gICcuanMubWFwJzogcGMuZ3JheSxcbiAgJy5odG1sJzogcGMuZ3JlZW4sXG4gICcuY3NzJzogcGMubWFnZW50YSxcbiAgJy5qcyc6IHBjLmN5YW4sXG4gICcuemlwJzogcGMueWVsbG93LFxufTtcbmZ1bmN0aW9uIGdldENodW5rQ29sb3IoZmlsZW5hbWU6IHN0cmluZykge1xuICByZXR1cm4gKFxuICAgIE9iamVjdC5lbnRyaWVzKENIVU5LX0NPTE9SUykuZmluZCgoW2tleV0pID0+IGZpbGVuYW1lLmVuZHNXaXRoKGtleSkpPy5bMV0gPz9cbiAgICBERUZBVUxUX0NPTE9SXG4gICk7XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIHByaW50VGFibGUoXG4gIGxvZzogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCxcbiAgaGVhZGVyOiBzdHJpbmcsXG4gIHJvd3M6IHN0cmluZ1tdW10sXG4gIGdhcCA9IDIsXG4pOiB2b2lkIHtcbiAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgY29uc3QgY29sdW1uV2lkdGhzID0gcm93cy5yZWR1Y2UoXG4gICAgKHdpZHRocywgcm93KSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWF4KHdpZHRocy5sZW5ndGgsIHJvdy5sZW5ndGgpOyBpKyspIHtcbiAgICAgICAgd2lkdGhzW2ldID0gTWF0aC5tYXgocm93W2ldPy5sZW5ndGggPz8gMCwgd2lkdGhzW2ldID8/IDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdpZHRocztcbiAgICB9LFxuICAgIHJvd3NbMF0ubWFwKChjb2x1bW4pID0+IGNvbHVtbi5sZW5ndGgpLFxuICApO1xuXG4gIGxldCBzdHIgPSAnJztcbiAgcm93cy5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICByb3cuZm9yRWFjaCgoY29sLCBqKSA9PiB7XG4gICAgICBzdHIgKz0gY29sLnBhZEVuZChjb2x1bW5XaWR0aHNbal0sICcgJyk7XG4gICAgICBpZiAoaiAhPT0gcm93Lmxlbmd0aCAtIDEpIHN0ciArPSAnJy5wYWRFbmQoZ2FwLCAnICcpO1xuICAgIH0pO1xuICAgIGlmIChpICE9PSByb3dzLmxlbmd0aCAtIDEpIHN0ciArPSAnXFxuJztcbiAgfSk7XG5cbiAgbG9nKGAke2hlYWRlcn1cXG4ke3N0cn1gKTtcbn1cbiIsICJpbXBvcnQge0J1ZmZlcn0gZnJvbSAnbm9kZTpidWZmZXInO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBjaGlsZFByb2Nlc3MgZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgY3Jvc3NTcGF3biBmcm9tICdjcm9zcy1zcGF3bic7XG5pbXBvcnQgc3RyaXBGaW5hbE5ld2xpbmUgZnJvbSAnc3RyaXAtZmluYWwtbmV3bGluZSc7XG5pbXBvcnQge25wbVJ1blBhdGhFbnZ9IGZyb20gJ25wbS1ydW4tcGF0aCc7XG5pbXBvcnQgb25ldGltZSBmcm9tICdvbmV0aW1lJztcbmltcG9ydCB7bWFrZUVycm9yfSBmcm9tICcuL2xpYi9lcnJvci5qcyc7XG5pbXBvcnQge25vcm1hbGl6ZVN0ZGlvLCBub3JtYWxpemVTdGRpb05vZGV9IGZyb20gJy4vbGliL3N0ZGlvLmpzJztcbmltcG9ydCB7c3Bhd25lZEtpbGwsIHNwYXduZWRDYW5jZWwsIHNldHVwVGltZW91dCwgdmFsaWRhdGVUaW1lb3V0LCBzZXRFeGl0SGFuZGxlcn0gZnJvbSAnLi9saWIva2lsbC5qcyc7XG5pbXBvcnQge2FkZFBpcGVNZXRob2RzfSBmcm9tICcuL2xpYi9waXBlLmpzJztcbmltcG9ydCB7aGFuZGxlSW5wdXQsIGdldFNwYXduZWRSZXN1bHQsIG1ha2VBbGxTdHJlYW0sIGhhbmRsZUlucHV0U3luY30gZnJvbSAnLi9saWIvc3RyZWFtLmpzJztcbmltcG9ydCB7bWVyZ2VQcm9taXNlLCBnZXRTcGF3bmVkUHJvbWlzZX0gZnJvbSAnLi9saWIvcHJvbWlzZS5qcyc7XG5pbXBvcnQge2pvaW5Db21tYW5kLCBwYXJzZUNvbW1hbmQsIHBhcnNlVGVtcGxhdGVzLCBnZXRFc2NhcGVkQ29tbWFuZH0gZnJvbSAnLi9saWIvY29tbWFuZC5qcyc7XG5pbXBvcnQge2xvZ0NvbW1hbmQsIHZlcmJvc2VEZWZhdWx0fSBmcm9tICcuL2xpYi92ZXJib3NlLmpzJztcblxuY29uc3QgREVGQVVMVF9NQVhfQlVGRkVSID0gMTAwMCAqIDEwMDAgKiAxMDA7XG5cbmNvbnN0IGdldEVudiA9ICh7ZW52OiBlbnZPcHRpb24sIGV4dGVuZEVudiwgcHJlZmVyTG9jYWwsIGxvY2FsRGlyLCBleGVjUGF0aH0pID0+IHtcblx0Y29uc3QgZW52ID0gZXh0ZW5kRW52ID8gey4uLnByb2Nlc3MuZW52LCAuLi5lbnZPcHRpb259IDogZW52T3B0aW9uO1xuXG5cdGlmIChwcmVmZXJMb2NhbCkge1xuXHRcdHJldHVybiBucG1SdW5QYXRoRW52KHtlbnYsIGN3ZDogbG9jYWxEaXIsIGV4ZWNQYXRofSk7XG5cdH1cblxuXHRyZXR1cm4gZW52O1xufTtcblxuY29uc3QgaGFuZGxlQXJndW1lbnRzID0gKGZpbGUsIGFyZ3MsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRjb25zdCBwYXJzZWQgPSBjcm9zc1NwYXduLl9wYXJzZShmaWxlLCBhcmdzLCBvcHRpb25zKTtcblx0ZmlsZSA9IHBhcnNlZC5jb21tYW5kO1xuXHRhcmdzID0gcGFyc2VkLmFyZ3M7XG5cdG9wdGlvbnMgPSBwYXJzZWQub3B0aW9ucztcblxuXHRvcHRpb25zID0ge1xuXHRcdG1heEJ1ZmZlcjogREVGQVVMVF9NQVhfQlVGRkVSLFxuXHRcdGJ1ZmZlcjogdHJ1ZSxcblx0XHRzdHJpcEZpbmFsTmV3bGluZTogdHJ1ZSxcblx0XHRleHRlbmRFbnY6IHRydWUsXG5cdFx0cHJlZmVyTG9jYWw6IGZhbHNlLFxuXHRcdGxvY2FsRGlyOiBvcHRpb25zLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpLFxuXHRcdGV4ZWNQYXRoOiBwcm9jZXNzLmV4ZWNQYXRoLFxuXHRcdGVuY29kaW5nOiAndXRmOCcsXG5cdFx0cmVqZWN0OiB0cnVlLFxuXHRcdGNsZWFudXA6IHRydWUsXG5cdFx0YWxsOiBmYWxzZSxcblx0XHR3aW5kb3dzSGlkZTogdHJ1ZSxcblx0XHR2ZXJib3NlOiB2ZXJib3NlRGVmYXVsdCxcblx0XHQuLi5vcHRpb25zLFxuXHR9O1xuXG5cdG9wdGlvbnMuZW52ID0gZ2V0RW52KG9wdGlvbnMpO1xuXG5cdG9wdGlvbnMuc3RkaW8gPSBub3JtYWxpemVTdGRpbyhvcHRpb25zKTtcblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJiBwYXRoLmJhc2VuYW1lKGZpbGUsICcuZXhlJykgPT09ICdjbWQnKSB7XG5cdFx0Ly8gIzExNlxuXHRcdGFyZ3MudW5zaGlmdCgnL3EnKTtcblx0fVxuXG5cdHJldHVybiB7ZmlsZSwgYXJncywgb3B0aW9ucywgcGFyc2VkfTtcbn07XG5cbmNvbnN0IGhhbmRsZU91dHB1dCA9IChvcHRpb25zLCB2YWx1ZSwgZXJyb3IpID0+IHtcblx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcblx0XHQvLyBXaGVuIGBleGVjYVN5bmMoKWAgZXJyb3JzLCB3ZSBub3JtYWxpemUgaXQgdG8gJycgdG8gbWltaWMgYGV4ZWNhKClgXG5cdFx0cmV0dXJuIGVycm9yID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAnJztcblx0fVxuXG5cdGlmIChvcHRpb25zLnN0cmlwRmluYWxOZXdsaW5lKSB7XG5cdFx0cmV0dXJuIHN0cmlwRmluYWxOZXdsaW5lKHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjYShmaWxlLCBhcmdzLCBvcHRpb25zKSB7XG5cdGNvbnN0IHBhcnNlZCA9IGhhbmRsZUFyZ3VtZW50cyhmaWxlLCBhcmdzLCBvcHRpb25zKTtcblx0Y29uc3QgY29tbWFuZCA9IGpvaW5Db21tYW5kKGZpbGUsIGFyZ3MpO1xuXHRjb25zdCBlc2NhcGVkQ29tbWFuZCA9IGdldEVzY2FwZWRDb21tYW5kKGZpbGUsIGFyZ3MpO1xuXHRsb2dDb21tYW5kKGVzY2FwZWRDb21tYW5kLCBwYXJzZWQub3B0aW9ucyk7XG5cblx0dmFsaWRhdGVUaW1lb3V0KHBhcnNlZC5vcHRpb25zKTtcblxuXHRsZXQgc3Bhd25lZDtcblx0dHJ5IHtcblx0XHRzcGF3bmVkID0gY2hpbGRQcm9jZXNzLnNwYXduKHBhcnNlZC5maWxlLCBwYXJzZWQuYXJncywgcGFyc2VkLm9wdGlvbnMpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIEVuc3VyZSB0aGUgcmV0dXJuZWQgZXJyb3IgaXMgYWx3YXlzIGJvdGggYSBwcm9taXNlIGFuZCBhIGNoaWxkIHByb2Nlc3Ncblx0XHRjb25zdCBkdW1teVNwYXduZWQgPSBuZXcgY2hpbGRQcm9jZXNzLkNoaWxkUHJvY2VzcygpO1xuXHRcdGNvbnN0IGVycm9yUHJvbWlzZSA9IFByb21pc2UucmVqZWN0KG1ha2VFcnJvcih7XG5cdFx0XHRlcnJvcixcblx0XHRcdHN0ZG91dDogJycsXG5cdFx0XHRzdGRlcnI6ICcnLFxuXHRcdFx0YWxsOiAnJyxcblx0XHRcdGNvbW1hbmQsXG5cdFx0XHRlc2NhcGVkQ29tbWFuZCxcblx0XHRcdHBhcnNlZCxcblx0XHRcdHRpbWVkT3V0OiBmYWxzZSxcblx0XHRcdGlzQ2FuY2VsZWQ6IGZhbHNlLFxuXHRcdFx0a2lsbGVkOiBmYWxzZSxcblx0XHR9KSk7XG5cdFx0bWVyZ2VQcm9taXNlKGR1bW15U3Bhd25lZCwgZXJyb3JQcm9taXNlKTtcblx0XHRyZXR1cm4gZHVtbXlTcGF3bmVkO1xuXHR9XG5cblx0Y29uc3Qgc3Bhd25lZFByb21pc2UgPSBnZXRTcGF3bmVkUHJvbWlzZShzcGF3bmVkKTtcblx0Y29uc3QgdGltZWRQcm9taXNlID0gc2V0dXBUaW1lb3V0KHNwYXduZWQsIHBhcnNlZC5vcHRpb25zLCBzcGF3bmVkUHJvbWlzZSk7XG5cdGNvbnN0IHByb2Nlc3NEb25lID0gc2V0RXhpdEhhbmRsZXIoc3Bhd25lZCwgcGFyc2VkLm9wdGlvbnMsIHRpbWVkUHJvbWlzZSk7XG5cblx0Y29uc3QgY29udGV4dCA9IHtpc0NhbmNlbGVkOiBmYWxzZX07XG5cblx0c3Bhd25lZC5raWxsID0gc3Bhd25lZEtpbGwuYmluZChudWxsLCBzcGF3bmVkLmtpbGwuYmluZChzcGF3bmVkKSk7XG5cdHNwYXduZWQuY2FuY2VsID0gc3Bhd25lZENhbmNlbC5iaW5kKG51bGwsIHNwYXduZWQsIGNvbnRleHQpO1xuXG5cdGNvbnN0IGhhbmRsZVByb21pc2UgPSBhc3luYyAoKSA9PiB7XG5cdFx0Y29uc3QgW3tlcnJvciwgZXhpdENvZGUsIHNpZ25hbCwgdGltZWRPdXR9LCBzdGRvdXRSZXN1bHQsIHN0ZGVyclJlc3VsdCwgYWxsUmVzdWx0XSA9IGF3YWl0IGdldFNwYXduZWRSZXN1bHQoc3Bhd25lZCwgcGFyc2VkLm9wdGlvbnMsIHByb2Nlc3NEb25lKTtcblx0XHRjb25zdCBzdGRvdXQgPSBoYW5kbGVPdXRwdXQocGFyc2VkLm9wdGlvbnMsIHN0ZG91dFJlc3VsdCk7XG5cdFx0Y29uc3Qgc3RkZXJyID0gaGFuZGxlT3V0cHV0KHBhcnNlZC5vcHRpb25zLCBzdGRlcnJSZXN1bHQpO1xuXHRcdGNvbnN0IGFsbCA9IGhhbmRsZU91dHB1dChwYXJzZWQub3B0aW9ucywgYWxsUmVzdWx0KTtcblxuXHRcdGlmIChlcnJvciB8fCBleGl0Q29kZSAhPT0gMCB8fCBzaWduYWwgIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IHJldHVybmVkRXJyb3IgPSBtYWtlRXJyb3Ioe1xuXHRcdFx0XHRlcnJvcixcblx0XHRcdFx0ZXhpdENvZGUsXG5cdFx0XHRcdHNpZ25hbCxcblx0XHRcdFx0c3Rkb3V0LFxuXHRcdFx0XHRzdGRlcnIsXG5cdFx0XHRcdGFsbCxcblx0XHRcdFx0Y29tbWFuZCxcblx0XHRcdFx0ZXNjYXBlZENvbW1hbmQsXG5cdFx0XHRcdHBhcnNlZCxcblx0XHRcdFx0dGltZWRPdXQsXG5cdFx0XHRcdGlzQ2FuY2VsZWQ6IGNvbnRleHQuaXNDYW5jZWxlZCB8fCAocGFyc2VkLm9wdGlvbnMuc2lnbmFsID8gcGFyc2VkLm9wdGlvbnMuc2lnbmFsLmFib3J0ZWQgOiBmYWxzZSksXG5cdFx0XHRcdGtpbGxlZDogc3Bhd25lZC5raWxsZWQsXG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCFwYXJzZWQub3B0aW9ucy5yZWplY3QpIHtcblx0XHRcdFx0cmV0dXJuIHJldHVybmVkRXJyb3I7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IHJldHVybmVkRXJyb3I7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbW1hbmQsXG5cdFx0XHRlc2NhcGVkQ29tbWFuZCxcblx0XHRcdGV4aXRDb2RlOiAwLFxuXHRcdFx0c3Rkb3V0LFxuXHRcdFx0c3RkZXJyLFxuXHRcdFx0YWxsLFxuXHRcdFx0ZmFpbGVkOiBmYWxzZSxcblx0XHRcdHRpbWVkT3V0OiBmYWxzZSxcblx0XHRcdGlzQ2FuY2VsZWQ6IGZhbHNlLFxuXHRcdFx0a2lsbGVkOiBmYWxzZSxcblx0XHR9O1xuXHR9O1xuXG5cdGNvbnN0IGhhbmRsZVByb21pc2VPbmNlID0gb25ldGltZShoYW5kbGVQcm9taXNlKTtcblxuXHRoYW5kbGVJbnB1dChzcGF3bmVkLCBwYXJzZWQub3B0aW9ucyk7XG5cblx0c3Bhd25lZC5hbGwgPSBtYWtlQWxsU3RyZWFtKHNwYXduZWQsIHBhcnNlZC5vcHRpb25zKTtcblxuXHRhZGRQaXBlTWV0aG9kcyhzcGF3bmVkKTtcblx0bWVyZ2VQcm9taXNlKHNwYXduZWQsIGhhbmRsZVByb21pc2VPbmNlKTtcblx0cmV0dXJuIHNwYXduZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjYVN5bmMoZmlsZSwgYXJncywgb3B0aW9ucykge1xuXHRjb25zdCBwYXJzZWQgPSBoYW5kbGVBcmd1bWVudHMoZmlsZSwgYXJncywgb3B0aW9ucyk7XG5cdGNvbnN0IGNvbW1hbmQgPSBqb2luQ29tbWFuZChmaWxlLCBhcmdzKTtcblx0Y29uc3QgZXNjYXBlZENvbW1hbmQgPSBnZXRFc2NhcGVkQ29tbWFuZChmaWxlLCBhcmdzKTtcblx0bG9nQ29tbWFuZChlc2NhcGVkQ29tbWFuZCwgcGFyc2VkLm9wdGlvbnMpO1xuXG5cdGNvbnN0IGlucHV0ID0gaGFuZGxlSW5wdXRTeW5jKHBhcnNlZC5vcHRpb25zKTtcblxuXHRsZXQgcmVzdWx0O1xuXHR0cnkge1xuXHRcdHJlc3VsdCA9IGNoaWxkUHJvY2Vzcy5zcGF3blN5bmMocGFyc2VkLmZpbGUsIHBhcnNlZC5hcmdzLCB7Li4ucGFyc2VkLm9wdGlvbnMsIGlucHV0fSk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0dGhyb3cgbWFrZUVycm9yKHtcblx0XHRcdGVycm9yLFxuXHRcdFx0c3Rkb3V0OiAnJyxcblx0XHRcdHN0ZGVycjogJycsXG5cdFx0XHRhbGw6ICcnLFxuXHRcdFx0Y29tbWFuZCxcblx0XHRcdGVzY2FwZWRDb21tYW5kLFxuXHRcdFx0cGFyc2VkLFxuXHRcdFx0dGltZWRPdXQ6IGZhbHNlLFxuXHRcdFx0aXNDYW5jZWxlZDogZmFsc2UsXG5cdFx0XHRraWxsZWQ6IGZhbHNlLFxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3Qgc3Rkb3V0ID0gaGFuZGxlT3V0cHV0KHBhcnNlZC5vcHRpb25zLCByZXN1bHQuc3Rkb3V0LCByZXN1bHQuZXJyb3IpO1xuXHRjb25zdCBzdGRlcnIgPSBoYW5kbGVPdXRwdXQocGFyc2VkLm9wdGlvbnMsIHJlc3VsdC5zdGRlcnIsIHJlc3VsdC5lcnJvcik7XG5cblx0aWYgKHJlc3VsdC5lcnJvciB8fCByZXN1bHQuc3RhdHVzICE9PSAwIHx8IHJlc3VsdC5zaWduYWwgIT09IG51bGwpIHtcblx0XHRjb25zdCBlcnJvciA9IG1ha2VFcnJvcih7XG5cdFx0XHRzdGRvdXQsXG5cdFx0XHRzdGRlcnIsXG5cdFx0XHRlcnJvcjogcmVzdWx0LmVycm9yLFxuXHRcdFx0c2lnbmFsOiByZXN1bHQuc2lnbmFsLFxuXHRcdFx0ZXhpdENvZGU6IHJlc3VsdC5zdGF0dXMsXG5cdFx0XHRjb21tYW5kLFxuXHRcdFx0ZXNjYXBlZENvbW1hbmQsXG5cdFx0XHRwYXJzZWQsXG5cdFx0XHR0aW1lZE91dDogcmVzdWx0LmVycm9yICYmIHJlc3VsdC5lcnJvci5jb2RlID09PSAnRVRJTUVET1VUJyxcblx0XHRcdGlzQ2FuY2VsZWQ6IGZhbHNlLFxuXHRcdFx0a2lsbGVkOiByZXN1bHQuc2lnbmFsICE9PSBudWxsLFxuXHRcdH0pO1xuXG5cdFx0aWYgKCFwYXJzZWQub3B0aW9ucy5yZWplY3QpIHtcblx0XHRcdHJldHVybiBlcnJvcjtcblx0XHR9XG5cblx0XHR0aHJvdyBlcnJvcjtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Y29tbWFuZCxcblx0XHRlc2NhcGVkQ29tbWFuZCxcblx0XHRleGl0Q29kZTogMCxcblx0XHRzdGRvdXQsXG5cdFx0c3RkZXJyLFxuXHRcdGZhaWxlZDogZmFsc2UsXG5cdFx0dGltZWRPdXQ6IGZhbHNlLFxuXHRcdGlzQ2FuY2VsZWQ6IGZhbHNlLFxuXHRcdGtpbGxlZDogZmFsc2UsXG5cdH07XG59XG5cbmNvbnN0IG5vcm1hbGl6ZVNjcmlwdFN0ZGluID0gKHtpbnB1dCwgaW5wdXRGaWxlLCBzdGRpb30pID0+IGlucHV0ID09PSB1bmRlZmluZWQgJiYgaW5wdXRGaWxlID09PSB1bmRlZmluZWQgJiYgc3RkaW8gPT09IHVuZGVmaW5lZFxuXHQ/IHtzdGRpbjogJ2luaGVyaXQnfVxuXHQ6IHt9O1xuXG5jb25zdCBub3JtYWxpemVTY3JpcHRPcHRpb25zID0gKG9wdGlvbnMgPSB7fSkgPT4gKHtcblx0cHJlZmVyTG9jYWw6IHRydWUsXG5cdC4uLm5vcm1hbGl6ZVNjcmlwdFN0ZGluKG9wdGlvbnMpLFxuXHQuLi5vcHRpb25zLFxufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZSQob3B0aW9ucykge1xuXHRmdW5jdGlvbiAkKHRlbXBsYXRlc09yT3B0aW9ucywgLi4uZXhwcmVzc2lvbnMpIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkodGVtcGxhdGVzT3JPcHRpb25zKSkge1xuXHRcdFx0cmV0dXJuIGNyZWF0ZSQoey4uLm9wdGlvbnMsIC4uLnRlbXBsYXRlc09yT3B0aW9uc30pO1xuXHRcdH1cblxuXHRcdGNvbnN0IFtmaWxlLCAuLi5hcmdzXSA9IHBhcnNlVGVtcGxhdGVzKHRlbXBsYXRlc09yT3B0aW9ucywgZXhwcmVzc2lvbnMpO1xuXHRcdHJldHVybiBleGVjYShmaWxlLCBhcmdzLCBub3JtYWxpemVTY3JpcHRPcHRpb25zKG9wdGlvbnMpKTtcblx0fVxuXG5cdCQuc3luYyA9ICh0ZW1wbGF0ZXMsIC4uLmV4cHJlc3Npb25zKSA9PiB7XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHRlbXBsYXRlcykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgJChvcHRpb25zKS5zeW5jYGNvbW1hbmRgIGluc3RlYWQgb2YgJC5zeW5jKG9wdGlvbnMpYGNvbW1hbmRgLicpO1xuXHRcdH1cblxuXHRcdGNvbnN0IFtmaWxlLCAuLi5hcmdzXSA9IHBhcnNlVGVtcGxhdGVzKHRlbXBsYXRlcywgZXhwcmVzc2lvbnMpO1xuXHRcdHJldHVybiBleGVjYVN5bmMoZmlsZSwgYXJncywgbm9ybWFsaXplU2NyaXB0T3B0aW9ucyhvcHRpb25zKSk7XG5cdH07XG5cblx0cmV0dXJuICQ7XG59XG5cbmV4cG9ydCBjb25zdCAkID0gY3JlYXRlJCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gZXhlY2FDb21tYW5kKGNvbW1hbmQsIG9wdGlvbnMpIHtcblx0Y29uc3QgW2ZpbGUsIC4uLmFyZ3NdID0gcGFyc2VDb21tYW5kKGNvbW1hbmQpO1xuXHRyZXR1cm4gZXhlY2EoZmlsZSwgYXJncywgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjYUNvbW1hbmRTeW5jKGNvbW1hbmQsIG9wdGlvbnMpIHtcblx0Y29uc3QgW2ZpbGUsIC4uLmFyZ3NdID0gcGFyc2VDb21tYW5kKGNvbW1hbmQpO1xuXHRyZXR1cm4gZXhlY2FTeW5jKGZpbGUsIGFyZ3MsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlY2FOb2RlKHNjcmlwdFBhdGgsIGFyZ3MsIG9wdGlvbnMgPSB7fSkge1xuXHRpZiAoYXJncyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcpIHtcblx0XHRvcHRpb25zID0gYXJncztcblx0XHRhcmdzID0gW107XG5cdH1cblxuXHRjb25zdCBzdGRpbyA9IG5vcm1hbGl6ZVN0ZGlvTm9kZShvcHRpb25zKTtcblx0Y29uc3QgZGVmYXVsdEV4ZWNBcmd2ID0gcHJvY2Vzcy5leGVjQXJndi5maWx0ZXIoYXJnID0+ICFhcmcuc3RhcnRzV2l0aCgnLS1pbnNwZWN0JykpO1xuXG5cdGNvbnN0IHtcblx0XHRub2RlUGF0aCA9IHByb2Nlc3MuZXhlY1BhdGgsXG5cdFx0bm9kZU9wdGlvbnMgPSBkZWZhdWx0RXhlY0FyZ3YsXG5cdH0gPSBvcHRpb25zO1xuXG5cdHJldHVybiBleGVjYShcblx0XHRub2RlUGF0aCxcblx0XHRbXG5cdFx0XHQuLi5ub2RlT3B0aW9ucyxcblx0XHRcdHNjcmlwdFBhdGgsXG5cdFx0XHQuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSksXG5cdFx0XSxcblx0XHR7XG5cdFx0XHQuLi5vcHRpb25zLFxuXHRcdFx0c3RkaW46IHVuZGVmaW5lZCxcblx0XHRcdHN0ZG91dDogdW5kZWZpbmVkLFxuXHRcdFx0c3RkZXJyOiB1bmRlZmluZWQsXG5cdFx0XHRzdGRpbyxcblx0XHRcdHNoZWxsOiBmYWxzZSxcblx0XHR9LFxuXHQpO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmlwRmluYWxOZXdsaW5lKGlucHV0KSB7XG5cdGNvbnN0IExGID0gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyA/ICdcXG4nIDogJ1xcbicuY2hhckNvZGVBdCgpO1xuXHRjb25zdCBDUiA9IHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgPyAnXFxyJyA6ICdcXHInLmNoYXJDb2RlQXQoKTtcblxuXHRpZiAoaW5wdXRbaW5wdXQubGVuZ3RoIC0gMV0gPT09IExGKSB7XG5cdFx0aW5wdXQgPSBpbnB1dC5zbGljZSgwLCAtMSk7XG5cdH1cblxuXHRpZiAoaW5wdXRbaW5wdXQubGVuZ3RoIC0gMV0gPT09IENSKSB7XG5cdFx0aW5wdXQgPSBpbnB1dC5zbGljZSgwLCAtMSk7XG5cdH1cblxuXHRyZXR1cm4gaW5wdXQ7XG59XG4iLCAiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCBwYXRoS2V5IGZyb20gJ3BhdGgta2V5JztcblxuZXhwb3J0IGZ1bmN0aW9uIG5wbVJ1blBhdGgob3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHtcblx0XHRjd2QgPSBwcm9jZXNzLmN3ZCgpLFxuXHRcdHBhdGg6IHBhdGhfID0gcHJvY2Vzcy5lbnZbcGF0aEtleSgpXSxcblx0XHRleGVjUGF0aCA9IHByb2Nlc3MuZXhlY1BhdGgsXG5cdH0gPSBvcHRpb25zO1xuXG5cdGxldCBwcmV2aW91cztcblx0Y29uc3QgY3dkU3RyaW5nID0gY3dkIGluc3RhbmNlb2YgVVJMID8gdXJsLmZpbGVVUkxUb1BhdGgoY3dkKSA6IGN3ZDtcblx0bGV0IGN3ZFBhdGggPSBwYXRoLnJlc29sdmUoY3dkU3RyaW5nKTtcblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0d2hpbGUgKHByZXZpb3VzICE9PSBjd2RQYXRoKSB7XG5cdFx0cmVzdWx0LnB1c2gocGF0aC5qb2luKGN3ZFBhdGgsICdub2RlX21vZHVsZXMvLmJpbicpKTtcblx0XHRwcmV2aW91cyA9IGN3ZFBhdGg7XG5cdFx0Y3dkUGF0aCA9IHBhdGgucmVzb2x2ZShjd2RQYXRoLCAnLi4nKTtcblx0fVxuXG5cdC8vIEVuc3VyZSB0aGUgcnVubmluZyBgbm9kZWAgYmluYXJ5IGlzIHVzZWQuXG5cdHJlc3VsdC5wdXNoKHBhdGgucmVzb2x2ZShjd2RTdHJpbmcsIGV4ZWNQYXRoLCAnLi4nKSk7XG5cblx0cmV0dXJuIFsuLi5yZXN1bHQsIHBhdGhfXS5qb2luKHBhdGguZGVsaW1pdGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5wbVJ1blBhdGhFbnYoe2VudiA9IHByb2Nlc3MuZW52LCAuLi5vcHRpb25zfSA9IHt9KSB7XG5cdGVudiA9IHsuLi5lbnZ9O1xuXG5cdGNvbnN0IHBhdGggPSBwYXRoS2V5KHtlbnZ9KTtcblx0b3B0aW9ucy5wYXRoID0gZW52W3BhdGhdO1xuXHRlbnZbcGF0aF0gPSBucG1SdW5QYXRoKG9wdGlvbnMpO1xuXG5cdHJldHVybiBlbnY7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGF0aEtleShvcHRpb25zID0ge30pIHtcblx0Y29uc3Qge1xuXHRcdGVudiA9IHByb2Nlc3MuZW52LFxuXHRcdHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybVxuXHR9ID0gb3B0aW9ucztcblxuXHRpZiAocGxhdGZvcm0gIT09ICd3aW4zMicpIHtcblx0XHRyZXR1cm4gJ1BBVEgnO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdC5rZXlzKGVudikucmV2ZXJzZSgpLmZpbmQoa2V5ID0+IGtleS50b1VwcGVyQ2FzZSgpID09PSAnUEFUSCcpIHx8ICdQYXRoJztcbn1cbiIsICJjb25zdCBjb3B5UHJvcGVydHkgPSAodG8sIGZyb20sIHByb3BlcnR5LCBpZ25vcmVOb25Db25maWd1cmFibGUpID0+IHtcblx0Ly8gYEZ1bmN0aW9uI2xlbmd0aGAgc2hvdWxkIHJlZmxlY3QgdGhlIHBhcmFtZXRlcnMgb2YgYHRvYCBub3QgYGZyb21gIHNpbmNlIHdlIGtlZXAgaXRzIGJvZHkuXG5cdC8vIGBGdW5jdGlvbiNwcm90b3R5cGVgIGlzIG5vbi13cml0YWJsZSBhbmQgbm9uLWNvbmZpZ3VyYWJsZSBzbyBjYW4gbmV2ZXIgYmUgbW9kaWZpZWQuXG5cdGlmIChwcm9wZXJ0eSA9PT0gJ2xlbmd0aCcgfHwgcHJvcGVydHkgPT09ICdwcm90b3R5cGUnKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gYEZ1bmN0aW9uI2FyZ3VtZW50c2AgYW5kIGBGdW5jdGlvbiNjYWxsZXJgIHNob3VsZCBub3QgYmUgY29waWVkLiBUaGV5IHdlcmUgcmVwb3J0ZWQgdG8gYmUgcHJlc2VudCBpbiBgUmVmbGVjdC5vd25LZXlzYCBmb3Igc29tZSBkZXZpY2VzIGluIFJlYWN0IE5hdGl2ZSAoIzQxKSwgc28gd2UgZXhwbGljaXRseSBpZ25vcmUgdGhlbSBoZXJlLlxuXHRpZiAocHJvcGVydHkgPT09ICdhcmd1bWVudHMnIHx8IHByb3BlcnR5ID09PSAnY2FsbGVyJykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHRvRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG8sIHByb3BlcnR5KTtcblx0Y29uc3QgZnJvbURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZyb20sIHByb3BlcnR5KTtcblxuXHRpZiAoIWNhbkNvcHlQcm9wZXJ0eSh0b0Rlc2NyaXB0b3IsIGZyb21EZXNjcmlwdG9yKSAmJiBpZ25vcmVOb25Db25maWd1cmFibGUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkodG8sIHByb3BlcnR5LCBmcm9tRGVzY3JpcHRvcik7XG59O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5KClgIHRocm93cyBpZiB0aGUgcHJvcGVydHkgZXhpc3RzLCBpcyBub3QgY29uZmlndXJhYmxlIGFuZCBlaXRoZXI6XG4vLyAtIG9uZSBpdHMgZGVzY3JpcHRvcnMgaXMgY2hhbmdlZFxuLy8gLSBpdCBpcyBub24td3JpdGFibGUgYW5kIGl0cyB2YWx1ZSBpcyBjaGFuZ2VkXG5jb25zdCBjYW5Db3B5UHJvcGVydHkgPSBmdW5jdGlvbiAodG9EZXNjcmlwdG9yLCBmcm9tRGVzY3JpcHRvcikge1xuXHRyZXR1cm4gdG9EZXNjcmlwdG9yID09PSB1bmRlZmluZWQgfHwgdG9EZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSB8fCAoXG5cdFx0dG9EZXNjcmlwdG9yLndyaXRhYmxlID09PSBmcm9tRGVzY3JpcHRvci53cml0YWJsZSAmJlxuXHRcdHRvRGVzY3JpcHRvci5lbnVtZXJhYmxlID09PSBmcm9tRGVzY3JpcHRvci5lbnVtZXJhYmxlICYmXG5cdFx0dG9EZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9PT0gZnJvbURlc2NyaXB0b3IuY29uZmlndXJhYmxlICYmXG5cdFx0KHRvRGVzY3JpcHRvci53cml0YWJsZSB8fCB0b0Rlc2NyaXB0b3IudmFsdWUgPT09IGZyb21EZXNjcmlwdG9yLnZhbHVlKVxuXHQpO1xufTtcblxuY29uc3QgY2hhbmdlUHJvdG90eXBlID0gKHRvLCBmcm9tKSA9PiB7XG5cdGNvbnN0IGZyb21Qcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZnJvbSk7XG5cdGlmIChmcm9tUHJvdG90eXBlID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodG8pKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKHRvLCBmcm9tUHJvdG90eXBlKTtcbn07XG5cbmNvbnN0IHdyYXBwZWRUb1N0cmluZyA9ICh3aXRoTmFtZSwgZnJvbUJvZHkpID0+IGAvKiBXcmFwcGVkICR7d2l0aE5hbWV9Ki9cXG4ke2Zyb21Cb2R5fWA7XG5cbmNvbnN0IHRvU3RyaW5nRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRnVuY3Rpb24ucHJvdG90eXBlLCAndG9TdHJpbmcnKTtcbmNvbnN0IHRvU3RyaW5nTmFtZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLCAnbmFtZScpO1xuXG4vLyBXZSBjYWxsIGBmcm9tLnRvU3RyaW5nKClgIGVhcmx5IChub3QgbGF6aWx5KSB0byBlbnN1cmUgYGZyb21gIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZC5cbi8vIFdlIHVzZSBgYmluZCgpYCBpbnN0ZWFkIG9mIGEgY2xvc3VyZSBmb3IgdGhlIHNhbWUgcmVhc29uLlxuLy8gQ2FsbGluZyBgZnJvbS50b1N0cmluZygpYCBlYXJseSBhbHNvIGFsbG93cyBjYWNoaW5nIGl0IGluIGNhc2UgYHRvLnRvU3RyaW5nKClgIGlzIGNhbGxlZCBzZXZlcmFsIHRpbWVzLlxuY29uc3QgY2hhbmdlVG9TdHJpbmcgPSAodG8sIGZyb20sIG5hbWUpID0+IHtcblx0Y29uc3Qgd2l0aE5hbWUgPSBuYW1lID09PSAnJyA/ICcnIDogYHdpdGggJHtuYW1lLnRyaW0oKX0oKSBgO1xuXHRjb25zdCBuZXdUb1N0cmluZyA9IHdyYXBwZWRUb1N0cmluZy5iaW5kKG51bGwsIHdpdGhOYW1lLCBmcm9tLnRvU3RyaW5nKCkpO1xuXHQvLyBFbnN1cmUgYHRvLnRvU3RyaW5nLnRvU3RyaW5nYCBpcyBub24tZW51bWVyYWJsZSBhbmQgaGFzIHRoZSBzYW1lIGBzYW1lYFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3VG9TdHJpbmcsICduYW1lJywgdG9TdHJpbmdOYW1lKTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRvLCAndG9TdHJpbmcnLCB7Li4udG9TdHJpbmdEZXNjcmlwdG9yLCB2YWx1ZTogbmV3VG9TdHJpbmd9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1pbWljRnVuY3Rpb24odG8sIGZyb20sIHtpZ25vcmVOb25Db25maWd1cmFibGUgPSBmYWxzZX0gPSB7fSkge1xuXHRjb25zdCB7bmFtZX0gPSB0bztcblxuXHRmb3IgKGNvbnN0IHByb3BlcnR5IG9mIFJlZmxlY3Qub3duS2V5cyhmcm9tKSkge1xuXHRcdGNvcHlQcm9wZXJ0eSh0bywgZnJvbSwgcHJvcGVydHksIGlnbm9yZU5vbkNvbmZpZ3VyYWJsZSk7XG5cdH1cblxuXHRjaGFuZ2VQcm90b3R5cGUodG8sIGZyb20pO1xuXHRjaGFuZ2VUb1N0cmluZyh0bywgZnJvbSwgbmFtZSk7XG5cblx0cmV0dXJuIHRvO1xufVxuIiwgImltcG9ydCBtaW1pY0Z1bmN0aW9uIGZyb20gJ21pbWljLWZuJztcblxuY29uc3QgY2FsbGVkRnVuY3Rpb25zID0gbmV3IFdlYWtNYXAoKTtcblxuY29uc3Qgb25ldGltZSA9IChmdW5jdGlvbl8sIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAodHlwZW9mIGZ1bmN0aW9uXyAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgZnVuY3Rpb24nKTtcblx0fVxuXG5cdGxldCByZXR1cm5WYWx1ZTtcblx0bGV0IGNhbGxDb3VudCA9IDA7XG5cdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uXy5kaXNwbGF5TmFtZSB8fCBmdW5jdGlvbl8ubmFtZSB8fCAnPGFub255bW91cz4nO1xuXG5cdGNvbnN0IG9uZXRpbWUgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdGNhbGxlZEZ1bmN0aW9ucy5zZXQob25ldGltZSwgKytjYWxsQ291bnQpO1xuXG5cdFx0aWYgKGNhbGxDb3VudCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuVmFsdWUgPSBmdW5jdGlvbl8uYXBwbHkodGhpcywgYXJndW1lbnRzXyk7XG5cdFx0XHRmdW5jdGlvbl8gPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy50aHJvdyA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGdW5jdGlvbiBcXGAke2Z1bmN0aW9uTmFtZX1cXGAgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2VgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0dXJuVmFsdWU7XG5cdH07XG5cblx0bWltaWNGdW5jdGlvbihvbmV0aW1lLCBmdW5jdGlvbl8pO1xuXHRjYWxsZWRGdW5jdGlvbnMuc2V0KG9uZXRpbWUsIGNhbGxDb3VudCk7XG5cblx0cmV0dXJuIG9uZXRpbWU7XG59O1xuXG5vbmV0aW1lLmNhbGxDb3VudCA9IGZ1bmN0aW9uXyA9PiB7XG5cdGlmICghY2FsbGVkRnVuY3Rpb25zLmhhcyhmdW5jdGlvbl8pKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBUaGUgZ2l2ZW4gZnVuY3Rpb24gXFxgJHtmdW5jdGlvbl8ubmFtZX1cXGAgaXMgbm90IHdyYXBwZWQgYnkgdGhlIFxcYG9uZXRpbWVcXGAgcGFja2FnZWApO1xuXHR9XG5cblx0cmV0dXJuIGNhbGxlZEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25fKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9uZXRpbWU7XG4iLCAiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7c2lnbmFsc0J5TmFtZX0gZnJvbSAnaHVtYW4tc2lnbmFscyc7XG5cbmNvbnN0IGdldEVycm9yUHJlZml4ID0gKHt0aW1lZE91dCwgdGltZW91dCwgZXJyb3JDb2RlLCBzaWduYWwsIHNpZ25hbERlc2NyaXB0aW9uLCBleGl0Q29kZSwgaXNDYW5jZWxlZH0pID0+IHtcblx0aWYgKHRpbWVkT3V0KSB7XG5cdFx0cmV0dXJuIGB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0fSBtaWxsaXNlY29uZHNgO1xuXHR9XG5cblx0aWYgKGlzQ2FuY2VsZWQpIHtcblx0XHRyZXR1cm4gJ3dhcyBjYW5jZWxlZCc7XG5cdH1cblxuXHRpZiAoZXJyb3JDb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gYGZhaWxlZCB3aXRoICR7ZXJyb3JDb2RlfWA7XG5cdH1cblxuXHRpZiAoc2lnbmFsICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gYHdhcyBraWxsZWQgd2l0aCAke3NpZ25hbH0gKCR7c2lnbmFsRGVzY3JpcHRpb259KWA7XG5cdH1cblxuXHRpZiAoZXhpdENvZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBgZmFpbGVkIHdpdGggZXhpdCBjb2RlICR7ZXhpdENvZGV9YDtcblx0fVxuXG5cdHJldHVybiAnZmFpbGVkJztcbn07XG5cbmV4cG9ydCBjb25zdCBtYWtlRXJyb3IgPSAoe1xuXHRzdGRvdXQsXG5cdHN0ZGVycixcblx0YWxsLFxuXHRlcnJvcixcblx0c2lnbmFsLFxuXHRleGl0Q29kZSxcblx0Y29tbWFuZCxcblx0ZXNjYXBlZENvbW1hbmQsXG5cdHRpbWVkT3V0LFxuXHRpc0NhbmNlbGVkLFxuXHRraWxsZWQsXG5cdHBhcnNlZDoge29wdGlvbnM6IHt0aW1lb3V0LCBjd2QgPSBwcm9jZXNzLmN3ZCgpfX0sXG59KSA9PiB7XG5cdC8vIGBzaWduYWxgIGFuZCBgZXhpdENvZGVgIGVtaXR0ZWQgb24gYHNwYXduZWQub24oJ2V4aXQnKWAgZXZlbnQgY2FuIGJlIGBudWxsYC5cblx0Ly8gV2Ugbm9ybWFsaXplIHRoZW0gdG8gYHVuZGVmaW5lZGBcblx0ZXhpdENvZGUgPSBleGl0Q29kZSA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGV4aXRDb2RlO1xuXHRzaWduYWwgPSBzaWduYWwgPT09IG51bGwgPyB1bmRlZmluZWQgOiBzaWduYWw7XG5cdGNvbnN0IHNpZ25hbERlc2NyaXB0aW9uID0gc2lnbmFsID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzaWduYWxzQnlOYW1lW3NpZ25hbF0uZGVzY3JpcHRpb247XG5cblx0Y29uc3QgZXJyb3JDb2RlID0gZXJyb3IgJiYgZXJyb3IuY29kZTtcblxuXHRjb25zdCBwcmVmaXggPSBnZXRFcnJvclByZWZpeCh7dGltZWRPdXQsIHRpbWVvdXQsIGVycm9yQ29kZSwgc2lnbmFsLCBzaWduYWxEZXNjcmlwdGlvbiwgZXhpdENvZGUsIGlzQ2FuY2VsZWR9KTtcblx0Y29uc3QgZXhlY2FNZXNzYWdlID0gYENvbW1hbmQgJHtwcmVmaXh9OiAke2NvbW1hbmR9YDtcblx0Y29uc3QgaXNFcnJvciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlcnJvcikgPT09ICdbb2JqZWN0IEVycm9yXSc7XG5cdGNvbnN0IHNob3J0TWVzc2FnZSA9IGlzRXJyb3IgPyBgJHtleGVjYU1lc3NhZ2V9XFxuJHtlcnJvci5tZXNzYWdlfWAgOiBleGVjYU1lc3NhZ2U7XG5cdGNvbnN0IG1lc3NhZ2UgPSBbc2hvcnRNZXNzYWdlLCBzdGRlcnIsIHN0ZG91dF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuXG5cdGlmIChpc0Vycm9yKSB7XG5cdFx0ZXJyb3Iub3JpZ2luYWxNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcblx0XHRlcnJvci5tZXNzYWdlID0gbWVzc2FnZTtcblx0fSBlbHNlIHtcblx0XHRlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcblx0fVxuXG5cdGVycm9yLnNob3J0TWVzc2FnZSA9IHNob3J0TWVzc2FnZTtcblx0ZXJyb3IuY29tbWFuZCA9IGNvbW1hbmQ7XG5cdGVycm9yLmVzY2FwZWRDb21tYW5kID0gZXNjYXBlZENvbW1hbmQ7XG5cdGVycm9yLmV4aXRDb2RlID0gZXhpdENvZGU7XG5cdGVycm9yLnNpZ25hbCA9IHNpZ25hbDtcblx0ZXJyb3Iuc2lnbmFsRGVzY3JpcHRpb24gPSBzaWduYWxEZXNjcmlwdGlvbjtcblx0ZXJyb3Iuc3Rkb3V0ID0gc3Rkb3V0O1xuXHRlcnJvci5zdGRlcnIgPSBzdGRlcnI7XG5cdGVycm9yLmN3ZCA9IGN3ZDtcblxuXHRpZiAoYWxsICE9PSB1bmRlZmluZWQpIHtcblx0XHRlcnJvci5hbGwgPSBhbGw7XG5cdH1cblxuXHRpZiAoJ2J1ZmZlcmVkRGF0YScgaW4gZXJyb3IpIHtcblx0XHRkZWxldGUgZXJyb3IuYnVmZmVyZWREYXRhO1xuXHR9XG5cblx0ZXJyb3IuZmFpbGVkID0gdHJ1ZTtcblx0ZXJyb3IudGltZWRPdXQgPSBCb29sZWFuKHRpbWVkT3V0KTtcblx0ZXJyb3IuaXNDYW5jZWxlZCA9IGlzQ2FuY2VsZWQ7XG5cdGVycm9yLmtpbGxlZCA9IGtpbGxlZCAmJiAhdGltZWRPdXQ7XG5cblx0cmV0dXJuIGVycm9yO1xufTtcbiIsICJpbXBvcnR7Y29uc3RhbnRzfWZyb21cIm5vZGU6b3NcIjtcblxuaW1wb3J0e1NJR1JUTUFYfWZyb21cIi4vcmVhbHRpbWUuanNcIjtcbmltcG9ydHtnZXRTaWduYWxzfWZyb21cIi4vc2lnbmFscy5qc1wiO1xuXG5cblxuY29uc3QgZ2V0U2lnbmFsc0J5TmFtZT0oKT0+e1xuY29uc3Qgc2lnbmFscz1nZXRTaWduYWxzKCk7XG5yZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHNpZ25hbHMubWFwKGdldFNpZ25hbEJ5TmFtZSkpO1xufTtcblxuY29uc3QgZ2V0U2lnbmFsQnlOYW1lPSh7XG5uYW1lLFxubnVtYmVyLFxuZGVzY3JpcHRpb24sXG5zdXBwb3J0ZWQsXG5hY3Rpb24sXG5mb3JjZWQsXG5zdGFuZGFyZFxufSk9PltuYW1lLHtuYW1lLG51bWJlcixkZXNjcmlwdGlvbixzdXBwb3J0ZWQsYWN0aW9uLGZvcmNlZCxzdGFuZGFyZH1dO1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsc0J5TmFtZT1nZXRTaWduYWxzQnlOYW1lKCk7XG5cblxuXG5cbmNvbnN0IGdldFNpZ25hbHNCeU51bWJlcj0oKT0+e1xuY29uc3Qgc2lnbmFscz1nZXRTaWduYWxzKCk7XG5jb25zdCBsZW5ndGg9U0lHUlRNQVgrMTtcbmNvbnN0IHNpZ25hbHNBPUFycmF5LmZyb20oe2xlbmd0aH0sKHZhbHVlLG51bWJlcik9PlxuZ2V0U2lnbmFsQnlOdW1iZXIobnVtYmVyLHNpZ25hbHMpKTtcblxucmV0dXJuIE9iamVjdC5hc3NpZ24oe30sLi4uc2lnbmFsc0EpO1xufTtcblxuY29uc3QgZ2V0U2lnbmFsQnlOdW1iZXI9KG51bWJlcixzaWduYWxzKT0+e1xuY29uc3Qgc2lnbmFsPWZpbmRTaWduYWxCeU51bWJlcihudW1iZXIsc2lnbmFscyk7XG5cbmlmKHNpZ25hbD09PXVuZGVmaW5lZCl7XG5yZXR1cm57fTtcbn1cblxuY29uc3R7bmFtZSxkZXNjcmlwdGlvbixzdXBwb3J0ZWQsYWN0aW9uLGZvcmNlZCxzdGFuZGFyZH09c2lnbmFsO1xucmV0dXJue1xuW251bWJlcl06e1xubmFtZSxcbm51bWJlcixcbmRlc2NyaXB0aW9uLFxuc3VwcG9ydGVkLFxuYWN0aW9uLFxuZm9yY2VkLFxuc3RhbmRhcmRcbn1cbn07XG59O1xuXG5cblxuY29uc3QgZmluZFNpZ25hbEJ5TnVtYmVyPShudW1iZXIsc2lnbmFscyk9PntcbmNvbnN0IHNpZ25hbD1zaWduYWxzLmZpbmQoKHtuYW1lfSk9PmNvbnN0YW50cy5zaWduYWxzW25hbWVdPT09bnVtYmVyKTtcblxuaWYoc2lnbmFsIT09dW5kZWZpbmVkKXtcbnJldHVybiBzaWduYWw7XG59XG5cbnJldHVybiBzaWduYWxzLmZpbmQoKHNpZ25hbEEpPT5zaWduYWxBLm51bWJlcj09PW51bWJlcik7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsc0J5TnVtYmVyPWdldFNpZ25hbHNCeU51bWJlcigpOyIsICJcbmV4cG9ydCBjb25zdCBnZXRSZWFsdGltZVNpZ25hbHM9KCk9PntcbmNvbnN0IGxlbmd0aD1TSUdSVE1BWC1TSUdSVE1JTisxO1xucmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aH0sZ2V0UmVhbHRpbWVTaWduYWwpO1xufTtcblxuY29uc3QgZ2V0UmVhbHRpbWVTaWduYWw9KHZhbHVlLGluZGV4KT0+KHtcbm5hbWU6YFNJR1JUJHtpbmRleCsxfWAsXG5udW1iZXI6U0lHUlRNSU4raW5kZXgsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiQXBwbGljYXRpb24tc3BlY2lmaWMgc2lnbmFsIChyZWFsdGltZSlcIixcbnN0YW5kYXJkOlwicG9zaXhcIlxufSk7XG5cbmNvbnN0IFNJR1JUTUlOPTM0O1xuZXhwb3J0IGNvbnN0IFNJR1JUTUFYPTY0OyIsICJpbXBvcnR7Y29uc3RhbnRzfWZyb21cIm5vZGU6b3NcIjtcblxuaW1wb3J0e1NJR05BTFN9ZnJvbVwiLi9jb3JlLmpzXCI7XG5pbXBvcnR7Z2V0UmVhbHRpbWVTaWduYWxzfWZyb21cIi4vcmVhbHRpbWUuanNcIjtcblxuXG5cbmV4cG9ydCBjb25zdCBnZXRTaWduYWxzPSgpPT57XG5jb25zdCByZWFsdGltZVNpZ25hbHM9Z2V0UmVhbHRpbWVTaWduYWxzKCk7XG5jb25zdCBzaWduYWxzPVsuLi5TSUdOQUxTLC4uLnJlYWx0aW1lU2lnbmFsc10ubWFwKG5vcm1hbGl6ZVNpZ25hbCk7XG5yZXR1cm4gc2lnbmFscztcbn07XG5cblxuXG5cblxuXG5cbmNvbnN0IG5vcm1hbGl6ZVNpZ25hbD0oe1xubmFtZSxcbm51bWJlcjpkZWZhdWx0TnVtYmVyLFxuZGVzY3JpcHRpb24sXG5hY3Rpb24sXG5mb3JjZWQ9ZmFsc2UsXG5zdGFuZGFyZFxufSk9PntcbmNvbnN0e1xuc2lnbmFsczp7W25hbWVdOmNvbnN0YW50U2lnbmFsfVxufT1jb25zdGFudHM7XG5jb25zdCBzdXBwb3J0ZWQ9Y29uc3RhbnRTaWduYWwhPT11bmRlZmluZWQ7XG5jb25zdCBudW1iZXI9c3VwcG9ydGVkP2NvbnN0YW50U2lnbmFsOmRlZmF1bHROdW1iZXI7XG5yZXR1cm57bmFtZSxudW1iZXIsZGVzY3JpcHRpb24sc3VwcG9ydGVkLGFjdGlvbixmb3JjZWQsc3RhbmRhcmR9O1xufTsiLCAiXG5cbmV4cG9ydCBjb25zdCBTSUdOQUxTPVtcbntcbm5hbWU6XCJTSUdIVVBcIixcbm51bWJlcjoxLFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIlRlcm1pbmFsIGNsb3NlZFwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwiXG59LFxue1xubmFtZTpcIlNJR0lOVFwiLFxubnVtYmVyOjIsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiVXNlciBpbnRlcnJ1cHRpb24gd2l0aCBDVFJMLUNcIixcbnN0YW5kYXJkOlwiYW5zaVwiXG59LFxue1xubmFtZTpcIlNJR1FVSVRcIixcbm51bWJlcjozLFxuYWN0aW9uOlwiY29yZVwiLFxuZGVzY3JpcHRpb246XCJVc2VyIGludGVycnVwdGlvbiB3aXRoIENUUkwtXFxcXFwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwiXG59LFxue1xubmFtZTpcIlNJR0lMTFwiLFxubnVtYmVyOjQsXG5hY3Rpb246XCJjb3JlXCIsXG5kZXNjcmlwdGlvbjpcIkludmFsaWQgbWFjaGluZSBpbnN0cnVjdGlvblwiLFxuc3RhbmRhcmQ6XCJhbnNpXCJcbn0sXG57XG5uYW1lOlwiU0lHVFJBUFwiLFxubnVtYmVyOjUsXG5hY3Rpb246XCJjb3JlXCIsXG5kZXNjcmlwdGlvbjpcIkRlYnVnZ2VyIGJyZWFrcG9pbnRcIixcbnN0YW5kYXJkOlwicG9zaXhcIlxufSxcbntcbm5hbWU6XCJTSUdBQlJUXCIsXG5udW1iZXI6NixcbmFjdGlvbjpcImNvcmVcIixcbmRlc2NyaXB0aW9uOlwiQWJvcnRlZFwiLFxuc3RhbmRhcmQ6XCJhbnNpXCJcbn0sXG57XG5uYW1lOlwiU0lHSU9UXCIsXG5udW1iZXI6NixcbmFjdGlvbjpcImNvcmVcIixcbmRlc2NyaXB0aW9uOlwiQWJvcnRlZFwiLFxuc3RhbmRhcmQ6XCJic2RcIlxufSxcbntcbm5hbWU6XCJTSUdCVVNcIixcbm51bWJlcjo3LFxuYWN0aW9uOlwiY29yZVwiLFxuZGVzY3JpcHRpb246XG5cIkJ1cyBlcnJvciBkdWUgdG8gbWlzYWxpZ25lZCwgbm9uLWV4aXN0aW5nIGFkZHJlc3Mgb3IgcGFnaW5nIGVycm9yXCIsXG5zdGFuZGFyZDpcImJzZFwiXG59LFxue1xubmFtZTpcIlNJR0VNVFwiLFxubnVtYmVyOjcsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiQ29tbWFuZCBzaG91bGQgYmUgZW11bGF0ZWQgYnV0IGlzIG5vdCBpbXBsZW1lbnRlZFwiLFxuc3RhbmRhcmQ6XCJvdGhlclwiXG59LFxue1xubmFtZTpcIlNJR0ZQRVwiLFxubnVtYmVyOjgsXG5hY3Rpb246XCJjb3JlXCIsXG5kZXNjcmlwdGlvbjpcIkZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgZXJyb3JcIixcbnN0YW5kYXJkOlwiYW5zaVwiXG59LFxue1xubmFtZTpcIlNJR0tJTExcIixcbm51bWJlcjo5LFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIkZvcmNlZCB0ZXJtaW5hdGlvblwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwiLFxuZm9yY2VkOnRydWVcbn0sXG57XG5uYW1lOlwiU0lHVVNSMVwiLFxubnVtYmVyOjEwLFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIkFwcGxpY2F0aW9uLXNwZWNpZmljIHNpZ25hbFwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwiXG59LFxue1xubmFtZTpcIlNJR1NFR1ZcIixcbm51bWJlcjoxMSxcbmFjdGlvbjpcImNvcmVcIixcbmRlc2NyaXB0aW9uOlwiU2VnbWVudGF0aW9uIGZhdWx0XCIsXG5zdGFuZGFyZDpcImFuc2lcIlxufSxcbntcbm5hbWU6XCJTSUdVU1IyXCIsXG5udW1iZXI6MTIsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiQXBwbGljYXRpb24tc3BlY2lmaWMgc2lnbmFsXCIsXG5zdGFuZGFyZDpcInBvc2l4XCJcbn0sXG57XG5uYW1lOlwiU0lHUElQRVwiLFxubnVtYmVyOjEzLFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIkJyb2tlbiBwaXBlIG9yIHNvY2tldFwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwiXG59LFxue1xubmFtZTpcIlNJR0FMUk1cIixcbm51bWJlcjoxNCxcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJUaW1lb3V0IG9yIHRpbWVyXCIsXG5zdGFuZGFyZDpcInBvc2l4XCJcbn0sXG57XG5uYW1lOlwiU0lHVEVSTVwiLFxubnVtYmVyOjE1LFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIlRlcm1pbmF0aW9uXCIsXG5zdGFuZGFyZDpcImFuc2lcIlxufSxcbntcbm5hbWU6XCJTSUdTVEtGTFRcIixcbm51bWJlcjoxNixcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJTdGFjayBpcyBlbXB0eSBvciBvdmVyZmxvd2VkXCIsXG5zdGFuZGFyZDpcIm90aGVyXCJcbn0sXG57XG5uYW1lOlwiU0lHQ0hMRFwiLFxubnVtYmVyOjE3LFxuYWN0aW9uOlwiaWdub3JlXCIsXG5kZXNjcmlwdGlvbjpcIkNoaWxkIHByb2Nlc3MgdGVybWluYXRlZCwgcGF1c2VkIG9yIHVucGF1c2VkXCIsXG5zdGFuZGFyZDpcInBvc2l4XCJcbn0sXG57XG5uYW1lOlwiU0lHQ0xEXCIsXG5udW1iZXI6MTcsXG5hY3Rpb246XCJpZ25vcmVcIixcbmRlc2NyaXB0aW9uOlwiQ2hpbGQgcHJvY2VzcyB0ZXJtaW5hdGVkLCBwYXVzZWQgb3IgdW5wYXVzZWRcIixcbnN0YW5kYXJkOlwib3RoZXJcIlxufSxcbntcbm5hbWU6XCJTSUdDT05UXCIsXG5udW1iZXI6MTgsXG5hY3Rpb246XCJ1bnBhdXNlXCIsXG5kZXNjcmlwdGlvbjpcIlVucGF1c2VkXCIsXG5zdGFuZGFyZDpcInBvc2l4XCIsXG5mb3JjZWQ6dHJ1ZVxufSxcbntcbm5hbWU6XCJTSUdTVE9QXCIsXG5udW1iZXI6MTksXG5hY3Rpb246XCJwYXVzZVwiLFxuZGVzY3JpcHRpb246XCJQYXVzZWRcIixcbnN0YW5kYXJkOlwicG9zaXhcIixcbmZvcmNlZDp0cnVlXG59LFxue1xubmFtZTpcIlNJR1RTVFBcIixcbm51bWJlcjoyMCxcbmFjdGlvbjpcInBhdXNlXCIsXG5kZXNjcmlwdGlvbjpcIlBhdXNlZCB1c2luZyBDVFJMLVogb3IgXFxcInN1c3BlbmRcXFwiXCIsXG5zdGFuZGFyZDpcInBvc2l4XCJcbn0sXG57XG5uYW1lOlwiU0lHVFRJTlwiLFxubnVtYmVyOjIxLFxuYWN0aW9uOlwicGF1c2VcIixcbmRlc2NyaXB0aW9uOlwiQmFja2dyb3VuZCBwcm9jZXNzIGNhbm5vdCByZWFkIHRlcm1pbmFsIGlucHV0XCIsXG5zdGFuZGFyZDpcInBvc2l4XCJcbn0sXG57XG5uYW1lOlwiU0lHQlJFQUtcIixcbm51bWJlcjoyMSxcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJVc2VyIGludGVycnVwdGlvbiB3aXRoIENUUkwtQlJFQUtcIixcbnN0YW5kYXJkOlwib3RoZXJcIlxufSxcbntcbm5hbWU6XCJTSUdUVE9VXCIsXG5udW1iZXI6MjIsXG5hY3Rpb246XCJwYXVzZVwiLFxuZGVzY3JpcHRpb246XCJCYWNrZ3JvdW5kIHByb2Nlc3MgY2Fubm90IHdyaXRlIHRvIHRlcm1pbmFsIG91dHB1dFwiLFxuc3RhbmRhcmQ6XCJwb3NpeFwiXG59LFxue1xubmFtZTpcIlNJR1VSR1wiLFxubnVtYmVyOjIzLFxuYWN0aW9uOlwiaWdub3JlXCIsXG5kZXNjcmlwdGlvbjpcIlNvY2tldCByZWNlaXZlZCBvdXQtb2YtYmFuZCBkYXRhXCIsXG5zdGFuZGFyZDpcImJzZFwiXG59LFxue1xubmFtZTpcIlNJR1hDUFVcIixcbm51bWJlcjoyNCxcbmFjdGlvbjpcImNvcmVcIixcbmRlc2NyaXB0aW9uOlwiUHJvY2VzcyB0aW1lZCBvdXRcIixcbnN0YW5kYXJkOlwiYnNkXCJcbn0sXG57XG5uYW1lOlwiU0lHWEZTWlwiLFxubnVtYmVyOjI1LFxuYWN0aW9uOlwiY29yZVwiLFxuZGVzY3JpcHRpb246XCJGaWxlIHRvbyBiaWdcIixcbnN0YW5kYXJkOlwiYnNkXCJcbn0sXG57XG5uYW1lOlwiU0lHVlRBTFJNXCIsXG5udW1iZXI6MjYsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiVGltZW91dCBvciB0aW1lclwiLFxuc3RhbmRhcmQ6XCJic2RcIlxufSxcbntcbm5hbWU6XCJTSUdQUk9GXCIsXG5udW1iZXI6MjcsXG5hY3Rpb246XCJ0ZXJtaW5hdGVcIixcbmRlc2NyaXB0aW9uOlwiVGltZW91dCBvciB0aW1lclwiLFxuc3RhbmRhcmQ6XCJic2RcIlxufSxcbntcbm5hbWU6XCJTSUdXSU5DSFwiLFxubnVtYmVyOjI4LFxuYWN0aW9uOlwiaWdub3JlXCIsXG5kZXNjcmlwdGlvbjpcIlRlcm1pbmFsIHdpbmRvdyBzaXplIGNoYW5nZWRcIixcbnN0YW5kYXJkOlwiYnNkXCJcbn0sXG57XG5uYW1lOlwiU0lHSU9cIixcbm51bWJlcjoyOSxcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJJL08gaXMgYXZhaWxhYmxlXCIsXG5zdGFuZGFyZDpcIm90aGVyXCJcbn0sXG57XG5uYW1lOlwiU0lHUE9MTFwiLFxubnVtYmVyOjI5LFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIldhdGNoZWQgZXZlbnRcIixcbnN0YW5kYXJkOlwib3RoZXJcIlxufSxcbntcbm5hbWU6XCJTSUdJTkZPXCIsXG5udW1iZXI6MjksXG5hY3Rpb246XCJpZ25vcmVcIixcbmRlc2NyaXB0aW9uOlwiUmVxdWVzdCBmb3IgcHJvY2VzcyBpbmZvcm1hdGlvblwiLFxuc3RhbmRhcmQ6XCJvdGhlclwiXG59LFxue1xubmFtZTpcIlNJR1BXUlwiLFxubnVtYmVyOjMwLFxuYWN0aW9uOlwidGVybWluYXRlXCIsXG5kZXNjcmlwdGlvbjpcIkRldmljZSBydW5uaW5nIG91dCBvZiBwb3dlclwiLFxuc3RhbmRhcmQ6XCJzeXN0ZW12XCJcbn0sXG57XG5uYW1lOlwiU0lHU1lTXCIsXG5udW1iZXI6MzEsXG5hY3Rpb246XCJjb3JlXCIsXG5kZXNjcmlwdGlvbjpcIkludmFsaWQgc3lzdGVtIGNhbGxcIixcbnN0YW5kYXJkOlwib3RoZXJcIlxufSxcbntcbm5hbWU6XCJTSUdVTlVTRURcIixcbm51bWJlcjozMSxcbmFjdGlvbjpcInRlcm1pbmF0ZVwiLFxuZGVzY3JpcHRpb246XCJJbnZhbGlkIHN5c3RlbSBjYWxsXCIsXG5zdGFuZGFyZDpcIm90aGVyXCJcbn1dOyIsICJjb25zdCBhbGlhc2VzID0gWydzdGRpbicsICdzdGRvdXQnLCAnc3RkZXJyJ107XG5cbmNvbnN0IGhhc0FsaWFzID0gb3B0aW9ucyA9PiBhbGlhc2VzLnNvbWUoYWxpYXMgPT4gb3B0aW9uc1thbGlhc10gIT09IHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVTdGRpbyA9IG9wdGlvbnMgPT4ge1xuXHRpZiAoIW9wdGlvbnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCB7c3RkaW99ID0gb3B0aW9ucztcblxuXHRpZiAoc3RkaW8gPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBhbGlhc2VzLm1hcChhbGlhcyA9PiBvcHRpb25zW2FsaWFzXSk7XG5cdH1cblxuXHRpZiAoaGFzQWxpYXMob3B0aW9ucykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEl0J3Mgbm90IHBvc3NpYmxlIHRvIHByb3ZpZGUgXFxgc3RkaW9cXGAgaW4gY29tYmluYXRpb24gd2l0aCBvbmUgb2YgJHthbGlhc2VzLm1hcChhbGlhcyA9PiBgXFxgJHthbGlhc31cXGBgKS5qb2luKCcsICcpfWApO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBzdGRpbyA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gc3RkaW87XG5cdH1cblxuXHRpZiAoIUFycmF5LmlzQXJyYXkoc3RkaW8pKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgc3RkaW9cXGAgdG8gYmUgb2YgdHlwZSBcXGBzdHJpbmdcXGAgb3IgXFxgQXJyYXlcXGAsIGdvdCBcXGAke3R5cGVvZiBzdGRpb31cXGBgKTtcblx0fVxuXG5cdGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KHN0ZGlvLmxlbmd0aCwgYWxpYXNlcy5sZW5ndGgpO1xuXHRyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RofSwgKHZhbHVlLCBpbmRleCkgPT4gc3RkaW9baW5kZXhdKTtcbn07XG5cbi8vIGBpcGNgIGlzIHB1c2hlZCB1bmxlc3MgaXQgaXMgYWxyZWFkeSBwcmVzZW50XG5leHBvcnQgY29uc3Qgbm9ybWFsaXplU3RkaW9Ob2RlID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IHN0ZGlvID0gbm9ybWFsaXplU3RkaW8ob3B0aW9ucyk7XG5cblx0aWYgKHN0ZGlvID09PSAnaXBjJykge1xuXHRcdHJldHVybiAnaXBjJztcblx0fVxuXG5cdGlmIChzdGRpbyA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBzdGRpbyA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gW3N0ZGlvLCBzdGRpbywgc3RkaW8sICdpcGMnXTtcblx0fVxuXG5cdGlmIChzdGRpby5pbmNsdWRlcygnaXBjJykpIHtcblx0XHRyZXR1cm4gc3RkaW87XG5cdH1cblxuXHRyZXR1cm4gWy4uLnN0ZGlvLCAnaXBjJ107XG59O1xuIiwgImltcG9ydCBvcyBmcm9tICdub2RlOm9zJztcbmltcG9ydCBvbkV4aXQgZnJvbSAnc2lnbmFsLWV4aXQnO1xuXG5jb25zdCBERUZBVUxUX0ZPUkNFX0tJTExfVElNRU9VVCA9IDEwMDAgKiA1O1xuXG4vLyBNb25rZXktcGF0Y2hlcyBgY2hpbGRQcm9jZXNzLmtpbGwoKWAgdG8gYWRkIGBmb3JjZUtpbGxBZnRlclRpbWVvdXRgIGJlaGF2aW9yXG5leHBvcnQgY29uc3Qgc3Bhd25lZEtpbGwgPSAoa2lsbCwgc2lnbmFsID0gJ1NJR1RFUk0nLCBvcHRpb25zID0ge30pID0+IHtcblx0Y29uc3Qga2lsbFJlc3VsdCA9IGtpbGwoc2lnbmFsKTtcblx0c2V0S2lsbFRpbWVvdXQoa2lsbCwgc2lnbmFsLCBvcHRpb25zLCBraWxsUmVzdWx0KTtcblx0cmV0dXJuIGtpbGxSZXN1bHQ7XG59O1xuXG5jb25zdCBzZXRLaWxsVGltZW91dCA9IChraWxsLCBzaWduYWwsIG9wdGlvbnMsIGtpbGxSZXN1bHQpID0+IHtcblx0aWYgKCFzaG91bGRGb3JjZUtpbGwoc2lnbmFsLCBvcHRpb25zLCBraWxsUmVzdWx0KSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHRpbWVvdXQgPSBnZXRGb3JjZUtpbGxBZnRlclRpbWVvdXQob3B0aW9ucyk7XG5cdGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRraWxsKCdTSUdLSUxMJyk7XG5cdH0sIHRpbWVvdXQpO1xuXG5cdC8vIEd1YXJkZWQgYmVjYXVzZSB0aGVyZSdzIG5vIGAudW5yZWYoKWAgd2hlbiBgZXhlY2FgIGlzIHVzZWQgaW4gdGhlIHJlbmRlcmVyXG5cdC8vIHByb2Nlc3MgaW4gRWxlY3Ryb24uIFRoaXMgY2Fubm90IGJlIHRlc3RlZCBzaW5jZSB3ZSBkb24ndCBydW4gdGVzdHMgaW5cblx0Ly8gRWxlY3Ryb24uXG5cdC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlXG5cdGlmICh0LnVucmVmKSB7XG5cdFx0dC51bnJlZigpO1xuXHR9XG59O1xuXG5jb25zdCBzaG91bGRGb3JjZUtpbGwgPSAoc2lnbmFsLCB7Zm9yY2VLaWxsQWZ0ZXJUaW1lb3V0fSwga2lsbFJlc3VsdCkgPT4gaXNTaWd0ZXJtKHNpZ25hbCkgJiYgZm9yY2VLaWxsQWZ0ZXJUaW1lb3V0ICE9PSBmYWxzZSAmJiBraWxsUmVzdWx0O1xuXG5jb25zdCBpc1NpZ3Rlcm0gPSBzaWduYWwgPT4gc2lnbmFsID09PSBvcy5jb25zdGFudHMuc2lnbmFscy5TSUdURVJNXG5cdFx0fHwgKHR5cGVvZiBzaWduYWwgPT09ICdzdHJpbmcnICYmIHNpZ25hbC50b1VwcGVyQ2FzZSgpID09PSAnU0lHVEVSTScpO1xuXG5jb25zdCBnZXRGb3JjZUtpbGxBZnRlclRpbWVvdXQgPSAoe2ZvcmNlS2lsbEFmdGVyVGltZW91dCA9IHRydWV9KSA9PiB7XG5cdGlmIChmb3JjZUtpbGxBZnRlclRpbWVvdXQgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gREVGQVVMVF9GT1JDRV9LSUxMX1RJTUVPVVQ7XG5cdH1cblxuXHRpZiAoIU51bWJlci5pc0Zpbml0ZShmb3JjZUtpbGxBZnRlclRpbWVvdXQpIHx8IGZvcmNlS2lsbEFmdGVyVGltZW91dCA8IDApIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCB0aGUgXFxgZm9yY2VLaWxsQWZ0ZXJUaW1lb3V0XFxgIG9wdGlvbiB0byBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCBnb3QgXFxgJHtmb3JjZUtpbGxBZnRlclRpbWVvdXR9XFxgICgke3R5cGVvZiBmb3JjZUtpbGxBZnRlclRpbWVvdXR9KWApO1xuXHR9XG5cblx0cmV0dXJuIGZvcmNlS2lsbEFmdGVyVGltZW91dDtcbn07XG5cbi8vIGBjaGlsZFByb2Nlc3MuY2FuY2VsKClgXG5leHBvcnQgY29uc3Qgc3Bhd25lZENhbmNlbCA9IChzcGF3bmVkLCBjb250ZXh0KSA9PiB7XG5cdGNvbnN0IGtpbGxSZXN1bHQgPSBzcGF3bmVkLmtpbGwoKTtcblxuXHRpZiAoa2lsbFJlc3VsdCkge1xuXHRcdGNvbnRleHQuaXNDYW5jZWxlZCA9IHRydWU7XG5cdH1cbn07XG5cbmNvbnN0IHRpbWVvdXRLaWxsID0gKHNwYXduZWQsIHNpZ25hbCwgcmVqZWN0KSA9PiB7XG5cdHNwYXduZWQua2lsbChzaWduYWwpO1xuXHRyZWplY3QoT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoJ1RpbWVkIG91dCcpLCB7dGltZWRPdXQ6IHRydWUsIHNpZ25hbH0pKTtcbn07XG5cbi8vIGB0aW1lb3V0YCBvcHRpb24gaGFuZGxpbmdcbmV4cG9ydCBjb25zdCBzZXR1cFRpbWVvdXQgPSAoc3Bhd25lZCwge3RpbWVvdXQsIGtpbGxTaWduYWwgPSAnU0lHVEVSTSd9LCBzcGF3bmVkUHJvbWlzZSkgPT4ge1xuXHRpZiAodGltZW91dCA9PT0gMCB8fCB0aW1lb3V0ID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gc3Bhd25lZFByb21pc2U7XG5cdH1cblxuXHRsZXQgdGltZW91dElkO1xuXHRjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHR0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRpbWVvdXRLaWxsKHNwYXduZWQsIGtpbGxTaWduYWwsIHJlamVjdCk7XG5cdFx0fSwgdGltZW91dCk7XG5cdH0pO1xuXG5cdGNvbnN0IHNhZmVTcGF3bmVkUHJvbWlzZSA9IHNwYXduZWRQcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuXHRcdGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuXHR9KTtcblxuXHRyZXR1cm4gUHJvbWlzZS5yYWNlKFt0aW1lb3V0UHJvbWlzZSwgc2FmZVNwYXduZWRQcm9taXNlXSk7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUaW1lb3V0ID0gKHt0aW1lb3V0fSkgPT4ge1xuXHRpZiAodGltZW91dCAhPT0gdW5kZWZpbmVkICYmICghTnVtYmVyLmlzRmluaXRlKHRpbWVvdXQpIHx8IHRpbWVvdXQgPCAwKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIHRoZSBcXGB0aW1lb3V0XFxgIG9wdGlvbiB0byBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCBnb3QgXFxgJHt0aW1lb3V0fVxcYCAoJHt0eXBlb2YgdGltZW91dH0pYCk7XG5cdH1cbn07XG5cbi8vIGBjbGVhbnVwYCBvcHRpb24gaGFuZGxpbmdcbmV4cG9ydCBjb25zdCBzZXRFeGl0SGFuZGxlciA9IGFzeW5jIChzcGF3bmVkLCB7Y2xlYW51cCwgZGV0YWNoZWR9LCB0aW1lZFByb21pc2UpID0+IHtcblx0aWYgKCFjbGVhbnVwIHx8IGRldGFjaGVkKSB7XG5cdFx0cmV0dXJuIHRpbWVkUHJvbWlzZTtcblx0fVxuXG5cdGNvbnN0IHJlbW92ZUV4aXRIYW5kbGVyID0gb25FeGl0KCgpID0+IHtcblx0XHRzcGF3bmVkLmtpbGwoKTtcblx0fSk7XG5cblx0cmV0dXJuIHRpbWVkUHJvbWlzZS5maW5hbGx5KCgpID0+IHtcblx0XHRyZW1vdmVFeGl0SGFuZGxlcigpO1xuXHR9KTtcbn07XG4iLCAiaW1wb3J0IHtjcmVhdGVXcml0ZVN0cmVhbX0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge0NoaWxkUHJvY2Vzc30gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7aXNXcml0YWJsZVN0cmVhbX0gZnJvbSAnaXMtc3RyZWFtJztcblxuY29uc3QgaXNFeGVjYUNoaWxkUHJvY2VzcyA9IHRhcmdldCA9PiB0YXJnZXQgaW5zdGFuY2VvZiBDaGlsZFByb2Nlc3MgJiYgdHlwZW9mIHRhcmdldC50aGVuID09PSAnZnVuY3Rpb24nO1xuXG5jb25zdCBwaXBlVG9UYXJnZXQgPSAoc3Bhd25lZCwgc3RyZWFtTmFtZSwgdGFyZ2V0KSA9PiB7XG5cdGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJykge1xuXHRcdHNwYXduZWRbc3RyZWFtTmFtZV0ucGlwZShjcmVhdGVXcml0ZVN0cmVhbSh0YXJnZXQpKTtcblx0XHRyZXR1cm4gc3Bhd25lZDtcblx0fVxuXG5cdGlmIChpc1dyaXRhYmxlU3RyZWFtKHRhcmdldCkpIHtcblx0XHRzcGF3bmVkW3N0cmVhbU5hbWVdLnBpcGUodGFyZ2V0KTtcblx0XHRyZXR1cm4gc3Bhd25lZDtcblx0fVxuXG5cdGlmICghaXNFeGVjYUNoaWxkUHJvY2Vzcyh0YXJnZXQpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBhIHN0cmVhbSBvciBhbiBFeGVjYSBjaGlsZCBwcm9jZXNzLicpO1xuXHR9XG5cblx0aWYgKCFpc1dyaXRhYmxlU3RyZWFtKHRhcmdldC5zdGRpbikpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdGFyZ2V0IGNoaWxkIHByb2Nlc3NcXCdzIHN0ZGluIG11c3QgYmUgYXZhaWxhYmxlLicpO1xuXHR9XG5cblx0c3Bhd25lZFtzdHJlYW1OYW1lXS5waXBlKHRhcmdldC5zdGRpbik7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkUGlwZU1ldGhvZHMgPSBzcGF3bmVkID0+IHtcblx0aWYgKHNwYXduZWQuc3Rkb3V0ICE9PSBudWxsKSB7XG5cdFx0c3Bhd25lZC5waXBlU3Rkb3V0ID0gcGlwZVRvVGFyZ2V0LmJpbmQodW5kZWZpbmVkLCBzcGF3bmVkLCAnc3Rkb3V0Jyk7XG5cdH1cblxuXHRpZiAoc3Bhd25lZC5zdGRlcnIgIT09IG51bGwpIHtcblx0XHRzcGF3bmVkLnBpcGVTdGRlcnIgPSBwaXBlVG9UYXJnZXQuYmluZCh1bmRlZmluZWQsIHNwYXduZWQsICdzdGRlcnInKTtcblx0fVxuXG5cdGlmIChzcGF3bmVkLmFsbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0c3Bhd25lZC5waXBlQWxsID0gcGlwZVRvVGFyZ2V0LmJpbmQodW5kZWZpbmVkLCBzcGF3bmVkLCAnYWxsJyk7XG5cdH1cbn07XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGlzU3RyZWFtKHN0cmVhbSkge1xuXHRyZXR1cm4gc3RyZWFtICE9PSBudWxsXG5cdFx0JiYgdHlwZW9mIHN0cmVhbSA9PT0gJ29iamVjdCdcblx0XHQmJiB0eXBlb2Ygc3RyZWFtLnBpcGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dyaXRhYmxlU3RyZWFtKHN0cmVhbSkge1xuXHRyZXR1cm4gaXNTdHJlYW0oc3RyZWFtKVxuXHRcdCYmIHN0cmVhbS53cml0YWJsZSAhPT0gZmFsc2Vcblx0XHQmJiB0eXBlb2Ygc3RyZWFtLl93cml0ZSA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdCYmIHR5cGVvZiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUgPT09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pIHtcblx0cmV0dXJuIGlzU3RyZWFtKHN0cmVhbSlcblx0XHQmJiBzdHJlYW0ucmVhZGFibGUgIT09IGZhbHNlXG5cdFx0JiYgdHlwZW9mIHN0cmVhbS5fcmVhZCA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdCYmIHR5cGVvZiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUgPT09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEdXBsZXhTdHJlYW0oc3RyZWFtKSB7XG5cdHJldHVybiBpc1dyaXRhYmxlU3RyZWFtKHN0cmVhbSlcblx0XHQmJiBpc1JlYWRhYmxlU3RyZWFtKHN0cmVhbSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RyYW5zZm9ybVN0cmVhbShzdHJlYW0pIHtcblx0cmV0dXJuIGlzRHVwbGV4U3RyZWFtKHN0cmVhbSlcblx0XHQmJiB0eXBlb2Ygc3RyZWFtLl90cmFuc2Zvcm0gPT09ICdmdW5jdGlvbic7XG59XG4iLCAiaW1wb3J0IHtjcmVhdGVSZWFkU3RyZWFtLCByZWFkRmlsZVN5bmN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtpc1N0cmVhbX0gZnJvbSAnaXMtc3RyZWFtJztcbmltcG9ydCBnZXRTdHJlYW0gZnJvbSAnZ2V0LXN0cmVhbSc7XG5pbXBvcnQgbWVyZ2VTdHJlYW0gZnJvbSAnbWVyZ2Utc3RyZWFtJztcblxuY29uc3QgdmFsaWRhdGVJbnB1dE9wdGlvbnMgPSBpbnB1dCA9PiB7XG5cdGlmIChpbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGBpbnB1dGAgYW5kIGBpbnB1dEZpbGVgIG9wdGlvbnMgY2Fubm90IGJlIGJvdGggc2V0LicpO1xuXHR9XG59O1xuXG5jb25zdCBnZXRJbnB1dFN5bmMgPSAoe2lucHV0LCBpbnB1dEZpbGV9KSA9PiB7XG5cdGlmICh0eXBlb2YgaW5wdXRGaWxlICE9PSAnc3RyaW5nJykge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXG5cdHZhbGlkYXRlSW5wdXRPcHRpb25zKGlucHV0KTtcblx0cmV0dXJuIHJlYWRGaWxlU3luYyhpbnB1dEZpbGUpO1xufTtcblxuLy8gYGlucHV0YCBhbmQgYGlucHV0RmlsZWAgb3B0aW9uIGluIHN5bmMgbW9kZVxuZXhwb3J0IGNvbnN0IGhhbmRsZUlucHV0U3luYyA9IG9wdGlvbnMgPT4ge1xuXHRjb25zdCBpbnB1dCA9IGdldElucHV0U3luYyhvcHRpb25zKTtcblxuXHRpZiAoaXNTdHJlYW0oaW5wdXQpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGBpbnB1dGAgb3B0aW9uIGNhbm5vdCBiZSBhIHN0cmVhbSBpbiBzeW5jIG1vZGUnKTtcblx0fVxuXG5cdHJldHVybiBpbnB1dDtcbn07XG5cbmNvbnN0IGdldElucHV0ID0gKHtpbnB1dCwgaW5wdXRGaWxlfSkgPT4ge1xuXHRpZiAodHlwZW9mIGlucHV0RmlsZSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblxuXHR2YWxpZGF0ZUlucHV0T3B0aW9ucyhpbnB1dCk7XG5cdHJldHVybiBjcmVhdGVSZWFkU3RyZWFtKGlucHV0RmlsZSk7XG59O1xuXG4vLyBgaW5wdXRgIGFuZCBgaW5wdXRGaWxlYCBvcHRpb24gaW4gYXN5bmMgbW9kZVxuZXhwb3J0IGNvbnN0IGhhbmRsZUlucHV0ID0gKHNwYXduZWQsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgaW5wdXQgPSBnZXRJbnB1dChvcHRpb25zKTtcblxuXHRpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChpc1N0cmVhbShpbnB1dCkpIHtcblx0XHRpbnB1dC5waXBlKHNwYXduZWQuc3RkaW4pO1xuXHR9IGVsc2Uge1xuXHRcdHNwYXduZWQuc3RkaW4uZW5kKGlucHV0KTtcblx0fVxufTtcblxuLy8gYGFsbGAgaW50ZXJsZWF2ZXMgYHN0ZG91dGAgYW5kIGBzdGRlcnJgXG5leHBvcnQgY29uc3QgbWFrZUFsbFN0cmVhbSA9IChzcGF3bmVkLCB7YWxsfSkgPT4ge1xuXHRpZiAoIWFsbCB8fCAoIXNwYXduZWQuc3Rkb3V0ICYmICFzcGF3bmVkLnN0ZGVycikpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBtaXhlZCA9IG1lcmdlU3RyZWFtKCk7XG5cblx0aWYgKHNwYXduZWQuc3Rkb3V0KSB7XG5cdFx0bWl4ZWQuYWRkKHNwYXduZWQuc3Rkb3V0KTtcblx0fVxuXG5cdGlmIChzcGF3bmVkLnN0ZGVycikge1xuXHRcdG1peGVkLmFkZChzcGF3bmVkLnN0ZGVycik7XG5cdH1cblxuXHRyZXR1cm4gbWl4ZWQ7XG59O1xuXG4vLyBPbiBmYWlsdXJlLCBgcmVzdWx0LnN0ZG91dHxzdGRlcnJ8YWxsYCBzaG91bGQgY29udGFpbiB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIHN0cmVhbVxuY29uc3QgZ2V0QnVmZmVyZWREYXRhID0gYXN5bmMgKHN0cmVhbSwgc3RyZWFtUHJvbWlzZSkgPT4ge1xuXHQvLyBXaGVuIGBidWZmZXJgIGlzIGBmYWxzZWAsIGBzdHJlYW1Qcm9taXNlYCBpcyBgdW5kZWZpbmVkYCBhbmQgdGhlcmUgaXMgbm8gYnVmZmVyZWQgZGF0YSB0byByZXRyaWV2ZVxuXHRpZiAoIXN0cmVhbSB8fCBzdHJlYW1Qcm9taXNlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRzdHJlYW0uZGVzdHJveSgpO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuIGF3YWl0IHN0cmVhbVByb21pc2U7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuIGVycm9yLmJ1ZmZlcmVkRGF0YTtcblx0fVxufTtcblxuY29uc3QgZ2V0U3RyZWFtUHJvbWlzZSA9IChzdHJlYW0sIHtlbmNvZGluZywgYnVmZmVyLCBtYXhCdWZmZXJ9KSA9PiB7XG5cdGlmICghc3RyZWFtIHx8ICFidWZmZXIpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoZW5jb2RpbmcpIHtcblx0XHRyZXR1cm4gZ2V0U3RyZWFtKHN0cmVhbSwge2VuY29kaW5nLCBtYXhCdWZmZXJ9KTtcblx0fVxuXG5cdHJldHVybiBnZXRTdHJlYW0uYnVmZmVyKHN0cmVhbSwge21heEJ1ZmZlcn0pO1xufTtcblxuLy8gUmV0cmlldmUgcmVzdWx0IG9mIGNoaWxkIHByb2Nlc3M6IGV4aXQgY29kZSwgc2lnbmFsLCBlcnJvciwgc3RyZWFtcyAoc3Rkb3V0L3N0ZGVyci9hbGwpXG5leHBvcnQgY29uc3QgZ2V0U3Bhd25lZFJlc3VsdCA9IGFzeW5jICh7c3Rkb3V0LCBzdGRlcnIsIGFsbH0sIHtlbmNvZGluZywgYnVmZmVyLCBtYXhCdWZmZXJ9LCBwcm9jZXNzRG9uZSkgPT4ge1xuXHRjb25zdCBzdGRvdXRQcm9taXNlID0gZ2V0U3RyZWFtUHJvbWlzZShzdGRvdXQsIHtlbmNvZGluZywgYnVmZmVyLCBtYXhCdWZmZXJ9KTtcblx0Y29uc3Qgc3RkZXJyUHJvbWlzZSA9IGdldFN0cmVhbVByb21pc2Uoc3RkZXJyLCB7ZW5jb2RpbmcsIGJ1ZmZlciwgbWF4QnVmZmVyfSk7XG5cdGNvbnN0IGFsbFByb21pc2UgPSBnZXRTdHJlYW1Qcm9taXNlKGFsbCwge2VuY29kaW5nLCBidWZmZXIsIG1heEJ1ZmZlcjogbWF4QnVmZmVyICogMn0pO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFtwcm9jZXNzRG9uZSwgc3Rkb3V0UHJvbWlzZSwgc3RkZXJyUHJvbWlzZSwgYWxsUHJvbWlzZV0pO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChbXG5cdFx0XHR7ZXJyb3IsIHNpZ25hbDogZXJyb3Iuc2lnbmFsLCB0aW1lZE91dDogZXJyb3IudGltZWRPdXR9LFxuXHRcdFx0Z2V0QnVmZmVyZWREYXRhKHN0ZG91dCwgc3Rkb3V0UHJvbWlzZSksXG5cdFx0XHRnZXRCdWZmZXJlZERhdGEoc3RkZXJyLCBzdGRlcnJQcm9taXNlKSxcblx0XHRcdGdldEJ1ZmZlcmVkRGF0YShhbGwsIGFsbFByb21pc2UpLFxuXHRcdF0pO1xuXHR9XG59O1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci10b3AtbGV2ZWwtYXdhaXRcbmNvbnN0IG5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSAoYXN5bmMgKCkgPT4ge30pKCkuY29uc3RydWN0b3IucHJvdG90eXBlO1xuXG5jb25zdCBkZXNjcmlwdG9ycyA9IFsndGhlbicsICdjYXRjaCcsICdmaW5hbGx5J10ubWFwKHByb3BlcnR5ID0+IFtcblx0cHJvcGVydHksXG5cdFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hdGl2ZVByb21pc2VQcm90b3R5cGUsIHByb3BlcnR5KSxcbl0pO1xuXG4vLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgbWl4aW4gb2YgYGNoaWxkUHJvY2Vzc2AgYW5kIGBQcm9taXNlYFxuZXhwb3J0IGNvbnN0IG1lcmdlUHJvbWlzZSA9IChzcGF3bmVkLCBwcm9taXNlKSA9PiB7XG5cdGZvciAoY29uc3QgW3Byb3BlcnR5LCBkZXNjcmlwdG9yXSBvZiBkZXNjcmlwdG9ycykge1xuXHRcdC8vIFN0YXJ0aW5nIHRoZSBtYWluIGBwcm9taXNlYCBpcyBkZWZlcnJlZCB0byBhdm9pZCBjb25zdW1pbmcgc3RyZWFtc1xuXHRcdGNvbnN0IHZhbHVlID0gdHlwZW9mIHByb21pc2UgPT09ICdmdW5jdGlvbidcblx0XHRcdD8gKC4uLmFyZ3MpID0+IFJlZmxlY3QuYXBwbHkoZGVzY3JpcHRvci52YWx1ZSwgcHJvbWlzZSgpLCBhcmdzKVxuXHRcdFx0OiBkZXNjcmlwdG9yLnZhbHVlLmJpbmQocHJvbWlzZSk7XG5cblx0XHRSZWZsZWN0LmRlZmluZVByb3BlcnR5KHNwYXduZWQsIHByb3BlcnR5LCB7Li4uZGVzY3JpcHRvciwgdmFsdWV9KTtcblx0fVxufTtcblxuLy8gVXNlIHByb21pc2VzIGluc3RlYWQgb2YgYGNoaWxkX3Byb2Nlc3NgIGV2ZW50c1xuZXhwb3J0IGNvbnN0IGdldFNwYXduZWRQcm9taXNlID0gc3Bhd25lZCA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdHNwYXduZWQub24oJ2V4aXQnLCAoZXhpdENvZGUsIHNpZ25hbCkgPT4ge1xuXHRcdHJlc29sdmUoe2V4aXRDb2RlLCBzaWduYWx9KTtcblx0fSk7XG5cblx0c3Bhd25lZC5vbignZXJyb3InLCBlcnJvciA9PiB7XG5cdFx0cmVqZWN0KGVycm9yKTtcblx0fSk7XG5cblx0aWYgKHNwYXduZWQuc3RkaW4pIHtcblx0XHRzcGF3bmVkLnN0ZGluLm9uKCdlcnJvcicsIGVycm9yID0+IHtcblx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0fSk7XG5cdH1cbn0pO1xuIiwgImltcG9ydCB7QnVmZmVyfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQge0NoaWxkUHJvY2Vzc30gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuY29uc3Qgbm9ybWFsaXplQXJncyA9IChmaWxlLCBhcmdzID0gW10pID0+IHtcblx0aWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpKSB7XG5cdFx0cmV0dXJuIFtmaWxlXTtcblx0fVxuXG5cdHJldHVybiBbZmlsZSwgLi4uYXJnc107XG59O1xuXG5jb25zdCBOT19FU0NBUEVfUkVHRVhQID0gL15bXFx3Li1dKyQvO1xuY29uc3QgRE9VQkxFX1FVT1RFU19SRUdFWFAgPSAvXCIvZztcblxuY29uc3QgZXNjYXBlQXJnID0gYXJnID0+IHtcblx0aWYgKHR5cGVvZiBhcmcgIT09ICdzdHJpbmcnIHx8IE5PX0VTQ0FQRV9SRUdFWFAudGVzdChhcmcpKSB7XG5cdFx0cmV0dXJuIGFyZztcblx0fVxuXG5cdHJldHVybiBgXCIke2FyZy5yZXBsYWNlKERPVUJMRV9RVU9URVNfUkVHRVhQLCAnXFxcXFwiJyl9XCJgO1xufTtcblxuZXhwb3J0IGNvbnN0IGpvaW5Db21tYW5kID0gKGZpbGUsIGFyZ3MpID0+IG5vcm1hbGl6ZUFyZ3MoZmlsZSwgYXJncykuam9pbignICcpO1xuXG5leHBvcnQgY29uc3QgZ2V0RXNjYXBlZENvbW1hbmQgPSAoZmlsZSwgYXJncykgPT4gbm9ybWFsaXplQXJncyhmaWxlLCBhcmdzKS5tYXAoYXJnID0+IGVzY2FwZUFyZyhhcmcpKS5qb2luKCcgJyk7XG5cbmNvbnN0IFNQQUNFU19SRUdFWFAgPSAvICsvZztcblxuLy8gSGFuZGxlIGBleGVjYUNvbW1hbmQoKWBcbmV4cG9ydCBjb25zdCBwYXJzZUNvbW1hbmQgPSBjb21tYW5kID0+IHtcblx0Y29uc3QgdG9rZW5zID0gW107XG5cdGZvciAoY29uc3QgdG9rZW4gb2YgY29tbWFuZC50cmltKCkuc3BsaXQoU1BBQ0VTX1JFR0VYUCkpIHtcblx0XHQvLyBBbGxvdyBzcGFjZXMgdG8gYmUgZXNjYXBlZCBieSBhIGJhY2tzbGFzaCBpZiBub3QgbWVhbnQgYXMgYSBkZWxpbWl0ZXJcblx0XHRjb25zdCBwcmV2aW91c1Rva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcblx0XHRpZiAocHJldmlvdXNUb2tlbiAmJiBwcmV2aW91c1Rva2VuLmVuZHNXaXRoKCdcXFxcJykpIHtcblx0XHRcdC8vIE1lcmdlIHByZXZpb3VzIHRva2VuIHdpdGggY3VycmVudCBvbmVcblx0XHRcdHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0gPSBgJHtwcmV2aW91c1Rva2VuLnNsaWNlKDAsIC0xKX0gJHt0b2tlbn1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0b2tlbnMucHVzaCh0b2tlbik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRva2Vucztcbn07XG5cbmNvbnN0IHBhcnNlRXhwcmVzc2lvbiA9IGV4cHJlc3Npb24gPT4ge1xuXHRjb25zdCB0eXBlT2ZFeHByZXNzaW9uID0gdHlwZW9mIGV4cHJlc3Npb247XG5cblx0aWYgKHR5cGVPZkV4cHJlc3Npb24gPT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuIGV4cHJlc3Npb247XG5cdH1cblxuXHRpZiAodHlwZU9mRXhwcmVzc2lvbiA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gU3RyaW5nKGV4cHJlc3Npb24pO1xuXHR9XG5cblx0aWYgKFxuXHRcdHR5cGVPZkV4cHJlc3Npb24gPT09ICdvYmplY3QnXG5cdFx0JiYgZXhwcmVzc2lvbiAhPT0gbnVsbFxuXHRcdCYmICEoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIENoaWxkUHJvY2Vzcylcblx0XHQmJiAnc3Rkb3V0JyBpbiBleHByZXNzaW9uXG5cdCkge1xuXHRcdGNvbnN0IHR5cGVPZlN0ZG91dCA9IHR5cGVvZiBleHByZXNzaW9uLnN0ZG91dDtcblxuXHRcdGlmICh0eXBlT2ZTdGRvdXQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gZXhwcmVzc2lvbi5zdGRvdXQ7XG5cdFx0fVxuXG5cdFx0aWYgKEJ1ZmZlci5pc0J1ZmZlcihleHByZXNzaW9uLnN0ZG91dCkpIHtcblx0XHRcdHJldHVybiBleHByZXNzaW9uLnN0ZG91dC50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgXCIke3R5cGVPZlN0ZG91dH1cIiBzdGRvdXQgaW4gdGVtcGxhdGUgZXhwcmVzc2lvbmApO1xuXHR9XG5cblx0dGhyb3cgbmV3IFR5cGVFcnJvcihgVW5leHBlY3RlZCBcIiR7dHlwZU9mRXhwcmVzc2lvbn1cIiBpbiB0ZW1wbGF0ZSBleHByZXNzaW9uYCk7XG59O1xuXG5jb25zdCBjb25jYXRUb2tlbnMgPSAodG9rZW5zLCBuZXh0VG9rZW5zLCBpc05ldykgPT4gaXNOZXcgfHwgdG9rZW5zLmxlbmd0aCA9PT0gMCB8fCBuZXh0VG9rZW5zLmxlbmd0aCA9PT0gMFxuXHQ/IFsuLi50b2tlbnMsIC4uLm5leHRUb2tlbnNdXG5cdDogW1xuXHRcdC4uLnRva2Vucy5zbGljZSgwLCAtMSksXG5cdFx0YCR7dG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXX0ke25leHRUb2tlbnNbMF19YCxcblx0XHQuLi5uZXh0VG9rZW5zLnNsaWNlKDEpLFxuXHRdO1xuXG5jb25zdCBwYXJzZVRlbXBsYXRlID0gKHt0ZW1wbGF0ZXMsIGV4cHJlc3Npb25zLCB0b2tlbnMsIGluZGV4LCB0ZW1wbGF0ZX0pID0+IHtcblx0Y29uc3QgdGVtcGxhdGVTdHJpbmcgPSB0ZW1wbGF0ZSA/PyB0ZW1wbGF0ZXMucmF3W2luZGV4XTtcblx0Y29uc3QgdGVtcGxhdGVUb2tlbnMgPSB0ZW1wbGF0ZVN0cmluZy5zcGxpdChTUEFDRVNfUkVHRVhQKS5maWx0ZXIoQm9vbGVhbik7XG5cdGNvbnN0IG5ld1Rva2VucyA9IGNvbmNhdFRva2Vucyhcblx0XHR0b2tlbnMsXG5cdFx0dGVtcGxhdGVUb2tlbnMsXG5cdFx0dGVtcGxhdGVTdHJpbmcuc3RhcnRzV2l0aCgnICcpLFxuXHQpO1xuXG5cdGlmIChpbmRleCA9PT0gZXhwcmVzc2lvbnMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIG5ld1Rva2Vucztcblx0fVxuXG5cdGNvbnN0IGV4cHJlc3Npb24gPSBleHByZXNzaW9uc1tpbmRleF07XG5cdGNvbnN0IGV4cHJlc3Npb25Ub2tlbnMgPSBBcnJheS5pc0FycmF5KGV4cHJlc3Npb24pXG5cdFx0PyBleHByZXNzaW9uLm1hcChleHByZXNzaW9uID0+IHBhcnNlRXhwcmVzc2lvbihleHByZXNzaW9uKSlcblx0XHQ6IFtwYXJzZUV4cHJlc3Npb24oZXhwcmVzc2lvbildO1xuXHRyZXR1cm4gY29uY2F0VG9rZW5zKFxuXHRcdG5ld1Rva2Vucyxcblx0XHRleHByZXNzaW9uVG9rZW5zLFxuXHRcdHRlbXBsYXRlU3RyaW5nLmVuZHNXaXRoKCcgJyksXG5cdCk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VUZW1wbGF0ZXMgPSAodGVtcGxhdGVzLCBleHByZXNzaW9ucykgPT4ge1xuXHRsZXQgdG9rZW5zID0gW107XG5cblx0Zm9yIChjb25zdCBbaW5kZXgsIHRlbXBsYXRlXSBvZiB0ZW1wbGF0ZXMuZW50cmllcygpKSB7XG5cdFx0dG9rZW5zID0gcGFyc2VUZW1wbGF0ZSh7dGVtcGxhdGVzLCBleHByZXNzaW9ucywgdG9rZW5zLCBpbmRleCwgdGVtcGxhdGV9KTtcblx0fVxuXG5cdHJldHVybiB0b2tlbnM7XG59O1xuXG4iLCAiaW1wb3J0IHtkZWJ1Z2xvZ30gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCB2ZXJib3NlRGVmYXVsdCA9IGRlYnVnbG9nKCdleGVjYScpLmVuYWJsZWQ7XG5cbmNvbnN0IHBhZEZpZWxkID0gKGZpZWxkLCBwYWRkaW5nKSA9PiBTdHJpbmcoZmllbGQpLnBhZFN0YXJ0KHBhZGRpbmcsICcwJyk7XG5cbmNvbnN0IGdldFRpbWVzdGFtcCA9ICgpID0+IHtcblx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdHJldHVybiBgJHtwYWRGaWVsZChkYXRlLmdldEhvdXJzKCksIDIpfToke3BhZEZpZWxkKGRhdGUuZ2V0TWludXRlcygpLCAyKX06JHtwYWRGaWVsZChkYXRlLmdldFNlY29uZHMoKSwgMil9LiR7cGFkRmllbGQoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSwgMyl9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBsb2dDb21tYW5kID0gKGVzY2FwZWRDb21tYW5kLCB7dmVyYm9zZX0pID0+IHtcblx0aWYgKCF2ZXJib3NlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0cHJvY2Vzcy5zdGRlcnIud3JpdGUoYFske2dldFRpbWVzdGFtcCgpfV0gJHtlc2NhcGVkQ29tbWFuZH1cXG5gKTtcbn07XG4iLCAiaW1wb3J0IHtcbiAgQnVpbGRTdGVwT3V0cHV0LFxuICBFbnRyeXBvaW50R3JvdXAsXG4gIEludGVybmFsQ29uZmlnLFxuICBXeHREZXZTZXJ2ZXIsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IFNjcmlwdGluZyB9IGZyb20gJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc7XG5pbXBvcnQge1xuICBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aCxcbiAgcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24sXG59IGZyb20gJy4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IHtcbiAgZ2V0Q29udGVudFNjcmlwdENzc0ZpbGVzLFxuICBnZXRDb250ZW50U2NyaXB0c0Nzc01hcCxcbn0gZnJvbSAnLi91dGlscy9tYW5pZmVzdCc7XG5pbXBvcnQgeyBidWlsZEludGVybmFsIH0gZnJvbSAnLi9idWlsZCc7XG5pbXBvcnQgeyBjcmVhdGVFeHRlbnNpb25SdW5uZXIgfSBmcm9tICcuL3J1bm5lcnMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2VydmVySW5mbygpOiBQcm9taXNlPFNlcnZlckluZm8+IHtcbiAgY29uc3QgeyBkZWZhdWx0OiBnZXRQb3J0LCBwb3J0TnVtYmVycyB9ID0gYXdhaXQgaW1wb3J0KCdnZXQtcG9ydCcpO1xuICBjb25zdCBwb3J0ID0gYXdhaXQgZ2V0UG9ydCh7IHBvcnQ6IHBvcnROdW1iZXJzKDMwMDAsIDMwMTApIH0pO1xuICBjb25zdCBob3N0bmFtZSA9ICdsb2NhbGhvc3QnO1xuICBjb25zdCBvcmlnaW4gPSBgaHR0cDovLyR7aG9zdG5hbWV9OiR7cG9ydH1gO1xuICBjb25zdCBzZXJ2ZXJDb25maWc6IHZpdGUuSW5saW5lQ29uZmlnID0ge1xuICAgIHNlcnZlcjoge1xuICAgICAgb3JpZ2luLFxuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBwb3J0LFxuICAgIGhvc3RuYW1lLFxuICAgIG9yaWdpbixcbiAgICB2aXRlU2VydmVyQ29uZmlnOiBzZXJ2ZXJDb25maWcsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cFNlcnZlcihcbiAgc2VydmVySW5mbzogU2VydmVySW5mbyxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8V3h0RGV2U2VydmVyPiB7XG4gIGNvbnN0IHJ1bm5lciA9IGF3YWl0IGNyZWF0ZUV4dGVuc2lvblJ1bm5lcihjb25maWcpO1xuXG4gIGNvbnN0IHZpdGVTZXJ2ZXIgPSBhd2FpdCB2aXRlLmNyZWF0ZVNlcnZlcihcbiAgICB2aXRlLm1lcmdlQ29uZmlnKHNlcnZlckluZm8sIGF3YWl0IGNvbmZpZy52aXRlKGNvbmZpZy5lbnYpKSxcbiAgKTtcblxuICBjb25zdCBzdGFydCA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB2aXRlU2VydmVyLmxpc3RlbihzZXJ2ZXIucG9ydCk7XG4gICAgY29uZmlnLmxvZ2dlci5zdWNjZXNzKGBTdGFydGVkIGRldiBzZXJ2ZXIgQCAke3NlcnZlckluZm8ub3JpZ2lufWApO1xuXG4gICAgc2VydmVyLmN1cnJlbnRPdXRwdXQgPSBhd2FpdCBidWlsZEludGVybmFsKGNvbmZpZyk7XG4gICAgYXdhaXQgcnVubmVyLm9wZW5Ccm93c2VyKGNvbmZpZyk7XG4gIH07XG5cbiAgY29uc3QgcmVsb2FkRXh0ZW5zaW9uID0gKCkgPT4ge1xuICAgIHZpdGVTZXJ2ZXIud3Muc2VuZCgnd3h0OnJlbG9hZC1leHRlbnNpb24nKTtcbiAgfTtcbiAgY29uc3QgcmVsb2FkUGFnZSA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAvLyBDYW4ndCB1c2UgVml0ZSdzIGJ1aWx0LWluIFwiZnVsbC1yZWxvYWRcIiBldmVudCBiZWNhdXNlIGl0IGRvZXNuJ3QgbGlrZSBvdXIgcGF0aHMsIGl0IGV4cGVjdHNcbiAgICAvLyBwYXRocyBlbmRpbmcgaW4gXCIvaW5kZXguaHRtbFwiXG4gICAgdml0ZVNlcnZlci53cy5zZW5kKCd3eHQ6cmVsb2FkLXBhZ2UnLCBwYXRoKTtcbiAgfTtcbiAgY29uc3QgcmVsb2FkQ29udGVudFNjcmlwdCA9IChcbiAgICBjb250ZW50U2NyaXB0OiBPbWl0PFNjcmlwdGluZy5SZWdpc3RlcmVkQ29udGVudFNjcmlwdCwgJ2lkJz4sXG4gICkgPT4ge1xuICAgIHZpdGVTZXJ2ZXIud3Muc2VuZCgnd3h0OnJlbG9hZC1jb250ZW50LXNjcmlwdCcsIGNvbnRlbnRTY3JpcHQpO1xuICB9O1xuXG4gIGNvbnN0IHNlcnZlcjogV3h0RGV2U2VydmVyID0ge1xuICAgIC4uLnZpdGVTZXJ2ZXIsXG4gICAgc3RhcnQsXG4gICAgY3VycmVudE91dHB1dDoge1xuICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgbWFuaWZlc3RfdmVyc2lvbjogMyxcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZlcnNpb246ICcnLFxuICAgICAgfSxcbiAgICAgIHB1YmxpY0Fzc2V0czogW10sXG4gICAgICBzdGVwczogW10sXG4gICAgfSxcbiAgICBwb3J0OiBzZXJ2ZXJJbmZvLnBvcnQsXG4gICAgaG9zdG5hbWU6IHNlcnZlckluZm8uaG9zdG5hbWUsXG4gICAgb3JpZ2luOiBzZXJ2ZXJJbmZvLm9yaWdpbixcbiAgICByZWxvYWRFeHRlbnNpb24sXG4gICAgcmVsb2FkUGFnZSxcbiAgICByZWxvYWRDb250ZW50U2NyaXB0LFxuICB9O1xuXG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbi8qKlxuICogRnJvbSB0aGUgc2VydmVyLCB0ZWxsIHRoZSBjbGllbnQgdG8gcmVsb2FkIGNvbnRlbnQgc2NyaXB0cyBmcm9tIHRoZSBwcm92aWRlZCBidWlsZCBzdGVwIG91dHB1dHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWRDb250ZW50U2NyaXB0cyhcbiAgc3RlcHM6IEJ1aWxkU3RlcE91dHB1dFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBzZXJ2ZXI6IFd4dERldlNlcnZlcixcbikge1xuICBpZiAoY29uZmlnLm1hbmlmZXN0VmVyc2lvbiA9PT0gMykge1xuICAgIHN0ZXBzLmZvckVhY2goKHN0ZXApID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gc3RlcC5lbnRyeXBvaW50cztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSB8fCBlbnRyeS50eXBlICE9PSAnY29udGVudC1zY3JpcHQnKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGpzID0gW2dldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5LCBjb25maWcub3V0RGlyLCAnLmpzJyldO1xuICAgICAgY29uc3QgY3NzTWFwID0gZ2V0Q29udGVudFNjcmlwdHNDc3NNYXAoc2VydmVyLmN1cnJlbnRPdXRwdXQsIFtlbnRyeV0pO1xuICAgICAgY29uc3QgY3NzID0gZ2V0Q29udGVudFNjcmlwdENzc0ZpbGVzKFtlbnRyeV0sIGNzc01hcCk7XG5cbiAgICAgIHNlcnZlci5yZWxvYWRDb250ZW50U2NyaXB0KHtcbiAgICAgICAgYWxsRnJhbWVzOiByZXNvbHZlUGVyQnJvd3Nlck9wdGlvbihcbiAgICAgICAgICBlbnRyeS5vcHRpb25zLmFsbEZyYW1lcyxcbiAgICAgICAgICBjb25maWcuYnJvd3NlcixcbiAgICAgICAgKSxcbiAgICAgICAgZXhjbHVkZU1hdGNoZXM6IHJlc29sdmVQZXJCcm93c2VyT3B0aW9uKFxuICAgICAgICAgIGVudHJ5Lm9wdGlvbnMuZXhjbHVkZU1hdGNoZXMsXG4gICAgICAgICAgY29uZmlnLmJyb3dzZXIsXG4gICAgICAgICksXG4gICAgICAgIG1hdGNoZXM6IHJlc29sdmVQZXJCcm93c2VyT3B0aW9uKGVudHJ5Lm9wdGlvbnMubWF0Y2hlcywgY29uZmlnLmJyb3dzZXIpLFxuICAgICAgICBydW5BdDogcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24oZW50cnkub3B0aW9ucy5ydW5BdCwgY29uZmlnLmJyb3dzZXIpLFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBDaHJvbWUgYWNjZXB0cyB0aGlzLCBub3QgdHlwZWQgaW4gd2ViZXh0ZW5zaW9uLXBvbHlmaWxsIChodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2RvY3MvZXh0ZW5zaW9ucy9yZWZlcmVuY2Uvc2NyaXB0aW5nLyN0eXBlLVJlZ2lzdGVyZWRDb250ZW50U2NyaXB0KVxuICAgICAgICB3b3JsZDogcmVzb2x2ZVBlckJyb3dzZXJPcHRpb24oZW50cnkub3B0aW9ucy53b3JsZCwgY29uZmlnLmJyb3dzZXIpLFxuICAgICAgICBqcyxcbiAgICAgICAgY3NzLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc2VydmVyLnJlbG9hZEV4dGVuc2lvbigpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWRIdG1sUGFnZXMoXG4gIGdyb3VwczogRW50cnlwb2ludEdyb3VwW10sXG4gIHNlcnZlcjogV3h0RGV2U2VydmVyLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKSB7XG4gIGdyb3Vwcy5mbGF0KCkuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICBjb25zdCBwYXRoID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoZW50cnksIGNvbmZpZy5vdXREaXIsICcuaHRtbCcpO1xuICAgIHNlcnZlci5yZWxvYWRQYWdlKHBhdGgpO1xuICB9KTtcbn1cblxuaW50ZXJmYWNlIFNlcnZlckluZm8ge1xuICBwb3J0OiBudW1iZXI7XG4gIGhvc3RuYW1lOiBzdHJpbmc7XG4gIG9yaWdpbjogc3RyaW5nO1xuICB2aXRlU2VydmVyQ29uZmlnOiB2aXRlLklubGluZUNvbmZpZztcbn1cbiIsICJpbXBvcnQgeyBFeHRlbnNpb25SdW5uZXIgfSBmcm9tICcuL2V4dGVuc2lvbi1ydW5uZXInO1xuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuXG4vKipcbiAqIFRoZSBXU0wgcnVubmVyIGp1c3QgbG9ncyBhIHdhcm5pbmcgbWVzc2FnZSBiZWNhdXNlIGB3ZWItZXh0YCBkb2Vzbid0IHdvcmsgaW4gV1NMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV3NsUnVubmVyKCk6IEV4dGVuc2lvblJ1bm5lciB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgb3BlbkJyb3dzZXIoY29uZmlnKSB7XG4gICAgICBjb25maWcubG9nZ2VyLndhcm4oXG4gICAgICAgIGBDYW5ub3Qgb3BlbiBicm93c2VyIHdoZW4gdXNpbmcgV1NMLiBMb2FkIFwiJHtyZWxhdGl2ZShcbiAgICAgICAgICBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICl9XCIgYXMgYW4gdW5wYWNrZWQgZXh0ZW5zaW9uIG1hbnVhbGx5YCxcbiAgICAgICk7XG4gICAgfSxcbiAgICBhc3luYyBjbG9zZUJyb3dzZXIoKSB7XG4gICAgICAvLyBub29wXG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFdlYkV4dFJ1bkluc3RhbmNlIH0gZnJvbSAnd2ViLWV4dC1ydW4nO1xuaW1wb3J0IHsgRXh0ZW5zaW9uUnVubmVyIH0gZnJvbSAnLi9leHRlbnNpb24tcnVubmVyJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gYEV4dGVuc2lvblJ1bm5lcmAgYmFja2VkIGJ5IGB3ZWItZXh0YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYkV4dFJ1bm5lcigpOiBFeHRlbnNpb25SdW5uZXIge1xuICBsZXQgcnVubmVyOiBXZWJFeHRSdW5JbnN0YW5jZSB8IHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIG9wZW5Ccm93c2VyKGNvbmZpZykge1xuICAgICAgY29uZmlnLmxvZ2dlci5pbmZvKCdPcGVuaW5nIGJyb3dzZXIuLi4nKTtcblxuICAgICAgLy8gVXNlIHRoZSBwbHVnaW4ncyBsb2dnZXIgaW5zdGVhZCBvZiB3ZWItZXh0J3MgYnVpbHQtaW4gb25lLlxuICAgICAgY29uc3Qgd2ViRXh0TG9nZ2VyID0gYXdhaXQgaW1wb3J0KCd3ZWItZXh0LXJ1bi91dGlsL2xvZ2dlcicpO1xuICAgICAgd2ViRXh0TG9nZ2VyLmNvbnNvbGVTdHJlYW0ud3JpdGUgPSAoeyBsZXZlbCwgbXNnLCBuYW1lIH0pID0+IHtcbiAgICAgICAgaWYgKGxldmVsID49IEVSUk9SX0xPR19MRVZFTCkgY29uZmlnLmxvZ2dlci5lcnJvcihuYW1lLCBtc2cpO1xuICAgICAgICBpZiAobGV2ZWwgPj0gV0FSTl9MT0dfTEVWRUwpIGNvbmZpZy5sb2dnZXIud2Fybihtc2cpO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgd3h0VXNlckNvbmZpZyA9IGNvbmZpZy5ydW5uZXJDb25maWcuY29uZmlnO1xuICAgICAgY29uc3QgdXNlckNvbmZpZyA9IHtcbiAgICAgICAgY29uc29sZTogd3h0VXNlckNvbmZpZz8ub3BlbkNvbnNvbGUsXG4gICAgICAgIGRldnRvb2xzOiB3eHRVc2VyQ29uZmlnPy5vcGVuRGV2dG9vbHMsXG4gICAgICAgIHN0YXJ0VXJsOiB3eHRVc2VyQ29uZmlnPy5zdGFydFVybHMsXG4gICAgICAgIC4uLihjb25maWcuYnJvd3NlciA9PT0gJ2ZpcmVmb3gnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGZpcmVmb3g6IHd4dFVzZXJDb25maWc/LmJpbmFyaWVzPy5maXJlZm94LFxuICAgICAgICAgICAgICBmaXJlZm94UHJvZmlsZTogd3h0VXNlckNvbmZpZz8uZmlyZWZveFByb2ZpbGUsXG4gICAgICAgICAgICAgIHByZWZzOiB3eHRVc2VyQ29uZmlnPy5maXJlZm94UHJlZnMsXG4gICAgICAgICAgICAgIGFyZ3M6IHd4dFVzZXJDb25maWc/LmZpcmVmb3hBcmdzLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBjaHJvbWl1bUJpbmFyeTogd3h0VXNlckNvbmZpZz8uYmluYXJpZXM/Lltjb25maWcuYnJvd3Nlcl0sXG4gICAgICAgICAgICAgIGNocm9taXVtUHJvZmlsZTogd3h0VXNlckNvbmZpZz8uY2hyb21pdW1Qcm9maWxlLFxuICAgICAgICAgICAgICBhcmdzOiB3eHRVc2VyQ29uZmlnPy5jaHJvbWl1bUFyZ3MsXG4gICAgICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZpbmFsQ29uZmlnID0ge1xuICAgICAgICAuLi51c2VyQ29uZmlnLFxuICAgICAgICB0YXJnZXQ6IGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcgPyAnZmlyZWZveC1kZXNrdG9wJyA6ICdjaHJvbWl1bScsXG4gICAgICAgIHNvdXJjZURpcjogY29uZmlnLm91dERpcixcbiAgICAgICAgLy8gV1hUIGhhbmRsZXMgcmVsb2Fkcywgc28gZGlzYWJsZSBhdXRvLXJlbG9hZCBiZWhhdmlvcnMgaW4gd2ViLWV4dFxuICAgICAgICBub1JlbG9hZDogdHJ1ZSxcbiAgICAgICAgbm9JbnB1dDogdHJ1ZSxcbiAgICAgIH07XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAvLyBEb24ndCBjYWxsIGBwcm9jZXNzLmV4aXQoMClgIGFmdGVyIHN0YXJ0aW5nIHdlYi1leHRcbiAgICAgICAgc2hvdWxkRXhpdFByb2dyYW06IGZhbHNlLFxuICAgICAgfTtcbiAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoJ3dlYi1leHQgY29uZmlnOicsIGZpbmFsQ29uZmlnKTtcbiAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoJ3dlYi1leHQgb3B0aW9uczonLCBvcHRpb25zKTtcblxuICAgICAgY29uc3Qgd2ViRXh0ID0gYXdhaXQgaW1wb3J0KCd3ZWItZXh0LXJ1bicpO1xuICAgICAgcnVubmVyID0gYXdhaXQgd2ViRXh0LmRlZmF1bHQuY21kLnJ1bihmaW5hbENvbmZpZywgb3B0aW9ucyk7XG5cbiAgICAgIGNvbmZpZy5sb2dnZXIuc3VjY2VzcygnT3BlbmVkIScpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZUJyb3dzZXIoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcnVubmVyPy5leGl0KCk7XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvd2ViLWV4dC9ibG9iL2UzN2U2MGEyNzM4NDc4ZjUxMmYxMjU1YzUzNzEzMzMyMWYzMDE3NzEvc3JjL3V0aWwvbG9nZ2VyLmpzI0wxMlxuY29uc3QgV0FSTl9MT0dfTEVWRUwgPSA0MDtcbmNvbnN0IEVSUk9SX0xPR19MRVZFTCA9IDUwO1xuIiwgImltcG9ydCB7IEV4dGVuc2lvblJ1bm5lciB9IGZyb20gJy4vZXh0ZW5zaW9uLXJ1bm5lcic7XG5pbXBvcnQgeyByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbi8qKlxuICogVGhlIFNhZmFyaSBydW5uZXIganVzdCBsb2dzIGEgd2FybmluZyBtZXNzYWdlIGJlY2F1c2UgYHdlYi1leHRgIGRvZXNuJ3Qgd29yayB3aXRoIFNhZmFyaS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNhZmFyaVJ1bm5lcigpOiBFeHRlbnNpb25SdW5uZXIge1xuICByZXR1cm4ge1xuICAgIGFzeW5jIG9wZW5Ccm93c2VyKGNvbmZpZykge1xuICAgICAgY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICBgQ2Fubm90IFNhZmFyaSB1c2luZyB3ZWItZXh0LiBMb2FkIFwiJHtyZWxhdGl2ZShcbiAgICAgICAgICBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICl9XCIgYXMgYW4gdW5wYWNrZWQgZXh0ZW5zaW9uIG1hbnVhbGx5YCxcbiAgICAgICk7XG4gICAgfSxcbiAgICBhc3luYyBjbG9zZUJyb3dzZXIoKSB7XG4gICAgICAvLyBub29wXG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBFeHRlbnNpb25SdW5uZXIgfSBmcm9tICcuL2V4dGVuc2lvbi1ydW5uZXInO1xuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuXG4vKipcbiAqIFRoZSBtYW51YWwgcnVubmVyIHRlbGxzIHRoZSB1c2VyIHRvIGxvYWQgdGhlIHVucGFja2VkIGV4dGVuc2lvbiBtYW51YWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1hbnVhbFJ1bm5lcigpOiBFeHRlbnNpb25SdW5uZXIge1xuICByZXR1cm4ge1xuICAgIGFzeW5jIG9wZW5Ccm93c2VyKGNvbmZpZykge1xuICAgICAgY29uZmlnLmxvZ2dlci5pbmZvKFxuICAgICAgICBgTG9hZCBcIiR7cmVsYXRpdmUoXG4gICAgICAgICAgcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICBjb25maWcub3V0RGlyLFxuICAgICAgICApfVwiIGFzIGFuIHVucGFja2VkIGV4dGVuc2lvbiBtYW51YWxseWAsXG4gICAgICApO1xuICAgIH0sXG4gICAgYXN5bmMgY2xvc2VCcm93c2VyKCkge1xuICAgICAgLy8gbm9vcFxuICAgIH0sXG4gIH07XG59XG4iLCAiLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiBydW5uaW5nIG9uIFdTTCBvciBXU0wyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNXc2woKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHsgZGVmYXVsdDogaXNXc2wgfSA9IGF3YWl0IGltcG9ydCgnaXMtd3NsJyk7IC8vIEVTTSBvbmx5LCByZXF1aXJlcyBkeW5hbWljIGltcG9ydFxuICByZXR1cm4gaXNXc2w7XG59XG4iLCAiaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBFeHRlbnNpb25SdW5uZXIgfSBmcm9tICcuL2V4dGVuc2lvbi1ydW5uZXInO1xuaW1wb3J0IHsgY3JlYXRlV3NsUnVubmVyIH0gZnJvbSAnLi93c2wnO1xuaW1wb3J0IHsgY3JlYXRlV2ViRXh0UnVubmVyIH0gZnJvbSAnLi93ZWItZXh0JztcbmltcG9ydCB7IGNyZWF0ZVNhZmFyaVJ1bm5lciB9IGZyb20gJy4vc2FmYXJpJztcbmltcG9ydCB7IGNyZWF0ZU1hbnVhbFJ1bm5lciB9IGZyb20gJy4vbWFudWFsJztcbmltcG9ydCB7IGlzV3NsIH0gZnJvbSAnLi4vdXRpbHMvd3NsJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUV4dGVuc2lvblJ1bm5lcihcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8RXh0ZW5zaW9uUnVubmVyPiB7XG4gIGlmIChjb25maWcuYnJvd3NlciA9PT0gJ3NhZmFyaScpIHJldHVybiBjcmVhdGVTYWZhcmlSdW5uZXIoKTtcblxuICBpZiAoYXdhaXQgaXNXc2woKSkgcmV0dXJuIGNyZWF0ZVdzbFJ1bm5lcigpO1xuICBpZiAoY29uZmlnLnJ1bm5lckNvbmZpZy5jb25maWc/LmRpc2FibGVkKSByZXR1cm4gY3JlYXRlTWFudWFsUnVubmVyKCk7XG5cbiAgcmV0dXJuIGNyZWF0ZVdlYkV4dFJ1bm5lcigpO1xufVxuIiwgImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgZ2xvYiBmcm9tICdmYXN0LWdsb2InO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGNvbnNvbGEgfSBmcm9tICdjb25zb2xhJztcbmltcG9ydCBwYyBmcm9tICdwaWNvY29sb3JzJztcblxuLyoqXG4gKiBSZW1vdmUgZ2VuZXJhdGVkL3RlbXAgZmlsZXMgZnJvbSB0aGUgZGlyZWN0b3J5LlxuICpcbiAqIEBwYXJhbSByb290IFRoZSBkaXJlY3RvcnkgdG8gbG9vayBmb3IgZ2VuZXJhdGVkL3RlbXAgZmlsZXMgaW4uIERlZmF1bHRzIHRvIGBwcm9jZXNzLmN3ZCgpYC4gQ2FuIGJlIHJlbGF0aXZlIHRvIGBwcm9jZXNzLmN3ZCgpYCBvciBhYnNvbHV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsZWFuKHJvb3QgPSBwcm9jZXNzLmN3ZCgpKSB7XG4gIGNvbnNvbGEuaW5mbygnQ2xlYW5pbmcgUHJvamVjdCcpO1xuXG4gIGNvbnN0IHRlbXBEaXJzID0gW1xuICAgICdub2RlX21vZHVsZXMvLnZpdGUnLFxuICAgICdub2RlX21vZHVsZXMvLmNhY2hlJyxcbiAgICAnKiovLnd4dCcsXG4gICAgJy5vdXRwdXQvKicsXG4gIF07XG4gIGNvbnNvbGEuZGVidWcoJ0xvb2tpbmcgZm9yOicsIHRlbXBEaXJzLm1hcChwYy5jeWFuKS5qb2luKCcsICcpKTtcbiAgY29uc3QgZGlyZWN0b3JpZXMgPSBhd2FpdCBnbG9iKHRlbXBEaXJzLCB7XG4gICAgY3dkOiBwYXRoLnJlc29sdmUocm9vdCksXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gICAgb25seURpcmVjdG9yaWVzOiB0cnVlLFxuICAgIGRlZXA6IDIsXG4gIH0pO1xuICBpZiAoZGlyZWN0b3JpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sYS5kZWJ1ZygnTm8gZ2VuZXJhdGVkIGZpbGVzIGZvdW5kLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnNvbGEuZGVidWcoXG4gICAgJ0ZvdW5kOicsXG4gICAgZGlyZWN0b3JpZXMubWFwKChkaXIpID0+IHBjLmN5YW4ocGF0aC5yZWxhdGl2ZShyb290LCBkaXIpKSkuam9pbignLCAnKSxcbiAgKTtcbiAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2YgZGlyZWN0b3JpZXMpIHtcbiAgICBhd2FpdCBmcy5ybShkaXJlY3RvcnksIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zb2xhLmRlYnVnKCdEZWxldGVkICcgKyBwYy5jeWFuKHBhdGgucmVsYXRpdmUocm9vdCwgZGlyZWN0b3J5KSkpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTG9nTGV2ZWxzLCBjb25zb2xhIH0gZnJvbSAnY29uc29sYSc7XG5pbXBvcnQgeyBwcmludEhlYWRlciB9IGZyb20gJy4uLy4uL2NvcmUvbG9nL3ByaW50SGVhZGVyJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9mb3JtYXREdXJhdGlvbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb21tYW5kPFRBcmdzIGV4dGVuZHMgYW55W10+KFxuICBjYjogKC4uLmFyZ3M6IFRBcmdzKSA9PiB2b2lkIHwgYm9vbGVhbiB8IFByb21pc2U8dm9pZCB8IGJvb2xlYW4+LFxuICBvcHRpb25zPzoge1xuICAgIGRpc2FibGVGaW5pc2hlZExvZz86IGJvb2xlYW47XG4gIH0sXG4pIHtcbiAgcmV0dXJuIGFzeW5jICguLi5hcmdzOiBUQXJncykgPT4ge1xuICAgIC8vIEVuYWJsZSBjb25zb2xhJ3MgZGVidWcgbW9kZSBnbG9iYWxseSBhdCB0aGUgc3RhcnQgb2YgYWxsIGNvbW1hbmRzIHdoZW4gdGhlIGAtLWRlYnVnYCBmbGFnIGlzXG4gICAgLy8gcGFzc2VkXG4gICAgY29uc3QgaXNEZWJ1ZyA9ICEhYXJncy5maW5kKChhcmcpID0+IGFyZz8uZGVidWcpO1xuICAgIGlmIChpc0RlYnVnKSB7XG4gICAgICBjb25zb2xhLmxldmVsID0gTG9nTGV2ZWxzLmRlYnVnO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdHJ5IHtcbiAgICAgIHByaW50SGVhZGVyKCk7XG5cbiAgICAgIGNvbnN0IG9uZ29pbmcgPSBhd2FpdCBjYiguLi5hcmdzKTtcblxuICAgICAgaWYgKCFvbmdvaW5nICYmICFvcHRpb25zPy5kaXNhYmxlRmluaXNoZWRMb2cpXG4gICAgICAgIGNvbnNvbGEuc3VjY2VzcyhcbiAgICAgICAgICBgRmluaXNoZWQgaW4gJHtmb3JtYXREdXJhdGlvbihEYXRlLm5vdygpIC0gc3RhcnRUaW1lKX1gLFxuICAgICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sYS5mYWlsKFxuICAgICAgICBgQ29tbWFuZCBmYWlsZWQgYWZ0ZXIgJHtmb3JtYXREdXJhdGlvbihEYXRlLm5vdygpIC0gc3RhcnRUaW1lKX1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGEuZXJyb3IoZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH07XG59XG4iLCAiaW1wb3J0IHBjIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IGNvbnNvbGEgfSBmcm9tICdjb25zb2xhJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50SGVhZGVyKCkge1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xhLmxvZyhgJHtwYy5ncmF5KCdXWFQnKX0gJHtwYy5ncmF5KHBjLmJvbGQodmVyc2lvbikpfWApO1xufVxuIiwgImltcG9ydCAqIGFzIHd4dCBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5cbmV4cG9ydCBjb25zdCBidWlsZCA9IGRlZmluZUNvbW1hbmQ8XG4gIFtcbiAgICByb290OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZmxhZ3M6IHtcbiAgICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgICBjb25maWc/OiBzdHJpbmc7XG4gICAgICBicm93c2VyPzogd3h0LlRhcmdldEJyb3dzZXI7XG4gICAgICBtdjM/OiBib29sZWFuO1xuICAgICAgbXYyPzogYm9vbGVhbjtcbiAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICAgIGFuYWx5emU/OiBib29sZWFuO1xuICAgIH0sXG4gIF1cbj4oYXN5bmMgKHJvb3QsIGZsYWdzKSA9PiB7XG4gIGNvbnN0IGNsaUNvbmZpZzogd3h0LklubGluZUNvbmZpZyA9IHtcbiAgICByb290LFxuICAgIG1vZGU6IGZsYWdzLm1vZGUsXG4gICAgYnJvd3NlcjogZmxhZ3MuYnJvd3NlcixcbiAgICBtYW5pZmVzdFZlcnNpb246IGZsYWdzLm12MyA/IDMgOiBmbGFncy5tdjIgPyAyIDogdW5kZWZpbmVkLFxuICAgIGNvbmZpZ0ZpbGU6IGZsYWdzLmNvbmZpZyxcbiAgICBkZWJ1ZzogZmxhZ3MuZGVidWcsXG4gICAgYW5hbHlzaXM6IHtcbiAgICAgIGVuYWJsZWQ6IGZsYWdzLmFuYWx5emUsXG4gICAgfSxcbiAgfTtcblxuICBhd2FpdCB3eHQuYnVpbGQoY2xpQ29uZmlnKTtcbn0pO1xuIiwgImltcG9ydCAqIGFzIHd4dCBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5cbmV4cG9ydCBjb25zdCBkZXYgPSBkZWZpbmVDb21tYW5kPFxuICBbXG4gICAgcm9vdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGZsYWdzOiB7XG4gICAgICBtb2RlPzogc3RyaW5nO1xuICAgICAgY29uZmlnPzogc3RyaW5nO1xuICAgICAgYnJvd3Nlcj86IHd4dC5UYXJnZXRCcm93c2VyO1xuICAgICAgbXYzPzogYm9vbGVhbjtcbiAgICAgIG12Mj86IGJvb2xlYW47XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfSxcbiAgXVxuPihhc3luYyAocm9vdCwgZmxhZ3MpID0+IHtcbiAgY29uc3QgY2xpQ29uZmlnOiB3eHQuSW5saW5lQ29uZmlnID0ge1xuICAgIHJvb3QsXG4gICAgbW9kZTogZmxhZ3MubW9kZSxcbiAgICBicm93c2VyOiBmbGFncy5icm93c2VyLFxuICAgIG1hbmlmZXN0VmVyc2lvbjogZmxhZ3MubXYzID8gMyA6IGZsYWdzLm12MiA/IDIgOiB1bmRlZmluZWQsXG4gICAgY29uZmlnRmlsZTogZmxhZ3MuY29uZmlnLFxuICAgIGRlYnVnOiBmbGFncy5kZWJ1ZyxcbiAgfTtcblxuICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCB3eHQuY3JlYXRlU2VydmVyKGNsaUNvbmZpZyk7XG4gIGF3YWl0IHNlcnZlci5zdGFydCgpO1xuXG4gIHJldHVybiB0cnVlO1xufSk7XG4iLCAiaW1wb3J0IHsgZGVmaW5lQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL2RlZmluZUNvbW1hbmQnO1xuaW1wb3J0IHByb21wdHMgZnJvbSAncHJvbXB0cyc7XG5pbXBvcnQgeyBjb25zb2xhIH0gZnJvbSAnY29uc29sYSc7XG5pbXBvcnQgeyBkb3dubG9hZFRlbXBsYXRlIH0gZnJvbSAnZ2lnZXQnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcGMgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tICdwaWNvY29sb3JzL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGluaXQgPSBkZWZpbmVDb21tYW5kPFxuICBbXG4gICAgZGlyZWN0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogeyB0ZW1wbGF0ZT86IHN0cmluZzsgcG0/OiBzdHJpbmc7IGRlYnVnPzogYm9vbGVhbiB9LFxuICBdXG4+KFxuICBhc3luYyAodXNlckRpcmVjdG9yeSwgZmxhZ3MpID0+IHtcbiAgICBjb25zb2xhLmluZm8oJ0luaXRhbGl6aW5nIG5ldyBwcm9qZWN0Jyk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCBsaXN0VGVtcGxhdGVzKCk7XG4gICAgY29uc3QgZGVmYXVsdFRlbXBsYXRlID0gdGVtcGxhdGVzLmZpbmQoXG4gICAgICAodGVtcGxhdGUpID0+IHRlbXBsYXRlLm5hbWUgPT09IGZsYWdzLnRlbXBsYXRlPy50b0xvd2VyQ2FzZSgpLnRyaW0oKSxcbiAgICApO1xuXG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCBwcm9tcHRzKFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2RpcmVjdG9yeScsXG4gICAgICAgICAgdHlwZTogKCkgPT4gKHVzZXJEaXJlY3RvcnkgPT0gbnVsbCA/ICd0ZXh0JyA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgbWVzc2FnZTogJ1Byb2plY3QgRGlyZWN0b3J5JyxcbiAgICAgICAgICBpbml0aWFsOiB1c2VyRGlyZWN0b3J5LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3RlbXBsYXRlJyxcbiAgICAgICAgICB0eXBlOiAoKSA9PiAoZGVmYXVsdFRlbXBsYXRlID09IG51bGwgPyAnc2VsZWN0JyA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIHRlbXBsYXRlJyxcbiAgICAgICAgICBjaG9pY2VzOiB0ZW1wbGF0ZXMubWFwKCh0ZW1wbGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICBURU1QTEFURV9DT0xPUlNbdGVtcGxhdGUubmFtZV0/Lih0ZW1wbGF0ZS5uYW1lKSA/PyB0ZW1wbGF0ZS5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHRlbXBsYXRlLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwYWNrYWdlTWFuYWdlcicsXG4gICAgICAgICAgdHlwZTogKCkgPT4gKGZsYWdzLnBtID09IG51bGwgPyAnc2VsZWN0JyA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgbWVzc2FnZTogJ1BhY2thZ2UgTWFuYWdlcicsXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyB0aXRsZTogJ25wbScsIHZhbHVlOiAnbnBtJyB9LFxuICAgICAgICAgICAgeyB0aXRsZTogJ3BucG0nLCB2YWx1ZTogJ3BucG0nIH0sXG4gICAgICAgICAgICB7IHRpdGxlOiAneWFybicsIHZhbHVlOiAneWFybicgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHtcbiAgICAgICAgb25DYW5jZWw6ICgpID0+IHByb2Nlc3MuZXhpdCgxKSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBpbnB1dC5kaXJlY3RvcnkgPz89IHVzZXJEaXJlY3Rvcnk7XG4gICAgaW5wdXQudGVtcGxhdGUgPz89IGRlZmF1bHRUZW1wbGF0ZTtcbiAgICBpbnB1dC5wYWNrYWdlTWFuYWdlciA/Pz0gZmxhZ3MucG07XG5cbiAgICBhd2FpdCBjbG9uZVByb2plY3QoaW5wdXQpO1xuXG4gICAgY29uc3QgY2RQYXRoID0gcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBwYXRoLnJlc29sdmUoaW5wdXQuZGlyZWN0b3J5KSk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xhLmxvZyhcbiAgICAgIGBcdTI3MjggV1hUIHByb2plY3QgY3JlYXRlZCB3aXRoIHRoZSAke1xuICAgICAgICBURU1QTEFURV9DT0xPUlNbaW5wdXQudGVtcGxhdGUubmFtZV0/LihpbnB1dC50ZW1wbGF0ZS5uYW1lKSA/P1xuICAgICAgICBpbnB1dC50ZW1wbGF0ZS5uYW1lXG4gICAgICB9IHRlbXBsYXRlLmAsXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGNvbnNvbGEubG9nKCdOZXh0IHN0ZXBzOicpO1xuICAgIGxldCBzdGVwID0gMDtcbiAgICBpZiAoY2RQYXRoICE9PSAnJykgY29uc29sYS5sb2coYCAgJHsrK3N0ZXB9LmAsIHBjLmN5YW4oYGNkICR7Y2RQYXRofWApKTtcbiAgICBjb25zb2xhLmxvZyhgICAkeysrc3RlcH0uYCwgcGMuY3lhbihgJHtpbnB1dC5wYWNrYWdlTWFuYWdlcn0gaW5zdGFsbGApKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICB9LFxuICB7IGRpc2FibGVGaW5pc2hlZExvZzogdHJ1ZSB9LFxuKTtcblxuaW50ZXJmYWNlIFRlbXBsYXRlIHtcbiAgLyoqXG4gICAqIFRlbXBsYXRlJ3MgbmFtZS5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFBhdGggdG8gdGVtcGxhdGUgZGlyZWN0b3J5IGluIGdpdGh1YiByZXBvLlxuICAgKi9cbiAgcGF0aDogc3RyaW5nO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0VGVtcGxhdGVzKCk6IFByb21pc2U8VGVtcGxhdGVbXT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFxuICAgICAgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd3h0LWRldi93eHQvY29udGVudHMvdGVtcGxhdGVzJyxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsXG4gICAgICAgICAgJ1gtR2l0SHViLUFwaS1WZXJzaW9uJzogJzIwMjItMTEtMjgnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgIGlmIChyZXMuc3RhdHVzID49IDMwMClcbiAgICAgIHRocm93IEVycm9yKGBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyAke3Jlcy5zdGF0dXN9ICR7cmVzLnN0YXR1c1RleHR9YCk7XG5cbiAgICBjb25zdCBkYXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIEFycmF5PHtcbiAgICAgIHR5cGU6ICdmaWxlJyB8ICdkaXInO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgcGF0aDogc3RyaW5nO1xuICAgIH0+O1xuICAgIHJldHVybiBkYXRhXG4gICAgICAuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSA9PT0gJ2RpcicpXG4gICAgICAubWFwKChpdGVtKSA9PiAoeyBuYW1lOiBpdGVtLm5hbWUsIHBhdGg6IGl0ZW0ucGF0aCB9KSlcbiAgICAgIC5zb3J0KChsLCByKSA9PiB7XG4gICAgICAgIGNvbnN0IGxXZWlnaHQgPSBURU1QTEFURV9TT1JUX1dFSUdIVFtsLm5hbWVdID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgICAgICBjb25zdCByV2VpZ2h0ID0gVEVNUExBVEVfU09SVF9XRUlHSFRbci5uYW1lXSA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgY29uc3QgZGlmZiA9IGxXZWlnaHQgLSByV2VpZ2h0O1xuICAgICAgICBpZiAoZGlmZiAhPT0gMCkgcmV0dXJuIGRpZmY7XG4gICAgICAgIHJldHVybiBsLm5hbWUubG9jYWxlQ29tcGFyZShyLm5hbWUpO1xuICAgICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IEVycm9yKGBDYW5ub3QgbG9hZCB0ZW1wbGF0ZXM6ICR7SlNPTi5zdHJpbmdpZnkoZXJyLCBudWxsLCAyKX1gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjbG9uZVByb2plY3Qoe1xuICBkaXJlY3RvcnksXG4gIHRlbXBsYXRlLFxuICBwYWNrYWdlTWFuYWdlcixcbn06IHtcbiAgZGlyZWN0b3J5OiBzdHJpbmc7XG4gIHRlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgcGFja2FnZU1hbmFnZXI6IHN0cmluZztcbn0pIHtcbiAgY29uc3QgeyBkZWZhdWx0OiBvcmEgfSA9IGF3YWl0IGltcG9ydCgnb3JhJyk7XG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0Rvd25sb2FkaW5nIHRlbXBsYXRlJykuc3RhcnQoKTtcbiAgdHJ5IHtcbiAgICAvLyAxLiBDbG9uZSByZXBvXG4gICAgYXdhaXQgZG93bmxvYWRUZW1wbGF0ZShgZ2g6d3h0LWRldi93eHQvJHt0ZW1wbGF0ZS5wYXRofWAsIHtcbiAgICAgIGRpcjogZGlyZWN0b3J5LFxuICAgICAgZm9yY2U6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyAyLiBNb3ZlIF9naXRpZ25vcmUgLT4gLmdpdGlnbm9yZVxuICAgIGF3YWl0IGZzXG4gICAgICAubW92ZShcbiAgICAgICAgcGF0aC5qb2luKGRpcmVjdG9yeSwgJ19naXRpZ25vcmUnKSxcbiAgICAgICAgcGF0aC5qb2luKGRpcmVjdG9yeSwgJy5naXRpZ25vcmUnKSxcbiAgICAgIClcbiAgICAgIC5jYXRjaCgoZXJyKSA9PlxuICAgICAgICBjb25zb2xhLndhcm4oJ0ZhaWxlZCB0byBtb3ZlIF9naXRpZ25vcmUgdG8gLmdpdGlnbm9yZTonLCBlcnIpLFxuICAgICAgKTtcblxuICAgIC8vIDMuIEFkZCAubnBtcmMgZm9yIHBucG1cbiAgICBpZiAocGFja2FnZU1hbmFnZXIgPT09ICdwbnBtJykge1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgICAgICBwYXRoLmpvaW4oZGlyZWN0b3J5LCAnLm5wbXJjJyksXG4gICAgICAgICdzaGFtZWZ1bGx5LWhvaXN0PXRydWVcXG4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzcGlubmVyLnN1Y2NlZWQoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3Bpbm5lci5mYWlsKCk7XG4gICAgdGhyb3cgRXJyb3IoYEZhaWxlZCB0byBzZXR1cCBuZXcgcHJvamVjdDogJHtKU09OLnN0cmluZ2lmeShlcnIsIG51bGwsIDIpfWApO1xuICB9XG59XG5cbmNvbnN0IFRFTVBMQVRFX0NPTE9SUzogUmVjb3JkPHN0cmluZywgRm9ybWF0dGVyPiA9IHtcbiAgdmFuaWxsYTogcGMuYmx1ZSxcbiAgdnVlOiBwYy5ncmVlbixcbiAgcmVhY3Q6IHBjLmN5YW4sXG4gIHN2ZWx0ZTogcGMucmVkLFxuICBzb2xpZDogcGMuYmx1ZSxcbn07XG5cbmNvbnN0IFRFTVBMQVRFX1NPUlRfV0VJR0hUOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge1xuICB2YW5pbGxhOiAwLFxuICB2dWU6IDEsXG4gIHJlYWN0OiAyLFxufTtcbiIsICJpbXBvcnQgeyBnZXRJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZ2V0SW50ZXJuYWxDb25maWcnO1xuaW1wb3J0IHsgZmluZEVudHJ5cG9pbnRzIH0gZnJvbSAnLi4vLi4vY29yZS9idWlsZC9maW5kRW50cnlwb2ludHMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVUeXBlc0RpciB9IGZyb20gJy4uLy4uL2NvcmUvYnVpbGQvZ2VuZXJhdGVUeXBlc0Rpcic7XG5pbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5pbXBvcnQgKiBhcyB3eHQgZnJvbSAnLi4vLi4nO1xuXG5leHBvcnQgY29uc3QgcHJlcGFyZSA9IGRlZmluZUNvbW1hbmQ8XG4gIFtcbiAgICByb290OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZmxhZ3M6IHtcbiAgICAgIGNvbmZpZz86IHN0cmluZztcbiAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB9LFxuICBdXG4+KGFzeW5jIChyb290LCBmbGFncykgPT4ge1xuICBjb25zdCBjbGlDb25maWc6IHd4dC5JbmxpbmVDb25maWcgPSB7XG4gICAgcm9vdCxcbiAgICBjb25maWdGaWxlOiBmbGFncy5jb25maWcsXG4gICAgZGVidWc6IGZsYWdzLmRlYnVnLFxuICB9O1xuICBjb25zdCBjb25maWcgPSBhd2FpdCBnZXRJbnRlcm5hbENvbmZpZyhjbGlDb25maWcsICdidWlsZCcpO1xuXG4gIGNvbmZpZy5sb2dnZXIuaW5mbygnR2VuZXJhdGluZyB0eXBlcy4uLicpO1xuXG4gIGNvbnN0IGVudHJ5cG9pbnRzID0gYXdhaXQgZmluZEVudHJ5cG9pbnRzKGNvbmZpZyk7XG4gIGF3YWl0IGdlbmVyYXRlVHlwZXNEaXIoZW50cnlwb2ludHMsIGNvbmZpZyk7XG59KTtcbiIsICJpbXBvcnQgeyBjb25zb2xhIH0gZnJvbSAnY29uc29sYSc7XG5pbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5cbmV4cG9ydCBjb25zdCBwdWJsaXNoID0gZGVmaW5lQ29tbWFuZChcbiAgYXN5bmMgKFxuICAgIHJvb3Q6IGFueSxcbiAgICB7IGNvbmZpZzogY29uZmlnRmlsZSwgZGVidWcgfTogeyBjb25maWc/OiBzdHJpbmc7IGRlYnVnPzogc3RyaW5nIH0sXG4gICkgPT4ge1xuICAgIGNvbnNvbGEud2Fybignd3h0IHB1Ymxpc2g6IE5vdCBpbXBsZW1lbnRlZCcpO1xuICB9LFxuKTtcbiIsICJpbXBvcnQgeyBCdWlsZE91dHB1dCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB6aXBkaXIgZnJvbSAnemlwLWRpcic7XG5pbXBvcnQgeyBkaXJuYW1lLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsga2ViYWJDYXNlQWxwaGFudW1lcmljIH0gZnJvbSAnLi91dGlscy9zdHJpbmdzJztcbmltcG9ydCB7IGdldFBhY2thZ2VKc29uIH0gZnJvbSAnLi91dGlscy9wYWNrYWdlJztcbmltcG9ydCB7IG1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiB9IGZyb20gJy4vdXRpbHMvZm9ybWF0RHVyYXRpb24nO1xuaW1wb3J0IHsgcHJpbnRGaWxlTGlzdCB9IGZyb20gJy4vbG9nL3ByaW50RmlsZUxpc3QnO1xuXG4vKipcbiAqIFppcCB0aGUgZXh0ZW5zaW9uIGZvciBkaXN0cmlidXRpb24uIERvZXMgbm90IGJ1aWxkLCBqdXN0IHppcHMgdGhlIG91dHB1dCB0aGF0IHNob3VsZCBleGlzdCBmb3JcbiAqIHRoZSBnaXZlbiBjb25maWcuXG4gKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgWklQIGZpbGVzIHRoYXQgd2VyZSBjcmVhdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gemlwRXh0ZW5zaW9uKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBidWlsZE91dHB1dDogQnVpbGRPdXRwdXQsXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgY29uZmlnLmxvZ2dlci5pbmZvKCdaaXBwaW5nIGV4dGVuc2lvbi4uLicpO1xuICBjb25zdCB6aXBGaWxlczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCBwcm9qZWN0TmFtZSA9XG4gICAgY29uZmlnLnppcC5uYW1lID8/XG4gICAga2ViYWJDYXNlQWxwaGFudW1lcmljKFxuICAgICAgKGF3YWl0IGdldFBhY2thZ2VKc29uKGNvbmZpZykpPy5uYW1lIHx8IGRpcm5hbWUocHJvY2Vzcy5jd2QoKSksXG4gICAgKTtcbiAgY29uc3QgYXBwbHlUZW1wbGF0ZSA9ICh0ZW1wbGF0ZTogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgdGVtcGxhdGVcbiAgICAgIC5yZXBsYWNlQWxsKCd7e25hbWV9fScsIHByb2plY3ROYW1lKVxuICAgICAgLnJlcGxhY2VBbGwoJ3t7YnJvd3Nlcn19JywgY29uZmlnLmJyb3dzZXIpXG4gICAgICAucmVwbGFjZUFsbChcbiAgICAgICAgJ3t7dmVyc2lvbn19JyxcbiAgICAgICAgYnVpbGRPdXRwdXQubWFuaWZlc3QudmVyc2lvbl9uYW1lID8/IGJ1aWxkT3V0cHV0Lm1hbmlmZXN0LnZlcnNpb24sXG4gICAgICApXG4gICAgICAucmVwbGFjZUFsbCgne3ttYW5pZmVzdFZlcnNpb259fScsIGBtdiR7Y29uZmlnLm1hbmlmZXN0VmVyc2lvbn1gKTtcblxuICBhd2FpdCBmcy5lbnN1cmVEaXIoY29uZmlnLm91dEJhc2VEaXIpO1xuXG4gIC8vIFpJUCBvdXRwdXQgZGlyZWN0b3J5XG5cbiAgY29uc3Qgb3V0WmlwRmlsZW5hbWUgPSBhcHBseVRlbXBsYXRlKGNvbmZpZy56aXAuYXJ0aWZhY3RUZW1wbGF0ZSk7XG4gIGNvbnN0IG91dFppcFBhdGggPSByZXNvbHZlKGNvbmZpZy5vdXRCYXNlRGlyLCBvdXRaaXBGaWxlbmFtZSk7XG4gIGF3YWl0IHppcGRpcihjb25maWcub3V0RGlyLCB7XG4gICAgc2F2ZVRvOiBvdXRaaXBQYXRoLFxuICB9KTtcbiAgemlwRmlsZXMucHVzaChvdXRaaXBQYXRoKTtcblxuICAvLyBaSVAgc291cmNlcyBmb3IgRmlyZWZveFxuXG4gIGlmIChjb25maWcuYnJvd3NlciA9PT0gJ2ZpcmVmb3gnKSB7XG4gICAgY29uc3Qgc291cmNlc1ppcEZpbGVuYW1lID0gYXBwbHlUZW1wbGF0ZShjb25maWcuemlwLnNvdXJjZXNUZW1wbGF0ZSk7XG4gICAgY29uc3Qgc291cmNlc1ppcFBhdGggPSByZXNvbHZlKGNvbmZpZy5vdXRCYXNlRGlyLCBzb3VyY2VzWmlwRmlsZW5hbWUpO1xuICAgIGF3YWl0IHppcGRpcihjb25maWcuemlwLnNvdXJjZXNSb290LCB7XG4gICAgICBzYXZlVG86IHNvdXJjZXNaaXBQYXRoLFxuICAgICAgZmlsdGVyKHBhdGgpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUoY29uZmlnLnppcC5zb3VyY2VzUm9vdCwgcGF0aCk7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRQYXR0ZXJuID0gY29uZmlnLnppcC5pZ25vcmVkU291cmNlcy5maW5kKChwYXR0ZXJuKSA9PlxuICAgICAgICAgIG1pbmltYXRjaChyZWxhdGl2ZVBhdGgsIHBhdHRlcm4pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbWF0Y2hlZFBhdHRlcm4gPT0gbnVsbDtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgemlwRmlsZXMucHVzaChzb3VyY2VzWmlwUGF0aCk7XG4gIH1cblxuICBhd2FpdCBwcmludEZpbGVMaXN0KFxuICAgIGNvbmZpZy5sb2dnZXIuc3VjY2VzcyxcbiAgICBgWmlwcGVkIGV4dGVuc2lvbiBpbiAke2Zvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydCl9YCxcbiAgICBjb25maWcub3V0QmFzZURpcixcbiAgICB6aXBGaWxlcyxcbiAgKTtcblxuICByZXR1cm4gemlwRmlsZXM7XG59XG4iLCAiaW1wb3J0ICogYXMgd3h0IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IGJ1aWxkSW50ZXJuYWwgfSBmcm9tICcuLi8uLi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IGdldEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9nZXRJbnRlcm5hbENvbmZpZyc7XG5pbXBvcnQgeyB6aXBFeHRlbnNpb24gfSBmcm9tICcuLi8uLi9jb3JlL3ppcCc7XG5pbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5cbmV4cG9ydCBjb25zdCB6aXAgPSBkZWZpbmVDb21tYW5kPFxuICBbXG4gICAgcm9vdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGZsYWdzOiB7XG4gICAgICBtb2RlPzogc3RyaW5nO1xuICAgICAgY29uZmlnPzogc3RyaW5nO1xuICAgICAgYnJvd3Nlcj86IHd4dC5UYXJnZXRCcm93c2VyO1xuICAgICAgbXYzPzogYm9vbGVhbjtcbiAgICAgIG12Mj86IGJvb2xlYW47XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfSxcbiAgXVxuPihhc3luYyAocm9vdCwgZmxhZ3MpID0+IHtcbiAgY29uc3QgY2xpQ29uZmlnOiB3eHQuSW5saW5lQ29uZmlnID0ge1xuICAgIHJvb3QsXG4gICAgbW9kZTogZmxhZ3MubW9kZSxcbiAgICBicm93c2VyOiBmbGFncy5icm93c2VyLFxuICAgIG1hbmlmZXN0VmVyc2lvbjogZmxhZ3MubXYzID8gMyA6IGZsYWdzLm12MiA/IDIgOiB1bmRlZmluZWQsXG4gICAgY29uZmlnRmlsZTogZmxhZ3MuY29uZmlnLFxuICAgIGRlYnVnOiBmbGFncy5kZWJ1ZyxcbiAgfTtcblxuICBjb25zdCBjb25maWcgPSBhd2FpdCBnZXRJbnRlcm5hbENvbmZpZyhjbGlDb25maWcsICdidWlsZCcpO1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBidWlsZEludGVybmFsKGNvbmZpZyk7XG4gIGF3YWl0IHppcEV4dGVuc2lvbihjb25maWcsIG91dHB1dCk7XG59KTtcbiIsICJpbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5pbXBvcnQgKiBhcyB3eHQgZnJvbSAnLi4vLi4nO1xuXG5leHBvcnQgY29uc3QgY2xlYW4gPSBkZWZpbmVDb21tYW5kPFxuICBbXG4gICAgcm9vdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGZsYWdzOiB7XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfSxcbiAgXVxuPih3eHQuY2xlYW4pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsMEVBQUFBLFNBQUE7QUFBQTtBQUFBLElBQUFBLFFBQU8sVUFBVTtBQUNqQixVQUFNLE9BQU87QUFFYixRQUFJQyxPQUFLLFFBQVEsSUFBSTtBQUVyQixhQUFTLGFBQWNDLFFBQU0sU0FBUztBQUNwQyxVQUFJLFVBQVUsUUFBUSxZQUFZLFNBQ2hDLFFBQVEsVUFBVSxRQUFRLElBQUk7QUFFaEMsVUFBSSxDQUFDLFNBQVM7QUFDWixlQUFPO0FBQUEsTUFDVDtBQUVBLGdCQUFVLFFBQVEsTUFBTSxHQUFHO0FBQzNCLFVBQUksUUFBUSxRQUFRLEVBQUUsTUFBTSxJQUFJO0FBQzlCLGVBQU87QUFBQSxNQUNUO0FBQ0EsZUFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLFFBQVEsS0FBSztBQUN2QyxZQUFJLElBQUksUUFBUSxDQUFDLEVBQUUsWUFBWTtBQUMvQixZQUFJLEtBQUtBLE9BQUssT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksTUFBTSxHQUFHO0FBQ25ELGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLGFBQVMsVUFBVyxNQUFNQSxRQUFNLFNBQVM7QUFDdkMsVUFBSSxDQUFDLEtBQUssZUFBZSxLQUFLLENBQUMsS0FB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LElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFDQTtBQUFBLElBQ0EsVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLElBQ1QsUUFBTztBQUFBLEVBQ1A7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsSUFDVCxRQUFPO0FBQUEsRUFDUDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxJQUNULFFBQU87QUFBQSxFQUNQO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFLO0FBQUEsSUFDTCxRQUFPO0FBQUEsSUFDUCxRQUFPO0FBQUEsSUFDUCxhQUFZO0FBQUEsSUFDWixVQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxJQUNBLE1BQUs7QUFBQSxJQUNMLFFBQU87QUFBQSxJQUNQLFFBQU87QUFBQSxJQUNQLGFBQVk7QUFBQSxJQUNaLFVBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLElBQ0EsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsUUFBTztBQUFBLElBQ1AsYUFBWTtBQUFBLElBQ1osVUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsSUFDQSxNQUFL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LEVBQ3JELE9BQU8sU0FBUyxvQkFBb0IsRUFDcEMsT0FBTyxTQUFTLG9CQUFvQixFQUNwQyxPQUFnQixHQUFHO0FBR3RCLElBQ0csUUFBUSxnQkFBZ0Isc0JBQXNCLEVBQzlDLE9BQU8sdUJBQXVCLDJCQUEyQixFQUN6RCxPQUFPLHFCQUFxQixjQUFjLEVBQzFDLE9BQU8sMkJBQTJCLG1CQUFtQixFQUNyRCxPQUFPLFNBQVMsb0JBQW9CLEVBQ3BDLE9BQU8sU0FBUyxvQkFBb0IsRUFDcEMsT0FBTyxhQUFhLDRCQUE0QixFQUNoRCxPQUFnQkMsTUFBSztBQUd4QixJQUNHLFFBQVEsY0FBYyxxQ0FBcUMsRUFDM0QsT0FBTyx1QkFBdUIsMkJBQTJCLEVBQ3pELE9BQU8scUJBQXFCLGNBQWMsRUFDMUMsT0FBTywyQkFBMkIsbUJBQW1CLEVBQ3JELE9BQU8sU0FBUyxvQkFBb0IsRUFDcEMsT0FBTyxTQUFTLG9CQUFvQixFQUNwQyxPQUFnQixHQUFHO0FBR3RCLElBQ0csUUFBUSxrQkFBa0IsNEJBQTRCLEVBQ3RELE9BQU8sdUJBQXVCLDJCQUEyQixFQUN6RCxPQUFnQixPQUFPO0FBRzFCLElBQ0csUUFBUSxnQkFBZ0Isa0NBQWtDLEVBQzFELE1BQU0sU0FBUyxFQUNmLE9BQWdCQyxNQUFLO0FBR3hCLElBQUksUUFBUSxrQkFBa0IsbUJBQW1CLEVBQUUsT0FBZ0IsT0FBTztBQUcxRSxJQUNHLFFBQVEsb0JBQW9CLDBCQUEwQixFQUN0RCxPQUFPLDZCQUE2QixpQkFBaUIsRUFDckQsT0FBTyx5QkFBeUIsOEJBQThCLEVBQzlELE9BQWdCLElBQUk7QUFFdkIsSUFBSSxNQUFNOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJyZXNvbHZlIiwgIm1vZHVsZSIsICJwYXRoIiwgInJlc29sdmUiLCAibW9kdWxlIiwgInBhdGhLZXkiLCAibW9kdWxlIiwgInBhdGgiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAicGF0aCIsICJtb2R1bGUiLCAiZnMiLCAibW9kdWxlIiwgInBhdGgiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgInByb2Nlc3MiLCAidW5sb2FkIiwgImVtaXQiLCAibG9hZCIsICJwcm9jZXNzUmVhbGx5RXhpdCIsICJwcm9jZXNzRW1pdCIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdldFN0cmVhbSIsICJzdHJlYW0iLCAicmVzb2x2ZSIsICJtb2R1bGUiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJ2aXRlIiwgImltcG9ydF9mc19leHRyYSIsICJmcyIsICJwYXRoIiwgImZzIiwgImltcG9ydF9ub2RlX3BhdGgiLCAibm9ybWFsaXplUGF0aCIsICJwYXRoIiwgIm5vZGVQYXRoIiwgInBhdGgiLCAibm9ybWFsaXplUGF0aCIsICJpbXBvcnRfcGF0aCIsICJ1cmwiLCAiaXNPZmZsaW5lIiwgImRucyIsICJ1cmwiLCAidXJsIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgIm5vcm1hbGl6ZVBhdGgiLCAiZnMiLCAiaW1wb3J0X3BhdGgiLCAidW5pbXBvcnQiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgIm5vcm1hbGl6ZVBhdGgiLCAiZnMiLCAiY29uc29sYSIsICJwYXRoIiwgImVudiIsICJ6aXAiLCAiZ2xvYmFsIiwgImltcG9ydF9waWNvY29sb3JzIiwgIm5vcm1hbGl6ZVBhdGgiLCAiaW1wb3J0X2NvbnNvbGEiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJ2aXRlIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJmcyIsICJwYXRoIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiZnMiLCAiZ2xvYiIsICJwYyIsICJnbG9iYWwiLCAiZnMiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9saW5rZWRvbSIsICJpbXBvcnRfdW5pbXBvcnQiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgInBhdGgiLCAibm9ybWFsaXplUGF0aCIsICJ1bmltcG9ydCIsICJmcyIsICJjcmVhdGVKSVRJIiwgImltcG9ydF9mYXN0X2dsb2IiLCAiZ2xvYiIsICJwYXRoIiwgIkpTT041IiwgImZzIiwgImltcG9ydF91bmltcG9ydCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJmcyIsICJ1bmltcG9ydCIsICJub3JtYWxpemVQYXRoIiwgInBhdGgiLCAiZ2xvYmFsIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImltcG9ydF9mc19leHRyYSIsICJmcyIsICJ2aXRlIiwgImZzIiwgInZlcnNpb24iLCAib3B0aW9ucyIsICJub3JtYWxpemVQYXRoIiwgImltcG9ydF9waWNvY29sb3JzIiwgInZpdGUiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X3BpY29jb2xvcnMiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgInBhdGgiLCAiZnMiLCAicGMiLCAiaW1wb3J0X25vZGVfYnVmZmVyIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X25vZGVfY2hpbGRfcHJvY2VzcyIsICJpbXBvcnRfbm9kZV9wcm9jZXNzIiwgImltcG9ydF9ub2RlX3BhdGgiLCAicHJvY2VzcyIsICJ1cmwiLCAicGF0aCIsICJvbmV0aW1lIiwgImltcG9ydF9ub2RlX3Byb2Nlc3MiLCAiaW1wb3J0X25vZGVfb3MiLCAicHJvY2VzcyIsICJpbXBvcnRfbm9kZV9vcyIsICJvcyIsICJyZXNvbHZlIiwgIm9uRXhpdCIsICJpbXBvcnRfbm9kZV9mcyIsICJtZXJnZVN0cmVhbSIsICJnZXRTdHJlYW0iLCAicmVzb2x2ZSIsICJpbXBvcnRfbm9kZV9jaGlsZF9wcm9jZXNzIiwgImV4cHJlc3Npb24iLCAiaW1wb3J0X25vZGVfcHJvY2VzcyIsICJwcm9jZXNzIiwgInByb2Nlc3MiLCAiY3Jvc3NTcGF3biIsICJwYXRoIiwgImNoaWxkUHJvY2VzcyIsICIkIiwgImltcG9ydF9mYXN0X2dsb2IiLCAicGMiLCAiZnMiLCAiZ2xvYiIsICJ2aXRlIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImlzV3NsIiwgInBhdGgiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJpbXBvcnRfZmFzdF9nbG9iIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfY29uc29sYSIsICJpbXBvcnRfcGljb2NvbG9ycyIsICJwYyIsICJnbG9iIiwgInBhdGgiLCAiZnMiLCAiYnVpbGQiLCAiY3JlYXRlU2VydmVyIiwgInBhdGgiLCAicGMiLCAiaW1wb3J0X2NvbnNvbGEiLCAiaW1wb3J0X3BpY29jb2xvcnMiLCAiaW1wb3J0X2NvbnNvbGEiLCAicGMiLCAiYnVpbGQiLCAiY3JlYXRlU2VydmVyIiwgImltcG9ydF9jb25zb2xhIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImltcG9ydF9waWNvY29sb3JzIiwgInByb21wdHMiLCAicGF0aCIsICJwYyIsICJmcyIsICJpbXBvcnRfY29uc29sYSIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfbWluaW1hdGNoIiwgImZzIiwgInppcGRpciIsICJwYXRoIiwgImNsZWFuIiwgImNhYyIsICJidWlsZCIsICJjbGVhbiJdCn0K
|