@mnaoumov/typescript-dev-toolkit 4.0.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundlers/esbuild-impl/svelte-preprocessor/package.json +6 -0
- package/dist/lib/cjs/bulk-concurrency.cjs +49 -0
- package/dist/lib/cjs/bulk-concurrency.d.cts +14 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +4 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +3 -3
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-preprocessor.cjs +152 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-preprocessor.d.cts +95 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +4 -3
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +1 -1
- package/dist/lib/cjs/docs-site/docs-links.cjs +3 -2
- package/dist/lib/cjs/docs-site/og-images.cjs +3 -2
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/library-build.cjs +8 -8
- package/dist/lib/cjs/linters/eslint-config.cjs +7 -5
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +5 -1
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +5 -1
- package/dist/lib/cjs/linters/eslint-rules/index.cjs +7 -1
- package/dist/lib/cjs/linters/eslint-rules/index.d.cts +2 -0
- package/dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.cjs +144 -0
- package/dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.d.cts +11 -0
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +5 -5
- package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +80 -3
- package/dist/lib/cjs/linters/eslint-rules/readonly-member-arrays.cjs +130 -0
- package/dist/lib/cjs/linters/eslint-rules/readonly-member-arrays.d.cts +6 -0
- package/dist/lib/cjs/linters/markdownlint.cjs +8 -2
- package/dist/lib/cjs/linters/over-exposure.cjs +14 -3
- package/dist/lib/cjs/linters/over-exposure.d.cts +3 -1
- package/dist/lib/cjs/nano-staged-config.cjs +24 -3
- package/dist/lib/cjs/nano-staged-config.d.cts +4 -0
- package/dist/lib/cjs/released-issues.cjs +4 -4
- package/dist/lib/cjs/test-runners/auto.cjs +1 -1
- package/dist/lib/cjs/test-runners/auto.d.cts +5 -0
- package/dist/lib/cjs/test-runners/forwarded-arguments.cjs +50 -0
- package/dist/lib/cjs/test-runners/forwarded-arguments.d.cts +49 -0
- package/dist/lib/cjs/test-runners/index.cjs +4 -1
- package/dist/lib/cjs/test-runners/index.d.cts +1 -0
- package/dist/lib/cjs/test-runners/jest.cjs +16 -3
- package/dist/lib/cjs/test-runners/jest.d.cts +5 -0
- package/dist/lib/cjs/test-runners/vitest.cjs +111 -5
- package/dist/lib/cjs/test-runners/vitest.d.cts +5 -0
- package/dist/lib/cjs/upstream-sync.cjs +3 -3
- package/dist/lib/esm/bulk-concurrency.d.mts +14 -0
- package/dist/lib/esm/bulk-concurrency.mjs +15 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +3 -1
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +3 -3
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-preprocessor.d.mts +95 -0
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-preprocessor.mjs +126 -0
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +4 -3
- package/dist/lib/esm/docs-site/docs-links.mjs +3 -2
- package/dist/lib/esm/docs-site/og-images.mjs +3 -2
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/library-build.mjs +8 -8
- package/dist/lib/esm/linters/eslint-config.mjs +7 -5
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +5 -1
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +5 -1
- package/dist/lib/esm/linters/eslint-rules/index.d.mts +2 -0
- package/dist/lib/esm/linters/eslint-rules/index.mjs +5 -1
- package/dist/lib/esm/linters/eslint-rules/no-keyword-identifiers.d.mts +11 -0
- package/dist/lib/esm/linters/eslint-rules/no-keyword-identifiers.mjs +120 -0
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +5 -5
- package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +80 -3
- package/dist/lib/esm/linters/eslint-rules/readonly-member-arrays.d.mts +6 -0
- package/dist/lib/esm/linters/eslint-rules/readonly-member-arrays.mjs +106 -0
- package/dist/lib/esm/linters/markdownlint.mjs +8 -2
- package/dist/lib/esm/linters/over-exposure.d.mts +3 -1
- package/dist/lib/esm/linters/over-exposure.mjs +16 -3
- package/dist/lib/esm/nano-staged-config.d.mts +4 -0
- package/dist/lib/esm/nano-staged-config.mjs +24 -3
- package/dist/lib/esm/released-issues.mjs +4 -4
- package/dist/lib/esm/test-runners/auto.d.mts +5 -0
- package/dist/lib/esm/test-runners/auto.mjs +1 -1
- package/dist/lib/esm/test-runners/forwarded-arguments.d.mts +49 -0
- package/dist/lib/esm/test-runners/forwarded-arguments.mjs +26 -0
- package/dist/lib/esm/test-runners/index.d.mts +1 -0
- package/dist/lib/esm/test-runners/index.mjs +3 -1
- package/dist/lib/esm/test-runners/jest.d.mts +5 -0
- package/dist/lib/esm/test-runners/jest.mjs +16 -3
- package/dist/lib/esm/test-runners/vitest.d.mts +5 -0
- package/dist/lib/esm/test-runners/vitest.mjs +105 -6
- package/dist/lib/esm/upstream-sync.mjs +3 -3
- package/linters/eslint-rules/no-keyword-identifiers/package.json +6 -0
- package/linters/eslint-rules/readonly-member-arrays/package.json +6 -0
- package/package.json +5 -2
- package/test-runners/forwarded-arguments/package.json +6 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"main": "../../../dist/lib/cjs/bundlers/esbuild-impl/svelte-preprocessor.cjs",
|
|
3
|
+
"module": "../../../dist/lib/esm/bundlers/esbuild-impl/svelte-preprocessor.mjs",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"types": "../../../dist/lib/cjs/bundlers/esbuild-impl/svelte-preprocessor.d.cts"
|
|
6
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
var __create = Object.create;
|
|
8
|
+
var __defProp = Object.defineProperty;
|
|
9
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
10
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
11
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
12
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
13
|
+
var __export = (target, all) => {
|
|
14
|
+
for (var name in all)
|
|
15
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
16
|
+
};
|
|
17
|
+
var __copyProps = (to, from, except, desc) => {
|
|
18
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
19
|
+
for (let key of __getOwnPropNames(from))
|
|
20
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
21
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
22
|
+
}
|
|
23
|
+
return to;
|
|
24
|
+
};
|
|
25
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
26
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
27
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
28
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
29
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
30
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
31
|
+
mod
|
|
32
|
+
));
|
|
33
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
34
|
+
var bulk_concurrency_exports = {};
|
|
35
|
+
__export(bulk_concurrency_exports, {
|
|
36
|
+
getBulkConcurrency: () => getBulkConcurrency
|
|
37
|
+
});
|
|
38
|
+
module.exports = __toCommonJS(bulk_concurrency_exports);
|
|
39
|
+
var import_node_process = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('node:process')), 1);
|
|
40
|
+
function getBulkConcurrency(defaultConcurrency) {
|
|
41
|
+
const budget = import_node_process.default.env["BULK_CORES"]?.trim() ?? "";
|
|
42
|
+
const cores = Number(budget);
|
|
43
|
+
return /^[1-9]\d*$/.test(budget) && Number.isSafeInteger(cores) ? Math.min(defaultConcurrency, cores) : defaultConcurrency;
|
|
44
|
+
}
|
|
45
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
46
|
+
0 && (module.exports = {
|
|
47
|
+
getBulkConcurrency
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1bGstY29uY3VycmVuY3kudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDYXBzIHRvb2wgY29uY3VycmVuY3kgdG8gdGhlIGJ1bGsgd29ya2VyJ3MgcHJvY2Vzc29yIGJ1ZGdldC5cbiAqL1xuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG4vKipcbiAqIENhcHMgYSB0b29sJ3Mgb3JkaW5hcnkgY29uY3VycmVuY3kgd2hlbiBgQlVMS19DT1JFU2AgbmFtZXMgYSBwb3NpdGl2ZSBzYWZlIGludGVnZXIuXG4gKiBNaXNzaW5nIG9yIG1hbGZvcm1lZCBidWRnZXRzIGxlYXZlIHRoZSBvcmRpbmFyeSBkZWZhdWx0IHVuY2hhbmdlZC4gUmVhZHMgdGhlIGVudmlyb25tZW50IG9uIGVhY2ggY2FsbC5cbiAqXG4gKiBAcGFyYW0gZGVmYXVsdENvbmN1cnJlbmN5IC0gVGhlIHRvb2wncyBvcmRpbmFyeSBwb3NpdGl2ZSBjb25jdXJyZW5jeSBsaW1pdC5cbiAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IGNhcHBlZCBieSB0aGUgdmFsaWQgYnVsayBidWRnZXQsIG9yIHRoZSB1bmNoYW5nZWQgZGVmYXVsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1bGtDb25jdXJyZW5jeShkZWZhdWx0Q29uY3VycmVuY3k6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGJ1ZGdldCA9IHByb2Nlc3MuZW52WydCVUxLX0NPUkVTJ10/LnRyaW0oKSA/PyAnJztcbiAgY29uc3QgY29yZXMgPSBOdW1iZXIoYnVkZ2V0KTtcbiAgcmV0dXJuIC9eWzEtOV1cXGQqJC8udGVzdChidWRnZXQpICYmIE51bWJlci5pc1NhZmVJbnRlZ2VyKGNvcmVzKVxuICAgID8gTWF0aC5taW4oZGVmYXVsdENvbmN1cnJlbmN5LCBjb3JlcylcbiAgICA6IGRlZmF1bHRDb25jdXJyZW5jeTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSwwQkFBb0I7QUFTYixTQUFTLG1CQUFtQixvQkFBb0M7QUFDckUsUUFBTSxTQUFTLG9CQUFBQSxRQUFRLElBQUksWUFBWSxHQUFHLEtBQUssS0FBSztBQUNwRCxRQUFNLFFBQVEsT0FBTyxNQUFNO0FBQzNCLFNBQU8sYUFBYSxLQUFLLE1BQU0sS0FBSyxPQUFPLGNBQWMsS0FBSyxJQUMxRCxLQUFLLElBQUksb0JBQW9CLEtBQUssSUFDbEM7QUFDTjsiLAogICJuYW1lcyI6IFsicHJvY2VzcyJdCn0K
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Caps tool concurrency to the bulk worker's processor budget.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Caps a tool's ordinary concurrency when `BULK_CORES` names a positive safe integer.
|
|
9
|
+
* Missing or malformed budgets leave the ordinary default unchanged. Reads the environment on each call.
|
|
10
|
+
*
|
|
11
|
+
* @param defaultConcurrency - The tool's ordinary positive concurrency limit.
|
|
12
|
+
* @returns The default capped by the valid bulk budget, or the unchanged default.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getBulkConcurrency(defaultConcurrency: number): number;
|
|
@@ -37,6 +37,7 @@ __export(esbuild_impl_exports, {
|
|
|
37
37
|
"custom-esbuild-options-plugin": () => custom_esbuild_options_plugin,
|
|
38
38
|
"fix-esm-plugin": () => fix_esm_plugin,
|
|
39
39
|
"preprocess-plugin": () => preprocess_plugin,
|
|
40
|
+
"svelte-preprocessor": () => svelte_preprocessor,
|
|
40
41
|
"svelte-wrapper-plugin": () => svelte_wrapper_plugin
|
|
41
42
|
});
|
|
42
43
|
module.exports = __toCommonJS(esbuild_impl_exports);
|
|
@@ -44,6 +45,7 @@ var change_extension_plugin = __toESM(((module) => module && module.__esModule &
|
|
|
44
45
|
var custom_esbuild_options_plugin = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./custom-esbuild-options-plugin.cjs')), 1);
|
|
45
46
|
var fix_esm_plugin = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./fix-esm-plugin.cjs')), 1);
|
|
46
47
|
var preprocess_plugin = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./preprocess-plugin.cjs')), 1);
|
|
48
|
+
var svelte_preprocessor = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./svelte-preprocessor.cjs')), 1);
|
|
47
49
|
var svelte_wrapper_plugin = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./svelte-wrapper-plugin.cjs')), 1);
|
|
48
50
|
// Annotate the CommonJS export names for ESM import in node:
|
|
49
51
|
0 && (module.exports = {
|
|
@@ -51,6 +53,7 @@ var svelte_wrapper_plugin = __toESM(((module) => module && module.__esModule &&
|
|
|
51
53
|
"custom-esbuild-options-plugin": null,
|
|
52
54
|
"fix-esm-plugin": null,
|
|
53
55
|
"preprocess-plugin": null,
|
|
56
|
+
"svelte-preprocessor": null,
|
|
54
57
|
"svelte-wrapper-plugin": null
|
|
55
58
|
});
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdjaGFuZ2UtZXh0ZW5zaW9uLXBsdWdpbicgZnJvbSAnLi9jaGFuZ2UtZXh0ZW5zaW9uLXBsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAnY3VzdG9tLWVzYnVpbGQtb3B0aW9ucy1wbHVnaW4nIGZyb20gJy4vY3VzdG9tLWVzYnVpbGQtb3B0aW9ucy1wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ2ZpeC1lc20tcGx1Z2luJyBmcm9tICcuL2ZpeC1lc20tcGx1Z2luLnRzJztcbmV4cG9ydCAqIGFzICdwcmVwcm9jZXNzLXBsdWdpbicgZnJvbSAnLi9wcmVwcm9jZXNzLXBsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAnc3ZlbHRlLXByZXByb2Nlc3NvcicgZnJvbSAnLi9zdmVsdGUtcHJlcHJvY2Vzc29yLnRzJztcbmV4cG9ydCAqIGFzICdzdmVsdGUtd3JhcHBlci1wbHVnaW4nIGZyb20gJy4vc3ZlbHRlLXdyYXBwZXItcGx1Z2luLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQSxtQ0FBQUE7QUFBQSxFQUFBLHVDQUFBQztBQUFBLEVBQUEsd0JBQUFDO0FBQUEsRUFBQSwyQkFBQUM7QUFBQSxFQUFBLDZCQUFBQztBQUFBLEVBQUEsK0JBQUFDO0FBQUE7QUFBQTtBQUVBLElBQUFMLDBCQUEyQztBQUMzQyxJQUFBQyxnQ0FBaUQ7QUFDakQsSUFBQUMsaUJBQWtDO0FBQ2xDLElBQUFDLG9CQUFxQztBQUNyQyxJQUFBQyxzQkFBdUM7QUFDdkMsSUFBQUMsd0JBQXlDOyIsCiAgIm5hbWVzIjogWyJjaGFuZ2UtZXh0ZW5zaW9uLXBsdWdpbiIsICJjdXN0b20tZXNidWlsZC1vcHRpb25zLXBsdWdpbiIsICJmaXgtZXNtLXBsdWdpbiIsICJwcmVwcm9jZXNzLXBsdWdpbiIsICJzdmVsdGUtcHJlcHJvY2Vzc29yIiwgInN2ZWx0ZS13cmFwcGVyLXBsdWdpbiJdCn0K
|
|
@@ -3,4 +3,5 @@ export * as 'change-extension-plugin' from './change-extension-plugin.cjs';
|
|
|
3
3
|
export * as 'custom-esbuild-options-plugin' from './custom-esbuild-options-plugin.cjs';
|
|
4
4
|
export * as 'fix-esm-plugin' from './fix-esm-plugin.cjs';
|
|
5
5
|
export * as 'preprocess-plugin' from './preprocess-plugin.cjs';
|
|
6
|
+
export * as 'svelte-preprocessor' from './svelte-preprocessor.cjs';
|
|
6
7
|
export * as 'svelte-wrapper-plugin' from './svelte-wrapper-plugin.cjs';
|
|
@@ -255,8 +255,8 @@ function initCjs() {
|
|
|
255
255
|
globalThisRecord["__name"] ??= keepName;
|
|
256
256
|
globalThisRecord["__extractDefault"] ??= extractDefault;
|
|
257
257
|
ensureBrowserProcess();
|
|
258
|
-
function extractDefault(
|
|
259
|
-
return
|
|
258
|
+
function extractDefault($module) {
|
|
259
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
262
|
function initEsm() {
|
|
@@ -310,4 +310,4 @@ ${calls.join("\n")}
|
|
|
310
310
|
makePreprocessBanner,
|
|
311
311
|
preprocessPlugin
|
|
312
312
|
});
|
|
313
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjdXN0b20gZXNidWlsZCBwbHVnaW4gdGhhdCBwcmVwcm9jZXNzZXMgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBmaWxlcyBmb3IgYW55IGJ1aWxkIHRhcmdldC5cbiAqXG4gKiBAcmVtYXJrc1xuICogV2UgY2Fubm90IHVzZSBgLmAgaW5zdGVhZCBvZiBgKGRvdClgIGluIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiBiZWNhdXNlIHRoZSBmaWxlIGl0c2VsZiBpcyBwcmVwcm9jZXNzZWQgd2l0aCB0aGUgc2FtZSBydWxlLlxuICpcbiAqIGBpbml0Q2pzYCwgYGluaXRFc21gIGFuZCB0aGUgc2hpbXMgdGhleSBjYWxsIGFyZSBzdHJpbmdpZmllZCB3aXRoIGBTdHJpbmcoZm4pYCBhbmQgaW5qZWN0ZWQgaW50byBldmVyeVxuICogYnVpbHQgYnVuZGxlIGFzIGFuIGVzYnVpbGQgYmFubmVyLCBzbyB0aGV5IG11c3QgYmUgcmVhY2hhYmxlIGZyb20gb25lIGFub3RoZXIgYnkgQkFSRSBpZGVudGlmaWVyLiBBbiB1bmJ1bmRsZWRcbiAqIGJ1aWxkIChgYnVuZGxlOiBmYWxzZWAsIG9uZSBvdXRwdXQgcGVyIHNvdXJjZSkgZ2V0cyBubyBiYW5uZXI6IGVhY2ggZW1pdHRlZCBtb2R1bGUgZ2V0cyBhIHByZWFtYmxlIGhvbGRpbmcgb25seSB0aGVcbiAqIHNoaW1zIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIGEgbW9kdWxlIHRoYXQgbmVlZHMgbm9uZSBnZXRzIG5vdGhpbmcuIFRoYXQgaXNcbiAqIHdoeSB0aGV5IGFsbCBsaXZlIGluIHRoaXMgbW9kdWxlOiBlc2J1aWxkIGNvbXBpbGVzIGEgY3Jvc3MtbW9kdWxlIGNhbGwgdG8gYCgwLCBpbXBvcnRfbW9kdWxlLmZuKSjigKYpYCxcbiAqIHdoaWNoIHdvdWxkIG5hbWUgYSBiaW5kaW5nIHRoZSBlbWl0dGVkIGJ1bmRsZSBkb2VzIG5vdCBoYXZlLiBTYW1lLW1vZHVsZSByZWZlcmVuY2VzIHN0YXkgYmFyZSwgYW5kXG4gKiB7QGxpbmsgbWFrZVByZXByb2Nlc3NCYW5uZXJ9IHNlcmlhbGl6ZXMgdGhlIHNoaW1zIGFsb25nc2lkZSB0aGUgYGluaXRgIGZ1bmN0aW9uIHNvIHRoZXkgYXJlIGluIHNjb3BlIHRoZXJlLiBBIHNoaW1cbiAqIHRoYXQgaXMgbm90IHNlcmlhbGl6ZWQgc2lsZW50bHkgZGVncmFkZXMgdG8gd2hhdGV2ZXIgdGhlIGNvbnN1bWVyJ3MgZ2xvYmFsIHNjb3BlIGhvbGRzIHVuZGVyIHRoYXQgbmFtZSDigJQgd2hpY2hcbiAqIGlzIGhvdyBgX19uYW1lYCB1c2VkIHRvIGVuZCB1cCBob2xkaW5nIGB3aW5kb3cubmFtZWAuXG4gKlxuICogQSBjYWxsZXIgdGhhdCBuZWVkcyBtb3JlIGluIHRoZSBiYW5uZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gYnVpbGRlciBwYXRjaGVzIGByZXF1aXJlYCkgaGFuZHMgaW5cbiAqIHtAbGluayBQcmVwcm9jZXNzUGx1Z2luT3B0aW9ucy5hZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uc30uIEVhY2ggb25lIGlzIHNlcmlhbGl6ZWQgYXMgaXRzIE9XTiBpbW1lZGlhdGVseVxuICogaW52b2tlZCBmdW5jdGlvbiBhZnRlciB0aGUgc2hhcmVkIHNjb3BlLCBzbyBpdCBtdXN0IGJlIHNlbGYtY29udGFpbmVkOiBpdCBjYW5ub3Qgc2VlIHRoZSBzaGltcywgYW5kIGNhbGxpbmcgb25lXG4gKiBmcm9tIGFub3RoZXIgbW9kdWxlIHdvdWxkIGhpdCBleGFjdGx5IHRoZSBjcm9zcy1tb2R1bGUgdHJhcCBhYm92ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHR5cGUge1xuICBPdXRwdXRGaWxlLFxuICBQbHVnaW5cbn0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgdHlwZSB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgdHlwZSB7XG4gIElkZW50aWZpZXIsXG4gIE5vZGVcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7XG4gIEZ1bmN0aW9uSGFuZGxpbmdNb2RlLFxuICB0b0pzb25cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBtYWtlVmFsaWRWYXJpYWJsZU5hbWUsXG4gIHJlcGxhY2VBbGxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU291cmNlRmlsZSxcbiAgZm9yRWFjaENoaWxkLFxuICBpc0JpbmRpbmdFbGVtZW50LFxuICBpc0NhbGxFeHByZXNzaW9uLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRXhwb3J0RGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc0lkZW50aWZpZXIsXG4gIGlzSW1wb3J0Q2xhdXNlLFxuICBpc0ltcG9ydERlY2xhcmF0aW9uLFxuICBpc0ltcG9ydFNwZWNpZmllcixcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNOYW1lc3BhY2VJbXBvcnQsXG4gIGlzUGFyYW1ldGVyLFxuICBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbixcbiAgaXNQcm9wZXJ0eUFzc2lnbm1lbnQsXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIGlzVmFyaWFibGVEZWNsYXJhdGlvbixcbiAgU2NyaXB0S2luZCxcbiAgU2NyaXB0VGFyZ2V0LFxuICBTeW50YXhLaW5kXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5jb25zdCBESVNQT1NFX1NZTUJPTF9OQU1FUyA9IG5ldyBTZXQoWydhc3luY0Rpc3Bvc2UnLCAnZGlzcG9zZSddKTtcbmNvbnN0IElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCA9ICcvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCc7XG5jb25zdCBKU19PVVRQVVRfUkVHX0VYUCA9IC9cXC5bY21dP2pzJC87XG4vLyBFc2J1aWxkJ3MgaGVscGVyIGJlaGluZCBhIGxvd2VyZWQgYHVzaW5nYCwgd2hpY2ggbG9va3MgdXAgYFN5bWJvbC5kaXNwb3NlYCBieSBuYW1lLlxuY29uc3QgS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FID0gJ19fa25vd25TeW1ib2wnO1xuLy8gQSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoLCBvciBhIGBub2RlOmAgYnVpbHQtaW46IGFueXRoaW5nIGVsc2UgbmFtZXMgYSBwYWNrYWdlLlxuY29uc3QgTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAgPSAvXig/OlxcLnxcXC98bm9kZTopLztcblxuZW51bSBJZGVudGlmaWVyVXNhZ2Uge1xuICBCaW5kaW5nID0gJ2JpbmRpbmcnLFxuICBNZW1iZXIgPSAnbWVtYmVyJyxcbiAgUmVhZCA9ICdyZWFkJ1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBtYWtlUHJlcHJvY2Vzc0Jhbm5lcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGFmdGVyIHRoZSBzaGFyZWQgc2hpbXMsIGVhY2ggaW52b2tlZCBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnM/OiByZWFkb25seSAoKCkgPT4gdm9pZClbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByZXByb2Nlc3NQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXByb2Nlc3NQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGludG8gdGhlIGJhbm5lciBhZnRlciB0aGUgc2hhcmVkIHNoaW1zLCBlYWNoIGludm9rZWQgb25jZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRWFjaCBmdW5jdGlvbiBpcyBlbWl0dGVkIGFzIGAoJHtTdHJpbmcoZm4pfSkoKTtgLCBzbyBpdCBtYXkgcmVmZXJlbmNlIG9ubHkgZ2xvYmFscyBhbmQgd2hhdCBpdCBkZWNsYXJlcyBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucz86IHJlYWRvbmx5ICgoKSA9PiB2b2lkKVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IHJlcGxhY2VzIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgaW4gYSBDb21tb25KUyBidWlsZC4gU2VyaWFsaXplZCBpbnRvXG4gICAqIGV2ZXJ5IGZpbGUgdGhhdCByZWFkcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGZpbGUgVVJMIG9mIGBfX2ZpbGVuYW1lYCwgb3IgYGxvY2F0aW9uLmhyZWZgIHdoZXJlIHRoZXJlIGlzIG5vIGBfX2ZpbGVuYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlcj86ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBZGRNb2R1bGVQcmVhbWJsZXNQYXJhbXMge1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW107XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0cHV0RmlsZXM6IHJlYWRvbmx5IE91dHB1dEZpbGVbXTtcbn1cblxuLyoqXG4gKiBBIGJyb3dzZXItZmxhdm9yZWQgc3RhbmQtaW4gZm9yIE5vZGUncyBgcHJvY2Vzc2AgZ2xvYmFsLlxuICovXG5pbnRlcmZhY2UgQnJvd3NlclByb2Nlc3MgZXh0ZW5kcyBQYXJ0aWFsPE5vZGVKUy5Qcm9jZXNzPiB7XG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgcHJvY2VzcyBhcyBhIGJyb3dzZXIgb25lLiBUaGUgYnVuZGxlZCBgZGVidWdgIHBhY2thZ2Ugc2VsZWN0cyBpdHMgYnJvd3NlciBlbnRyeSBwb2ludCBvbiBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGJyb3dzZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIHRoZSBgU3ltYm9sYCBjb25zdHJ1Y3RvciB7QGxpbmsgZW5zdXJlRGlzcG9zZVN5bWJvbHN9IHJlYWRzIGFuZCB3cml0ZXMsIHdpdGggdGhlIHR3byBkaXNwb3NlXG4gKiBzeW1ib2xzIG9wdGlvbmFsIGJlY2F1c2UgYW4gZW5naW5lIHdpdGhvdXQgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBkb2VzIG5vdCBoYXZlIHRoZW0uXG4gKi9cbmludGVyZmFjZSBEaXNwb3NlU3ltYm9sSG9zdCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIE1pc3NpbmcgZGlzcG9zYWwgc3ltYm9scyBhcmUgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxuICBhc3luY0Rpc3Bvc2U/OiBzeW1ib2w7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIE1pc3NpbmcgZGlzcG9zYWwgc3ltYm9scyBhcmUgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxuICBkaXNwb3NlPzogc3ltYm9sO1xuICByZWFkb25seSBmb3I6IChrZXk6IHN0cmluZykgPT4gc3ltYm9sO1xufVxuXG5pbnRlcmZhY2UgRXNtTW9kdWxlIHtcbiAgcmVhZG9ubHkgX19lc01vZHVsZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGVmYXVsdDogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBUaGUgc2xpY2Ugb2YgYSBicm93c2VyIGdsb2JhbCB7QGxpbmsgZ2V0Q2pzSW1wb3J0TWV0YVVybH0gcmVhZHMsIG9wdGlvbmFsIGJlY2F1c2UgYSBub24tYnJvd3NlciBob3N0IGhhcyBub25lLlxuICovXG5pbnRlcmZhY2UgSW5zZXJ0UHJlYW1ibGVQYXJhbXMge1xuICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJlYW1ibGU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIExvY2F0aW9uSG9zdCB7XG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogUGFnZUxvY2F0aW9uO1xufVxuXG5pbnRlcmZhY2UgTW9kdWxlU2hpbU5lZWRzIHtcbiAgcmVhZG9ubHkgaXNCcm93c2VyUHJvY2Vzc05lZWRlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNEaXNwb3NlU3ltYm9sc05lZWRlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNOYW1lTmVlZGVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGFnZUxvY2F0aW9uIHtcbiAgcmVhZG9ubHkgaHJlZjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU291cmNlTWFwV2l0aE1hcHBpbmdzIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVhZG9ubHktaW50ZXJmYWNlLW1lbWJlcnMgLS0gQWRkaW5nIGEgcHJlYW1ibGUgc2hpZnRzIHRoZSBzb3VyY2UgbWFwIG1hcHBpbmdzLlxuICBtYXBwaW5nczogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVXJsTW9kdWxlIHtcbiAgcmVhZG9ubHkgcGF0aFRvRmlsZVVSTDogdHlwZW9mIHBhdGhUb0ZpbGVVUkw7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgYnVuZGxlIHJ1bnMgYWdhaW5zdCBhIGBwcm9jZXNzYCBnbG9iYWwgdGhhdCBicm93c2VyLXRhcmdldGluZyBwYWNrYWdlcyByZWNvZ25pemUuXG4gKlxuICogQHJlbWFya3NcbiAqIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIsIHNvIGl0IG5ldmVyIHJ1bnMgaW4gdGhlIGJ1aWxkZXIgcHJvY2VzcyDigJQgYnV0IGl0IGlzIGFuIG9yZGluYXJ5XG4gKiBmdW5jdGlvbiBoZXJlLCBzbyBpdCBpcyB1bml0LXRlc3RlZCBkaXJlY3RseSByYXRoZXIgdGhhbiBieSBldmFsdWF0aW5nIHRoZSBiYW5uZXIgdGV4dC5cbiAqXG4gKiBGaWxscyBpbiB0aGUga2V5cyBNSVNTSU5HIGZyb20gYSBob3N0LXByb3ZpZGVkIGBwcm9jZXNzYCByYXRoZXIgdGhhbiByZXBsYWNpbmcgb3Igc2tpcHBpbmcgaXQuIE9ic2lkaWFuXG4gKiBNb2JpbGUgZXhwb3NlcyBhIHBhcnRpYWwgYHByb2Nlc3NgLCBhbmQgdGhlIHdob2xlLW9iamVjdCBndWFyZHMgdGhpcyByZXBsYWNlZCAoYGlmIChnbG9iYWxUaGlzLnByb2Nlc3MpIHtcbiAqIHJldHVybjsgfWAgLyBgZ2xvYmFsVGhpc1JlY29yZFsncHJvY2VzcyddID8/PSDigKZgKSB0b29rIHRoYXQgYXMgXCJhbHJlYWR5IHNoaW1tZWRcIiwgc28gYGJyb3dzZXJgIG5ldmVyXG4gKiBsYW5kZWQuIFRoZSBidW5kbGVkIGBkZWJ1Z2AgcGFja2FnZSB0aGVuIHNlbGVjdGVkIGl0cyBOb2RlIGVudHJ5IHBvaW50LCB3aGljaCBjYWxsc1xuICogYHJlcXVpcmUoJ3V0aWwnKS5kZXByZWNhdGUoKWAgYXQgbW9kdWxlIHRvcCBsZXZlbCwgYW5kIG9uIG1vYmlsZSB0aGUgcGF0Y2hlZCBgcmVxdWlyZWAgcmV0dXJucyBge31gIOKAlCBzb1xuICogdGhlIHBsdWdpbiB0aHJldyBiZWZvcmUgaXRzIGBvbmxvYWRgIHJhbi5cbiAqXG4gKiBBIHJlYWwgTm9kZSBvciBFbGVjdHJvbiBgcHJvY2Vzc2AgaXMgbGVmdCBjb21wbGV0ZWx5IHVudG91Y2hlZC4gYHByb2Nlc3MudmVyc2lvbnMubm9kZWAgaXMgdGhlIHNpZ25hbCBmb3JcbiAqIGl0LCBhbmQgaXQgaXMgc2VsZi1jb250YWluZWQsIHNvIGl0IGFsc28gaG9sZHMgaW4gdGhlIE5vZGUgQ0xJIGJ1bmRsZXMgdGhpcyBiYW5uZXIgaXMgZW1pdHRlZCBpbnRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQnJvd3NlclByb2Nlc3MoKTogdm9pZCB7XG4gIGNvbnN0IGJyb3dzZXJQcm9jZXNzOiBHZW5lcmljT2JqZWN0PEJyb3dzZXJQcm9jZXNzPiA9IHtcbiAgICBicm93c2VyOiB0cnVlLFxuICAgIGN3ZCgpIHtcbiAgICAgIHJldHVybiAnLyc7XG4gICAgfSxcbiAgICBlbnY6IHt9LFxuICAgIHBsYXRmb3JtOiAnYW5kcm9pZCdcbiAgfTtcblxuICBjb25zdCBleGlzdGluZ1Byb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3MgYXMgUGFydGlhbDxOb2RlSlMuUHJvY2Vzcz4gfCB1bmRlZmluZWQ7XG5cbiAgaWYgKCFleGlzdGluZ1Byb2Nlc3MpIHtcbiAgICBnbG9iYWxUaGlzLnByb2Nlc3MgPSBicm93c2VyUHJvY2VzcyBhcyBOb2RlSlMuUHJvY2VzcztcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZXhpc3RpbmdQcm9jZXNzLnZlcnNpb25zPy5ub2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZXhpc3RpbmdQcm9jZXNzUmVjb3JkID0gZXhpc3RpbmdQcm9jZXNzIGFzIEdlbmVyaWNPYmplY3Q7XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYnJvd3NlclByb2Nlc3MpKSB7XG4gICAgZXhpc3RpbmdQcm9jZXNzUmVjb3JkW2tleV0gPz89IHZhbHVlO1xuICB9XG5cbiAgZXhpc3RpbmdQcm9jZXNzUmVjb3JkWydicm93c2VyJ10gPSB0cnVlO1xufVxuXG4vKipcbiAqIE1ha2VzIGBTeW1ib2wuZGlzcG9zZWAgYW5kIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCBleGlzdCwgZmFsbGluZyBiYWNrIHRvIHRoZSByZWdpc3RyeSBzeW1ib2xzIGVzYnVpbGQnc1xuICogYHVzaW5nYCBoZWxwZXJzIGxvb2sgdXAuXG4gKlxuICogQHBhcmFtIHN5bWJvbENvbnN0cnVjdG9yIC0gVGhlIGBTeW1ib2xgIGNvbnN0cnVjdG9yIHRvIHBhdGNoLiBEZWZhdWx0cyB0byB0aGUgYW1iaWVudCBvbmU7IHRoZSBwYXJhbWV0ZXJcbiAqIGV4aXN0cyBzbyBhIHRlc3QgY2FuIGhhbmQgaW4gYW4gZW5naW5lIHRoYXQgbGFja3MgdGhlIHdlbGwta25vd24gc3ltYm9scy5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lci4gQSBkaXNwb3NhYmxlIGRlY2xhcmVzIGl0cyBtZXRob2QgdW5kZXIgdGhlIExJVEVSQUwga2V5XG4gKiBgW1N5bWJvbC5kaXNwb3NlXWAsIHdoaWxlIGVzYnVpbGQgbG93ZXJzIGV2ZXJ5IGB1c2luZ2AgdG8gYSBsb29rdXAgdGhyb3VnaCBgX19rbm93blN5bWJvbCgnZGlzcG9zZScpYCxcbiAqIHdoaWNoIGZhbGxzIGJhY2sgdG8gYFN5bWJvbC5mb3IoJ1N5bWJvbC5kaXNwb3NlJylgIHdoZW4gdGhlIGVuZ2luZSBoYXMgbm8gd2VsbC1rbm93biBzeW1ib2wuIE9uIHN1Y2ggYW5cbiAqIGVuZ2luZSB0aGUgbGl0ZXJhbCBrZXkgZXZhbHVhdGVzIHRvIGB1bmRlZmluZWRgLCB0aGUgbWV0aG9kIGxhbmRzIHVuZGVyIHRoZSBzdHJpbmcgYFwidW5kZWZpbmVkXCJgLCBhbmRcbiAqIGV2ZXJ5IGB1c2luZ2Agb2YgaXQgdGhyb3dzIGBPYmplY3Qgbm90IGRpc3Bvc2FibGVgLiBGaWxsaW5nIHRoZSB3ZWxsLWtub3duIHNsb3Qgd2l0aCB0aGF0IHNhbWUgcmVnaXN0cnlcbiAqIHN5bWJvbCBtYWtlcyBib3RoIHNpZGVzIG5hbWUgb25lIGtleSBvbiBldmVyeSBlbmdpbmUuIEEgaG9zdCB0aGF0IGFscmVhZHkgaGFzIHRoZSBzeW1ib2wgaXMgbGVmdFxuICogdW50b3VjaGVkOiBgPz89YCBuZXZlciByZWFjaGVzIHRoZSBhc3NpZ25tZW50LCB3aGljaCB0aGUgaG9zdCdzIG5vbi13cml0YWJsZSBwcm9wZXJ0eSB3b3VsZCByZWZ1c2UuXG4gKlxuICogVGhlIGRlZmF1bHQgbmFtZXMgYFN5bWJvbGAgYmFyZSBvbiBwdXJwb3NlOiBpdCBleGlzdHMgb24gZXZlcnkgZW5naW5lIHRoaXMgcnVucyBvbiwgYW5kIGEgYmFyZSByZWZlcmVuY2VcbiAqIHJlc29sdmVzIGFnYWluc3Qgd2hhdGV2ZXIgc2NvcGUgdGhlIGJhbm5lciBpcyBldmFsdWF0ZWQgaW4sIGV4YWN0bHkgYXMgdGhlIGJ1bmRsZSdzIG93blxuICogYFtTeW1ib2wuZGlzcG9zZV1gIGtleXMgZG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVEaXNwb3NlU3ltYm9scyhzeW1ib2xDb25zdHJ1Y3RvcjogRGlzcG9zZVN5bWJvbEhvc3QgPSBTeW1ib2wpOiB2b2lkIHtcbiAgc3ltYm9sQ29uc3RydWN0b3IuYXN5bmNEaXNwb3NlID8/PSBzeW1ib2xDb25zdHJ1Y3Rvci5mb3IoJ1N5bWJvbC5hc3luY0Rpc3Bvc2UnKTtcbiAgc3ltYm9sQ29uc3RydWN0b3IuZGlzcG9zZSA/Pz0gc3ltYm9sQ29uc3RydWN0b3IuZm9yKCdTeW1ib2wuZGlzcG9zZScpO1xufVxuXG4vKipcbiAqIFJldHVybnMgaXRzIGFyZ3VtZW50IHVuY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0gJHVua25vd24gLSBUaGUgdmFsdWUgdG8gcmV0dXJuLlxuICogQHJldHVybnMgVGhlIHZhbHVlIHBhc3NlZCBpbi5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciwgd2hlcmUgaXQgc3RhbmRzIGluIGZvciBlc2J1aWxkJ3MgYF9fbmFtZWAgaGVscGVyIOKAlCB3aGljaCBuYW1lcyBhXG4gKiBmdW5jdGlvbiBhbmQgcmV0dXJucyBpdCDigJQgZm9yIGJ1bmRsZXMgdGhhdCByZWZlcmVuY2UgdGhlIGhlbHBlciB3aXRob3V0IGVtaXR0aW5nIHRoZWlyIG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlZXBOYW1lKCR1bmtub3duOiB1bmtub3duKTogdW5rbm93biB7XG4gIHJldHVybiAkdW5rbm93bjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGJhbm5lciBpbmplY3RlZCBhdCB0aGUgdG9wIG9mIGV2ZXJ5IGVtaXR0ZWQgYnVuZGxlLlxuICpcbiAqIGBTdHJpbmcoZm4pYCBjYXB0dXJlcyBvbmx5IHRoZSBmdW5jdGlvbidzIG93biBib2R5LCBzbyBldmVyeSBzaGltIHRoZSBgaW5pdGAgZnVuY3Rpb24gY2FsbHMgaGFzIHRvIGJlXG4gKiBzZXJpYWxpemVkIG5leHQgdG8gaXQgYW5kIHdyYXBwZWQgaW4gb25lIHNoYXJlZCBzY29wZTsgb3RoZXJ3aXNlIHRoZSBjYWxsIGl0IG1ha2VzIHJlc29sdmVzIGFnYWluc3QgdGhlXG4gKiBjb25zdW1lcidzIGdsb2JhbCBzY29wZSBhdCBydW50aW1lLiBTZWUgdGhpcyBmaWxlJ3MgYEBmaWxlYCByZW1hcmtzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGJhbm5lciBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIGJhbm5lciBzb3VyY2UgdG8gcHJlcGVuZCB0byB0aGUgZW1pdHRlZCBidW5kbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUHJlcHJvY2Vzc0Jhbm5lcihvcHRpb25zOiBNYWtlUHJlcHJvY2Vzc0Jhbm5lck9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgPSBbXSwgaXNFc20gPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3Qgc2hpbXMgPSBpc0VzbSA/IFtlbnN1cmVEaXNwb3NlU3ltYm9scywgZW5zdXJlQnJvd3NlclByb2Nlc3NdIDogW2Vuc3VyZURpc3Bvc2VTeW1ib2xzLCBlbnN1cmVCcm93c2VyUHJvY2Vzcywga2VlcE5hbWVdO1xuICBjb25zdCBpbml0ID0gaXNFc20gPyBpbml0RXNtIDogaW5pdENqcztcbiAgY29uc3QgYWRkaXRpb25hbEluaXRzID0gYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMubWFwKChmdW5jdGlvbl8pID0+IGAoJHtTdHJpbmcoZnVuY3Rpb25fKX0pKCk7XFxuYCkuam9pbignJyk7XG4gIHJldHVybiBgXFxuKGZ1bmN0aW9uICgpIHtcXG4ke3NoaW1zLm1hcChTdHJpbmcpLmpvaW4oJ1xcblxcbicpfVxcblxcbigke1N0cmluZyhpbml0KX0pKCk7XFxufSkoKTtcXG4ke2FkZGl0aW9uYWxJbml0c31gO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBsdWdpbidzIHNldHVwIG5lZWRzIGEgbGl2ZSBlc2J1aWxkIGNvbnRleHQsIGFuZCB0aGUgZnVuY3Rpb25zIGluIHRoZSBsYXRlciBpZ25vcmVkIHJhbmdlcyBhcmUgc2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciBhbmQgc28gcnVuIGluc2lkZSB0aGUgYnVpbHQgYnVuZGxlLCBuZXZlciBpbiB0aGlzIHByb2Nlc3MuIFRoZSBzaGltcyBhYm92ZSBhcmUgZGVsaWJlcmF0ZWx5IE5PVCBpZ25vcmVkOiB0aGV5IGFyZSBvcmRpbmFyeSBmdW5jdGlvbnMgaGVyZSBhbmQgYXJlIHVuaXQtdGVzdGVkIGRpcmVjdGx5LCBhbmQgbmVpdGhlciBhcmUgdGhlIHVuYnVuZGxlZC1idWlsZCBoZWxwZXJzLCB3aGljaCB0aGUgdGVzdHMgZHJpdmUgdGhyb3VnaCBhIHN0dWIgYnVpbGQuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IHByZXByb2Nlc3NlcyBKYXZhU2NyaXB0IGFuZCBUeXBlU2NyaXB0IGZpbGVzLlxuICpcbiAqIFRoaXMgcGx1Z2luIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdGFza3M6XG4gKiAtIFJlcGxhY2VzIGluc3RhbmNlcyBvZiBgaW1wb3J0KGRvdCltZXRhKGRvdCl1cmxgIHdpdGggYSBDb21tb25KUy1jb21wYXRpYmxlIGBfX2ZpbGVuYW1lYCBhbHRlcm5hdGl2ZS5cbiAqIC0gTW9kaWZpZXMgdGhlIGBzb3VyY2VNYXBwaW5nVVJMYCBjb21tZW50IHNvIGEgdGVtcGxhdGUgbGl0ZXJhbCBlbmRpbmcgYSBmaWxlIGRvZXMgbm90IHN3YWxsb3cgaXQuXG4gKiAtIEFkZHMgYSBiYXNpYyBgcHJvY2Vzc2Agb2JqZWN0IHRvIHRoZSBnbG9iYWwgc2NvcGUgaWYgYHByb2Nlc3NgIGlzIHJlZmVyZW5jZWQgYnV0IG5vdCBkZWZpbmVkLlxuICogLSBGaWxscyBpbiBgU3ltYm9sLmRpc3Bvc2VgIC8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIG9uIGVuZ2luZXMgdGhhdCBsYWNrIHRoZW0sIHNvIGB1c2luZ2Agd29ya3MgdGhlcmUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBBbiBlc2J1aWxkIGBQbHVnaW5gIG9iamVjdCB0aGF0IGhhbmRsZXMgdGhlIHByZXByb2Nlc3NpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwcm9jZXNzUGx1Z2luKG9wdGlvbnM6IFByZXByb2Nlc3NQbHVnaW5PcHRpb25zID0ge30pOiBQbHVnaW4ge1xuICBjb25zdCB7IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zID0gW10sIGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlciA9IGdldENqc0ltcG9ydE1ldGFVcmwsIGlzRXNtID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlcGxhY2VtZW50cyA9IGlzRXNtXG4gICAgPyB7fVxuICAgIDoge1xuICAgICAgW1xuICAgICAgICByZXBsYWNlQWxsKHtcbiAgICAgICAgICAkc3RyaW5nOiAnaW1wb3J0KGRvdCltZXRhKGRvdCl1cmwnLFxuICAgICAgICAgIHJlcGxhY2VyOiAnLicsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6ICcoZG90KSdcbiAgICAgICAgfSlcbiAgICAgIF06IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlclxuICAgIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAncHJlcHJvY2VzcycsXG4gICAgc2V0dXAoYnVpbGQpOiB2b2lkIHtcbiAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmRlZmluZSA/Pz0ge307XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lW2tleV0gPSBgX18ke21ha2VWYWxpZFZhcmlhYmxlTmFtZShrZXkpfWA7XG4gICAgICB9XG5cbiAgICAgIGlmIChidWlsZC5pbml0aWFsT3B0aW9ucy5idW5kbGUgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIE9uZSBvdXRwdXQgcGVyIHNvdXJjZTogZWFjaCBtb2R1bGUgZ2V0cyBvbmx5IHRoZSBzaGltcyBpdHMgb3duIGNvZGUgbmVlZHMsIHNvIGEgcGFnZSBpbXBvcnRpbmcgYSBwdXJlXG4gICAgICAgIC8vIG1vZHVsZSBvZiBhIGxpYnJhcnkgaXMgbGVmdCB3aXRoIGl0cyBnbG9iYWxzIHVudG91Y2hlZC5cbiAgICAgICAgY29uc3QgbGVhZGluZ0Jhbm5lciA9IGJ1aWxkLmluaXRpYWxPcHRpb25zLmJhbm5lcj8uWydqcyddID8/ICcnO1xuICAgICAgICBidWlsZC5vbkVuZCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgYWRkTW9kdWxlUHJlYW1ibGVzKHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGxlYWRpbmdCYW5uZXIsIG91dHB1dEZpbGVzOiByZXN1bHQub3V0cHV0RmlsZXMgPz8gW10gfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyID8/PSB7fTtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyWydqcyddID8/PSAnJztcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyWydqcyddICs9IG1ha2VQcmVwcm9jZXNzQmFubmVyKHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGlzRXNtIH0pO1xuICAgICAgfVxuXG4gICAgICBidWlsZC5vbkxvYWQoeyBmaWx0ZXI6IC9cXC4oPzpqc3x0c3xjanN8bWpzfGN0c3xtdHMpJC8gfSwgYXN5bmMgKCRhcmd1bWVudHMpID0+IHtcbiAgICAgICAgbGV0IGNvbnRlbnRzID0gYXdhaXQgcmVhZEZpbGUoJGFyZ3VtZW50cy5wYXRoLCAndXRmLTgnKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXBsYWNlbWVudHMpKSB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGUgPSBgX18ke21ha2VWYWxpZFZhcmlhYmxlTmFtZShrZXkpfWA7XG4gICAgICAgICAgaWYgKCFjb250ZW50cy5pbmNsdWRlcyhrZXkpIHx8IGNvbnRlbnRzLmluY2x1ZGVzKGB2YXIgJHt2YXJpYWJsZX1gKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gYCgke1N0cmluZyh2YWx1ZSl9KSgpYCA6IHRvSnNvbih2YWx1ZSwgeyBmdW5jdGlvbkhhbmRsaW5nTW9kZTogRnVuY3Rpb25IYW5kbGluZ01vZGUuRnVsbCB9KTtcbiAgICAgICAgICBjb250ZW50cyA9IGB2YXIgJHt2YXJpYWJsZX0gPSBnbG9iYWxUaGlzWycke2tleX0nXSA/PyAke3ZhbHVlU3RyaW5nfTtcXG4ke2NvbnRlbnRzfWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIQUNLOiBUaGUgJHsnJ30gcGFydCBpcyB1c2VkIHRvIGVuc3VyZSBPYnNpZGlhbiBsb2FkcyB0aGUgcGx1Z2luIHByb3Blcmx5LFxuICAgICAgICAvLyBPdGhlcndpc2UsIGl0IHN0b3BzIGxvYWRpbmcgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNvdXJjZU1hcHBpbmdVUkwgY29tbWVudC5cblxuICAgICAgICBjb250ZW50cyA9IHJlcGxhY2VBbGwoe1xuICAgICAgICAgICRzdHJpbmc6IGNvbnRlbnRzLFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgLS0gSXQgaXMgaW50ZW50aW9uYWwsIHRoZSBzdHJpbmcgbG9va3MgbGlrZSBhIHRlbXBsYXRlIGxpdGVyYWwsIGJ1dCBpdCBpcyBub3QuXG4gICAgICAgICAgcmVwbGFjZXI6ICdgXFxuLy8jJHtcXCdcXCd9IHNvdXJjZU1hcHBpbmdVUkwnLFxuICAgICAgICAgIHNlYXJjaFZhbHVlOiAvYFxccj9cXG5cXC9cXC8jIHNvdXJjZU1hcHBpbmdVUkwvZ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnRzLFxuICAgICAgICAgIGxvYWRlcjogJ3RzJ1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4vKipcbiAqIFByZXBlbmRzIHRvIGVhY2ggZW1pdHRlZCBtb2R1bGUgdGhlIHByZWFtYmxlIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIG5vdGhpbmcgd2hlbiBpdCBuZWVkcyBub25lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZW1pdHRlZCBtb2R1bGVzLCB0aGUgYmFubmVyIHRoZSBjYWxsZXIgYWxyZWFkeSBwdXQgZmlyc3QsIGFuZCB0aGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMuXG4gKi9cbmZ1bmN0aW9uIGFkZE1vZHVsZVByZWFtYmxlcyhwYXJhbXM6IEFkZE1vZHVsZVByZWFtYmxlc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zLCBsZWFkaW5nQmFubmVyLCBvdXRwdXRGaWxlcyB9ID0gcGFyYW1zO1xuICBmb3IgKGNvbnN0IG91dHB1dEZpbGUgb2Ygb3V0cHV0RmlsZXMpIHtcbiAgICBpZiAoIUpTX09VVFBVVF9SRUdfRVhQLnRlc3Qob3V0cHV0RmlsZS5wYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29kZSA9IG91dHB1dEZpbGUudGV4dDtcbiAgICBjb25zdCBwcmVhbWJsZSA9IG1ha2VNb2R1bGVQcmVhbWJsZShnZXRNb2R1bGVTaGltTmVlZHMoY29kZSksIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zKTtcbiAgICBpZiAocHJlYW1ibGUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBvdXRwdXRGaWxlLmNvbnRlbnRzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGluc2VydFByZWFtYmxlKHsgY29kZSwgbGVhZGluZ0Jhbm5lciwgcHJlYW1ibGUgfSkpO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgbW9kdWxlLCBzZWUgYWJvdmUuICovXG5mdW5jdGlvbiBnZXRDanNJbXBvcnRNZXRhVXJsKCk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBsb2NhbFJlcXVpcmUgPSByZXF1aXJlO1xuICAgIGNvbnN0IHVybCA9IGxvY2FsUmVxdWlyZSgnbm9kZTp1cmwnKSBhcyBVcmxNb2R1bGU7XG4gICAgaWYgKHR5cGVvZiB1cmwucGF0aFRvRmlsZVVSTCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHVybC5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpLmhyZWY7XG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbGJhY2sgdG8gdGhlIHBhZ2UgVVJMLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGVudmlyb25tZW50IGlzIHVua25vd24uXG4gIHJldHVybiAoZ2xvYmFsVGhpcyBhcyBMb2NhdGlvbkhvc3QpLmxvY2F0aW9uPy5ocmVmID8/ICcnO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cblxuZnVuY3Rpb24gZ2V0SWRlbnRpZmllclVzYWdlKG5vZGU6IElkZW50aWZpZXIpOiBJZGVudGlmaWVyVXNhZ2Uge1xuICBjb25zdCB7IHBhcmVudCB9ID0gbm9kZTtcbiAgaWYgKFxuICAgIChpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihwYXJlbnQpIHx8IGlzUHJvcGVydHlBc3NpZ25tZW50KHBhcmVudCkgfHwgaXNNZXRob2REZWNsYXJhdGlvbihwYXJlbnQpIHx8IGlzUHJvcGVydHlEZWNsYXJhdGlvbihwYXJlbnQpXG4gICAgICB8fCBpc0dldEFjY2Vzc29yRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc1NldEFjY2Vzc29yRGVjbGFyYXRpb24ocGFyZW50KSlcbiAgICAmJiBwYXJlbnQubmFtZSA9PT0gbm9kZVxuICApIHtcbiAgICByZXR1cm4gSWRlbnRpZmllclVzYWdlLk1lbWJlcjtcbiAgfVxuXG4gIHJldHVybiAoaXNWYXJpYWJsZURlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNGdW5jdGlvbkRlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNDbGFzc0RlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNQYXJhbWV0ZXIocGFyZW50KSB8fCBpc0JpbmRpbmdFbGVtZW50KHBhcmVudClcbiAgICAgIHx8IGlzSW1wb3J0Q2xhdXNlKHBhcmVudCkgfHwgaXNJbXBvcnRTcGVjaWZpZXIocGFyZW50KSB8fCBpc05hbWVzcGFjZUltcG9ydChwYXJlbnQpKVxuICAgICAgJiYgcGFyZW50Lm5hbWUgPT09IG5vZGVcbiAgICA/IElkZW50aWZpZXJVc2FnZS5CaW5kaW5nXG4gICAgOiBJZGVudGlmaWVyVXNhZ2UuUmVhZDtcbn1cblxuLyoqXG4gKiBSZWFkcyB3aGljaCBzaGltcyBhbiBlbWl0dGVkIG1vZHVsZSBuZWVkcyBmcm9tIGl0cyBjb2RlLlxuICpcbiAqIC0gYGVuc3VyZUJyb3dzZXJQcm9jZXNzYDogaXQgcmVhZHMgYSBgcHJvY2Vzc2AgaXQgZG9lcyBub3QgYmluZCBpdHNlbGYsIG9yIGl0IGxvYWRzIGEgYmFyZSBwYWNrYWdlIHRoYXQgaXMgbm90IGFcbiAqICAgYG5vZGU6YCBidWlsdC1pbi4gVGhlIHNlY29uZCBjYXNlIGlzIHRoZXJlIGJlY2F1c2Ugc3VjaCBhIHBhY2thZ2UgKGBwYXRoLWJyb3dzZXJpZnlgIHJlYWRzIGBwcm9jZXNzLmN3ZCgpYCkgY2Fubm90XG4gKiAgIGNhcnJ5IGEgc2hpbSBvZiBpdHMgb3duLCBhbmQgaW4gYW4gdW5idW5kbGVkIGJ1aWxkIGl0cyBpbXBvcnRlciBpcyB0aGUgb25seSBtb2R1bGUgdGhhdCBjYW4uXG4gKiAtIGBlbnN1cmVEaXNwb3NlU3ltYm9sc2A6IGl0IG5hbWVzIGBTeW1ib2wuZGlzcG9zZWAgb3IgYFN5bWJvbC5hc3luY0Rpc3Bvc2VgLCBvciBob2xkcyBlc2J1aWxkJ3MgYF9fa25vd25TeW1ib2xgXG4gKiAgIGhlbHBlciwgd2hpY2ggYSBsb3dlcmVkIGB1c2luZ2AgZW1pdHMuXG4gKiAtIGBfX25hbWVgOiBpdCByZWFkcyBhIGBfX25hbWVgIGl0IGRvZXMgbm90IGRlY2xhcmUuXG4gKlxuICogQHBhcmFtIGNvZGUgLSBUaGUgZW1pdHRlZCBtb2R1bGUuXG4gKiBAcmV0dXJucyBXaGF0IHRoZSBtb2R1bGUgbmVlZHMuXG4gKi9cbmZ1bmN0aW9uIGdldE1vZHVsZVNoaW1OZWVkcyhjb2RlOiBzdHJpbmcpOiBNb2R1bGVTaGltTmVlZHMge1xuICBjb25zdCBzb3VyY2VGaWxlID0gY3JlYXRlU291cmNlRmlsZSgnbW9kdWxlLmpzJywgY29kZSwgU2NyaXB0VGFyZ2V0LkxhdGVzdCwgdHJ1ZSwgU2NyaXB0S2luZC5KUyk7XG4gIGNvbnN0IGJvdW5kTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgcmVhZE5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGxldCBpc0JhcmVJbXBvcnRGb3VuZCA9IGZhbHNlO1xuICBsZXQgaXNEaXNwb3NlU3ltYm9sRm91bmQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiB2aXNpdChub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgY29uc3Qgc3BlY2lmaWVyID0gZ2V0TW9kdWxlU3BlY2lmaWVyKG5vZGUpO1xuICAgIGlmIChzcGVjaWZpZXIgIT09IHVuZGVmaW5lZCAmJiAhTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAudGVzdChzcGVjaWZpZXIpKSB7XG4gICAgICBpc0JhcmVJbXBvcnRGb3VuZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSkgJiYgaXNJZGVudGlmaWVyKG5vZGUuZXhwcmVzc2lvbikgJiYgbm9kZS5leHByZXNzaW9uLnRleHQgPT09ICdTeW1ib2wnXG4gICAgICAmJiBESVNQT1NFX1NZTUJPTF9OQU1FUy5oYXMobm9kZS5uYW1lLnRleHQpXG4gICAgKSB7XG4gICAgICBpc0Rpc3Bvc2VTeW1ib2xGb3VuZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGlzSWRlbnRpZmllcihub2RlKSkge1xuICAgICAgaWYgKG5vZGUudGV4dCA9PT0gS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FKSB7XG4gICAgICAgIGlzRGlzcG9zZVN5bWJvbEZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNhZ2UgPSBnZXRJZGVudGlmaWVyVXNhZ2Uobm9kZSk7XG4gICAgICBpZiAodXNhZ2UgPT09IElkZW50aWZpZXJVc2FnZS5CaW5kaW5nKSB7XG4gICAgICAgIGJvdW5kTmFtZXMuYWRkKG5vZGUudGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKHVzYWdlID09PSBJZGVudGlmaWVyVXNhZ2UuUmVhZCkge1xuICAgICAgICByZWFkTmFtZXMuYWRkKG5vZGUudGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0KTtcbiAgfVxuICB2aXNpdChzb3VyY2VGaWxlKTtcblxuICBmdW5jdGlvbiBpc0ZyZWVSZWFkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWFkTmFtZXMuaGFzKG5hbWUpICYmICFib3VuZE5hbWVzLmhhcyhuYW1lKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXNCcm93c2VyUHJvY2Vzc05lZWRlZDogaXNGcmVlUmVhZCgncHJvY2VzcycpIHx8IGlzQmFyZUltcG9ydEZvdW5kLFxuICAgIGlzRGlzcG9zZVN5bWJvbHNOZWVkZWQ6IGlzRGlzcG9zZVN5bWJvbEZvdW5kLFxuICAgIGlzTmFtZU5lZWRlZDogaXNGcmVlUmVhZCgnX19uYW1lJylcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TW9kdWxlU3BlY2lmaWVyKG5vZGU6IE5vZGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoKGlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkgfHwgaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSkgJiYgbm9kZS5tb2R1bGVTcGVjaWZpZXIgIT09IHVuZGVmaW5lZCAmJiBpc1N0cmluZ0xpdGVyYWwobm9kZS5tb2R1bGVTcGVjaWZpZXIpKSB7XG4gICAgcmV0dXJuIG5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQ7XG4gIH1cblxuICBpZiAoaXNDYWxsRXhwcmVzc2lvbihub2RlKSkge1xuICAgIGNvbnN0IFtmaXJzdEFyZ3VtZW50XSA9IG5vZGUuYXJndW1lbnRzO1xuICAgIGNvbnN0IGlzTG9hZGVyID0gbm9kZS5leHByZXNzaW9uLmtpbmQgPT09IFN5bnRheEtpbmQuSW1wb3J0S2V5d29yZCB8fCAoaXNJZGVudGlmaWVyKG5vZGUuZXhwcmVzc2lvbikgJiYgbm9kZS5leHByZXNzaW9uLnRleHQgPT09ICdyZXF1aXJlJyk7XG4gICAgaWYgKGlzTG9hZGVyICYmIGZpcnN0QXJndW1lbnQgIT09IHVuZGVmaW5lZCAmJiBpc1N0cmluZ0xpdGVyYWwoZmlyc3RBcmd1bWVudCkpIHtcbiAgICAgIHJldHVybiBmaXJzdEFyZ3VtZW50LnRleHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIsIHNlZSBhYm92ZS4gKi9cbmZ1bmN0aW9uIGluaXRDanMoKTogdm9pZCB7XG4gIGNvbnN0IGdsb2JhbFRoaXNSZWNvcmQgPSBnbG9iYWxUaGlzIGFzIEdlbmVyaWNPYmplY3Q7XG4gIGVuc3VyZURpc3Bvc2VTeW1ib2xzKCk7XG4gIGdsb2JhbFRoaXNSZWNvcmRbJ19fbmFtZSddID8/PSBrZWVwTmFtZTtcbiAgZ2xvYmFsVGhpc1JlY29yZFsnX19leHRyYWN0RGVmYXVsdCddID8/PSBleHRyYWN0RGVmYXVsdDtcblxuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyAtLSBTZXJpYWxpemVkIHdpdGggaW5pdENqcyBpbnRvIHRoZSBiYW5uZXI7IGF0IG1vZHVsZSBzY29wZSBpdCB3b3VsZCBiZSBsZWZ0IG91dCBvZiBpdC5cbiAgZnVuY3Rpb24gZXh0cmFjdERlZmF1bHQobW9kdWxlOiBQYXJ0aWFsPEVzbU1vZHVsZT4gfCB1bmRlZmluZWQpOiB1bmtub3duIHtcbiAgICByZXR1cm4gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiBtb2R1bGUgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0RXNtKCk6IHZvaWQge1xuICBlbnN1cmVEaXNwb3NlU3ltYm9scygpO1xuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cblxuLyoqXG4gKiBJbnNlcnRzIHRoZSBwcmVhbWJsZSBhZnRlciB0aGUgY2FsbGVyJ3MgbGVhZGluZyBiYW5uZXIsIGFuZCBzaGlmdHMgYW4gaW5saW5lIHNvdXJjZSBtYXAgZG93biBieSB0aGUgbGluZXMgaXQgYWRkcyxcbiAqIHNvIHRoZSBtb2R1bGUncyBvd24gbGluZXMga2VlcCBtYXBwaW5nIG9udG8gdGhlaXIgc291cmNlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIG1vZHVsZSwgaXRzIGxlYWRpbmcgYmFubmVyIGFuZCB0aGUgcHJlYW1ibGUuXG4gKiBAcmV0dXJucyBUaGUgbW9kdWxlIHdpdGggdGhlIHByZWFtYmxlIGluIGl0LlxuICovXG5mdW5jdGlvbiBpbnNlcnRQcmVhbWJsZShwYXJhbXM6IEluc2VydFByZWFtYmxlUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBjb2RlLCBsZWFkaW5nQmFubmVyLCBwcmVhbWJsZSB9ID0gcGFyYW1zO1xuICBjb25zdCBpbnNlcnRBdCA9IGxlYWRpbmdCYW5uZXIuZW5kc1dpdGgoJ1xcbicpICYmIGNvZGUuc3RhcnRzV2l0aChsZWFkaW5nQmFubmVyKSA/IGxlYWRpbmdCYW5uZXIubGVuZ3RoIDogMDtcbiAgY29uc3QgYWRkZWRMaW5lQ291bnQgPSBwcmVhbWJsZS5zcGxpdCgnXFxuJykubGVuZ3RoIC0gMTtcbiAgbGV0IHNoaWZ0ZWRDb2RlID0gY29kZTtcbiAgY29uc3Qgc291cmNlTWFwU3RhcnQgPSBjb2RlLmxhc3RJbmRleE9mKElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCk7XG4gIGlmIChzb3VyY2VNYXBTdGFydCAhPT0gLTEpIHtcbiAgICBjb25zdCBkYXRhU3RhcnQgPSBzb3VyY2VNYXBTdGFydCArIElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWC5sZW5ndGg7XG4gICAgY29uc3QgZGF0YSA9IGNvZGUuc2xpY2UoZGF0YVN0YXJ0KS50cmltRW5kKCk7XG4gICAgY29uc3Qgc291cmNlTWFwID0gSlNPTi5wYXJzZShCdWZmZXIuZnJvbShkYXRhLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04JykpIGFzIFNvdXJjZU1hcFdpdGhNYXBwaW5ncztcbiAgICBzb3VyY2VNYXAubWFwcGluZ3MgPSAnOycucmVwZWF0KGFkZGVkTGluZUNvdW50KSArIHNvdXJjZU1hcC5tYXBwaW5ncztcbiAgICBzaGlmdGVkQ29kZSA9IGNvZGUuc2xpY2UoMCwgZGF0YVN0YXJ0KSArIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCksICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKSArIGNvZGUuc2xpY2UoZGF0YVN0YXJ0ICsgZGF0YS5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBzaGlmdGVkQ29kZS5zbGljZSgwLCBpbnNlcnRBdCkgKyBwcmVhbWJsZSArIHNoaWZ0ZWRDb2RlLnNsaWNlKGluc2VydEF0KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHByZWFtYmxlIG9mIG9uZSB1bmJ1bmRsZWQgbW9kdWxlOiB0aGUgc2hpbXMgaXQgbmVlZHMgaW4gb25lIHNoYXJlZCBzY29wZSwgdGhlbiB0aGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMuXG4gKlxuICogQHBhcmFtIG5lZWRzIC0gV2hhdCB0aGUgbW9kdWxlIG5lZWRzLlxuICogQHBhcmFtIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zIC0gVGhlIGNhbGxlcidzIGV4dHJhIGluaXRzLCB3aGljaCBldmVyeSBtb2R1bGUgZ2V0cy5cbiAqIEByZXR1cm5zIFRoZSBwcmVhbWJsZSwgZW1wdHkgd2hlbiB0aGUgbW9kdWxlIG5lZWRzIG5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNb2R1bGVQcmVhbWJsZShuZWVkczogTW9kdWxlU2hpbU5lZWRzLCBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW10pOiBzdHJpbmcge1xuICBjb25zdCBzaGltczogKCguLi5hcmd1bWVudHNfOiBuZXZlcltdKSA9PiB1bmtub3duKVtdID0gW107XG4gIGNvbnN0IGNhbGxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuZWVkcy5pc0Rpc3Bvc2VTeW1ib2xzTmVlZGVkKSB7XG4gICAgc2hpbXMucHVzaChlbnN1cmVEaXNwb3NlU3ltYm9scyk7XG4gICAgY2FsbHMucHVzaCgnZW5zdXJlRGlzcG9zZVN5bWJvbHMoKTsnKTtcbiAgfVxuXG4gIGlmIChuZWVkcy5pc0Jyb3dzZXJQcm9jZXNzTmVlZGVkKSB7XG4gICAgc2hpbXMucHVzaChlbnN1cmVCcm93c2VyUHJvY2Vzcyk7XG4gICAgY2FsbHMucHVzaCgnZW5zdXJlQnJvd3NlclByb2Nlc3MoKTsnKTtcbiAgfVxuXG4gIGlmIChuZWVkcy5pc05hbWVOZWVkZWQpIHtcbiAgICBzaGltcy5wdXNoKGtlZXBOYW1lKTtcbiAgICBjYWxscy5wdXNoKCdnbG9iYWxUaGlzW1xcJ19fbmFtZVxcJ10gPz89IGtlZXBOYW1lOycpO1xuICB9XG5cbiAgY29uc3Qgc2hhcmVkU2NvcGUgPSBzaGltcy5sZW5ndGggPT09IDAgPyAnJyA6IGAoZnVuY3Rpb24gKCkge1xcbiR7c2hpbXMubWFwKFN0cmluZykuam9pbignXFxuXFxuJyl9XFxuXFxuJHtjYWxscy5qb2luKCdcXG4nKX1cXG59KSgpO1xcbmA7XG4gIHJldHVybiBzaGFyZWRTY29wZSArIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zLm1hcCgoZnVuY3Rpb25fKSA9PiBgKCR7U3RyaW5nKGZ1bmN0aW9uXyl9KSgpO1xcbmApLmpvaW4oJycpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1DQSwwQkFHTztBQUNQLG9CQUdPO0FBQ1AseUJBQXVCO0FBQ3ZCLHNCQUF5QjtBQUN6Qix3QkF5Qk87QUFFUCxNQUFNLHVCQUF1QixvQkFBSSxJQUFJLENBQUMsZ0JBQWdCLFNBQVMsQ0FBQztBQUNoRSxNQUFNLDJCQUEyQjtBQUNqQyxNQUFNLG9CQUFvQjtBQUUxQixNQUFNLDJCQUEyQjtBQUVqQyxNQUFNLDZCQUE2QjtBQW1JNUIsU0FBUyx1QkFBNkI7QUFDM0MsUUFBTSxpQkFBZ0Q7QUFBQSxJQUNwRCxTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQ0osYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssQ0FBQztBQUFBLElBQ04sVUFBVTtBQUFBLEVBQ1o7QUFFQSxRQUFNLGtCQUFrQixXQUFXO0FBRW5DLE1BQUksQ0FBQyxpQkFBaUI7QUFDcEIsZUFBVyxVQUFVO0FBQ3JCO0FBQUEsRUFDRjtBQUVBLE1BQUksZ0JBQWdCLFVBQVUsTUFBTTtBQUNsQztBQUFBLEVBQ0Y7QUFFQSxRQUFNLHdCQUF3QjtBQUU5QixhQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLGNBQWMsR0FBRztBQUN6RCwwQkFBc0IsR0FBRyxNQUFNO0FBQUEsRUFDakM7QUFFQSx3QkFBc0IsU0FBUyxJQUFJO0FBQ3JDO0FBc0JPLFNBQVMscUJBQXFCLG9CQUF1QyxRQUFjO0FBQ3hGLG9CQUFrQixpQkFBaUIsa0JBQWtCLElBQUkscUJBQXFCO0FBQzlFLG9CQUFrQixZQUFZLGtCQUFrQixJQUFJLGdCQUFnQjtBQUN0RTtBQVlPLFNBQVMsU0FBUyxVQUE0QjtBQUNuRCxTQUFPO0FBQ1Q7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
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjdXN0b20gZXNidWlsZCBwbHVnaW4gdGhhdCBwcmVwcm9jZXNzZXMgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBmaWxlcyBmb3IgYW55IGJ1aWxkIHRhcmdldC5cbiAqXG4gKiBAcmVtYXJrc1xuICogV2UgY2Fubm90IHVzZSBgLmAgaW5zdGVhZCBvZiBgKGRvdClgIGluIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiBiZWNhdXNlIHRoZSBmaWxlIGl0c2VsZiBpcyBwcmVwcm9jZXNzZWQgd2l0aCB0aGUgc2FtZSBydWxlLlxuICpcbiAqIGBpbml0Q2pzYCwgYGluaXRFc21gIGFuZCB0aGUgc2hpbXMgdGhleSBjYWxsIGFyZSBzdHJpbmdpZmllZCB3aXRoIGBTdHJpbmcoZm4pYCBhbmQgaW5qZWN0ZWQgaW50byBldmVyeVxuICogYnVpbHQgYnVuZGxlIGFzIGFuIGVzYnVpbGQgYmFubmVyLCBzbyB0aGV5IG11c3QgYmUgcmVhY2hhYmxlIGZyb20gb25lIGFub3RoZXIgYnkgQkFSRSBpZGVudGlmaWVyLiBBbiB1bmJ1bmRsZWRcbiAqIGJ1aWxkIChgYnVuZGxlOiBmYWxzZWAsIG9uZSBvdXRwdXQgcGVyIHNvdXJjZSkgZ2V0cyBubyBiYW5uZXI6IGVhY2ggZW1pdHRlZCBtb2R1bGUgZ2V0cyBhIHByZWFtYmxlIGhvbGRpbmcgb25seSB0aGVcbiAqIHNoaW1zIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIGEgbW9kdWxlIHRoYXQgbmVlZHMgbm9uZSBnZXRzIG5vdGhpbmcuIFRoYXQgaXNcbiAqIHdoeSB0aGV5IGFsbCBsaXZlIGluIHRoaXMgbW9kdWxlOiBlc2J1aWxkIGNvbXBpbGVzIGEgY3Jvc3MtbW9kdWxlIGNhbGwgdG8gYCgwLCBpbXBvcnRfbW9kdWxlLmZuKSjigKYpYCxcbiAqIHdoaWNoIHdvdWxkIG5hbWUgYSBiaW5kaW5nIHRoZSBlbWl0dGVkIGJ1bmRsZSBkb2VzIG5vdCBoYXZlLiBTYW1lLW1vZHVsZSByZWZlcmVuY2VzIHN0YXkgYmFyZSwgYW5kXG4gKiB7QGxpbmsgbWFrZVByZXByb2Nlc3NCYW5uZXJ9IHNlcmlhbGl6ZXMgdGhlIHNoaW1zIGFsb25nc2lkZSB0aGUgYGluaXRgIGZ1bmN0aW9uIHNvIHRoZXkgYXJlIGluIHNjb3BlIHRoZXJlLiBBIHNoaW1cbiAqIHRoYXQgaXMgbm90IHNlcmlhbGl6ZWQgc2lsZW50bHkgZGVncmFkZXMgdG8gd2hhdGV2ZXIgdGhlIGNvbnN1bWVyJ3MgZ2xvYmFsIHNjb3BlIGhvbGRzIHVuZGVyIHRoYXQgbmFtZSDigJQgd2hpY2hcbiAqIGlzIGhvdyBgX19uYW1lYCB1c2VkIHRvIGVuZCB1cCBob2xkaW5nIGB3aW5kb3cubmFtZWAuXG4gKlxuICogQSBjYWxsZXIgdGhhdCBuZWVkcyBtb3JlIGluIHRoZSBiYW5uZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gYnVpbGRlciBwYXRjaGVzIGByZXF1aXJlYCkgaGFuZHMgaW5cbiAqIHtAbGluayBQcmVwcm9jZXNzUGx1Z2luT3B0aW9ucy5hZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uc30uIEVhY2ggb25lIGlzIHNlcmlhbGl6ZWQgYXMgaXRzIE9XTiBpbW1lZGlhdGVseVxuICogaW52b2tlZCBmdW5jdGlvbiBhZnRlciB0aGUgc2hhcmVkIHNjb3BlLCBzbyBpdCBtdXN0IGJlIHNlbGYtY29udGFpbmVkOiBpdCBjYW5ub3Qgc2VlIHRoZSBzaGltcywgYW5kIGNhbGxpbmcgb25lXG4gKiBmcm9tIGFub3RoZXIgbW9kdWxlIHdvdWxkIGhpdCBleGFjdGx5IHRoZSBjcm9zcy1tb2R1bGUgdHJhcCBhYm92ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHR5cGUge1xuICBPdXRwdXRGaWxlLFxuICBQbHVnaW5cbn0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgdHlwZSB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgdHlwZSB7XG4gIElkZW50aWZpZXIsXG4gIE5vZGVcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7XG4gIEZ1bmN0aW9uSGFuZGxpbmdNb2RlLFxuICB0b0pzb25cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBtYWtlVmFsaWRWYXJpYWJsZU5hbWUsXG4gIHJlcGxhY2VBbGxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU291cmNlRmlsZSxcbiAgZm9yRWFjaENoaWxkLFxuICBpc0JpbmRpbmdFbGVtZW50LFxuICBpc0NhbGxFeHByZXNzaW9uLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRXhwb3J0RGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc0lkZW50aWZpZXIsXG4gIGlzSW1wb3J0Q2xhdXNlLFxuICBpc0ltcG9ydERlY2xhcmF0aW9uLFxuICBpc0ltcG9ydFNwZWNpZmllcixcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNOYW1lc3BhY2VJbXBvcnQsXG4gIGlzUGFyYW1ldGVyLFxuICBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbixcbiAgaXNQcm9wZXJ0eUFzc2lnbm1lbnQsXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIGlzVmFyaWFibGVEZWNsYXJhdGlvbixcbiAgU2NyaXB0S2luZCxcbiAgU2NyaXB0VGFyZ2V0LFxuICBTeW50YXhLaW5kXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5jb25zdCBESVNQT1NFX1NZTUJPTF9OQU1FUyA9IG5ldyBTZXQoWydhc3luY0Rpc3Bvc2UnLCAnZGlzcG9zZSddKTtcbmNvbnN0IElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCA9ICcvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCc7XG5jb25zdCBKU19PVVRQVVRfUkVHX0VYUCA9IC9cXC5bY21dP2pzJC87XG4vLyBFc2J1aWxkJ3MgaGVscGVyIGJlaGluZCBhIGxvd2VyZWQgYHVzaW5nYCwgd2hpY2ggbG9va3MgdXAgYFN5bWJvbC5kaXNwb3NlYCBieSBuYW1lLlxuY29uc3QgS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FID0gJ19fa25vd25TeW1ib2wnO1xuLy8gQSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoLCBvciBhIGBub2RlOmAgYnVpbHQtaW46IGFueXRoaW5nIGVsc2UgbmFtZXMgYSBwYWNrYWdlLlxuY29uc3QgTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAgPSAvXig/OlxcLnxcXC98bm9kZTopLztcblxuZW51bSBJZGVudGlmaWVyVXNhZ2Uge1xuICBCaW5kaW5nID0gJ2JpbmRpbmcnLFxuICBNZW1iZXIgPSAnbWVtYmVyJyxcbiAgUmVhZCA9ICdyZWFkJ1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBtYWtlUHJlcHJvY2Vzc0Jhbm5lcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGFmdGVyIHRoZSBzaGFyZWQgc2hpbXMsIGVhY2ggaW52b2tlZCBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnM/OiByZWFkb25seSAoKCkgPT4gdm9pZClbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByZXByb2Nlc3NQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXByb2Nlc3NQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGludG8gdGhlIGJhbm5lciBhZnRlciB0aGUgc2hhcmVkIHNoaW1zLCBlYWNoIGludm9rZWQgb25jZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRWFjaCBmdW5jdGlvbiBpcyBlbWl0dGVkIGFzIGAoJHtTdHJpbmcoZm4pfSkoKTtgLCBzbyBpdCBtYXkgcmVmZXJlbmNlIG9ubHkgZ2xvYmFscyBhbmQgd2hhdCBpdCBkZWNsYXJlcyBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucz86IHJlYWRvbmx5ICgoKSA9PiB2b2lkKVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IHJlcGxhY2VzIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgaW4gYSBDb21tb25KUyBidWlsZC4gU2VyaWFsaXplZCBpbnRvXG4gICAqIGV2ZXJ5IGZpbGUgdGhhdCByZWFkcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGZpbGUgVVJMIG9mIGBfX2ZpbGVuYW1lYCwgb3IgYGxvY2F0aW9uLmhyZWZgIHdoZXJlIHRoZXJlIGlzIG5vIGBfX2ZpbGVuYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlcj86ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBZGRNb2R1bGVQcmVhbWJsZXNQYXJhbXMge1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW107XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0cHV0RmlsZXM6IHJlYWRvbmx5IE91dHB1dEZpbGVbXTtcbn1cblxuLyoqXG4gKiBBIGJyb3dzZXItZmxhdm9yZWQgc3RhbmQtaW4gZm9yIE5vZGUncyBgcHJvY2Vzc2AgZ2xvYmFsLlxuICovXG5pbnRlcmZhY2UgQnJvd3NlclByb2Nlc3MgZXh0ZW5kcyBQYXJ0aWFsPE5vZGVKUy5Qcm9jZXNzPiB7XG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgcHJvY2VzcyBhcyBhIGJyb3dzZXIgb25lLiBUaGUgYnVuZGxlZCBgZGVidWdgIHBhY2thZ2Ugc2VsZWN0cyBpdHMgYnJvd3NlciBlbnRyeSBwb2ludCBvbiBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGJyb3dzZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIHRoZSBgU3ltYm9sYCBjb25zdHJ1Y3RvciB7QGxpbmsgZW5zdXJlRGlzcG9zZVN5bWJvbHN9IHJlYWRzIGFuZCB3cml0ZXMsIHdpdGggdGhlIHR3byBkaXNwb3NlXG4gKiBzeW1ib2xzIG9wdGlvbmFsIGJlY2F1c2UgYW4gZW5naW5lIHdpdGhvdXQgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBkb2VzIG5vdCBoYXZlIHRoZW0uXG4gKi9cbmludGVyZmFjZSBEaXNwb3NlU3ltYm9sSG9zdCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIE1pc3NpbmcgZGlzcG9zYWwgc3ltYm9scyBhcmUgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxuICBhc3luY0Rpc3Bvc2U/OiBzeW1ib2w7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIE1pc3NpbmcgZGlzcG9zYWwgc3ltYm9scyBhcmUgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxuICBkaXNwb3NlPzogc3ltYm9sO1xuICByZWFkb25seSBmb3I6IChrZXk6IHN0cmluZykgPT4gc3ltYm9sO1xufVxuXG5pbnRlcmZhY2UgRXNtTW9kdWxlIHtcbiAgcmVhZG9ubHkgX19lc01vZHVsZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGVmYXVsdDogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBUaGUgc2xpY2Ugb2YgYSBicm93c2VyIGdsb2JhbCB7QGxpbmsgZ2V0Q2pzSW1wb3J0TWV0YVVybH0gcmVhZHMsIG9wdGlvbmFsIGJlY2F1c2UgYSBub24tYnJvd3NlciBob3N0IGhhcyBub25lLlxuICovXG5pbnRlcmZhY2UgSW5zZXJ0UHJlYW1ibGVQYXJhbXMge1xuICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJlYW1ibGU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIExvY2F0aW9uSG9zdCB7XG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogUGFnZUxvY2F0aW9uO1xufVxuXG5pbnRlcmZhY2UgTW9kdWxlU2hpbU5lZWRzIHtcbiAgcmVhZG9ubHkgaXNCcm93c2VyUHJvY2Vzc05lZWRlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNEaXNwb3NlU3ltYm9sc05lZWRlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNOYW1lTmVlZGVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGFnZUxvY2F0aW9uIHtcbiAgcmVhZG9ubHkgaHJlZjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU291cmNlTWFwV2l0aE1hcHBpbmdzIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVhZG9ubHktaW50ZXJmYWNlLW1lbWJlcnMgLS0gQWRkaW5nIGEgcHJlYW1ibGUgc2hpZnRzIHRoZSBzb3VyY2UgbWFwIG1hcHBpbmdzLlxuICBtYXBwaW5nczogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVXJsTW9kdWxlIHtcbiAgcmVhZG9ubHkgcGF0aFRvRmlsZVVSTDogdHlwZW9mIHBhdGhUb0ZpbGVVUkw7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgYnVuZGxlIHJ1bnMgYWdhaW5zdCBhIGBwcm9jZXNzYCBnbG9iYWwgdGhhdCBicm93c2VyLXRhcmdldGluZyBwYWNrYWdlcyByZWNvZ25pemUuXG4gKlxuICogQHJlbWFya3NcbiAqIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIsIHNvIGl0IG5ldmVyIHJ1bnMgaW4gdGhlIGJ1aWxkZXIgcHJvY2VzcyDigJQgYnV0IGl0IGlzIGFuIG9yZGluYXJ5XG4gKiBmdW5jdGlvbiBoZXJlLCBzbyBpdCBpcyB1bml0LXRlc3RlZCBkaXJlY3RseSByYXRoZXIgdGhhbiBieSBldmFsdWF0aW5nIHRoZSBiYW5uZXIgdGV4dC5cbiAqXG4gKiBGaWxscyBpbiB0aGUga2V5cyBNSVNTSU5HIGZyb20gYSBob3N0LXByb3ZpZGVkIGBwcm9jZXNzYCByYXRoZXIgdGhhbiByZXBsYWNpbmcgb3Igc2tpcHBpbmcgaXQuIE9ic2lkaWFuXG4gKiBNb2JpbGUgZXhwb3NlcyBhIHBhcnRpYWwgYHByb2Nlc3NgLCBhbmQgdGhlIHdob2xlLW9iamVjdCBndWFyZHMgdGhpcyByZXBsYWNlZCAoYGlmIChnbG9iYWxUaGlzLnByb2Nlc3MpIHtcbiAqIHJldHVybjsgfWAgLyBgZ2xvYmFsVGhpc1JlY29yZFsncHJvY2VzcyddID8/PSDigKZgKSB0b29rIHRoYXQgYXMgXCJhbHJlYWR5IHNoaW1tZWRcIiwgc28gYGJyb3dzZXJgIG5ldmVyXG4gKiBsYW5kZWQuIFRoZSBidW5kbGVkIGBkZWJ1Z2AgcGFja2FnZSB0aGVuIHNlbGVjdGVkIGl0cyBOb2RlIGVudHJ5IHBvaW50LCB3aGljaCBjYWxsc1xuICogYHJlcXVpcmUoJ3V0aWwnKS5kZXByZWNhdGUoKWAgYXQgbW9kdWxlIHRvcCBsZXZlbCwgYW5kIG9uIG1vYmlsZSB0aGUgcGF0Y2hlZCBgcmVxdWlyZWAgcmV0dXJucyBge31gIOKAlCBzb1xuICogdGhlIHBsdWdpbiB0aHJldyBiZWZvcmUgaXRzIGBvbmxvYWRgIHJhbi5cbiAqXG4gKiBBIHJlYWwgTm9kZSBvciBFbGVjdHJvbiBgcHJvY2Vzc2AgaXMgbGVmdCBjb21wbGV0ZWx5IHVudG91Y2hlZC4gYHByb2Nlc3MudmVyc2lvbnMubm9kZWAgaXMgdGhlIHNpZ25hbCBmb3JcbiAqIGl0LCBhbmQgaXQgaXMgc2VsZi1jb250YWluZWQsIHNvIGl0IGFsc28gaG9sZHMgaW4gdGhlIE5vZGUgQ0xJIGJ1bmRsZXMgdGhpcyBiYW5uZXIgaXMgZW1pdHRlZCBpbnRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQnJvd3NlclByb2Nlc3MoKTogdm9pZCB7XG4gIGNvbnN0IGJyb3dzZXJQcm9jZXNzOiBHZW5lcmljT2JqZWN0PEJyb3dzZXJQcm9jZXNzPiA9IHtcbiAgICBicm93c2VyOiB0cnVlLFxuICAgIGN3ZCgpIHtcbiAgICAgIHJldHVybiAnLyc7XG4gICAgfSxcbiAgICBlbnY6IHt9LFxuICAgIHBsYXRmb3JtOiAnYW5kcm9pZCdcbiAgfTtcblxuICBjb25zdCBleGlzdGluZ1Byb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3MgYXMgUGFydGlhbDxOb2RlSlMuUHJvY2Vzcz4gfCB1bmRlZmluZWQ7XG5cbiAgaWYgKCFleGlzdGluZ1Byb2Nlc3MpIHtcbiAgICBnbG9iYWxUaGlzLnByb2Nlc3MgPSBicm93c2VyUHJvY2VzcyBhcyBOb2RlSlMuUHJvY2VzcztcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZXhpc3RpbmdQcm9jZXNzLnZlcnNpb25zPy5ub2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZXhpc3RpbmdQcm9jZXNzUmVjb3JkID0gZXhpc3RpbmdQcm9jZXNzIGFzIEdlbmVyaWNPYmplY3Q7XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYnJvd3NlclByb2Nlc3MpKSB7XG4gICAgZXhpc3RpbmdQcm9jZXNzUmVjb3JkW2tleV0gPz89IHZhbHVlO1xuICB9XG5cbiAgZXhpc3RpbmdQcm9jZXNzUmVjb3JkWydicm93c2VyJ10gPSB0cnVlO1xufVxuXG4vKipcbiAqIE1ha2VzIGBTeW1ib2wuZGlzcG9zZWAgYW5kIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCBleGlzdCwgZmFsbGluZyBiYWNrIHRvIHRoZSByZWdpc3RyeSBzeW1ib2xzIGVzYnVpbGQnc1xuICogYHVzaW5nYCBoZWxwZXJzIGxvb2sgdXAuXG4gKlxuICogQHBhcmFtIHN5bWJvbENvbnN0cnVjdG9yIC0gVGhlIGBTeW1ib2xgIGNvbnN0cnVjdG9yIHRvIHBhdGNoLiBEZWZhdWx0cyB0byB0aGUgYW1iaWVudCBvbmU7IHRoZSBwYXJhbWV0ZXJcbiAqIGV4aXN0cyBzbyBhIHRlc3QgY2FuIGhhbmQgaW4gYW4gZW5naW5lIHRoYXQgbGFja3MgdGhlIHdlbGwta25vd24gc3ltYm9scy5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lci4gQSBkaXNwb3NhYmxlIGRlY2xhcmVzIGl0cyBtZXRob2QgdW5kZXIgdGhlIExJVEVSQUwga2V5XG4gKiBgW1N5bWJvbC5kaXNwb3NlXWAsIHdoaWxlIGVzYnVpbGQgbG93ZXJzIGV2ZXJ5IGB1c2luZ2AgdG8gYSBsb29rdXAgdGhyb3VnaCBgX19rbm93blN5bWJvbCgnZGlzcG9zZScpYCxcbiAqIHdoaWNoIGZhbGxzIGJhY2sgdG8gYFN5bWJvbC5mb3IoJ1N5bWJvbC5kaXNwb3NlJylgIHdoZW4gdGhlIGVuZ2luZSBoYXMgbm8gd2VsbC1rbm93biBzeW1ib2wuIE9uIHN1Y2ggYW5cbiAqIGVuZ2luZSB0aGUgbGl0ZXJhbCBrZXkgZXZhbHVhdGVzIHRvIGB1bmRlZmluZWRgLCB0aGUgbWV0aG9kIGxhbmRzIHVuZGVyIHRoZSBzdHJpbmcgYFwidW5kZWZpbmVkXCJgLCBhbmRcbiAqIGV2ZXJ5IGB1c2luZ2Agb2YgaXQgdGhyb3dzIGBPYmplY3Qgbm90IGRpc3Bvc2FibGVgLiBGaWxsaW5nIHRoZSB3ZWxsLWtub3duIHNsb3Qgd2l0aCB0aGF0IHNhbWUgcmVnaXN0cnlcbiAqIHN5bWJvbCBtYWtlcyBib3RoIHNpZGVzIG5hbWUgb25lIGtleSBvbiBldmVyeSBlbmdpbmUuIEEgaG9zdCB0aGF0IGFscmVhZHkgaGFzIHRoZSBzeW1ib2wgaXMgbGVmdFxuICogdW50b3VjaGVkOiBgPz89YCBuZXZlciByZWFjaGVzIHRoZSBhc3NpZ25tZW50LCB3aGljaCB0aGUgaG9zdCdzIG5vbi13cml0YWJsZSBwcm9wZXJ0eSB3b3VsZCByZWZ1c2UuXG4gKlxuICogVGhlIGRlZmF1bHQgbmFtZXMgYFN5bWJvbGAgYmFyZSBvbiBwdXJwb3NlOiBpdCBleGlzdHMgb24gZXZlcnkgZW5naW5lIHRoaXMgcnVucyBvbiwgYW5kIGEgYmFyZSByZWZlcmVuY2VcbiAqIHJlc29sdmVzIGFnYWluc3Qgd2hhdGV2ZXIgc2NvcGUgdGhlIGJhbm5lciBpcyBldmFsdWF0ZWQgaW4sIGV4YWN0bHkgYXMgdGhlIGJ1bmRsZSdzIG93blxuICogYFtTeW1ib2wuZGlzcG9zZV1gIGtleXMgZG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVEaXNwb3NlU3ltYm9scyhzeW1ib2xDb25zdHJ1Y3RvcjogRGlzcG9zZVN5bWJvbEhvc3QgPSBTeW1ib2wpOiB2b2lkIHtcbiAgc3ltYm9sQ29uc3RydWN0b3IuYXN5bmNEaXNwb3NlID8/PSBzeW1ib2xDb25zdHJ1Y3Rvci5mb3IoJ1N5bWJvbC5hc3luY0Rpc3Bvc2UnKTtcbiAgc3ltYm9sQ29uc3RydWN0b3IuZGlzcG9zZSA/Pz0gc3ltYm9sQ29uc3RydWN0b3IuZm9yKCdTeW1ib2wuZGlzcG9zZScpO1xufVxuXG4vKipcbiAqIFJldHVybnMgaXRzIGFyZ3VtZW50IHVuY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0gJHVua25vd24gLSBUaGUgdmFsdWUgdG8gcmV0dXJuLlxuICogQHJldHVybnMgVGhlIHZhbHVlIHBhc3NlZCBpbi5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciwgd2hlcmUgaXQgc3RhbmRzIGluIGZvciBlc2J1aWxkJ3MgYF9fbmFtZWAgaGVscGVyIOKAlCB3aGljaCBuYW1lcyBhXG4gKiBmdW5jdGlvbiBhbmQgcmV0dXJucyBpdCDigJQgZm9yIGJ1bmRsZXMgdGhhdCByZWZlcmVuY2UgdGhlIGhlbHBlciB3aXRob3V0IGVtaXR0aW5nIHRoZWlyIG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlZXBOYW1lKCR1bmtub3duOiB1bmtub3duKTogdW5rbm93biB7XG4gIHJldHVybiAkdW5rbm93bjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGJhbm5lciBpbmplY3RlZCBhdCB0aGUgdG9wIG9mIGV2ZXJ5IGVtaXR0ZWQgYnVuZGxlLlxuICpcbiAqIGBTdHJpbmcoZm4pYCBjYXB0dXJlcyBvbmx5IHRoZSBmdW5jdGlvbidzIG93biBib2R5LCBzbyBldmVyeSBzaGltIHRoZSBgaW5pdGAgZnVuY3Rpb24gY2FsbHMgaGFzIHRvIGJlXG4gKiBzZXJpYWxpemVkIG5leHQgdG8gaXQgYW5kIHdyYXBwZWQgaW4gb25lIHNoYXJlZCBzY29wZTsgb3RoZXJ3aXNlIHRoZSBjYWxsIGl0IG1ha2VzIHJlc29sdmVzIGFnYWluc3QgdGhlXG4gKiBjb25zdW1lcidzIGdsb2JhbCBzY29wZSBhdCBydW50aW1lLiBTZWUgdGhpcyBmaWxlJ3MgYEBmaWxlYCByZW1hcmtzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGJhbm5lciBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIGJhbm5lciBzb3VyY2UgdG8gcHJlcGVuZCB0byB0aGUgZW1pdHRlZCBidW5kbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUHJlcHJvY2Vzc0Jhbm5lcihvcHRpb25zOiBNYWtlUHJlcHJvY2Vzc0Jhbm5lck9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgPSBbXSwgaXNFc20gPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3Qgc2hpbXMgPSBpc0VzbSA/IFtlbnN1cmVEaXNwb3NlU3ltYm9scywgZW5zdXJlQnJvd3NlclByb2Nlc3NdIDogW2Vuc3VyZURpc3Bvc2VTeW1ib2xzLCBlbnN1cmVCcm93c2VyUHJvY2Vzcywga2VlcE5hbWVdO1xuICBjb25zdCBpbml0ID0gaXNFc20gPyBpbml0RXNtIDogaW5pdENqcztcbiAgY29uc3QgYWRkaXRpb25hbEluaXRzID0gYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMubWFwKChmdW5jdGlvbl8pID0+IGAoJHtTdHJpbmcoZnVuY3Rpb25fKX0pKCk7XFxuYCkuam9pbignJyk7XG4gIHJldHVybiBgXFxuKGZ1bmN0aW9uICgpIHtcXG4ke3NoaW1zLm1hcChTdHJpbmcpLmpvaW4oJ1xcblxcbicpfVxcblxcbigke1N0cmluZyhpbml0KX0pKCk7XFxufSkoKTtcXG4ke2FkZGl0aW9uYWxJbml0c31gO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBsdWdpbidzIHNldHVwIG5lZWRzIGEgbGl2ZSBlc2J1aWxkIGNvbnRleHQsIGFuZCB0aGUgZnVuY3Rpb25zIGluIHRoZSBsYXRlciBpZ25vcmVkIHJhbmdlcyBhcmUgc2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciBhbmQgc28gcnVuIGluc2lkZSB0aGUgYnVpbHQgYnVuZGxlLCBuZXZlciBpbiB0aGlzIHByb2Nlc3MuIFRoZSBzaGltcyBhYm92ZSBhcmUgZGVsaWJlcmF0ZWx5IE5PVCBpZ25vcmVkOiB0aGV5IGFyZSBvcmRpbmFyeSBmdW5jdGlvbnMgaGVyZSBhbmQgYXJlIHVuaXQtdGVzdGVkIGRpcmVjdGx5LCBhbmQgbmVpdGhlciBhcmUgdGhlIHVuYnVuZGxlZC1idWlsZCBoZWxwZXJzLCB3aGljaCB0aGUgdGVzdHMgZHJpdmUgdGhyb3VnaCBhIHN0dWIgYnVpbGQuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IHByZXByb2Nlc3NlcyBKYXZhU2NyaXB0IGFuZCBUeXBlU2NyaXB0IGZpbGVzLlxuICpcbiAqIFRoaXMgcGx1Z2luIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdGFza3M6XG4gKiAtIFJlcGxhY2VzIGluc3RhbmNlcyBvZiBgaW1wb3J0KGRvdCltZXRhKGRvdCl1cmxgIHdpdGggYSBDb21tb25KUy1jb21wYXRpYmxlIGBfX2ZpbGVuYW1lYCBhbHRlcm5hdGl2ZS5cbiAqIC0gTW9kaWZpZXMgdGhlIGBzb3VyY2VNYXBwaW5nVVJMYCBjb21tZW50IHNvIGEgdGVtcGxhdGUgbGl0ZXJhbCBlbmRpbmcgYSBmaWxlIGRvZXMgbm90IHN3YWxsb3cgaXQuXG4gKiAtIEFkZHMgYSBiYXNpYyBgcHJvY2Vzc2Agb2JqZWN0IHRvIHRoZSBnbG9iYWwgc2NvcGUgaWYgYHByb2Nlc3NgIGlzIHJlZmVyZW5jZWQgYnV0IG5vdCBkZWZpbmVkLlxuICogLSBGaWxscyBpbiBgU3ltYm9sLmRpc3Bvc2VgIC8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIG9uIGVuZ2luZXMgdGhhdCBsYWNrIHRoZW0sIHNvIGB1c2luZ2Agd29ya3MgdGhlcmUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGx1Z2luIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBBbiBlc2J1aWxkIGBQbHVnaW5gIG9iamVjdCB0aGF0IGhhbmRsZXMgdGhlIHByZXByb2Nlc3NpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwcm9jZXNzUGx1Z2luKG9wdGlvbnM6IFByZXByb2Nlc3NQbHVnaW5PcHRpb25zID0ge30pOiBQbHVnaW4ge1xuICBjb25zdCB7IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zID0gW10sIGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlciA9IGdldENqc0ltcG9ydE1ldGFVcmwsIGlzRXNtID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlcGxhY2VtZW50cyA9IGlzRXNtXG4gICAgPyB7fVxuICAgIDoge1xuICAgICAgW1xuICAgICAgICByZXBsYWNlQWxsKHtcbiAgICAgICAgICAkc3RyaW5nOiAnaW1wb3J0KGRvdCltZXRhKGRvdCl1cmwnLFxuICAgICAgICAgIHJlcGxhY2VyOiAnLicsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6ICcoZG90KSdcbiAgICAgICAgfSlcbiAgICAgIF06IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlclxuICAgIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAncHJlcHJvY2VzcycsXG4gICAgc2V0dXAoYnVpbGQpOiB2b2lkIHtcbiAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmRlZmluZSA/Pz0ge307XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lW2tleV0gPSBgX18ke21ha2VWYWxpZFZhcmlhYmxlTmFtZShrZXkpfWA7XG4gICAgICB9XG5cbiAgICAgIGlmIChidWlsZC5pbml0aWFsT3B0aW9ucy5idW5kbGUgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIE9uZSBvdXRwdXQgcGVyIHNvdXJjZTogZWFjaCBtb2R1bGUgZ2V0cyBvbmx5IHRoZSBzaGltcyBpdHMgb3duIGNvZGUgbmVlZHMsIHNvIGEgcGFnZSBpbXBvcnRpbmcgYSBwdXJlXG4gICAgICAgIC8vIG1vZHVsZSBvZiBhIGxpYnJhcnkgaXMgbGVmdCB3aXRoIGl0cyBnbG9iYWxzIHVudG91Y2hlZC5cbiAgICAgICAgY29uc3QgbGVhZGluZ0Jhbm5lciA9IGJ1aWxkLmluaXRpYWxPcHRpb25zLmJhbm5lcj8uWydqcyddID8/ICcnO1xuICAgICAgICBidWlsZC5vbkVuZCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgYWRkTW9kdWxlUHJlYW1ibGVzKHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGxlYWRpbmdCYW5uZXIsIG91dHB1dEZpbGVzOiByZXN1bHQub3V0cHV0RmlsZXMgPz8gW10gfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyID8/PSB7fTtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyWydqcyddID8/PSAnJztcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyWydqcyddICs9IG1ha2VQcmVwcm9jZXNzQmFubmVyKHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGlzRXNtIH0pO1xuICAgICAgfVxuXG4gICAgICBidWlsZC5vbkxvYWQoeyBmaWx0ZXI6IC9cXC4oPzpqc3x0c3xjanN8bWpzfGN0c3xtdHMpJC8gfSwgYXN5bmMgKCRhcmd1bWVudHMpID0+IHtcbiAgICAgICAgbGV0IGNvbnRlbnRzID0gYXdhaXQgcmVhZEZpbGUoJGFyZ3VtZW50cy5wYXRoLCAndXRmLTgnKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXBsYWNlbWVudHMpKSB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGUgPSBgX18ke21ha2VWYWxpZFZhcmlhYmxlTmFtZShrZXkpfWA7XG4gICAgICAgICAgaWYgKCFjb250ZW50cy5pbmNsdWRlcyhrZXkpIHx8IGNvbnRlbnRzLmluY2x1ZGVzKGB2YXIgJHt2YXJpYWJsZX1gKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gYCgke1N0cmluZyh2YWx1ZSl9KSgpYCA6IHRvSnNvbih2YWx1ZSwgeyBmdW5jdGlvbkhhbmRsaW5nTW9kZTogRnVuY3Rpb25IYW5kbGluZ01vZGUuRnVsbCB9KTtcbiAgICAgICAgICBjb250ZW50cyA9IGB2YXIgJHt2YXJpYWJsZX0gPSBnbG9iYWxUaGlzWycke2tleX0nXSA/PyAke3ZhbHVlU3RyaW5nfTtcXG4ke2NvbnRlbnRzfWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIQUNLOiBUaGUgJHsnJ30gcGFydCBpcyB1c2VkIHRvIGVuc3VyZSBPYnNpZGlhbiBsb2FkcyB0aGUgcGx1Z2luIHByb3Blcmx5LFxuICAgICAgICAvLyBPdGhlcndpc2UsIGl0IHN0b3BzIGxvYWRpbmcgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNvdXJjZU1hcHBpbmdVUkwgY29tbWVudC5cblxuICAgICAgICBjb250ZW50cyA9IHJlcGxhY2VBbGwoe1xuICAgICAgICAgICRzdHJpbmc6IGNvbnRlbnRzLFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgLS0gSXQgaXMgaW50ZW50aW9uYWwsIHRoZSBzdHJpbmcgbG9va3MgbGlrZSBhIHRlbXBsYXRlIGxpdGVyYWwsIGJ1dCBpdCBpcyBub3QuXG4gICAgICAgICAgcmVwbGFjZXI6ICdgXFxuLy8jJHtcXCdcXCd9IHNvdXJjZU1hcHBpbmdVUkwnLFxuICAgICAgICAgIHNlYXJjaFZhbHVlOiAvYFxccj9cXG5cXC9cXC8jIHNvdXJjZU1hcHBpbmdVUkwvZ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnRzLFxuICAgICAgICAgIGxvYWRlcjogJ3RzJ1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4vKipcbiAqIFByZXBlbmRzIHRvIGVhY2ggZW1pdHRlZCBtb2R1bGUgdGhlIHByZWFtYmxlIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIG5vdGhpbmcgd2hlbiBpdCBuZWVkcyBub25lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZW1pdHRlZCBtb2R1bGVzLCB0aGUgYmFubmVyIHRoZSBjYWxsZXIgYWxyZWFkeSBwdXQgZmlyc3QsIGFuZCB0aGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMuXG4gKi9cbmZ1bmN0aW9uIGFkZE1vZHVsZVByZWFtYmxlcyhwYXJhbXM6IEFkZE1vZHVsZVByZWFtYmxlc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zLCBsZWFkaW5nQmFubmVyLCBvdXRwdXRGaWxlcyB9ID0gcGFyYW1zO1xuICBmb3IgKGNvbnN0IG91dHB1dEZpbGUgb2Ygb3V0cHV0RmlsZXMpIHtcbiAgICBpZiAoIUpTX09VVFBVVF9SRUdfRVhQLnRlc3Qob3V0cHV0RmlsZS5wYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29kZSA9IG91dHB1dEZpbGUudGV4dDtcbiAgICBjb25zdCBwcmVhbWJsZSA9IG1ha2VNb2R1bGVQcmVhbWJsZShnZXRNb2R1bGVTaGltTmVlZHMoY29kZSksIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zKTtcbiAgICBpZiAocHJlYW1ibGUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBvdXRwdXRGaWxlLmNvbnRlbnRzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGluc2VydFByZWFtYmxlKHsgY29kZSwgbGVhZGluZ0Jhbm5lciwgcHJlYW1ibGUgfSkpO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgbW9kdWxlLCBzZWUgYWJvdmUuICovXG5mdW5jdGlvbiBnZXRDanNJbXBvcnRNZXRhVXJsKCk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBsb2NhbFJlcXVpcmUgPSByZXF1aXJlO1xuICAgIGNvbnN0IHVybCA9IGxvY2FsUmVxdWlyZSgnbm9kZTp1cmwnKSBhcyBVcmxNb2R1bGU7XG4gICAgaWYgKHR5cGVvZiB1cmwucGF0aFRvRmlsZVVSTCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHVybC5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpLmhyZWY7XG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbGJhY2sgdG8gdGhlIHBhZ2UgVVJMLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGVudmlyb25tZW50IGlzIHVua25vd24uXG4gIHJldHVybiAoZ2xvYmFsVGhpcyBhcyBMb2NhdGlvbkhvc3QpLmxvY2F0aW9uPy5ocmVmID8/ICcnO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cblxuZnVuY3Rpb24gZ2V0SWRlbnRpZmllclVzYWdlKG5vZGU6IElkZW50aWZpZXIpOiBJZGVudGlmaWVyVXNhZ2Uge1xuICBjb25zdCB7IHBhcmVudCB9ID0gbm9kZTtcbiAgaWYgKFxuICAgIChpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihwYXJlbnQpIHx8IGlzUHJvcGVydHlBc3NpZ25tZW50KHBhcmVudCkgfHwgaXNNZXRob2REZWNsYXJhdGlvbihwYXJlbnQpIHx8IGlzUHJvcGVydHlEZWNsYXJhdGlvbihwYXJlbnQpXG4gICAgICB8fCBpc0dldEFjY2Vzc29yRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc1NldEFjY2Vzc29yRGVjbGFyYXRpb24ocGFyZW50KSlcbiAgICAmJiBwYXJlbnQubmFtZSA9PT0gbm9kZVxuICApIHtcbiAgICByZXR1cm4gSWRlbnRpZmllclVzYWdlLk1lbWJlcjtcbiAgfVxuXG4gIHJldHVybiAoaXNWYXJpYWJsZURlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNGdW5jdGlvbkRlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNDbGFzc0RlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNQYXJhbWV0ZXIocGFyZW50KSB8fCBpc0JpbmRpbmdFbGVtZW50KHBhcmVudClcbiAgICAgIHx8IGlzSW1wb3J0Q2xhdXNlKHBhcmVudCkgfHwgaXNJbXBvcnRTcGVjaWZpZXIocGFyZW50KSB8fCBpc05hbWVzcGFjZUltcG9ydChwYXJlbnQpKVxuICAgICAgJiYgcGFyZW50Lm5hbWUgPT09IG5vZGVcbiAgICA/IElkZW50aWZpZXJVc2FnZS5CaW5kaW5nXG4gICAgOiBJZGVudGlmaWVyVXNhZ2UuUmVhZDtcbn1cblxuLyoqXG4gKiBSZWFkcyB3aGljaCBzaGltcyBhbiBlbWl0dGVkIG1vZHVsZSBuZWVkcyBmcm9tIGl0cyBjb2RlLlxuICpcbiAqIC0gYGVuc3VyZUJyb3dzZXJQcm9jZXNzYDogaXQgcmVhZHMgYSBgcHJvY2Vzc2AgaXQgZG9lcyBub3QgYmluZCBpdHNlbGYsIG9yIGl0IGxvYWRzIGEgYmFyZSBwYWNrYWdlIHRoYXQgaXMgbm90IGFcbiAqICAgYG5vZGU6YCBidWlsdC1pbi4gVGhlIHNlY29uZCBjYXNlIGlzIHRoZXJlIGJlY2F1c2Ugc3VjaCBhIHBhY2thZ2UgKGBwYXRoLWJyb3dzZXJpZnlgIHJlYWRzIGBwcm9jZXNzLmN3ZCgpYCkgY2Fubm90XG4gKiAgIGNhcnJ5IGEgc2hpbSBvZiBpdHMgb3duLCBhbmQgaW4gYW4gdW5idW5kbGVkIGJ1aWxkIGl0cyBpbXBvcnRlciBpcyB0aGUgb25seSBtb2R1bGUgdGhhdCBjYW4uXG4gKiAtIGBlbnN1cmVEaXNwb3NlU3ltYm9sc2A6IGl0IG5hbWVzIGBTeW1ib2wuZGlzcG9zZWAgb3IgYFN5bWJvbC5hc3luY0Rpc3Bvc2VgLCBvciBob2xkcyBlc2J1aWxkJ3MgYF9fa25vd25TeW1ib2xgXG4gKiAgIGhlbHBlciwgd2hpY2ggYSBsb3dlcmVkIGB1c2luZ2AgZW1pdHMuXG4gKiAtIGBfX25hbWVgOiBpdCByZWFkcyBhIGBfX25hbWVgIGl0IGRvZXMgbm90IGRlY2xhcmUuXG4gKlxuICogQHBhcmFtIGNvZGUgLSBUaGUgZW1pdHRlZCBtb2R1bGUuXG4gKiBAcmV0dXJucyBXaGF0IHRoZSBtb2R1bGUgbmVlZHMuXG4gKi9cbmZ1bmN0aW9uIGdldE1vZHVsZVNoaW1OZWVkcyhjb2RlOiBzdHJpbmcpOiBNb2R1bGVTaGltTmVlZHMge1xuICBjb25zdCBzb3VyY2VGaWxlID0gY3JlYXRlU291cmNlRmlsZSgnbW9kdWxlLmpzJywgY29kZSwgU2NyaXB0VGFyZ2V0LkxhdGVzdCwgdHJ1ZSwgU2NyaXB0S2luZC5KUyk7XG4gIGNvbnN0IGJvdW5kTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgcmVhZE5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGxldCBpc0JhcmVJbXBvcnRGb3VuZCA9IGZhbHNlO1xuICBsZXQgaXNEaXNwb3NlU3ltYm9sRm91bmQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiB2aXNpdChub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgY29uc3Qgc3BlY2lmaWVyID0gZ2V0TW9kdWxlU3BlY2lmaWVyKG5vZGUpO1xuICAgIGlmIChzcGVjaWZpZXIgIT09IHVuZGVmaW5lZCAmJiAhTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAudGVzdChzcGVjaWZpZXIpKSB7XG4gICAgICBpc0JhcmVJbXBvcnRGb3VuZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSkgJiYgaXNJZGVudGlmaWVyKG5vZGUuZXhwcmVzc2lvbikgJiYgbm9kZS5leHByZXNzaW9uLnRleHQgPT09ICdTeW1ib2wnXG4gICAgICAmJiBESVNQT1NFX1NZTUJPTF9OQU1FUy5oYXMobm9kZS5uYW1lLnRleHQpXG4gICAgKSB7XG4gICAgICBpc0Rpc3Bvc2VTeW1ib2xGb3VuZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGlzSWRlbnRpZmllcihub2RlKSkge1xuICAgICAgaWYgKG5vZGUudGV4dCA9PT0gS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FKSB7XG4gICAgICAgIGlzRGlzcG9zZVN5bWJvbEZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNhZ2UgPSBnZXRJZGVudGlmaWVyVXNhZ2Uobm9kZSk7XG4gICAgICBpZiAodXNhZ2UgPT09IElkZW50aWZpZXJVc2FnZS5CaW5kaW5nKSB7XG4gICAgICAgIGJvdW5kTmFtZXMuYWRkKG5vZGUudGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKHVzYWdlID09PSBJZGVudGlmaWVyVXNhZ2UuUmVhZCkge1xuICAgICAgICByZWFkTmFtZXMuYWRkKG5vZGUudGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0KTtcbiAgfVxuICB2aXNpdChzb3VyY2VGaWxlKTtcblxuICBmdW5jdGlvbiBpc0ZyZWVSZWFkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWFkTmFtZXMuaGFzKG5hbWUpICYmICFib3VuZE5hbWVzLmhhcyhuYW1lKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXNCcm93c2VyUHJvY2Vzc05lZWRlZDogaXNGcmVlUmVhZCgncHJvY2VzcycpIHx8IGlzQmFyZUltcG9ydEZvdW5kLFxuICAgIGlzRGlzcG9zZVN5bWJvbHNOZWVkZWQ6IGlzRGlzcG9zZVN5bWJvbEZvdW5kLFxuICAgIGlzTmFtZU5lZWRlZDogaXNGcmVlUmVhZCgnX19uYW1lJylcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TW9kdWxlU3BlY2lmaWVyKG5vZGU6IE5vZGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoKGlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkgfHwgaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSkgJiYgbm9kZS5tb2R1bGVTcGVjaWZpZXIgIT09IHVuZGVmaW5lZCAmJiBpc1N0cmluZ0xpdGVyYWwobm9kZS5tb2R1bGVTcGVjaWZpZXIpKSB7XG4gICAgcmV0dXJuIG5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQ7XG4gIH1cblxuICBpZiAoaXNDYWxsRXhwcmVzc2lvbihub2RlKSkge1xuICAgIGNvbnN0IFtmaXJzdEFyZ3VtZW50XSA9IG5vZGUuYXJndW1lbnRzO1xuICAgIGNvbnN0IGlzTG9hZGVyID0gbm9kZS5leHByZXNzaW9uLmtpbmQgPT09IFN5bnRheEtpbmQuSW1wb3J0S2V5d29yZCB8fCAoaXNJZGVudGlmaWVyKG5vZGUuZXhwcmVzc2lvbikgJiYgbm9kZS5leHByZXNzaW9uLnRleHQgPT09ICdyZXF1aXJlJyk7XG4gICAgaWYgKGlzTG9hZGVyICYmIGZpcnN0QXJndW1lbnQgIT09IHVuZGVmaW5lZCAmJiBpc1N0cmluZ0xpdGVyYWwoZmlyc3RBcmd1bWVudCkpIHtcbiAgICAgIHJldHVybiBmaXJzdEFyZ3VtZW50LnRleHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIsIHNlZSBhYm92ZS4gKi9cbmZ1bmN0aW9uIGluaXRDanMoKTogdm9pZCB7XG4gIGNvbnN0IGdsb2JhbFRoaXNSZWNvcmQgPSBnbG9iYWxUaGlzIGFzIEdlbmVyaWNPYmplY3Q7XG4gIGVuc3VyZURpc3Bvc2VTeW1ib2xzKCk7XG4gIGdsb2JhbFRoaXNSZWNvcmRbJ19fbmFtZSddID8/PSBrZWVwTmFtZTtcbiAgZ2xvYmFsVGhpc1JlY29yZFsnX19leHRyYWN0RGVmYXVsdCddID8/PSBleHRyYWN0RGVmYXVsdDtcblxuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyAtLSBTZXJpYWxpemVkIHdpdGggaW5pdENqcyBpbnRvIHRoZSBiYW5uZXI7IGF0IG1vZHVsZSBzY29wZSBpdCB3b3VsZCBiZSBsZWZ0IG91dCBvZiBpdC5cbiAgZnVuY3Rpb24gZXh0cmFjdERlZmF1bHQoJG1vZHVsZTogUGFydGlhbDxFc21Nb2R1bGU+IHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gICAgcmV0dXJuICRtb2R1bGUgJiYgJG1vZHVsZS5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiAkbW9kdWxlID8gJG1vZHVsZS5kZWZhdWx0IDogJG1vZHVsZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0RXNtKCk6IHZvaWQge1xuICBlbnN1cmVEaXNwb3NlU3ltYm9scygpO1xuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cblxuLyoqXG4gKiBJbnNlcnRzIHRoZSBwcmVhbWJsZSBhZnRlciB0aGUgY2FsbGVyJ3MgbGVhZGluZyBiYW5uZXIsIGFuZCBzaGlmdHMgYW4gaW5saW5lIHNvdXJjZSBtYXAgZG93biBieSB0aGUgbGluZXMgaXQgYWRkcyxcbiAqIHNvIHRoZSBtb2R1bGUncyBvd24gbGluZXMga2VlcCBtYXBwaW5nIG9udG8gdGhlaXIgc291cmNlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIG1vZHVsZSwgaXRzIGxlYWRpbmcgYmFubmVyIGFuZCB0aGUgcHJlYW1ibGUuXG4gKiBAcmV0dXJucyBUaGUgbW9kdWxlIHdpdGggdGhlIHByZWFtYmxlIGluIGl0LlxuICovXG5mdW5jdGlvbiBpbnNlcnRQcmVhbWJsZShwYXJhbXM6IEluc2VydFByZWFtYmxlUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBjb2RlLCBsZWFkaW5nQmFubmVyLCBwcmVhbWJsZSB9ID0gcGFyYW1zO1xuICBjb25zdCBpbnNlcnRBdCA9IGxlYWRpbmdCYW5uZXIuZW5kc1dpdGgoJ1xcbicpICYmIGNvZGUuc3RhcnRzV2l0aChsZWFkaW5nQmFubmVyKSA/IGxlYWRpbmdCYW5uZXIubGVuZ3RoIDogMDtcbiAgY29uc3QgYWRkZWRMaW5lQ291bnQgPSBwcmVhbWJsZS5zcGxpdCgnXFxuJykubGVuZ3RoIC0gMTtcbiAgbGV0IHNoaWZ0ZWRDb2RlID0gY29kZTtcbiAgY29uc3Qgc291cmNlTWFwU3RhcnQgPSBjb2RlLmxhc3RJbmRleE9mKElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCk7XG4gIGlmIChzb3VyY2VNYXBTdGFydCAhPT0gLTEpIHtcbiAgICBjb25zdCBkYXRhU3RhcnQgPSBzb3VyY2VNYXBTdGFydCArIElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWC5sZW5ndGg7XG4gICAgY29uc3QgZGF0YSA9IGNvZGUuc2xpY2UoZGF0YVN0YXJ0KS50cmltRW5kKCk7XG4gICAgY29uc3Qgc291cmNlTWFwID0gSlNPTi5wYXJzZShCdWZmZXIuZnJvbShkYXRhLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04JykpIGFzIFNvdXJjZU1hcFdpdGhNYXBwaW5ncztcbiAgICBzb3VyY2VNYXAubWFwcGluZ3MgPSAnOycucmVwZWF0KGFkZGVkTGluZUNvdW50KSArIHNvdXJjZU1hcC5tYXBwaW5ncztcbiAgICBzaGlmdGVkQ29kZSA9IGNvZGUuc2xpY2UoMCwgZGF0YVN0YXJ0KSArIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCksICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKSArIGNvZGUuc2xpY2UoZGF0YVN0YXJ0ICsgZGF0YS5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBzaGlmdGVkQ29kZS5zbGljZSgwLCBpbnNlcnRBdCkgKyBwcmVhbWJsZSArIHNoaWZ0ZWRDb2RlLnNsaWNlKGluc2VydEF0KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHByZWFtYmxlIG9mIG9uZSB1bmJ1bmRsZWQgbW9kdWxlOiB0aGUgc2hpbXMgaXQgbmVlZHMgaW4gb25lIHNoYXJlZCBzY29wZSwgdGhlbiB0aGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMuXG4gKlxuICogQHBhcmFtIG5lZWRzIC0gV2hhdCB0aGUgbW9kdWxlIG5lZWRzLlxuICogQHBhcmFtIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zIC0gVGhlIGNhbGxlcidzIGV4dHJhIGluaXRzLCB3aGljaCBldmVyeSBtb2R1bGUgZ2V0cy5cbiAqIEByZXR1cm5zIFRoZSBwcmVhbWJsZSwgZW1wdHkgd2hlbiB0aGUgbW9kdWxlIG5lZWRzIG5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNb2R1bGVQcmVhbWJsZShuZWVkczogTW9kdWxlU2hpbU5lZWRzLCBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW10pOiBzdHJpbmcge1xuICBjb25zdCBzaGltczogKCguLi5hcmd1bWVudHNfOiBuZXZlcltdKSA9PiB1bmtub3duKVtdID0gW107XG4gIGNvbnN0IGNhbGxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuZWVkcy5pc0Rpc3Bvc2VTeW1ib2xzTmVlZGVkKSB7XG4gICAgc2hpbXMucHVzaChlbnN1cmVEaXNwb3NlU3ltYm9scyk7XG4gICAgY2FsbHMucHVzaCgnZW5zdXJlRGlzcG9zZVN5bWJvbHMoKTsnKTtcbiAgfVxuXG4gIGlmIChuZWVkcy5pc0Jyb3dzZXJQcm9jZXNzTmVlZGVkKSB7XG4gICAgc2hpbXMucHVzaChlbnN1cmVCcm93c2VyUHJvY2Vzcyk7XG4gICAgY2FsbHMucHVzaCgnZW5zdXJlQnJvd3NlclByb2Nlc3MoKTsnKTtcbiAgfVxuXG4gIGlmIChuZWVkcy5pc05hbWVOZWVkZWQpIHtcbiAgICBzaGltcy5wdXNoKGtlZXBOYW1lKTtcbiAgICBjYWxscy5wdXNoKCdnbG9iYWxUaGlzW1xcJ19fbmFtZVxcJ10gPz89IGtlZXBOYW1lOycpO1xuICB9XG5cbiAgY29uc3Qgc2hhcmVkU2NvcGUgPSBzaGltcy5sZW5ndGggPT09IDAgPyAnJyA6IGAoZnVuY3Rpb24gKCkge1xcbiR7c2hpbXMubWFwKFN0cmluZykuam9pbignXFxuXFxuJyl9XFxuXFxuJHtjYWxscy5qb2luKCdcXG4nKX1cXG59KSgpO1xcbmA7XG4gIHJldHVybiBzaGFyZWRTY29wZSArIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zLm1hcCgoZnVuY3Rpb25fKSA9PiBgKCR7U3RyaW5nKGZ1bmN0aW9uXyl9KSgpO1xcbmApLmpvaW4oJycpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1DQSwwQkFHTztBQUNQLG9CQUdPO0FBQ1AseUJBQXVCO0FBQ3ZCLHNCQUF5QjtBQUN6Qix3QkF5Qk87QUFFUCxNQUFNLHVCQUF1QixvQkFBSSxJQUFJLENBQUMsZ0JBQWdCLFNBQVMsQ0FBQztBQUNoRSxNQUFNLDJCQUEyQjtBQUNqQyxNQUFNLG9CQUFvQjtBQUUxQixNQUFNLDJCQUEyQjtBQUVqQyxNQUFNLDZCQUE2QjtBQW1JNUIsU0FBUyx1QkFBNkI7QUFDM0MsUUFBTSxpQkFBZ0Q7QUFBQSxJQUNwRCxTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQ0osYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssQ0FBQztBQUFBLElBQ04sVUFBVTtBQUFBLEVBQ1o7QUFFQSxRQUFNLGtCQUFrQixXQUFXO0FBRW5DLE1BQUksQ0FBQyxpQkFBaUI7QUFDcEIsZUFBVyxVQUFVO0FBQ3JCO0FBQUEsRUFDRjtBQUVBLE1BQUksZ0JBQWdCLFVBQVUsTUFBTTtBQUNsQztBQUFBLEVBQ0Y7QUFFQSxRQUFNLHdCQUF3QjtBQUU5QixhQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLGNBQWMsR0FBRztBQUN6RCwwQkFBc0IsR0FBRyxNQUFNO0FBQUEsRUFDakM7QUFFQSx3QkFBc0IsU0FBUyxJQUFJO0FBQ3JDO0FBc0JPLFNBQVMscUJBQXFCLG9CQUF1QyxRQUFjO0FBQ3hGLG9CQUFrQixpQkFBaUIsa0JBQWtCLElBQUkscUJBQXFCO0FBQzlFLG9CQUFrQixZQUFZLGtCQUFrQixJQUFJLGdCQUFnQjtBQUN0RTtBQVlPLFNBQVMsU0FBUyxVQUE0QjtBQUNuRCxTQUFP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
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return '/';
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: 'android'
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const existingProcess = globalThis.process;
|
|
17
|
+
|
|
18
|
+
if (!existingProcess) {
|
|
19
|
+
globalThis.process = browserProcess;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (existingProcess.versions?.node) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const existingProcessRecord = existingProcess;
|
|
28
|
+
|
|
29
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
30
|
+
existingProcessRecord[key] ??= value;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
existingProcessRecord['browser'] = true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
ensureBrowserProcess();
|
|
37
|
+
})();
|
|
38
|
+
|
|
39
|
+
"use strict";
|
|
40
|
+
var __defProp = Object.defineProperty;
|
|
41
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
42
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
43
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
44
|
+
var __export = (target, all) => {
|
|
45
|
+
for (var name in all)
|
|
46
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
47
|
+
};
|
|
48
|
+
var __copyProps = (to, from, except, desc) => {
|
|
49
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
50
|
+
for (let key of __getOwnPropNames(from))
|
|
51
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
52
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
53
|
+
}
|
|
54
|
+
return to;
|
|
55
|
+
};
|
|
56
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
57
|
+
var svelte_preprocessor_exports = {};
|
|
58
|
+
__export(svelte_preprocessor_exports, {
|
|
59
|
+
createSveltePreprocessor: () => createSveltePreprocessor,
|
|
60
|
+
getBlockLanguage: () => getBlockLanguage,
|
|
61
|
+
isMissingSveltePreprocessError: () => isMissingSveltePreprocessError
|
|
62
|
+
});
|
|
63
|
+
module.exports = __toCommonJS(svelte_preprocessor_exports);
|
|
64
|
+
var import_esbuild = require('esbuild');
|
|
65
|
+
const SVELTE_PREPROCESS_PACKAGE_NAME = "svelte-preprocess";
|
|
66
|
+
const JAVASCRIPT_LANGUAGES = /* @__PURE__ */ new Set(["javascript", "js"]);
|
|
67
|
+
const MISSING_SVELTE_PREPROCESS_MESSAGE_REG_EXP = /Cannot find (?:module|package) 'svelte-preprocess'/;
|
|
68
|
+
const MODULE_NOT_FOUND_CODES = /* @__PURE__ */ new Set(["ERR_MODULE_NOT_FOUND", "MODULE_NOT_FOUND"]);
|
|
69
|
+
const TEXT_TYPE_PREFIX = "text/";
|
|
70
|
+
const TYPESCRIPT_LANGUAGES = /* @__PURE__ */ new Set(["ts", "typescript"]);
|
|
71
|
+
function createSveltePreprocessor() {
|
|
72
|
+
let fallbackPromise;
|
|
73
|
+
async function getFallbackPreprocessorGroup() {
|
|
74
|
+
fallbackPromise ??= loadFallbackPreprocessorGroup().catch((error) => {
|
|
75
|
+
fallbackPromise = void 0;
|
|
76
|
+
throw error;
|
|
77
|
+
});
|
|
78
|
+
return await fallbackPromise;
|
|
79
|
+
}
|
|
80
|
+
async function preprocessWithFallback(kind, language, params) {
|
|
81
|
+
let fallback;
|
|
82
|
+
try {
|
|
83
|
+
fallback = await getFallbackPreprocessorGroup();
|
|
84
|
+
} catch (error) {
|
|
85
|
+
if (!isMissingSveltePreprocessError(error)) {
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
throw new Error(
|
|
89
|
+
`Cannot preprocess the <${kind} lang="${language}"> block of ${params.filename ?? "a Svelte component"}: install \`svelte-preprocess\` in the project to compile ${language}.`,
|
|
90
|
+
{ cause: error }
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
return await fallback[kind]?.(params) ?? void 0;
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
name: "typescript-dev-toolkit-svelte",
|
|
97
|
+
async script(params) {
|
|
98
|
+
const language = getBlockLanguage(params.attributes);
|
|
99
|
+
if (language === void 0 || JAVASCRIPT_LANGUAGES.has(language)) {
|
|
100
|
+
return void 0;
|
|
101
|
+
}
|
|
102
|
+
return TYPESCRIPT_LANGUAGES.has(language) ? await transpileTypeScript(params) : await preprocessWithFallback("script", language, params);
|
|
103
|
+
},
|
|
104
|
+
async style(params) {
|
|
105
|
+
const language = getBlockLanguage(params.attributes);
|
|
106
|
+
return language === void 0 || language === "css" ? void 0 : await preprocessWithFallback("style", language, params);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function getBlockLanguage(attributes) {
|
|
111
|
+
const lang = attributes["lang"];
|
|
112
|
+
if (typeof lang === "string" && lang !== "") {
|
|
113
|
+
return lang.toLowerCase();
|
|
114
|
+
}
|
|
115
|
+
const type = attributes["type"];
|
|
116
|
+
return typeof type === "string" && type.toLowerCase().startsWith(TEXT_TYPE_PREFIX) ? type.slice(TEXT_TYPE_PREFIX.length).toLowerCase() : void 0;
|
|
117
|
+
}
|
|
118
|
+
function isMissingSveltePreprocessError(error) {
|
|
119
|
+
if (!(error instanceof Error)) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
const code = error.code;
|
|
123
|
+
return typeof code === "string" && MODULE_NOT_FOUND_CODES.has(code) && MISSING_SVELTE_PREPROCESS_MESSAGE_REG_EXP.test(error.message);
|
|
124
|
+
}
|
|
125
|
+
async function loadFallbackPreprocessorGroup() {
|
|
126
|
+
const svelteFallbackModule = await import(SVELTE_PREPROCESS_PACKAGE_NAME);
|
|
127
|
+
return svelteFallbackModule.sveltePreprocess();
|
|
128
|
+
}
|
|
129
|
+
async function transpileTypeScript(params) {
|
|
130
|
+
const result = await (0, import_esbuild.transform)(params.content, {
|
|
131
|
+
loader: "ts",
|
|
132
|
+
sourcefile: params.filename ?? "",
|
|
133
|
+
sourcemap: "external",
|
|
134
|
+
target: "esnext",
|
|
135
|
+
tsconfigRaw: {
|
|
136
|
+
compilerOptions: {
|
|
137
|
+
verbatimModuleSyntax: true
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
return {
|
|
142
|
+
code: result.code,
|
|
143
|
+
map: result.map
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
147
|
+
0 && (module.exports = {
|
|
148
|
+
createSveltePreprocessor,
|
|
149
|
+
getBlockLanguage,
|
|
150
|
+
isMissingSveltePreprocessError
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvc3ZlbHRlLXByZXByb2Nlc3Nvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogU3ZlbHRlIHByZXByb2Nlc3NvciB0aGF0IGNvbXBpbGVzIFR5cGVTY3JpcHQgc2NyaXB0cyB3aXRoIGVzYnVpbGQuXG4gKlxuICogSXQgcmVwbGFjZXMgYHN2ZWx0ZS1wcmVwcm9jZXNzYCBmb3IgdGhlIG9uZSBsYW5ndWFnZSBldmVyeSBTdmVsdGUgY29tcG9uZW50IG9mIHRoZXNlIHByb2plY3RzIHVzZXMsIGBsYW5nPVwidHNcImAsIHNvXG4gKiB0aGUgdG9vbGtpdCBubyBsb25nZXIgZGVwZW5kcyBvbiBgc3ZlbHRlLXByZXByb2Nlc3NgLCB3aG9zZSBvcHRpb25hbCBgQGJhYmVsL2NvcmVgIDcgcGVlciBjb25mbGljdHMgd2l0aCB0aGUgQmFiZWwgOFxuICogdGhhdCBTdHJ5a2VyIGluc3RhbGxzLiBBbnkgb3RoZXIgc2NyaXB0IG9yIHN0eWxlIGxhbmd1YWdlIGlzIGhhbmRlZCB0byBgc3ZlbHRlLXByZXByb2Nlc3NgLCBhbiBvcHRpb25hbCBwZWVyLCB3aGVuIHRoZVxuICogcHJvamVjdCBpbnN0YWxscyBpdC5cbiAqL1xuXG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tICdlc2J1aWxkJztcblxuLyoqXG4gKiBUaGUgYXR0cmlidXRlcyBvZiBhIGA8c2NyaXB0PmAgb3IgYDxzdHlsZT5gIGJsb2NrLlxuICovXG5leHBvcnQgdHlwZSBTdmVsdGVCbG9ja0F0dHJpYnV0ZXMgPSBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgc3RyaW5nPjtcblxuLyoqXG4gKiBBIFN2ZWx0ZSBwcmVwcm9jZXNzb3IgZm9yIG9uZSBraW5kIG9mIGJsb2NrLlxuICovXG5leHBvcnQgdHlwZSBTdmVsdGVCbG9ja1ByZXByb2Nlc3NvciA9IChwYXJhbXM6IFN2ZWx0ZVByZXByb2Nlc3NvclBhcmFtcykgPT4gUHJvbWlzZTxTdmVsdGVQcmVwcm9jZXNzb3JSZXN1bHQgfCB1bmRlZmluZWQ+O1xuXG4vKipcbiAqIEEgU3ZlbHRlIHByZXByb2Nlc3NvciBncm91cCwgaW4gdGhlIHNoYXBlIGBzdmVsdGUvY29tcGlsZXJgJ3MgYHByZXByb2Nlc3NgIHRha2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN2ZWx0ZVByZXByb2Nlc3Nvckdyb3VwIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBncm91cC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByZXByb2Nlc3NvciBvZiBgPHNjcmlwdD5gIGJsb2Nrcy5cbiAgICovXG4gIHJlYWRvbmx5IHNjcmlwdDogU3ZlbHRlQmxvY2tQcmVwcm9jZXNzb3I7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmVwcm9jZXNzb3Igb2YgYDxzdHlsZT5gIGJsb2Nrcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0eWxlOiBTdmVsdGVCbG9ja1ByZXByb2Nlc3Nvcjtcbn1cblxuLyoqXG4gKiBXaGF0IGEgU3ZlbHRlIHByZXByb2Nlc3NvciBpcyBnaXZlbiBmb3Igb25lIGA8c2NyaXB0PmAgb3IgYDxzdHlsZT5gIGJsb2NrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN2ZWx0ZVByZXByb2Nlc3NvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlcyBvZiB0aGUgYmxvY2suXG4gICAqL1xuICByZWFkb25seSBhdHRyaWJ1dGVzOiBTdmVsdGVCbG9ja0F0dHJpYnV0ZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBibG9jay5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgY29tcG9uZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbWFya3VwOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hhdCBhIFN2ZWx0ZSBwcmVwcm9jZXNzb3IgcmV0dXJucyBmb3IgYSBibG9jayBpdCBjaGFuZ2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN2ZWx0ZVByZXByb2Nlc3NvclJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgbmV3IGNvbnRlbnQgb2YgdGhlIGJsb2NrLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG1hcCBvZiB0aGUgY2hhbmdlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFwPzogb2JqZWN0IHwgc3RyaW5nO1xufVxuXG50eXBlIEJsb2NrS2luZCA9ICdzY3JpcHQnIHwgJ3N0eWxlJztcblxudHlwZSBGYWxsYmFja1ByZXByb2Nlc3Nvckdyb3VwID0gUGFydGlhbDxSZWNvcmQ8QmxvY2tLaW5kLCAocGFyYW1zOiBTdmVsdGVQcmVwcm9jZXNzb3JQYXJhbXMpID0+IHVua25vd24+PjtcblxuaW50ZXJmYWNlIFN2ZWx0ZVByZXByb2Nlc3NNb2R1bGUge1xuICByZWFkb25seSBzdmVsdGVQcmVwcm9jZXNzOiAoKSA9PiBGYWxsYmFja1ByZXByb2Nlc3Nvckdyb3VwO1xufVxuXG5jb25zdCBTVkVMVEVfUFJFUFJPQ0VTU19QQUNLQUdFX05BTUUgPSAnc3ZlbHRlLXByZXByb2Nlc3MnO1xuXG5jb25zdCBKQVZBU0NSSVBUX0xBTkdVQUdFUyA9IG5ldyBTZXQoWydqYXZhc2NyaXB0JywgJ2pzJ10pO1xuY29uc3QgTUlTU0lOR19TVkVMVEVfUFJFUFJPQ0VTU19NRVNTQUdFX1JFR19FWFAgPSAvQ2Fubm90IGZpbmQgKD86bW9kdWxlfHBhY2thZ2UpICdzdmVsdGUtcHJlcHJvY2VzcycvO1xuY29uc3QgTU9EVUxFX05PVF9GT1VORF9DT0RFUyA9IG5ldyBTZXQoWydFUlJfTU9EVUxFX05PVF9GT1VORCcsICdNT0RVTEVfTk9UX0ZPVU5EJ10pO1xuY29uc3QgVEVYVF9UWVBFX1BSRUZJWCA9ICd0ZXh0Lyc7XG5jb25zdCBUWVBFU0NSSVBUX0xBTkdVQUdFUyA9IG5ldyBTZXQoWyd0cycsICd0eXBlc2NyaXB0J10pO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIFN2ZWx0ZSBwcmVwcm9jZXNzb3IgdGhlIHRvb2xraXQncyBlc2J1aWxkIGJ1aWxkIHVzZXMuXG4gKlxuICogQSBgPHNjcmlwdCBsYW5nPVwidHNcIj5gIGJsb2NrIGlzIHRyYW5zcGlsZWQgd2l0aCBlc2J1aWxkIHVuZGVyIGB2ZXJiYXRpbU1vZHVsZVN5bnRheGAsIGFzIFN2ZWx0ZSdzIG93biBgdml0ZVByZXByb2Nlc3NgXG4gKiBkb2VzLCBzbyBhbiBpbXBvcnQgdGhhdCBvbmx5IHRoZSBtYXJrdXAgdXNlcyBpcyBrZXB0IGFuZCBhIHR5cGUgaW1wb3J0IG11c3Qgc2F5IGBpbXBvcnQgdHlwZWAuIEEgcGxhaW4gc2NyaXB0IG9yXG4gKiBzdHlsZSBibG9jayBpcyBsZWZ0IGFsb25lLiBBbnkgb3RoZXIgbGFuZ3VhZ2UgaXMgaGFuZGVkIHRvIGBzdmVsdGUtcHJlcHJvY2Vzc2AsIGxvYWRlZCBvbmx5IHRoZW47IHdoZW4gdGhlIHByb2plY3RcbiAqIGRvZXMgbm90IGluc3RhbGwgaXQsIHByZXByb2Nlc3NpbmcgdGhhdCBibG9jayBmYWlscyBuYW1pbmcgdGhlIHBhY2thZ2UuXG4gKlxuICogQHJldHVybnMgVGhlIHByZXByb2Nlc3NvciBncm91cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN2ZWx0ZVByZXByb2Nlc3NvcigpOiBTdmVsdGVQcmVwcm9jZXNzb3JHcm91cCB7XG4gIGxldCBmYWxsYmFja1Byb21pc2U6IFByb21pc2U8RmFsbGJhY2tQcmVwcm9jZXNzb3JHcm91cD4gfCB1bmRlZmluZWQ7XG5cbiAgLy8gQSBmYWlsZWQgbG9hZCBpcyBmb3Jnb3R0ZW4sIHNvIGEgYmxvY2sgYWZ0ZXIgdGhlIHByb2plY3QgaW5zdGFsbHMgdGhlIHBhY2thZ2UgdHJpZXMgYWdhaW4uXG4gIGFzeW5jIGZ1bmN0aW9uIGdldEZhbGxiYWNrUHJlcHJvY2Vzc29yR3JvdXAoKTogUHJvbWlzZTxGYWxsYmFja1ByZXByb2Nlc3Nvckdyb3VwPiB7XG4gICAgZmFsbGJhY2tQcm9taXNlID8/PSBsb2FkRmFsbGJhY2tQcmVwcm9jZXNzb3JHcm91cCgpLmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgZmFsbGJhY2tQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gICAgcmV0dXJuIGF3YWl0IGZhbGxiYWNrUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHByZXByb2Nlc3NXaXRoRmFsbGJhY2soa2luZDogQmxvY2tLaW5kLCBsYW5ndWFnZTogc3RyaW5nLCBwYXJhbXM6IFN2ZWx0ZVByZXByb2Nlc3NvclBhcmFtcyk6IFByb21pc2U8U3ZlbHRlUHJlcHJvY2Vzc29yUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGZhbGxiYWNrOiBGYWxsYmFja1ByZXByb2Nlc3Nvckdyb3VwO1xuICAgIHRyeSB7XG4gICAgICBmYWxsYmFjayA9IGF3YWl0IGdldEZhbGxiYWNrUHJlcHJvY2Vzc29yR3JvdXAoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFpc01pc3NpbmdTdmVsdGVQcmVwcm9jZXNzRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHByZXByb2Nlc3MgdGhlIDwke2tpbmR9IGxhbmc9XCIke2xhbmd1YWdlfVwiPiBibG9jayBvZiAke3BhcmFtcy5maWxlbmFtZSA/PyAnYSBTdmVsdGUgY29tcG9uZW50J306IGluc3RhbGwgXFxgc3ZlbHRlLXByZXByb2Nlc3NcXGAgaW4gdGhlIHByb2plY3QgdG8gY29tcGlsZSAke2xhbmd1YWdlfS5gLFxuICAgICAgICB7IGNhdXNlOiBlcnJvciB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgZmFsbGJhY2tba2luZF0/LihwYXJhbXMpIGFzIFN2ZWx0ZVByZXByb2Nlc3NvclJlc3VsdCB8IHVuZGVmaW5lZCA/PyB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICd0eXBlc2NyaXB0LWRldi10b29sa2l0LXN2ZWx0ZScsXG4gICAgYXN5bmMgc2NyaXB0KHBhcmFtcyk6IFByb21pc2U8U3ZlbHRlUHJlcHJvY2Vzc29yUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IGdldEJsb2NrTGFuZ3VhZ2UocGFyYW1zLmF0dHJpYnV0ZXMpO1xuICAgICAgaWYgKGxhbmd1YWdlID09PSB1bmRlZmluZWQgfHwgSkFWQVNDUklQVF9MQU5HVUFHRVMuaGFzKGxhbmd1YWdlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFRZUEVTQ1JJUFRfTEFOR1VBR0VTLmhhcyhsYW5ndWFnZSkgPyAoYXdhaXQgdHJhbnNwaWxlVHlwZVNjcmlwdChwYXJhbXMpKSA6IChhd2FpdCBwcmVwcm9jZXNzV2l0aEZhbGxiYWNrKCdzY3JpcHQnLCBsYW5ndWFnZSwgcGFyYW1zKSk7XG4gICAgfSxcbiAgICBhc3luYyBzdHlsZShwYXJhbXMpOiBQcm9taXNlPFN2ZWx0ZVByZXByb2Nlc3NvclJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRCbG9ja0xhbmd1YWdlKHBhcmFtcy5hdHRyaWJ1dGVzKTtcbiAgICAgIHJldHVybiBsYW5ndWFnZSA9PT0gdW5kZWZpbmVkIHx8IGxhbmd1YWdlID09PSAnY3NzJyA/IHVuZGVmaW5lZCA6IChhd2FpdCBwcmVwcm9jZXNzV2l0aEZhbGxiYWNrKCdzdHlsZScsIGxhbmd1YWdlLCBwYXJhbXMpKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbGFuZ3VhZ2Ugb2YgYSBgPHNjcmlwdD5gIG9yIGA8c3R5bGU+YCBibG9jayBmcm9tIGl0cyBgbGFuZ2AgYXR0cmlidXRlLCBvciBlbHNlIGl0cyBgdHlwZWAgYXR0cmlidXRlLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJ1dGVzIC0gVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGJsb2NrLlxuICogQHJldHVybnMgVGhlIGxhbmd1YWdlLCBsb3dlcmNhc2VkLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBibG9jayBuYW1lcyBub25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmxvY2tMYW5ndWFnZShhdHRyaWJ1dGVzOiBTdmVsdGVCbG9ja0F0dHJpYnV0ZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsYW5nID0gYXR0cmlidXRlc1snbGFuZyddO1xuICBpZiAodHlwZW9mIGxhbmcgPT09ICdzdHJpbmcnICYmIGxhbmcgIT09ICcnKSB7XG4gICAgcmV0dXJuIGxhbmcudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSBhdHRyaWJ1dGVzWyd0eXBlJ107XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgJiYgdHlwZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoVEVYVF9UWVBFX1BSRUZJWCkgPyB0eXBlLnNsaWNlKFRFWFRfVFlQRV9QUkVGSVgubGVuZ3RoKS50b0xvd2VyQ2FzZSgpIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIGVycm9yIGlzIHRoZSBvbmUgbG9hZGluZyBgc3ZlbHRlLXByZXByb2Nlc3NgIHRocm93cyB3aGVuIHRoZSBwcm9qZWN0IGRvZXMgbm90IGluc3RhbGwgaXQuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZXJyb3Igc2F5cyB0aGF0IHRoZSBgc3ZlbHRlLXByZXByb2Nlc3NgIHBhY2thZ2UgY2Fubm90IGJlIGZvdW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNaXNzaW5nU3ZlbHRlUHJlcHJvY2Vzc0Vycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY29kZSA9IChlcnJvciBhcyBQYXJ0aWFsPFJlY29yZDwnY29kZScsIHVua25vd24+PikuY29kZTtcbiAgcmV0dXJuIHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJyAmJiBNT0RVTEVfTk9UX0ZPVU5EX0NPREVTLmhhcyhjb2RlKSAmJiBNSVNTSU5HX1NWRUxURV9QUkVQUk9DRVNTX01FU1NBR0VfUkVHX0VYUC50ZXN0KGVycm9yLm1lc3NhZ2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkRmFsbGJhY2tQcmVwcm9jZXNzb3JHcm91cCgpOiBQcm9taXNlPEZhbGxiYWNrUHJlcHJvY2Vzc29yR3JvdXA+IHtcbiAgLypcbiAgICogVGhlIHNwZWNpZmllciBpcyBhIHZhcmlhYmxlIHNvIHRoYXQgdHlwZS1jaGVja2luZyBkb2VzIG5vdCBuZWVkIHRoZSBwYWNrYWdlOiBpbnN0YWxsaW5nIGl0IGhlcmUgd291bGQgYnJpbmcgYmFjayB0aGVcbiAgICogYEBiYWJlbC9jb3JlYCBwZWVyIGNvbmZsaWN0IHdpdGggU3RyeWtlciB0aGlzIG1vZHVsZSBleGlzdHMgdG8gYXZvaWQuXG4gICAqL1xuICBjb25zdCBzdmVsdGVGYWxsYmFja01vZHVsZSA9IGF3YWl0IGltcG9ydChTVkVMVEVfUFJFUFJPQ0VTU19QQUNLQUdFX05BTUUpIGFzIFN2ZWx0ZVByZXByb2Nlc3NNb2R1bGU7XG4gIHJldHVybiBzdmVsdGVGYWxsYmFja01vZHVsZS5zdmVsdGVQcmVwcm9jZXNzKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRyYW5zcGlsZVR5cGVTY3JpcHQocGFyYW1zOiBTdmVsdGVQcmVwcm9jZXNzb3JQYXJhbXMpOiBQcm9taXNlPFN2ZWx0ZVByZXByb2Nlc3NvclJlc3VsdD4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFuc2Zvcm0ocGFyYW1zLmNvbnRlbnQsIHtcbiAgICBsb2FkZXI6ICd0cycsXG4gICAgc291cmNlZmlsZTogcGFyYW1zLmZpbGVuYW1lID8/ICcnLFxuICAgIHNvdXJjZW1hcDogJ2V4dGVybmFsJyxcbiAgICB0YXJnZXQ6ICdlc25leHQnLFxuICAgIHRzY29uZmlnUmF3OiB7XG4gICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgdmVyYmF0aW1Nb2R1bGVTeW50YXg6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNvZGU6IHJlc3VsdC5jb2RlLFxuICAgIG1hcDogcmVzdWx0Lm1hcFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0EscUJBQTBCO0FBZ0YxQixNQUFNLGlDQUFpQztBQUV2QyxNQUFNLHVCQUF1QixvQkFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUM7QUFDekQsTUFBTSw0Q0FBNEM7QUFDbEQsTUFBTSx5QkFBeUIsb0JBQUksSUFBSSxDQUFDLHdCQUF3QixrQkFBa0IsQ0FBQztBQUNuRixNQUFNLG1CQUFtQjtBQUN6QixNQUFNLHVCQUF1QixvQkFBSSxJQUFJLENBQUMsTUFBTSxZQUFZLENBQUM7QUFZbEQsU0FBUywyQkFBb0Q7QUFDbEUsTUFBSTtBQUdKLGlCQUFlLCtCQUFtRTtBQUNoRix3QkFBb0IsOEJBQThCLEVBQUUsTUFBTSxDQUFDLFVBQW1CO0FBQzVFLHdCQUFrQjtBQUNsQixZQUFNO0FBQUEsSUFDUixDQUFDO0FBQ0QsV0FBTyxNQUFNO0FBQUEsRUFDZjtBQUVBLGlCQUFlLHVCQUF1QixNQUFpQixVQUFrQixRQUFpRjtBQUN4SixRQUFJO0FBQ0osUUFBSTtBQUNGLGlCQUFXLE1BQU0sNkJBQTZCO0FBQUEsSUFDaEQsU0FBUyxPQUFPO0FBQ2QsVUFBSSxDQUFDLCtCQUErQixLQUFLLEdBQUc7QUFDMUMsY0FBTTtBQUFBLE1BQ1I7QUFDQSxZQUFNLElBQUk7QUFBQSxRQUNSLDBCQUEwQixJQUFJLFVBQVUsUUFBUSxlQUFlLE9BQU8sWUFBWSxvQkFBb0IsNkRBQTZELFFBQVE7QUFBQSxRQUMzSyxFQUFFLE9BQU8sTUFBTTtBQUFBLE1BQ2pCO0FBQUEsSUFDRjtBQUNBLFdBQU8sTUFBTSxTQUFTLElBQUksSUFBSSxNQUFNLEtBQTZDO0FBQUEsRUFDbkY7QUFFQSxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNLE9BQU8sUUFBdUQ7QUFDbEUsWUFBTSxXQUFXLGlCQUFpQixPQUFPLFVBQVU7QUFDbkQsVUFBSSxhQUFhLFVBQWEscUJBQXFCLElBQUksUUFBUSxHQUFHO0FBQ2hFLGVBQU87QUFBQSxNQUNUO0FBQ0EsYUFBTyxxQkFBcUIsSUFBSSxRQUFRLElBQUssTUFBTSxvQkFBb0IsTUFBTSxJQUFNLE1BQU0sdUJBQXVCLFVBQVUsVUFBVSxNQUFNO0FBQUEsSUFDNUk7QUFBQSxJQUNBLE1BQU0sTUFBTSxRQUF1RDtBQUNqRSxZQUFNLFdBQVcsaUJBQWlCLE9BQU8sVUFBVTtBQUNuRCxhQUFPLGFBQWEsVUFBYSxhQUFhLFFBQVEsU0FBYSxNQUFNLHVCQUF1QixTQUFTLFVBQVUsTUFBTTtBQUFBLElBQzNIO0FBQUEsRUFDRjtBQUNGO0FBUU8sU0FBUyxpQkFBaUIsWUFBdUQ7QUFDdEYsUUFBTSxPQUFPLFdBQVcsTUFBTTtBQUM5QixNQUFJLE9BQU8sU0FBUyxZQUFZLFNBQVMsSUFBSTtBQUMzQyxXQUFPLEtBQUssWUFBWTtBQUFBLEVBQzFCO0FBRUEsUUFBTSxPQUFPLFdBQVcsTUFBTTtBQUM5QixTQUFPLE9BQU8sU0FBUyxZQUFZLEtBQUssWUFBWSxFQUFFLFdBQVcsZ0JBQWdCLElBQUksS0FBSyxNQUFNLGlCQUFpQixNQUFNLEVBQUUsWUFBWSxJQUFJO0FBQzNJO0FBUU8sU0FBUywrQkFBK0IsT0FBeUI7QUFDdEUsTUFBSSxFQUFFLGlCQUFpQixRQUFRO0FBQzdCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxPQUFRLE1BQTJDO0FBQ3pELFNBQU8sT0FBTyxTQUFTLFlBQVksdUJBQXVCLElBQUksSUFBSSxLQUFLLDBDQUEwQyxLQUFLLE1BQU0sT0FBTztBQUNySTtBQUVBLGVBQWUsZ0NBQW9FO0FBS2pGLFFBQU0sdUJBQXVCLE1BQU0sT0FBTztBQUMxQyxTQUFPLHFCQUFxQixpQkFBaUI7QUFDL0M7QUFFQSxlQUFlLG9CQUFvQixRQUFxRTtBQUN0RyxRQUFNLFNBQVMsVUFBTSwwQkFBVSxPQUFPLFNBQVM7QUFBQSxJQUM3QyxRQUFRO0FBQUEsSUFDUixZQUFZLE9BQU8sWUFBWTtBQUFBLElBQy9CLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLGFBQWE7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLFFBQ2Ysc0JBQXNCO0FBQUEsTUFDeEI7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0QsU0FBTztBQUFBLElBQ0wsTUFBTSxPQUFPO0FBQUEsSUFDYixLQUFLLE9BQU87QUFBQSxFQUNkO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/// <reference path="../../library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Svelte preprocessor that compiles TypeScript scripts with esbuild.
|
|
6
|
+
*
|
|
7
|
+
* It replaces `svelte-preprocess` for the one language every Svelte component of these projects uses, `lang="ts"`, so
|
|
8
|
+
* the toolkit no longer depends on `svelte-preprocess`, whose optional `@babel/core` 7 peer conflicts with the Babel 8
|
|
9
|
+
* that Stryker installs. Any other script or style language is handed to `svelte-preprocess`, an optional peer, when the
|
|
10
|
+
* project installs it.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* The attributes of a `<script>` or `<style>` block.
|
|
14
|
+
*/
|
|
15
|
+
export type SvelteBlockAttributes = Record<string, boolean | string>;
|
|
16
|
+
/**
|
|
17
|
+
* A Svelte preprocessor for one kind of block.
|
|
18
|
+
*/
|
|
19
|
+
export type SvelteBlockPreprocessor = (params: SveltePreprocessorParams) => Promise<SveltePreprocessorResult | undefined>;
|
|
20
|
+
/**
|
|
21
|
+
* A Svelte preprocessor group, in the shape `svelte/compiler`'s `preprocess` takes.
|
|
22
|
+
*/
|
|
23
|
+
export interface SveltePreprocessorGroup {
|
|
24
|
+
/**
|
|
25
|
+
* The name of the group.
|
|
26
|
+
*/
|
|
27
|
+
readonly name: string;
|
|
28
|
+
/**
|
|
29
|
+
* The preprocessor of `<script>` blocks.
|
|
30
|
+
*/
|
|
31
|
+
readonly script: SvelteBlockPreprocessor;
|
|
32
|
+
/**
|
|
33
|
+
* The preprocessor of `<style>` blocks.
|
|
34
|
+
*/
|
|
35
|
+
readonly style: SvelteBlockPreprocessor;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* What a Svelte preprocessor is given for one `<script>` or `<style>` block.
|
|
39
|
+
*/
|
|
40
|
+
export interface SveltePreprocessorParams {
|
|
41
|
+
/**
|
|
42
|
+
* The attributes of the block.
|
|
43
|
+
*/
|
|
44
|
+
readonly attributes: SvelteBlockAttributes;
|
|
45
|
+
/**
|
|
46
|
+
* The content of the block.
|
|
47
|
+
*/
|
|
48
|
+
readonly content: string;
|
|
49
|
+
/**
|
|
50
|
+
* The path of the component.
|
|
51
|
+
*/
|
|
52
|
+
readonly filename?: string;
|
|
53
|
+
/**
|
|
54
|
+
* The whole component.
|
|
55
|
+
*/
|
|
56
|
+
readonly markup: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* What a Svelte preprocessor returns for a block it changed.
|
|
60
|
+
*/
|
|
61
|
+
export interface SveltePreprocessorResult {
|
|
62
|
+
/**
|
|
63
|
+
* The new content of the block.
|
|
64
|
+
*/
|
|
65
|
+
readonly code: string;
|
|
66
|
+
/**
|
|
67
|
+
* The source map of the change.
|
|
68
|
+
*/
|
|
69
|
+
readonly map?: object | string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Creates the Svelte preprocessor the toolkit's esbuild build uses.
|
|
73
|
+
*
|
|
74
|
+
* A `<script lang="ts">` block is transpiled with esbuild under `verbatimModuleSyntax`, as Svelte's own `vitePreprocess`
|
|
75
|
+
* does, so an import that only the markup uses is kept and a type import must say `import type`. A plain script or
|
|
76
|
+
* style block is left alone. Any other language is handed to `svelte-preprocess`, loaded only then; when the project
|
|
77
|
+
* does not install it, preprocessing that block fails naming the package.
|
|
78
|
+
*
|
|
79
|
+
* @returns The preprocessor group.
|
|
80
|
+
*/
|
|
81
|
+
export declare function createSveltePreprocessor(): SveltePreprocessorGroup;
|
|
82
|
+
/**
|
|
83
|
+
* Gets the language of a `<script>` or `<style>` block from its `lang` attribute, or else its `type` attribute.
|
|
84
|
+
*
|
|
85
|
+
* @param attributes - The attributes of the block.
|
|
86
|
+
* @returns The language, lowercased, or `undefined` when the block names none.
|
|
87
|
+
*/
|
|
88
|
+
export declare function getBlockLanguage(attributes: SvelteBlockAttributes): string | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* Checks whether an error is the one loading `svelte-preprocess` throws when the project does not install it.
|
|
91
|
+
*
|
|
92
|
+
* @param error - The error to check.
|
|
93
|
+
* @returns Whether the error says that the `svelte-preprocess` package cannot be found.
|
|
94
|
+
*/
|
|
95
|
+
export declare function isMissingSveltePreprocessError(error: unknown): boolean;
|