@cdktn/cli-core 0.23.0-pre.13 → 0.23.0-pre.15
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/package.json +8 -9
- package/src/lib/models/deploy-machine.d.ts +3 -11
- package/src/lib/models/deploy-machine.d.ts.map +1 -1
- package/src/lib/models/deploy-machine.js +11 -8
- package/src/lib/models/interactive-process.d.ts +28 -0
- package/src/lib/models/interactive-process.d.ts.map +1 -0
- package/src/lib/models/interactive-process.js +59 -0
- package/src/lib/models/terraform-cli.js +3 -3
- package/src/lib/models/pty-process.d.ts +0 -29
- package/src/lib/models/pty-process.d.ts.map +0 -1
- package/src/lib/models/pty-process.js +0 -132
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cdktn/cli-core",
|
|
3
|
-
"version": "0.23.0-pre.
|
|
3
|
+
"version": "0.23.0-pre.15",
|
|
4
4
|
"description": "CDK Terrain CLI Core, meant for internal use only",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "tsc",
|
|
@@ -40,15 +40,14 @@
|
|
|
40
40
|
],
|
|
41
41
|
"license": "MPL-2.0",
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@
|
|
44
|
-
"@cdktn/
|
|
45
|
-
"@cdktn/
|
|
46
|
-
"@cdktn/
|
|
47
|
-
"@cdktn/
|
|
48
|
-
"@cdktn/provider-schema": "0.23.0-pre.13",
|
|
43
|
+
"@cdktn/commons": "0.23.0-pre.15",
|
|
44
|
+
"@cdktn/hcl-tools": "0.23.0-pre.15",
|
|
45
|
+
"@cdktn/hcl2cdk": "0.23.0-pre.15",
|
|
46
|
+
"@cdktn/hcl2json": "0.23.0-pre.15",
|
|
47
|
+
"@cdktn/provider-schema": "0.23.0-pre.15",
|
|
49
48
|
"@sentry/node": "7.120.4",
|
|
50
49
|
"archiver": "7.0.1",
|
|
51
|
-
"cdktn": "0.23.0-pre.
|
|
50
|
+
"cdktn": "0.23.0-pre.15",
|
|
52
51
|
"chalk": "4.1.2",
|
|
53
52
|
"chokidar": "3.6.0",
|
|
54
53
|
"cli-spinners": "2.9.2",
|
|
@@ -94,7 +93,7 @@
|
|
|
94
93
|
"src/**/*.{ts,tsx}": "tsc-files ambient.d.ts --noEmit"
|
|
95
94
|
},
|
|
96
95
|
"devDependencies": {
|
|
97
|
-
"@cdktn/provider-generator": "0.23.0-pre.
|
|
96
|
+
"@cdktn/provider-generator": "0.23.0-pre.15",
|
|
98
97
|
"@eslint/compat": "^1.4.1",
|
|
99
98
|
"@eslint/eslintrc": "^3.3.5",
|
|
100
99
|
"@eslint/js": "^9.39.4",
|
|
@@ -3,15 +3,7 @@
|
|
|
3
3
|
* SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
*/
|
|
5
5
|
import { EventObject, Sender, Receiver } from "xstate";
|
|
6
|
-
import
|
|
7
|
-
import { spawnPty } from "./pty-process";
|
|
8
|
-
interface PtySpawnConfig {
|
|
9
|
-
file: Parameters<typeof pty.spawn>[0];
|
|
10
|
-
args: Parameters<typeof pty.spawn>[1];
|
|
11
|
-
options: Parameters<typeof pty.spawn>[2] & {
|
|
12
|
-
cwd: string;
|
|
13
|
-
};
|
|
14
|
-
}
|
|
6
|
+
import { spawnInteractive, InteractiveSpawnConfig } from "./interactive-process";
|
|
15
7
|
interface DeployContext {
|
|
16
8
|
exitCode?: number;
|
|
17
9
|
/**
|
|
@@ -21,7 +13,7 @@ interface DeployContext {
|
|
|
21
13
|
}
|
|
22
14
|
export type DeployEvent = {
|
|
23
15
|
type: "START";
|
|
24
|
-
pty:
|
|
16
|
+
pty: InteractiveSpawnConfig;
|
|
25
17
|
} | {
|
|
26
18
|
type: "STOP";
|
|
27
19
|
} | {
|
|
@@ -102,7 +94,7 @@ interface BufferedReceiverFunction {
|
|
|
102
94
|
export declare function bufferUnterminatedLines(handler: (output: string) => void): BufferedReceiverFunction;
|
|
103
95
|
export declare function handleLineReceived(send: (event: DeployEvent) => void): (output: string) => void;
|
|
104
96
|
export declare const deployMachine: import("xstate").StateMachine<DeployContext, any, DeployEvent, DeployState, import("xstate").BaseActionObject, import("xstate").ServiceMap, import("xstate").ResolveTypegenMeta<import("xstate").TypegenDisabled, DeployEvent, import("xstate").BaseActionObject, import("xstate").ServiceMap>>;
|
|
105
|
-
export declare function terraformPtyService(_context: DeployContext, event: DeployEvent, spawn?: typeof
|
|
97
|
+
export declare function terraformPtyService(_context: DeployContext, event: DeployEvent, spawn?: typeof spawnInteractive): (send: Sender<DeployEvent>, onReceive: Receiver<DeployEvent>) => void;
|
|
106
98
|
export declare function createAndStartDeployService(options: {
|
|
107
99
|
refreshOnly?: boolean;
|
|
108
100
|
parallelism: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-machine.d.ts","sourceRoot":"","sources":["deploy-machine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAIL,WAAW,EAEX,MAAM,EACN,QAAQ,EACT,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy-machine.d.ts","sourceRoot":"","sources":["deploy-machine.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ const commons_1 = require("@cdktn/commons");
|
|
|
13
13
|
const errors_1 = require("../errors");
|
|
14
14
|
const strip_ansi_1 = __importDefault(require("strip-ansi"));
|
|
15
15
|
const os_1 = require("os");
|
|
16
|
-
const
|
|
16
|
+
const interactive_process_1 = require("./interactive-process");
|
|
17
17
|
function isDeployEvent(event, type) {
|
|
18
18
|
return event.type === type;
|
|
19
19
|
}
|
|
@@ -33,13 +33,13 @@ function bufferUnterminatedLines(handler) {
|
|
|
33
33
|
let buffer = "";
|
|
34
34
|
function bufferedReceiverFunction(output) {
|
|
35
35
|
buffer += output;
|
|
36
|
-
const lines = buffer.split(
|
|
36
|
+
const lines = buffer.split(/[\n\r]+/);
|
|
37
37
|
// if the string ends with \n this will be an empty string
|
|
38
38
|
// else it will contain an "unfinished" line
|
|
39
39
|
// the fallback to an empty string is to make TS happy and should never happen
|
|
40
40
|
buffer = lines.pop() || "";
|
|
41
41
|
if (lines.length > 0)
|
|
42
|
-
handler(lines.join(os_1.EOL) +
|
|
42
|
+
handler(lines.join(os_1.EOL) + os_1.EOL);
|
|
43
43
|
}
|
|
44
44
|
bufferedReceiverFunction.getBuffer = () => buffer;
|
|
45
45
|
return bufferedReceiverFunction;
|
|
@@ -63,8 +63,7 @@ function handleLineReceived(send) {
|
|
|
63
63
|
send({ type: "OUTPUT_RECEIVED", output });
|
|
64
64
|
send({ type: "REQUEST_APPROVAL" });
|
|
65
65
|
}
|
|
66
|
-
else if (noColorLine.includes("var.")
|
|
67
|
-
noColorLine.includes("Enter a value:")) {
|
|
66
|
+
else if (noColorLine.includes("var.")) {
|
|
68
67
|
hideOutput = true;
|
|
69
68
|
const variableName = extractVariableNameFromPrompt(output);
|
|
70
69
|
send({
|
|
@@ -73,6 +72,10 @@ function handleLineReceived(send) {
|
|
|
73
72
|
});
|
|
74
73
|
send({ type: "VARIABLE_MISSING", variableName });
|
|
75
74
|
}
|
|
75
|
+
else if (noColorLine.includes("Enter a value:")) {
|
|
76
|
+
// This comes along with above block, but is a separate line
|
|
77
|
+
hideOutput = true;
|
|
78
|
+
}
|
|
76
79
|
else if (noColorLine.includes("Do you want to override the soft failed policy check?")) {
|
|
77
80
|
hideOutput = true;
|
|
78
81
|
send({ type: "OUTPUT_RECEIVED", output });
|
|
@@ -179,10 +182,10 @@ exports.deployMachine = (0, xstate_1.createMachine)({
|
|
|
179
182
|
},
|
|
180
183
|
}, {
|
|
181
184
|
services: {
|
|
182
|
-
runTerraformInPty: (context, event) => terraformPtyService(context, event,
|
|
185
|
+
runTerraformInPty: (context, event) => terraformPtyService(context, event, interactive_process_1.spawnInteractive),
|
|
183
186
|
},
|
|
184
187
|
});
|
|
185
|
-
function terraformPtyService(_context, event, spawn =
|
|
188
|
+
function terraformPtyService(_context, event, spawn = interactive_process_1.spawnInteractive) {
|
|
186
189
|
return (send, onReceive) => {
|
|
187
190
|
if (event.type !== "START") {
|
|
188
191
|
throw commons_1.Errors.Internal(`Terraform CLI invocation state machine: Unexpected event caused transition to the running state: ${event.type}`);
|
|
@@ -277,4 +280,4 @@ function createAndStartDestroyService(options) {
|
|
|
277
280
|
return service;
|
|
278
281
|
}
|
|
279
282
|
exports.createAndStartDestroyService = createAndStartDestroyService;
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LW1hY2hpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZXBsb3ktbWFjaGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7QUFFSCxtQ0FRZ0I7QUFFaEIsNENBQWdEO0FBQ2hELHNDQUE0QztBQUM1Qyw0REFBbUM7QUFDbkMsMkJBQXlCO0FBQ3pCLCtDQUF5QztBQWtDekMsU0FBZ0IsYUFBYSxDQUMzQixLQUFrQixFQUNsQixJQUFxQjtJQUVyQixPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO0FBQzdCLENBQUM7QUFMRCxzQ0FLQztBQWdDRCxTQUFnQiw2QkFBNkIsQ0FBQyxJQUFZO0lBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUEsb0JBQVMsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsTUFBTSxnQkFBTSxDQUFDLFFBQVEsQ0FDbkIsMkNBQTJDLElBQUksa0ZBQWtGLENBQ2xJLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdDLENBQUM7QUFWRCxzRUFVQztBQVdELCtGQUErRjtBQUMvRixTQUFnQix1QkFBdUIsQ0FDckMsT0FBaUM7SUFFakMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLFNBQVMsd0JBQXdCLENBQUMsTUFBYztRQUM5QyxNQUFNLElBQUksTUFBTSxDQUFDO1FBQ2pCLE1BQU0sS0FBSyxH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MUc7S0FDRixDQUFDO0lBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFN0MsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQWxERCxvRUFrREMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7XG4gIGNyZWF0ZU1hY2hpbmUsXG4gIHNlbmQsXG4gIGludGVycHJldCxcbiAgRXZlbnRPYmplY3QsXG4gIGFzc2lnbixcbiAgU2VuZGVyLFxuICBSZWNlaXZlcixcbn0gZnJvbSBcInhzdGF0ZVwiO1xuaW1wb3J0ICogYXMgcHR5IGZyb20gXCJAY2RrdGYvbm9kZS1wdHktcHJlYnVpbHQtbXVsdGlhcmNoXCI7XG5pbXBvcnQgeyBFcnJvcnMsIGxvZ2dlciB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgbWlzc2luZ1ZhcmlhYmxlIH0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuaW1wb3J0IHN0cmlwQW5zaSBmcm9tIFwic3RyaXAtYW5zaVwiO1xuaW1wb3J0IHsgRU9MIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBzcGF3blB0eSB9IGZyb20gXCIuL3B0eS1wcm9jZXNzXCI7XG5cbmludGVyZmFjZSBQdHlTcGF3bkNvbmZpZyB7XG4gIGZpbGU6IFBhcmFtZXRlcnM8dHlwZW9mIHB0eS5zcGF3bj5bMF07XG4gIGFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIHB0eS5zcGF3bj5bMV07XG4gIG9wdGlvbnM6IFBhcmFtZXRlcnM8dHlwZW9mIHB0eS5zcGF3bj5bMl0gJiB7IGN3ZDogc3RyaW5nIH07XG59XG5cbmludGVyZmFjZSBEZXBsb3lDb250ZXh0IHtcbiAgZXhpdENvZGU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUZXJyYWZvcm0gd2lsbCBleGl0IHdpdGggMSBpZiBpdCB3YXMgY2FuY2VsbGVkLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBmYWlsIGluIHRoYXQgY2FzZVxuICAgKi9cbiAgY2FuY2VsbGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRGVwbG95RXZlbnQgPVxuICB8IHsgdHlwZTogXCJTVEFSVFwiOyBwdHk6IFB0eVNwYXduQ29uZmlnIH1cbiAgfCB7IHR5cGU6IFwiU1RPUFwiIH1cbiAgfCB7IHR5cGU6IFwiU0VORF9MSU5FXCI7IGlucHV0OiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJPVVRQVVRfUkVDRUlWRURcIjsgb3V0cHV0OiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJBUFBST1ZFRF9FWFRFUk5BTExZXCIgfSAvLyBlLmcuIHZpYSBURkMgVUkgb3IgQVBJXG4gIHwgeyB0eXBlOiBcIlJFSkVDVEVEX0VYVEVSTkFMTFlcIiB9XG4gIHwgeyB0eXBlOiBcIk9WRVJSSURERU5fRVhURVJOQUxMWVwiIH1cbiAgfCB7IHR5cGU6IFwiT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWVwiIH1cbiAgfCB7IHR5cGU6IFwiT1ZFUlJJREVcIiB9XG4gIHwgeyB0eXBlOiBcIlJFSkVDVF9PVkVSUklERVwiIH1cbiAgfCB7IHR5cGU6IFwiUkVRVUVTVF9BUFBST1ZBTFwiIH1cbiAgfCB7IHR5cGU6IFwiVkFSSUFCTEVfTUlTU0lOR1wiOyB2YXJpYWJsZU5hbWU6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcIlJFUVVFU1RfU0VOVElORUxfT1ZFUlJJREVcIiB9XG4gIHwgeyB0eXBlOiBcIkFQUFJPVkVcIiB9XG4gIHwgeyB0eXBlOiBcIlJFSkVDVFwiIH1cbiAgfCB7IHR5cGU6IFwiRVhJVEVEXCI7IGV4aXRDb2RlOiBudW1iZXIgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVwbG95RXZlbnQ8RGVwbG95RXZlbnRUeXBlIGV4dGVuZHMgRGVwbG95RXZlbnRbXCJ0eXBlXCJdPihcbiAgZXZlbnQ6IEV2ZW50T2JqZWN0LFxuICB0eXBlOiBEZXBsb3lFdmVudFR5cGUsXG4pOiBldmVudCBpcyBEZXBsb3lFdmVudCAmIHsgdHlwZTogRGVwbG95RXZlbnRUeXBlIH0ge1xuICByZXR1cm4gZXZlbnQudHlwZSA9PT0gdHlwZTtcbn1cblxuZXhwb3J0IHR5cGUgRGVwbG95U3RhdGUgPVxuICB8IHtcbiAgICAgIHZhbHVlOiBcImlkbGVcIjtcbiAgICAgIGNvbnRleHQ6IERlcGxveUNvbnRleHQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHZhbHVlOiBcInJ1bm5pbmdcIjtcbiAgICAgIGNvbnRleHQ6IERlcGxveUNvbnRleHQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHZhbHVlOiB7IHJ1bm5pbmc6IFwicHJvY2Vzc2luZ1wiIH07XG4gICAgICBjb250ZXh0OiBEZXBsb3lDb250ZXh0O1xuICAgIH1cbiAgfCB7XG4gICAgICB2YWx1ZTogeyBydW5uaW5nOiBcImF3YWl0aW5nX2FwcHJvdmFsXCIgfTtcbiAgICAgIGNvbnRleHQ6IERlcGxveUNvbnRleHQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHZhbHVlOiB7IHJ1bm5pbmc6IFwiYXdhaXRpbmdfc2VudGluZWxfb3ZlcnJpZGVcIiB9O1xuICAgICAgY29udGV4dDogRGVwbG95Q29udGV4dDtcbiAgICB9XG4gIHwge1xuICAgICAgdmFsdWU6IFwiZXhpdGVkXCI7XG4gICAgICBjb250ZXh0OiBEZXBsb3lDb250ZXh0ICYgeyBleGl0Q29kZTogbnVtYmVyIH07XG4gICAgfVxuICB8IHtcbiAgICAgIHZhbHVlOiBcInN0b3BwZWRcIjtcbiAgICAgIGNvbnRleHQ6IERlcGxveUNvbnRleHQ7XG4gICAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RWYXJpYWJsZU5hbWVGcm9tUHJvbXB0KGxpbmU6IHN0cmluZykge1xuICBjb25zdCBub0NvbG9yTGluZSA9IHN0cmlwQW5zaShsaW5lKTtcbiAgY29uc3QgbGluZXMgPSBub0NvbG9yTGluZS5zcGxpdChcIlxcblwiKTtcbiAgY29uc3QgbGluZVdpdGhWYXIgPSBsaW5lcy5maW5kKChsaW5lKSA9PiBsaW5lLmluY2x1ZGVzKFwidmFyLlwiKSk7XG4gIGlmICghbGluZVdpdGhWYXIpIHtcbiAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICBgQ291bGQgbm90IGZpbmQgdmFyaWFibGUgbmFtZSBpbiBwcm9tcHQ6ICR7bGluZX0uIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSBidWcgaW4gY2RrdG4uIFBsZWFzZSByZXBvcnQgaXQgYXQgaHR0cDovL2Nka3RuLmlvL2lzc3Vlc2AsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbGluZVdpdGhWYXIuc3BsaXQoXCJ2YXIuXCIpWzFdLnRyaW0oKTtcbn1cblxuaW50ZXJmYWNlIEJ1ZmZlcmVkUmVjZWl2ZXJGdW5jdGlvbiB7XG4gIChvdXRwdXQ6IHN0cmluZyk6IHZvaWQ7XG4gIC8qKlxuICAgKiB1c2VkIHRvIGdldCB0aGUgbGFzdCBidWZmZXIgd2hlbiB0aGUgUFRZIGV4aXRzIHRvIGxvZyBhIGRlYnVnIG1lc3NhZ2UgaWYgdGhlcmUncyBvdXRwdXQgbGVmdCBpbiB0aGVyZVxuICAgKiAobWlnaHQgaGVscCBkZWJ1Z2dpbmcgb24gV2luZG93cyBpZiBFT0wgZnJvbSBOb2RlanMgZG9lc24ndCB3b3JrIGluIFdTTClcbiAgICovXG4gIGdldEJ1ZmZlcjogKCkgPT4gc3RyaW5nO1xufVxuXG4vLyB1c2VkIHRvIG9ubHkgc2VuZCBjb21wbGV0ZWQgbGluZXMgKD0gd2l0aCBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGVtKSB0byBvdXIgbG9naWMgKCMyODI3KVxuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlclVudGVybWluYXRlZExpbmVzKFxuICBoYW5kbGVyOiAob3V0cHV0OiBzdHJpbmcpID0+IHZvaWQsXG4pOiBCdWZmZXJlZFJlY2VpdmVyRnVuY3Rpb24ge1xuICBsZXQgYnVmZmVyID0gXCJcIjtcbiAgZnVuY3Rpb24gYnVmZmVyZWRSZWNlaXZlckZ1bmN0aW9uKG91dHB1dDogc3RyaW5nKSB7XG4gICAgYnVmZmVyICs9IG91dHB1dDtcbiAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdChFT0wpO1xuXG4gICAgLy8gaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggXFxuIHRoaXMgd2lsbCBiZSBhbiBlbXB0eSBzdHJpbmdcbiAgICAvLyBlbHNlIGl0IHdpbGwgY29udGFpbiBhbiBcInVuZmluaXNoZWRcIiBsaW5lXG4gICAgLy8gdGhlIGZhbGxiYWNrIHRvIGFuIGVtcHR5IHN0cmluZyBpcyB0byBtYWtlIFRTIGhhcHB5IGFuZCBzaG91bGQgbmV2ZXIgaGFwcGVuXG4gICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgXCJcIjtcblxuICAgIGlmIChsaW5lcy5sZW5ndGggPiAwKSBoYW5kbGVyKGxpbmVzLmpvaW4oRU9MKSArIFwiXFxuXCIpO1xuICB9XG4gIGJ1ZmZlcmVkUmVjZWl2ZXJGdW5jdGlvbi5nZXRCdWZmZXIgPSAoKSA9PiBidWZmZXI7XG5cbiAgcmV0dXJuIGJ1ZmZlcmVkUmVjZWl2ZXJGdW5jdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUxpbmVSZWNlaXZlZChzZW5kOiAoZXZlbnQ6IERlcGxveUV2ZW50KSA9PiB2b2lkKSB7XG4gIHJldHVybiAob3V0cHV0OiBzdHJpbmcpID0+IHtcbiAgICBsZXQgaGlkZU91dHB1dCA9IGZhbHNlO1xuICAgIGNvbnN0IG5vQ29sb3JMaW5lID0gc3RyaXBBbnNpKG91dHB1dCk7XG5cbiAgICAvLyBwb3NzaWJsZSBldmVudHMgYmFzZWQgb24gbGluZVxuICAgIGlmIChub0NvbG9yTGluZS5pbmNsdWRlcyhcImFwcHJvdmVkIHVzaW5nIHRoZSBVSSBvciBBUElcIikpIHtcbiAgICAgIHNlbmQoeyB0eXBlOiBcIkFQUFJPVkVEX0VYVEVSTkFMTFlcIiB9KTtcbiAgICB9IGVsc2UgaWYgKG5vQ29sb3JMaW5lLmluY2x1ZGVzKFwiZGlzY2FyZGVkIHVzaW5nIHRoZSBVSSBvciBBUElcIikpIHtcbiAgICAgIHNlbmQoeyB0eXBlOiBcIlJFSkVDVEVEX0VYVEVSTkFMTFlcIiB9KTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgbm9Db2xvckxpbmUuaW5jbHVkZXMoXCJEbyB5b3Ugd2FudCB0byBwZXJmb3JtIHRoZXNlIGFjdGlvbnNcIikgfHxcbiAgICAgIG5vQ29sb3JMaW5lLmluY2x1ZGVzKFwiRG8geW91IHJlYWxseSB3YW50IHRvIGRlc3Ryb3kgYWxsIHJlc291cmNlcz9cIikgfHxcbiAgICAgIG5vQ29sb3JMaW5lLmluY2x1ZGVzKFxuICAgICAgICBcIkRvIHlvdSByZWFsbHkgd2FudCB0byBkZXN0cm95IGFsbCByZXNvdXJjZXMgaW4gd29ya3NwYWNlXCIsXG4gICAgICApXG4gICAgKSB7XG4gICAgICBoaWRlT3V0cHV0ID0gdHJ1ZTtcbiAgICAgIHNlbmQoeyB0eXBlOiBcIk9VVFBVVF9SRUNFSVZFRFwiLCBvdXRwdXQgfSk7XG4gICAgICBzZW5kKHsgdHlwZTogXCJSRVFVRVNUX0FQUFJPVkFMXCIgfSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG5vQ29sb3JMaW5lLmluY2x1ZGVzKFwidmFyLlwiKSAmJlxuICAgICAgbm9Db2xvckxpbmUuaW5jbHVkZXMoXCJFbnRlciBhIHZhbHVlOlwiKVxuICAgICkge1xuICAgICAgaGlkZU91dHB1dCA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHZhcmlhYmxlTmFtZSA9IGV4dHJhY3RWYXJpYWJsZU5hbWVGcm9tUHJvbXB0KG91dHB1dCk7XG4gICAgICBzZW5kKHtcbiAgICAgICAgdHlwZTogXCJPVVRQVVRfUkVDRUlWRURcIixcbiAgICAgICAgb3V0cHV0OiBtaXNzaW5nVmFyaWFibGUodmFyaWFibGVOYW1lKSxcbiAgICAgIH0pO1xuICAgICAgc2VuZCh7IHR5cGU6IFwiVkFSSUFCTEVfTUlTU0lOR1wiLCB2YXJpYWJsZU5hbWUgfSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG5vQ29sb3JMaW5lLmluY2x1ZGVzKFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBzb2Z0IGZhaWxlZCBwb2xpY3kgY2hlY2s/XCIsXG4gICAgICApXG4gICAgKSB7XG4gICAgICBoaWRlT3V0cHV0ID0gdHJ1ZTtcbiAgICAgIHNlbmQoeyB0eXBlOiBcIk9VVFBVVF9SRUNFSVZFRFwiLCBvdXRwdXQgfSk7XG5cbiAgICAgIHNlbmQoeyB0eXBlOiBcIlJFUVVFU1RfU0VOVElORUxfT1ZFUlJJREVcIiB9KTtcbiAgICB9IGVsc2UgaWYgKG5vQ29sb3JMaW5lLmluY2x1ZGVzKFwib3ZlcnJpZGRlbiB1c2luZyB0aGUgVUkgb3IgQVBJXCIpKSB7XG4gICAgICBzZW5kKHsgdHlwZTogXCJPVkVSUklEREVOX0VYVEVSTkFMTFlcIiB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWhpZGVPdXRwdXQpIHtcbiAgICAgIHNlbmQoe1xuICAgICAgICB0eXBlOiBcIk9VVFBVVF9SRUNFSVZFRFwiLFxuICAgICAgICBvdXRwdXQsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBkZXBsb3lNYWNoaW5lID0gY3JlYXRlTWFjaGluZTxcbiAgRGVwbG95Q29udGV4dCxcbiAgRGVwbG95RXZlbnQsXG4gIERlcGxveVN0YXRlXG4+KFxuICB7XG4gICAgcHJlZGljdGFibGVBY3Rpb25Bcmd1bWVudHM6IHRydWUsXG4gICAgY29udGV4dDoge30sXG4gICAgaW5pdGlhbDogXCJpZGxlXCIsXG4gICAgaWQ6IFwicm9vdFwiLFxuICAgIHN0YXRlczoge1xuICAgICAgaWRsZToge1xuICAgICAgICBvbjoge1xuICAgICAgICAgIFNUQVJUOiB7IHRhcmdldDogXCJydW5uaW5nXCIgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBydW5uaW5nOiB7XG4gICAgICAgIGludm9rZToge1xuICAgICAgICAgIGlkOiBcInB0eVwiLFxuICAgICAgICAgIHNyYzogXCJydW5UZXJyYWZvcm1JblB0eVwiLFxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIEVYSVRFRDogXCJleGl0ZWRcIixcbiAgICAgICAgICBTVE9QOiBcInN0b3BwZWRcIixcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbDogXCJwcm9jZXNzaW5nXCIsXG4gICAgICAgIHN0YXRlczoge1xuICAgICAgICAgIC8vIFRPRE86IHdoYXQgZWxzZSBtaWdodCBURiBDTEkgYmUgYXNraW5nPyBDYW4gd2UgZGV0ZWN0IGFueSBxdWVzdGlvbiBmcm9tIHRoZSBURiBDTEkgdG8gc2hvdyBhIGdvb2QgZXJyb3I/XG4gICAgICAgICAgcHJvY2Vzc2luZzoge1xuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgUkVRVUVTVF9BUFBST1ZBTDogXCJhd2FpdGluZ19hcHByb3ZhbFwiLFxuICAgICAgICAgICAgICBSRVFVRVNUX1NFTlRJTkVMX09WRVJSSURFOiBcImF3YWl0aW5nX3NlbnRpbmVsX292ZXJyaWRlXCIsXG4gICAgICAgICAgICAgIFZBUklBQkxFX01JU1NJTkc6IHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBzZW5kKHsgdHlwZTogXCJFWElURURcIiwgZXhpdENvZGU6IDEgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXdhaXRpbmdfYXBwcm92YWw6IHtcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIEFQUFJPVkVEX0VYVEVSTkFMTFk6IFwicHJvY2Vzc2luZ1wiLFxuICAgICAgICAgICAgICBSRUpFQ1RFRF9FWFRFUk5BTExZOiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBcIiNyb290LmV4aXRlZFwiLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IGFzc2lnbjxcbiAgICAgICAgICAgICAgICAgIERlcGxveUNvbnRleHQsXG4gICAgICAgICAgICAgICAgICBEZXBsb3lFdmVudCAmIHsgdHlwZTogXCJSRUpFQ1RFRF9FWFRFUk5BTExZXCIgfVxuICAgICAgICAgICAgICAgID4oeyBjYW5jZWxsZWQ6IHRydWUgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIEFQUFJPVkU6IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IFwicHJvY2Vzc2luZ1wiLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IHNlbmQoXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiU0VORF9MSU5FXCIsIGlucHV0OiBcInllc1wiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRvOiBcInB0eVwiIH0sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgUkVKRUNUOiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBcInByb2Nlc3NpbmdcIixcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICBzZW5kKHsgdHlwZTogXCJTRU5EX0xJTkVcIiwgaW5wdXQ6IFwibm9cIiB9LCB7IHRvOiBcInB0eVwiIH0pLFxuICAgICAgICAgICAgICAgICAgYXNzaWduPERlcGxveUNvbnRleHQsIERlcGxveUV2ZW50ICYgeyB0eXBlOiBcIlJFSkVDVFwiIH0+KHtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsbGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhd2FpdGluZ19zZW50aW5lbF9vdmVycmlkZToge1xuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgT1ZFUlJJRERFTl9FWFRFUk5BTExZOiBcInByb2Nlc3NpbmdcIixcbiAgICAgICAgICAgICAgT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWToge1xuICAgICAgICAgICAgICAgIHRhcmdldDogXCIjcm9vdC5leGl0ZWRcIixcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBhc3NpZ248XG4gICAgICAgICAgICAgICAgICBEZXBsb3lDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgRGVwbG95RXZlbnQgJiB7IHR5cGU6IFwiT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWVwiIH1cbiAgICAgICAgICAgICAgICA+KHsgY2FuY2VsbGVkOiB0cnVlIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjaywgYmVjYXVzZSB0aGUgZXh0ZXJuYWwgZGlzY2FyZCBtZXNzYWdlXG4gICAgICAgICAgICAgIC8vIHBvc3RlZCBieSBUZXJyYWZvcm0gVUkgaXMgdGhlIHNhbWUgYXMgZHVyaW5nIGFwcGx5LiBTbywgd2UgY2FwdHVyZSB0aGF0XG4gICAgICAgICAgICAgIC8vIGFuZCBlbWl0IG91ciBvd24gZXZlbnQgdG8gbWFrZSBpdCBtb3JlIHNwZWNpZmljLlxuICAgICAgICAgICAgICBSRUpFQ1RFRF9FWFRFUk5BTExZOiB7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogc2VuZCh7IHR5cGU6IFwiT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWVwiIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBPVkVSUklERToge1xuICAgICAgICAgICAgICAgIHRhcmdldDogXCJwcm9jZXNzaW5nXCIsXG4gICAgICAgICAgICAgICAgYWN0aW9uczogc2VuZChcbiAgICAgICAgICAgICAgICAgIHsgdHlwZTogXCJTRU5EX0xJTkVcIiwgaW5wdXQ6IFwib3ZlcnJpZGVcIiB9LFxuICAgICAgICAgICAgICAgICAgeyB0bzogXCJwdHlcIiB9LFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFJFSkVDVF9PVkVSUklERToge1xuICAgICAgICAgICAgICAgIHRhcmdldDogXCJwcm9jZXNzaW5nXCIsXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgc2VuZCh7IHR5cGU6IFwiU0VORF9MSU5FXCIsIGlucHV0OiBcIm5vXCIgfSwgeyB0bzogXCJwdHlcIiB9KSxcbiAgICAgICAgICAgICAgICAgIGFzc2lnbjxcbiAgICAgICAgICAgICAgICAgICAgRGVwbG95Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgRGVwbG95RXZlbnQgJiB7IHR5cGU6IFwiUkVKRUNUX09WRVJSSURFXCIgfVxuICAgICAgICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZXhpdGVkOiB7IHR5cGU6IFwiZmluYWxcIiB9LFxuICAgICAgc3RvcHBlZDogeyB0eXBlOiBcImZpbmFsXCIgfSxcbiAgICB9LFxuICB9LFxuICB7XG4gICAgc2VydmljZXM6IHtcbiAgICAgIHJ1blRlcnJhZm9ybUluUHR5OiAoY29udGV4dCwgZXZlbnQpID0+XG4gICAgICAgIHRlcnJhZm9ybVB0eVNlcnZpY2UoY29udGV4dCwgZXZlbnQsIHNwYXduUHR5KSxcbiAgICB9LFxuICB9LFxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRlcnJhZm9ybVB0eVNlcnZpY2UoXG4gIF9jb250ZXh0OiBEZXBsb3lDb250ZXh0LFxuICBldmVudDogRGVwbG95RXZlbnQsXG4gIHNwYXduID0gc3Bhd25QdHksXG4pOiAoc2VuZDogU2VuZGVyPERlcGxveUV2ZW50Piwgb25SZWNlaXZlOiBSZWNlaXZlcjxEZXBsb3lFdmVudD4pID0+IHZvaWQge1xuICByZXR1cm4gKHNlbmQ6IFNlbmRlcjxEZXBsb3lFdmVudD4sIG9uUmVjZWl2ZTogUmVjZWl2ZXI8RGVwbG95RXZlbnQ+KSA9PiB7XG4gICAgaWYgKGV2ZW50LnR5cGUgIT09IFwiU1RBUlRcIikge1xuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICBgVGVycmFmb3JtIENMSSBpbnZvY2F0aW9uIHN0YXRlIG1hY2hpbmU6IFVuZXhwZWN0ZWQgZXZlbnQgY2F1c2VkIHRyYW5zaXRpb24gdG8gdGhlIHJ1bm5pbmcgc3RhdGU6ICR7ZXZlbnQudHlwZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb21tdW5pY2F0aW9uIGZyb20gdGhlIHB0eSB0byB0aGUgY2FsbGVyXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBidWZmZXJVbnRlcm1pbmF0ZWRMaW5lcyhoYW5kbGVMaW5lUmVjZWl2ZWQoc2VuZCkpO1xuICAgIGNvbnN0IHsgZXhpdENvZGUsIGFjdGlvbnMgfSA9IHNwYXduKGV2ZW50LnB0eSwgKGRhdGEpID0+IHtcbiAgICAgIHJlY2VpdmVyKGRhdGEpO1xuICAgIH0pO1xuXG4gICAgLy8gQ29tbXVuaWNhdGlvbiBmcm9tIHRoZSBjYWxsZXIgdG8gdGhlIHB0eVxuICAgIG9uUmVjZWl2ZSgoZXZlbnQ6IERlcGxveUV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJTRU5EX0xJTkVcIikge1xuICAgICAgICBhY3Rpb25zLndyaXRlTGluZShldmVudC5pbnB1dCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBleGl0Q29kZS50aGVuKChleGl0Q29kZSkgPT4ge1xuICAgICAgY29uc3QgbGFzdEJ1ZmZlciA9IHJlY2VpdmVyLmdldEJ1ZmZlcigpO1xuICAgICAgaWYgKGxhc3RCdWZmZXIubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgYFRlcnJhZm9ybSBDTEkgZXhpdGVkIGJ1dCB0aGUgbGFzdCBvdXRwdXR0ZWQgbGluZSB3YXMgbm90IHRlcm1pbmF0ZWQgd2l0aCBhIG5ld2xpbmUgYW5kIGhlbmNlIGlzIHN0aWxsIGluIHRoZSBidWZmZXIgYW5kIHdhc24ndCBwcmludGVkOiBcIiR7bGFzdEJ1ZmZlcn1cImAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHNlbmQoeyB0eXBlOiBcIkVYSVRFRFwiLCBleGl0Q29kZSB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsb2dnZXIudHJhY2UoXCJUZXJyYWZvcm0gQ0xJIHN0YXRlIG1hY2hpbmU6IGNsZWFuaW5nIHVwIHB0eVwiKTtcbiAgICAgIGFjdGlvbnMuc3RvcCgpO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbmRTdGFydERlcGxveVNlcnZpY2Uob3B0aW9uczoge1xuICByZWZyZXNoT25seT86IGJvb2xlYW47XG4gIHBhcmFsbGVsaXNtOiBudW1iZXI7XG4gIGV4dHJhT3B0aW9uczogc3RyaW5nW107XG4gIHRlcnJhZm9ybUJpbmFyeU5hbWU6IHN0cmluZztcbiAgYXV0b0FwcHJvdmU/OiBib29sZWFuO1xuICBub0NvbG9yPzogYm9vbGVhbjtcbiAgd29ya2Rpcjogc3RyaW5nO1xuICB2YXJzPzogc3RyaW5nW107XG4gIHZhckZpbGVzPzogc3RyaW5nW107XG59KSB7XG4gIGNvbnN0IHNlcnZpY2UgPSBpbnRlcnByZXQoZGVwbG95TWFjaGluZSk7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgXCJhcHBseVwiLFxuICAgIC4uLihvcHRpb25zLmF1dG9BcHByb3ZlID8gW1wiLWF1dG8tYXBwcm92ZVwiXSA6IFtdKSxcbiAgICAvLyBcIi1pbnB1dD1mYWxzZVwiLCB3ZSBjYW4ndCB1c2UgdGhpcyBhbnltb3JlIGJ1dCBUT0RPOiB3ZSBuZWVkIHRvIGRldGVjdCBURiBDTEkgYXNraW5nIGZvciBtaXNzaW5nIGlucHV0cyBhbmQgZWl0aGVyIGFsbG93IHBhc3NpbmcgdGhlbSBvciBzdG9wIHRoZXJlIGFuZCBmYWlsXG5cbiAgICAuLi5vcHRpb25zLmV4dHJhT3B0aW9ucyxcbiAgICAuLi4ob3B0aW9ucy5yZWZyZXNoT25seSA/IFtcIi1yZWZyZXNoLW9ubHlcIl0gOiBbXSksXG4gICAgLi4uKG9wdGlvbnMubm9Db2xvciA/IFtcIi1uby1jb2xvclwiXSA6IFtdKSxcbiAgICAuLi4ob3B0aW9ucy5wYXJhbGxlbGlzbSA+IC0xXG4gICAgICA/IFtgLXBhcmFsbGVsaXNtPSR7b3B0aW9ucy5wYXJhbGxlbGlzbX1gXVxuICAgICAgOiBbXSksXG4gIF07XG5cbiAgb3B0aW9ucy52YXJzPy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgYXJncy5wdXNoKGAtdmFyPSR7dn1gKTtcbiAgfSk7XG5cbiAgb3B0aW9ucy52YXJGaWxlcz8uZm9yRWFjaCgodikgPT4ge1xuICAgIGFyZ3MucHVzaChgLXZhci1maWxlPSR7dn1gKTtcbiAgfSk7XG5cbiAgbG9nZ2VyLmRlYnVnKFxuICAgIGBFeGVjdXRpbmcgJHtvcHRpb25zLnRlcnJhZm9ybUJpbmFyeU5hbWV9ICR7YXJncy5qb2luKFwiIFwiKX0gaW4gJHtcbiAgICAgIG9wdGlvbnMud29ya2RpclxuICAgIH1gLFxuICApO1xuXG4gIGNvbnN0IGNvbmZpZzogUHR5U3Bhd25Db25maWcgPSB7XG4gICAgZmlsZTogb3B0aW9ucy50ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgIGFyZ3MsXG4gICAgb3B0aW9uczoge1xuICAgICAgY3dkOiBvcHRpb25zLndvcmtkaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIC8vIFRPRE86IG1ha2UgdGhpcyBleHBsaWNpdCBhbmQgbW92ZSB0byBjYWxsZXIgb3Igd2hhdGV2ZXJcbiAgICB9LFxuICB9O1xuXG4gIHNlcnZpY2Uuc2VuZCh7IHR5cGU6IFwiU1RBUlRcIiwgcHR5OiBjb25maWcgfSk7XG5cbiAgcmV0dXJuIHNlcnZpY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbmRTdGFydERlc3Ryb3lTZXJ2aWNlKG9wdGlvbnM6IHtcbiAgcGFyYWxsZWxpc206IG51bWJlcjtcbiAgZXh0cmFPcHRpb25zOiBzdHJpbmdbXTtcbiAgdGVycmFmb3JtQmluYXJ5TmFtZTogc3RyaW5nO1xuICBhdXRvQXBwcm92ZT86IGJvb2xlYW47XG4gIG5vQ29sb3I/OiBib29sZWFuO1xuICB3b3JrZGlyOiBzdHJpbmc7XG4gIHZhcnM/OiBzdHJpbmdbXTtcbiAgdmFyRmlsZXM/OiBzdHJpbmdbXTtcbn0pIHtcbiAgY29uc3Qgc2VydmljZSA9IGludGVycHJldChkZXBsb3lNYWNoaW5lKTtcblxuICBjb25zdCBhcmdzID0gW1xuICAgIFwiZGVzdHJveVwiLFxuICAgIC4uLihvcHRpb25zLmF1dG9BcHByb3ZlID8gW1wiLWF1dG8tYXBwcm92ZVwiXSA6IFtdKSxcbiAgICAvLyBcIi1pbnB1dD1mYWxzZVwiLCB3ZSBjYW4ndCB1c2UgdGhpcyBhbnltb3JlIGJ1dCBUT0RPOiB3ZSBuZWVkIHRvIGRldGVjdCBURiBDTEkgYXNraW5nIGZvciBtaXNzaW5nIGlucHV0cyBhbmQgZWl0aGVyIGFsbG93IHBhc3NpbmcgdGhlbSBvciBzdG9wIHRoZXJlIGFuZCBmYWlsXG5cbiAgICAuLi5vcHRpb25zLmV4dHJhT3B0aW9ucyxcbiAgICAuLi4ob3B0aW9ucy5ub0NvbG9yID8gW1wiLW5vLWNvbG9yXCJdIDogW10pLFxuICAgIC4uLihvcHRpb25zLnBhcmFsbGVsaXNtID4gLTFcbiAgICAgID8gW2AtcGFyYWxsZWxpc209JHtvcHRpb25zLnBhcmFsbGVsaXNtfWBdXG4gICAgICA6IFtdKSxcbiAgXTtcblxuICBvcHRpb25zLnZhcnM/LmZvckVhY2goKHYpID0+IHtcbiAgICBhcmdzLnB1c2goYC12YXI9JHt2fWApO1xuICB9KTtcblxuICBvcHRpb25zLnZhckZpbGVzPy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgYXJncy5wdXNoKGAtdmFyLWZpbGU9JHt2fWApO1xuICB9KTtcblxuICBsb2dnZXIuZGVidWcoXG4gICAgYEV4ZWN1dGluZyAke29wdGlvbnMudGVycmFmb3JtQmluYXJ5TmFtZX0gJHthcmdzLmpvaW4oXCIgXCIpfSBpbiAke1xuICAgICAgb3B0aW9ucy53b3JrZGlyXG4gICAgfWAsXG4gICk7XG5cbiAgY29uc3QgY29uZmlnOiBQdHlTcGF3bkNvbmZpZyA9IHtcbiAgICBmaWxlOiBvcHRpb25zLnRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgYXJncyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBjd2Q6IG9wdGlvbnMud29ya2RpcixcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSwgLy8gVE9ETzogbWFrZSB0aGlzIGV4cGxpY2l0IGFuZCBtb3ZlIHRvIGNhbGxlciBvciB3aGF0ZXZlclxuICAgIH0sXG4gIH07XG5cbiAgc2VydmljZS5zZW5kKHsgdHlwZTogXCJTVEFSVFwiLCBwdHk6IGNvbmZpZyB9KTtcblxuICByZXR1cm4gc2VydmljZTtcbn1cbiJdfQ==
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LW1hY2hpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZXBsb3ktbWFjaGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7QUFFSCxtQ0FRZ0I7QUFDaEIsNENBQWdEO0FBQ2hELHNDQUE0QztBQUM1Qyw0REFBbUM7QUFDbkMsMkJBQXlCO0FBQ3pCLCtEQUcrQjtBQTRCL0IsU0FBZ0IsYUFBYSxDQUMzQixLQUFrQixFQUNsQixJQUFxQjtJQUVyQixPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO0FBQzdCLENBQUM7QUFMRCxzQ0FLQztBQWdDRCxTQUFnQiw2QkFBNkIsQ0FBQyxJQUFZO0lBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUEsb0JBQVMsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsTUFBTSxnQkFBTSxDQUFDLFFBQVEsQ0FDbkIsMkNBQTJDLElBQUksa0ZBQWtGLENBQ2xJLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdDLENBQUM7QUFWRCxzRUFVQztBQVdELCtGQUErRjtBQUMvRixTQUFnQix1QkFBdUIsQ0FDckMsT0FBaUM7SUFFakMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLFNBQVMsd0JBQXdCLENBQUMsTUFBYztRQUM5QyxNQUFNLElBQUksTUFBTSxDQUFDO1FBQ2pCLE1BQU0sS0FBSyxH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QUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3BCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBZ0MsRUFBRSwwREFBMEQ7U0FDMUc7S0FDRixDQUFDO0lBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFN0MsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQWxERCxvRUFrREMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7XG4gIGNyZWF0ZU1hY2hpbmUsXG4gIHNlbmQsXG4gIGludGVycHJldCxcbiAgRXZlbnRPYmplY3QsXG4gIGFzc2lnbixcbiAgU2VuZGVyLFxuICBSZWNlaXZlcixcbn0gZnJvbSBcInhzdGF0ZVwiO1xuaW1wb3J0IHsgRXJyb3JzLCBsb2dnZXIgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IG1pc3NpbmdWYXJpYWJsZSB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSBcInN0cmlwLWFuc2lcIjtcbmltcG9ydCB7IEVPTCB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHtcbiAgc3Bhd25JbnRlcmFjdGl2ZSxcbiAgSW50ZXJhY3RpdmVTcGF3bkNvbmZpZyxcbn0gZnJvbSBcIi4vaW50ZXJhY3RpdmUtcHJvY2Vzc1wiO1xuXG5pbnRlcmZhY2UgRGVwbG95Q29udGV4dCB7XG4gIGV4aXRDb2RlPzogbnVtYmVyO1xuICAvKipcbiAgICogVGVycmFmb3JtIHdpbGwgZXhpdCB3aXRoIDEgaWYgaXQgd2FzIGNhbmNlbGxlZCwgYnV0IHdlIGRvbid0IHdhbnQgdG8gZmFpbCBpbiB0aGF0IGNhc2VcbiAgICovXG4gIGNhbmNlbGxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIERlcGxveUV2ZW50ID1cbiAgfCB7IHR5cGU6IFwiU1RBUlRcIjsgcHR5OiBJbnRlcmFjdGl2ZVNwYXduQ29uZmlnIH1cbiAgfCB7IHR5cGU6IFwiU1RPUFwiIH1cbiAgfCB7IHR5cGU6IFwiU0VORF9MSU5FXCI7IGlucHV0OiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJPVVRQVVRfUkVDRUlWRURcIjsgb3V0cHV0OiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJBUFBST1ZFRF9FWFRFUk5BTExZXCIgfSAvLyBlLmcuIHZpYSBURkMgVUkgb3IgQVBJXG4gIHwgeyB0eXBlOiBcIlJFSkVDVEVEX0VYVEVSTkFMTFlcIiB9XG4gIHwgeyB0eXBlOiBcIk9WRVJSSURERU5fRVhURVJOQUxMWVwiIH1cbiAgfCB7IHR5cGU6IFwiT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWVwiIH1cbiAgfCB7IHR5cGU6IFwiT1ZFUlJJREVcIiB9XG4gIHwgeyB0eXBlOiBcIlJFSkVDVF9PVkVSUklERVwiIH1cbiAgfCB7IHR5cGU6IFwiUkVRVUVTVF9BUFBST1ZBTFwiIH1cbiAgfCB7IHR5cGU6IFwiVkFSSUFCTEVfTUlTU0lOR1wiOyB2YXJpYWJsZU5hbWU6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcIlJFUVVFU1RfU0VOVElORUxfT1ZFUlJJREVcIiB9XG4gIHwgeyB0eXBlOiBcIkFQUFJPVkVcIiB9XG4gIHwgeyB0eXBlOiBcIlJFSkVDVFwiIH1cbiAgfCB7IHR5cGU6IFwiRVhJVEVEXCI7IGV4aXRDb2RlOiBudW1iZXIgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVwbG95RXZlbnQ8RGVwbG95RXZlbnRUeXBlIGV4dGVuZHMgRGVwbG95RXZlbnRbXCJ0eXBlXCJdPihcbiAgZXZlbnQ6IEV2ZW50T2JqZWN0LFxuICB0eXBlOiBEZXBsb3lFdmVudFR5cGUsXG4pOiBldmVudCBpcyBEZXBsb3lFdmVudCAmIHsgdHlwZTogRGVwbG95RXZlbnRUeXBlIH0ge1xuICByZXR1cm4gZXZlbnQudHlwZSA9PT0gdHlwZTtcbn1cblxuZXhwb3J0IHR5cGUgRGVwbG95U3RhdGUgPVxuICB8IHtcbiAgICAgIHZhbHVlOiBcImlkbGVcIjtcbiAgICAgIGNvbnRleHQ6IERlcGxveUNvbnRleHQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHZhbHVlOiBcInJ1bm5pbmdcIjtcbiAgICAgIGNvbnRleHQ6IERlcGxveUNvbnRleHQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHZhbHVlOiB7IHJ1bm5pbmc6IFwicHJvY2Vzc2luZ1wiIH07XG4gICAgICBjb250ZXh0OiBEZXBsb3lDb250ZXh0O1xuICAgIH1cbiAgfCB7XG4gICAgICB2YWx1ZTogeyBydW5uaW5nOiBcImF3YWl0aW5nX2FwcHJvdmFsXCIgfTtcbiAgICAgIGNvbnRleHQ6IERlcGxveUNvbnRleHQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHZhbHVlOiB7IHJ1bm5pbmc6IFwiYXdhaXRpbmdfc2VudGluZWxfb3ZlcnJpZGVcIiB9O1xuICAgICAgY29udGV4dDogRGVwbG95Q29udGV4dDtcbiAgICB9XG4gIHwge1xuICAgICAgdmFsdWU6IFwiZXhpdGVkXCI7XG4gICAgICBjb250ZXh0OiBEZXBsb3lDb250ZXh0ICYgeyBleGl0Q29kZTogbnVtYmVyIH07XG4gICAgfVxuICB8IHtcbiAgICAgIHZhbHVlOiBcInN0b3BwZWRcIjtcbiAgICAgIGNvbnRleHQ6IERlcGxveUNvbnRleHQ7XG4gICAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RWYXJpYWJsZU5hbWVGcm9tUHJvbXB0KGxpbmU6IHN0cmluZykge1xuICBjb25zdCBub0NvbG9yTGluZSA9IHN0cmlwQW5zaShsaW5lKTtcbiAgY29uc3QgbGluZXMgPSBub0NvbG9yTGluZS5zcGxpdChcIlxcblwiKTtcbiAgY29uc3QgbGluZVdpdGhWYXIgPSBsaW5lcy5maW5kKChsaW5lKSA9PiBsaW5lLmluY2x1ZGVzKFwidmFyLlwiKSk7XG4gIGlmICghbGluZVdpdGhWYXIpIHtcbiAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICBgQ291bGQgbm90IGZpbmQgdmFyaWFibGUgbmFtZSBpbiBwcm9tcHQ6ICR7bGluZX0uIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSBidWcgaW4gY2RrdG4uIFBsZWFzZSByZXBvcnQgaXQgYXQgaHR0cDovL2Nka3RuLmlvL2lzc3Vlc2AsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbGluZVdpdGhWYXIuc3BsaXQoXCJ2YXIuXCIpWzFdLnRyaW0oKTtcbn1cblxuaW50ZXJmYWNlIEJ1ZmZlcmVkUmVjZWl2ZXJGdW5jdGlvbiB7XG4gIChvdXRwdXQ6IHN0cmluZyk6IHZvaWQ7XG4gIC8qKlxuICAgKiB1c2VkIHRvIGdldCB0aGUgbGFzdCBidWZmZXIgd2hlbiB0aGUgUFRZIGV4aXRzIHRvIGxvZyBhIGRlYnVnIG1lc3NhZ2UgaWYgdGhlcmUncyBvdXRwdXQgbGVmdCBpbiB0aGVyZVxuICAgKiAobWlnaHQgaGVscCBkZWJ1Z2dpbmcgb24gV2luZG93cyBpZiBFT0wgZnJvbSBOb2RlanMgZG9lc24ndCB3b3JrIGluIFdTTClcbiAgICovXG4gIGdldEJ1ZmZlcjogKCkgPT4gc3RyaW5nO1xufVxuXG4vLyB1c2VkIHRvIG9ubHkgc2VuZCBjb21wbGV0ZWQgbGluZXMgKD0gd2l0aCBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGVtKSB0byBvdXIgbG9naWMgKCMyODI3KVxuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlclVudGVybWluYXRlZExpbmVzKFxuICBoYW5kbGVyOiAob3V0cHV0OiBzdHJpbmcpID0+IHZvaWQsXG4pOiBCdWZmZXJlZFJlY2VpdmVyRnVuY3Rpb24ge1xuICBsZXQgYnVmZmVyID0gXCJcIjtcbiAgZnVuY3Rpb24gYnVmZmVyZWRSZWNlaXZlckZ1bmN0aW9uKG91dHB1dDogc3RyaW5nKSB7XG4gICAgYnVmZmVyICs9IG91dHB1dDtcbiAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgvW1xcblxccl0rLyk7XG5cbiAgICAvLyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBcXG4gdGhpcyB3aWxsIGJlIGFuIGVtcHR5IHN0cmluZ1xuICAgIC8vIGVsc2UgaXQgd2lsbCBjb250YWluIGFuIFwidW5maW5pc2hlZFwiIGxpbmVcbiAgICAvLyB0aGUgZmFsbGJhY2sgdG8gYW4gZW1wdHkgc3RyaW5nIGlzIHRvIG1ha2UgVFMgaGFwcHkgYW5kIHNob3VsZCBuZXZlciBoYXBwZW5cbiAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCBcIlwiO1xuXG4gICAgaWYgKGxpbmVzLmxlbmd0aCA+IDApIGhhbmRsZXIobGluZXMuam9pbihFT0wpICsgRU9MKTtcbiAgfVxuICBidWZmZXJlZFJlY2VpdmVyRnVuY3Rpb24uZ2V0QnVmZmVyID0gKCkgPT4gYnVmZmVyO1xuXG4gIHJldHVybiBidWZmZXJlZFJlY2VpdmVyRnVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVMaW5lUmVjZWl2ZWQoc2VuZDogKGV2ZW50OiBEZXBsb3lFdmVudCkgPT4gdm9pZCkge1xuICByZXR1cm4gKG91dHB1dDogc3RyaW5nKSA9PiB7XG4gICAgbGV0IGhpZGVPdXRwdXQgPSBmYWxzZTtcbiAgICBjb25zdCBub0NvbG9yTGluZSA9IHN0cmlwQW5zaShvdXRwdXQpO1xuXG4gICAgLy8gcG9zc2libGUgZXZlbnRzIGJhc2VkIG9uIGxpbmVcbiAgICBpZiAobm9Db2xvckxpbmUuaW5jbHVkZXMoXCJhcHByb3ZlZCB1c2luZyB0aGUgVUkgb3IgQVBJXCIpKSB7XG4gICAgICBzZW5kKHsgdHlwZTogXCJBUFBST1ZFRF9FWFRFUk5BTExZXCIgfSk7XG4gICAgfSBlbHNlIGlmIChub0NvbG9yTGluZS5pbmNsdWRlcyhcImRpc2NhcmRlZCB1c2luZyB0aGUgVUkgb3IgQVBJXCIpKSB7XG4gICAgICBzZW5kKHsgdHlwZTogXCJSRUpFQ1RFRF9FWFRFUk5BTExZXCIgfSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG5vQ29sb3JMaW5lLmluY2x1ZGVzKFwiRG8geW91IHdhbnQgdG8gcGVyZm9ybSB0aGVzZSBhY3Rpb25zXCIpIHx8XG4gICAgICBub0NvbG9yTGluZS5pbmNsdWRlcyhcIkRvIHlvdSByZWFsbHkgd2FudCB0byBkZXN0cm95IGFsbCByZXNvdXJjZXM/XCIpIHx8XG4gICAgICBub0NvbG9yTGluZS5pbmNsdWRlcyhcbiAgICAgICAgXCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVzdHJveSBhbGwgcmVzb3VyY2VzIGluIHdvcmtzcGFjZVwiLFxuICAgICAgKVxuICAgICkge1xuICAgICAgaGlkZU91dHB1dCA9IHRydWU7XG4gICAgICBzZW5kKHsgdHlwZTogXCJPVVRQVVRfUkVDRUlWRURcIiwgb3V0cHV0IH0pO1xuICAgICAgc2VuZCh7IHR5cGU6IFwiUkVRVUVTVF9BUFBST1ZBTFwiIH0pO1xuICAgIH0gZWxzZSBpZiAobm9Db2xvckxpbmUuaW5jbHVkZXMoXCJ2YXIuXCIpKSB7XG4gICAgICBoaWRlT3V0cHV0ID0gdHJ1ZTtcblxuICAgICAgY29uc3QgdmFyaWFibGVOYW1lID0gZXh0cmFjdFZhcmlhYmxlTmFtZUZyb21Qcm9tcHQob3V0cHV0KTtcbiAgICAgIHNlbmQoe1xuICAgICAgICB0eXBlOiBcIk9VVFBVVF9SRUNFSVZFRFwiLFxuICAgICAgICBvdXRwdXQ6IG1pc3NpbmdWYXJpYWJsZSh2YXJpYWJsZU5hbWUpLFxuICAgICAgfSk7XG4gICAgICBzZW5kKHsgdHlwZTogXCJWQVJJQUJMRV9NSVNTSU5HXCIsIHZhcmlhYmxlTmFtZSB9KTtcbiAgICB9IGVsc2UgaWYgKG5vQ29sb3JMaW5lLmluY2x1ZGVzKFwiRW50ZXIgYSB2YWx1ZTpcIikpIHtcbiAgICAgIC8vIFRoaXMgY29tZXMgYWxvbmcgd2l0aCBhYm92ZSBibG9jaywgYnV0IGlzIGEgc2VwYXJhdGUgbGluZVxuICAgICAgaGlkZU91dHB1dCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG5vQ29sb3JMaW5lLmluY2x1ZGVzKFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBzb2Z0IGZhaWxlZCBwb2xpY3kgY2hlY2s/XCIsXG4gICAgICApXG4gICAgKSB7XG4gICAgICBoaWRlT3V0cHV0ID0gdHJ1ZTtcbiAgICAgIHNlbmQoeyB0eXBlOiBcIk9VVFBVVF9SRUNFSVZFRFwiLCBvdXRwdXQgfSk7XG5cbiAgICAgIHNlbmQoeyB0eXBlOiBcIlJFUVVFU1RfU0VOVElORUxfT1ZFUlJJREVcIiB9KTtcbiAgICB9IGVsc2UgaWYgKG5vQ29sb3JMaW5lLmluY2x1ZGVzKFwib3ZlcnJpZGRlbiB1c2luZyB0aGUgVUkgb3IgQVBJXCIpKSB7XG4gICAgICBzZW5kKHsgdHlwZTogXCJPVkVSUklEREVOX0VYVEVSTkFMTFlcIiB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWhpZGVPdXRwdXQpIHtcbiAgICAgIHNlbmQoe1xuICAgICAgICB0eXBlOiBcIk9VVFBVVF9SRUNFSVZFRFwiLFxuICAgICAgICBvdXRwdXQsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBkZXBsb3lNYWNoaW5lID0gY3JlYXRlTWFjaGluZTxcbiAgRGVwbG95Q29udGV4dCxcbiAgRGVwbG95RXZlbnQsXG4gIERlcGxveVN0YXRlXG4+KFxuICB7XG4gICAgcHJlZGljdGFibGVBY3Rpb25Bcmd1bWVudHM6IHRydWUsXG4gICAgY29udGV4dDoge30sXG4gICAgaW5pdGlhbDogXCJpZGxlXCIsXG4gICAgaWQ6IFwicm9vdFwiLFxuICAgIHN0YXRlczoge1xuICAgICAgaWRsZToge1xuICAgICAgICBvbjoge1xuICAgICAgICAgIFNUQVJUOiB7IHRhcmdldDogXCJydW5uaW5nXCIgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBydW5uaW5nOiB7XG4gICAgICAgIGludm9rZToge1xuICAgICAgICAgIGlkOiBcInB0eVwiLFxuICAgICAgICAgIHNyYzogXCJydW5UZXJyYWZvcm1JblB0eVwiLFxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIEVYSVRFRDogXCJleGl0ZWRcIixcbiAgICAgICAgICBTVE9QOiBcInN0b3BwZWRcIixcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbDogXCJwcm9jZXNzaW5nXCIsXG4gICAgICAgIHN0YXRlczoge1xuICAgICAgICAgIC8vIFRPRE86IHdoYXQgZWxzZSBtaWdodCBURiBDTEkgYmUgYXNraW5nPyBDYW4gd2UgZGV0ZWN0IGFueSBxdWVzdGlvbiBmcm9tIHRoZSBURiBDTEkgdG8gc2hvdyBhIGdvb2QgZXJyb3I/XG4gICAgICAgICAgcHJvY2Vzc2luZzoge1xuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgUkVRVUVTVF9BUFBST1ZBTDogXCJhd2FpdGluZ19hcHByb3ZhbFwiLFxuICAgICAgICAgICAgICBSRVFVRVNUX1NFTlRJTkVMX09WRVJSSURFOiBcImF3YWl0aW5nX3NlbnRpbmVsX292ZXJyaWRlXCIsXG4gICAgICAgICAgICAgIFZBUklBQkxFX01JU1NJTkc6IHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBzZW5kKHsgdHlwZTogXCJFWElURURcIiwgZXhpdENvZGU6IDEgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXdhaXRpbmdfYXBwcm92YWw6IHtcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIEFQUFJPVkVEX0VYVEVSTkFMTFk6IFwicHJvY2Vzc2luZ1wiLFxuICAgICAgICAgICAgICBSRUpFQ1RFRF9FWFRFUk5BTExZOiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBcIiNyb290LmV4aXRlZFwiLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IGFzc2lnbjxcbiAgICAgICAgICAgICAgICAgIERlcGxveUNvbnRleHQsXG4gICAgICAgICAgICAgICAgICBEZXBsb3lFdmVudCAmIHsgdHlwZTogXCJSRUpFQ1RFRF9FWFRFUk5BTExZXCIgfVxuICAgICAgICAgICAgICAgID4oeyBjYW5jZWxsZWQ6IHRydWUgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIEFQUFJPVkU6IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IFwicHJvY2Vzc2luZ1wiLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IHNlbmQoXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiU0VORF9MSU5FXCIsIGlucHV0OiBcInllc1wiIH0sXG4gICAgICAgICAgICAgICAgICB7IHRvOiBcInB0eVwiIH0sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgUkVKRUNUOiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBcInByb2Nlc3NpbmdcIixcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICBzZW5kKHsgdHlwZTogXCJTRU5EX0xJTkVcIiwgaW5wdXQ6IFwibm9cIiB9LCB7IHRvOiBcInB0eVwiIH0pLFxuICAgICAgICAgICAgICAgICAgYXNzaWduPERlcGxveUNvbnRleHQsIERlcGxveUV2ZW50ICYgeyB0eXBlOiBcIlJFSkVDVFwiIH0+KHtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsbGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhd2FpdGluZ19zZW50aW5lbF9vdmVycmlkZToge1xuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgT1ZFUlJJRERFTl9FWFRFUk5BTExZOiBcInByb2Nlc3NpbmdcIixcbiAgICAgICAgICAgICAgT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWToge1xuICAgICAgICAgICAgICAgIHRhcmdldDogXCIjcm9vdC5leGl0ZWRcIixcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBhc3NpZ248XG4gICAgICAgICAgICAgICAgICBEZXBsb3lDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgRGVwbG95RXZlbnQgJiB7IHR5cGU6IFwiT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWVwiIH1cbiAgICAgICAgICAgICAgICA+KHsgY2FuY2VsbGVkOiB0cnVlIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjaywgYmVjYXVzZSB0aGUgZXh0ZXJuYWwgZGlzY2FyZCBtZXNzYWdlXG4gICAgICAgICAgICAgIC8vIHBvc3RlZCBieSBUZXJyYWZvcm0gVUkgaXMgdGhlIHNhbWUgYXMgZHVyaW5nIGFwcGx5LiBTbywgd2UgY2FwdHVyZSB0aGF0XG4gICAgICAgICAgICAgIC8vIGFuZCBlbWl0IG91ciBvd24gZXZlbnQgdG8gbWFrZSBpdCBtb3JlIHNwZWNpZmljLlxuICAgICAgICAgICAgICBSRUpFQ1RFRF9FWFRFUk5BTExZOiB7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogc2VuZCh7IHR5cGU6IFwiT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWVwiIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBPVkVSUklERToge1xuICAgICAgICAgICAgICAgIHRhcmdldDogXCJwcm9jZXNzaW5nXCIsXG4gICAgICAgICAgICAgICAgYWN0aW9uczogc2VuZChcbiAgICAgICAgICAgICAgICAgIHsgdHlwZTogXCJTRU5EX0xJTkVcIiwgaW5wdXQ6IFwib3ZlcnJpZGVcIiB9LFxuICAgICAgICAgICAgICAgICAgeyB0bzogXCJwdHlcIiB9LFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFJFSkVDVF9PVkVSUklERToge1xuICAgICAgICAgICAgICAgIHRhcmdldDogXCJwcm9jZXNzaW5nXCIsXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgc2VuZCh7IHR5cGU6IFwiU0VORF9MSU5FXCIsIGlucHV0OiBcIm5vXCIgfSwgeyB0bzogXCJwdHlcIiB9KSxcbiAgICAgICAgICAgICAgICAgIGFzc2lnbjxcbiAgICAgICAgICAgICAgICAgICAgRGVwbG95Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgRGVwbG95RXZlbnQgJiB7IHR5cGU6IFwiUkVKRUNUX09WRVJSSURFXCIgfVxuICAgICAgICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZXhpdGVkOiB7IHR5cGU6IFwiZmluYWxcIiB9LFxuICAgICAgc3RvcHBlZDogeyB0eXBlOiBcImZpbmFsXCIgfSxcbiAgICB9LFxuICB9LFxuICB7XG4gICAgc2VydmljZXM6IHtcbiAgICAgIHJ1blRlcnJhZm9ybUluUHR5OiAoY29udGV4dCwgZXZlbnQpID0+XG4gICAgICAgIHRlcnJhZm9ybVB0eVNlcnZpY2UoY29udGV4dCwgZXZlbnQsIHNwYXduSW50ZXJhY3RpdmUpLFxuICAgIH0sXG4gIH0sXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVycmFmb3JtUHR5U2VydmljZShcbiAgX2NvbnRleHQ6IERlcGxveUNvbnRleHQsXG4gIGV2ZW50OiBEZXBsb3lFdmVudCxcbiAgc3Bhd24gPSBzcGF3bkludGVyYWN0aXZlLFxuKTogKHNlbmQ6IFNlbmRlcjxEZXBsb3lFdmVudD4sIG9uUmVjZWl2ZTogUmVjZWl2ZXI8RGVwbG95RXZlbnQ+KSA9PiB2b2lkIHtcbiAgcmV0dXJuIChzZW5kOiBTZW5kZXI8RGVwbG95RXZlbnQ+LCBvblJlY2VpdmU6IFJlY2VpdmVyPERlcGxveUV2ZW50PikgPT4ge1xuICAgIGlmIChldmVudC50eXBlICE9PSBcIlNUQVJUXCIpIHtcbiAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgICAgYFRlcnJhZm9ybSBDTEkgaW52b2NhdGlvbiBzdGF0ZSBtYWNoaW5lOiBVbmV4cGVjdGVkIGV2ZW50IGNhdXNlZCB0cmFuc2l0aW9uIHRvIHRoZSBydW5uaW5nIHN0YXRlOiAke2V2ZW50LnR5cGV9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ29tbXVuaWNhdGlvbiBmcm9tIHRoZSBwdHkgdG8gdGhlIGNhbGxlclxuICAgIGNvbnN0IHJlY2VpdmVyID0gYnVmZmVyVW50ZXJtaW5hdGVkTGluZXMoaGFuZGxlTGluZVJlY2VpdmVkKHNlbmQpKTtcbiAgICBjb25zdCB7IGV4aXRDb2RlLCBhY3Rpb25zIH0gPSBzcGF3bihldmVudC5wdHksIChkYXRhKSA9PiB7XG4gICAgICByZWNlaXZlcihkYXRhKTtcbiAgICB9KTtcblxuICAgIC8vIENvbW11bmljYXRpb24gZnJvbSB0aGUgY2FsbGVyIHRvIHRoZSBwdHlcbiAgICBvblJlY2VpdmUoKGV2ZW50OiBEZXBsb3lFdmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiU0VORF9MSU5FXCIpIHtcbiAgICAgICAgYWN0aW9ucy53cml0ZUxpbmUoZXZlbnQuaW5wdXQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZXhpdENvZGUudGhlbigoZXhpdENvZGUpID0+IHtcbiAgICAgIGNvbnN0IGxhc3RCdWZmZXIgPSByZWNlaXZlci5nZXRCdWZmZXIoKTtcbiAgICAgIGlmIChsYXN0QnVmZmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBUZXJyYWZvcm0gQ0xJIGV4aXRlZCBidXQgdGhlIGxhc3Qgb3V0cHV0dGVkIGxpbmUgd2FzIG5vdCB0ZXJtaW5hdGVkIHdpdGggYSBuZXdsaW5lIGFuZCBoZW5jZSBpcyBzdGlsbCBpbiB0aGUgYnVmZmVyIGFuZCB3YXNuJ3QgcHJpbnRlZDogXCIke2xhc3RCdWZmZXJ9XCJgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzZW5kKHsgdHlwZTogXCJFWElURURcIiwgZXhpdENvZGUgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbG9nZ2VyLnRyYWNlKFwiVGVycmFmb3JtIENMSSBzdGF0ZSBtYWNoaW5lOiBjbGVhbmluZyB1cCBwdHlcIik7XG4gICAgICBhY3Rpb25zLnN0b3AoKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5kU3RhcnREZXBsb3lTZXJ2aWNlKG9wdGlvbnM6IHtcbiAgcmVmcmVzaE9ubHk/OiBib29sZWFuO1xuICBwYXJhbGxlbGlzbTogbnVtYmVyO1xuICBleHRyYU9wdGlvbnM6IHN0cmluZ1tdO1xuICB0ZXJyYWZvcm1CaW5hcnlOYW1lOiBzdHJpbmc7XG4gIGF1dG9BcHByb3ZlPzogYm9vbGVhbjtcbiAgbm9Db2xvcj86IGJvb2xlYW47XG4gIHdvcmtkaXI6IHN0cmluZztcbiAgdmFycz86IHN0cmluZ1tdO1xuICB2YXJGaWxlcz86IHN0cmluZ1tdO1xufSkge1xuICBjb25zdCBzZXJ2aWNlID0gaW50ZXJwcmV0KGRlcGxveU1hY2hpbmUpO1xuICBjb25zdCBhcmdzID0gW1xuICAgIFwiYXBwbHlcIixcbiAgICAuLi4ob3B0aW9ucy5hdXRvQXBwcm92ZSA/IFtcIi1hdXRvLWFwcHJvdmVcIl0gOiBbXSksXG4gICAgLy8gXCItaW5wdXQ9ZmFsc2VcIiwgd2UgY2FuJ3QgdXNlIHRoaXMgYW55bW9yZSBidXQgVE9ETzogd2UgbmVlZCB0byBkZXRlY3QgVEYgQ0xJIGFza2luZyBmb3IgbWlzc2luZyBpbnB1dHMgYW5kIGVpdGhlciBhbGxvdyBwYXNzaW5nIHRoZW0gb3Igc3RvcCB0aGVyZSBhbmQgZmFpbFxuXG4gICAgLi4ub3B0aW9ucy5leHRyYU9wdGlvbnMsXG4gICAgLi4uKG9wdGlvbnMucmVmcmVzaE9ubHkgPyBbXCItcmVmcmVzaC1vbmx5XCJdIDogW10pLFxuICAgIC4uLihvcHRpb25zLm5vQ29sb3IgPyBbXCItbm8tY29sb3JcIl0gOiBbXSksXG4gICAgLi4uKG9wdGlvbnMucGFyYWxsZWxpc20gPiAtMVxuICAgICAgPyBbYC1wYXJhbGxlbGlzbT0ke29wdGlvbnMucGFyYWxsZWxpc219YF1cbiAgICAgIDogW10pLFxuICBdO1xuXG4gIG9wdGlvbnMudmFycz8uZm9yRWFjaCgodikgPT4ge1xuICAgIGFyZ3MucHVzaChgLXZhcj0ke3Z9YCk7XG4gIH0pO1xuXG4gIG9wdGlvbnMudmFyRmlsZXM/LmZvckVhY2goKHYpID0+IHtcbiAgICBhcmdzLnB1c2goYC12YXItZmlsZT0ke3Z9YCk7XG4gIH0pO1xuXG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgRXhlY3V0aW5nICR7b3B0aW9ucy50ZXJyYWZvcm1CaW5hcnlOYW1lfSAke2FyZ3Muam9pbihcIiBcIil9IGluICR7XG4gICAgICBvcHRpb25zLndvcmtkaXJcbiAgICB9YCxcbiAgKTtcblxuICBjb25zdCBjb25maWc6IEludGVyYWN0aXZlU3Bhd25Db25maWcgPSB7XG4gICAgZmlsZTogb3B0aW9ucy50ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgIGFyZ3MsXG4gICAgb3B0aW9uczoge1xuICAgICAgY3dkOiBvcHRpb25zLndvcmtkaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIC8vIFRPRE86IG1ha2UgdGhpcyBleHBsaWNpdCBhbmQgbW92ZSB0byBjYWxsZXIgb3Igd2hhdGV2ZXJcbiAgICB9LFxuICB9O1xuXG4gIHNlcnZpY2Uuc2VuZCh7IHR5cGU6IFwiU1RBUlRcIiwgcHR5OiBjb25maWcgfSk7XG5cbiAgcmV0dXJuIHNlcnZpY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbmRTdGFydERlc3Ryb3lTZXJ2aWNlKG9wdGlvbnM6IHtcbiAgcGFyYWxsZWxpc206IG51bWJlcjtcbiAgZXh0cmFPcHRpb25zOiBzdHJpbmdbXTtcbiAgdGVycmFmb3JtQmluYXJ5TmFtZTogc3RyaW5nO1xuICBhdXRvQXBwcm92ZT86IGJvb2xlYW47XG4gIG5vQ29sb3I/OiBib29sZWFuO1xuICB3b3JrZGlyOiBzdHJpbmc7XG4gIHZhcnM/OiBzdHJpbmdbXTtcbiAgdmFyRmlsZXM/OiBzdHJpbmdbXTtcbn0pIHtcbiAgY29uc3Qgc2VydmljZSA9IGludGVycHJldChkZXBsb3lNYWNoaW5lKTtcblxuICBjb25zdCBhcmdzID0gW1xuICAgIFwiZGVzdHJveVwiLFxuICAgIC4uLihvcHRpb25zLmF1dG9BcHByb3ZlID8gW1wiLWF1dG8tYXBwcm92ZVwiXSA6IFtdKSxcbiAgICAvLyBcIi1pbnB1dD1mYWxzZVwiLCB3ZSBjYW4ndCB1c2UgdGhpcyBhbnltb3JlIGJ1dCBUT0RPOiB3ZSBuZWVkIHRvIGRldGVjdCBURiBDTEkgYXNraW5nIGZvciBtaXNzaW5nIGlucHV0cyBhbmQgZWl0aGVyIGFsbG93IHBhc3NpbmcgdGhlbSBvciBzdG9wIHRoZXJlIGFuZCBmYWlsXG5cbiAgICAuLi5vcHRpb25zLmV4dHJhT3B0aW9ucyxcbiAgICAuLi4ob3B0aW9ucy5ub0NvbG9yID8gW1wiLW5vLWNvbG9yXCJdIDogW10pLFxuICAgIC4uLihvcHRpb25zLnBhcmFsbGVsaXNtID4gLTFcbiAgICAgID8gW2AtcGFyYWxsZWxpc209JHtvcHRpb25zLnBhcmFsbGVsaXNtfWBdXG4gICAgICA6IFtdKSxcbiAgXTtcblxuICBvcHRpb25zLnZhcnM/LmZvckVhY2goKHYpID0+IHtcbiAgICBhcmdzLnB1c2goYC12YXI9JHt2fWApO1xuICB9KTtcblxuICBvcHRpb25zLnZhckZpbGVzPy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgYXJncy5wdXNoKGAtdmFyLWZpbGU9JHt2fWApO1xuICB9KTtcblxuICBsb2dnZXIuZGVidWcoXG4gICAgYEV4ZWN1dGluZyAke29wdGlvbnMudGVycmFmb3JtQmluYXJ5TmFtZX0gJHthcmdzLmpvaW4oXCIgXCIpfSBpbiAke1xuICAgICAgb3B0aW9ucy53b3JrZGlyXG4gICAgfWAsXG4gICk7XG5cbiAgY29uc3QgY29uZmlnOiBJbnRlcmFjdGl2ZVNwYXduQ29uZmlnID0ge1xuICAgIGZpbGU6IG9wdGlvbnMudGVycmFmb3JtQmluYXJ5TmFtZSxcbiAgICBhcmdzLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGN3ZDogb3B0aW9ucy53b3JrZGlyLFxuICAgICAgZW52OiBwcm9jZXNzLmVudiBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LCAvLyBUT0RPOiBtYWtlIHRoaXMgZXhwbGljaXQgYW5kIG1vdmUgdG8gY2FsbGVyIG9yIHdoYXRldmVyXG4gICAgfSxcbiAgfTtcblxuICBzZXJ2aWNlLnNlbmQoeyB0eXBlOiBcIlNUQVJUXCIsIHB0eTogY29uZmlnIH0pO1xuXG4gIHJldHVybiBzZXJ2aWNlO1xufVxuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) HashiCorp, Inc.
|
|
3
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { spawn } from "cross-spawn";
|
|
6
|
+
export interface InteractiveSpawnConfig {
|
|
7
|
+
file: Parameters<typeof spawn>[0];
|
|
8
|
+
args: Parameters<typeof spawn>[1];
|
|
9
|
+
options: Parameters<typeof spawn>[2] & {
|
|
10
|
+
cwd: string;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface InteractiveProcessActions {
|
|
14
|
+
write: (response: string) => void;
|
|
15
|
+
writeLine: (response: string) => void;
|
|
16
|
+
stop: () => void;
|
|
17
|
+
}
|
|
18
|
+
export interface InteractiveProcess {
|
|
19
|
+
exitCode: Promise<number>;
|
|
20
|
+
actions: InteractiveProcessActions;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A wrapper around child_process.spawn that handles the platform specific differences
|
|
24
|
+
* and provide an intuitive API for bidirectional communication with the
|
|
25
|
+
* spawned process.
|
|
26
|
+
*/
|
|
27
|
+
export declare function spawnInteractive(config: InteractiveSpawnConfig, onData: (data: string) => void): InteractiveProcess;
|
|
28
|
+
//# sourceMappingURL=interactive-process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-process.d.ts","sourceRoot":"","sources":["interactive-process.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IAEjC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,EAAE,yBAAyB,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC7B,kBAAkB,CA+DpB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) HashiCorp, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.spawnInteractive = void 0;
|
|
11
|
+
const cross_spawn_1 = require("cross-spawn");
|
|
12
|
+
const commons_1 = require("@cdktn/commons");
|
|
13
|
+
const os_1 = __importDefault(require("os"));
|
|
14
|
+
/**
|
|
15
|
+
* A wrapper around child_process.spawn that handles the platform specific differences
|
|
16
|
+
* and provide an intuitive API for bidirectional communication with the
|
|
17
|
+
* spawned process.
|
|
18
|
+
*/
|
|
19
|
+
function spawnInteractive(config, onData) {
|
|
20
|
+
var _a;
|
|
21
|
+
const { args, options } = config;
|
|
22
|
+
const file = config.file;
|
|
23
|
+
const writable = process.stdin.writable;
|
|
24
|
+
// Generally want interactive input for handling various prompts; however,
|
|
25
|
+
// also need to be able to write specific responses, so create a pipe if not normally possible.
|
|
26
|
+
options.stdio = [writable ? "inherit" : "pipe", "pipe", "pipe"];
|
|
27
|
+
commons_1.logger.trace(`Spawning process with file=${file}, args=${Array.isArray(args) ? `[${args.join(", ")}]` : `"${args}"`}, options=${JSON.stringify(options)}`);
|
|
28
|
+
const p = (0, cross_spawn_1.spawn)(file, args, options);
|
|
29
|
+
const actions = {
|
|
30
|
+
write: (response) => {
|
|
31
|
+
var _a;
|
|
32
|
+
commons_1.logger.trace(`Sending response to process (file=${file}, args=${Array.isArray(args) ? `[${args.join(", ")}]` : `"${args}"`}): ${response}`);
|
|
33
|
+
(_a = p.stdin) === null || _a === void 0 ? void 0 : _a.write(response);
|
|
34
|
+
},
|
|
35
|
+
writeLine: (response) => {
|
|
36
|
+
var _a;
|
|
37
|
+
commons_1.logger.trace(`Sending response (with newline) to process (file=${file}, args=${Array.isArray(args) ? `[${args.join(", ")}]` : `"${args}"`}): ${response}`);
|
|
38
|
+
(_a = p.stdin) === null || _a === void 0 ? void 0 : _a.write(`${response}${os_1.default.EOL}`);
|
|
39
|
+
},
|
|
40
|
+
stop: () => {
|
|
41
|
+
commons_1.logger.trace(`Aborting process (file=${file}, args=${Array.isArray(args) ? `[${args.join(", ")}]` : `"${args}"`})`);
|
|
42
|
+
p.kill();
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
(_a = p.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (chunk) => {
|
|
46
|
+
onData(chunk.toLocaleString());
|
|
47
|
+
});
|
|
48
|
+
const exitCode = new Promise((resolve) => {
|
|
49
|
+
p.once("close", (code) => {
|
|
50
|
+
if (code !== 0) {
|
|
51
|
+
commons_1.logger.debug(`Process (file=${file}, args=${Array.isArray(args) ? `[${args.join(", ")}]` : `"${args}"`}) exited with code ${exitCode}`);
|
|
52
|
+
}
|
|
53
|
+
resolve(code);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
return { exitCode, actions };
|
|
57
|
+
}
|
|
58
|
+
exports.spawnInteractive = spawnInteractive;
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtcHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVyYWN0aXZlLXByb2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7Ozs7O0FBRUgsNkNBQW9DO0FBQ3BDLDRDQUF3QztBQUN4Qyw0Q0FBb0I7QUFvQnBCOzs7O0dBSUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsTUFBOEIsRUFDOUIsTUFBOEI7O0lBRTlCLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFFekIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFFeEMsMEVBQTBFO0lBQzFFLCtGQUErRjtJQUMvRixPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFaEUsZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsOEJBQThCLElBQUksVUFDaEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUN6RCxhQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDdkMsQ0FBQztJQUVGLE1BQU0sQ0FBQyxHQUFHLElBQUEsbUJBQUssRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXJDLE1BQU0sT0FBTyxHQUE4QjtRQUN6QyxLQUFLLEVBQUUsQ0FBQyxRQUFnQixFQUFFLEVBQUU7O1lBQzFCLGdCQUFNLENBQUMsS0FBSyxDQUNWLHFDQUFxQyxJQUFJLFVBQ3ZDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FDekQsTUFBTSxRQUFRLEVBQUUsQ0FDakIsQ0FBQztZQUNGLE1BQUEsQ0FBQyxDQUFDLEtBQUssMENBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxRQUFnQixFQUFFLEVBQUU7O1lBQzlCLGdCQUFNLENBQUMsS0FBSyxDQUNWLG9EQUFvRCxJQUFJLFVBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FDekQsTUFBTSxRQUFRLEVBQUUsQ0FDakIsQ0FBQztZQUNGLE1BQUEsQ0FBQyxDQUFDLEtBQUssMENBQUUsS0FBSyxDQUFDLEdBQUcsUUFBUSxHQUFHLFlBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ1QsZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsMEJBQTBCLElBQUksVUFDNUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUN6RCxHQUFHLENBQ0osQ0FBQztZQUNGLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNYLENBQUM7S0FDRixDQUFDO0lBRUYsTUFBQSxDQUFDLENBQUMsTUFBTSwwQ0FBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7UUFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLENBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO1lBQy9CLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNmLGdCQUFNLENBQUMsS0FBSyxDQUNWLGlCQUFpQixJQUFJLFVBQ25CLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FDekQsc0JBQXNCLFFBQVEsRUFBRSxDQUNqQyxDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUMvQixDQUFDO0FBbEVELDRDQWtFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tIFwiY3Jvc3Mtc3Bhd25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEludGVyYWN0aXZlU3Bhd25Db25maWcge1xuICBmaWxlOiBQYXJhbWV0ZXJzPHR5cGVvZiBzcGF3bj5bMF07XG4gIGFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIHNwYXduPlsxXTtcbiAgb3B0aW9uczogUGFyYW1ldGVyczx0eXBlb2Ygc3Bhd24+WzJdICYgeyBjd2Q6IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVyYWN0aXZlUHJvY2Vzc0FjdGlvbnMge1xuICB3cml0ZTogKHJlc3BvbnNlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHdyaXRlTGluZTogKHJlc3BvbnNlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJhY3RpdmVQcm9jZXNzIHtcbiAgLy8gQWx3YXlzIHJlc29sdmVzLCByZXR1cm5zIHRoZSBleGl0IGNvZGUgb2YgdGhlIHByb2Nlc3NcbiAgZXhpdENvZGU6IFByb21pc2U8bnVtYmVyPjtcbiAgYWN0aW9uczogSW50ZXJhY3RpdmVQcm9jZXNzQWN0aW9ucztcbn1cblxuLyoqXG4gKiBBIHdyYXBwZXIgYXJvdW5kIGNoaWxkX3Byb2Nlc3Muc3Bhd24gdGhhdCBoYW5kbGVzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBkaWZmZXJlbmNlc1xuICogYW5kIHByb3ZpZGUgYW4gaW50dWl0aXZlIEFQSSBmb3IgYmlkaXJlY3Rpb25hbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlXG4gKiBzcGF3bmVkIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGF3bkludGVyYWN0aXZlKFxuICBjb25maWc6IEludGVyYWN0aXZlU3Bhd25Db25maWcsXG4gIG9uRGF0YTogKGRhdGE6IHN0cmluZykgPT4gdm9pZCxcbik6IEludGVyYWN0aXZlUHJvY2VzcyB7XG4gIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gY29uZmlnO1xuICBjb25zdCBmaWxlID0gY29uZmlnLmZpbGU7XG5cbiAgY29uc3Qgd3JpdGFibGUgPSBwcm9jZXNzLnN0ZGluLndyaXRhYmxlO1xuXG4gIC8vIEdlbmVyYWxseSB3YW50IGludGVyYWN0aXZlIGlucHV0IGZvciBoYW5kbGluZyB2YXJpb3VzIHByb21wdHM7IGhvd2V2ZXIsXG4gIC8vIGFsc28gbmVlZCB0byBiZSBhYmxlIHRvIHdyaXRlIHNwZWNpZmljIHJlc3BvbnNlcywgc28gY3JlYXRlIGEgcGlwZSBpZiBub3Qgbm9ybWFsbHkgcG9zc2libGUuXG4gIG9wdGlvbnMuc3RkaW8gPSBbd3JpdGFibGUgPyBcImluaGVyaXRcIiA6IFwicGlwZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdO1xuXG4gIGxvZ2dlci50cmFjZShcbiAgICBgU3Bhd25pbmcgcHJvY2VzcyB3aXRoIGZpbGU9JHtmaWxlfSwgYXJncz0ke1xuICAgICAgQXJyYXkuaXNBcnJheShhcmdzKSA/IGBbJHthcmdzLmpvaW4oXCIsIFwiKX1dYCA6IGBcIiR7YXJnc31cImBcbiAgICB9LCBvcHRpb25zPSR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YCxcbiAgKTtcblxuICBjb25zdCBwID0gc3Bhd24oZmlsZSwgYXJncywgb3B0aW9ucyk7XG5cbiAgY29uc3QgYWN0aW9uczogSW50ZXJhY3RpdmVQcm9jZXNzQWN0aW9ucyA9IHtcbiAgICB3cml0ZTogKHJlc3BvbnNlOiBzdHJpbmcpID0+IHtcbiAgICAgIGxvZ2dlci50cmFjZShcbiAgICAgICAgYFNlbmRpbmcgcmVzcG9uc2UgdG8gcHJvY2VzcyAoZmlsZT0ke2ZpbGV9LCBhcmdzPSR7XG4gICAgICAgICAgQXJyYXkuaXNBcnJheShhcmdzKSA/IGBbJHthcmdzLmpvaW4oXCIsIFwiKX1dYCA6IGBcIiR7YXJnc31cImBcbiAgICAgICAgfSk6ICR7cmVzcG9uc2V9YCxcbiAgICAgICk7XG4gICAgICBwLnN0ZGluPy53cml0ZShyZXNwb25zZSk7XG4gICAgfSxcbiAgICB3cml0ZUxpbmU6IChyZXNwb25zZTogc3RyaW5nKSA9PiB7XG4gICAgICBsb2dnZXIudHJhY2UoXG4gICAgICAgIGBTZW5kaW5nIHJlc3BvbnNlICh3aXRoIG5ld2xpbmUpIHRvIHByb2Nlc3MgKGZpbGU9JHtmaWxlfSwgYXJncz0ke1xuICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXJncykgPyBgWyR7YXJncy5qb2luKFwiLCBcIil9XWAgOiBgXCIke2FyZ3N9XCJgXG4gICAgICAgIH0pOiAke3Jlc3BvbnNlfWAsXG4gICAgICApO1xuICAgICAgcC5zdGRpbj8ud3JpdGUoYCR7cmVzcG9uc2V9JHtvcy5FT0x9YCk7XG4gICAgfSxcbiAgICBzdG9wOiAoKSA9PiB7XG4gICAgICBsb2dnZXIudHJhY2UoXG4gICAgICAgIGBBYm9ydGluZyBwcm9jZXNzIChmaWxlPSR7ZmlsZX0sIGFyZ3M9JHtcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGFyZ3MpID8gYFske2FyZ3Muam9pbihcIiwgXCIpfV1gIDogYFwiJHthcmdzfVwiYFxuICAgICAgICB9KWAsXG4gICAgICApO1xuICAgICAgcC5raWxsKCk7XG4gICAgfSxcbiAgfTtcblxuICBwLnN0ZG91dD8ub24oXCJkYXRhXCIsIChjaHVuazogQnVmZmVyKSA9PiB7XG4gICAgb25EYXRhKGNodW5rLnRvTG9jYWxlU3RyaW5nKCkpO1xuICB9KTtcblxuICBjb25zdCBleGl0Q29kZSA9IG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUpID0+IHtcbiAgICBwLm9uY2UoXCJjbG9zZVwiLCAoY29kZTogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgYFByb2Nlc3MgKGZpbGU9JHtmaWxlfSwgYXJncz0ke1xuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShhcmdzKSA/IGBbJHthcmdzLmpvaW4oXCIsIFwiKX1dYCA6IGBcIiR7YXJnc31cImBcbiAgICAgICAgICB9KSBleGl0ZWQgd2l0aCBjb2RlICR7ZXhpdENvZGV9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoY29kZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB7IGV4aXRDb2RlLCBhY3Rpb25zIH07XG59XG4iXX0=
|
|
@@ -36,7 +36,7 @@ const deploy_machine_1 = require("./deploy-machine");
|
|
|
36
36
|
const waitFor_1 = require("xstate/lib/waitFor");
|
|
37
37
|
const errors_1 = require("../errors");
|
|
38
38
|
const terraform_json_1 = require("../terraform-json");
|
|
39
|
-
const
|
|
39
|
+
const interactive_process_1 = require("./interactive-process");
|
|
40
40
|
const path_1 = __importDefault(require("path"));
|
|
41
41
|
const fs = __importStar(require("fs-extra"));
|
|
42
42
|
const GENERATE_CONFIG_OUT_FILE = "generated_resources.tf";
|
|
@@ -102,7 +102,7 @@ class TerraformCli {
|
|
|
102
102
|
initCanNotContinue = reject;
|
|
103
103
|
});
|
|
104
104
|
const stdout = this.onStdout("init");
|
|
105
|
-
const { actions, exitCode } = (0,
|
|
105
|
+
const { actions, exitCode } = (0, interactive_process_1.spawnInteractive)({
|
|
106
106
|
file: commons_1.terraformBinaryName,
|
|
107
107
|
args,
|
|
108
108
|
options: {
|
|
@@ -354,4 +354,4 @@ async function tryRemoveGeneratedConfigurationFile(workingDir) {
|
|
|
354
354
|
}
|
|
355
355
|
}
|
|
356
356
|
exports.tryRemoveGeneratedConfigurationFile = tryRemoveGeneratedConfigurationFile;
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWNsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlcnJhZm9ybS1jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDREQUFtQztBQUNuQyw0Q0FNd0I7QUFDeEIsMkNBTXFCO0FBRXJCLHFEQUswQjtBQUMxQixnREFBNkM7QUFDN0Msc0NBQTRDO0FBQzVDLHNEQUF3RDtBQUN4RCwrQ0FBeUM7QUFDekMsZ0RBQXdCO0FBQ3hCLDZDQUErQjtBQUUvQixNQUFNLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO0FBRTFELE1BQWEsZ0JBQ1gsU0FBUSxpQ0FBcUI7SUFHN0IsWUFDa0IsUUFBZ0IsRUFDaEIsSUFBNEI7UUFFNUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsZ0JBQWdCLEVBQUUsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGNBQWMsQ0FBQyxDQUFDO1FBSDlDLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBd0I7SUFHOUMsQ0FBQztDQUNGO0FBVkQsNENBVUM7QUFFRCxNQUFlLG9CQUFvQjtDQUdsQztBQUdELDRGQUE0RjtBQUM1RixnR0FBZ0c7QUFDaEcsTUFBTSxzQkFBdUIsU0FBUSxvQkFBb0I7SUFDdkQscURBQXFEO0lBQ3JELElBQUk7SUFDSiwwQ0FBMEM7SUFDMUMsSUFBSTtJQUNKLDJDQUEyQztJQUMzQywrQkFBK0I7SUFDL0IsSUFBSTtJQUNKLGdGQUFnRjtJQUNoRixnRkFBZ0Y7SUFDaEYsa0JBQWtCO0lBQ1gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFhO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVMsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUU5QixPQUFPLENBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1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QUFpQyxDQUNyRCxVQUFrQjtJQUVsQixNQUFNLG1CQUFtQixHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDNUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBUkQsOEVBUUM7QUFFTSxLQUFLLFVBQVUsbUNBQW1DLENBQUMsVUFBa0I7SUFDMUUsTUFBTSxtQkFBbUIsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQzVFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7UUFDdkMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7QUFDSCxDQUFDO0FBTEQsa0ZBS0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHN0cmlwQW5zaSBmcm9tIFwic3RyaXAtYW5zaVwiO1xuaW1wb3J0IHtcbiAgRXJyb3JzLFxuICBleGVjLFxuICBsb2dnZXIsXG4gIHJlYWRDREtURlZlcnNpb24sXG4gIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHtcbiAgVGVycmFmb3JtLFxuICBUZXJyYWZvcm1QbGFuLFxuICBUZXJyYWZvcm1PdXRwdXQsXG4gIEFic3RyYWN0VGVycmFmb3JtUGxhbixcbiAgVGVycmFmb3JtRGVwbG95U3RhdGUsXG59IGZyb20gXCIuL3RlcnJhZm9ybVwiO1xuaW1wb3J0IHsgU3ludGhlc2l6ZWRTdGFjayB9IGZyb20gXCIuLi9zeW50aC1zdGFja1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5kU3RhcnREZXBsb3lTZXJ2aWNlLFxuICBjcmVhdGVBbmRTdGFydERlc3Ryb3lTZXJ2aWNlLFxuICBEZXBsb3lTdGF0ZSxcbiAgaXNEZXBsb3lFdmVudCxcbn0gZnJvbSBcIi4vZGVwbG95LW1hY2hpbmVcIjtcbmltcG9ydCB7IHdhaXRGb3IgfSBmcm9tIFwieHN0YXRlL2xpYi93YWl0Rm9yXCI7XG5pbXBvcnQgeyBtaXNzaW5nVmFyaWFibGUgfSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5pbXBvcnQgeyB0ZXJyYWZvcm1Kc29uU2NoZW1hIH0gZnJvbSBcIi4uL3RlcnJhZm9ybS1qc29uXCI7XG5pbXBvcnQgeyBzcGF3blB0eSB9IGZyb20gXCIuL3B0eS1wcm9jZXNzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5cbmNvbnN0IEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSA9IFwiZ2VuZXJhdGVkX3Jlc291cmNlcy50ZlwiO1xuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtQ2xpUGxhblxuICBleHRlbmRzIEFic3RyYWN0VGVycmFmb3JtUGxhblxuICBpbXBsZW1lbnRzIFRlcnJhZm9ybVBsYW5cbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHBsYW5GaWxlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHBsYW46IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gICkge1xuICAgIHN1cGVyKHBsYW5GaWxlLCBwbGFuPy5yZXNvdXJjZV9jaGFuZ2VzLCBwbGFuPy5vdXRwdXRfY2hhbmdlcyk7XG4gIH1cbn1cblxuYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RPdXRwdXRGaWx0ZXIge1xuICBwdWJsaWMgc3RhdGljIGNvbmRpdGlvbjogKGxpbmU6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgcHVibGljIHN0YXRpYyB0cmFuc2Zvcm06IChsaW5lOiBzdHJpbmcpID0+IHN0cmluZztcbn1cbmV4cG9ydCB0eXBlIE91dHB1dEZpbHRlciA9IHR5cGVvZiBBYnN0cmFjdE91dHB1dEZpbHRlcjtcblxuLy8gVGhlIHBsYW4gbWlnaHQgZXJyb3IgaWYgdGhlcmUgaXMgYSB2YXJpYWJsZSBtaXNzaW5nLCBidXQgdGhlIGVycm9yIG1lc3NhZ2UgaGludHMgdGhlIHVzZXJcbi8vIGluIGEgd3JvbmcgZGlyZWN0aW9uLiBXZSB0aGVyZWZvcmUgY2F0Y2ggdGhlIGVycm9yIGFuZCByZXRocm93IGl0IHdpdGggYSBtb3JlIGhlbHBmdWwgbWVzc2FnZVxuY2xhc3MgVmFyaWFibGVSZXF1aXJlZEZpbHRlciBleHRlbmRzIEFic3RyYWN0T3V0cHV0RmlsdGVyIHtcbiAgLy8gRXhhbXBsZSBmb3IgXCJObyB2YWx1ZSBmb3IgcmVxdWlyZWQgdmFyaWFibGVcIiBlcnJvclxuICAvLyDilbdcbiAgLy8g4pSCIEVycm9yOiBObyB2YWx1ZSBmb3IgcmVxdWlyZWQgdmFyaWFibGVcbiAgLy8g4pSCXG4gIC8vIOKUgiAgIG9uIGNkay50Zi5qc29uIGxpbmUgMzEsIGluIHZhcmlhYmxlOlxuICAvLyDilIIgICAzMTogICAgIFwid2l0aC1kYXNoZXNcIjoge1xuICAvLyDilIJcbiAgLy8g4pSCIFRoZSByb290IG1vZHVsZSBpbnB1dCB2YXJpYWJsZSBcIndpdGgtZGFzaGVzXCIgaXMgbm90IHNldCwgYW5kIGhhcyBubyBkZWZhdWx0XG4gIC8vIOKUgiB2YWx1ZS4gVXNlIGEgLXZhciBvciAtdmFyLWZpbGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHRvIHByb3ZpZGUgYSB2YWx1ZSBmb3JcbiAgLy8g4pSCIHRoaXMgdmFyaWFibGVcbiAgcHVibGljIHN0YXRpYyBjb25kaXRpb24oaW5wdXQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmUgPSBzdHJpcEFuc2koaW5wdXQpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGxpbmUuaW5jbHVkZXMoXCJFcnJvcjogTm8gdmFsdWUgZm9yIHJlcXVpcmVkIHZhcmlhYmxlXCIpICYmXG4gICAgICBsaW5lLmluY2x1ZGVzKFwiVGhlIHJvb3QgbW9kdWxlIGlucHV0IHZhcmlhYmxlXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHRyYW5zZm9ybShsaW5lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdGFydE1hcmtlciA9ICdUaGUgcm9vdCBtb2R1bGUgaW5wdXQgdmFyaWFibGUgXCInO1xuICAgIGNvbnN0IHZhcmlhYmxlTmFtZSA9IGxpbmUuc3Vic3RyaW5nKFxuICAgICAgbGluZS5pbmRleE9mKHN0YXJ0TWFya2VyKSArIHN0YXJ0TWFya2VyLmxlbmd0aCxcbiAgICAgIGxpbmUuaW5kZXhPZignXCIgaXMgbm90IHNldCcpLFxuICAgICk7XG5cbiAgICByZXR1cm4gbWlzc2luZ1ZhcmlhYmxlKHZhcmlhYmxlTmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlcnJhZm9ybUNsaSBpbXBsZW1lbnRzIFRlcnJhZm9ybSB7XG4gIHB1YmxpYyByZWFkb25seSB3b3JrZGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25TdGRvdXQ6IChcbiAgICBzdGF0ZU5hbWU6IHN0cmluZyxcbiAgICBmaWx0ZXI/OiBPdXRwdXRGaWx0ZXJbXSxcbiAgKSA9PiAoc3Rkb3V0OiBCdWZmZXIgfCBzdHJpbmcpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25TdGRlcnI6IChcbiAgICBzdGF0ZU5hbWU6IHN0cmluZyxcbiAgICBmaWx0ZXI/OiBPdXRwdXRGaWx0ZXJbXSxcbiAgKSA9PiAoc3RkZXJyOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsLFxuICAgIHB1YmxpYyByZWFkb25seSBzdGFjazogU3ludGhlc2l6ZWRTdGFjayxcbiAgICBjcmVhdGVUZXJyYWZvcm1Mb2dIYW5kbGVyID0gKF9waGFzZTogc3RyaW5nLCBfZmlsdGVyPzogT3V0cHV0RmlsdGVyW10pID0+XG4gICAgICAoX3N0ZG91dDogc3RyaW5nLCBfaXNFcnIgPSBmYWxzZSkgPT4ge30sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICkge1xuICAgIHRoaXMud29ya2RpciA9IHN0YWNrLndvcmtpbmdEaXJlY3Rvcnk7XG4gICAgdGhpcy5vblN0ZG91dCA9XG4gICAgICAocGhhc2U6IHN0cmluZywgZmlsdGVyPzogT3V0cHV0RmlsdGVyW10pID0+IChzdGRvdXQ6IEJ1ZmZlciB8IHN0cmluZykgPT5cbiAgICAgICAgY3JlYXRlVGVycmFmb3JtTG9nSGFuZGxlcihcbiAgICAgICAgICBwaGFzZSxcbiAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICkoQnVmZmVyLmlzQnVmZmVyKHN0ZG91dCkgPyBzdGRvdXQudG9TdHJpbmcoKSA6IHN0ZG91dCk7XG4gICAgdGhpcy5vblN0ZGVyciA9XG4gICAgICAocGhhc2U6IHN0cmluZywgZmlsdGVyPzogT3V0cHV0RmlsdGVyW10pID0+XG4gICAgICAoc3RkZXJyOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PlxuICAgICAgICBjcmVhdGVUZXJyYWZvcm1Mb2dIYW5kbGVyKHBoYXNlLCBmaWx0ZXIpKHN0ZGVyci50b1N0cmluZygpLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0KG9wdHM6IHtcbiAgICBuZWVkc1VwZ3JhZGU6IGJvb2xlYW47XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gICAgbWlncmF0ZVN0YXRlOiBib29sZWFuO1xuICAgIG5lZWRzTG9ja2ZpbGVVcGRhdGU6IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNldFVzZXJBZ2VudCgpO1xuXG4gICAgY29uc3QgYXJncyA9IFtcImluaXRcIl07XG4gICAgaWYgKG9wdHMubmVlZHNVcGdyYWRlKSB7XG4gICAgICBhcmdzLnB1c2goXCItdXBncmFkZVwiKTtcbiAgICB9XG4gICAgaWYgKG9wdHMubm9Db2xvcikge1xuICAgICAgYXJncy5wdXNoKFwiLW5vLWNvbG9yXCIpO1xuICAgIH1cbiAgICBpZiAob3B0cy5taWdyYXRlU3RhdGUpIHtcbiAgICAgIGFyZ3MucHVzaChcIi1taWdyYXRlLXN0YXRlXCIpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBsZXQgaW5pdENhbk5vdENvbnRpbnVlID0gKF9lcnI6IGFueSkgPT4ge307XG4gICAgY29uc3QgcmVqZWN0c0lmSW5pdENhbk5vdENvbnRpbnVlID0gbmV3IFByb21pc2UoKF9yZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGluaXRDYW5Ob3RDb250aW51ZSA9IHJlamVjdDtcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0ZG91dCA9IHRoaXMub25TdGRvdXQoXCJpbml0XCIpO1xuICAgIGNvbnN0IHsgYWN0aW9ucywgZXhpdENvZGUgfSA9IHNwYXduUHR5KFxuICAgICAge1xuICAgICAgICBmaWxlOiB0ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgICAgICBhcmdzLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgY3dkOiB0aGlzLndvcmtkaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudiBhcyBhbnksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgc3Rkb3V0KGRhdGEpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YS5pbmNsdWRlcyhcIlNob3VsZCBUZXJyYWZvcm0gbWlncmF0ZSB5b3VyIGV4aXN0aW5nIHN0YXRlP1wiKSB8fFxuICAgICAgICAgIGRhdGEuaW5jbHVkZXMoXCJEbyB5b3Ugd2FudCB0byBjb3B5IGV4aXN0aW5nIHN0YXRlIHRvIHRoZSBuZXcgYmFja2VuZFwiKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUT0RPOiBUaGlzIG9ubHkgaGFwcGVucyB3aGVuIHRlcnJhZm9ybSBpcyBwYXNzZWQgdGhlIC1taWdyYXRlLXN0YXRlIGFueXdheSwgc28gdGhpcyBjaGVjayBpcyByZWR1bmRhbnRcbiAgICAgICAgICBpZiAob3B0cy5taWdyYXRlU3RhdGUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMud3JpdGVMaW5lKFwieWVzXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY3Rpb25zLnN0b3AoKTtcbiAgICAgICAgICAgIGluaXRDYW5Ob3RDb250aW51ZShcbiAgICAgICAgICAgICAgXCJQbGVhc2UgcGFzcyB0aGUgLS1taWdyYXRlLXN0YXRlIGZsYWcgdG8gbWlncmF0ZSB5b3VyIHN0YXRlXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMuYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcbiAgICAgIGFjdGlvbnMuc3RvcCgpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBleGl0Q29kZS50aGVuKChjb2RlKSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRlcnJhZm9ybSBpbml0IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAke2NvZGV9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtwcm9ncmVzcywgcmVqZWN0c0lmSW5pdENhbk5vdENvbnRpbnVlXSk7XG5cbiAgICAvLyBUT0RPOiB0aGlzIG1pZ2h0IGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBpZiB3ZSdyZVxuICAgIC8vIHJ1bm5pbmcgYSByZW1vdGUgcGxhbiBvciBhIGxvY2FsIG9uZSAoc28gd2UgcnVuIGl0IGFsd2F5cyBmb3IgYWxsIHBsYXRmb3JtcylcbiAgICAvLyB3aGlsZSB3ZSdkIG9ubHkgbmVlZCBpdCBmb3IgcmVtb3RlIHBsYW5zXG4gICAgaWYgKG9wdHMubmVlZHNMb2NrZmlsZVVwZGF0ZSkge1xuICAgICAgYXdhaXQgZXhlYyhcbiAgICAgICAgdGVycmFmb3JtQmluYXJ5TmFtZSxcbiAgICAgICAgW1xuICAgICAgICAgIFwicHJvdmlkZXJzXCIsXG4gICAgICAgICAgXCJsb2NrXCIsXG4gICAgICAgICAgXCItcGxhdGZvcm09bGludXhfYW1kNjRcIixcbiAgICAgICAgICAuLi4ob3B0cy5ub0NvbG9yID8gW1wiLW5vLWNvbG9yXCJdIDogW10pLFxuICAgICAgICBdLFxuICAgICAgICB7XG4gICAgICAgICAgY3dkOiB0aGlzLndvcmtkaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBzaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgbm9Db2xvcjogb3B0cy5ub0NvbG9yLFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLm9uU3Rkb3V0KFwiaW5pdFwiKSxcbiAgICAgICAgdGhpcy5vblN0ZGVycihcImluaXRcIiksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzQ2xvdWRTdGFjaygpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYXJzZWRTdGFjayA9IHRlcnJhZm9ybUpzb25TY2hlbWEucGFyc2UoXG4gICAgICBKU09OLnBhcnNlKHRoaXMuc3RhY2suY29udGVudCksXG4gICAgKTtcblxuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgcGFyc2VkU3RhY2sudGVycmFmb3JtPy5iYWNrZW5kPy5yZW1vdGUgfHwgcGFyc2VkU3RhY2sudGVycmFmb3JtPy5jbG91ZCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaGFzSW1wb3J0cygpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYXJzZWRTdGFjayA9IHRlcnJhZm9ybUpzb25TY2hlbWEucGFyc2UoXG4gICAgICBKU09OLnBhcnNlKHRoaXMuc3RhY2suY29udGVudCksXG4gICAgKTtcblxuICAgIHJldHVybiBCb29sZWFuKHBhcnNlZFN0YWNrLmltcG9ydCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxhbihvcHRzOiB7XG4gICAgZGVzdHJveTogYm9vbGVhbjtcbiAgICByZWZyZXNoT25seT86IGJvb2xlYW47XG4gICAgcGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgdmFycz86IHN0cmluZ1tdO1xuICAgIHZhckZpbGVzPzogc3RyaW5nW107XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7XG4gICAgICBkZXN0cm95ID0gZmFsc2UsXG4gICAgICByZWZyZXNoT25seSA9IGZhbHNlLFxuICAgICAgcGFyYWxsZWxpc20gPSAtMSxcbiAgICAgIHZhcnMgPSBbXSxcbiAgICAgIHZhckZpbGVzID0gW10sXG4gICAgICBub0NvbG9yID0gZmFsc2UsXG4gICAgfSA9IG9wdHM7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcInBsYW5cIiwgXCItaW5wdXQ9ZmFsc2VcIl07XG5cbiAgICBjb25zdCBnZW5lcmF0ZWRDb25maWdGaWxlID0gcGF0aC5qb2luKFxuICAgICAgdGhpcy53b3JrZGlyLFxuICAgICAgR0VORVJBVEVfQ09ORklHX09VVF9GSUxFLFxuICAgICk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZ2VuZXJhdGVkQ29uZmlnRmlsZSkpIHtcbiAgICAgIGZzLnJlbW92ZShnZW5lcmF0ZWRDb25maWdGaWxlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzSW1wb3J0cykge1xuICAgICAgb3B0aW9ucy5wdXNoKGAtZ2VuZXJhdGUtY29uZmlnLW91dD0ke0dFTkVSQVRFX0NPTkZJR19PVVRfRklMRX1gKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzQ2xvdWRTdGFjaykge1xuICAgICAgY29uc3QgcGxhbkZpbGUgPSBcInBsYW5cIjtcbiAgICAgIG9wdGlvbnMucHVzaChcIi1vdXRcIiwgcGxhbkZpbGUpO1xuICAgIH1cblxuICAgIGlmIChkZXN0cm95KSB7XG4gICAgICBvcHRpb25zLnB1c2goXCItZGVzdHJveVwiKTtcbiAgICB9XG4gICAgaWYgKHJlZnJlc2hPbmx5KSB7XG4gICAgICBvcHRpb25zLnB1c2goXCItcmVmcmVzaC1vbmx5XCIpO1xuICAgIH1cbiAgICBpZiAocGFyYWxsZWxpc20gPiAtMSkge1xuICAgICAgb3B0aW9ucy5wdXNoKGAtcGFyYWxsZWxpc209JHtwYXJhbGxlbGlzbX1gKTtcbiAgICB9XG4gICAgaWYgKG5vQ29sb3IpIHtcbiAgICAgIG9wdGlvbnMucHVzaChcIi1uby1jb2xvclwiKTtcbiAgICB9XG5cbiAgICB2YXJzLmZvckVhY2goKHYpID0+IG9wdGlvbnMucHVzaChgLXZhcj0ke3Z9YCkpO1xuICAgIHZhckZpbGVzLmZvckVhY2goKHYpID0+IG9wdGlvbnMucHVzaChgLXZhci1maWxlPSR7dn1gKSk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgRXhlY3V0aW5nICR7dGVycmFmb3JtQmluYXJ5TmFtZX0gJHtvcHRpb25zLmpvaW4oXCIgXCIpfSBpbiAke3RoaXMud29ya2Rpcn1gLFxuICAgICk7XG5cbiAgICBhd2FpdCB0aGlzLnNldFVzZXJBZ2VudCgpO1xuXG4gICAgYXdhaXQgZXhlYyhcbiAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICBvcHRpb25zLFxuICAgICAge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2RpcixcbiAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgc2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgICAgICBub0NvbG9yLFxuICAgICAgfSxcbiAgICAgIHRoaXMub25TdGRvdXQoXCJwbGFuXCIsIFtWYXJpYWJsZVJlcXVpcmVkRmlsdGVyXSksXG4gICAgICB0aGlzLm9uU3RkZXJyKFwicGxhblwiLCBbVmFyaWFibGVSZXF1aXJlZEZpbHRlcl0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVwbG95KFxuICAgIHtcbiAgICAgIGF1dG9BcHByb3ZlID0gZmFsc2UsXG4gICAgICByZWZyZXNoT25seSA9IGZhbHNlLFxuICAgICAgbm9Db2xvciA9IGZhbHNlLFxuICAgICAgcGFyYWxsZWxpc20gPSAtMSxcbiAgICAgIGV4dHJhT3B0aW9ucyA9IFtdLFxuICAgICAgdmFycyA9IFtdLFxuICAgICAgdmFyRmlsZXMgPSBbXSxcbiAgICB9LFxuICAgIGNhbGxiYWNrOiAoc3RhdGU6IFRlcnJhZm9ybURlcGxveVN0YXRlKSA9PiB2b2lkLFxuICApOiBQcm9taXNlPHsgY2FuY2VsbGVkOiBib29sZWFuIH0+IHtcbiAgICBhd2FpdCB0aGlzLnNldFVzZXJBZ2VudCgpO1xuICAgIGNvbnN0IHNlcnZpY2UgPSBjcmVhdGVBbmRTdGFydERlcGxveVNlcnZpY2Uoe1xuICAgICAgdGVycmFmb3JtQmluYXJ5TmFtZSxcbiAgICAgIHdvcmtkaXI6IHRoaXMud29ya2RpcixcbiAgICAgIHJlZnJlc2hPbmx5LFxuICAgICAgbm9Db2xvcixcbiAgICAgIGF1dG9BcHByb3ZlLFxuICAgICAgcGFyYWxsZWxpc20sXG4gICAgICBleHRyYU9wdGlvbnMsXG4gICAgICB2YXJzLFxuICAgICAgdmFyRmlsZXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VydmljZShcImRlcGxveVwiLCBzZXJ2aWNlLCBjYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVzdHJveShcbiAgICB7XG4gICAgICBhdXRvQXBwcm92ZSA9IGZhbHNlLFxuICAgICAgcGFyYWxsZWxpc20gPSAtMSxcbiAgICAgIG5vQ29sb3IgPSBmYWxzZSxcbiAgICAgIGV4dHJhT3B0aW9ucyA9IFtdLFxuICAgICAgdmFycyA9IFtdLFxuICAgICAgdmFyRmlsZXMgPSBbXSxcbiAgICB9LFxuICAgIGNhbGxiYWNrOiAoc3RhdGU6IFRlcnJhZm9ybURlcGxveVN0YXRlKSA9PiB2b2lkLFxuICApOiBQcm9taXNlPHsgY2FuY2VsbGVkOiBib29sZWFuIH0+IHtcbiAgICBhd2FpdCB0aGlzLnNldFVzZXJBZ2VudCgpO1xuICAgIGNvbnN0IHNlcnZpY2UgPSBjcmVhdGVBbmRTdGFydERlc3Ryb3lTZXJ2aWNlKHtcbiAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICB3b3JrZGlyOiB0aGlzLndvcmtkaXIsXG4gICAgICBhdXRvQXBwcm92ZSxcbiAgICAgIHBhcmFsbGVsaXNtLFxuICAgICAgbm9Db2xvcixcbiAgICAgIGV4dHJhT3B0aW9ucyxcbiAgICAgIHZhcnMsXG4gICAgICB2YXJGaWxlcyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVTZXJ2aWNlKFwiZGVzdHJveVwiLCBzZXJ2aWNlLCBjYWxsYmFjayk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVNlcnZpY2UoXG4gICAgdHlwZTogXCJkZXBsb3lcIiB8IFwiZGVzdHJveVwiLFxuICAgIHNlcnZpY2U6XG4gICAgICB8IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUFuZFN0YXJ0RGVwbG95U2VydmljZT5cbiAgICAgIHwgUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQW5kU3RhcnREZXN0cm95U2VydmljZT4sXG4gICAgY2FsbGJhY2s6IChzdGF0ZTogVGVycmFmb3JtRGVwbG95U3RhdGUpID0+IHZvaWQsXG4gICk6IFByb21pc2U8eyBjYW5jZWxsZWQ6IGJvb2xlYW4gfT4ge1xuICAgIC8vIHN0b3AgdGVycmFmb3JtIGFwcGx5IGlmIHNpZ25hbGVkIGFzIHN1Y2ggZnJvbSB0aGUgb3V0c2lkZSAoZS5nLiB2aWEgY3RybCtjKVxuICAgIHRoaXMuYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiYWJvcnRcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgc2VydmljZS5zZW5kKFwiU1RPUFwiKTtcbiAgICAgIH0sXG4gICAgICB7IG9uY2U6IHRydWUgfSxcbiAgICApO1xuXG4gICAgLy8gcmVsYXkgbG9ncyB0byBzdGRvdXRcbiAgICBzZXJ2aWNlLm9uRXZlbnQoKGV2ZW50KSA9PiB7XG4gICAgICBsb2dnZXIudHJhY2UoXG4gICAgICAgIGBUZXJyYWZvcm0gQ0xJIHN0YXRlIG1hY2hpbmUgZXZlbnQ6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQpfWAsXG4gICAgICApO1xuICAgICAgaWYgKGlzRGVwbG95RXZlbnQoZXZlbnQsIFwiT1VUUFVUX1JFQ0VJVkVEXCIpKVxuICAgICAgICB0aGlzLm9uU3Rkb3V0KHR5cGUpKGV2ZW50Lm91dHB1dCk7XG4gICAgICBlbHNlIGlmIChpc0RlcGxveUV2ZW50KGV2ZW50LCBcIkFQUFJPVkVEX0VYVEVSTkFMTFlcIikpXG4gICAgICAgIGNhbGxiYWNrKHsgdHlwZTogXCJleHRlcm5hbCBhcHByb3ZhbCByZXBseVwiLCBhcHByb3ZlZDogdHJ1ZSB9KTtcbiAgICAgIGVsc2UgaWYgKGlzRGVwbG95RXZlbnQoZXZlbnQsIFwiUkVKRUNURURfRVhURVJOQUxMWVwiKSlcbiAgICAgICAgY2FsbGJhY2soeyB0eXBlOiBcImV4dGVybmFsIGFwcHJvdmFsIHJlcGx5XCIsIGFwcHJvdmVkOiBmYWxzZSB9KTtcbiAgICAgIGVsc2UgaWYgKGlzRGVwbG95RXZlbnQoZXZlbnQsIFwiT1ZFUlJJRERFTl9FWFRFUk5BTExZXCIpKVxuICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgdHlwZTogXCJleHRlcm5hbCBzZW50aW5lbCBvdmVycmlkZSByZXBseVwiLFxuICAgICAgICAgIG92ZXJyaWRkZW46IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgZWxzZSBpZiAoaXNEZXBsb3lFdmVudChldmVudCwgXCJPVkVSUklERV9SRUpFQ1RFRF9FWFRFUk5BTExZXCIpKVxuICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgdHlwZTogXCJleHRlcm5hbCBzZW50aW5lbCBvdmVycmlkZSByZXBseVwiLFxuICAgICAgICAgIG92ZXJyaWRkZW46IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGxldCBwcmV2aW91c1N0YXRlOiBEZXBsb3lTdGF0ZVtcInZhbHVlXCJdID0gXCJpZGxlXCI7XG5cbiAgICBzZXJ2aWNlLm9uVHJhbnNpdGlvbigoc3RhdGUpID0+IHtcbiAgICAgIC8vIG9ubHkgc2VuZCB1cGRhdGVzIG9uIGFjdHVhbCBzdGF0ZSBjaGFuZ2VcbiAgICAgIC8vIG9uVHJhbnNpdGlvbiBpcyBjYWxsZWQgZXZlbiBpZiB0aGUgc3RhdGUgZGlkbid0IGNoYW5nZSBidXQgb25seSBhbiBldmVudCBoYXBwZW5lZFxuICAgICAgaWYgKHN0YXRlLm1hdGNoZXMocHJldmlvdXNTdGF0ZSBhcyBEZXBsb3lTdGF0ZVtcInZhbHVlXCJdKSkgcmV0dXJuO1xuXG4gICAgICBsb2dnZXIudHJhY2UoXG4gICAgICAgIGBUZXJyYWZvcm0gQ0xJIHN0YXRlIG1hY2hpbmUgc3RhdGUgdHJhbnNpdGlvbjogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwcmV2aW91c1N0YXRlLFxuICAgICAgICApfSA9PiAke0pTT04uc3RyaW5naWZ5KHN0YXRlLnZhbHVlKX1gLFxuICAgICAgKTtcblxuICAgICAgaWYgKHN0YXRlLm1hdGNoZXMoeyBydW5uaW5nOiBcImF3YWl0aW5nX2FwcHJvdmFsXCIgfSkpIHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwid2FpdGluZyBmb3IgYXBwcm92YWxcIixcbiAgICAgICAgICBhcHByb3ZlOiAoKSA9PiBzZXJ2aWNlLnNlbmQoXCJBUFBST1ZFXCIpLFxuICAgICAgICAgIHJlamVjdDogKCkgPT4gc2VydmljZS5zZW5kKFwiUkVKRUNUXCIpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubWF0Y2hlcyh7IHJ1bm5pbmc6IFwiYXdhaXRpbmdfc2VudGluZWxfb3ZlcnJpZGVcIiB9KSkge1xuICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgdHlwZTogXCJ3YWl0aW5nIGZvciBzZW50aW5lbCBvdmVycmlkZVwiLFxuICAgICAgICAgIG92ZXJyaWRlOiAoKSA9PiBzZXJ2aWNlLnNlbmQoXCJPVkVSUklERVwiKSxcbiAgICAgICAgICByZWplY3Q6ICgpID0+IHNlcnZpY2Uuc2VuZChcIlJFSkVDVF9PVkVSUklERVwiKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLm1hdGNoZXMoeyBydW5uaW5nOiBcInByb2Nlc3NpbmdcIiB9KSkge1xuICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgdHlwZTogXCJydW5uaW5nXCIsXG4gICAgICAgICAgY2FuY2VsbGVkOiBCb29sZWFuKHN0YXRlLmNvbnRleHQuY2FuY2VsbGVkKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBwcmV2aW91c1N0YXRlID0gc3RhdGUudmFsdWUgYXMgRGVwbG95U3RhdGVbXCJ2YWx1ZVwiXTtcbiAgICB9KTtcbiAgICBzZXJ2aWNlLnN0YXJ0KCk7XG4gICAgY29uc3Qgc3RhdGUgPSBhd2FpdCB3YWl0Rm9yKHNlcnZpY2UsIChzdGF0ZSkgPT4gISFzdGF0ZS5kb25lLCB7XG4gICAgICB0aW1lb3V0OiBJbmZpbml0eSxcbiAgICB9KTtcblxuICAgIGxvZ2dlci50cmFjZShcbiAgICAgIGBJbnZva2luZyBUZXJyYWZvcm0gQ0xJIGZvciAke3R5cGV9IGRvbmUgKHN0YXRlIG1hY2hpbmUgcmVhY2hlZCBmaW5hbCBzdGF0ZSkuIExhc3QgZXZlbnQ6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHN0YXRlLmV2ZW50LFxuICAgICAgKX0uIENvbnRleHQ6ICR7SlNPTi5zdHJpbmdpZnkoc3RhdGUuY29udGV4dCl9YCxcbiAgICApO1xuXG4gICAgLy8gZXhhbXBsZSBldmVudHM6IHsgdHlwZTogJ0VYSVRFRCcsIGV4aXRDb2RlOiAwIH0sIHsgdHlwZTogJ0VYVEVSTkFMX1JFSkVDVCcgfVxuICAgIGlmIChcbiAgICAgIHN0YXRlLmV2ZW50LnR5cGUgPT09IFwiRVhJVEVEXCIgJiZcbiAgICAgIHN0YXRlLmV2ZW50LmV4aXRDb2RlICE9PSAwICYmXG4gICAgICAhc3RhdGUuY29udGV4dC5jYW5jZWxsZWQgLy8gZG9uJ3QgZmFpbCBpZiB3ZSBjYW5jZWxsZWQgdGhlIHJ1blxuICAgICkge1xuICAgICAgdGhyb3cgYEludm9raW5nIFRlcnJhZm9ybSBDTEkgZmFpbGVkIHdpdGggZXhpdCBjb2RlICR7c3RhdGUuZXZlbnQuZXhpdENvZGV9YDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjYW5jZWxsZWQ6IEJvb2xlYW4oc3RhdGUuY29udGV4dC5jYW5jZWxsZWQpIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZXhlYyhcbiAgICAgICAgdGVycmFmb3JtQmluYXJ5TmFtZSxcbiAgICAgICAgW1wiLXZcIl0sXG4gICAgICAgIHtcbiAgICAgICAgICBjd2Q6IHRoaXMud29ya2RpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIHNpZ25hbDogdGhpcy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICBub0NvbG9yOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLm9uU3Rkb3V0KFwidmVyc2lvblwiKSxcbiAgICAgICAgdGhpcy5vblN0ZGVycihcInZlcnNpb25cIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRlcnJhZm9ybSBDTEkgbm90IHByZXNlbnQgLSBQbGVhc2UgaW5zdGFsbCBhIGN1cnJlbnQgdmVyc2lvbiBodHRwczovL2xlYXJuLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2dldHRpbmctc3RhcnRlZC9pbnN0YWxsLmh0bWxcIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIG91dHB1dCgpOiBQcm9taXNlPHsgW2tleTogc3RyaW5nXTogVGVycmFmb3JtT3V0cHV0IH0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBleGVjKFxuICAgICAgdGVycmFmb3JtQmluYXJ5TmFtZSxcbiAgICAgIFtcIm91dHB1dFwiLCBcIi1qc29uXCJdLFxuICAgICAge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2RpcixcbiAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgc2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgICAgICBub0NvbG9yOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gbG9nIHRoZSBvdXRwdXQgaGVyZSBzaW5jZSB3ZSB1c2UgaXQgbGF0ZXIgb25cbiAgICAgICgpID0+IHt9LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgICAgdGhpcy5vblN0ZGVycihcIm91dHB1dFwiKSxcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKG91dHB1dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgICAgICBgRmFpbGVkIHRvIHBhcnNlIHRlcnJhZm9ybSBvdXRwdXQ6ICR7ZX0uIFRoZSBvdXRwdXQgd2FzICcke291dHB1dH0nYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFVzZXJBZ2VudCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBSZWFkIHRoZSBjZGt0ZiB2ZXJzaW9uIGZyb20gdGhlICdjZGsudGYuanNvbicgZmlsZVxuICAgIC8vIGFuZCBzZXQgdGhlIHVzZXIgYWdlbnQuXG4gICAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IHJlYWRDREtURlZlcnNpb24odGhpcy53b3JrZGlyKTtcbiAgICBpZiAodmVyc2lvbiAhPSBcIlwiKSB7XG4gICAgICBwcm9jZXNzLmVudi5URl9BUFBFTkRfVVNFUl9BR0VOVCA9XG4gICAgICAgIFwiY2RrdG4vXCIgK1xuICAgICAgICB2ZXJzaW9uICtcbiAgICAgICAgXCIgKCtodHRwczovL2dpdGh1Yi5jb20vb3Blbi1jb25zdHJ1Y3RzL2Nkay10ZXJyYWluKVwiO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdlIGRvbid0IG5lZWQgdG8gY2xlYW4gYW55dGhpbmcgdXAgZm9yIGEgcnVubmluZyBleGVjdXRpb24gaW4gdGhlIENMSSBzaW5jZSB0aGVyZSBpcyBubyBsZWZ0LW92ZXIgc3RhdGUgaW4gY29udHJhc3QgdG8gYW4gb3BlbiBUZXJyYWZvcm0gQ2xvdWQgcnVuXG4gIHB1YmxpYyBhc3luYyBhYm9ydCgpIHtcbiAgICByZXR1cm47XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyeVJlYWRHZW5lcmF0ZWRDb25maWd1cmF0aW9uRmlsZShcbiAgd29ya2luZ0Rpcjogc3RyaW5nLFxuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIGNvbnN0IGdlbmVyYXRlZENvbmZpZ1BhdGggPSBwYXRoLmpvaW4od29ya2luZ0RpciwgR0VORVJBVEVfQ09ORklHX09VVF9GSUxFKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGdlbmVyYXRlZENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhnZW5lcmF0ZWRDb25maWdQYXRoLCBcInV0Zi04XCIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJ5UmVtb3ZlR2VuZXJhdGVkQ29uZmlndXJhdGlvbkZpbGUod29ya2luZ0Rpcjogc3RyaW5nKSB7XG4gIGNvbnN0IGdlbmVyYXRlZENvbmZpZ1BhdGggPSBwYXRoLmpvaW4od29ya2luZ0RpciwgR0VORVJBVEVfQ09ORklHX09VVF9GSUxFKTtcbiAgaWYgKGZzLmV4aXN0c1N5bmMoZ2VuZXJhdGVkQ29uZmlnUGF0aCkpIHtcbiAgICBmcy51bmxpbmtTeW5jKGdlbmVyYXRlZENvbmZpZ1BhdGgpO1xuICB9XG59XG4iXX0=
|
|
357
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWNsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlcnJhZm9ybS1jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDREQUFtQztBQUNuQyw0Q0FNd0I7QUFDeEIsMkNBTXFCO0FBRXJCLHFEQUswQjtBQUMxQixnREFBNkM7QUFDN0Msc0NBQTRDO0FBQzVDLHNEQUF3RDtBQUN4RCwrREFBeUQ7QUFDekQsZ0RBQXdCO0FBQ3hCLDZDQUErQjtBQUUvQixNQUFNLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO0FBRTFELE1BQWEsZ0JBQ1gsU0FBUSxpQ0FBcUI7SUFHN0IsWUFDa0IsUUFBZ0IsRUFDaEIsSUFBNEI7UUFFNUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsZ0JBQWdCLEVBQUUsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGNBQWMsQ0FBQyxDQUFDO1FBSDlDLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBd0I7SUFHOUMsQ0FBQztDQUNGO0FBVkQsNENBVUM7QUFFRCxNQUFlLG9CQUFvQjtDQUdsQztBQUdELDRGQUE0RjtBQUM1RixnR0FBZ0c7QUFDaEcsTUFBTSxzQkFBdUIsU0FBUSxvQkFBb0I7SUFDdkQscURBQXFEO0lBQ3JELElBQUk7SUFDSiwwQ0FBMEM7SUFDMUMsSUFBSTtJQUNKLDJDQUEyQztJQUMzQywrQkFBK0I7SUFDL0IsSUFBSTtJQUNKLGdGQUFnRjtJQUNoRixnRkFBZ0Y7SUFDaEYsa0JBQWtCO0lBQ1gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFhO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVMsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUU5QixPQUFPLENBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1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Q0FBaUMsQ0FDckQsVUFBa0I7SUFFbEIsTUFBTSxtQkFBbUIsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQzVFLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQVJELDhFQVFDO0FBRU0sS0FBSyxVQUFVLG1DQUFtQyxDQUFDLFVBQWtCO0lBQzFFLE1BQU0sbUJBQW1CLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUM1RSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLEVBQUUsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNyQyxDQUFDO0FBQ0gsQ0FBQztBQUxELGtGQUtDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSBcInN0cmlwLWFuc2lcIjtcbmltcG9ydCB7XG4gIEVycm9ycyxcbiAgZXhlYyxcbiAgbG9nZ2VyLFxuICByZWFkQ0RLVEZWZXJzaW9uLFxuICB0ZXJyYWZvcm1CaW5hcnlOYW1lLFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybSxcbiAgVGVycmFmb3JtUGxhbixcbiAgVGVycmFmb3JtT3V0cHV0LFxuICBBYnN0cmFjdFRlcnJhZm9ybVBsYW4sXG4gIFRlcnJhZm9ybURlcGxveVN0YXRlLFxufSBmcm9tIFwiLi90ZXJyYWZvcm1cIjtcbmltcG9ydCB7IFN5bnRoZXNpemVkU3RhY2sgfSBmcm9tIFwiLi4vc3ludGgtc3RhY2tcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUFuZFN0YXJ0RGVwbG95U2VydmljZSxcbiAgY3JlYXRlQW5kU3RhcnREZXN0cm95U2VydmljZSxcbiAgRGVwbG95U3RhdGUsXG4gIGlzRGVwbG95RXZlbnQsXG59IGZyb20gXCIuL2RlcGxveS1tYWNoaW5lXCI7XG5pbXBvcnQgeyB3YWl0Rm9yIH0gZnJvbSBcInhzdGF0ZS9saWIvd2FpdEZvclwiO1xuaW1wb3J0IHsgbWlzc2luZ1ZhcmlhYmxlIH0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuaW1wb3J0IHsgdGVycmFmb3JtSnNvblNjaGVtYSB9IGZyb20gXCIuLi90ZXJyYWZvcm0tanNvblwiO1xuaW1wb3J0IHsgc3Bhd25JbnRlcmFjdGl2ZSB9IGZyb20gXCIuL2ludGVyYWN0aXZlLXByb2Nlc3NcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcblxuY29uc3QgR0VORVJBVEVfQ09ORklHX09VVF9GSUxFID0gXCJnZW5lcmF0ZWRfcmVzb3VyY2VzLnRmXCI7XG5cbmV4cG9ydCBjbGFzcyBUZXJyYWZvcm1DbGlQbGFuXG4gIGV4dGVuZHMgQWJzdHJhY3RUZXJyYWZvcm1QbGFuXG4gIGltcGxlbWVudHMgVGVycmFmb3JtUGxhblxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGxhbkZpbGU6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGxhbjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbiAgKSB7XG4gICAgc3VwZXIocGxhbkZpbGUsIHBsYW4/LnJlc291cmNlX2NoYW5nZXMsIHBsYW4/Lm91dHB1dF9jaGFuZ2VzKTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE91dHB1dEZpbHRlciB7XG4gIHB1YmxpYyBzdGF0aWMgY29uZGl0aW9uOiAobGluZTogc3RyaW5nKSA9PiBib29sZWFuO1xuICBwdWJsaWMgc3RhdGljIHRyYW5zZm9ybTogKGxpbmU6IHN0cmluZykgPT4gc3RyaW5nO1xufVxuZXhwb3J0IHR5cGUgT3V0cHV0RmlsdGVyID0gdHlwZW9mIEFic3RyYWN0T3V0cHV0RmlsdGVyO1xuXG4vLyBUaGUgcGxhbiBtaWdodCBlcnJvciBpZiB0aGVyZSBpcyBhIHZhcmlhYmxlIG1pc3NpbmcsIGJ1dCB0aGUgZXJyb3IgbWVzc2FnZSBoaW50cyB0aGUgdXNlclxuLy8gaW4gYSB3cm9uZyBkaXJlY3Rpb24uIFdlIHRoZXJlZm9yZSBjYXRjaCB0aGUgZXJyb3IgYW5kIHJldGhyb3cgaXQgd2l0aCBhIG1vcmUgaGVscGZ1bCBtZXNzYWdlXG5jbGFzcyBWYXJpYWJsZVJlcXVpcmVkRmlsdGVyIGV4dGVuZHMgQWJzdHJhY3RPdXRwdXRGaWx0ZXIge1xuICAvLyBFeGFtcGxlIGZvciBcIk5vIHZhbHVlIGZvciByZXF1aXJlZCB2YXJpYWJsZVwiIGVycm9yXG4gIC8vIOKVt1xuICAvLyDilIIgRXJyb3I6IE5vIHZhbHVlIGZvciByZXF1aXJlZCB2YXJpYWJsZVxuICAvLyDilIJcbiAgLy8g4pSCICAgb24gY2RrLnRmLmpzb24gbGluZSAzMSwgaW4gdmFyaWFibGU6XG4gIC8vIOKUgiAgIDMxOiAgICAgXCJ3aXRoLWRhc2hlc1wiOiB7XG4gIC8vIOKUglxuICAvLyDilIIgVGhlIHJvb3QgbW9kdWxlIGlucHV0IHZhcmlhYmxlIFwid2l0aC1kYXNoZXNcIiBpcyBub3Qgc2V0LCBhbmQgaGFzIG5vIGRlZmF1bHRcbiAgLy8g4pSCIHZhbHVlLiBVc2UgYSAtdmFyIG9yIC12YXItZmlsZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgdG8gcHJvdmlkZSBhIHZhbHVlIGZvclxuICAvLyDilIIgdGhpcyB2YXJpYWJsZVxuICBwdWJsaWMgc3RhdGljIGNvbmRpdGlvbihpbnB1dDogc3RyaW5nKSB7XG4gICAgY29uc3QgbGluZSA9IHN0cmlwQW5zaShpbnB1dCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgbGluZS5pbmNsdWRlcyhcIkVycm9yOiBObyB2YWx1ZSBmb3IgcmVxdWlyZWQgdmFyaWFibGVcIikgJiZcbiAgICAgIGxpbmUuaW5jbHVkZXMoXCJUaGUgcm9vdCBtb2R1bGUgaW5wdXQgdmFyaWFibGVcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgdHJhbnNmb3JtKGxpbmU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0YXJ0TWFya2VyID0gJ1RoZSByb290IG1vZHVsZSBpbnB1dCB2YXJpYWJsZSBcIic7XG4gICAgY29uc3QgdmFyaWFibGVOYW1lID0gbGluZS5zdWJzdHJpbmcoXG4gICAgICBsaW5lLmluZGV4T2Yoc3RhcnRNYXJrZXIpICsgc3RhcnRNYXJrZXIubGVuZ3RoLFxuICAgICAgbGluZS5pbmRleE9mKCdcIiBpcyBub3Qgc2V0JyksXG4gICAgKTtcblxuICAgIHJldHVybiBtaXNzaW5nVmFyaWFibGUodmFyaWFibGVOYW1lKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtQ2xpIGltcGxlbWVudHMgVGVycmFmb3JtIHtcbiAgcHVibGljIHJlYWRvbmx5IHdvcmtkaXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBvblN0ZG91dDogKFxuICAgIHN0YXRlTmFtZTogc3RyaW5nLFxuICAgIGZpbHRlcj86IE91dHB1dEZpbHRlcltdLFxuICApID0+IChzdGRvdXQ6IEJ1ZmZlciB8IHN0cmluZykgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBvblN0ZGVycjogKFxuICAgIHN0YXRlTmFtZTogc3RyaW5nLFxuICAgIGZpbHRlcj86IE91dHB1dEZpbHRlcltdLFxuICApID0+IChzdGRlcnI6IHN0cmluZyB8IFVpbnQ4QXJyYXkpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwsXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YWNrOiBTeW50aGVzaXplZFN0YWNrLFxuICAgIGNyZWF0ZVRlcnJhZm9ybUxvZ0hhbmRsZXIgPSAoX3BoYXNlOiBzdHJpbmcsIF9maWx0ZXI/OiBPdXRwdXRGaWx0ZXJbXSkgPT5cbiAgICAgIChfc3Rkb3V0OiBzdHJpbmcsIF9pc0VyciA9IGZhbHNlKSA9PiB7fSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgKSB7XG4gICAgdGhpcy53b3JrZGlyID0gc3RhY2sud29ya2luZ0RpcmVjdG9yeTtcbiAgICB0aGlzLm9uU3Rkb3V0ID1cbiAgICAgIChwaGFzZTogc3RyaW5nLCBmaWx0ZXI/OiBPdXRwdXRGaWx0ZXJbXSkgPT4gKHN0ZG91dDogQnVmZmVyIHwgc3RyaW5nKSA9PlxuICAgICAgICBjcmVhdGVUZXJyYWZvcm1Mb2dIYW5kbGVyKFxuICAgICAgICAgIHBoYXNlLFxuICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgKShCdWZmZXIuaXNCdWZmZXIoc3Rkb3V0KSA/IHN0ZG91dC50b1N0cmluZygpIDogc3Rkb3V0KTtcbiAgICB0aGlzLm9uU3RkZXJyID1cbiAgICAgIChwaGFzZTogc3RyaW5nLCBmaWx0ZXI/OiBPdXRwdXRGaWx0ZXJbXSkgPT5cbiAgICAgIChzdGRlcnI6IHN0cmluZyB8IFVpbnQ4QXJyYXkpID0+XG4gICAgICAgIGNyZWF0ZVRlcnJhZm9ybUxvZ0hhbmRsZXIocGhhc2UsIGZpbHRlcikoc3RkZXJyLnRvU3RyaW5nKCksIHRydWUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXQob3B0czoge1xuICAgIG5lZWRzVXBncmFkZTogYm9vbGVhbjtcbiAgICBub0NvbG9yPzogYm9vbGVhbjtcbiAgICBtaWdyYXRlU3RhdGU6IGJvb2xlYW47XG4gICAgbmVlZHNMb2NrZmlsZVVwZGF0ZTogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2V0VXNlckFnZW50KCk7XG5cbiAgICBjb25zdCBhcmdzID0gW1wiaW5pdFwiXTtcbiAgICBpZiAob3B0cy5uZWVkc1VwZ3JhZGUpIHtcbiAgICAgIGFyZ3MucHVzaChcIi11cGdyYWRlXCIpO1xuICAgIH1cbiAgICBpZiAob3B0cy5ub0NvbG9yKSB7XG4gICAgICBhcmdzLnB1c2goXCItbm8tY29sb3JcIik7XG4gICAgfVxuICAgIGlmIChvcHRzLm1pZ3JhdGVTdGF0ZSkge1xuICAgICAgYXJncy5wdXNoKFwiLW1pZ3JhdGUtc3RhdGVcIik7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIGxldCBpbml0Q2FuTm90Q29udGludWUgPSAoX2VycjogYW55KSA9PiB7fTtcbiAgICBjb25zdCByZWplY3RzSWZJbml0Q2FuTm90Q29udGludWUgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaW5pdENhbk5vdENvbnRpbnVlID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc3Rkb3V0ID0gdGhpcy5vblN0ZG91dChcImluaXRcIik7XG4gICAgY29uc3QgeyBhY3Rpb25zLCBleGl0Q29kZSB9ID0gc3Bhd25JbnRlcmFjdGl2ZShcbiAgICAgIHtcbiAgICAgICAgZmlsZTogdGVycmFmb3JtQmluYXJ5TmFtZSxcbiAgICAgICAgYXJncyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGN3ZDogdGhpcy53b3JrZGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYgYXMgYW55LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgIHN0ZG91dChkYXRhKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEuaW5jbHVkZXMoXCJTaG91bGQgVGVycmFmb3JtIG1pZ3JhdGUgeW91ciBleGlzdGluZyBzdGF0ZT9cIikgfHxcbiAgICAgICAgICBkYXRhLmluY2x1ZGVzKFwiRG8geW91IHdhbnQgdG8gY29weSBleGlzdGluZyBzdGF0ZSB0byB0aGUgbmV3IGJhY2tlbmRcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVE9ETzogVGhpcyBvbmx5IGhhcHBlbnMgd2hlbiB0ZXJyYWZvcm0gaXMgcGFzc2VkIHRoZSAtbWlncmF0ZS1zdGF0ZSBhbnl3YXksIHNvIHRoaXMgY2hlY2sgaXMgcmVkdW5kYW50XG4gICAgICAgICAgaWYgKG9wdHMubWlncmF0ZVN0YXRlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLndyaXRlTGluZShcInllc1wiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWN0aW9ucy5zdG9wKCk7XG4gICAgICAgICAgICBpbml0Q2FuTm90Q29udGludWUoXG4gICAgICAgICAgICAgIFwiUGxlYXNlIHBhc3MgdGhlIC0tbWlncmF0ZS1zdGF0ZSBmbGFnIHRvIG1pZ3JhdGUgeW91ciBzdGF0ZVwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLmFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB7XG4gICAgICBhY3Rpb25zLnN0b3AoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gZXhpdENvZGUudGhlbigoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0ZXJyYWZvcm0gaW5pdCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHtjb2RlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IFByb21pc2UucmFjZShbcHJvZ3Jlc3MsIHJlamVjdHNJZkluaXRDYW5Ob3RDb250aW51ZV0pO1xuXG4gICAgLy8gVE9ETzogdGhpcyBtaWdodCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBiZWNhdXNlIHdlIGRvbid0IGtub3cgaWYgd2UncmVcbiAgICAvLyBydW5uaW5nIGEgcmVtb3RlIHBsYW4gb3IgYSBsb2NhbCBvbmUgKHNvIHdlIHJ1biBpdCBhbHdheXMgZm9yIGFsbCBwbGF0Zm9ybXMpXG4gICAgLy8gd2hpbGUgd2UnZCBvbmx5IG5lZWQgaXQgZm9yIHJlbW90ZSBwbGFuc1xuICAgIGlmIChvcHRzLm5lZWRzTG9ja2ZpbGVVcGRhdGUpIHtcbiAgICAgIGF3YWl0IGV4ZWMoXG4gICAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICAgIFtcbiAgICAgICAgICBcInByb3ZpZGVyc1wiLFxuICAgICAgICAgIFwibG9ja1wiLFxuICAgICAgICAgIFwiLXBsYXRmb3JtPWxpbnV4X2FtZDY0XCIsXG4gICAgICAgICAgLi4uKG9wdHMubm9Db2xvciA/IFtcIi1uby1jb2xvclwiXSA6IFtdKSxcbiAgICAgICAgXSxcbiAgICAgICAge1xuICAgICAgICAgIGN3ZDogdGhpcy53b3JrZGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgc2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgICAgICAgIG5vQ29sb3I6IG9wdHMubm9Db2xvcixcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5vblN0ZG91dChcImluaXRcIiksXG4gICAgICAgIHRoaXMub25TdGRlcnIoXCJpbml0XCIpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0Nsb3VkU3RhY2soKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFyc2VkU3RhY2sgPSB0ZXJyYWZvcm1Kc29uU2NoZW1hLnBhcnNlKFxuICAgICAgSlNPTi5wYXJzZSh0aGlzLnN0YWNrLmNvbnRlbnQpLFxuICAgICk7XG5cbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHBhcnNlZFN0YWNrLnRlcnJhZm9ybT8uYmFja2VuZD8ucmVtb3RlIHx8IHBhcnNlZFN0YWNrLnRlcnJhZm9ybT8uY2xvdWQsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhc0ltcG9ydHMoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFyc2VkU3RhY2sgPSB0ZXJyYWZvcm1Kc29uU2NoZW1hLnBhcnNlKFxuICAgICAgSlNPTi5wYXJzZSh0aGlzLnN0YWNrLmNvbnRlbnQpLFxuICAgICk7XG5cbiAgICByZXR1cm4gQm9vbGVhbihwYXJzZWRTdGFjay5pbXBvcnQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYW4ob3B0czoge1xuICAgIGRlc3Ryb3k6IGJvb2xlYW47XG4gICAgcmVmcmVzaE9ubHk/OiBib29sZWFuO1xuICAgIHBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHZhcnM/OiBzdHJpbmdbXTtcbiAgICB2YXJGaWxlcz86IHN0cmluZ1tdO1xuICAgIG5vQ29sb3I/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qge1xuICAgICAgZGVzdHJveSA9IGZhbHNlLFxuICAgICAgcmVmcmVzaE9ubHkgPSBmYWxzZSxcbiAgICAgIHBhcmFsbGVsaXNtID0gLTEsXG4gICAgICB2YXJzID0gW10sXG4gICAgICB2YXJGaWxlcyA9IFtdLFxuICAgICAgbm9Db2xvciA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXCJwbGFuXCIsIFwiLWlucHV0PWZhbHNlXCJdO1xuXG4gICAgY29uc3QgZ2VuZXJhdGVkQ29uZmlnRmlsZSA9IHBhdGguam9pbihcbiAgICAgIHRoaXMud29ya2RpcixcbiAgICAgIEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSxcbiAgICApO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGdlbmVyYXRlZENvbmZpZ0ZpbGUpKSB7XG4gICAgICBmcy5yZW1vdmUoZ2VuZXJhdGVkQ29uZmlnRmlsZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0ltcG9ydHMpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgLWdlbmVyYXRlLWNvbmZpZy1vdXQ9JHtHRU5FUkFURV9DT05GSUdfT1VUX0ZJTEV9YCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0Nsb3VkU3RhY2spIHtcbiAgICAgIGNvbnN0IHBsYW5GaWxlID0gXCJwbGFuXCI7XG4gICAgICBvcHRpb25zLnB1c2goXCItb3V0XCIsIHBsYW5GaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoZGVzdHJveSkge1xuICAgICAgb3B0aW9ucy5wdXNoKFwiLWRlc3Ryb3lcIik7XG4gICAgfVxuICAgIGlmIChyZWZyZXNoT25seSkge1xuICAgICAgb3B0aW9ucy5wdXNoKFwiLXJlZnJlc2gtb25seVwiKTtcbiAgICB9XG4gICAgaWYgKHBhcmFsbGVsaXNtID4gLTEpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgLXBhcmFsbGVsaXNtPSR7cGFyYWxsZWxpc219YCk7XG4gICAgfVxuICAgIGlmIChub0NvbG9yKSB7XG4gICAgICBvcHRpb25zLnB1c2goXCItbm8tY29sb3JcIik7XG4gICAgfVxuXG4gICAgdmFycy5mb3JFYWNoKCh2KSA9PiBvcHRpb25zLnB1c2goYC12YXI9JHt2fWApKTtcbiAgICB2YXJGaWxlcy5mb3JFYWNoKCh2KSA9PiBvcHRpb25zLnB1c2goYC12YXItZmlsZT0ke3Z9YCkpO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEV4ZWN1dGluZyAke3RlcnJhZm9ybUJpbmFyeU5hbWV9ICR7b3B0aW9ucy5qb2luKFwiIFwiKX0gaW4gJHt0aGlzLndvcmtkaXJ9YCxcbiAgICApO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRVc2VyQWdlbnQoKTtcblxuICAgIGF3YWl0IGV4ZWMoXG4gICAgICB0ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtkaXIsXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIHNpZ25hbDogdGhpcy5hYm9ydFNpZ25hbCxcbiAgICAgICAgbm9Db2xvcixcbiAgICAgIH0sXG4gICAgICB0aGlzLm9uU3Rkb3V0KFwicGxhblwiLCBbVmFyaWFibGVSZXF1aXJlZEZpbHRlcl0pLFxuICAgICAgdGhpcy5vblN0ZGVycihcInBsYW5cIiwgW1ZhcmlhYmxlUmVxdWlyZWRGaWx0ZXJdKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlcGxveShcbiAgICB7XG4gICAgICBhdXRvQXBwcm92ZSA9IGZhbHNlLFxuICAgICAgcmVmcmVzaE9ubHkgPSBmYWxzZSxcbiAgICAgIG5vQ29sb3IgPSBmYWxzZSxcbiAgICAgIHBhcmFsbGVsaXNtID0gLTEsXG4gICAgICBleHRyYU9wdGlvbnMgPSBbXSxcbiAgICAgIHZhcnMgPSBbXSxcbiAgICAgIHZhckZpbGVzID0gW10sXG4gICAgfSxcbiAgICBjYWxsYmFjazogKHN0YXRlOiBUZXJyYWZvcm1EZXBsb3lTdGF0ZSkgPT4gdm9pZCxcbiAgKTogUHJvbWlzZTx7IGNhbmNlbGxlZDogYm9vbGVhbiB9PiB7XG4gICAgYXdhaXQgdGhpcy5zZXRVc2VyQWdlbnQoKTtcbiAgICBjb25zdCBzZXJ2aWNlID0gY3JlYXRlQW5kU3RhcnREZXBsb3lTZXJ2aWNlKHtcbiAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICB3b3JrZGlyOiB0aGlzLndvcmtkaXIsXG4gICAgICByZWZyZXNoT25seSxcbiAgICAgIG5vQ29sb3IsXG4gICAgICBhdXRvQXBwcm92ZSxcbiAgICAgIHBhcmFsbGVsaXNtLFxuICAgICAgZXh0cmFPcHRpb25zLFxuICAgICAgdmFycyxcbiAgICAgIHZhckZpbGVzLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVNlcnZpY2UoXCJkZXBsb3lcIiwgc2VydmljZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlc3Ryb3koXG4gICAge1xuICAgICAgYXV0b0FwcHJvdmUgPSBmYWxzZSxcbiAgICAgIHBhcmFsbGVsaXNtID0gLTEsXG4gICAgICBub0NvbG9yID0gZmFsc2UsXG4gICAgICBleHRyYU9wdGlvbnMgPSBbXSxcbiAgICAgIHZhcnMgPSBbXSxcbiAgICAgIHZhckZpbGVzID0gW10sXG4gICAgfSxcbiAgICBjYWxsYmFjazogKHN0YXRlOiBUZXJyYWZvcm1EZXBsb3lTdGF0ZSkgPT4gdm9pZCxcbiAgKTogUHJvbWlzZTx7IGNhbmNlbGxlZDogYm9vbGVhbiB9PiB7XG4gICAgYXdhaXQgdGhpcy5zZXRVc2VyQWdlbnQoKTtcbiAgICBjb25zdCBzZXJ2aWNlID0gY3JlYXRlQW5kU3RhcnREZXN0cm95U2VydmljZSh7XG4gICAgICB0ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgICAgd29ya2RpcjogdGhpcy53b3JrZGlyLFxuICAgICAgYXV0b0FwcHJvdmUsXG4gICAgICBwYXJhbGxlbGlzbSxcbiAgICAgIG5vQ29sb3IsXG4gICAgICBleHRyYU9wdGlvbnMsXG4gICAgICB2YXJzLFxuICAgICAgdmFyRmlsZXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VydmljZShcImRlc3Ryb3lcIiwgc2VydmljZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTZXJ2aWNlKFxuICAgIHR5cGU6IFwiZGVwbG95XCIgfCBcImRlc3Ryb3lcIixcbiAgICBzZXJ2aWNlOlxuICAgICAgfCBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBbmRTdGFydERlcGxveVNlcnZpY2U+XG4gICAgICB8IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUFuZFN0YXJ0RGVzdHJveVNlcnZpY2U+LFxuICAgIGNhbGxiYWNrOiAoc3RhdGU6IFRlcnJhZm9ybURlcGxveVN0YXRlKSA9PiB2b2lkLFxuICApOiBQcm9taXNlPHsgY2FuY2VsbGVkOiBib29sZWFuIH0+IHtcbiAgICAvLyBzdG9wIHRlcnJhZm9ybSBhcHBseSBpZiBzaWduYWxlZCBhcyBzdWNoIGZyb20gdGhlIG91dHNpZGUgKGUuZy4gdmlhIGN0cmwrYylcbiAgICB0aGlzLmFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImFib3J0XCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHNlcnZpY2Uuc2VuZChcIlNUT1BcIik7XG4gICAgICB9LFxuICAgICAgeyBvbmNlOiB0cnVlIH0sXG4gICAgKTtcblxuICAgIC8vIHJlbGF5IGxvZ3MgdG8gc3Rkb3V0XG4gICAgc2VydmljZS5vbkV2ZW50KChldmVudCkgPT4ge1xuICAgICAgbG9nZ2VyLnRyYWNlKFxuICAgICAgICBgVGVycmFmb3JtIENMSSBzdGF0ZSBtYWNoaW5lIGV2ZW50OiAke0pTT04uc3RyaW5naWZ5KGV2ZW50KX1gLFxuICAgICAgKTtcbiAgICAgIGlmIChpc0RlcGxveUV2ZW50KGV2ZW50LCBcIk9VVFBVVF9SRUNFSVZFRFwiKSlcbiAgICAgICAgdGhpcy5vblN0ZG91dCh0eXBlKShldmVudC5vdXRwdXQpO1xuICAgICAgZWxzZSBpZiAoaXNEZXBsb3lFdmVudChldmVudCwgXCJBUFBST1ZFRF9FWFRFUk5BTExZXCIpKVxuICAgICAgICBjYWxsYmFjayh7IHR5cGU6IFwiZXh0ZXJuYWwgYXBwcm92YWwgcmVwbHlcIiwgYXBwcm92ZWQ6IHRydWUgfSk7XG4gICAgICBlbHNlIGlmIChpc0RlcGxveUV2ZW50KGV2ZW50LCBcIlJFSkVDVEVEX0VYVEVSTkFMTFlcIikpXG4gICAgICAgIGNhbGxiYWNrKHsgdHlwZTogXCJleHRlcm5hbCBhcHByb3ZhbCByZXBseVwiLCBhcHByb3ZlZDogZmFsc2UgfSk7XG4gICAgICBlbHNlIGlmIChpc0RlcGxveUV2ZW50KGV2ZW50LCBcIk9WRVJSSURERU5fRVhURVJOQUxMWVwiKSlcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIixcbiAgICAgICAgICBvdmVycmlkZGVuOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIGVsc2UgaWYgKGlzRGVwbG95RXZlbnQoZXZlbnQsIFwiT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWVwiKSlcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIixcbiAgICAgICAgICBvdmVycmlkZGVuOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJldmlvdXNTdGF0ZTogRGVwbG95U3RhdGVbXCJ2YWx1ZVwiXSA9IFwiaWRsZVwiO1xuXG4gICAgc2VydmljZS5vblRyYW5zaXRpb24oKHN0YXRlKSA9PiB7XG4gICAgICAvLyBvbmx5IHNlbmQgdXBkYXRlcyBvbiBhY3R1YWwgc3RhdGUgY2hhbmdlXG4gICAgICAvLyBvblRyYW5zaXRpb24gaXMgY2FsbGVkIGV2ZW4gaWYgdGhlIHN0YXRlIGRpZG4ndCBjaGFuZ2UgYnV0IG9ubHkgYW4gZXZlbnQgaGFwcGVuZWRcbiAgICAgIGlmIChzdGF0ZS5tYXRjaGVzKHByZXZpb3VzU3RhdGUgYXMgRGVwbG95U3RhdGVbXCJ2YWx1ZVwiXSkpIHJldHVybjtcblxuICAgICAgbG9nZ2VyLnRyYWNlKFxuICAgICAgICBgVGVycmFmb3JtIENMSSBzdGF0ZSBtYWNoaW5lIHN0YXRlIHRyYW5zaXRpb246ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJldmlvdXNTdGF0ZSxcbiAgICAgICAgKX0gPT4gJHtKU09OLnN0cmluZ2lmeShzdGF0ZS52YWx1ZSl9YCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChzdGF0ZS5tYXRjaGVzKHsgcnVubmluZzogXCJhd2FpdGluZ19hcHByb3ZhbFwiIH0pKSB7XG4gICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICB0eXBlOiBcIndhaXRpbmcgZm9yIGFwcHJvdmFsXCIsXG4gICAgICAgICAgYXBwcm92ZTogKCkgPT4gc2VydmljZS5zZW5kKFwiQVBQUk9WRVwiKSxcbiAgICAgICAgICByZWplY3Q6ICgpID0+IHNlcnZpY2Uuc2VuZChcIlJFSkVDVFwiKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLm1hdGNoZXMoeyBydW5uaW5nOiBcImF3YWl0aW5nX3NlbnRpbmVsX292ZXJyaWRlXCIgfSkpIHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIixcbiAgICAgICAgICBvdmVycmlkZTogKCkgPT4gc2VydmljZS5zZW5kKFwiT1ZFUlJJREVcIiksXG4gICAgICAgICAgcmVqZWN0OiAoKSA9PiBzZXJ2aWNlLnNlbmQoXCJSRUpFQ1RfT1ZFUlJJREVcIiksXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5tYXRjaGVzKHsgcnVubmluZzogXCJwcm9jZXNzaW5nXCIgfSkpIHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwicnVubmluZ1wiLFxuICAgICAgICAgIGNhbmNlbGxlZDogQm9vbGVhbihzdGF0ZS5jb250ZXh0LmNhbmNlbGxlZCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcHJldmlvdXNTdGF0ZSA9IHN0YXRlLnZhbHVlIGFzIERlcGxveVN0YXRlW1widmFsdWVcIl07XG4gICAgfSk7XG4gICAgc2VydmljZS5zdGFydCgpO1xuICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgd2FpdEZvcihzZXJ2aWNlLCAoc3RhdGUpID0+ICEhc3RhdGUuZG9uZSwge1xuICAgICAgdGltZW91dDogSW5maW5pdHksXG4gICAgfSk7XG5cbiAgICBsb2dnZXIudHJhY2UoXG4gICAgICBgSW52b2tpbmcgVGVycmFmb3JtIENMSSBmb3IgJHt0eXBlfSBkb25lIChzdGF0ZSBtYWNoaW5lIHJlYWNoZWQgZmluYWwgc3RhdGUpLiBMYXN0IGV2ZW50OiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBzdGF0ZS5ldmVudCxcbiAgICAgICl9LiBDb250ZXh0OiAke0pTT04uc3RyaW5naWZ5KHN0YXRlLmNvbnRleHQpfWAsXG4gICAgKTtcblxuICAgIC8vIGV4YW1wbGUgZXZlbnRzOiB7IHR5cGU6ICdFWElURUQnLCBleGl0Q29kZTogMCB9LCB7IHR5cGU6ICdFWFRFUk5BTF9SRUpFQ1QnIH1cbiAgICBpZiAoXG4gICAgICBzdGF0ZS5ldmVudC50eXBlID09PSBcIkVYSVRFRFwiICYmXG4gICAgICBzdGF0ZS5ldmVudC5leGl0Q29kZSAhPT0gMCAmJlxuICAgICAgIXN0YXRlLmNvbnRleHQuY2FuY2VsbGVkIC8vIGRvbid0IGZhaWwgaWYgd2UgY2FuY2VsbGVkIHRoZSBydW5cbiAgICApIHtcbiAgICAgIHRocm93IGBJbnZva2luZyBUZXJyYWZvcm0gQ0xJIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAke3N0YXRlLmV2ZW50LmV4aXRDb2RlfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2FuY2VsbGVkOiBCb29sZWFuKHN0YXRlLmNvbnRleHQuY2FuY2VsbGVkKSB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4ZWMoXG4gICAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICAgIFtcIi12XCJdLFxuICAgICAgICB7XG4gICAgICAgICAgY3dkOiB0aGlzLndvcmtkaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBzaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgbm9Db2xvcjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5vblN0ZG91dChcInZlcnNpb25cIiksXG4gICAgICAgIHRoaXMub25TdGRlcnIoXCJ2ZXJzaW9uXCIpLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUZXJyYWZvcm0gQ0xJIG5vdCBwcmVzZW50IC0gUGxlYXNlIGluc3RhbGwgYSBjdXJyZW50IHZlcnNpb24gaHR0cHM6Ly9sZWFybi5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9nZXR0aW5nLXN0YXJ0ZWQvaW5zdGFsbC5odG1sXCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvdXRwdXQoKTogUHJvbWlzZTx7IFtrZXk6IHN0cmluZ106IFRlcnJhZm9ybU91dHB1dCB9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZXhlYyhcbiAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICBbXCJvdXRwdXRcIiwgXCItanNvblwiXSxcbiAgICAgIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtkaXIsXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIHNpZ25hbDogdGhpcy5hYm9ydFNpZ25hbCxcbiAgICAgICAgbm9Db2xvcjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGxvZyB0aGUgb3V0cHV0IGhlcmUgc2luY2Ugd2UgdXNlIGl0IGxhdGVyIG9uXG4gICAgICAoKSA9PiB7fSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICAgIHRoaXMub25TdGRlcnIoXCJvdXRwdXRcIiksXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShvdXRwdXQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IEVycm9ycy5FeHRlcm5hbChcbiAgICAgICAgYEZhaWxlZCB0byBwYXJzZSB0ZXJyYWZvcm0gb3V0cHV0OiAke2V9LiBUaGUgb3V0cHV0IHdhcyAnJHtvdXRwdXR9J2AsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRVc2VyQWdlbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUmVhZCB0aGUgY2RrdGYgdmVyc2lvbiBmcm9tIHRoZSAnY2RrLnRmLmpzb24nIGZpbGVcbiAgICAvLyBhbmQgc2V0IHRoZSB1c2VyIGFnZW50LlxuICAgIGNvbnN0IHZlcnNpb24gPSBhd2FpdCByZWFkQ0RLVEZWZXJzaW9uKHRoaXMud29ya2Rpcik7XG4gICAgaWYgKHZlcnNpb24gIT0gXCJcIikge1xuICAgICAgcHJvY2Vzcy5lbnYuVEZfQVBQRU5EX1VTRVJfQUdFTlQgPVxuICAgICAgICBcImNka3RuL1wiICtcbiAgICAgICAgdmVyc2lvbiArXG4gICAgICAgIFwiICgraHR0cHM6Ly9naXRodWIuY29tL29wZW4tY29uc3RydWN0cy9jZGstdGVycmFpbilcIjtcbiAgICB9XG4gIH1cblxuICAvLyBXZSBkb24ndCBuZWVkIHRvIGNsZWFuIGFueXRoaW5nIHVwIGZvciBhIHJ1bm5pbmcgZXhlY3V0aW9uIGluIHRoZSBDTEkgc2luY2UgdGhlcmUgaXMgbm8gbGVmdC1vdmVyIHN0YXRlIGluIGNvbnRyYXN0IHRvIGFuIG9wZW4gVGVycmFmb3JtIENsb3VkIHJ1blxuICBwdWJsaWMgYXN5bmMgYWJvcnQoKSB7XG4gICAgcmV0dXJuO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cnlSZWFkR2VuZXJhdGVkQ29uZmlndXJhdGlvbkZpbGUoXG4gIHdvcmtpbmdEaXI6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICBjb25zdCBnZW5lcmF0ZWRDb25maWdQYXRoID0gcGF0aC5qb2luKHdvcmtpbmdEaXIsIEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhnZW5lcmF0ZWRDb25maWdQYXRoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoZ2VuZXJhdGVkQ29uZmlnUGF0aCwgXCJ1dGYtOFwiKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyeVJlbW92ZUdlbmVyYXRlZENvbmZpZ3VyYXRpb25GaWxlKHdvcmtpbmdEaXI6IHN0cmluZykge1xuICBjb25zdCBnZW5lcmF0ZWRDb25maWdQYXRoID0gcGF0aC5qb2luKHdvcmtpbmdEaXIsIEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSk7XG4gIGlmIChmcy5leGlzdHNTeW5jKGdlbmVyYXRlZENvbmZpZ1BhdGgpKSB7XG4gICAgZnMudW5saW5rU3luYyhnZW5lcmF0ZWRDb25maWdQYXRoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) HashiCorp, Inc.
|
|
3
|
-
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
-
*/
|
|
5
|
-
import * as pty from "@cdktf/node-pty-prebuilt-multiarch";
|
|
6
|
-
interface PtySpawnConfig {
|
|
7
|
-
file: Parameters<typeof pty.spawn>[0];
|
|
8
|
-
args: Parameters<typeof pty.spawn>[1];
|
|
9
|
-
options: Parameters<typeof pty.spawn>[2] & {
|
|
10
|
-
cwd: string;
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
export interface PtyProcessActions {
|
|
14
|
-
write: (response: string) => void;
|
|
15
|
-
writeLine: (response: string) => void;
|
|
16
|
-
stop: () => void;
|
|
17
|
-
}
|
|
18
|
-
export interface PtyProcess {
|
|
19
|
-
exitCode: Promise<number>;
|
|
20
|
-
actions: PtyProcessActions;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* A wrapper around node-pty that handles the platform specific differences
|
|
24
|
-
* and provide an intuitive API for bidirectional communication with the
|
|
25
|
-
* spawned process.
|
|
26
|
-
*/
|
|
27
|
-
export declare function spawnPty(config: PtySpawnConfig, onData: (data: string) => void): PtyProcess;
|
|
28
|
-
export {};
|
|
29
|
-
//# sourceMappingURL=pty-process.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pty-process.d.ts","sourceRoot":"","sources":["pty-process.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAG1D,UAAU,cAAc;IACtB,IAAI,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5D;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IAEzB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC7B,UAAU,CA0DZ"}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Copyright (c) HashiCorp, Inc.
|
|
4
|
-
* SPDX-License-Identifier: MPL-2.0
|
|
5
|
-
*/
|
|
6
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
-
if (k2 === undefined) k2 = k;
|
|
8
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
-
}
|
|
12
|
-
Object.defineProperty(o, k2, desc);
|
|
13
|
-
}) : (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
o[k2] = m[k];
|
|
16
|
-
}));
|
|
17
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
-
}) : function(o, v) {
|
|
20
|
-
o["default"] = v;
|
|
21
|
-
});
|
|
22
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
23
|
-
if (mod && mod.__esModule) return mod;
|
|
24
|
-
var result = {};
|
|
25
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
26
|
-
__setModuleDefault(result, mod);
|
|
27
|
-
return result;
|
|
28
|
-
};
|
|
29
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.spawnPty = void 0;
|
|
31
|
-
const os = __importStar(require("os"));
|
|
32
|
-
const path = __importStar(require("path"));
|
|
33
|
-
const fs = __importStar(require("fs"));
|
|
34
|
-
const pty = __importStar(require("@cdktf/node-pty-prebuilt-multiarch"));
|
|
35
|
-
const commons_1 = require("@cdktn/commons");
|
|
36
|
-
/**
|
|
37
|
-
* A wrapper around node-pty that handles the platform specific differences
|
|
38
|
-
* and provide an intuitive API for bidirectional communication with the
|
|
39
|
-
* spawned process.
|
|
40
|
-
*/
|
|
41
|
-
function spawnPty(config, onData) {
|
|
42
|
-
const { args, options } = config;
|
|
43
|
-
const file = os.platform() === "win32"
|
|
44
|
-
? findExecutable(config.file, options.cwd, options)
|
|
45
|
-
: config.file;
|
|
46
|
-
commons_1.logger.trace(`Spawning pty with file=${file}, args=${Array.isArray(args) ? `[${args.join(", ")}]` : `"${args}"`}, options=${JSON.stringify(options)}`);
|
|
47
|
-
const p = pty.spawn(file, args, options);
|
|
48
|
-
const actions = {
|
|
49
|
-
write: (response) => {
|
|
50
|
-
commons_1.logger.trace(`Sending response to pty (file=${file}, args=${Array.isArray(args) ? `[${args.join(", ")}]` : `"${args}"`}): ${response}`);
|
|
51
|
-
p.write(response);
|
|
52
|
-
},
|
|
53
|
-
writeLine: (response) => {
|
|
54
|
-
commons_1.logger.trace(`Sending response (with newline) to pty (file=${file}, args=${Array.isArray(args) ? `[${args.join(", ")}]` : `"${args}"`}): ${response}`);
|
|
55
|
-
p.write(`${response}${os.EOL}`);
|
|
56
|
-
},
|
|
57
|
-
stop: () => {
|
|
58
|
-
commons_1.logger.trace(`Aborting pty (file=${file}, args=${Array.isArray(args) ? `[${args.join(", ")}]` : `"${args}"`})`);
|
|
59
|
-
p.write("\x03"); // CTRL + C, pty.kill() does not work on windows
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
p.onData((data) => onData(data));
|
|
63
|
-
const exitCode = new Promise((resolve) => {
|
|
64
|
-
p.onExit(({ exitCode }) => {
|
|
65
|
-
if (exitCode !== 0) {
|
|
66
|
-
commons_1.logger.debug(`Pty (file=${file}, args=${Array.isArray(args) ? `[${args.join(", ")}]` : `"${args}"`}) exited with code ${exitCode}`);
|
|
67
|
-
}
|
|
68
|
-
resolve(exitCode);
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
return { exitCode, actions };
|
|
72
|
-
}
|
|
73
|
-
exports.spawnPty = spawnPty;
|
|
74
|
-
// src: https://github.com/Microsoft/vscode/blob/c0c9ea27d6e8d660d8716d7acee82cf3c00fa3e5/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.ts#L691
|
|
75
|
-
// TODO: properly annotate source of this function
|
|
76
|
-
function findExecutable(command, cwd, options) {
|
|
77
|
-
// If we have an absolute path then we take it.
|
|
78
|
-
if (path.isAbsolute(command)) {
|
|
79
|
-
return command;
|
|
80
|
-
}
|
|
81
|
-
const dir = path.dirname(command);
|
|
82
|
-
if (dir !== ".") {
|
|
83
|
-
// We have a directory and the directory is relative (see above). Make the path absolute
|
|
84
|
-
// to the current working directory.
|
|
85
|
-
return path.join(cwd, command);
|
|
86
|
-
}
|
|
87
|
-
let paths = undefined;
|
|
88
|
-
// The options can override the PATH. So consider that PATH if present.
|
|
89
|
-
if (options && options.env) {
|
|
90
|
-
// Path can be named in many different ways and for the execution it doesn't matter
|
|
91
|
-
for (const key of Object.keys(options.env)) {
|
|
92
|
-
if (key.toLowerCase() === "path") {
|
|
93
|
-
if (typeof options.env[key] === "string") {
|
|
94
|
-
paths = options.env[key].split(path.delimiter);
|
|
95
|
-
}
|
|
96
|
-
break;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
if (paths === void 0 && typeof process.env.PATH === "string") {
|
|
101
|
-
paths = process.env.PATH.split(path.delimiter);
|
|
102
|
-
}
|
|
103
|
-
// No PATH environment. Make path absolute to the cwd.
|
|
104
|
-
if (paths === void 0 || paths.length === 0) {
|
|
105
|
-
return path.join(cwd, command);
|
|
106
|
-
}
|
|
107
|
-
// We have a simple file name. We get the path variable from the env
|
|
108
|
-
// and try to find the executable on the path.
|
|
109
|
-
for (const pathEntry of paths) {
|
|
110
|
-
// The path entry is absolute.
|
|
111
|
-
let fullPath;
|
|
112
|
-
if (path.isAbsolute(pathEntry)) {
|
|
113
|
-
fullPath = path.join(pathEntry, command);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
fullPath = path.join(cwd, pathEntry, command);
|
|
117
|
-
}
|
|
118
|
-
if (fs.existsSync(fullPath)) {
|
|
119
|
-
return fullPath;
|
|
120
|
-
}
|
|
121
|
-
let withExtension = fullPath + ".com";
|
|
122
|
-
if (fs.existsSync(withExtension)) {
|
|
123
|
-
return withExtension;
|
|
124
|
-
}
|
|
125
|
-
withExtension = fullPath + ".exe";
|
|
126
|
-
if (fs.existsSync(withExtension)) {
|
|
127
|
-
return withExtension;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
return path.join(cwd, command);
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHR5LXByb2Nlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwdHktcHJvY2Vzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBRXpCLHdFQUEwRDtBQUMxRCw0Q0FBd0M7QUFvQnhDOzs7O0dBSUc7QUFDSCxTQUFnQixRQUFRLENBQ3RCLE1BQXNCLEVBQ3RCLE1BQThCO0lBRTlCLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLE1BQU0sSUFBSSxHQUNSLEVBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxPQUFPO1FBQ3ZCLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQztRQUNuRCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUVsQixnQkFBTSxDQUFDLEtBQUssQ0FDViwwQkFBMEIsSUFBSSxVQUM1QixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQ3pELGFBQWEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUN2QyxDQUFDO0lBRUYsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXpDLE1BQU0sT0FBTyxHQUFzQjtRQUNqQyxLQUFLLEVBQUUsQ0FBQyxRQUFnQixFQUFFLEVBQUU7WUFDMUIsZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsaUNBQWlDLElBQUksVUFDbkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FB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QUUsT0FBTyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLGFBQWEsR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ3RDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxhQUFhLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQztRQUNsQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcblxuaW1wb3J0ICogYXMgcHR5IGZyb20gXCJAY2RrdGYvbm9kZS1wdHktcHJlYnVpbHQtbXVsdGlhcmNoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcblxuaW50ZXJmYWNlIFB0eVNwYXduQ29uZmlnIHtcbiAgZmlsZTogUGFyYW1ldGVyczx0eXBlb2YgcHR5LnNwYXduPlswXTtcbiAgYXJnczogUGFyYW1ldGVyczx0eXBlb2YgcHR5LnNwYXduPlsxXTtcbiAgb3B0aW9uczogUGFyYW1ldGVyczx0eXBlb2YgcHR5LnNwYXduPlsyXSAmIHsgY3dkOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQdHlQcm9jZXNzQWN0aW9ucyB7XG4gIHdyaXRlOiAocmVzcG9uc2U6IHN0cmluZykgPT4gdm9pZDtcbiAgd3JpdGVMaW5lOiAocmVzcG9uc2U6IHN0cmluZykgPT4gdm9pZDtcbiAgc3RvcDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQdHlQcm9jZXNzIHtcbiAgLy8gQWx3YXlzIHJlc29sdmVzLCByZXR1cm5zIHRoZSBleGl0IGNvZGUgb2YgdGhlIHByb2Nlc3NcbiAgZXhpdENvZGU6IFByb21pc2U8bnVtYmVyPjtcbiAgYWN0aW9uczogUHR5UHJvY2Vzc0FjdGlvbnM7XG59XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBub2RlLXB0eSB0aGF0IGhhbmRsZXMgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGRpZmZlcmVuY2VzXG4gKiBhbmQgcHJvdmlkZSBhbiBpbnR1aXRpdmUgQVBJIGZvciBiaWRpcmVjdGlvbmFsIGNvbW11bmljYXRpb24gd2l0aCB0aGVcbiAqIHNwYXduZWQgcHJvY2Vzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwYXduUHR5KFxuICBjb25maWc6IFB0eVNwYXduQ29uZmlnLFxuICBvbkRhdGE6IChkYXRhOiBzdHJpbmcpID0+IHZvaWQsXG4pOiBQdHlQcm9jZXNzIHtcbiAgY29uc3QgeyBhcmdzLCBvcHRpb25zIH0gPSBjb25maWc7XG4gIGNvbnN0IGZpbGUgPVxuICAgIG9zLnBsYXRmb3JtKCkgPT09IFwid2luMzJcIlxuICAgICAgPyBmaW5kRXhlY3V0YWJsZShjb25maWcuZmlsZSwgb3B0aW9ucy5jd2QsIG9wdGlvbnMpXG4gICAgICA6IGNvbmZpZy5maWxlO1xuXG4gIGxvZ2dlci50cmFjZShcbiAgICBgU3Bhd25pbmcgcHR5IHdpdGggZmlsZT0ke2ZpbGV9LCBhcmdzPSR7XG4gICAgICBBcnJheS5pc0FycmF5KGFyZ3MpID8gYFske2FyZ3Muam9pbihcIiwgXCIpfV1gIDogYFwiJHthcmdzfVwiYFxuICAgIH0sIG9wdGlvbnM9JHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gLFxuICApO1xuXG4gIGNvbnN0IHAgPSBwdHkuc3Bhd24oZmlsZSwgYXJncywgb3B0aW9ucyk7XG5cbiAgY29uc3QgYWN0aW9uczogUHR5UHJvY2Vzc0FjdGlvbnMgPSB7XG4gICAgd3JpdGU6IChyZXNwb25zZTogc3RyaW5nKSA9PiB7XG4gICAgICBsb2dnZXIudHJhY2UoXG4gICAgICAgIGBTZW5kaW5nIHJlc3BvbnNlIHRvIHB0eSAoZmlsZT0ke2ZpbGV9LCBhcmdzPSR7XG4gICAgICAgICAgQXJyYXkuaXNBcnJheShhcmdzKSA/IGBbJHthcmdzLmpvaW4oXCIsIFwiKX1dYCA6IGBcIiR7YXJnc31cImBcbiAgICAgICAgfSk6ICR7cmVzcG9uc2V9YCxcbiAgICAgICk7XG4gICAgICBwLndyaXRlKHJlc3BvbnNlKTtcbiAgICB9LFxuICAgIHdyaXRlTGluZTogKHJlc3BvbnNlOiBzdHJpbmcpID0+IHtcbiAgICAgIGxvZ2dlci50cmFjZShcbiAgICAgICAgYFNlbmRpbmcgcmVzcG9uc2UgKHdpdGggbmV3bGluZSkgdG8gcHR5IChmaWxlPSR7ZmlsZX0sIGFyZ3M9JHtcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGFyZ3MpID8gYFske2FyZ3Muam9pbihcIiwgXCIpfV1gIDogYFwiJHthcmdzfVwiYFxuICAgICAgICB9KTogJHtyZXNwb25zZX1gLFxuICAgICAgKTtcbiAgICAgIHAud3JpdGUoYCR7cmVzcG9uc2V9JHtvcy5FT0x9YCk7XG4gICAgfSxcbiAgICBzdG9wOiAoKSA9PiB7XG4gICAgICBsb2dnZXIudHJhY2UoXG4gICAgICAgIGBBYm9ydGluZyBwdHkgKGZpbGU9JHtmaWxlfSwgYXJncz0ke1xuICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXJncykgPyBgWyR7YXJncy5qb2luKFwiLCBcIil9XWAgOiBgXCIke2FyZ3N9XCJgXG4gICAgICAgIH0pYCxcbiAgICAgICk7XG4gICAgICBwLndyaXRlKFwiXFx4MDNcIik7IC8vIENUUkwgKyBDLCBwdHkua2lsbCgpIGRvZXMgbm90IHdvcmsgb24gd2luZG93c1xuICAgIH0sXG4gIH07XG5cbiAgcC5vbkRhdGEoKGRhdGEpID0+IG9uRGF0YShkYXRhKSk7XG5cbiAgY29uc3QgZXhpdENvZGUgPSBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlKSA9PiB7XG4gICAgcC5vbkV4aXQoKHsgZXhpdENvZGUgfSkgPT4ge1xuICAgICAgaWYgKGV4aXRDb2RlICE9PSAwKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgUHR5IChmaWxlPSR7ZmlsZX0sIGFyZ3M9JHtcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXJncykgPyBgWyR7YXJncy5qb2luKFwiLCBcIil9XWAgOiBgXCIke2FyZ3N9XCJgXG4gICAgICAgICAgfSkgZXhpdGVkIHdpdGggY29kZSAke2V4aXRDb2RlfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKGV4aXRDb2RlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgZXhpdENvZGUsIGFjdGlvbnMgfTtcbn1cblxuLy8gc3JjOiBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L3ZzY29kZS9ibG9iL2MwYzllYTI3ZDZlOGQ2NjBkODcxNmQ3YWNlZTgyY2YzYzAwZmEzZTUvc3JjL3ZzL3dvcmtiZW5jaC9wYXJ0cy90YXNrcy9lbGVjdHJvbi1icm93c2VyL3Rlcm1pbmFsVGFza1N5c3RlbS50cyNMNjkxXG4vLyBUT0RPOiBwcm9wZXJseSBhbm5vdGF0ZSBzb3VyY2Ugb2YgdGhpcyBmdW5jdGlvblxuZnVuY3Rpb24gZmluZEV4ZWN1dGFibGUoXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgY3dkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHsgZW52PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9LFxuKTogc3RyaW5nIHtcbiAgLy8gSWYgd2UgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoIHRoZW4gd2UgdGFrZSBpdC5cbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShjb21tYW5kKSkge1xuICAgIHJldHVybiBjb21tYW5kO1xuICB9XG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShjb21tYW5kKTtcbiAgaWYgKGRpciAhPT0gXCIuXCIpIHtcbiAgICAvLyBXZSBoYXZlIGEgZGlyZWN0b3J5IGFuZCB0aGUgZGlyZWN0b3J5IGlzIHJlbGF0aXZlIChzZWUgYWJvdmUpLiBNYWtlIHRoZSBwYXRoIGFic29sdXRlXG4gICAgLy8gdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAgcmV0dXJuIHBhdGguam9pbihjd2QsIGNvbW1hbmQpO1xuICB9XG4gIGxldCBwYXRoczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIC8vIFRoZSBvcHRpb25zIGNhbiBvdmVycmlkZSB0aGUgUEFUSC4gU28gY29uc2lkZXIgdGhhdCBQQVRIIGlmIHByZXNlbnQuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW52KSB7XG4gICAgLy8gUGF0aCBjYW4gYmUgbmFtZWQgaW4gbWFueSBkaWZmZXJlbnQgd2F5cyBhbmQgZm9yIHRoZSBleGVjdXRpb24gaXQgZG9lc24ndCBtYXR0ZXJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvcHRpb25zLmVudikpIHtcbiAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gXCJwYXRoXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmVudltrZXldID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcGF0aHMgPSBvcHRpb25zLmVudltrZXldLnNwbGl0KHBhdGguZGVsaW1pdGVyKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHBhdGhzID09PSB2b2lkIDAgJiYgdHlwZW9mIHByb2Nlc3MuZW52LlBBVEggPT09IFwic3RyaW5nXCIpIHtcbiAgICBwYXRocyA9IHByb2Nlc3MuZW52LlBBVEguc3BsaXQocGF0aC5kZWxpbWl0ZXIpO1xuICB9XG4gIC8vIE5vIFBBVEggZW52aXJvbm1lbnQuIE1ha2UgcGF0aCBhYnNvbHV0ZSB0byB0aGUgY3dkLlxuICBpZiAocGF0aHMgPT09IHZvaWQgMCB8fCBwYXRocy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKGN3ZCwgY29tbWFuZCk7XG4gIH1cbiAgLy8gV2UgaGF2ZSBhIHNpbXBsZSBmaWxlIG5hbWUuIFdlIGdldCB0aGUgcGF0aCB2YXJpYWJsZSBmcm9tIHRoZSBlbnZcbiAgLy8gYW5kIHRyeSB0byBmaW5kIHRoZSBleGVjdXRhYmxlIG9uIHRoZSBwYXRoLlxuICBmb3IgKGNvbnN0IHBhdGhFbnRyeSBvZiBwYXRocykge1xuICAgIC8vIFRoZSBwYXRoIGVudHJ5IGlzIGFic29sdXRlLlxuICAgIGxldCBmdWxsUGF0aDogc3RyaW5nO1xuICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocGF0aEVudHJ5KSkge1xuICAgICAgZnVsbFBhdGggPSBwYXRoLmpvaW4ocGF0aEVudHJ5LCBjb21tYW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsbFBhdGggPSBwYXRoLmpvaW4oY3dkLCBwYXRoRW50cnksIGNvbW1hbmQpO1xuICAgIH1cbiAgICBpZiAoZnMuZXhpc3RzU3luYyhmdWxsUGF0aCkpIHtcbiAgICAgIHJldHVybiBmdWxsUGF0aDtcbiAgICB9XG4gICAgbGV0IHdpdGhFeHRlbnNpb24gPSBmdWxsUGF0aCArIFwiLmNvbVwiO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHdpdGhFeHRlbnNpb24pKSB7XG4gICAgICByZXR1cm4gd2l0aEV4dGVuc2lvbjtcbiAgICB9XG4gICAgd2l0aEV4dGVuc2lvbiA9IGZ1bGxQYXRoICsgXCIuZXhlXCI7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMod2l0aEV4dGVuc2lvbikpIHtcbiAgICAgIHJldHVybiB3aXRoRXh0ZW5zaW9uO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGF0aC5qb2luKGN3ZCwgY29tbWFuZCk7XG59XG4iXX0=
|