@dbx-tools/core 0.9.21 → 0.9.29
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/index.ts +2 -2
- package/lib/index.d.ts +2 -2
- package/lib/index.js +2 -2
- package/lib/src/bin.d.ts +2 -0
- package/lib/src/bin.js +16 -19
- package/lib/src/config-utils.js +3 -4
- package/lib/src/exec.js +10 -3
- package/lib/src/file-lock.d.ts +13 -0
- package/lib/src/file-lock.js +52 -2
- package/package.json +2 -3
- package/src/bin.ts +15 -16
- package/src/config-utils.ts +2 -7
- package/src/exec.ts +9 -2
- package/src/file-lock.ts +64 -1
- package/._LICENSE +0 -0
- package/._README.md +0 -0
- package/._index.ts +0 -0
- package/._package.json +0 -0
- package/lib/._index.d.ts +0 -0
- package/lib/._index.js +0 -0
- package/lib/._tsconfig.tsbuildinfo +0 -0
- package/lib/src/._bin.d.ts +0 -0
- package/lib/src/._bin.js +0 -0
- package/lib/src/._brand-files.d.ts +0 -0
- package/lib/src/._brand-files.js +0 -0
- package/lib/src/._bundle.d.ts +0 -0
- package/lib/src/._bundle.js +0 -0
- package/lib/src/._config-utils.d.ts +0 -0
- package/lib/src/._config-utils.js +0 -0
- package/lib/src/._dependency-resolver.d.ts +0 -0
- package/lib/src/._dependency-resolver.js +0 -0
- package/lib/src/._exec.d.ts +0 -0
- package/lib/src/._exec.js +0 -0
- package/lib/src/._file-lock.d.ts +0 -0
- package/lib/src/._file-lock.js +0 -0
- package/lib/src/._file.d.ts +0 -0
- package/lib/src/._file.js +0 -0
- package/lib/src/._npm-resolver.d.ts +0 -0
- package/lib/src/._npm-resolver.js +0 -0
- package/lib/src/._process-lock.d.ts +0 -0
- package/lib/src/._process-lock.js +0 -0
- package/lib/src/._project-utils.d.ts +0 -0
- package/lib/src/._project-utils.js +0 -0
- package/lib/src/npm-resolver.d.ts +0 -44
- package/lib/src/npm-resolver.js +0 -367
- package/src/._bin.ts +0 -0
- package/src/._brand-files.ts +0 -0
- package/src/._bundle.ts +0 -0
- package/src/._config-utils.ts +0 -0
- package/src/._dependency-resolver.ts +0 -0
- package/src/._exec.ts +0 -0
- package/src/._file-lock.ts +0 -0
- package/src/._file.ts +0 -0
- package/src/._process-lock.ts +0 -0
- package/src/._project-utils.ts +0 -0
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/core";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.29";
|
|
7
7
|
export * as bin from "./src/bin.ts";
|
|
8
8
|
export * as brandFiles from "./src/brand-files.ts";
|
|
9
9
|
export * as bundle from "./src/bundle.ts";
|
|
@@ -22,5 +22,5 @@ export type { ConfigMapValue, ConfigData, ConfigSource, ConfigOptions, ConfigFil
|
|
|
22
22
|
export type { DependencyResolverOptions, DependencyInfo, ResolvedNpmVersion, NpmSpecifierInput, ResolvedNpmDependencies, MissingDependencyInfo } from "./src/dependency-resolver.ts";
|
|
23
23
|
export { COMMAND_NOT_FOUND_EXIT_CODE } from "./src/exec.ts";
|
|
24
24
|
export type { ExecStdio, LineHandler, StdioOption, ExecResult, ChildProcessResult, ExecOptions, SyncExecStdio, SyncExecOptions, SpawnArgs } from "./src/exec.ts";
|
|
25
|
-
export type { FileLockBackend, FileLockAcquisition, FileLockOptions } from "./src/file-lock.ts";
|
|
25
|
+
export type { FileLockBackend, FileLockAcquisition, FileLockOptions, FileLockLease } from "./src/file-lock.ts";
|
|
26
26
|
export type { ProjectContext, NpmRegistryOptions } from "./src/project-utils.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/core";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.29";
|
|
3
3
|
export * as bin from "./src/bin.ts";
|
|
4
4
|
export * as brandFiles from "./src/brand-files.ts";
|
|
5
5
|
export * as bundle from "./src/bundle.ts";
|
|
@@ -18,5 +18,5 @@ export type { ConfigMapValue, ConfigData, ConfigSource, ConfigOptions, ConfigFil
|
|
|
18
18
|
export type { DependencyResolverOptions, DependencyInfo, ResolvedNpmVersion, NpmSpecifierInput, ResolvedNpmDependencies, MissingDependencyInfo } from "./src/dependency-resolver.ts";
|
|
19
19
|
export { COMMAND_NOT_FOUND_EXIT_CODE } from "./src/exec.ts";
|
|
20
20
|
export type { ExecStdio, LineHandler, StdioOption, ExecResult, ChildProcessResult, ExecOptions, SyncExecStdio, SyncExecOptions, SpawnArgs } from "./src/exec.ts";
|
|
21
|
-
export type { FileLockBackend, FileLockAcquisition, FileLockOptions } from "./src/file-lock.ts";
|
|
21
|
+
export type { FileLockBackend, FileLockAcquisition, FileLockOptions, FileLockLease } from "./src/file-lock.ts";
|
|
22
22
|
export type { ProjectContext, NpmRegistryOptions } from "./src/project-utils.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/core";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.29";
|
|
6
6
|
export * as bin from "./src/bin.js";
|
|
7
7
|
export * as brandFiles from "./src/brand-files.js";
|
|
8
8
|
export * as bundle from "./src/bundle.js";
|
|
@@ -16,4 +16,4 @@ export * as projectUtils from "./src/project-utils.js";
|
|
|
16
16
|
export { BrandContextSchema, defaultBrandContext, parseBrandContext, brandContextJsonSchema, brandContextPrompt } from "./src/brand-files.js";
|
|
17
17
|
export { MAX_TCP_PORT, ENV_ONLY, valueSchema, bundleResourceSchema, bundleEnvEntrySchema, bundleAppSchema, appEnvEntrySchema, appSchema } from "./src/config-utils.js";
|
|
18
18
|
export { COMMAND_NOT_FOUND_EXIT_CODE } from "./src/exec.js";
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxrQkFBa0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3ZLLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvY29yZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjI5XCI7XG5leHBvcnQgKiBhcyBiaW4gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0ICogYXMgYnJhbmRGaWxlcyBmcm9tIFwiLi9zcmMvYnJhbmQtZmlsZXMudHNcIjtcbmV4cG9ydCAqIGFzIGJ1bmRsZSBmcm9tIFwiLi9zcmMvYnVuZGxlLnRzXCI7XG5leHBvcnQgKiBhcyBjb25maWdVdGlscyBmcm9tIFwiLi9zcmMvY29uZmlnLXV0aWxzLnRzXCI7XG5leHBvcnQgKiBhcyBkZXBlbmRlbmN5UmVzb2x2ZXIgZnJvbSBcIi4vc3JjL2RlcGVuZGVuY3ktcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIGV4ZWMgZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGUgZnJvbSBcIi4vc3JjL2ZpbGUudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVMb2NrIGZyb20gXCIuL3NyYy9maWxlLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2Nlc3NMb2NrIGZyb20gXCIuL3NyYy9wcm9jZXNzLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2plY3RVdGlscyBmcm9tIFwiLi9zcmMvcHJvamVjdC11dGlscy50c1wiO1xuZXhwb3J0IHR5cGUgeyBCaW5Db250ZXh0LCBCaW5TZWxlY3Rpb25Db250ZXh0LCBCaW5TZWxlY3RvciwgQmluVmVyc2lvbk91dHB1dCwgQmluVmVyc2lvblBhcnNlciwgQmluT3B0aW9ucywgQmluVXJsUmVzb2x2ZUNvbnRleHQsIEJpblNvdXJjZSwgQmluVXJsIH0gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0IHsgQnJhbmRDb250ZXh0U2NoZW1hLCBkZWZhdWx0QnJhbmRDb250ZXh0LCBwYXJzZUJyYW5kQ29udGV4dCwgYnJhbmRDb250ZXh0SnNvblNjaGVtYSwgYnJhbmRDb250ZXh0UHJvbXB0IH0gZnJvbSBcIi4vc3JjL2JyYW5kLWZpbGVzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJyYW5kQ29udGV4dCwgQnJhbmRDb250ZXh0SW5wdXQgfSBmcm9tIFwiLi9zcmMvYnJhbmQtZmlsZXMudHNcIjtcbmV4cG9ydCB7IE1BWF9UQ1BfUE9SVCwgRU5WX09OTFksIHZhbHVlU2NoZW1hLCBidW5kbGVSZXNvdXJjZVNjaGVtYSwgYnVuZGxlRW52RW50cnlTY2hlbWEsIGJ1bmRsZUFwcFNjaGVtYSwgYXBwRW52RW50cnlTY2hlbWEsIGFwcFNjaGVtYSB9IGZyb20gXCIuL3NyYy9jb25maWctdXRpbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ29uZmlnTWFwVmFsdWUsIENvbmZpZ0RhdGEsIENvbmZpZ1NvdXJjZSwgQ29uZmlnT3B0aW9ucywgQ29uZmlnRmlsZSB9IGZyb20gXCIuL3NyYy9jb25maWctdXRpbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGVwZW5kZW5jeVJlc29sdmVyT3B0aW9ucywgRGVwZW5kZW5jeUluZm8sIFJlc29sdmVkTnBtVmVyc2lvbiwgTnBtU3BlY2lmaWVySW5wdXQsIFJlc29sdmVkTnBtRGVwZW5kZW5jaWVzLCBNaXNzaW5nRGVwZW5kZW5jeUluZm8gfSBmcm9tIFwiLi9zcmMvZGVwZW5kZW5jeS1yZXNvbHZlci50c1wiO1xuZXhwb3J0IHsgQ09NTUFORF9OT1RfRk9VTkRfRVhJVF9DT0RFIH0gZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRXhlY1N0ZGlvLCBMaW5lSGFuZGxlciwgU3RkaW9PcHRpb24sIEV4ZWNSZXN1bHQsIENoaWxkUHJvY2Vzc1Jlc3VsdCwgRXhlY09wdGlvbnMsIFN5bmNFeGVjU3RkaW8sIFN5bmNFeGVjT3B0aW9ucywgU3Bhd25BcmdzIH0gZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRmlsZUxvY2tCYWNrZW5kLCBGaWxlTG9ja0FjcXVpc2l0aW9uLCBGaWxlTG9ja09wdGlvbnMsIEZpbGVMb2NrTGVhc2UgfSBmcm9tIFwiLi9zcmMvZmlsZS1sb2NrLnRzXCI7XG5leHBvcnQgdHlwZSB7IFByb2plY3RDb250ZXh0LCBOcG1SZWdpc3RyeU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvcHJvamVjdC11dGlscy50c1wiO1xuIl19
|
package/lib/src/bin.d.ts
CHANGED
|
@@ -55,6 +55,8 @@ export type BinUrl = string | BinSource | ((context: BinUrlResolveContext) => st
|
|
|
55
55
|
* and common suffixes such as `rc1`, `.post1`, and `-dev.2`.
|
|
56
56
|
*/
|
|
57
57
|
export declare function parseVersion({ stdout, stderr }: BinVersionOutput): string | undefined;
|
|
58
|
+
/** Compare a detected tool version against a one-to-three-component minimum. */
|
|
59
|
+
export declare function isVersionAtLeast(version: string, minVersion: string): boolean;
|
|
58
60
|
/**
|
|
59
61
|
* Return an existing executable or install it atomically under
|
|
60
62
|
* `$HOME/.<name>/bin/<name>`. Installation uses a check-lock-check-load
|
package/lib/src/bin.js
CHANGED
|
@@ -10,8 +10,10 @@ import { homedir, tmpdir } from "node:os";
|
|
|
10
10
|
import { basename, join } from "node:path";
|
|
11
11
|
import { fileURLToPath } from "node:url";
|
|
12
12
|
import { promisify } from "node:util";
|
|
13
|
-
import
|
|
13
|
+
import * as errorUtils from "@dbx-tools/shared-core/error-utils";
|
|
14
|
+
import * as log from "@dbx-tools/shared-core/log";
|
|
14
15
|
import extractZip from "extract-zip";
|
|
16
|
+
import { coerce, gte } from "semver";
|
|
15
17
|
import { x as extractTar } from "tar";
|
|
16
18
|
import { withFileLock } from "./file-lock.js";
|
|
17
19
|
const execFileAsync = promisify(execFile);
|
|
@@ -82,27 +84,21 @@ function detectedVersions(output) {
|
|
|
82
84
|
export function parseVersion({ stdout, stderr }) {
|
|
83
85
|
return detectedVersions(stdout).at(0)?.raw ?? detectedVersions(stderr).at(0)?.raw;
|
|
84
86
|
}
|
|
85
|
-
function
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
return
|
|
87
|
+
function minimumSemVer(version) {
|
|
88
|
+
if (!/^\s*v?\d+(?:\.\d+){0,2}\s*$/i.test(version))
|
|
89
|
+
return undefined;
|
|
90
|
+
return coerce(version, { loose: true }) ?? undefined;
|
|
89
91
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const actual = numericVersion(version, false);
|
|
94
|
-
const minimum = numericVersion(minVersion, true);
|
|
92
|
+
/** Compare a detected tool version against a one-to-three-component minimum. */
|
|
93
|
+
export function isVersionAtLeast(version, minVersion) {
|
|
94
|
+
const minimum = minimumSemVer(minVersion);
|
|
95
95
|
if (!minimum) {
|
|
96
96
|
throw new TypeError(`invalid minimum binary version: ${minVersion}`);
|
|
97
97
|
}
|
|
98
|
+
const actual = coerce(version, { loose: true });
|
|
98
99
|
if (!actual)
|
|
99
100
|
return false;
|
|
100
|
-
|
|
101
|
-
const difference = (actual[index] ?? 0) - (minimum[index] ?? 0);
|
|
102
|
-
if (difference !== 0)
|
|
103
|
-
return difference > 0;
|
|
104
|
-
}
|
|
105
|
-
return true;
|
|
101
|
+
return gte(actual, minimum);
|
|
106
102
|
}
|
|
107
103
|
async function isValidBin(path, options) {
|
|
108
104
|
logger.debug("checking binary", {
|
|
@@ -139,7 +135,8 @@ async function isValidBin(path, options) {
|
|
|
139
135
|
stdout,
|
|
140
136
|
stderr,
|
|
141
137
|
});
|
|
142
|
-
const valid = version !== undefined &&
|
|
138
|
+
const valid = version !== undefined &&
|
|
139
|
+
(options.minVersion === undefined || isVersionAtLeast(version, options.minVersion));
|
|
143
140
|
logger.debug("binary version checked", {
|
|
144
141
|
path,
|
|
145
142
|
version,
|
|
@@ -265,7 +262,7 @@ async function selectedBin(destination, source, temp, options) {
|
|
|
265
262
|
* same executable and version checks.
|
|
266
263
|
*/
|
|
267
264
|
export async function ensure(name, url, options = {}) {
|
|
268
|
-
if (options.minVersion && !
|
|
265
|
+
if (options.minVersion && !minimumSemVer(options.minVersion)) {
|
|
269
266
|
throw new TypeError(`invalid minimum binary version: ${options.minVersion}`);
|
|
270
267
|
}
|
|
271
268
|
const destination = context(name, options.homeDir ?? homedir(), options.destination);
|
|
@@ -322,4 +319,4 @@ export async function ensure(name, url, options = {}) {
|
|
|
322
319
|
}
|
|
323
320
|
});
|
|
324
321
|
}
|
|
325
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFDTCxLQUFLLEVBQ0wsUUFBUSxFQUNSLEtBQUssRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUNQLE1BQU0sRUFDTixFQUFFLEVBQ0YsSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLFVBQVUsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUEyRXRDLFNBQVMsT0FBTyxDQUFDLElBQVksRUFBRSxPQUFlLEVBQUUsV0FBd0I7SUFDdEUsSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxTQUFTLENBQUMsd0JBQXdCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELElBQUksV0FBVztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNwRCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBVztJQUM3QixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssT0FBTztZQUFFLE9BQU8sT0FBTyxDQUFDO1FBQzdDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsYUFBYSxDQUFDLElBQVk7SUFDdkMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE9BQU87WUFDTCxJQUFJO1lBQ0osVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakYsQ0FBQztJQUNKLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDNUMsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLE1BQWM7SUFDdEMsTUFBTSxRQUFRLEdBQW9CLEVBQUUsQ0FBQztJQUNyQyxNQUFNLE9BQU8sR0FBRyx5REFBeUQsQ0FBQztJQUMxRSxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM3QyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxJQUFJLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM5RSxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUQsSUFBSSxLQUFLLEtBQUssQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztRQUNoQyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQW9CO0lBQy9ELE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ3BGLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxPQUFlLEVBQUUsTUFBZTtJQUN0RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztJQUN2RixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLE9BQU8sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsT0FBZSxFQUFFLFVBQThCO0lBQ3RFLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDN0IsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxTQUFTLENBQUMsbUNBQW1DLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDMUIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hGLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksVUFBVSxLQUFLLENBQUM7WUFBRSxPQUFPLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELEtBQUssVUFBVSxVQUFVLENBQUMsSUFBWSxFQUFFLE9BQW1CO0lBQ3pELE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7UUFDOUIsSUFBSTtRQUNKLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUM5QixlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWUsSUFBSSxXQUFXO0tBQ3hELENBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxNQUFjLENBQUM7SUFDbkIsSUFBSSxNQUFjLENBQUM7SUFDbkIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsSUFBSSxXQUFXLENBQUMsRUFBRTtZQUNqRixRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN2QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUU7WUFDNUMsSUFBSTtZQUNKLEtBQUssRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztTQUN0QyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksWUFBWSxDQUFDLENBQUM7UUFDdEQsTUFBTTtRQUNOLE1BQU07S0FDUCxDQUFDLENBQUM7SUFDSCxNQUFNLEtBQUssR0FBRyxPQUFPLEtBQUssU0FBUyxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUU7UUFDckMsSUFBSTtRQUNKLE9BQU87UUFDUCxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7UUFDOUIsS0FBSztLQUNOLENBQUMsQ0FBQztJQUNILE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEdBQVcsRUFBRSxJQUFZO0lBQzdDLElBQUksQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sU0FBUyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM3RSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxNQUFNLENBQUMsT0FBZSxFQUFFLFdBQW1CO0lBQ3hELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM5QixNQUFNLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNoRCxPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMzRixNQUFNLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDdEQsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxLQUFLLFVBQVUsVUFBVSxDQUFDLElBQVk7SUFDcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0QsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDMUIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxNQUFjO0lBQzVDLE1BQU0sS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsR0FBVztJQUM5QixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssT0FBTztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQ2xELE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxXQUFXLENBQ3hCLFdBQXVCLEVBQ3ZCLE1BQWlCLEVBQ2pCLElBQVksRUFDWixPQUFtQjtJQUVuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUMvRSxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QyxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFO1FBQ2pDLElBQUksRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQ3JCLEVBQUUsRUFBRSxZQUFZO0tBQ2pCLENBQUMsQ0FBQztJQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM3RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSxTQUFTLENBQUMsdUVBQXVFLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckUsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLFNBQVMsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFM0QsSUFBSSxjQUFjLEdBQUcsWUFBWSxDQUFDO0lBQ2xDLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFCLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUU7WUFDdkMsT0FBTyxFQUFFLFlBQVk7WUFDckIsRUFBRSxFQUFFLGNBQWM7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxNQUFNLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQixNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDdEMsV0FBVztZQUNYLFlBQVk7WUFDWixNQUFNLEVBQUUsY0FBYztTQUN2QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztJQUNqRyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDcEQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsTUFBTSxDQUMxQixJQUFZLEVBQ1osR0FBVyxFQUNYLFVBQXNCLEVBQUU7SUFFeEIsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNwRSxNQUFNLElBQUksU0FBUyxDQUFDLG1DQUFtQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRixJQUFJLE1BQU0sVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEYsT0FBTyxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQy9ELElBQUksTUFBTSxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hELE1BQU0sQ0FBQyxLQUFLLENBQUMsMENBQTBDLEVBQUU7Z0JBQ3ZELElBQUk7Z0JBQ0osSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO2FBQ3ZCLENBQUMsQ0FBQztZQUNILE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFO1lBQ2hDLElBQUk7WUFDSixFQUFFLEVBQUUsV0FBVyxDQUFDLElBQUk7WUFDcEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1NBQy9CLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLE1BQTBCLENBQUM7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsT0FBTyxHQUFHLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDaEYsTUFBTSxNQUFNLEdBQUcsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzNFLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLENBQUM7WUFFRCxNQUFNLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDckQsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RCxNQUFNLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakMsTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNCLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbkYsQ0FBQztZQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzlCLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixFQUFFLEVBQUUsV0FBVyxDQUFDLElBQUk7YUFDckIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxNQUFNO2dCQUFFLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW5zdGFsbCBhbmQgcmV1c2UgZXhlY3V0YWJsZSBiaW5hcmllcyB1bmRlciBhIHBlci10b29sIGhvbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBjcmVhdGVIYXNoLCByYW5kb21VVUlEIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQge1xuICBjaG1vZCxcbiAgY29weUZpbGUsXG4gIG1rZGlyLFxuICBta2R0ZW1wLFxuICByZWFkZGlyLFxuICByZW5hbWUsXG4gIHJtLFxuICBzdGF0LFxuICB3cml0ZUZpbGUsXG59IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBob21lZGlyLCB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tIFwibm9kZTp1dGlsXCI7XG5cbmltcG9ydCB7IGVycm9yVXRpbHMsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgZXh0cmFjdFppcCBmcm9tIFwiZXh0cmFjdC16aXBcIjtcbmltcG9ydCB7IHggYXMgZXh0cmFjdFRhciB9IGZyb20gXCJ0YXJcIjtcblxuaW1wb3J0IHsgd2l0aEZpbGVMb2NrIH0gZnJvbSBcIi4vZmlsZS1sb2NrLnRzXCI7XG5cbmNvbnN0IGV4ZWNGaWxlQXN5bmMgPSBwcm9taXNpZnkoZXhlY0ZpbGUpO1xuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImNvcmU6YmluXCIpO1xuXG5pbnRlcmZhY2UgUGFyc2VkVmVyc2lvbiB7XG4gIHJhdzogc3RyaW5nO1xuICBwYXJ0czogbnVtYmVyW107XG59XG5cbmludGVyZmFjZSBCaW5BY2Nlc3NDb250ZXh0IHtcbiAgZmlsZTogYm9vbGVhbjtcbiAgZXhlY3V0YWJsZTogYm9vbGVhbjtcbn1cblxuLyoqIFN0YWJsZSBwYXRocyBmb3IgYW4gaW5zdGFsbGVkIGJpbmFyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluQ29udGV4dCB7XG4gIHJvb3Q6IHN0cmluZztcbiAgYmluRGlyOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuLyoqIFRlbXBvcmFyeSBkb3dubG9hZCBhbmQgZXh0cmFjdGlvbiBwYXRocyBzdXBwbGllZCB0byBhIGN1c3RvbSBzZWxlY3Rvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluU2VsZWN0aW9uQ29udGV4dCB7XG4gIGRlc3RpbmF0aW9uOiBCaW5Db250ZXh0O1xuICBkb3dubG9hZFBhdGg6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VsZWN0IHRoZSBleGVjdXRhYmxlIGZyb20gYSBkb3dubG9hZCBvciB1bnBhY2tlZCBhcmNoaXZlLiBBIHNlbGVjdG9yIG1heVxuICogYWxzbyBwcmVwYXJlIHRoZSBmaWxlLCBzdWNoIGFzIGFwcGx5aW5nIGl0cyBleGVjdXRhYmxlIG1vZGUuXG4gKi9cbmV4cG9ydCB0eXBlIEJpblNlbGVjdG9yID0gKGNvbnRleHQ6IEJpblNlbGVjdGlvbkNvbnRleHQpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcblxuLyoqIENhcHR1cmVkIG91dHB1dCBwYXNzZWQgdG8gYSBjdXN0b20gYmluYXJ5IHZlcnNpb24gcGFyc2VyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5WZXJzaW9uT3V0cHV0IHtcbiAgc3Rkb3V0OiBzdHJpbmc7XG4gIHN0ZGVycjogc3RyaW5nO1xufVxuXG4vKiogRXh0cmFjdCBhIHZlcnNpb24gc3RyaW5nIGZyb20gYSBzdWNjZXNzZnVsIHZlcnNpb24tY29tbWFuZCByZXN1bHQuICovXG5leHBvcnQgdHlwZSBCaW5WZXJzaW9uUGFyc2VyID0gKG91dHB1dDogQmluVmVyc2lvbk91dHB1dCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIGVuc3VyZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbk9wdGlvbnMge1xuICBhdXRvVW5wYWNrYWdlPzogYm9vbGVhbjtcbiAgc2VsZWN0b3I/OiBCaW5TZWxlY3RvcjtcbiAgaG9tZURpcj86IHN0cmluZztcbiAgLyoqIEV4YWN0IGluc3RhbGxhdGlvbiBwYXRocy4gT21pc3Npb24ga2VlcHMgYCRIT01FLy48bmFtZT4vYmluLzxuYW1lPmAuICovXG4gIGRlc3RpbmF0aW9uPzogQmluQ29udGV4dDtcbiAgLyoqIE1pbmltdW0gYWNjZXB0ZWQgbnVtZXJpYyB2ZXJzaW9uLCB3aXRoIG9uZSB0byB0aHJlZSBjb21wb25lbnRzLiAqL1xuICBtaW5WZXJzaW9uPzogc3RyaW5nO1xuICAvKiogQXJndW1lbnQgcGFzc2VkIHRvIHRoZSBiaW5hcnkgZm9yIHZlcnNpb24gZGV0ZWN0aW9uLiBEZWZhdWx0cyB0byBgLS12ZXJzaW9uYC4gKi9cbiAgdmVyc2lvbkFyZ3VtZW50Pzogc3RyaW5nO1xuICAvKiogVmVyc2lvbiBvdXRwdXQgcGFyc2VyLiBEZWZhdWx0cyB0byB7QGxpbmsgcGFyc2VWZXJzaW9ufS4gKi9cbiAgdmVyc2lvblBhcnNlcj86IEJpblZlcnNpb25QYXJzZXI7XG4gIC8qKiBTa2lwIGAtLXZlcnNpb25gIGFuZCB0cmVhdCBhbiBleGVjdXRhYmxlIGZpbGUgYXMgYWNjZXB0YWJsZS4gKi9cbiAgc2tpcFZlcnNpb25DaGVjaz86IGJvb2xlYW47XG59XG5cbi8qKiBUZW1wb3JhcnkgZGlyZWN0b3J5IGNyZWF0ZWQgZm9yIG9uZSBgZW5zdXJlYCBhdHRlbXB0IGFmdGVyIHRoZSBpbnN0YWxsIGxvY2suICovXG5leHBvcnQgaW50ZXJmYWNlIEJpblVybFJlc29sdmVDb250ZXh0IHtcbiAgcmVhZG9ubHkgdGVtcERpcjogc3RyaW5nO1xufVxuXG4vKiogRG93bmxvYWQgc291cmNlIHJlc29sdmVkIG9ubHkgd2hlbiB0aGUgZXhlY3V0YWJsZSBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpblNvdXJjZSB7XG4gIHVybDogc3RyaW5nO1xuICBzaGEyNTY/OiBzdHJpbmc7XG59XG5cbi8qKiBBIGRvd25sb2FkIHNvdXJjZSByZXNvbHZlZCBvbmx5IHdoZW4gdGhlIGV4ZWN1dGFibGUgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLiAqL1xuZXhwb3J0IHR5cGUgQmluVXJsID1cbiAgfCBzdHJpbmdcbiAgfCBCaW5Tb3VyY2VcbiAgfCAoKGNvbnRleHQ6IEJpblVybFJlc29sdmVDb250ZXh0KSA9PiBzdHJpbmcgfCBCaW5Tb3VyY2UgfCBQcm9taXNlPHN0cmluZyB8IEJpblNvdXJjZT4pO1xuXG5mdW5jdGlvbiBjb250ZXh0KG5hbWU6IHN0cmluZywgaG9tZURpcjogc3RyaW5nLCBkZXN0aW5hdGlvbj86IEJpbkNvbnRleHQpOiBCaW5Db250ZXh0IHtcbiAgaWYgKCFuYW1lIHx8IGJhc2VuYW1lKG5hbWUpICE9PSBuYW1lIHx8IG5hbWUgPT09IFwiLlwiIHx8IG5hbWUgPT09IFwiLi5cIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgYmluYXJ5IG5hbWU6ICR7bmFtZX1gKTtcbiAgfVxuICBpZiAoZGVzdGluYXRpb24pIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgY29uc3Qgcm9vdCA9IGpvaW4oaG9tZURpciwgYC4ke25hbWV9YCk7XG4gIGNvbnN0IGJpbkRpciA9IGpvaW4ocm9vdCwgXCJiaW5cIik7XG4gIHJldHVybiB7IHJvb3QsIGJpbkRpciwgcGF0aDogam9pbihiaW5EaXIsIG5hbWUpIH07XG59XG5cbmZ1bmN0aW9uIGRpc3BsYXlVcmwocmF3OiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmF3KTtcbiAgICBpZiAodXJsLnByb3RvY29sID09PSBcImRhdGE6XCIpIHJldHVybiBcImRhdGE6XCI7XG4gICAgdXJsLnVzZXJuYW1lID0gXCJcIjtcbiAgICB1cmwucGFzc3dvcmQgPSBcIlwiO1xuICAgIHVybC5zZWFyY2ggPSBcIlwiO1xuICAgIHVybC5oYXNoID0gXCJcIjtcbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiByYXc7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYWNjZXNzQ29udGV4dChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJpbkFjY2Vzc0NvbnRleHQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IHN0YXQocGF0aCk7XG4gICAgY29uc3QgZmlsZSA9IGVudHJ5LmlzRmlsZSgpO1xuICAgIHJldHVybiB7XG4gICAgICBmaWxlLFxuICAgICAgZXhlY3V0YWJsZTogZmlsZSAmJiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiIHx8IChlbnRyeS5tb2RlICYgMG8xMTEpICE9PSAwKSxcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBmaWxlOiBmYWxzZSwgZXhlY3V0YWJsZTogZmFsc2UgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlY3RlZFZlcnNpb25zKG91dHB1dDogc3RyaW5nKTogUGFyc2VkVmVyc2lvbltdIHtcbiAgY29uc3QgdmVyc2lvbnM6IFBhcnNlZFZlcnNpb25bXSA9IFtdO1xuICBjb25zdCBwYXR0ZXJuID0gL1xcYnY/KFxcZCsoPzpcXC5cXGQrKXswLDJ9KSg/OlstKy5fXT9bYS16XVswLTlhLXouK18tXSopPy9naTtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiBvdXRwdXQubWF0Y2hBbGwocGF0dGVybikpIHtcbiAgICBjb25zdCByYXcgPSBtYXRjaFswXS5yZXBsYWNlKC9edi9pLCBcIlwiKTtcbiAgICBjb25zdCBwYXJ0cyA9IG1hdGNoWzFdPy5zcGxpdChcIi5cIikubWFwKE51bWJlcik7XG4gICAgaWYgKHBhcnRzPy5ldmVyeShOdW1iZXIuaXNGaW5pdGUpKSB2ZXJzaW9ucy5wdXNoKHsgcmF3LCBwYXJ0cyB9KTtcbiAgfVxuICByZXR1cm4gdmVyc2lvbnMuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLnBhcnRzLmxlbmd0aCAhPT0gYi5wYXJ0cy5sZW5ndGgpIHJldHVybiBiLnBhcnRzLmxlbmd0aCAtIGEucGFydHMubGVuZ3RoO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhLnBhcnRzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAoYi5wYXJ0c1tpbmRleF0gPz8gMCkgLSAoYS5wYXJ0c1tpbmRleF0gPz8gMCk7XG4gICAgICBpZiAob3JkZXIgIT09IDApIHJldHVybiBvcmRlcjtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBkZWVwZXN0LCBoaWdoZXN0IHZlcnNpb24gZnJvbSBzdGRvdXQsIGZhbGxpbmcgYmFjayB0byBzdGRlcnIgb25seVxuICogd2hlbiBzdGRvdXQgY29udGFpbnMgbm8gdmVyc2lvbi4gU3VwcG9ydHMgb25lIHRvIHRocmVlIG51bWVyaWMgY29tcG9uZW50c1xuICogYW5kIGNvbW1vbiBzdWZmaXhlcyBzdWNoIGFzIGByYzFgLCBgLnBvc3QxYCwgYW5kIGAtZGV2LjJgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VWZXJzaW9uKHsgc3Rkb3V0LCBzdGRlcnIgfTogQmluVmVyc2lvbk91dHB1dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBkZXRlY3RlZFZlcnNpb25zKHN0ZG91dCkuYXQoMCk/LnJhdyA/PyBkZXRlY3RlZFZlcnNpb25zKHN0ZGVycikuYXQoMCk/LnJhdztcbn1cblxuZnVuY3Rpb24gbnVtZXJpY1ZlcnNpb24odmVyc2lvbjogc3RyaW5nLCBzdHJpY3Q6IGJvb2xlYW4pOiBudW1iZXJbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhdHRlcm4gPSBzdHJpY3QgPyAvXlxccyp2PyhcXGQrKD86XFwuXFxkKyl7MCwyfSlcXHMqJC9pIDogL1xcYnY/KFxcZCsoPzpcXC5cXGQrKXswLDJ9KS9pO1xuICBjb25zdCBtYXRjaCA9IHBhdHRlcm4uZXhlYyh2ZXJzaW9uKTtcbiAgcmV0dXJuIG1hdGNoPy5bMV0/LnNwbGl0KFwiLlwiKS5tYXAoTnVtYmVyKTtcbn1cblxuZnVuY3Rpb24gbWVldHNNaW5WZXJzaW9uKHZlcnNpb246IHN0cmluZywgbWluVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIGlmICghbWluVmVyc2lvbikgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGFjdHVhbCA9IG51bWVyaWNWZXJzaW9uKHZlcnNpb24sIGZhbHNlKTtcbiAgY29uc3QgbWluaW11bSA9IG51bWVyaWNWZXJzaW9uKG1pblZlcnNpb24sIHRydWUpO1xuICBpZiAoIW1pbmltdW0pIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIG1pbmltdW0gYmluYXJ5IHZlcnNpb246ICR7bWluVmVyc2lvbn1gKTtcbiAgfVxuICBpZiAoIWFjdHVhbCkgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTWF0aC5tYXgoYWN0dWFsLmxlbmd0aCwgbWluaW11bS5sZW5ndGgpOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IChhY3R1YWxbaW5kZXhdID8/IDApIC0gKG1pbmltdW1baW5kZXhdID8/IDApO1xuICAgIGlmIChkaWZmZXJlbmNlICE9PSAwKSByZXR1cm4gZGlmZmVyZW5jZSA+IDA7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzVmFsaWRCaW4ocGF0aDogc3RyaW5nLCBvcHRpb25zOiBCaW5PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGxvZ2dlci5kZWJ1ZyhcImNoZWNraW5nIGJpbmFyeVwiLCB7XG4gICAgcGF0aCxcbiAgICBtaW5WZXJzaW9uOiBvcHRpb25zLm1pblZlcnNpb24sXG4gICAgdmVyc2lvbkFyZ3VtZW50OiBvcHRpb25zLnZlcnNpb25Bcmd1bWVudCA/PyBcIi0tdmVyc2lvblwiLFxuICB9KTtcbiAgY29uc3QgYWNjZXNzID0gYXdhaXQgYWNjZXNzQ29udGV4dChwYXRoKTtcbiAgaWYgKCFhY2Nlc3MuZmlsZSB8fCAhYWNjZXNzLmV4ZWN1dGFibGUpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJiaW5hcnkgYWNjZXNzIGNoZWNrIGZhaWxlZFwiLCB7IHBhdGgsIC4uLmFjY2VzcyB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKG9wdGlvbnMuc2tpcFZlcnNpb25DaGVjaykge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImJpbmFyeSB2ZXJzaW9uIGNoZWNrIHNraXBwZWRcIiwgeyBwYXRoIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxldCBzdGRvdXQ6IHN0cmluZztcbiAgbGV0IHN0ZGVycjogc3RyaW5nO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNGaWxlQXN5bmMocGF0aCwgW29wdGlvbnMudmVyc2lvbkFyZ3VtZW50ID8/IFwiLS12ZXJzaW9uXCJdLCB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSk7XG4gICAgc3Rkb3V0ID0gcmVzdWx0LnN0ZG91dDtcbiAgICBzdGRlcnIgPSByZXN1bHQuc3RkZXJyO1xuICB9IGNhdGNoIChjYXVzZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImJpbmFyeSB2ZXJzaW9uIGNvbW1hbmQgZmFpbGVkXCIsIHtcbiAgICAgIHBhdGgsXG4gICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoY2F1c2UpLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCB2ZXJzaW9uID0gKG9wdGlvbnMudmVyc2lvblBhcnNlciA/PyBwYXJzZVZlcnNpb24pKHtcbiAgICBzdGRvdXQsXG4gICAgc3RkZXJyLFxuICB9KTtcbiAgY29uc3QgdmFsaWQgPSB2ZXJzaW9uICE9PSB1bmRlZmluZWQgJiYgbWVldHNNaW5WZXJzaW9uKHZlcnNpb24sIG9wdGlvbnMubWluVmVyc2lvbik7XG4gIGxvZ2dlci5kZWJ1ZyhcImJpbmFyeSB2ZXJzaW9uIGNoZWNrZWRcIiwge1xuICAgIHBhdGgsXG4gICAgdmVyc2lvbixcbiAgICBtaW5WZXJzaW9uOiBvcHRpb25zLm1pblZlcnNpb24sXG4gICAgdmFsaWQsXG4gIH0pO1xuICByZXR1cm4gdmFsaWQ7XG59XG5cbmZ1bmN0aW9uIGRvd25sb2FkTmFtZSh1cmw6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBiYXNlbmFtZShkZWNvZGVVUklDb21wb25lbnQobmV3IFVSTCh1cmwpLnBhdGhuYW1lKSk7XG4gICAgcmV0dXJuIGNhbmRpZGF0ZSAmJiBCdWZmZXIuYnl0ZUxlbmd0aChjYW5kaWRhdGUpIDw9IDIwMCA/IGNhbmRpZGF0ZSA6IG5hbWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVucGFjayhhcmNoaXZlOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZmlsZW5hbWUgPSBhcmNoaXZlLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChmaWxlbmFtZS5lbmRzV2l0aChcIi56aXBcIikpIHtcbiAgICBhd2FpdCBleHRyYWN0WmlwKGFyY2hpdmUsIHsgZGlyOiBkZXN0aW5hdGlvbiB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKFwiLnRhclwiKSB8fCBmaWxlbmFtZS5lbmRzV2l0aChcIi50YXIuZ3pcIikgfHwgZmlsZW5hbWUuZW5kc1dpdGgoXCIudGd6XCIpKSB7XG4gICAgYXdhaXQgZXh0cmFjdFRhcih7IGZpbGU6IGFyY2hpdmUsIGN3ZDogZGVzdGluYXRpb24gfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgYmluYXJ5IGFyY2hpdmU6ICR7YmFzZW5hbWUoYXJjaGl2ZSl9YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbGVzVW5kZXIocm9vdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihyb290LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBwYXRoID0gam9pbihyb290LCBlbnRyeS5uYW1lKTtcbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgZmlsZXMucHVzaCguLi4oYXdhaXQgZmlsZXNVbmRlcihwYXRoKSkpO1xuICAgIH0gZWxzZSBpZiAoZW50cnkuaXNGaWxlKCkpIHtcbiAgICAgIGZpbGVzLnB1c2gocGF0aCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWxlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0U2luZ2xlRmlsZShzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgZmlsZXNVbmRlcihzb3VyY2UpO1xuICBjb25zdCBzZWxlY3RlZCA9IGZpbGVzLmF0KDApO1xuICBpZiAoZmlsZXMubGVuZ3RoICE9PSAxIHx8ICFzZWxlY3RlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgYmluYXJ5IGFyY2hpdmUgbXVzdCBjb250YWluIG9uZSBmaWxlLCBmb3VuZCAke2ZpbGVzLmxlbmd0aH1gKTtcbiAgfVxuICByZXR1cm4gc2VsZWN0ZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbGVVcmxQYXRoKHVybDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgaWYgKHBhcnNlZC5wcm90b2NvbCAhPT0gXCJmaWxlOlwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBmaWxlVVJMVG9QYXRoKHBhcnNlZCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0ZWRCaW4oXG4gIGRlc3RpbmF0aW9uOiBCaW5Db250ZXh0LFxuICBzb3VyY2U6IEJpblNvdXJjZSxcbiAgdGVtcDogc3RyaW5nLFxuICBvcHRpb25zOiBCaW5PcHRpb25zLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyB1cmwgfSA9IHNvdXJjZTtcbiAgY29uc3QgbG9jYWxQYXRoID0gZmlsZVVybFBhdGgodXJsKTtcbiAgaWYgKGxvY2FsUGF0aCkge1xuICAgIGNvbnN0IGFjY2VzcyA9IGF3YWl0IGFjY2Vzc0NvbnRleHQobG9jYWxQYXRoKTtcbiAgICBpZiAoIWFjY2Vzcy5maWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGJpbmFyeSBmaWxlIFVSTCBkb2VzIG5vdCBleGlzdDogJHtkaXNwbGF5VXJsKHVybCl9YCk7XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhcInVzaW5nIGxvY2FsIGJpbmFyeVwiLCB7IGZyb206IGRpc3BsYXlVcmwodXJsKSwgcGF0aDogbG9jYWxQYXRoIH0pO1xuICAgIHJldHVybiBsb2NhbFBhdGg7XG4gIH1cbiAgY29uc3QgbmFtZSA9IGRvd25sb2FkTmFtZSh1cmwsIGJhc2VuYW1lKGRlc3RpbmF0aW9uLnBhdGgpKTtcbiAgY29uc3QgZG93bmxvYWRQYXRoID0gam9pbih0ZW1wLCBuYW1lKTtcbiAgbG9nZ2VyLmRlYnVnKFwiZG93bmxvYWRpbmcgYmluYXJ5XCIsIHtcbiAgICBmcm9tOiBkaXNwbGF5VXJsKHVybCksXG4gICAgdG86IGRvd25sb2FkUGF0aCxcbiAgfSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgYmluYXJ5IGRvd25sb2FkIGZhaWxlZCAoJHtyZXNwb25zZS5zdGF0dXN9KWApO1xuICB9XG4gIGNvbnN0IGRvd25sb2FkZWQgPSBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcbiAgaWYgKHNvdXJjZS5zaGEyNTYpIHtcbiAgICBpZiAoIS9eWzAtOWEtZl17NjR9JC9pLnRlc3Qoc291cmNlLnNoYTI1NikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJiaW5hcnkgZG93bmxvYWQgU0hBLTI1NiBkaWdlc3QgbXVzdCBjb250YWluIDY0IGhleGFkZWNpbWFsIGNoYXJhY3RlcnNcIik7XG4gICAgfVxuICAgIGNvbnN0IGFjdHVhbCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGRvd25sb2FkZWQpLmRpZ2VzdChcImhleFwiKTtcbiAgICBpZiAoYWN0dWFsLnRvTG93ZXJDYXNlKCkgIT09IHNvdXJjZS5zaGEyNTYudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBiaW5hcnkgZG93bmxvYWQgZGlnZXN0IG1pc21hdGNoOiAke2Rpc3BsYXlVcmwodXJsKX1gKTtcbiAgICB9XG4gIH1cbiAgYXdhaXQgd3JpdGVGaWxlKGRvd25sb2FkUGF0aCwgZG93bmxvYWRlZCwgeyBtb2RlOiAwbzc1NSB9KTtcblxuICBsZXQgc2VsZWN0ZWRTb3VyY2UgPSBkb3dubG9hZFBhdGg7XG4gIGlmIChvcHRpb25zLmF1dG9VbnBhY2thZ2UpIHtcbiAgICBzZWxlY3RlZFNvdXJjZSA9IGpvaW4odGVtcCwgYHVucGFja2VkLSR7cmFuZG9tVVVJRCgpfWApO1xuICAgIGF3YWl0IG1rZGlyKHNlbGVjdGVkU291cmNlKTtcbiAgICBsb2dnZXIuZGVidWcoXCJ1bnBhY2tpbmcgYmluYXJ5IGFyY2hpdmVcIiwge1xuICAgICAgYXJjaGl2ZTogZG93bmxvYWRQYXRoLFxuICAgICAgdG86IHNlbGVjdGVkU291cmNlLFxuICAgIH0pO1xuICAgIGF3YWl0IHVucGFjayhkb3dubG9hZFBhdGgsIHNlbGVjdGVkU291cmNlKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNlbGVjdG9yKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBhd2FpdCBvcHRpb25zLnNlbGVjdG9yKHtcbiAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgZG93bmxvYWRQYXRoLFxuICAgICAgc291cmNlOiBzZWxlY3RlZFNvdXJjZSxcbiAgICB9KTtcbiAgICBsb2dnZXIuZGVidWcoXCJzZWxlY3RlZCBiaW5hcnlcIiwgeyBwYXRoOiBzZWxlY3RlZCB9KTtcbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cbiAgY29uc3Qgc2VsZWN0ZWQgPSBvcHRpb25zLmF1dG9VbnBhY2thZ2UgPyBhd2FpdCBzZWxlY3RTaW5nbGVGaWxlKHNlbGVjdGVkU291cmNlKSA6IHNlbGVjdGVkU291cmNlO1xuICBsb2dnZXIuZGVidWcoXCJzZWxlY3RlZCBiaW5hcnlcIiwgeyBwYXRoOiBzZWxlY3RlZCB9KTtcbiAgcmV0dXJuIHNlbGVjdGVkO1xufVxuXG4vKipcbiAqIFJldHVybiBhbiBleGlzdGluZyBleGVjdXRhYmxlIG9yIGluc3RhbGwgaXQgYXRvbWljYWxseSB1bmRlclxuICogYCRIT01FLy48bmFtZT4vYmluLzxuYW1lPmAuIEluc3RhbGxhdGlvbiB1c2VzIGEgY2hlY2stbG9jay1jaGVjay1sb2FkXG4gKiBzZXF1ZW5jZSBzbyBjb25jdXJyZW50IGNhbGxlcnMgcmVzb2x2ZSBhbmQgZG93bmxvYWQgdGhlIGJpbmFyeSBvbmx5IG9uY2UuXG4gKiBUaGUgZG93bmxvYWRlZCBjYW5kaWRhdGUgYW5kIGZpbmFsIHJlbmFtZWQgZXhlY3V0YWJsZSBtdXN0IGJvdGggcGFzcyB0aGVcbiAqIHNhbWUgZXhlY3V0YWJsZSBhbmQgdmVyc2lvbiBjaGVja3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmUoXG4gIG5hbWU6IHN0cmluZyxcbiAgdXJsOiBCaW5VcmwsXG4gIG9wdGlvbnM6IEJpbk9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8QmluQ29udGV4dD4ge1xuICBpZiAob3B0aW9ucy5taW5WZXJzaW9uICYmICFudW1lcmljVmVyc2lvbihvcHRpb25zLm1pblZlcnNpb24sIHRydWUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBtaW5pbXVtIGJpbmFyeSB2ZXJzaW9uOiAke29wdGlvbnMubWluVmVyc2lvbn1gKTtcbiAgfVxuICBjb25zdCBkZXN0aW5hdGlvbiA9IGNvbnRleHQobmFtZSwgb3B0aW9ucy5ob21lRGlyID8/IGhvbWVkaXIoKSwgb3B0aW9ucy5kZXN0aW5hdGlvbik7XG4gIGlmIChhd2FpdCBpc1ZhbGlkQmluKGRlc3RpbmF0aW9uLnBhdGgsIG9wdGlvbnMpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwidXNpbmcgaW5zdGFsbGVkIGJpbmFyeVwiLCB7IG5hbWUsIHBhdGg6IGRlc3RpbmF0aW9uLnBhdGggfSk7XG4gICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKFwid2FpdGluZyBmb3IgYmluYXJ5IGluc3RhbGwgbG9ja1wiLCB7IG5hbWUsIHBhdGg6IGRlc3RpbmF0aW9uLnBhdGggfSk7XG4gIHJldHVybiB3aXRoRmlsZUxvY2soW1wiYmluLmVuc3VyZVwiLCBkZXN0aW5hdGlvbi5wYXRoXSwgYXN5bmMgKCkgPT4ge1xuICAgIGlmIChhd2FpdCBpc1ZhbGlkQmluKGRlc3RpbmF0aW9uLnBhdGgsIG9wdGlvbnMpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJ1c2luZyBiaW5hcnkgaW5zdGFsbGVkIGJ5IGFub3RoZXIgY2FsbGVyXCIsIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcGF0aDogZGVzdGluYXRpb24ucGF0aCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZyhcImluc3RhbGxpbmcgYmluYXJ5XCIsIHtcbiAgICAgIG5hbWUsXG4gICAgICB0bzogZGVzdGluYXRpb24ucGF0aCxcbiAgICAgIG1pblZlcnNpb246IG9wdGlvbnMubWluVmVyc2lvbixcbiAgICB9KTtcbiAgICBjb25zdCB0ZW1wID0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCBgJHtuYW1lfS1gKSk7XG4gICAgbGV0IHN0YWdlZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IHR5cGVvZiB1cmwgPT09IFwiZnVuY3Rpb25cIiA/IGF3YWl0IHVybCh7IHRlbXBEaXI6IHRlbXAgfSkgOiB1cmw7XG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlb2YgcmVzb2x2ZWQgPT09IFwic3RyaW5nXCIgPyB7IHVybDogcmVzb2x2ZWQgfSA6IHJlc29sdmVkO1xuICAgICAgY29uc3QgZnJvbSA9IGRpc3BsYXlVcmwoc291cmNlLnVybCk7XG4gICAgICBsb2dnZXIuZGVidWcoXCJyZXNvbHZlZCBiaW5hcnkgc291cmNlXCIsIHsgbmFtZSwgZnJvbSB9KTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gYXdhaXQgc2VsZWN0ZWRCaW4oZGVzdGluYXRpb24sIHNvdXJjZSwgdGVtcCwgb3B0aW9ucyk7XG4gICAgICBhd2FpdCBjaG1vZChzZWxlY3RlZCwgMG83NTUpO1xuICAgICAgaWYgKCEoYXdhaXQgaXNWYWxpZEJpbihzZWxlY3RlZCwgb3B0aW9ucykpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgc2VsZWN0ZWQgYmluYXJ5IGhhcyBubyBhY2NlcHRhYmxlIHZlcnNpb246ICR7c2VsZWN0ZWR9YCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IG1rZGlyKGRlc3RpbmF0aW9uLmJpbkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBzdGFnZWQgPSBqb2luKGRlc3RpbmF0aW9uLmJpbkRpciwgYC4ke25hbWV9LSR7cmFuZG9tVVVJRCgpfWApO1xuICAgICAgYXdhaXQgY29weUZpbGUoc2VsZWN0ZWQsIHN0YWdlZCk7XG4gICAgICBhd2FpdCBjaG1vZChzdGFnZWQsIDBvNzU1KTtcbiAgICAgIGF3YWl0IHJlbmFtZShzdGFnZWQsIGRlc3RpbmF0aW9uLnBhdGgpO1xuICAgICAgc3RhZ2VkID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKCEoYXdhaXQgaXNWYWxpZEJpbihkZXN0aW5hdGlvbi5wYXRoLCBvcHRpb25zKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnN0YWxsZWQgYmluYXJ5IGlzIGludmFsaWQgYWZ0ZXIgcmVuYW1lOiAke2Rlc3RpbmF0aW9uLnBhdGh9YCk7XG4gICAgICB9XG4gICAgICBsb2dnZXIuaW5mbyhcImluc3RhbGxlZCBiaW5hcnlcIiwge1xuICAgICAgICBuYW1lLFxuICAgICAgICBmcm9tLFxuICAgICAgICB0bzogZGVzdGluYXRpb24ucGF0aCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoc3RhZ2VkKSBhd2FpdCBybShzdGFnZWQsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICBhd2FpdCBybSh0ZW1wLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
|
|
322
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFDTCxLQUFLLEVBQ0wsUUFBUSxFQUNSLEtBQUssRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUNQLE1BQU0sRUFDTixFQUFFLEVBQ0YsSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEtBQUssVUFBVSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sS0FBSyxHQUFHLE1BQU0sNEJBQTRCLENBQUM7QUFDbEQsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFlLE1BQU0sUUFBUSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxDQUFDLElBQUksVUFBVSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQTJFdEMsU0FBUyxPQUFPLENBQUMsSUFBWSxFQUFFLE9BQWUsRUFBRSxXQUF3QjtJQUN0RSxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDdEUsTUFBTSxJQUFJLFNBQVMsQ0FBQyx3QkFBd0IsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3BELENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxHQUFXO0lBQzdCLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxPQUFPO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDN0MsR0FBRyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsR0FBRyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxhQUFhLENBQUMsSUFBWTtJQUN2QyxJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUIsT0FBTztZQUNMLElBQUk7WUFDSixVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqRixDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsTUFBYztJQUN0QyxNQUFNLFFBQVEsR0FBb0IsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLHlEQUF5RCxDQUFDO0lBQzFFLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQUksS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzlFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1RCxJQUFJLEtBQUssS0FBSyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBb0I7SUFDL0QsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7QUFDcEYsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLE9BQWU7SUFDcEMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNwRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUM7QUFDdkQsQ0FBQztBQUVELGdGQUFnRjtBQUNoRixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBZSxFQUFFLFVBQWtCO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksU0FBUyxDQUFDLG1DQUFtQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMxQixPQUFPLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELEtBQUssVUFBVSxVQUFVLENBQUMsSUFBWSxFQUFFLE9BQW1CO0lBQ3pELE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7UUFDOUIsSUFBSTtRQUNKLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUM5QixlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWUsSUFBSSxXQUFXO0tBQ3hELENBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxNQUFjLENBQUM7SUFDbkIsSUFBSSxNQUFjLENBQUM7SUFDbkIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsSUFBSSxXQUFXLENBQUMsRUFBRTtZQUNqRixRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN2QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUU7WUFDNUMsSUFBSTtZQUNKLEtBQUssRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztTQUN0QyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksWUFBWSxDQUFDLENBQUM7UUFDdEQsTUFBTTtRQUNOLE1BQU07S0FDUCxDQUFDLENBQUM7SUFDSCxNQUFNLEtBQUssR0FDVCxPQUFPLEtBQUssU0FBUztRQUNyQixDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUN0RixNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFO1FBQ3JDLElBQUk7UUFDSixPQUFPO1FBQ1AsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzlCLEtBQUs7S0FDTixDQUFDLENBQUM7SUFDSCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxHQUFXLEVBQUUsSUFBWTtJQUM3QyxJQUFJLENBQUM7UUFDSCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RSxPQUFPLFNBQVMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDN0UsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsTUFBTSxDQUFDLE9BQWUsRUFBRSxXQUFtQjtJQUN4RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDOUIsTUFBTSxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDaEQsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDM0YsTUFBTSxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsS0FBSyxVQUFVLFVBQVUsQ0FBQyxJQUFZO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsTUFBYztJQUM1QyxNQUFNLEtBQUssR0FBRyxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQVc7SUFDOUIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLE9BQU87WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNsRCxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsV0FBVyxDQUN4QixXQUF1QixFQUN2QixNQUFpQixFQUNqQixJQUFZLEVBQ1osT0FBbUI7SUFFbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUN2QixNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDL0UsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRTtRQUNqQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUNyQixFQUFFLEVBQUUsWUFBWTtLQUNqQixDQUFDLENBQUM7SUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDN0QsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLElBQUksU0FBUyxDQUFDLHVFQUF1RSxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN6RCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxTQUFTLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRTNELElBQUksY0FBYyxHQUFHLFlBQVksQ0FBQztJQUNsQyxJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxQixjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4RCxNQUFNLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFO1lBQ3ZDLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLEVBQUUsRUFBRSxjQUFjO1NBQ25CLENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDckIsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ3RDLFdBQVc7WUFDWCxZQUFZO1lBQ1osTUFBTSxFQUFFLGNBQWM7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDakcsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLE1BQU0sQ0FDMUIsSUFBWSxFQUNaLEdBQVcsRUFDWCxVQUFzQixFQUFFO0lBRXhCLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUM3RCxNQUFNLElBQUksU0FBUyxDQUFDLG1DQUFtQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRixJQUFJLE1BQU0sVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEYsT0FBTyxZQUFZLENBQUMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQy9ELElBQUksTUFBTSxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hELE1BQU0sQ0FBQyxLQUFLLENBQUMsMENBQTBDLEVBQUU7Z0JBQ3ZELElBQUk7Z0JBQ0osSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO2FBQ3ZCLENBQUMsQ0FBQztZQUNILE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFO1lBQ2hDLElBQUk7WUFDSixFQUFFLEVBQUUsV0FBVyxDQUFDLElBQUk7WUFDcEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1NBQy9CLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLE1BQTBCLENBQUM7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsT0FBTyxHQUFHLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDaEYsTUFBTSxNQUFNLEdBQUcsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzNFLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLENBQUM7WUFFRCxNQUFNLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDckQsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RCxNQUFNLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakMsTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNCLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbkYsQ0FBQztZQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzlCLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixFQUFFLEVBQUUsV0FBVyxDQUFDLElBQUk7YUFDckIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxNQUFNO2dCQUFFLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW5zdGFsbCBhbmQgcmV1c2UgZXhlY3V0YWJsZSBiaW5hcmllcyB1bmRlciBhIHBlci10b29sIGhvbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBjcmVhdGVIYXNoLCByYW5kb21VVUlEIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQge1xuICBjaG1vZCxcbiAgY29weUZpbGUsXG4gIG1rZGlyLFxuICBta2R0ZW1wLFxuICByZWFkZGlyLFxuICByZW5hbWUsXG4gIHJtLFxuICBzdGF0LFxuICB3cml0ZUZpbGUsXG59IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBob21lZGlyLCB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tIFwibm9kZTp1dGlsXCI7XG5cbmltcG9ydCAqIGFzIGVycm9yVXRpbHMgZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmUvZXJyb3ItdXRpbHNcIjtcbmltcG9ydCAqIGFzIGxvZyBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9sb2dcIjtcbmltcG9ydCBleHRyYWN0WmlwIGZyb20gXCJleHRyYWN0LXppcFwiO1xuaW1wb3J0IHsgY29lcmNlLCBndGUsIHR5cGUgU2VtVmVyIH0gZnJvbSBcInNlbXZlclwiO1xuaW1wb3J0IHsgeCBhcyBleHRyYWN0VGFyIH0gZnJvbSBcInRhclwiO1xuXG5pbXBvcnQgeyB3aXRoRmlsZUxvY2sgfSBmcm9tIFwiLi9maWxlLWxvY2sudHNcIjtcblxuY29uc3QgZXhlY0ZpbGVBc3luYyA9IHByb21pc2lmeShleGVjRmlsZSk7XG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiY29yZTpiaW5cIik7XG5cbmludGVyZmFjZSBQYXJzZWRWZXJzaW9uIHtcbiAgcmF3OiBzdHJpbmc7XG4gIHBhcnRzOiBudW1iZXJbXTtcbn1cblxuaW50ZXJmYWNlIEJpbkFjY2Vzc0NvbnRleHQge1xuICBmaWxlOiBib29sZWFuO1xuICBleGVjdXRhYmxlOiBib29sZWFuO1xufVxuXG4vKiogU3RhYmxlIHBhdGhzIGZvciBhbiBpbnN0YWxsZWQgYmluYXJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5Db250ZXh0IHtcbiAgcm9vdDogc3RyaW5nO1xuICBiaW5EaXI6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xufVxuXG4vKiogVGVtcG9yYXJ5IGRvd25sb2FkIGFuZCBleHRyYWN0aW9uIHBhdGhzIHN1cHBsaWVkIHRvIGEgY3VzdG9tIHNlbGVjdG9yLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5TZWxlY3Rpb25Db250ZXh0IHtcbiAgZGVzdGluYXRpb246IEJpbkNvbnRleHQ7XG4gIGRvd25sb2FkUGF0aDogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWxlY3QgdGhlIGV4ZWN1dGFibGUgZnJvbSBhIGRvd25sb2FkIG9yIHVucGFja2VkIGFyY2hpdmUuIEEgc2VsZWN0b3IgbWF5XG4gKiBhbHNvIHByZXBhcmUgdGhlIGZpbGUsIHN1Y2ggYXMgYXBwbHlpbmcgaXRzIGV4ZWN1dGFibGUgbW9kZS5cbiAqL1xuZXhwb3J0IHR5cGUgQmluU2VsZWN0b3IgPSAoY29udGV4dDogQmluU2VsZWN0aW9uQ29udGV4dCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuXG4vKiogQ2FwdHVyZWQgb3V0cHV0IHBhc3NlZCB0byBhIGN1c3RvbSBiaW5hcnkgdmVyc2lvbiBwYXJzZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpblZlcnNpb25PdXRwdXQge1xuICBzdGRvdXQ6IHN0cmluZztcbiAgc3RkZXJyOiBzdHJpbmc7XG59XG5cbi8qKiBFeHRyYWN0IGEgdmVyc2lvbiBzdHJpbmcgZnJvbSBhIHN1Y2Nlc3NmdWwgdmVyc2lvbi1jb21tYW5kIHJlc3VsdC4gKi9cbmV4cG9ydCB0eXBlIEJpblZlcnNpb25QYXJzZXIgPSAob3V0cHV0OiBCaW5WZXJzaW9uT3V0cHV0KSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgZW5zdXJlfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluT3B0aW9ucyB7XG4gIGF1dG9VbnBhY2thZ2U/OiBib29sZWFuO1xuICBzZWxlY3Rvcj86IEJpblNlbGVjdG9yO1xuICBob21lRGlyPzogc3RyaW5nO1xuICAvKiogRXhhY3QgaW5zdGFsbGF0aW9uIHBhdGhzLiBPbWlzc2lvbiBrZWVwcyBgJEhPTUUvLjxuYW1lPi9iaW4vPG5hbWU+YC4gKi9cbiAgZGVzdGluYXRpb24/OiBCaW5Db250ZXh0O1xuICAvKiogTWluaW11bSBhY2NlcHRlZCBudW1lcmljIHZlcnNpb24sIHdpdGggb25lIHRvIHRocmVlIGNvbXBvbmVudHMuICovXG4gIG1pblZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKiBBcmd1bWVudCBwYXNzZWQgdG8gdGhlIGJpbmFyeSBmb3IgdmVyc2lvbiBkZXRlY3Rpb24uIERlZmF1bHRzIHRvIGAtLXZlcnNpb25gLiAqL1xuICB2ZXJzaW9uQXJndW1lbnQ/OiBzdHJpbmc7XG4gIC8qKiBWZXJzaW9uIG91dHB1dCBwYXJzZXIuIERlZmF1bHRzIHRvIHtAbGluayBwYXJzZVZlcnNpb259LiAqL1xuICB2ZXJzaW9uUGFyc2VyPzogQmluVmVyc2lvblBhcnNlcjtcbiAgLyoqIFNraXAgYC0tdmVyc2lvbmAgYW5kIHRyZWF0IGFuIGV4ZWN1dGFibGUgZmlsZSBhcyBhY2NlcHRhYmxlLiAqL1xuICBza2lwVmVyc2lvbkNoZWNrPzogYm9vbGVhbjtcbn1cblxuLyoqIFRlbXBvcmFyeSBkaXJlY3RvcnkgY3JlYXRlZCBmb3Igb25lIGBlbnN1cmVgIGF0dGVtcHQgYWZ0ZXIgdGhlIGluc3RhbGwgbG9jay4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluVXJsUmVzb2x2ZUNvbnRleHQge1xuICByZWFkb25seSB0ZW1wRGlyOiBzdHJpbmc7XG59XG5cbi8qKiBEb3dubG9hZCBzb3VyY2UgcmVzb2x2ZWQgb25seSB3aGVuIHRoZSBleGVjdXRhYmxlIGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluU291cmNlIHtcbiAgdXJsOiBzdHJpbmc7XG4gIHNoYTI1Nj86IHN0cmluZztcbn1cblxuLyoqIEEgZG93bmxvYWQgc291cmNlIHJlc29sdmVkIG9ubHkgd2hlbiB0aGUgZXhlY3V0YWJsZSBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQuICovXG5leHBvcnQgdHlwZSBCaW5VcmwgPVxuICB8IHN0cmluZ1xuICB8IEJpblNvdXJjZVxuICB8ICgoY29udGV4dDogQmluVXJsUmVzb2x2ZUNvbnRleHQpID0+IHN0cmluZyB8IEJpblNvdXJjZSB8IFByb21pc2U8c3RyaW5nIHwgQmluU291cmNlPik7XG5cbmZ1bmN0aW9uIGNvbnRleHQobmFtZTogc3RyaW5nLCBob21lRGlyOiBzdHJpbmcsIGRlc3RpbmF0aW9uPzogQmluQ29udGV4dCk6IEJpbkNvbnRleHQge1xuICBpZiAoIW5hbWUgfHwgYmFzZW5hbWUobmFtZSkgIT09IG5hbWUgfHwgbmFtZSA9PT0gXCIuXCIgfHwgbmFtZSA9PT0gXCIuLlwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBiaW5hcnkgbmFtZTogJHtuYW1lfWApO1xuICB9XG4gIGlmIChkZXN0aW5hdGlvbikgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICBjb25zdCByb290ID0gam9pbihob21lRGlyLCBgLiR7bmFtZX1gKTtcbiAgY29uc3QgYmluRGlyID0gam9pbihyb290LCBcImJpblwiKTtcbiAgcmV0dXJuIHsgcm9vdCwgYmluRGlyLCBwYXRoOiBqb2luKGJpbkRpciwgbmFtZSkgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGxheVVybChyYXc6IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyYXcpO1xuICAgIGlmICh1cmwucHJvdG9jb2wgPT09IFwiZGF0YTpcIikgcmV0dXJuIFwiZGF0YTpcIjtcbiAgICB1cmwudXNlcm5hbWUgPSBcIlwiO1xuICAgIHVybC5wYXNzd29yZCA9IFwiXCI7XG4gICAgdXJsLnNlYXJjaCA9IFwiXCI7XG4gICAgdXJsLmhhc2ggPSBcIlwiO1xuICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHJhdztcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBhY2Nlc3NDb250ZXh0KHBhdGg6IHN0cmluZyk6IFByb21pc2U8QmluQWNjZXNzQ29udGV4dD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgc3RhdChwYXRoKTtcbiAgICBjb25zdCBmaWxlID0gZW50cnkuaXNGaWxlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGUsXG4gICAgICBleGVjdXRhYmxlOiBmaWxlICYmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIgfHwgKGVudHJ5Lm1vZGUgJiAwbzExMSkgIT09IDApLFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IGZpbGU6IGZhbHNlLCBleGVjdXRhYmxlOiBmYWxzZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGVjdGVkVmVyc2lvbnMob3V0cHV0OiBzdHJpbmcpOiBQYXJzZWRWZXJzaW9uW10ge1xuICBjb25zdCB2ZXJzaW9uczogUGFyc2VkVmVyc2lvbltdID0gW107XG4gIGNvbnN0IHBhdHRlcm4gPSAvXFxidj8oXFxkKyg/OlxcLlxcZCspezAsMn0pKD86Wy0rLl9dP1thLXpdWzAtOWEtei4rXy1dKik/L2dpO1xuICBmb3IgKGNvbnN0IG1hdGNoIG9mIG91dHB1dC5tYXRjaEFsbChwYXR0ZXJuKSkge1xuICAgIGNvbnN0IHJhdyA9IG1hdGNoWzBdLnJlcGxhY2UoL152L2ksIFwiXCIpO1xuICAgIGNvbnN0IHBhcnRzID0gbWF0Y2hbMV0/LnNwbGl0KFwiLlwiKS5tYXAoTnVtYmVyKTtcbiAgICBpZiAocGFydHM/LmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkpIHZlcnNpb25zLnB1c2goeyByYXcsIHBhcnRzIH0pO1xuICB9XG4gIHJldHVybiB2ZXJzaW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKGEucGFydHMubGVuZ3RoICE9PSBiLnBhcnRzLmxlbmd0aCkgcmV0dXJuIGIucGFydHMubGVuZ3RoIC0gYS5wYXJ0cy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGEucGFydHMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBvcmRlciA9IChiLnBhcnRzW2luZGV4XSA/PyAwKSAtIChhLnBhcnRzW2luZGV4XSA/PyAwKTtcbiAgICAgIGlmIChvcmRlciAhPT0gMCkgcmV0dXJuIG9yZGVyO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSk7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIGRlZXBlc3QsIGhpZ2hlc3QgdmVyc2lvbiBmcm9tIHN0ZG91dCwgZmFsbGluZyBiYWNrIHRvIHN0ZGVyciBvbmx5XG4gKiB3aGVuIHN0ZG91dCBjb250YWlucyBubyB2ZXJzaW9uLiBTdXBwb3J0cyBvbmUgdG8gdGhyZWUgbnVtZXJpYyBjb21wb25lbnRzXG4gKiBhbmQgY29tbW9uIHN1ZmZpeGVzIHN1Y2ggYXMgYHJjMWAsIGAucG9zdDFgLCBhbmQgYC1kZXYuMmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZlcnNpb24oeyBzdGRvdXQsIHN0ZGVyciB9OiBCaW5WZXJzaW9uT3V0cHV0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGRldGVjdGVkVmVyc2lvbnMoc3Rkb3V0KS5hdCgwKT8ucmF3ID8/IGRldGVjdGVkVmVyc2lvbnMoc3RkZXJyKS5hdCgwKT8ucmF3O1xufVxuXG5mdW5jdGlvbiBtaW5pbXVtU2VtVmVyKHZlcnNpb246IHN0cmluZyk6IFNlbVZlciB8IHVuZGVmaW5lZCB7XG4gIGlmICghL15cXHMqdj9cXGQrKD86XFwuXFxkKyl7MCwyfVxccyokL2kudGVzdCh2ZXJzaW9uKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGNvZXJjZSh2ZXJzaW9uLCB7IGxvb3NlOiB0cnVlIH0pID8/IHVuZGVmaW5lZDtcbn1cblxuLyoqIENvbXBhcmUgYSBkZXRlY3RlZCB0b29sIHZlcnNpb24gYWdhaW5zdCBhIG9uZS10by10aHJlZS1jb21wb25lbnQgbWluaW11bS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlcnNpb25BdExlYXN0KHZlcnNpb246IHN0cmluZywgbWluVmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1pbmltdW0gPSBtaW5pbXVtU2VtVmVyKG1pblZlcnNpb24pO1xuICBpZiAoIW1pbmltdW0pIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIG1pbmltdW0gYmluYXJ5IHZlcnNpb246ICR7bWluVmVyc2lvbn1gKTtcbiAgfVxuICBjb25zdCBhY3R1YWwgPSBjb2VyY2UodmVyc2lvbiwgeyBsb29zZTogdHJ1ZSB9KTtcbiAgaWYgKCFhY3R1YWwpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGd0ZShhY3R1YWwsIG1pbmltdW0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc1ZhbGlkQmluKHBhdGg6IHN0cmluZywgb3B0aW9uczogQmluT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBsb2dnZXIuZGVidWcoXCJjaGVja2luZyBiaW5hcnlcIiwge1xuICAgIHBhdGgsXG4gICAgbWluVmVyc2lvbjogb3B0aW9ucy5taW5WZXJzaW9uLFxuICAgIHZlcnNpb25Bcmd1bWVudDogb3B0aW9ucy52ZXJzaW9uQXJndW1lbnQgPz8gXCItLXZlcnNpb25cIixcbiAgfSk7XG4gIGNvbnN0IGFjY2VzcyA9IGF3YWl0IGFjY2Vzc0NvbnRleHQocGF0aCk7XG4gIGlmICghYWNjZXNzLmZpbGUgfHwgIWFjY2Vzcy5leGVjdXRhYmxlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYmluYXJ5IGFjY2VzcyBjaGVjayBmYWlsZWRcIiwgeyBwYXRoLCAuLi5hY2Nlc3MgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChvcHRpb25zLnNraXBWZXJzaW9uQ2hlY2spIHtcbiAgICBsb2dnZXIuZGVidWcoXCJiaW5hcnkgdmVyc2lvbiBjaGVjayBza2lwcGVkXCIsIHsgcGF0aCB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQgc3Rkb3V0OiBzdHJpbmc7XG4gIGxldCBzdGRlcnI6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjRmlsZUFzeW5jKHBhdGgsIFtvcHRpb25zLnZlcnNpb25Bcmd1bWVudCA/PyBcIi0tdmVyc2lvblwiXSwge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0pO1xuICAgIHN0ZG91dCA9IHJlc3VsdC5zdGRvdXQ7XG4gICAgc3RkZXJyID0gcmVzdWx0LnN0ZGVycjtcbiAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJiaW5hcnkgdmVyc2lvbiBjb21tYW5kIGZhaWxlZFwiLCB7XG4gICAgICBwYXRoLFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGNhdXNlKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgdmVyc2lvbiA9IChvcHRpb25zLnZlcnNpb25QYXJzZXIgPz8gcGFyc2VWZXJzaW9uKSh7XG4gICAgc3Rkb3V0LFxuICAgIHN0ZGVycixcbiAgfSk7XG4gIGNvbnN0IHZhbGlkID1cbiAgICB2ZXJzaW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAob3B0aW9ucy5taW5WZXJzaW9uID09PSB1bmRlZmluZWQgfHwgaXNWZXJzaW9uQXRMZWFzdCh2ZXJzaW9uLCBvcHRpb25zLm1pblZlcnNpb24pKTtcbiAgbG9nZ2VyLmRlYnVnKFwiYmluYXJ5IHZlcnNpb24gY2hlY2tlZFwiLCB7XG4gICAgcGF0aCxcbiAgICB2ZXJzaW9uLFxuICAgIG1pblZlcnNpb246IG9wdGlvbnMubWluVmVyc2lvbixcbiAgICB2YWxpZCxcbiAgfSk7XG4gIHJldHVybiB2YWxpZDtcbn1cblxuZnVuY3Rpb24gZG93bmxvYWROYW1lKHVybDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGJhc2VuYW1lKGRlY29kZVVSSUNvbXBvbmVudChuZXcgVVJMKHVybCkucGF0aG5hbWUpKTtcbiAgICByZXR1cm4gY2FuZGlkYXRlICYmIEJ1ZmZlci5ieXRlTGVuZ3RoKGNhbmRpZGF0ZSkgPD0gMjAwID8gY2FuZGlkYXRlIDogbmFtZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5wYWNrKGFyY2hpdmU6IHN0cmluZywgZGVzdGluYXRpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlbmFtZSA9IGFyY2hpdmUudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKFwiLnppcFwiKSkge1xuICAgIGF3YWl0IGV4dHJhY3RaaXAoYXJjaGl2ZSwgeyBkaXI6IGRlc3RpbmF0aW9uIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoXCIudGFyXCIpIHx8IGZpbGVuYW1lLmVuZHNXaXRoKFwiLnRhci5nelwiKSB8fCBmaWxlbmFtZS5lbmRzV2l0aChcIi50Z3pcIikpIHtcbiAgICBhd2FpdCBleHRyYWN0VGFyKHsgZmlsZTogYXJjaGl2ZSwgY3dkOiBkZXN0aW5hdGlvbiB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBiaW5hcnkgYXJjaGl2ZTogJHtiYXNlbmFtZShhcmNoaXZlKX1gKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmlsZXNVbmRlcihyb290OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKHJvb3QsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgY29uc3QgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IHBhdGggPSBqb2luKHJvb3QsIGVudHJ5Lm5hbWUpO1xuICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBmaWxlcy5wdXNoKC4uLihhd2FpdCBmaWxlc1VuZGVyKHBhdGgpKSk7XG4gICAgfSBlbHNlIGlmIChlbnRyeS5pc0ZpbGUoKSkge1xuICAgICAgZmlsZXMucHVzaChwYXRoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZWxlY3RTaW5nbGVGaWxlKHNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZXMgPSBhd2FpdCBmaWxlc1VuZGVyKHNvdXJjZSk7XG4gIGNvbnN0IHNlbGVjdGVkID0gZmlsZXMuYXQoMCk7XG4gIGlmIChmaWxlcy5sZW5ndGggIT09IDEgfHwgIXNlbGVjdGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBiaW5hcnkgYXJjaGl2ZSBtdXN0IGNvbnRhaW4gb25lIGZpbGUsIGZvdW5kICR7ZmlsZXMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiBzZWxlY3RlZDtcbn1cblxuZnVuY3Rpb24gZmlsZVVybFBhdGgodXJsOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICBpZiAocGFyc2VkLnByb3RvY29sICE9PSBcImZpbGU6XCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGZpbGVVUkxUb1BhdGgocGFyc2VkKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZWxlY3RlZEJpbihcbiAgZGVzdGluYXRpb246IEJpbkNvbnRleHQsXG4gIHNvdXJjZTogQmluU291cmNlLFxuICB0ZW1wOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEJpbk9wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHVybCB9ID0gc291cmNlO1xuICBjb25zdCBsb2NhbFBhdGggPSBmaWxlVXJsUGF0aCh1cmwpO1xuICBpZiAobG9jYWxQYXRoKSB7XG4gICAgY29uc3QgYWNjZXNzID0gYXdhaXQgYWNjZXNzQ29udGV4dChsb2NhbFBhdGgpO1xuICAgIGlmICghYWNjZXNzLmZpbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYmluYXJ5IGZpbGUgVVJMIGRvZXMgbm90IGV4aXN0OiAke2Rpc3BsYXlVcmwodXJsKX1gKTtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKFwidXNpbmcgbG9jYWwgYmluYXJ5XCIsIHsgZnJvbTogZGlzcGxheVVybCh1cmwpLCBwYXRoOiBsb2NhbFBhdGggfSk7XG4gICAgcmV0dXJuIGxvY2FsUGF0aDtcbiAgfVxuICBjb25zdCBuYW1lID0gZG93bmxvYWROYW1lKHVybCwgYmFzZW5hbWUoZGVzdGluYXRpb24ucGF0aCkpO1xuICBjb25zdCBkb3dubG9hZFBhdGggPSBqb2luKHRlbXAsIG5hbWUpO1xuICBsb2dnZXIuZGVidWcoXCJkb3dubG9hZGluZyBiaW5hcnlcIiwge1xuICAgIGZyb206IGRpc3BsYXlVcmwodXJsKSxcbiAgICB0bzogZG93bmxvYWRQYXRoLFxuICB9KTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBiaW5hcnkgZG93bmxvYWQgZmFpbGVkICgke3Jlc3BvbnNlLnN0YXR1c30pYCk7XG4gIH1cbiAgY29uc3QgZG93bmxvYWRlZCA9IEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpO1xuICBpZiAoc291cmNlLnNoYTI1Nikge1xuICAgIGlmICghL15bMC05YS1mXXs2NH0kL2kudGVzdChzb3VyY2Uuc2hhMjU2KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImJpbmFyeSBkb3dubG9hZCBTSEEtMjU2IGRpZ2VzdCBtdXN0IGNvbnRhaW4gNjQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyc1wiKTtcbiAgICB9XG4gICAgY29uc3QgYWN0dWFsID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoZG93bmxvYWRlZCkuZGlnZXN0KFwiaGV4XCIpO1xuICAgIGlmIChhY3R1YWwudG9Mb3dlckNhc2UoKSAhPT0gc291cmNlLnNoYTI1Ni50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGJpbmFyeSBkb3dubG9hZCBkaWdlc3QgbWlzbWF0Y2g6ICR7ZGlzcGxheVVybCh1cmwpfWApO1xuICAgIH1cbiAgfVxuICBhd2FpdCB3cml0ZUZpbGUoZG93bmxvYWRQYXRoLCBkb3dubG9hZGVkLCB7IG1vZGU6IDBvNzU1IH0pO1xuXG4gIGxldCBzZWxlY3RlZFNvdXJjZSA9IGRvd25sb2FkUGF0aDtcbiAgaWYgKG9wdGlvbnMuYXV0b1VucGFja2FnZSkge1xuICAgIHNlbGVjdGVkU291cmNlID0gam9pbih0ZW1wLCBgdW5wYWNrZWQtJHtyYW5kb21VVUlEKCl9YCk7XG4gICAgYXdhaXQgbWtkaXIoc2VsZWN0ZWRTb3VyY2UpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcInVucGFja2luZyBiaW5hcnkgYXJjaGl2ZVwiLCB7XG4gICAgICBhcmNoaXZlOiBkb3dubG9hZFBhdGgsXG4gICAgICB0bzogc2VsZWN0ZWRTb3VyY2UsXG4gICAgfSk7XG4gICAgYXdhaXQgdW5wYWNrKGRvd25sb2FkUGF0aCwgc2VsZWN0ZWRTb3VyY2UpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2VsZWN0b3IpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGF3YWl0IG9wdGlvbnMuc2VsZWN0b3Ioe1xuICAgICAgZGVzdGluYXRpb24sXG4gICAgICBkb3dubG9hZFBhdGgsXG4gICAgICBzb3VyY2U6IHNlbGVjdGVkU291cmNlLFxuICAgIH0pO1xuICAgIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIGJpbmFyeVwiLCB7IHBhdGg6IHNlbGVjdGVkIH0pO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuICBjb25zdCBzZWxlY3RlZCA9IG9wdGlvbnMuYXV0b1VucGFja2FnZSA/IGF3YWl0IHNlbGVjdFNpbmdsZUZpbGUoc2VsZWN0ZWRTb3VyY2UpIDogc2VsZWN0ZWRTb3VyY2U7XG4gIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIGJpbmFyeVwiLCB7IHBhdGg6IHNlbGVjdGVkIH0pO1xuICByZXR1cm4gc2VsZWN0ZWQ7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGV4aXN0aW5nIGV4ZWN1dGFibGUgb3IgaW5zdGFsbCBpdCBhdG9taWNhbGx5IHVuZGVyXG4gKiBgJEhPTUUvLjxuYW1lPi9iaW4vPG5hbWU+YC4gSW5zdGFsbGF0aW9uIHVzZXMgYSBjaGVjay1sb2NrLWNoZWNrLWxvYWRcbiAqIHNlcXVlbmNlIHNvIGNvbmN1cnJlbnQgY2FsbGVycyByZXNvbHZlIGFuZCBkb3dubG9hZCB0aGUgYmluYXJ5IG9ubHkgb25jZS5cbiAqIFRoZSBkb3dubG9hZGVkIGNhbmRpZGF0ZSBhbmQgZmluYWwgcmVuYW1lZCBleGVjdXRhYmxlIG11c3QgYm90aCBwYXNzIHRoZVxuICogc2FtZSBleGVjdXRhYmxlIGFuZCB2ZXJzaW9uIGNoZWNrcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZShcbiAgbmFtZTogc3RyaW5nLFxuICB1cmw6IEJpblVybCxcbiAgb3B0aW9uczogQmluT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxCaW5Db250ZXh0PiB7XG4gIGlmIChvcHRpb25zLm1pblZlcnNpb24gJiYgIW1pbmltdW1TZW1WZXIob3B0aW9ucy5taW5WZXJzaW9uKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgbWluaW11bSBiaW5hcnkgdmVyc2lvbjogJHtvcHRpb25zLm1pblZlcnNpb259YCk7XG4gIH1cbiAgY29uc3QgZGVzdGluYXRpb24gPSBjb250ZXh0KG5hbWUsIG9wdGlvbnMuaG9tZURpciA/PyBob21lZGlyKCksIG9wdGlvbnMuZGVzdGluYXRpb24pO1xuICBpZiAoYXdhaXQgaXNWYWxpZEJpbihkZXN0aW5hdGlvbi5wYXRoLCBvcHRpb25zKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInVzaW5nIGluc3RhbGxlZCBiaW5hcnlcIiwgeyBuYW1lLCBwYXRoOiBkZXN0aW5hdGlvbi5wYXRoIH0pO1xuICAgIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcIndhaXRpbmcgZm9yIGJpbmFyeSBpbnN0YWxsIGxvY2tcIiwgeyBuYW1lLCBwYXRoOiBkZXN0aW5hdGlvbi5wYXRoIH0pO1xuICByZXR1cm4gd2l0aEZpbGVMb2NrKFtcImJpbi5lbnN1cmVcIiwgZGVzdGluYXRpb24ucGF0aF0sIGFzeW5jICgpID0+IHtcbiAgICBpZiAoYXdhaXQgaXNWYWxpZEJpbihkZXN0aW5hdGlvbi5wYXRoLCBvcHRpb25zKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwidXNpbmcgYmluYXJ5IGluc3RhbGxlZCBieSBhbm90aGVyIGNhbGxlclwiLCB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHBhdGg6IGRlc3RpbmF0aW9uLnBhdGgsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXCJpbnN0YWxsaW5nIGJpbmFyeVwiLCB7XG4gICAgICBuYW1lLFxuICAgICAgdG86IGRlc3RpbmF0aW9uLnBhdGgsXG4gICAgICBtaW5WZXJzaW9uOiBvcHRpb25zLm1pblZlcnNpb24sXG4gICAgfSk7XG4gICAgY29uc3QgdGVtcCA9IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgYCR7bmFtZX0tYCkpO1xuICAgIGxldCBzdGFnZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSB0eXBlb2YgdXJsID09PSBcImZ1bmN0aW9uXCIgPyBhd2FpdCB1cmwoeyB0ZW1wRGlyOiB0ZW1wIH0pIDogdXJsO1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZW9mIHJlc29sdmVkID09PSBcInN0cmluZ1wiID8geyB1cmw6IHJlc29sdmVkIH0gOiByZXNvbHZlZDtcbiAgICAgIGNvbnN0IGZyb20gPSBkaXNwbGF5VXJsKHNvdXJjZS51cmwpO1xuICAgICAgbG9nZ2VyLmRlYnVnKFwicmVzb2x2ZWQgYmluYXJ5IHNvdXJjZVwiLCB7IG5hbWUsIGZyb20gfSk7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IGF3YWl0IHNlbGVjdGVkQmluKGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRlbXAsIG9wdGlvbnMpO1xuICAgICAgYXdhaXQgY2htb2Qoc2VsZWN0ZWQsIDBvNzU1KTtcbiAgICAgIGlmICghKGF3YWl0IGlzVmFsaWRCaW4oc2VsZWN0ZWQsIG9wdGlvbnMpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNlbGVjdGVkIGJpbmFyeSBoYXMgbm8gYWNjZXB0YWJsZSB2ZXJzaW9uOiAke3NlbGVjdGVkfWApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBta2RpcihkZXN0aW5hdGlvbi5iaW5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgc3RhZ2VkID0gam9pbihkZXN0aW5hdGlvbi5iaW5EaXIsIGAuJHtuYW1lfS0ke3JhbmRvbVVVSUQoKX1gKTtcbiAgICAgIGF3YWl0IGNvcHlGaWxlKHNlbGVjdGVkLCBzdGFnZWQpO1xuICAgICAgYXdhaXQgY2htb2Qoc3RhZ2VkLCAwbzc1NSk7XG4gICAgICBhd2FpdCByZW5hbWUoc3RhZ2VkLCBkZXN0aW5hdGlvbi5wYXRoKTtcbiAgICAgIHN0YWdlZCA9IHVuZGVmaW5lZDtcbiAgICAgIGlmICghKGF3YWl0IGlzVmFsaWRCaW4oZGVzdGluYXRpb24ucGF0aCwgb3B0aW9ucykpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5zdGFsbGVkIGJpbmFyeSBpcyBpbnZhbGlkIGFmdGVyIHJlbmFtZTogJHtkZXN0aW5hdGlvbi5wYXRofWApO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmluZm8oXCJpbnN0YWxsZWQgYmluYXJ5XCIsIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZnJvbSxcbiAgICAgICAgdG86IGRlc3RpbmF0aW9uLnBhdGgsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHN0YWdlZCkgYXdhaXQgcm0oc3RhZ2VkLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgcm0odGVtcCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=
|
package/lib/src/config-utils.js
CHANGED
|
@@ -29,8 +29,7 @@ import { spawnSync } from "node:child_process";
|
|
|
29
29
|
import { readFileSync } from "node:fs";
|
|
30
30
|
import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
|
|
31
31
|
import { parseEnv } from "node:util";
|
|
32
|
-
import {
|
|
33
|
-
import { json, log, object, stringUtils } from "@dbx-tools/shared-core";
|
|
32
|
+
import { environmentUtils, json, log, object, stringUtils } from "@dbx-tools/shared-core";
|
|
34
33
|
import { parse as parseYaml } from "yaml";
|
|
35
34
|
import { z } from "zod";
|
|
36
35
|
import { cachedRecord, statSync } from "./file.js";
|
|
@@ -196,7 +195,7 @@ export function getBundlePath(data, path) {
|
|
|
196
195
|
* absent or unrecognized override falls back to structural detection.
|
|
197
196
|
*/
|
|
198
197
|
export function isDatabricksAppEnv(source = process.env) {
|
|
199
|
-
return
|
|
198
|
+
return environmentUtils.isDatabricksAppEnv(source);
|
|
200
199
|
}
|
|
201
200
|
/** Exact, uppercase, and tokenized-uppercase names for a human-friendly key. */
|
|
202
201
|
export function environmentKeys(name) {
|
|
@@ -580,4 +579,4 @@ function loadAppFile(cwd) {
|
|
|
580
579
|
});
|
|
581
580
|
return data === undefined ? undefined : { path, data };
|
|
582
581
|
}
|
|
583
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsS0FBSyxJQUFJLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxJQUFJLElBQUksa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV6RixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO0FBMEM5RCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUM7QUFDbEMsTUFBTSxlQUFlLEdBQTRCLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FB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SUFBSSxFQUFFLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGF5ZXJlZCBjb25maWd1cmF0aW9uIGxvb2t1cDogZW52aXJvbm1lbnQsIGAuZW52YCwgYnVuZGxlLCBhbmQgYGFwcC55YW1sYC5cbiAqXG4gKiBFdmVyeSBwYWNrYWdlIHJlc29sdmVzIHNldHRpbmdzIHRoZSBzYW1lIHdheTogdGFrZSB0aGUgY2FsbGVyJ3MgdmFsdWUsIGVsc2VcbiAqIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLCBlbHNlIGEgZGVmYXVsdC4gTG9jYWwgZGV2ZWxvcG1lbnQgYWRkcyB0d28gZmFsbGJhY2tcbiAqIGxvY2F0aW9uczogYC5lbnZgIGZpbGVzLCBvbmUgQXBwJ3MgYHJlc291cmNlcy5hcHBzLjxhcHA+LmNvbmZpZy5lbnZgIGluXG4gKiBgZGF0YWJyaWNrcy55bWxgLCBhbmQgbGl0ZXJhbCBlbnYgdmFsdWVzIGluIGBhcHAueWFtbGAgLyBgYXBwLnltbGAuXG4gKlxuICoge0BsaW5rIHZhbHVlc30gaXMgTEFaWSAoYW4gYG9iamVjdC5TZXF1ZW5jZWApLCBzbyBgZGF0YWJyaWNrcyBidW5kbGUgdmFsaWRhdGVgXG4gKiBpcyBvbmx5IHNwYXduZWQgd2hlbiB0aGUgZW52aXJvbm1lbnQgYW5kIGAuZW52YCBib3RoIG1pc3NlZDsgYXBwIFlBTUwgaXMgb25seVxuICogcmVhZCBhZnRlciB0aGUgYnVuZGxlIHNvdXJjZSBhbHNvIG1pc3NlZC5cbiAqXG4gKiBJbnNpZGUgYSBkZXBsb3llZCBEYXRhYnJpY2tzIEFwcCBhbGwgdGhyZWUgZmlsZSBzb3VyY2VzIGFyZSBza2lwcGVkIGJ5IGRlZmF1bHRcbiAqICh7QGxpbmsgaXNEYXRhYnJpY2tzQXBwRW52fSk6IHRoZSBwbGF0Zm9ybSBoYXMgYWxyZWFkeSB0dXJuZWQgdGhlbSBpbnRvIHJlYWxcbiAqIGVudmlyb25tZW50IHZhcmlhYmxlcywgdGhlcmUgaXMgbm8gYnVuZGxlIHRvIHZhbGlkYXRlLCBhbmQgdGhlIGBkYXRhYnJpY2tzYFxuICogQ0xJIGlzIG5vdCBvbiB0aGUgaW1hZ2UuIEJvb2xlYW4gZW52aXJvbm1lbnQgb3ZlcnJpZGVzIGNhbiBmb3JjZSBlaXRoZXIgZmlsZVxuICogc291cmNlIG9uIG9yIG9mZiB3aGVuIGEgdG9vbCBuZWVkcyBkaWZmZXJlbnQgYmVoYXZpb3IuXG4gKlxuICogT25seSB0aGUgc2luZ2xlIGJ1bmRsZSBhcHAncyBgY29uZmlnLmVudmAgYW5kIGxpdGVyYWwgYXBwIFlBTUwgYGVudltdLnZhbHVlYFxuICogZW50cmllcyBhcmUgY29uc3VsdGVkLiBSb290IGJ1bmRsZSBgdmFyaWFibGVzYCBhcmUgbm90OiB0aGV5IGFyZSBhdXRob3JpbmdcbiAqIGlucHV0cyBmb3IgdGhlIGJ1bmRsZSBpdHNlbGYgKGludGVycG9sYXRlZCBpbnRvIHRhcmdldHMsIHJlc291cmNlcywgYW5kIHBhdGhzKSxcbiAqIHNvIHRyZWF0aW5nIG9uZSBhcyBhIHByb2Nlc3Mgc2V0dGluZyByZXNvbHZlcyBuYW1lcyB0aGUgZGVwbG95ZWQgYXBwIG5ldmVyIHNlZXMuXG4gKlxuICogTm9kZS1vbmx5IChgY2hpbGRfcHJvY2Vzc2AsIGBmc2AsIGBwcm9jZXNzYCkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBpc0Fic29sdXRlLCByZWxhdGl2ZSwgcmVzb2x2ZSwgc2VwIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGFyc2VFbnYgfSBmcm9tIFwibm9kZTp1dGlsXCI7XG5pbXBvcnQgeyBpc0RhdGFicmlja3NBcHBFbnZpcm9ubWVudCB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmUtcnNcIjtcbmltcG9ydCB7IGpzb24sIGxvZywgb2JqZWN0LCBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZVlhbWwgfSBmcm9tIFwieWFtbFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IGNhY2hlZFJlY29yZCwgc3RhdFN5bmMgfSBmcm9tIFwiLi9maWxlLnRzXCI7XG5pbXBvcnQgeyByZXNvbHZlV29ya2luZ0RpcmVjdG9yeSwgcm9vdCBhcyByZXNvbHZlUHJvamVjdFJvb3QgfSBmcm9tIFwiLi9wcm9qZWN0LXV0aWxzLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJjb25maWdcIik7XG5jb25zdCBjb25maWdGaWxlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG50eXBlIENvbmZpZ0tleSA9IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG5leHBvcnQgdHlwZSBDb25maWdNYXBWYWx1ZSA9IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbCB8IHVuZGVmaW5lZDtcbmV4cG9ydCB0eXBlIENvbmZpZ0RhdGEgPSBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBDb25maWdNYXBWYWx1ZT4+O1xuXG4vKiogV2hlcmUgYSB2YWx1ZSBtYXkgY29tZSBmcm9tLCBjb25zdWx0ZWQgaW4gdGhlIG9yZGVyIGdpdmVuLiAqL1xuZXhwb3J0IHR5cGUgQ29uZmlnU291cmNlID0gXCJjb25maWdcIiB8IFwiZW52XCIgfCBcImRvdGVudlwiIHwgXCJidW5kbGVcIiB8IFwiYXBwXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPdXRlcm1vc3QgbmFtZXNwYWNlcyB0cmllZCBiZWZvcmUgZWFjaCBrZXkuIERlZmF1bHRzIHRvIGBEQlhfVE9PTFNgLlxuICAgKi9cbiAgc2NvcGU/OiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIENhcGFiaWxpdHkgbmFtZXNwYWNlcyBpbnNlcnRlZCBhZnRlciB0aGUgc2NvcGUgYW5kIGJlZm9yZSBlYWNoIGtleS4gKi9cbiAgcHJlZml4Pzogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBDb25zdGFudCBjb25maWcgbWFwcyByZWFkIGJ5IHRoZSBgY29uZmlnYCBzb3VyY2UuICovXG4gIGRhdGE/OiBDb25maWdEYXRhIHwgcmVhZG9ubHkgQ29uZmlnRGF0YVtdO1xuICAvKiogUGFyc2VkIGJ1bmRsZSBkYXRhIHVzZWQgaW5zdGVhZCBvZiBsb2FkaW5nIGBkYXRhYnJpY2tzLnltbGAuICovXG4gIGJ1bmRsZURhdGE/OiBDb25maWdGaWxlIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBQYXJzZWQgYXBwIFlBTUwgZGF0YSB1c2VkIGluc3RlYWQgb2YgbG9hZGluZyBgYXBwLnlhbWxgLiAqL1xuICBhcHBEYXRhPzogQ29uZmlnRmlsZSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU291cmNlcyBpbiBwcmVjZWRlbmNlIG9yZGVyLiBEZWZhdWx0OiBgY29uZmlnYCwgYGVudmAsIGBkb3RlbnZgLCBgYnVuZGxlYCwgYGFwcGAuICovXG4gIHNvdXJjZXM/OiBDb25maWdTb3VyY2UgfCByZWFkb25seSBDb25maWdTb3VyY2VbXTtcbiAgLyoqIERpcmVjdG9yeSB0byByZXNvbHZlIGAuZW52YCBhbmQgdGhlIGJ1bmRsZSBmcm9tLiBEZWZhdWx0OiBgcHJvY2Vzcy5jd2QoKWAuICovXG4gIGN3ZD86IHN0cmluZztcbn1cblxuLyoqIE9uZSByZXNvbHZlZCB2YWx1ZSwgdGFnZ2VkIHdpdGggdGhlIGtleSBhbmQgc291cmNlIGl0IGNhbWUgZnJvbS4gKi9cbmludGVyZmFjZSBDb25maWdWYWx1ZSB7XG4gIGtleTogc3RyaW5nO1xuICBzb3VyY2U6IENvbmZpZ1NvdXJjZTtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqIEEgY29uZmlnIGZpbGUgZm91bmQgb24gZGlzaywgd2l0aCBpdHMgcGFyc2VkIGNvbnRlbnRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maWdGaWxlIHtcbiAgcGF0aDogc3RyaW5nO1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuY29uc3QgREVGQVVMVF9TQ09QRSA9IFwiREJYX1RPT0xTXCI7XG5jb25zdCBERUZBVUxUX1NPVVJDRVM6IHJlYWRvbmx5IENvbmZpZ1NvdXJjZVtdID0gW1wiY29uZmlnXCIsIFwiZW52XCIsIFwiZG90ZW52XCIsIFwiYnVuZGxlXCIsIFwiYXBwXCJdO1xuY29uc3QgQlVORExFX0ZJTEVfTkFNRVMgPSBbXCJkYXRhYnJpY2tzLnltbFwiLCBcImRhdGFicmlja3MueWFtbFwiXSBhcyBjb25zdDtcbmNvbnN0IEFQUF9GSUxFX05BTUVTID0gW1wiYXBwLnlhbWxcIiwgXCJhcHAueW1sXCJdIGFzIGNvbnN0O1xuY29uc3QgRE9URU5WX0ZJTEVfTkFNRSA9IFwiLmVudlwiO1xuY29uc3QgTk9ERV9FTlZfQUxURVJOQVRJVkVTID0ge1xuICBwcm9kdWN0aW9uOiBbXCJwcm9kXCJdLFxuICBkZXZlbG9wbWVudDogW1wiZGV2XCJdLFxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+O1xuXG4vKiogSGlnaGVzdCB2YWxpZCBUQ1AgcG9ydCBudW1iZXIuICovXG5leHBvcnQgY29uc3QgTUFYX1RDUF9QT1JUID0gNjVfNTM1O1xuXG4vKiogQm9vbGVhbiBlbnZpcm9ubWVudCBvdmVycmlkZSBmb3IgcHJvamVjdCBgLmVudmAgcmVhZHMuICovXG5jb25zdCBDT05GSUdfRE9URU5WX0tFWSA9IFwiREJYX1RPT0xTX0NPTkZJR19ET1RFTlZcIjtcblxuLyoqIEJvb2xlYW4gZW52aXJvbm1lbnQgb3ZlcnJpZGUgZm9yIERhdGFicmlja3MgYnVuZGxlIHJlYWRzLiAqL1xuY29uc3QgQ09ORklHX0JVTkRMRV9LRVkgPSBcIkRCWF9UT09MU19DT05GSUdfQlVORExFXCI7XG5cbi8qKiBCb29sZWFuIGVudmlyb25tZW50IG92ZXJyaWRlIGZvciBEYXRhYnJpY2tzIEFwcCBZQU1MIHJlYWRzLiAqL1xuY29uc3QgQ09ORklHX0FQUF9LRVkgPSBcIkRCWF9UT09MU19DT05GSUdfQVBQXCI7XG5cbi8qKiBFeGFjdCBwcm9jZXNzLWVudmlyb25tZW50IGxvb2t1cCBmb3IgY2FsbGVycyB0aGF0IGRvIG5vdCByZWFkIGxvY2FsIGNvbmZpZyBmaWxlcy4gKi9cbmV4cG9ydCBjb25zdCBFTlZfT05MWSA9IHsgc2NvcGU6IFtdIGFzIGNvbnN0LCBzb3VyY2VzOiBcImVudlwiIGFzIGNvbnN0IH07XG5cbmV4cG9ydCBjb25zdCB2YWx1ZVNjaGVtYSA9IHpcbiAgLnN0cmluZygpXG4gIC50cmltKClcbiAgLm1pbigxKVxuICAucmVmaW5lKCh2YWx1ZTogc3RyaW5nKSA9PiAhL1xcJFxce1tefV0rXFx9Ly50ZXN0KHZhbHVlKSwge1xuICAgIG1lc3NhZ2U6IFwiSW50ZXJwb2xhdGVkIHZhbHVlcyBhcmUgbm90IGFsbG93ZWRcIixcbiAgfSk7XG5cbmNvbnN0IHBvcnRWYWx1ZVNjaGVtYSA9IHoucHJlcHJvY2VzcygoaW5wdXQpID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGlucHV0O1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSBcInN0cmluZ1wiIHx8ICEvXlxcZCskLy50ZXN0KGlucHV0LnRyaW0oKSkpIHJldHVybiBOdW1iZXIuTmFOO1xuICByZXR1cm4gTnVtYmVyKGlucHV0LnRyaW0oKSk7XG59LCB6Lm51bWJlcigpLmludCgpLm1pbigxKS5tYXgoTUFYX1RDUF9QT1JUKSk7XG5cbmNvbnN0IHBvc2l0aXZlTnVtYmVyVmFsdWUgPSB6LnByZXByb2Nlc3MoKGlucHV0KSA9PiBvYmplY3QudG9OdW1iZXIoaW5wdXQpLCB6Lm51bWJlcigpLnBvc2l0aXZlKCkpO1xuY29uc3QgcG9zaXRpdmVJbnRWYWx1ZSA9IHBvc2l0aXZlTnVtYmVyVmFsdWUudHJhbnNmb3JtKE1hdGguZmxvb3IpO1xuXG4vKiogQSBuYW1lZCBidW5kbGUgb3IgQXBwIHJlc291cmNlOyBjb25jcmV0ZSByZXNvdXJjZSBmaWVsZHMgcGFzcyB0aHJvdWdoLiAqL1xuZXhwb3J0IGNvbnN0IGJ1bmRsZVJlc291cmNlU2NoZW1hID0gei5vYmplY3QoeyBuYW1lOiB2YWx1ZVNjaGVtYS5vcHRpb25hbCgpIH0pLnBhc3N0aHJvdWdoKCk7XG5cbmV4cG9ydCBjb25zdCBidW5kbGVFbnZFbnRyeVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogdmFsdWVTY2hlbWEub3B0aW9uYWwoKSxcbiAgdmFsdWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdmFsdWVfZnJvbTogdmFsdWVTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgYnVuZGxlQXBwU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB2YWx1ZVNjaGVtYS5vcHRpb25hbCgpLFxuICBjb25maWc6IHoub2JqZWN0KHsgZW52OiB6LmFycmF5KGJ1bmRsZUVudkVudHJ5U2NoZW1hKS5vcHRpb25hbCgpIH0pLm9wdGlvbmFsKCksXG4gIHJlc291cmNlczogei5hcnJheShidW5kbGVSZXNvdXJjZVNjaGVtYSkub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgYXBwRW52RW50cnlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHZhbHVlU2NoZW1hLFxuICB2YWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB2YWx1ZUZyb206IHZhbHVlU2NoZW1hLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IGNvbnN0IGFwcFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW52OiB6LmFycmF5KGFwcEVudkVudHJ5U2NoZW1hKS5vcHRpb25hbCgpLFxuICByZXNvdXJjZXM6IHouYXJyYXkoYnVuZGxlUmVzb3VyY2VTY2hlbWEpLm9wdGlvbmFsKCksXG59KTtcblxuY29uc3QgYnVuZGxlQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICByZXNvdXJjZXM6IHoub2JqZWN0KHsgYXBwczogei5yZWNvcmQoei5zdHJpbmcoKSwgYnVuZGxlQXBwU2NoZW1hKS5vcHRpb25hbCgpIH0pLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIEZsYXR0ZW4gdGhlIHNpbmdsZSBidW5kbGUgQXBwJ3MgYGNvbmZpZy5lbnZgLCByZXNvbHZpbmcgcmVzb3VyY2UgcmVmZXJlbmNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuQnVuZGxlRW52KGRhdGE6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcGFyc2VkID0gYnVuZGxlQ29uZmlnU2NoZW1hLnNhZmVQYXJzZShkYXRhKTtcbiAgaWYgKCFwYXJzZWQuc3VjY2VzcykgcmV0dXJuIHt9O1xuICBjb25zdCBhcHBzID0gT2JqZWN0LnZhbHVlcyhwYXJzZWQuZGF0YS5yZXNvdXJjZXM/LmFwcHMgPz8ge30pO1xuICBpZiAoYXBwcy5sZW5ndGggIT09IDEpIHJldHVybiB7fTtcbiAgY29uc3QgYXBwID0gYXBwc1swXTtcbiAgY29uc3QgcmVzb3VyY2VzID0gbmV3IE1hcChcbiAgICAoYXBwPy5yZXNvdXJjZXMgPz8gW10pXG4gICAgICAuZmlsdGVyKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UubmFtZSlcbiAgICAgIC5tYXAoKHJlc291cmNlKSA9PiBbcmVzb3VyY2UubmFtZSEsIHJlc291cmNlXSBhcyBjb25zdCksXG4gICk7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGFwcD8uY29uZmlnPy5lbnYgPz8gW10pIHtcbiAgICBpZiAoIWVudHJ5Lm5hbWUpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGxpdGVyYWwgPSB2YWx1ZVNjaGVtYS5zYWZlUGFyc2UoZW50cnkudmFsdWUpO1xuICAgIGlmIChsaXRlcmFsLnN1Y2Nlc3MpIHtcbiAgICAgIHJlc3VsdFtlbnRyeS5uYW1lXSA9IGxpdGVyYWwuZGF0YTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCByZWZlcmVuY2VkID0gZW50cnkudmFsdWVfZnJvbVxuICAgICAgPyByZXNvdXJjZVZhbHVlKHJlc291cmNlcy5nZXQoZW50cnkudmFsdWVfZnJvbSkpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAocmVmZXJlbmNlZCkgcmVzdWx0W2VudHJ5Lm5hbWVdID0gcmVmZXJlbmNlZDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogRmxhdHRlbiBgYXBwLnlhbWxgIGVudiBlbnRyaWVzLCByZXNvbHZpbmcgYHZhbHVlRnJvbWAgcmVzb3VyY2UgcmVmZXJlbmNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuQXBwRW52KGRhdGE6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcGFyc2VkID0gYXBwU2NoZW1hLnNhZmVQYXJzZShkYXRhKTtcbiAgaWYgKCFwYXJzZWQuc3VjY2VzcykgcmV0dXJuIHt9O1xuICBjb25zdCByZXNvdXJjZXMgPSBuZXcgTWFwKFxuICAgIChwYXJzZWQuZGF0YS5yZXNvdXJjZXMgPz8gW10pXG4gICAgICAuZmlsdGVyKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UubmFtZSlcbiAgICAgIC5tYXAoKHJlc291cmNlKSA9PiBbcmVzb3VyY2UubmFtZSEsIHJlc291cmNlXSBhcyBjb25zdCksXG4gICk7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBhcnNlZC5kYXRhLmVudiA/PyBbXSkge1xuICAgIGNvbnN0IGxpdGVyYWwgPSB2YWx1ZVNjaGVtYS5zYWZlUGFyc2UoZW50cnkudmFsdWUpO1xuICAgIGlmIChsaXRlcmFsLnN1Y2Nlc3MpIHtcbiAgICAgIHJlc3VsdFtlbnRyeS5uYW1lXSA9IGxpdGVyYWwuZGF0YTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCByZWZlcmVuY2VkID0gZW50cnkudmFsdWVGcm9tID8gcmVzb3VyY2VWYWx1ZShyZXNvdXJjZXMuZ2V0KGVudHJ5LnZhbHVlRnJvbSkpIDogdW5kZWZpbmVkO1xuICAgIGlmIChyZWZlcmVuY2VkKSByZXN1bHRbZW50cnkubmFtZV0gPSByZWZlcmVuY2VkO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlc291cmNlVmFsdWUocmVzb3VyY2U6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IHBhdGggb2YgW1xuICAgIFtcInNxbF93YXJlaG91c2VcIiwgXCJpZFwiXSxcbiAgICBbXCJnZW5pZV9zcGFjZVwiLCBcInNwYWNlX2lkXCJdLFxuICAgIFtcInBvc3RncmVzXCIsIFwiZW5kcG9pbnRcIl0sXG4gICAgW1wicG9zdGdyZXNcIiwgXCJkYXRhYmFzZVwiXSxcbiAgICBbXCJwb3N0Z3Jlc1wiLCBcImJyYW5jaFwiXSxcbiAgXSBhcyBjb25zdCkge1xuICAgIGxldCB2YWx1ZSA9IHJlc291cmNlO1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXRoKSB2YWx1ZSA9IG9iamVjdC5pc1JlY29yZCh2YWx1ZSkgPyB2YWx1ZVtwYXJ0XSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwYXJzZWQgPSB2YWx1ZVNjaGVtYS5zYWZlUGFyc2UodmFsdWUpO1xuICAgIGlmIChwYXJzZWQuc3VjY2VzcykgcmV0dXJuIHBhcnNlZC5kYXRhO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBXYWxrIGEgZG90LXNlcGFyYXRlZCBwYXRoIHRocm91Z2ggcGFyc2VkIGJ1bmRsZSBkYXRhLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1bmRsZVBhdGgoZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBsZXQgY3VycmVudDogdW5rbm93biA9IGRhdGE7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpZiAoIW9iamVjdC5pc1JlY29yZChjdXJyZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBuZXh0ID0gY3VycmVudFtwYXJ0c1tpbmRleF0hXTtcbiAgICBpZiAoaW5kZXggPT09IHBhcnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGNvbnN0IGRpcmVjdCA9IHZhbHVlU2NoZW1hLnNhZmVQYXJzZShuZXh0KTtcbiAgICAgIGlmIChkaXJlY3Quc3VjY2VzcykgcmV0dXJuIGRpcmVjdC5kYXRhO1xuICAgICAgaWYgKG9iamVjdC5pc1JlY29yZChuZXh0KSkge1xuICAgICAgICBjb25zdCBuZXN0ZWQgPSB2YWx1ZVNjaGVtYS5zYWZlUGFyc2UobmV4dC52YWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXN0ZWQuc3VjY2VzcyA/IG5lc3RlZC5kYXRhIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IG5leHQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZXRlY3QgYSBEYXRhYnJpY2tzIEFwcCBydW50aW1lIGZyb20gaXRzIHJlcXVpcmVkIG5hbWUsIGhvc3QsIGFuZCBwb3J0LlxuICpcbiAqIGBEQlhfVE9PTFNfREFUQUJSSUNLU19BUFBfRU5WYCB0YWtlcyBwcmVjZWRlbmNlIHdoZW4gaXQgY29udGFpbnMgYSByZWNvZ25pemVkXG4gKiBib29sZWFuIHZhbHVlLiBUaGlzIGxldHMgbG9jYWwgdG9vbHMgZW11bGF0ZSB0aGUgZGVwbG95ZWQgcnVudGltZSAoYHRydWVgKSBvclxuICogbGV0cyB1bnVzdWFsIGRlcGxveWVkIHByb2Nlc3NlcyByZXRhaW4gbG9jYWwgY29uZmlnIGxvb2t1cCAoYGZhbHNlYCkuIEFuXG4gKiBhYnNlbnQgb3IgdW5yZWNvZ25pemVkIG92ZXJyaWRlIGZhbGxzIGJhY2sgdG8gc3RydWN0dXJhbCBkZXRlY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFicmlja3NBcHBFbnYoXG4gIHNvdXJjZTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiA9IHByb2Nlc3MuZW52LFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc0RhdGFicmlja3NBcHBFbnZpcm9ubWVudChcbiAgICBuZXcgTWFwKFxuICAgICAgT2JqZWN0LmVudHJpZXMoc291cmNlKS5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgW3N0cmluZywgc3RyaW5nXSA9PiBlbnRyeVsxXSAhPT0gdW5kZWZpbmVkKSxcbiAgICApLFxuICApO1xufVxuXG4vKiogRXhhY3QsIHVwcGVyY2FzZSwgYW5kIHRva2VuaXplZC11cHBlcmNhc2UgbmFtZXMgZm9yIGEgaHVtYW4tZnJpZW5kbHkga2V5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVudmlyb25tZW50S2V5cyhuYW1lOiBzdHJpbmcpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGNvbnN0IHRyaW1tZWQgPSBuYW1lLnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkKSByZXR1cm4gW107XG4gIHJldHVybiBvYmplY3RcbiAgICAuc2VxdWVuY2UoXG4gICAgICB0cmltbWVkLFxuICAgICAgdHJpbW1lZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgQXJyYXkuZnJvbShzdHJpbmdVdGlscy50b2tlbml6ZSh0cmltbWVkKSkuam9pbihcIl9cIikudG9VcHBlckNhc2UoKSxcbiAgICApXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5kaXN0aW5jdCgpXG4gICAgLnRvQXJyYXkoKTtcbn1cblxuLyoqIENhbmRpZGF0ZSBuYW1lcyBpbiBzY29wZSwgcHJlZml4LCBhbmQgaW5wdXQgcHJlY2VkZW5jZSBvcmRlci4gKi9cbmZ1bmN0aW9uIGtleXMoXG4gIGlucHV0OiBDb25maWdLZXksXG4gIG9wdGlvbnM6IFBpY2s8Q29uZmlnT3B0aW9ucywgXCJzY29wZVwiIHwgXCJwcmVmaXhcIj4gPSB7fSxcbik6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgY29uc3Qgc2NvcGVzID0gb2JqZWN0XG4gICAgLnNlcXVlbmNlKG9wdGlvbnMuc2NvcGUgPz8gREVGQVVMVF9TQ09QRSlcbiAgICAubWFwKHN0cmluZ1V0aWxzLnRyaW1Ub0VtcHR5KVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuZGlzdGluY3QoKVxuICAgIC50b0FycmF5KCk7XG4gIGNvbnN0IHByZWZpeGVzID1cbiAgICBvcHRpb25zLnByZWZpeCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IFtdXG4gICAgICA6IG9iamVjdFxuICAgICAgICAgIC5zZXF1ZW5jZShvcHRpb25zLnByZWZpeClcbiAgICAgICAgICAubWFwKHN0cmluZ1V0aWxzLnRyaW1Ub0VtcHR5KVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAuZGlzdGluY3QoKVxuICAgICAgICAgIC50b0FycmF5KCk7XG4gIHJldHVybiBvYmplY3RcbiAgICAuc2VxdWVuY2UoaW5wdXQpXG4gICAgLm1hcChzdHJpbmdVdGlscy50cmltVG9FbXB0eSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmRpc3RpbmN0KClcbiAgICAuZmxhdE1hcCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBwcmVmaXhlZCA9IHByZWZpeGVzLmxlbmd0aCA+IDAgPyBwcmVmaXhlcy5tYXAoKHByZWZpeCkgPT4gYCR7cHJlZml4fV8ke2tleX1gKSA6IFtrZXldO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uc2NvcGVzLmZsYXRNYXAoKHNjb3BlKSA9PiBwcmVmaXhlZC5tYXAoKG5hbWUpID0+IGAke3Njb3BlfV8ke25hbWV9YCkpLFxuICAgICAgICAuLi5wcmVmaXhlZCxcbiAgICAgICAga2V5LFxuICAgICAgXTtcbiAgICB9KVxuICAgIC5kaXN0aW5jdCgpXG4gICAgLnRvQXJyYXkoKTtcbn1cblxuLyoqXG4gKiBFdmVyeSB2YWx1ZSB0aGF0IHJlc29sdmVzIGZvciBgaW5wdXRgLCBpbiBzb3VyY2UtdGhlbi1rZXkgcHJlY2VkZW5jZSBvcmRlcixcbiAqIGFzIGEgTEFaWSBzZXF1ZW5jZTogbm90aGluZyBwYXN0IHRoZSBmaXJzdCBjb25zdW1lZCBlbGVtZW50IGlzIHJlYWQsIHNvXG4gKiBgdmFsdWVzKGtleSkuYXQoMClgIG5ldmVyIHNwYXducyB0aGUgRGF0YWJyaWNrcyBDTEkgd2hlbiB0aGUgZW52aXJvbm1lbnRcbiAqIGFscmVhZHkgYW5zd2VyZWQuXG4gKlxuICovXG5mdW5jdGlvbiB2YWx1ZXMoaW5wdXQ6IENvbmZpZ0tleSwgb3B0aW9uczogQ29uZmlnT3B0aW9ucyA9IHt9KTogb2JqZWN0LlNlcXVlbmNlPENvbmZpZ1ZhbHVlPiB7XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBrZXlzKGlucHV0LCBvcHRpb25zKTtcbiAgY29uc3Qgc291cmNlcyA9IGNvbmZpZ1NvdXJjZXMob3B0aW9ucyk7XG4gIHJldHVybiBvYmplY3Quc2VxdWVuY2Uoe1xuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBHZW5lcmF0b3I8Q29uZmlnVmFsdWU+IHtcbiAgICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXAgb2YgcmVhZChzb3VyY2UsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgY2FuZGlkYXRlcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdNYXBWYWx1ZShtYXBba2V5XSk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHlpZWxkIHsga2V5LCBzb3VyY2UsIHZhbHVlIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbmZpZ1NvdXJjZXMob3B0aW9uczogQ29uZmlnT3B0aW9ucyk6IHJlYWRvbmx5IENvbmZpZ1NvdXJjZVtdIHtcbiAgY29uc3Qgc291cmNlczogQ29uZmlnU291cmNlW10gPSBbXG4gICAgLi4ub2JqZWN0LnNlcXVlbmNlPENvbmZpZ1NvdXJjZT4ob3B0aW9ucy5zb3VyY2VzID8/IERFRkFVTFRfU09VUkNFUykuZGlzdGluY3QoKSxcbiAgXTtcbiAgaWYgKG9wdGlvbnMuZGF0YSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc291cmNlcyAhPT0gdW5kZWZpbmVkICYmICFzb3VyY2VzLmluY2x1ZGVzKFwiY29uZmlnXCIpKSB7XG4gICAgc291cmNlcy5wdXNoKFwiY29uZmlnXCIpO1xuICB9XG4gIHJldHVybiBzb3VyY2VzO1xufVxuXG5mdW5jdGlvbiBjb25maWdNYXBWYWx1ZSh2YWx1ZTogQ29uZmlnTWFwVmFsdWUgfCB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChlbnRyeSk7XG4gICAgICBpZiAocmVzb2x2ZWQgIT09IG51bGwpIHJldHVybiByZXNvbHZlZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwodmFsdWUpO1xufVxuXG4vKipcbiAqIFRoZSBmaXJzdCB2YWx1ZSB0aGF0IHJlc29sdmVzIGZvciBgaW5wdXRgLCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZG9tYWluID0gY29uZmlnLnRleHQoW1wiVFVOTkVMX1BVQkxJQ19ET01BSU5cIiwgXCJQVUJMSUNfRE9NQUlOXCJdKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRleHQoaW5wdXQ6IENvbmZpZ0tleSwgb3B0aW9uczogQ29uZmlnT3B0aW9ucyA9IHt9KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlcyhpbnB1dCwgb3B0aW9ucykuYXQoMCk/LnZhbHVlO1xufVxuXG4vKiogUmVzb2x2ZSBhIGh1bWFuLWZyaWVuZGx5IG5hbWUgdGhyb3VnaCB7QGxpbmsgZW52aXJvbm1lbnRLZXlzfSBhbmQge0BsaW5rIHRleHR9LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVWYWx1ZShuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IENvbmZpZ09wdGlvbnMgPSB7fSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0ZXh0KGVudmlyb25tZW50S2V5cyhuYW1lKSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogVGhlIFBSSU1BUlkgKGZ1bGx5LXNjb3BlZCkgbmFtZSBmb3IgYGlucHV0YCAtIHdoYXQgdG8gcHJpbnQgaW4gYSBsb2cgbGluZSBvciBhblxuICogZXJyb3IsIHNvIHRoZSBtZXNzYWdlIG5hbWVzIHRoZSB2YXJpYWJsZSBhIHJlYWRlciBzaG91bGQgc2V0LiBEbyBub3QgaW5kZXhcbiAqIGBrZXlzKC4uLilbMF1gIGZvciB0aGlzIGlmIGBpbnB1dGAgbWF5IGJlIGEgYmFyZSBzdHJpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGxvZ2dlci53YXJuKGAke2NvbmZpZy5uYW1lKEpXVF9TRUNSRVRfRU5WKX0gaXMgbm90IHNldGApO1xuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZShcbiAgaW5wdXQ6IENvbmZpZ0tleSxcbiAgb3B0aW9uczogUGljazxDb25maWdPcHRpb25zLCBcInNjb3BlXCIgfCBcInByZWZpeFwiPiA9IHt9LFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGtleXMoaW5wdXQsIG9wdGlvbnMpWzBdID8/IFwiXCI7XG59XG5cbi8qKlxuICogU2FmZSBgLmVudi48bmFtZT5gIHN1ZmZpeGVzIGZvciBhIE5vZGUgZW52aXJvbm1lbnQsIGV4YWN0IHNwZWxsaW5nIGZpcnN0LlxuICogS25vd24gbG9uZyBhbmQgc2hvcnQgbmFtZXMgYXJlIGludGVyY2hhbmdlYWJsZTsgdW5rbm93biBuYW1lcyBwYXNzIHRocm91Z2guXG4gKi9cbmZ1bmN0aW9uIG5vZGVFbnZOYW1lcyhub2RlRW52OiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBuYW1lID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChub2RlRW52KT8udG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFuYW1lIHx8ICEvXlthLXowLTlfLV0rJC8udGVzdChuYW1lKSkgcmV0dXJuIFtdO1xuICBmb3IgKGNvbnN0IFtjYW5vbmljYWwsIGFsdGVybmF0aXZlc10gb2YgT2JqZWN0LmVudHJpZXMoTk9ERV9FTlZfQUxURVJOQVRJVkVTKSkge1xuICAgIGNvbnN0IG5hbWVzOiByZWFkb25seSBzdHJpbmdbXSA9IGFsdGVybmF0aXZlcztcbiAgICBpZiAobmFtZSA9PT0gY2Fub25pY2FsIHx8IG5hbWVzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gWy4uLm9iamVjdC5zZXF1ZW5jZShuYW1lLCBjYW5vbmljYWwsIGFsdGVybmF0aXZlcykuZGlzdGluY3QoKV07XG4gICAgfVxuICB9XG4gIHJldHVybiBbbmFtZV07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHN0cmluZzogYGNvbmZpZ3VyZWRgIHdoZW4gbm9uLWVtcHR5LCBlbHNlIHtAbGluayB0ZXh0fSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqXG4gKiBUaGUgY29lcmNpb24gcnVsZXMgYXJlIGRlbGliZXJhdGVseSBsb29zZSAoYG9uYCAvIGB5ZXNgIC8gYDFgIGFyZSBhbGxcbiAqIGB0cnVlYCkgYmVjYXVzZSB2YWx1ZXMgbWF5IGNvbWUgZnJvbSBhIGZpbGUgYSBodW1hbiB0eXBlZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uZmlnLnN0cmluZyhvcHRpb25zLmhvc3QsIFwiU01UUF9IT1NUXCIpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nKFxuICBjb25maWd1cmVkOiB1bmtub3duLFxuICBpbnB1dDogQ29uZmlnS2V5LFxuICBvcHRpb25zPzogQ29uZmlnT3B0aW9ucyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBzdHJpbmdVdGlscy50cmltVG9OdWxsKGNvbmZpZ3VyZWQpID8/IHRleHQoaW5wdXQsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBib29sZWFuIHRocm91Z2ggYG9iamVjdC50b0Jvb2xlYW5gLiBgdW5kZWZpbmVkYCB3aGVuIG5laXRoZXIgc291cmNlXG4gKiBpcyBpbnRlcnByZXRhYmxlLCBzbyB0aGUgY2FsbGVyIHBpY2tzIGEgZGVmYXVsdCB3aXRoIGA/P2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib29sZWFuKFxuICBjb25maWd1cmVkOiB1bmtub3duLFxuICBpbnB1dDogQ29uZmlnS2V5LFxuICBvcHRpb25zPzogQ29uZmlnT3B0aW9ucyxcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gb2JqZWN0LnRvQm9vbGVhbihjb25maWd1cmVkKSA/PyBvYmplY3QudG9Cb29sZWFuKHRleHQoaW5wdXQsIG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgcG9zaXRpdmUgbnVtYmVyIHRoYXQgbWF5IGJlIGZyYWN0aW9uYWwgKGEgc2NvcmUgdGhyZXNob2xkLCBhIHJhdGlvKS5cbiAqIFVzZSB7QGxpbmsgcG9zaXRpdmVJbnR9IGZvciBhIGNvdW50LCBwb3J0LCBvciB0aW1lb3V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9zaXRpdmVOdW1iZXIoXG4gIGNvbmZpZ3VyZWQ6IHVua25vd24sXG4gIGlucHV0OiBDb25maWdLZXksXG4gIGZhbGxiYWNrOiBudW1iZXIsXG4gIG9wdGlvbnM/OiBDb25maWdPcHRpb25zLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgZnJvbUNvbmZpZyA9IHBvc2l0aXZlTnVtYmVyVmFsdWUuc2FmZVBhcnNlKGNvbmZpZ3VyZWQpO1xuICBpZiAoZnJvbUNvbmZpZy5zdWNjZXNzKSByZXR1cm4gZnJvbUNvbmZpZy5kYXRhO1xuICBjb25zdCBmcm9tU291cmNlcyA9IHBvc2l0aXZlTnVtYmVyVmFsdWUuc2FmZVBhcnNlKHRleHQoaW5wdXQsIG9wdGlvbnMpKTtcbiAgcmV0dXJuIGZyb21Tb3VyY2VzLnN1Y2Nlc3MgPyBmcm9tU291cmNlcy5kYXRhIDogZmFsbGJhY2s7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHBvc2l0aXZlIGludGVnZXIgKGEgcG9ydCwgYSB0aW1lb3V0LCBhIHBhZ2Ugc2l6ZSksIGZsb29yZWQuIEFcbiAqIG5vbi1udW1lcmljIG9yIG5vbi1wb3NpdGl2ZSB2YWx1ZSBpcyB0cmVhdGVkIGFzIEFCU0VOVCByYXRoZXIgdGhhbiBmYXRhbCAtXG4gKiB0aGVzZSBhcmUgY2VpbGluZ3Mgd2hlcmUgYSBzYW5lIGRlZmF1bHQgYmVhdHMgYSBib290IGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGl2ZUludChcbiAgY29uZmlndXJlZDogdW5rbm93bixcbiAgaW5wdXQ6IENvbmZpZ0tleSxcbiAgZmFsbGJhY2s6IG51bWJlcixcbiAgb3B0aW9ucz86IENvbmZpZ09wdGlvbnMsXG4pOiBudW1iZXIge1xuICBjb25zdCBmcm9tQ29uZmlnID0gcG9zaXRpdmVJbnRWYWx1ZS5zYWZlUGFyc2UoY29uZmlndXJlZCk7XG4gIGlmIChmcm9tQ29uZmlnLnN1Y2Nlc3MpIHJldHVybiBmcm9tQ29uZmlnLmRhdGE7XG4gIGNvbnN0IGZyb21Tb3VyY2VzID0gcG9zaXRpdmVJbnRWYWx1ZS5zYWZlUGFyc2UodGV4dChpbnB1dCwgb3B0aW9ucykpO1xuICByZXR1cm4gZnJvbVNvdXJjZXMuc3VjY2VzcyA/IGZyb21Tb3VyY2VzLmRhdGEgOiBNYXRoLmZsb29yKGZhbGxiYWNrKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgVENQIHBvcnQgYmV0d2VlbiAxIGFuZCB7QGxpbmsgTUFYX1RDUF9QT1JUfS4gSW52YWxpZCBjb25maWd1cmVkIG9yXG4gKiBzb3VyY2VkIHZhbHVlcyBmYWxsIGJhY2sgdG8gdGhlIGNhbGxlcidzIGRlZmF1bHQsIHdoaWNoIG1heSBiZSBhIHNlbnRpbmVsXG4gKiBzdWNoIGFzIGAwYCB3aGVuIHRoZSBjYWxsZXIgdXNlcyBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3J0KFxuICBjb25maWd1cmVkOiB1bmtub3duLFxuICBpbnB1dDogQ29uZmlnS2V5LFxuICBmYWxsYmFjazogbnVtYmVyLFxuICBvcHRpb25zPzogQ29uZmlnT3B0aW9ucyxcbik6IG51bWJlciB7XG4gIGNvbnN0IGZyb21Db25maWcgPSBwb3J0VmFsdWVTY2hlbWEuc2FmZVBhcnNlKGNvbmZpZ3VyZWQpO1xuICBpZiAoZnJvbUNvbmZpZy5zdWNjZXNzKSByZXR1cm4gZnJvbUNvbmZpZy5kYXRhO1xuICBjb25zdCBmcm9tU291cmNlcyA9IHBvcnRWYWx1ZVNjaGVtYS5zYWZlUGFyc2UodGV4dChpbnB1dCwgb3B0aW9ucykpO1xuICByZXR1cm4gZnJvbVNvdXJjZXMuc3VjY2VzcyA/IGZyb21Tb3VyY2VzLmRhdGEgOiBmYWxsYmFjaztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgbGlzdCB0aHJvdWdoIGBzdHJpbmdVdGlscy5wYXJzZUxpc3RgLCBzbyBhbiBhcnJheSBmcm9tIHR5cGVkIGNvbmZpZyBhbmQgYVxuICogYFwiYSwgYiBjXCJgIHN0cmluZyBub3JtYWxpemUgaWRlbnRpY2FsbHkuIGBbXWAgd2hlbiBuZWl0aGVyIHNvdXJjZSBoYXMgZW50cmllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3QoXG4gIGNvbmZpZ3VyZWQ6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgbnVsbCxcbiAgaW5wdXQ6IENvbmZpZ0tleSxcbiAgdHJhbnNmb3JtPzogKGVudHJ5OiBzdHJpbmcpID0+IHN0cmluZyxcbiAgb3B0aW9ucz86IENvbmZpZ09wdGlvbnMsXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGZyb21Db25maWcgPSBzdHJpbmdVdGlscy5wYXJzZUxpc3QoY29uZmlndXJlZCwgdHJhbnNmb3JtKTtcbiAgcmV0dXJuIGZyb21Db25maWcubGVuZ3RoID4gMFxuICAgID8gZnJvbUNvbmZpZ1xuICAgIDogc3RyaW5nVXRpbHMucGFyc2VMaXN0KHRleHQoaW5wdXQsIG9wdGlvbnMpLCB0cmFuc2Zvcm0pO1xufVxuXG4vKipcbiAqIFRoZSBEYXRhYnJpY2tzIGJ1bmRsZSBvdXRwdXQgZm9yIGBjd2RgIC0gYGRhdGFicmlja3MgYnVuZGxlIHZhbGlkYXRlIC0tb3V0cHV0XG4gKiBqc29uYCBydW4gZnJvbSB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgYGRhdGFicmlja3MueW1sYCwgd2l0aCB0aGUgY29uZmlnIGZpbGUnc1xuICogcGF0aC4gQSBub24temVybyB2YWxpZGF0aW9uIG1heSBzdGlsbCByZXR1cm4gcGFydGlhbCBKU09OIHdpdGggdXNhYmxlIEFwcFxuICogY29uZmlnLiBgdW5kZWZpbmVkYCB3aGVuIGJ1bmRsZSByZWFkcyBhcmUgZGlzYWJsZWQsIHRoZSBwcm9jZXNzIGlzIHByb2R1Y3Rpb25cbiAqIG9yIGEgZGVwbG95ZWQgQXBwIHdpdGhvdXQgYW4gZXhwbGljaXQgb3ZlcnJpZGUsIHRoZXJlIGlzIG5vIGJ1bmRsZSwgb3IgdGhlXG4gKiBDTEkgcHJvZHVjZXMgbm8gSlNPTi5cbiAqXG4gKiBQYXJzZWQgdmFsaWRhdGlvbiBvdXRwdXQgaXMgY2FjaGVkIGJ5IGJ1bmRsZSBwYXRoIGFuZCBEYXRhYnJpY2tzIHByb2ZpbGUuXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVuZGxlRmlsZShjd2Q/OiBzdHJpbmcgfCBudWxsKTogQ29uZmlnRmlsZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG92ZXJyaWRlID0gb2JqZWN0LnRvQm9vbGVhbihwcm9jZXNzLmVudltDT05GSUdfQlVORExFX0tFWV0pO1xuICBpZiAob3ZlcnJpZGUgPT09IGZhbHNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgb3ZlcnJpZGUgPT09IHVuZGVmaW5lZCAmJlxuICAgIChwcm9jZXNzLmVudi5OT0RFX0VOVj8udHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IFwicHJvZHVjdGlvblwiIHx8IGlzRGF0YWJyaWNrc0FwcEVudigpKVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoY3dkKTtcbiAgcmV0dXJuIGxvYWRCdW5kbGVGaWxlKHJlc29sdmVkLCBzdHJpbmdVdGlscy50cmltVG9OdWxsKHByb2Nlc3MuZW52LkRBVEFCUklDS1NfQ09ORklHX1BST0ZJTEUpKTtcbn1cblxuLyoqIFRoZSBwYXJzZWQgYGFwcC55YW1sYCAvIGBhcHAueW1sYCBmb3IgYGN3ZGAsIHdoZW4gbG9jYWwgQXBwIGNvbmZpZyByZWFkcyBhcmUgZW5hYmxlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBGaWxlKGN3ZD86IHN0cmluZyB8IG51bGwpOiBDb25maWdGaWxlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZW5hYmxlZCA9IG9iamVjdC50b0Jvb2xlYW4ocHJvY2Vzcy5lbnZbQ09ORklHX0FQUF9LRVldKSA/PyAhaXNEYXRhYnJpY2tzQXBwRW52KCk7XG4gIGlmICghZW5hYmxlZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGxvYWRBcHBGaWxlKHJlc29sdmVXb3JraW5nRGlyZWN0b3J5KGN3ZCkpO1xufVxuXG4vKiogVGhlIHNpbmdsZSBidW5kbGUgQXBwJ3MgcmVzb2x2ZWQgZW52aXJvbm1lbnQsIHdoZW4gYXZhaWxhYmxlLiAqL1xuZnVuY3Rpb24gYnVuZGxlRW52aXJvbm1lbnQob3B0aW9uczogQ29uZmlnT3B0aW9ucyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQge1xuICBjb25zdCBkYXRhID0gc291cmNlRGF0YShvcHRpb25zLmJ1bmRsZURhdGEpID8/IGJ1bmRsZUZpbGUob3B0aW9ucy5jd2QpPy5kYXRhO1xuICByZXR1cm4gZGF0YSA/IGZsYXR0ZW5CdW5kbGVFbnYoZGF0YSkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFwcEVudmlyb25tZW50KG9wdGlvbnM6IENvbmZpZ09wdGlvbnMpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGF0YSA9IHNvdXJjZURhdGEob3B0aW9ucy5hcHBEYXRhKSA/PyBhcHBGaWxlKG9wdGlvbnMuY3dkKT8uZGF0YTtcbiAgcmV0dXJuIGRhdGEgPyBmbGF0dGVuQXBwRW52KGRhdGEpIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBzb3VyY2VEYXRhKFxuICBzb3VyY2U6IENvbmZpZ0ZpbGUgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChcInBhdGhcIiBpbiBzb3VyY2UgJiYgdHlwZW9mIHNvdXJjZS5wYXRoID09PSBcInN0cmluZ1wiICYmIG9iamVjdC5pc1JlY29yZChzb3VyY2UuZGF0YSkpIHtcbiAgICByZXR1cm4gc291cmNlLmRhdGE7XG4gIH1cbiAgcmV0dXJuIHNvdXJjZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqIFBhcnNlZCBgLmVudmAgZm9yIGBjd2RgLCBvciBge31gOyBwYXJzZWQgZmlsZSBkYXRhIGlzIGNhY2hlZCBieSBwYXRoLiAqL1xuZnVuY3Rpb24gZG90ZW52KGN3ZD86IHN0cmluZyB8IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgZW5hYmxlZCA9IG9iamVjdC50b0Jvb2xlYW4ocHJvY2Vzcy5lbnZbQ09ORklHX0RPVEVOVl9LRVldKSA/PyAhaXNEYXRhYnJpY2tzQXBwRW52KCk7XG4gIGlmICghZW5hYmxlZCkgcmV0dXJuIHt9O1xuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVXb3JraW5nRGlyZWN0b3J5KGN3ZCk7XG4gIHJldHVybiBsb2FkRG90ZW52KHJlc29sdmVkLCBub2RlRW52TmFtZXMocHJvY2Vzcy5lbnYuTk9ERV9FTlYpKTtcbn1cblxuLyoqIE1hcHMgZm9yIG9uZSBzb3VyY2UgaW4gcHJlY2VkZW5jZSBvcmRlci4gKi9cbmZ1bmN0aW9uIHJlYWQoXG4gIHNvdXJjZTogQ29uZmlnU291cmNlLFxuICBvcHRpb25zOiBDb25maWdPcHRpb25zLFxuKTogb2JqZWN0LlNlcXVlbmNlPFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ge1xuICByZXR1cm4gb2JqZWN0LnNlcXVlbmNlKHtcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogR2VuZXJhdG9yPFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ge1xuICAgICAgc3dpdGNoIChzb3VyY2UpIHtcbiAgICAgICAgY2FzZSBcImNvbmZpZ1wiOiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IG9wdGlvbnMuZGF0YTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgeWllbGQqIGRhdGE7XG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHlpZWxkIGRhdGEgYXMgQ29uZmlnRGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImVudlwiOlxuICAgICAgICAgIHlpZWxkIHByb2Nlc3MuZW52O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZG90ZW52XCI6XG4gICAgICAgICAgeWllbGQgZG90ZW52KG9wdGlvbnMuY3dkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImJ1bmRsZVwiOiB7XG4gICAgICAgICAgY29uc3QgZW52aXJvbm1lbnQgPSBidW5kbGVFbnZpcm9ubWVudChvcHRpb25zKTtcbiAgICAgICAgICBpZiAoZW52aXJvbm1lbnQpIHlpZWxkIGVudmlyb25tZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhcHBcIjoge1xuICAgICAgICAgIGNvbnN0IGVudmlyb25tZW50ID0gYXBwRW52aXJvbm1lbnQob3B0aW9ucyk7XG4gICAgICAgICAgaWYgKGVudmlyb25tZW50KSB5aWVsZCBlbnZpcm9ubWVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVua25vd24gY29uZmlnIHNvdXJjZTogJHtzb3VyY2V9YCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogTG9jYXRlIGBuYW1lc2AgZnJvbSBgY3dkYCBvdXR3YXJkLiBgY3dkYCBpdHNlbGYgaXMgY2hlY2tlZCBiZWZvcmUgdGhlXG4gKiBkaXNjb3ZlcmVkIHByb2plY3Qgcm9vdHMgc28gYSBwYWNrYWdlLWxvY2FsIGZpbGUgd2lucyBvdmVyIHRoZSB3b3Jrc3BhY2Uncy5cbiAqL1xuZnVuY3Rpb24gZmluZENvbmZpZ0ZpbGUoY3dkOiBzdHJpbmcsIG5hbWVzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN0YXJ0ID0gcmVzb2x2ZShjd2QpO1xuICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShbc3RhcnQsIC4uLm5hbWVzXSk7XG4gIGlmIChjb25maWdGaWxlQ2FjaGUuaGFzKGtleSkpIHJldHVybiBjb25maWdGaWxlQ2FjaGUuZ2V0KGtleSk7XG4gIGNvbnN0IHJvb3QgPSByZXNvbHZlUHJvamVjdFJvb3Qoc3RhcnQpO1xuICBjb25zdCBwYXRoRnJvbVJvb3QgPSByb290ID8gcmVsYXRpdmUocm9vdCwgc3RhcnQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBib3VuZGFyeSA9XG4gICAgcm9vdCAmJlxuICAgIHBhdGhGcm9tUm9vdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgIWlzQWJzb2x1dGUocGF0aEZyb21Sb290KSAmJlxuICAgIHBhdGhGcm9tUm9vdCAhPT0gXCIuLlwiICYmXG4gICAgIXBhdGhGcm9tUm9vdC5zdGFydHNXaXRoKGAuLiR7c2VwfWApXG4gICAgICA/IHJvb3RcbiAgICAgIDogdW5kZWZpbmVkO1xuICBmb3IgKGxldCBkaXIgPSBzdGFydDsgOyBkaXIgPSBkaXJuYW1lKGRpcikpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHtcbiAgICAgIGNvbnN0IHBhdGggPSByZXNvbHZlKGRpciwgbmFtZSk7XG4gICAgICBpZiAoc3RhdFN5bmMocGF0aCk/LmlzRmlsZSgpKSB7XG4gICAgICAgIGNvbmZpZ0ZpbGVDYWNoZS5zZXQoa2V5LCBwYXRoKTtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChib3VuZGFyeSA9PT0gdW5kZWZpbmVkIHx8IGRpciA9PT0gYm91bmRhcnkpIGJyZWFrO1xuICB9XG4gIGNvbmZpZ0ZpbGVDYWNoZS5zZXQoa2V5LCB1bmRlZmluZWQpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBsb2FkRG90ZW52KFxuICBjd2Q6IHN0cmluZyxcbiAgZW52aXJvbm1lbnRzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBuYW1lcyA9IFsuLi5lbnZpcm9ubWVudHMubWFwKChuYW1lKSA9PiBgJHtET1RFTlZfRklMRV9OQU1FfS4ke25hbWV9YCksIERPVEVOVl9GSUxFX05BTUVdO1xuICBjb25zdCBwYXRoID0gZmluZENvbmZpZ0ZpbGUoY3dkLCBuYW1lcyk7XG4gIGlmICghcGF0aCkgcmV0dXJuIHt9O1xuICByZXR1cm4gKFxuICAgIGNhY2hlZFJlY29yZChKU09OLnN0cmluZ2lmeShbXCJkb3RlbnZcIiwgcGF0aF0pLCAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcGFyc2VFbnYocmVhZEZpbGVTeW5jKHBhdGgsIFwidXRmOFwiKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCJmYWlsZWQgdG8gcmVhZCBkb3RlbnYgZmlsZVwiLCB7IHBhdGggfSk7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICB9KSA/PyB7fVxuICApO1xufVxuXG5mdW5jdGlvbiBsb2FkQnVuZGxlRmlsZShjd2Q6IHN0cmluZywgcHJvZmlsZTogc3RyaW5nIHwgbnVsbCk6IENvbmZpZ0ZpbGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXRoID0gZmluZENvbmZpZ0ZpbGUoY3dkLCBCVU5ETEVfRklMRV9OQU1FUyk7XG4gIGlmICghcGF0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZGF0YSA9IGNhY2hlZFJlY29yZChKU09OLnN0cmluZ2lmeShbXCJidW5kbGVcIiwgcGF0aCwgcHJvZmlsZV0pLCAoKSA9PiB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgIFwiYnVuZGxlXCIsXG4gICAgICBcInZhbGlkYXRlXCIsXG4gICAgICBcIi0tb3V0cHV0XCIsXG4gICAgICBcImpzb25cIixcbiAgICAgIC4uLihwcm9maWxlID09PSBudWxsID8gW10gOiBbXCItLXByb2ZpbGVcIiwgcHJvZmlsZV0pLFxuICAgIF07XG4gICAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKFwiZGF0YWJyaWNrc1wiLCBhcmdzLCB7XG4gICAgICBjd2Q6IHJlc29sdmUocGF0aCwgXCIuLlwiKSxcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwicGlwZVwiXSxcbiAgICB9KTtcbiAgICBjb25zdCBvdXRwdXQgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKHJlc3VsdC5zdGRvdXQpO1xuICAgIGNvbnN0IGVycm9yID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChyZXN1bHQuc3RkZXJyKTtcbiAgICBpZiAob3V0cHV0ID09PSBudWxsKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJidW5kbGUgdmFsaWRhdGUgcHJvZHVjZWQgbm8gSlNPTlwiLCB7IHBhdGgsIHN0YXR1czogcmVzdWx0LnN0YXR1cywgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWQgPSBqc29uLnBhcnNlUmVjb3JkKG91dHB1dCk7XG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiZmFpbGVkIHRvIHBhcnNlIGJ1bmRsZSB2YWxpZGF0ZSBvdXRwdXRcIiwgeyBwYXRoLCBzdGF0dXM6IHJlc3VsdC5zdGF0dXMgfSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwidXNpbmcgcGFydGlhbCBidW5kbGUgb3V0cHV0XCIsIHsgcGF0aCwgc3RhdHVzOiByZXN1bHQuc3RhdHVzLCBlcnJvciB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSk7XG4gIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB7IHBhdGgsIGRhdGEgfTtcbn1cblxuZnVuY3Rpb24gbG9hZEFwcEZpbGUoY3dkOiBzdHJpbmcpOiBDb25maWdGaWxlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcGF0aCA9IGZpbmRDb25maWdGaWxlKGN3ZCwgQVBQX0ZJTEVfTkFNRVMpO1xuICBpZiAoIXBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGRhdGEgPSBjYWNoZWRSZWNvcmQoSlNPTi5zdHJpbmdpZnkoW1wiYXBwXCIsIHBhdGhdKSwgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVlhbWwocmVhZEZpbGVTeW5jKHBhdGgsIFwidXRmOFwiKSk7XG4gICAgICByZXR1cm4gb2JqZWN0LmlzUmVjb3JkKHBhcnNlZCkgPyBwYXJzZWQgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICBsb2dnZXIud2FybihcImZhaWxlZCB0byBwYXJzZSBhcHAgeWFtbFwiLCB7IHBhdGggfSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB7IHBhdGgsIGRhdGEgfTtcbn1cbiJdfQ==
|
|
582
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsS0FBSyxJQUFJLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxJQUFJLElBQUksa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV6RixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO0FBMEM5RCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUM7QUFDbEMsTUFBTSxlQUFlLEdBQTRCLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxnQkFBZ0Is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QUN0RixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDekQsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQVc7SUFDOUIsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzVCLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFO1FBQzVELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDckQsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN0RCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbEQsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExheWVyZWQgY29uZmlndXJhdGlvbiBsb29rdXA6IGVudmlyb25tZW50LCBgLmVudmAsIGJ1bmRsZSwgYW5kIGBhcHAueWFtbGAuXG4gKlxuICogRXZlcnkgcGFja2FnZSByZXNvbHZlcyBzZXR0aW5ncyB0aGUgc2FtZSB3YXk6IHRha2UgdGhlIGNhbGxlcidzIHZhbHVlLCBlbHNlXG4gKiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgZWxzZSBhIGRlZmF1bHQuIExvY2FsIGRldmVsb3BtZW50IGFkZHMgdHdvIGZhbGxiYWNrXG4gKiBsb2NhdGlvbnM6IGAuZW52YCBmaWxlcywgb25lIEFwcCdzIGByZXNvdXJjZXMuYXBwcy48YXBwPi5jb25maWcuZW52YCBpblxuICogYGRhdGFicmlja3MueW1sYCwgYW5kIGxpdGVyYWwgZW52IHZhbHVlcyBpbiBgYXBwLnlhbWxgIC8gYGFwcC55bWxgLlxuICpcbiAqIHtAbGluayB2YWx1ZXN9IGlzIExBWlkgKGFuIGBvYmplY3QuU2VxdWVuY2VgKSwgc28gYGRhdGFicmlja3MgYnVuZGxlIHZhbGlkYXRlYFxuICogaXMgb25seSBzcGF3bmVkIHdoZW4gdGhlIGVudmlyb25tZW50IGFuZCBgLmVudmAgYm90aCBtaXNzZWQ7IGFwcCBZQU1MIGlzIG9ubHlcbiAqIHJlYWQgYWZ0ZXIgdGhlIGJ1bmRsZSBzb3VyY2UgYWxzbyBtaXNzZWQuXG4gKlxuICogSW5zaWRlIGEgZGVwbG95ZWQgRGF0YWJyaWNrcyBBcHAgYWxsIHRocmVlIGZpbGUgc291cmNlcyBhcmUgc2tpcHBlZCBieSBkZWZhdWx0XG4gKiAoe0BsaW5rIGlzRGF0YWJyaWNrc0FwcEVudn0pOiB0aGUgcGxhdGZvcm0gaGFzIGFscmVhZHkgdHVybmVkIHRoZW0gaW50byByZWFsXG4gKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHRoZXJlIGlzIG5vIGJ1bmRsZSB0byB2YWxpZGF0ZSwgYW5kIHRoZSBgZGF0YWJyaWNrc2BcbiAqIENMSSBpcyBub3Qgb24gdGhlIGltYWdlLiBCb29sZWFuIGVudmlyb25tZW50IG92ZXJyaWRlcyBjYW4gZm9yY2UgZWl0aGVyIGZpbGVcbiAqIHNvdXJjZSBvbiBvciBvZmYgd2hlbiBhIHRvb2wgbmVlZHMgZGlmZmVyZW50IGJlaGF2aW9yLlxuICpcbiAqIE9ubHkgdGhlIHNpbmdsZSBidW5kbGUgYXBwJ3MgYGNvbmZpZy5lbnZgIGFuZCBsaXRlcmFsIGFwcCBZQU1MIGBlbnZbXS52YWx1ZWBcbiAqIGVudHJpZXMgYXJlIGNvbnN1bHRlZC4gUm9vdCBidW5kbGUgYHZhcmlhYmxlc2AgYXJlIG5vdDogdGhleSBhcmUgYXV0aG9yaW5nXG4gKiBpbnB1dHMgZm9yIHRoZSBidW5kbGUgaXRzZWxmIChpbnRlcnBvbGF0ZWQgaW50byB0YXJnZXRzLCByZXNvdXJjZXMsIGFuZCBwYXRocyksXG4gKiBzbyB0cmVhdGluZyBvbmUgYXMgYSBwcm9jZXNzIHNldHRpbmcgcmVzb2x2ZXMgbmFtZXMgdGhlIGRlcGxveWVkIGFwcCBuZXZlciBzZWVzLlxuICpcbiAqIE5vZGUtb25seSAoYGNoaWxkX3Byb2Nlc3NgLCBgZnNgLCBgcHJvY2Vzc2ApLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgaXNBYnNvbHV0ZSwgcmVsYXRpdmUsIHJlc29sdmUsIHNlcCB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHBhcnNlRW52IH0gZnJvbSBcIm5vZGU6dXRpbFwiO1xuaW1wb3J0IHsgZW52aXJvbm1lbnRVdGlscywganNvbiwgbG9nLCBvYmplY3QsIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlWWFtbCB9IGZyb20gXCJ5YW1sXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgY2FjaGVkUmVjb3JkLCBzdGF0U3luYyB9IGZyb20gXCIuL2ZpbGUudHNcIjtcbmltcG9ydCB7IHJlc29sdmVXb3JraW5nRGlyZWN0b3J5LCByb290IGFzIHJlc29sdmVQcm9qZWN0Um9vdCB9IGZyb20gXCIuL3Byb2plY3QtdXRpbHMudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImNvbmZpZ1wiKTtcbmNvbnN0IGNvbmZpZ0ZpbGVDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbnR5cGUgQ29uZmlnS2V5ID0gc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW107XG5cbmV4cG9ydCB0eXBlIENvbmZpZ01hcFZhbHVlID0gc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsIHwgdW5kZWZpbmVkO1xuZXhwb3J0IHR5cGUgQ29uZmlnRGF0YSA9IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIENvbmZpZ01hcFZhbHVlPj47XG5cbi8qKiBXaGVyZSBhIHZhbHVlIG1heSBjb21lIGZyb20sIGNvbnN1bHRlZCBpbiB0aGUgb3JkZXIgZ2l2ZW4uICovXG5leHBvcnQgdHlwZSBDb25maWdTb3VyY2UgPSBcImNvbmZpZ1wiIHwgXCJlbnZcIiB8IFwiZG90ZW52XCIgfCBcImJ1bmRsZVwiIHwgXCJhcHBcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDb25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIE91dGVybW9zdCBuYW1lc3BhY2VzIHRyaWVkIGJlZm9yZSBlYWNoIGtleS4gRGVmYXVsdHMgdG8gYERCWF9UT09MU2AuXG4gICAqL1xuICBzY29wZT86IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogQ2FwYWJpbGl0eSBuYW1lc3BhY2VzIGluc2VydGVkIGFmdGVyIHRoZSBzY29wZSBhbmQgYmVmb3JlIGVhY2gga2V5LiAqL1xuICBwcmVmaXg/OiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIENvbnN0YW50IGNvbmZpZyBtYXBzIHJlYWQgYnkgdGhlIGBjb25maWdgIHNvdXJjZS4gKi9cbiAgZGF0YT86IENvbmZpZ0RhdGEgfCByZWFkb25seSBDb25maWdEYXRhW107XG4gIC8qKiBQYXJzZWQgYnVuZGxlIGRhdGEgdXNlZCBpbnN0ZWFkIG9mIGxvYWRpbmcgYGRhdGFicmlja3MueW1sYC4gKi9cbiAgYnVuZGxlRGF0YT86IENvbmZpZ0ZpbGUgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIFBhcnNlZCBhcHAgWUFNTCBkYXRhIHVzZWQgaW5zdGVhZCBvZiBsb2FkaW5nIGBhcHAueWFtbGAuICovXG4gIGFwcERhdGE/OiBDb25maWdGaWxlIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBTb3VyY2VzIGluIHByZWNlZGVuY2Ugb3JkZXIuIERlZmF1bHQ6IGBjb25maWdgLCBgZW52YCwgYGRvdGVudmAsIGBidW5kbGVgLCBgYXBwYC4gKi9cbiAgc291cmNlcz86IENvbmZpZ1NvdXJjZSB8IHJlYWRvbmx5IENvbmZpZ1NvdXJjZVtdO1xuICAvKiogRGlyZWN0b3J5IHRvIHJlc29sdmUgYC5lbnZgIGFuZCB0aGUgYnVuZGxlIGZyb20uIERlZmF1bHQ6IGBwcm9jZXNzLmN3ZCgpYC4gKi9cbiAgY3dkPzogc3RyaW5nO1xufVxuXG4vKiogT25lIHJlc29sdmVkIHZhbHVlLCB0YWdnZWQgd2l0aCB0aGUga2V5IGFuZCBzb3VyY2UgaXQgY2FtZSBmcm9tLiAqL1xuaW50ZXJmYWNlIENvbmZpZ1ZhbHVlIHtcbiAga2V5OiBzdHJpbmc7XG4gIHNvdXJjZTogQ29uZmlnU291cmNlO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKiogQSBjb25maWcgZmlsZSBmb3VuZCBvbiBkaXNrLCB3aXRoIGl0cyBwYXJzZWQgY29udGVudHMuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ0ZpbGUge1xuICBwYXRoOiBzdHJpbmc7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5jb25zdCBERUZBVUxUX1NDT1BFID0gXCJEQlhfVE9PTFNcIjtcbmNvbnN0IERFRkFVTFRfU09VUkNFUzogcmVhZG9ubHkgQ29uZmlnU291cmNlW10gPSBbXCJjb25maWdcIiwgXCJlbnZcIiwgXCJkb3RlbnZcIiwgXCJidW5kbGVcIiwgXCJhcHBcIl07XG5jb25zdCBCVU5ETEVfRklMRV9OQU1FUyA9IFtcImRhdGFicmlja3MueW1sXCIsIFwiZGF0YWJyaWNrcy55YW1sXCJdIGFzIGNvbnN0O1xuY29uc3QgQVBQX0ZJTEVfTkFNRVMgPSBbXCJhcHAueWFtbFwiLCBcImFwcC55bWxcIl0gYXMgY29uc3Q7XG5jb25zdCBET1RFTlZfRklMRV9OQU1FID0gXCIuZW52XCI7XG5jb25zdCBOT0RFX0VOVl9BTFRFUk5BVElWRVMgPSB7XG4gIHByb2R1Y3Rpb246IFtcInByb2RcIl0sXG4gIGRldmVsb3BtZW50OiBbXCJkZXZcIl0sXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT47XG5cbi8qKiBIaWdoZXN0IHZhbGlkIFRDUCBwb3J0IG51bWJlci4gKi9cbmV4cG9ydCBjb25zdCBNQVhfVENQX1BPUlQgPSA2NV81MzU7XG5cbi8qKiBCb29sZWFuIGVudmlyb25tZW50IG92ZXJyaWRlIGZvciBwcm9qZWN0IGAuZW52YCByZWFkcy4gKi9cbmNvbnN0IENPTkZJR19ET1RFTlZfS0VZID0gXCJEQlhfVE9PTFNfQ09ORklHX0RPVEVOVlwiO1xuXG4vKiogQm9vbGVhbiBlbnZpcm9ubWVudCBvdmVycmlkZSBmb3IgRGF0YWJyaWNrcyBidW5kbGUgcmVhZHMuICovXG5jb25zdCBDT05GSUdfQlVORExFX0tFWSA9IFwiREJYX1RPT0xTX0NPTkZJR19CVU5ETEVcIjtcblxuLyoqIEJvb2xlYW4gZW52aXJvbm1lbnQgb3ZlcnJpZGUgZm9yIERhdGFicmlja3MgQXBwIFlBTUwgcmVhZHMuICovXG5jb25zdCBDT05GSUdfQVBQX0tFWSA9IFwiREJYX1RPT0xTX0NPTkZJR19BUFBcIjtcblxuLyoqIEV4YWN0IHByb2Nlc3MtZW52aXJvbm1lbnQgbG9va3VwIGZvciBjYWxsZXJzIHRoYXQgZG8gbm90IHJlYWQgbG9jYWwgY29uZmlnIGZpbGVzLiAqL1xuZXhwb3J0IGNvbnN0IEVOVl9PTkxZID0geyBzY29wZTogW10gYXMgY29uc3QsIHNvdXJjZXM6IFwiZW52XCIgYXMgY29uc3QgfTtcblxuZXhwb3J0IGNvbnN0IHZhbHVlU2NoZW1hID0gelxuICAuc3RyaW5nKClcbiAgLnRyaW0oKVxuICAubWluKDEpXG4gIC5yZWZpbmUoKHZhbHVlOiBzdHJpbmcpID0+ICEvXFwkXFx7W159XStcXH0vLnRlc3QodmFsdWUpLCB7XG4gICAgbWVzc2FnZTogXCJJbnRlcnBvbGF0ZWQgdmFsdWVzIGFyZSBub3QgYWxsb3dlZFwiLFxuICB9KTtcblxuY29uc3QgcG9ydFZhbHVlU2NoZW1hID0gei5wcmVwcm9jZXNzKChpbnB1dCkgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSByZXR1cm4gaW5wdXQ7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09IFwic3RyaW5nXCIgfHwgIS9eXFxkKyQvLnRlc3QoaW5wdXQudHJpbSgpKSkgcmV0dXJuIE51bWJlci5OYU47XG4gIHJldHVybiBOdW1iZXIoaW5wdXQudHJpbSgpKTtcbn0sIHoubnVtYmVyKCkuaW50KCkubWluKDEpLm1heChNQVhfVENQX1BPUlQpKTtcblxuY29uc3QgcG9zaXRpdmVOdW1iZXJWYWx1ZSA9IHoucHJlcHJvY2VzcygoaW5wdXQpID0+IG9iamVjdC50b051bWJlcihpbnB1dCksIHoubnVtYmVyKCkucG9zaXRpdmUoKSk7XG5jb25zdCBwb3NpdGl2ZUludFZhbHVlID0gcG9zaXRpdmVOdW1iZXJWYWx1ZS50cmFuc2Zvcm0oTWF0aC5mbG9vcik7XG5cbi8qKiBBIG5hbWVkIGJ1bmRsZSBvciBBcHAgcmVzb3VyY2U7IGNvbmNyZXRlIHJlc291cmNlIGZpZWxkcyBwYXNzIHRocm91Z2guICovXG5leHBvcnQgY29uc3QgYnVuZGxlUmVzb3VyY2VTY2hlbWEgPSB6Lm9iamVjdCh7IG5hbWU6IHZhbHVlU2NoZW1hLm9wdGlvbmFsKCkgfSkucGFzc3Rocm91Z2goKTtcblxuZXhwb3J0IGNvbnN0IGJ1bmRsZUVudkVudHJ5U2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB2YWx1ZVNjaGVtYS5vcHRpb25hbCgpLFxuICB2YWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB2YWx1ZV9mcm9tOiB2YWx1ZVNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBidW5kbGVBcHBTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHZhbHVlU2NoZW1hLm9wdGlvbmFsKCksXG4gIGNvbmZpZzogei5vYmplY3QoeyBlbnY6IHouYXJyYXkoYnVuZGxlRW52RW50cnlTY2hlbWEpLm9wdGlvbmFsKCkgfSkub3B0aW9uYWwoKSxcbiAgcmVzb3VyY2VzOiB6LmFycmF5KGJ1bmRsZVJlc291cmNlU2NoZW1hKS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBhcHBFbnZFbnRyeVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogdmFsdWVTY2hlbWEsXG4gIHZhbHVlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHZhbHVlRnJvbTogdmFsdWVTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgYXBwU2NoZW1hID0gei5vYmplY3Qoe1xuICBlbnY6IHouYXJyYXkoYXBwRW52RW50cnlTY2hlbWEpLm9wdGlvbmFsKCksXG4gIHJlc291cmNlczogei5hcnJheShidW5kbGVSZXNvdXJjZVNjaGVtYSkub3B0aW9uYWwoKSxcbn0pO1xuXG5jb25zdCBidW5kbGVDb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHJlc291cmNlczogei5vYmplY3QoeyBhcHBzOiB6LnJlY29yZCh6LnN0cmluZygpLCBidW5kbGVBcHBTY2hlbWEpLm9wdGlvbmFsKCkgfSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKiogRmxhdHRlbiB0aGUgc2luZ2xlIGJ1bmRsZSBBcHAncyBgY29uZmlnLmVudmAsIHJlc29sdmluZyByZXNvdXJjZSByZWZlcmVuY2VzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5CdW5kbGVFbnYoZGF0YTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBwYXJzZWQgPSBidW5kbGVDb25maWdTY2hlbWEuc2FmZVBhcnNlKGRhdGEpO1xuICBpZiAoIXBhcnNlZC5zdWNjZXNzKSByZXR1cm4ge307XG4gIGNvbnN0IGFwcHMgPSBPYmplY3QudmFsdWVzKHBhcnNlZC5kYXRhLnJlc291cmNlcz8uYXBwcyA/PyB7fSk7XG4gIGlmIChhcHBzLmxlbmd0aCAhPT0gMSkgcmV0dXJuIHt9O1xuICBjb25zdCBhcHAgPSBhcHBzWzBdO1xuICBjb25zdCByZXNvdXJjZXMgPSBuZXcgTWFwKFxuICAgIChhcHA/LnJlc291cmNlcyA/PyBbXSlcbiAgICAgIC5maWx0ZXIoKHJlc291cmNlKSA9PiByZXNvdXJjZS5uYW1lKVxuICAgICAgLm1hcCgocmVzb3VyY2UpID0+IFtyZXNvdXJjZS5uYW1lISwgcmVzb3VyY2VdIGFzIGNvbnN0KSxcbiAgKTtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgZW50cnkgb2YgYXBwPy5jb25maWc/LmVudiA/PyBbXSkge1xuICAgIGlmICghZW50cnkubmFtZSkgY29udGludWU7XG4gICAgY29uc3QgbGl0ZXJhbCA9IHZhbHVlU2NoZW1hLnNhZmVQYXJzZShlbnRyeS52YWx1ZSk7XG4gICAgaWYgKGxpdGVyYWwuc3VjY2Vzcykge1xuICAgICAgcmVzdWx0W2VudHJ5Lm5hbWVdID0gbGl0ZXJhbC5kYXRhO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHJlZmVyZW5jZWQgPSBlbnRyeS52YWx1ZV9mcm9tXG4gICAgICA/IHJlc291cmNlVmFsdWUocmVzb3VyY2VzLmdldChlbnRyeS52YWx1ZV9mcm9tKSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGlmIChyZWZlcmVuY2VkKSByZXN1bHRbZW50cnkubmFtZV0gPSByZWZlcmVuY2VkO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBGbGF0dGVuIGBhcHAueWFtbGAgZW52IGVudHJpZXMsIHJlc29sdmluZyBgdmFsdWVGcm9tYCByZXNvdXJjZSByZWZlcmVuY2VzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5BcHBFbnYoZGF0YTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBwYXJzZWQgPSBhcHBTY2hlbWEuc2FmZVBhcnNlKGRhdGEpO1xuICBpZiAoIXBhcnNlZC5zdWNjZXNzKSByZXR1cm4ge307XG4gIGNvbnN0IHJlc291cmNlcyA9IG5ldyBNYXAoXG4gICAgKHBhcnNlZC5kYXRhLnJlc291cmNlcyA/PyBbXSlcbiAgICAgIC5maWx0ZXIoKHJlc291cmNlKSA9PiByZXNvdXJjZS5uYW1lKVxuICAgICAgLm1hcCgocmVzb3VyY2UpID0+IFtyZXNvdXJjZS5uYW1lISwgcmVzb3VyY2VdIGFzIGNvbnN0KSxcbiAgKTtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgZW50cnkgb2YgcGFyc2VkLmRhdGEuZW52ID8/IFtdKSB7XG4gICAgY29uc3QgbGl0ZXJhbCA9IHZhbHVlU2NoZW1hLnNhZmVQYXJzZShlbnRyeS52YWx1ZSk7XG4gICAgaWYgKGxpdGVyYWwuc3VjY2Vzcykge1xuICAgICAgcmVzdWx0W2VudHJ5Lm5hbWVdID0gbGl0ZXJhbC5kYXRhO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHJlZmVyZW5jZWQgPSBlbnRyeS52YWx1ZUZyb20gPyByZXNvdXJjZVZhbHVlKHJlc291cmNlcy5nZXQoZW50cnkudmFsdWVGcm9tKSkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHJlZmVyZW5jZWQpIHJlc3VsdFtlbnRyeS5uYW1lXSA9IHJlZmVyZW5jZWQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVzb3VyY2VWYWx1ZShyZXNvdXJjZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgcGF0aCBvZiBbXG4gICAgW1wic3FsX3dhcmVob3VzZVwiLCBcImlkXCJdLFxuICAgIFtcImdlbmllX3NwYWNlXCIsIFwic3BhY2VfaWRcIl0sXG4gICAgW1wicG9zdGdyZXNcIiwgXCJlbmRwb2ludFwiXSxcbiAgICBbXCJwb3N0Z3Jlc1wiLCBcImRhdGFiYXNlXCJdLFxuICAgIFtcInBvc3RncmVzXCIsIFwiYnJhbmNoXCJdLFxuICBdIGFzIGNvbnN0KSB7XG4gICAgbGV0IHZhbHVlID0gcmVzb3VyY2U7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhdGgpIHZhbHVlID0gb2JqZWN0LmlzUmVjb3JkKHZhbHVlKSA/IHZhbHVlW3BhcnRdIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBhcnNlZCA9IHZhbHVlU2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSk7XG4gICAgaWYgKHBhcnNlZC5zdWNjZXNzKSByZXR1cm4gcGFyc2VkLmRhdGE7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIFdhbGsgYSBkb3Qtc2VwYXJhdGVkIHBhdGggdGhyb3VnaCBwYXJzZWQgYnVuZGxlIGRhdGEuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnVuZGxlUGF0aChkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiLlwiKS5maWx0ZXIoQm9vbGVhbik7XG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGxldCBjdXJyZW50OiB1bmtub3duID0gZGF0YTtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBhcnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGlmICghb2JqZWN0LmlzUmVjb3JkKGN1cnJlbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IG5leHQgPSBjdXJyZW50W3BhcnRzW2luZGV4XSFdO1xuICAgIGlmIChpbmRleCA9PT0gcGFydHMubGVuZ3RoIC0gMSkge1xuICAgICAgY29uc3QgZGlyZWN0ID0gdmFsdWVTY2hlbWEuc2FmZVBhcnNlKG5leHQpO1xuICAgICAgaWYgKGRpcmVjdC5zdWNjZXNzKSByZXR1cm4gZGlyZWN0LmRhdGE7XG4gICAgICBpZiAob2JqZWN0LmlzUmVjb3JkKG5leHQpKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZCA9IHZhbHVlU2NoZW1hLnNhZmVQYXJzZShuZXh0LnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5lc3RlZC5zdWNjZXNzID8gbmVzdGVkLmRhdGEgOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjdXJyZW50ID0gbmV4dDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVjdCBhIERhdGFicmlja3MgQXBwIHJ1bnRpbWUgZnJvbSBpdHMgcmVxdWlyZWQgbmFtZSwgaG9zdCwgYW5kIHBvcnQuXG4gKlxuICogYERCWF9UT09MU19EQVRBQlJJQ0tTX0FQUF9FTlZgIHRha2VzIHByZWNlZGVuY2Ugd2hlbiBpdCBjb250YWlucyBhIHJlY29nbml6ZWRcbiAqIGJvb2xlYW4gdmFsdWUuIFRoaXMgbGV0cyBsb2NhbCB0b29scyBlbXVsYXRlIHRoZSBkZXBsb3llZCBydW50aW1lIChgdHJ1ZWApIG9yXG4gKiBsZXRzIHVudXN1YWwgZGVwbG95ZWQgcHJvY2Vzc2VzIHJldGFpbiBsb2NhbCBjb25maWcgbG9va3VwIChgZmFsc2VgKS4gQW5cbiAqIGFic2VudCBvciB1bnJlY29nbml6ZWQgb3ZlcnJpZGUgZmFsbHMgYmFjayB0byBzdHJ1Y3R1cmFsIGRldGVjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YWJyaWNrc0FwcEVudihcbiAgc291cmNlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+ID0gcHJvY2Vzcy5lbnYsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGVudmlyb25tZW50VXRpbHMuaXNEYXRhYnJpY2tzQXBwRW52KHNvdXJjZSk7XG59XG5cbi8qKiBFeGFjdCwgdXBwZXJjYXNlLCBhbmQgdG9rZW5pemVkLXVwcGVyY2FzZSBuYW1lcyBmb3IgYSBodW1hbi1mcmllbmRseSBrZXkuICovXG5leHBvcnQgZnVuY3Rpb24gZW52aXJvbm1lbnRLZXlzKG5hbWU6IHN0cmluZyk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgY29uc3QgdHJpbW1lZCA9IG5hbWUudHJpbSgpO1xuICBpZiAoIXRyaW1tZWQpIHJldHVybiBbXTtcbiAgcmV0dXJuIG9iamVjdFxuICAgIC5zZXF1ZW5jZShcbiAgICAgIHRyaW1tZWQsXG4gICAgICB0cmltbWVkLnRvVXBwZXJDYXNlKCksXG4gICAgICBBcnJheS5mcm9tKHN0cmluZ1V0aWxzLnRva2VuaXplKHRyaW1tZWQpKS5qb2luKFwiX1wiKS50b1VwcGVyQ2FzZSgpLFxuICAgIClcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmRpc3RpbmN0KClcbiAgICAudG9BcnJheSgpO1xufVxuXG4vKiogQ2FuZGlkYXRlIG5hbWVzIGluIHNjb3BlLCBwcmVmaXgsIGFuZCBpbnB1dCBwcmVjZWRlbmNlIG9yZGVyLiAqL1xuZnVuY3Rpb24ga2V5cyhcbiAgaW5wdXQ6IENvbmZpZ0tleSxcbiAgb3B0aW9uczogUGljazxDb25maWdPcHRpb25zLCBcInNjb3BlXCIgfCBcInByZWZpeFwiPiA9IHt9LFxuKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICBjb25zdCBzY29wZXMgPSBvYmplY3RcbiAgICAuc2VxdWVuY2Uob3B0aW9ucy5zY29wZSA/PyBERUZBVUxUX1NDT1BFKVxuICAgIC5tYXAoc3RyaW5nVXRpbHMudHJpbVRvRW1wdHkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5kaXN0aW5jdCgpXG4gICAgLnRvQXJyYXkoKTtcbiAgY29uc3QgcHJlZml4ZXMgPVxuICAgIG9wdGlvbnMucHJlZml4ID09PSB1bmRlZmluZWRcbiAgICAgID8gW11cbiAgICAgIDogb2JqZWN0XG4gICAgICAgICAgLnNlcXVlbmNlKG9wdGlvbnMucHJlZml4KVxuICAgICAgICAgIC5tYXAoc3RyaW5nVXRpbHMudHJpbVRvRW1wdHkpXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgIC5kaXN0aW5jdCgpXG4gICAgICAgICAgLnRvQXJyYXkoKTtcbiAgcmV0dXJuIG9iamVjdFxuICAgIC5zZXF1ZW5jZShpbnB1dClcbiAgICAubWFwKHN0cmluZ1V0aWxzLnRyaW1Ub0VtcHR5KVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuZGlzdGluY3QoKVxuICAgIC5mbGF0TWFwKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHByZWZpeGVkID0gcHJlZml4ZXMubGVuZ3RoID4gMCA/IHByZWZpeGVzLm1hcCgocHJlZml4KSA9PiBgJHtwcmVmaXh9XyR7a2V5fWApIDogW2tleV07XG4gICAgICByZXR1cm4gW1xuICAgICAgICAuLi5zY29wZXMuZmxhdE1hcCgoc2NvcGUpID0+IHByZWZpeGVkLm1hcCgobmFtZSkgPT4gYCR7c2NvcGV9XyR7bmFtZX1gKSksXG4gICAgICAgIC4uLnByZWZpeGVkLFxuICAgICAgICBrZXksXG4gICAgICBdO1xuICAgIH0pXG4gICAgLmRpc3RpbmN0KClcbiAgICAudG9BcnJheSgpO1xufVxuXG4vKipcbiAqIEV2ZXJ5IHZhbHVlIHRoYXQgcmVzb2x2ZXMgZm9yIGBpbnB1dGAsIGluIHNvdXJjZS10aGVuLWtleSBwcmVjZWRlbmNlIG9yZGVyLFxuICogYXMgYSBMQVpZIHNlcXVlbmNlOiBub3RoaW5nIHBhc3QgdGhlIGZpcnN0IGNvbnN1bWVkIGVsZW1lbnQgaXMgcmVhZCwgc29cbiAqIGB2YWx1ZXMoa2V5KS5hdCgwKWAgbmV2ZXIgc3Bhd25zIHRoZSBEYXRhYnJpY2tzIENMSSB3aGVuIHRoZSBlbnZpcm9ubWVudFxuICogYWxyZWFkeSBhbnN3ZXJlZC5cbiAqXG4gKi9cbmZ1bmN0aW9uIHZhbHVlcyhpbnB1dDogQ29uZmlnS2V5LCBvcHRpb25zOiBDb25maWdPcHRpb25zID0ge30pOiBvYmplY3QuU2VxdWVuY2U8Q29uZmlnVmFsdWU+IHtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IGtleXMoaW5wdXQsIG9wdGlvbnMpO1xuICBjb25zdCBzb3VyY2VzID0gY29uZmlnU291cmNlcyhvcHRpb25zKTtcbiAgcmV0dXJuIG9iamVjdC5zZXF1ZW5jZSh7XG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEdlbmVyYXRvcjxDb25maWdWYWx1ZT4ge1xuICAgICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICBmb3IgKGNvbnN0IG1hcCBvZiByZWFkKHNvdXJjZSwgb3B0aW9ucykpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ01hcFZhbHVlKG1hcFtrZXldKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkgeWllbGQgeyBrZXksIHNvdXJjZSwgdmFsdWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gY29uZmlnU291cmNlcyhvcHRpb25zOiBDb25maWdPcHRpb25zKTogcmVhZG9ubHkgQ29uZmlnU291cmNlW10ge1xuICBjb25zdCBzb3VyY2VzOiBDb25maWdTb3VyY2VbXSA9IFtcbiAgICAuLi5vYmplY3Quc2VxdWVuY2U8Q29uZmlnU291cmNlPihvcHRpb25zLnNvdXJjZXMgPz8gREVGQVVMVF9TT1VSQ0VTKS5kaXN0aW5jdCgpLFxuICBdO1xuICBpZiAob3B0aW9ucy5kYXRhICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5zb3VyY2VzICE9PSB1bmRlZmluZWQgJiYgIXNvdXJjZXMuaW5jbHVkZXMoXCJjb25maWdcIikpIHtcbiAgICBzb3VyY2VzLnB1c2goXCJjb25maWdcIik7XG4gIH1cbiAgcmV0dXJuIHNvdXJjZXM7XG59XG5cbmZ1bmN0aW9uIGNvbmZpZ01hcFZhbHVlKHZhbHVlOiBDb25maWdNYXBWYWx1ZSB8IHVua25vd24pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB2YWx1ZSkge1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKGVudHJ5KTtcbiAgICAgIGlmIChyZXNvbHZlZCAhPT0gbnVsbCkgcmV0dXJuIHJlc29sdmVkO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gc3RyaW5nVXRpbHMudHJpbVRvTnVsbCh2YWx1ZSk7XG59XG5cbi8qKlxuICogVGhlIGZpcnN0IHZhbHVlIHRoYXQgcmVzb2x2ZXMgZm9yIGBpbnB1dGAsIG9yIGB1bmRlZmluZWRgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkb21haW4gPSBjb25maWcudGV4dChbXCJUVU5ORUxfUFVCTElDX0RPTUFJTlwiLCBcIlBVQkxJQ19ET01BSU5cIl0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGV4dChpbnB1dDogQ29uZmlnS2V5LCBvcHRpb25zOiBDb25maWdPcHRpb25zID0ge30pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWVzKGlucHV0LCBvcHRpb25zKS5hdCgwKT8udmFsdWU7XG59XG5cbi8qKiBSZXNvbHZlIGEgaHVtYW4tZnJpZW5kbHkgbmFtZSB0aHJvdWdoIHtAbGluayBlbnZpcm9ubWVudEtleXN9IGFuZCB7QGxpbmsgdGV4dH0uICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVZhbHVlKG5hbWU6IHN0cmluZywgb3B0aW9uczogQ29uZmlnT3B0aW9ucyA9IHt9KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHRleHQoZW52aXJvbm1lbnRLZXlzKG5hbWUpLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBUaGUgUFJJTUFSWSAoZnVsbHktc2NvcGVkKSBuYW1lIGZvciBgaW5wdXRgIC0gd2hhdCB0byBwcmludCBpbiBhIGxvZyBsaW5lIG9yIGFuXG4gKiBlcnJvciwgc28gdGhlIG1lc3NhZ2UgbmFtZXMgdGhlIHZhcmlhYmxlIGEgcmVhZGVyIHNob3VsZCBzZXQuIERvIG5vdCBpbmRleFxuICogYGtleXMoLi4uKVswXWAgZm9yIHRoaXMgaWYgYGlucHV0YCBtYXkgYmUgYSBiYXJlIHN0cmluZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogbG9nZ2VyLndhcm4oYCR7Y29uZmlnLm5hbWUoSldUX1NFQ1JFVF9FTlYpfSBpcyBub3Qgc2V0YCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lKFxuICBpbnB1dDogQ29uZmlnS2V5LFxuICBvcHRpb25zOiBQaWNrPENvbmZpZ09wdGlvbnMsIFwic2NvcGVcIiB8IFwicHJlZml4XCI+ID0ge30sXG4pOiBzdHJpbmcge1xuICByZXR1cm4ga2V5cyhpbnB1dCwgb3B0aW9ucylbMF0gPz8gXCJcIjtcbn1cblxuLyoqXG4gKiBTYWZlIGAuZW52LjxuYW1lPmAgc3VmZml4ZXMgZm9yIGEgTm9kZSBlbnZpcm9ubWVudCwgZXhhY3Qgc3BlbGxpbmcgZmlyc3QuXG4gKiBLbm93biBsb25nIGFuZCBzaG9ydCBuYW1lcyBhcmUgaW50ZXJjaGFuZ2VhYmxlOyB1bmtub3duIG5hbWVzIHBhc3MgdGhyb3VnaC5cbiAqL1xuZnVuY3Rpb24gbm9kZUVudk5hbWVzKG5vZGVFbnY6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG5hbWUgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKG5vZGVFbnYpPy50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIW5hbWUgfHwgIS9eW2EtejAtOV8tXSskLy50ZXN0KG5hbWUpKSByZXR1cm4gW107XG4gIGZvciAoY29uc3QgW2Nhbm9uaWNhbCwgYWx0ZXJuYXRpdmVzXSBvZiBPYmplY3QuZW50cmllcyhOT0RFX0VOVl9BTFRFUk5BVElWRVMpKSB7XG4gICAgY29uc3QgbmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdID0gYWx0ZXJuYXRpdmVzO1xuICAgIGlmIChuYW1lID09PSBjYW5vbmljYWwgfHwgbmFtZXMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIHJldHVybiBbLi4ub2JqZWN0LnNlcXVlbmNlKG5hbWUsIGNhbm9uaWNhbCwgYWx0ZXJuYXRpdmVzKS5kaXN0aW5jdCgpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtuYW1lXTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgc3RyaW5nOiBgY29uZmlndXJlZGAgd2hlbiBub24tZW1wdHksIGVsc2Uge0BsaW5rIHRleHR9LCBlbHNlIGB1bmRlZmluZWRgLlxuICpcbiAqIFRoZSBjb2VyY2lvbiBydWxlcyBhcmUgZGVsaWJlcmF0ZWx5IGxvb3NlIChgb25gIC8gYHllc2AgLyBgMWAgYXJlIGFsbFxuICogYHRydWVgKSBiZWNhdXNlIHZhbHVlcyBtYXkgY29tZSBmcm9tIGEgZmlsZSBhIGh1bWFuIHR5cGVkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25maWcuc3RyaW5nKG9wdGlvbnMuaG9zdCwgXCJTTVRQX0hPU1RcIik7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmcoXG4gIGNvbmZpZ3VyZWQ6IHVua25vd24sXG4gIGlucHV0OiBDb25maWdLZXksXG4gIG9wdGlvbnM/OiBDb25maWdPcHRpb25zLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoY29uZmlndXJlZCkgPz8gdGV4dChpbnB1dCwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGJvb2xlYW4gdGhyb3VnaCBgb2JqZWN0LnRvQm9vbGVhbmAuIGB1bmRlZmluZWRgIHdoZW4gbmVpdGhlciBzb3VyY2VcbiAqIGlzIGludGVycHJldGFibGUsIHNvIHRoZSBjYWxsZXIgcGlja3MgYSBkZWZhdWx0IHdpdGggYD8/YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvb2xlYW4oXG4gIGNvbmZpZ3VyZWQ6IHVua25vd24sXG4gIGlucHV0OiBDb25maWdLZXksXG4gIG9wdGlvbnM/OiBDb25maWdPcHRpb25zLFxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvYmplY3QudG9Cb29sZWFuKGNvbmZpZ3VyZWQpID8/IG9iamVjdC50b0Jvb2xlYW4odGV4dChpbnB1dCwgb3B0aW9ucykpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBwb3NpdGl2ZSBudW1iZXIgdGhhdCBtYXkgYmUgZnJhY3Rpb25hbCAoYSBzY29yZSB0aHJlc2hvbGQsIGEgcmF0aW8pLlxuICogVXNlIHtAbGluayBwb3NpdGl2ZUludH0gZm9yIGEgY291bnQsIHBvcnQsIG9yIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGl2ZU51bWJlcihcbiAgY29uZmlndXJlZDogdW5rbm93bixcbiAgaW5wdXQ6IENvbmZpZ0tleSxcbiAgZmFsbGJhY2s6IG51bWJlcixcbiAgb3B0aW9ucz86IENvbmZpZ09wdGlvbnMsXG4pOiBudW1iZXIge1xuICBjb25zdCBmcm9tQ29uZmlnID0gcG9zaXRpdmVOdW1iZXJWYWx1ZS5zYWZlUGFyc2UoY29uZmlndXJlZCk7XG4gIGlmIChmcm9tQ29uZmlnLnN1Y2Nlc3MpIHJldHVybiBmcm9tQ29uZmlnLmRhdGE7XG4gIGNvbnN0IGZyb21Tb3VyY2VzID0gcG9zaXRpdmVOdW1iZXJWYWx1ZS5zYWZlUGFyc2UodGV4dChpbnB1dCwgb3B0aW9ucykpO1xuICByZXR1cm4gZnJvbVNvdXJjZXMuc3VjY2VzcyA/IGZyb21Tb3VyY2VzLmRhdGEgOiBmYWxsYmFjaztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgcG9zaXRpdmUgaW50ZWdlciAoYSBwb3J0LCBhIHRpbWVvdXQsIGEgcGFnZSBzaXplKSwgZmxvb3JlZC4gQVxuICogbm9uLW51bWVyaWMgb3Igbm9uLXBvc2l0aXZlIHZhbHVlIGlzIHRyZWF0ZWQgYXMgQUJTRU5UIHJhdGhlciB0aGFuIGZhdGFsIC1cbiAqIHRoZXNlIGFyZSBjZWlsaW5ncyB3aGVyZSBhIHNhbmUgZGVmYXVsdCBiZWF0cyBhIGJvb3QgZmFpbHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvc2l0aXZlSW50KFxuICBjb25maWd1cmVkOiB1bmtub3duLFxuICBpbnB1dDogQ29uZmlnS2V5LFxuICBmYWxsYmFjazogbnVtYmVyLFxuICBvcHRpb25zPzogQ29uZmlnT3B0aW9ucyxcbik6IG51bWJlciB7XG4gIGNvbnN0IGZyb21Db25maWcgPSBwb3NpdGl2ZUludFZhbHVlLnNhZmVQYXJzZShjb25maWd1cmVkKTtcbiAgaWYgKGZyb21Db25maWcuc3VjY2VzcykgcmV0dXJuIGZyb21Db25maWcuZGF0YTtcbiAgY29uc3QgZnJvbVNvdXJjZXMgPSBwb3NpdGl2ZUludFZhbHVlLnNhZmVQYXJzZSh0ZXh0KGlucHV0LCBvcHRpb25zKSk7XG4gIHJldHVybiBmcm9tU291cmNlcy5zdWNjZXNzID8gZnJvbVNvdXJjZXMuZGF0YSA6IE1hdGguZmxvb3IoZmFsbGJhY2spO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBUQ1AgcG9ydCBiZXR3ZWVuIDEgYW5kIHtAbGluayBNQVhfVENQX1BPUlR9LiBJbnZhbGlkIGNvbmZpZ3VyZWQgb3JcbiAqIHNvdXJjZWQgdmFsdWVzIGZhbGwgYmFjayB0byB0aGUgY2FsbGVyJ3MgZGVmYXVsdCwgd2hpY2ggbWF5IGJlIGEgc2VudGluZWxcbiAqIHN1Y2ggYXMgYDBgIHdoZW4gdGhlIGNhbGxlciB1c2VzIG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvcnQoXG4gIGNvbmZpZ3VyZWQ6IHVua25vd24sXG4gIGlucHV0OiBDb25maWdLZXksXG4gIGZhbGxiYWNrOiBudW1iZXIsXG4gIG9wdGlvbnM/OiBDb25maWdPcHRpb25zLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgZnJvbUNvbmZpZyA9IHBvcnRWYWx1ZVNjaGVtYS5zYWZlUGFyc2UoY29uZmlndXJlZCk7XG4gIGlmIChmcm9tQ29uZmlnLnN1Y2Nlc3MpIHJldHVybiBmcm9tQ29uZmlnLmRhdGE7XG4gIGNvbnN0IGZyb21Tb3VyY2VzID0gcG9ydFZhbHVlU2NoZW1hLnNhZmVQYXJzZSh0ZXh0KGlucHV0LCBvcHRpb25zKSk7XG4gIHJldHVybiBmcm9tU291cmNlcy5zdWNjZXNzID8gZnJvbVNvdXJjZXMuZGF0YSA6IGZhbGxiYWNrO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBsaXN0IHRocm91Z2ggYHN0cmluZ1V0aWxzLnBhcnNlTGlzdGAsIHNvIGFuIGFycmF5IGZyb20gdHlwZWQgY29uZmlnIGFuZCBhXG4gKiBgXCJhLCBiIGNcImAgc3RyaW5nIG5vcm1hbGl6ZSBpZGVudGljYWxseS4gYFtdYCB3aGVuIG5laXRoZXIgc291cmNlIGhhcyBlbnRyaWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdChcbiAgY29uZmlndXJlZDogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsLFxuICBpbnB1dDogQ29uZmlnS2V5LFxuICB0cmFuc2Zvcm0/OiAoZW50cnk6IHN0cmluZykgPT4gc3RyaW5nLFxuICBvcHRpb25zPzogQ29uZmlnT3B0aW9ucyxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZnJvbUNvbmZpZyA9IHN0cmluZ1V0aWxzLnBhcnNlTGlzdChjb25maWd1cmVkLCB0cmFuc2Zvcm0pO1xuICByZXR1cm4gZnJvbUNvbmZpZy5sZW5ndGggPiAwXG4gICAgPyBmcm9tQ29uZmlnXG4gICAgOiBzdHJpbmdVdGlscy5wYXJzZUxpc3QodGV4dChpbnB1dCwgb3B0aW9ucyksIHRyYW5zZm9ybSk7XG59XG5cbi8qKlxuICogVGhlIERhdGFicmlja3MgYnVuZGxlIG91dHB1dCBmb3IgYGN3ZGAgLSBgZGF0YWJyaWNrcyBidW5kbGUgdmFsaWRhdGUgLS1vdXRwdXRcbiAqIGpzb25gIHJ1biBmcm9tIHRoZSBkaXJlY3RvcnkgaG9sZGluZyBgZGF0YWJyaWNrcy55bWxgLCB3aXRoIHRoZSBjb25maWcgZmlsZSdzXG4gKiBwYXRoLiBBIG5vbi16ZXJvIHZhbGlkYXRpb24gbWF5IHN0aWxsIHJldHVybiBwYXJ0aWFsIEpTT04gd2l0aCB1c2FibGUgQXBwXG4gKiBjb25maWcuIGB1bmRlZmluZWRgIHdoZW4gYnVuZGxlIHJlYWRzIGFyZSBkaXNhYmxlZCwgdGhlIHByb2Nlc3MgaXMgcHJvZHVjdGlvblxuICogb3IgYSBkZXBsb3llZCBBcHAgd2l0aG91dCBhbiBleHBsaWNpdCBvdmVycmlkZSwgdGhlcmUgaXMgbm8gYnVuZGxlLCBvciB0aGVcbiAqIENMSSBwcm9kdWNlcyBubyBKU09OLlxuICpcbiAqIFBhcnNlZCB2YWxpZGF0aW9uIG91dHB1dCBpcyBjYWNoZWQgYnkgYnVuZGxlIHBhdGggYW5kIERhdGFicmlja3MgcHJvZmlsZS5cbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidW5kbGVGaWxlKGN3ZD86IHN0cmluZyB8IG51bGwpOiBDb25maWdGaWxlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgb3ZlcnJpZGUgPSBvYmplY3QudG9Cb29sZWFuKHByb2Nlc3MuZW52W0NPTkZJR19CVU5ETEVfS0VZXSk7XG4gIGlmIChvdmVycmlkZSA9PT0gZmFsc2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICBvdmVycmlkZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WPy50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gXCJwcm9kdWN0aW9uXCIgfHwgaXNEYXRhYnJpY2tzQXBwRW52KCkpXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlV29ya2luZ0RpcmVjdG9yeShjd2QpO1xuICByZXR1cm4gbG9hZEJ1bmRsZUZpbGUocmVzb2x2ZWQsIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwocHJvY2Vzcy5lbnYuREFUQUJSSUNLU19DT05GSUdfUFJPRklMRSkpO1xufVxuXG4vKiogVGhlIHBhcnNlZCBgYXBwLnlhbWxgIC8gYGFwcC55bWxgIGZvciBgY3dkYCwgd2hlbiBsb2NhbCBBcHAgY29uZmlnIHJlYWRzIGFyZSBlbmFibGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcEZpbGUoY3dkPzogc3RyaW5nIHwgbnVsbCk6IENvbmZpZ0ZpbGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBlbmFibGVkID0gb2JqZWN0LnRvQm9vbGVhbihwcm9jZXNzLmVudltDT05GSUdfQVBQX0tFWV0pID8/ICFpc0RhdGFicmlja3NBcHBFbnYoKTtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gbG9hZEFwcEZpbGUocmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoY3dkKSk7XG59XG5cbi8qKiBUaGUgc2luZ2xlIGJ1bmRsZSBBcHAncyByZXNvbHZlZCBlbnZpcm9ubWVudCwgd2hlbiBhdmFpbGFibGUuICovXG5mdW5jdGlvbiBidW5kbGVFbnZpcm9ubWVudChvcHRpb25zOiBDb25maWdPcHRpb25zKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRhdGEgPSBzb3VyY2VEYXRhKG9wdGlvbnMuYnVuZGxlRGF0YSkgPz8gYnVuZGxlRmlsZShvcHRpb25zLmN3ZCk/LmRhdGE7XG4gIHJldHVybiBkYXRhID8gZmxhdHRlbkJ1bmRsZUVudihkYXRhKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXBwRW52aXJvbm1lbnQob3B0aW9uczogQ29uZmlnT3B0aW9ucyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQge1xuICBjb25zdCBkYXRhID0gc291cmNlRGF0YShvcHRpb25zLmFwcERhdGEpID8/IGFwcEZpbGUob3B0aW9ucy5jd2QpPy5kYXRhO1xuICByZXR1cm4gZGF0YSA/IGZsYXR0ZW5BcHBFbnYoZGF0YSkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNvdXJjZURhdGEoXG4gIHNvdXJjZTogQ29uZmlnRmlsZSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKFwicGF0aFwiIGluIHNvdXJjZSAmJiB0eXBlb2Ygc291cmNlLnBhdGggPT09IFwic3RyaW5nXCIgJiYgb2JqZWN0LmlzUmVjb3JkKHNvdXJjZS5kYXRhKSkge1xuICAgIHJldHVybiBzb3VyY2UuZGF0YTtcbiAgfVxuICByZXR1cm4gc291cmNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKiogUGFyc2VkIGAuZW52YCBmb3IgYGN3ZGAsIG9yIGB7fWA7IHBhcnNlZCBmaWxlIGRhdGEgaXMgY2FjaGVkIGJ5IHBhdGguICovXG5mdW5jdGlvbiBkb3RlbnYoY3dkPzogc3RyaW5nIHwgbnVsbCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBlbmFibGVkID0gb2JqZWN0LnRvQm9vbGVhbihwcm9jZXNzLmVudltDT05GSUdfRE9URU5WX0tFWV0pID8/ICFpc0RhdGFicmlja3NBcHBFbnYoKTtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm4ge307XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoY3dkKTtcbiAgcmV0dXJuIGxvYWREb3RlbnYocmVzb2x2ZWQsIG5vZGVFbnZOYW1lcyhwcm9jZXNzLmVudi5OT0RFX0VOVikpO1xufVxuXG4vKiogTWFwcyBmb3Igb25lIHNvdXJjZSBpbiBwcmVjZWRlbmNlIG9yZGVyLiAqL1xuZnVuY3Rpb24gcmVhZChcbiAgc291cmNlOiBDb25maWdTb3VyY2UsXG4gIG9wdGlvbnM6IENvbmZpZ09wdGlvbnMsXG4pOiBvYmplY3QuU2VxdWVuY2U8UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiB7XG4gIHJldHVybiBvYmplY3Quc2VxdWVuY2Uoe1xuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBHZW5lcmF0b3I8UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiB7XG4gICAgICBzd2l0Y2ggKHNvdXJjZSkge1xuICAgICAgICBjYXNlIFwiY29uZmlnXCI6IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICB5aWVsZCogZGF0YTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgeWllbGQgZGF0YSBhcyBDb25maWdEYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiZW52XCI6XG4gICAgICAgICAgeWllbGQgcHJvY2Vzcy5lbnY7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkb3RlbnZcIjpcbiAgICAgICAgICB5aWVsZCBkb3RlbnYob3B0aW9ucy5jd2QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYnVuZGxlXCI6IHtcbiAgICAgICAgICBjb25zdCBlbnZpcm9ubWVudCA9IGJ1bmRsZUVudmlyb25tZW50KG9wdGlvbnMpO1xuICAgICAgICAgIGlmIChlbnZpcm9ubWVudCkgeWllbGQgZW52aXJvbm1lbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImFwcFwiOiB7XG4gICAgICAgICAgY29uc3QgZW52aXJvbm1lbnQgPSBhcHBFbnZpcm9ubWVudChvcHRpb25zKTtcbiAgICAgICAgICBpZiAoZW52aXJvbm1lbnQpIHlpZWxkIGVudmlyb25tZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5rbm93biBjb25maWcgc291cmNlOiAke3NvdXJjZX1gKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBMb2NhdGUgYG5hbWVzYCBmcm9tIGBjd2RgIG91dHdhcmQuIGBjd2RgIGl0c2VsZiBpcyBjaGVja2VkIGJlZm9yZSB0aGVcbiAqIGRpc2NvdmVyZWQgcHJvamVjdCByb290cyBzbyBhIHBhY2thZ2UtbG9jYWwgZmlsZSB3aW5zIG92ZXIgdGhlIHdvcmtzcGFjZSdzLlxuICovXG5mdW5jdGlvbiBmaW5kQ29uZmlnRmlsZShjd2Q6IHN0cmluZywgbmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3RhcnQgPSByZXNvbHZlKGN3ZCk7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtzdGFydCwgLi4ubmFtZXNdKTtcbiAgaWYgKGNvbmZpZ0ZpbGVDYWNoZS5oYXMoa2V5KSkgcmV0dXJuIGNvbmZpZ0ZpbGVDYWNoZS5nZXQoa2V5KTtcbiAgY29uc3Qgcm9vdCA9IHJlc29sdmVQcm9qZWN0Um9vdChzdGFydCk7XG4gIGNvbnN0IHBhdGhGcm9tUm9vdCA9IHJvb3QgPyByZWxhdGl2ZShyb290LCBzdGFydCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGJvdW5kYXJ5ID1cbiAgICByb290ICYmXG4gICAgcGF0aEZyb21Sb290ICE9PSB1bmRlZmluZWQgJiZcbiAgICAhaXNBYnNvbHV0ZShwYXRoRnJvbVJvb3QpICYmXG4gICAgcGF0aEZyb21Sb290ICE9PSBcIi4uXCIgJiZcbiAgICAhcGF0aEZyb21Sb290LnN0YXJ0c1dpdGgoYC4uJHtzZXB9YClcbiAgICAgID8gcm9vdFxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGRpciA9IHN0YXJ0OyA7IGRpciA9IGRpcm5hbWUoZGlyKSkge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgY29uc3QgcGF0aCA9IHJlc29sdmUoZGlyLCBuYW1lKTtcbiAgICAgIGlmIChzdGF0U3luYyhwYXRoKT8uaXNGaWxlKCkpIHtcbiAgICAgICAgY29uZmlnRmlsZUNhY2hlLnNldChrZXksIHBhdGgpO1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGJvdW5kYXJ5ID09PSB1bmRlZmluZWQgfHwgZGlyID09PSBib3VuZGFyeSkgYnJlYWs7XG4gIH1cbiAgY29uZmlnRmlsZUNhY2hlLnNldChrZXksIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGxvYWREb3RlbnYoXG4gIGN3ZDogc3RyaW5nLFxuICBlbnZpcm9ubWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IG5hbWVzID0gWy4uLmVudmlyb25tZW50cy5tYXAoKG5hbWUpID0+IGAke0RPVEVOVl9GSUxFX05BTUV9LiR7bmFtZX1gKSwgRE9URU5WX0ZJTEVfTkFNRV07XG4gIGNvbnN0IHBhdGggPSBmaW5kQ29uZmlnRmlsZShjd2QsIG5hbWVzKTtcbiAgaWYgKCFwYXRoKSByZXR1cm4ge307XG4gIHJldHVybiAoXG4gICAgY2FjaGVkUmVjb3JkKEpTT04uc3RyaW5naWZ5KFtcImRvdGVudlwiLCBwYXRoXSksICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBwYXJzZUVudihyZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGY4XCIpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIud2FybihcImZhaWxlZCB0byByZWFkIGRvdGVudiBmaWxlXCIsIHsgcGF0aCB9KTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgIH0pID8/IHt9XG4gICk7XG59XG5cbmZ1bmN0aW9uIGxvYWRCdW5kbGVGaWxlKGN3ZDogc3RyaW5nLCBwcm9maWxlOiBzdHJpbmcgfCBudWxsKTogQ29uZmlnRmlsZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhdGggPSBmaW5kQ29uZmlnRmlsZShjd2QsIEJVTkRMRV9GSUxFX05BTUVTKTtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBkYXRhID0gY2FjaGVkUmVjb3JkKEpTT04uc3RyaW5naWZ5KFtcImJ1bmRsZVwiLCBwYXRoLCBwcm9maWxlXSksICgpID0+IHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgXCJidW5kbGVcIixcbiAgICAgIFwidmFsaWRhdGVcIixcbiAgICAgIFwiLS1vdXRwdXRcIixcbiAgICAgIFwianNvblwiLFxuICAgICAgLi4uKHByb2ZpbGUgPT09IG51bGwgPyBbXSA6IFtcIi0tcHJvZmlsZVwiLCBwcm9maWxlXSksXG4gICAgXTtcbiAgICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXCJkYXRhYnJpY2tzXCIsIGFyZ3MsIHtcbiAgICAgIGN3ZDogcmVzb2x2ZShwYXRoLCBcIi4uXCIpLFxuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgIH0pO1xuICAgIGNvbnN0IG91dHB1dCA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwocmVzdWx0LnN0ZG91dCk7XG4gICAgY29uc3QgZXJyb3IgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKHJlc3VsdC5zdGRlcnIpO1xuICAgIGlmIChvdXRwdXQgPT09IG51bGwpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcImJ1bmRsZSB2YWxpZGF0ZSBwcm9kdWNlZCBubyBKU09OXCIsIHsgcGF0aCwgc3RhdHVzOiByZXN1bHQuc3RhdHVzLCBlcnJvciB9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZCA9IGpzb24ucGFyc2VSZWNvcmQob3V0cHV0KTtcbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJmYWlsZWQgdG8gcGFyc2UgYnVuZGxlIHZhbGlkYXRlIG91dHB1dFwiLCB7IHBhdGgsIHN0YXR1czogcmVzdWx0LnN0YXR1cyB9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJ1c2luZyBwYXJ0aWFsIGJ1bmRsZSBvdXRwdXRcIiwgeyBwYXRoLCBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsIGVycm9yIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9KTtcbiAgcmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHsgcGF0aCwgZGF0YSB9O1xufVxuXG5mdW5jdGlvbiBsb2FkQXBwRmlsZShjd2Q6IHN0cmluZyk6IENvbmZpZ0ZpbGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXRoID0gZmluZENvbmZpZ0ZpbGUoY3dkLCBBUFBfRklMRV9OQU1FUyk7XG4gIGlmICghcGF0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZGF0YSA9IGNhY2hlZFJlY29yZChKU09OLnN0cmluZ2lmeShbXCJhcHBcIiwgcGF0aF0pLCAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlWWFtbChyZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGY4XCIpKTtcbiAgICAgIHJldHVybiBvYmplY3QuaXNSZWNvcmQocGFyc2VkKSA/IHBhcnNlZCA6IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiZmFpbGVkIHRvIHBhcnNlIGFwcCB5YW1sXCIsIHsgcGF0aCB9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHsgcGF0aCwgZGF0YSB9O1xufVxuIl19
|