gitlab-ci-local 4.27.0 → 4.28.2

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/README.md CHANGED
@@ -34,6 +34,7 @@ Get rid of all those dev specific shell scripts and make files.
34
34
  * [Home Variables](#home-variables)
35
35
  * [Project Variables](#project-variables)
36
36
  * [Decorators](#decorators)
37
+ * [Includes](#includes)
37
38
  * [Artifacts](#artifacts)
38
39
  * [Development](#development)
39
40
  * [Scripts](#scripts)
@@ -205,6 +206,9 @@ produce:
205
206
  artifacts: {paths: [path/] }
206
207
  ```
207
208
 
209
+ ### Includes
210
+ Includes from external sources are only fetched once. Use `--fetch-includes` to invoke an external fetching rutine.
211
+
208
212
  ### Artifacts
209
213
 
210
214
  Shell executor jobs copies artifacts to host/cwd directory. Use --shell-isolation option to mimic correct artifact handling for shell jobs.
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Tired of pushing to test your .gitlab-ci.yml?",
4
4
  "main": "src/index.js",
5
5
  "bin": "src/index.js",
6
- "version": "4.27.0",
6
+ "version": "4.28.2",
7
7
  "scripts": {
8
8
  "prepublishOnly": "npm run check-all && chmod +x src/index.js",
9
9
  "pkg-linux": "pkg src/index.js --public -t node16-linux-x64 -o bin/linux/gitlab-ci-local && chmod +x bin/linux/gitlab-ci-local && gzip -c bin/linux/gitlab-ci-local > bin/linux.gz",
@@ -12,7 +12,7 @@
12
12
  "pkg-all": "npm run pkg-linux && npm run pkg-macos && npm run pkg-win",
13
13
  "pkg": "pkg",
14
14
  "build": "rm -f src/*.js src/*.d.ts && tsc",
15
- "check-all": "npm run build && npm run lint && npm run coverage && npm run audit",
15
+ "check-all": "npm run build && npm run lint && npm run coverage",
16
16
  "audit": "npm audit --parseable",
17
17
  "lint": "npx eslint .",
18
18
  "test": "jest --testTimeout 30000",
@@ -20,39 +20,40 @@
20
20
  "start": "ts-node --log-error src/index.ts --cwd examples/docker-compose-nodejs"
21
21
  },
22
22
  "dependencies": {
23
- "axios": "^0.24.0",
23
+ "axios": "^0.25.0",
24
24
  "base64url": "^3.0.1",
25
- "camelcase": "^6.2.1",
25
+ "camelcase": "^6.3.0",
26
26
  "chalk": "^4.1.2",
27
27
  "checksum": "^1.0.0",
28
28
  "deep-extend": "^0.6.0",
29
- "dotenv": "^10.0.0",
29
+ "dotenv": "^14.3.2",
30
30
  "fs-extra": "^10.0.0",
31
31
  "js-yaml": "^4.1.0",
32
32
  "pretty-hrtime": "^1.0.3",
33
33
  "source-map-support": "^0.5.21",
34
- "yargs": "^17.3.0"
34
+ "yargs": "^17.3.1"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/checksum": "0.1.33",
38
38
  "@types/deep-extend": "0.4.32",
39
39
  "@types/fs-extra": "9.0.13",
40
- "@types/jest": "27.0.3",
41
- "@types/jest-when": "2.7.3",
40
+ "@types/jest": "27.4.0",
41
+ "@types/jest-when": "2.7.4",
42
42
  "@types/js-yaml": "4.0.5",
43
43
  "@types/pretty-hrtime": "1.0.1",
44
44
  "@types/source-map-support": "0.5.4",
45
- "@types/yargs": "17.0.7",
46
- "@typescript-eslint/eslint-plugin": "5.6.0",
47
- "@typescript-eslint/parser": "5.6.0",
48
- "depcheck": "1.4.2",
49
- "eslint": "8.4.1",
50
- "jest": "27.4.3",
51
- "jest-when": "3.4.2",
52
- "pkg": "5.5.1",
53
- "ts-jest": "27.1.0",
45
+ "@types/yargs": "17.0.8",
46
+ "@typescript-eslint/eslint-plugin": "5.10.1",
47
+ "@typescript-eslint/parser": "5.10.1",
48
+ "axios-mock-adapter": "1.20.0",
49
+ "depcheck": "1.4.3",
50
+ "eslint": "8.7.0",
51
+ "jest": "27.4.7",
52
+ "jest-when": "3.5.0",
53
+ "pkg": "5.5.2",
54
+ "ts-jest": "27.1.3",
54
55
  "ts-node": "10.4.0",
55
- "typescript": "4.5.2"
56
+ "typescript": "4.5.5"
56
57
  },
57
58
  "engines": {
58
59
  "node": ">=16.10.0"
package/src/commander.js CHANGED
@@ -8,17 +8,18 @@ exports.Commander = void 0;
8
8
  const chalk_1 = __importDefault(require("chalk"));
9
9
  const utils_1 = require("./utils");
10
10
  const job_executor_1 = require("./job-executor");
11
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
12
  class Commander {
12
- static async runPipeline(parser, writeStreams, manualOpts, privileged) {
13
+ static async runPipeline(parser, writeStreams, manualOpts, privileged, cwd) {
13
14
  const jobs = parser.jobs;
14
15
  const stages = parser.stages;
15
16
  let potentialStarters = [...jobs.values()];
16
17
  potentialStarters = potentialStarters.filter(j => j.when !== "never");
17
18
  potentialStarters = potentialStarters.filter(j => j.when !== "manual" || manualOpts.includes(j.name));
18
19
  await job_executor_1.JobExecutor.runLoop(jobs, stages, potentialStarters, manualOpts, privileged);
19
- await Commander.printReport(writeStreams, jobs, stages, parser.jobNamePad);
20
+ await Commander.printReport(writeStreams, jobs, stages, parser.jobNamePad, cwd);
20
21
  }
21
- static async runSingleJob(parser, writeStreams, jobArgs, needs, manualOpts, privileged) {
22
+ static async runSingleJob(parser, writeStreams, jobArgs, needs, manualOpts, privileged, cwd) {
22
23
  const jobs = parser.jobs;
23
24
  const stages = parser.stages;
24
25
  let potentialStarters = [];
@@ -32,7 +33,7 @@ class Commander {
32
33
  potentialStarters.push(job);
33
34
  });
34
35
  await job_executor_1.JobExecutor.runLoop(jobPoolMap, stages, potentialStarters, manualOpts, privileged);
35
- await Commander.printReport(writeStreams, jobs, stages, parser.jobNamePad);
36
+ await Commander.printReport(writeStreams, jobs, stages, parser.jobNamePad, cwd);
36
37
  }
37
38
  static runList(parser, writeStreams, listAll) {
38
39
  const stages = parser.stages;
@@ -68,7 +69,7 @@ class Commander {
68
69
  }
69
70
  exports.Commander = Commander;
70
71
  _a = Commander;
71
- Commander.printReport = async (writeStreams, jobs, stages, jobNamePad) => {
72
+ Commander.printReport = async (writeStreams, jobs, stages, jobNamePad, cwd) => {
72
73
  writeStreams.stdout("\n");
73
74
  const preScripts = {
74
75
  successful: [],
@@ -110,10 +111,15 @@ Commander.printReport = async (writeStreams, jobs, stages, jobNamePad) => {
110
111
  }
111
112
  if (preScripts.warned.length !== 0) {
112
113
  preScripts.warned.sort((a, b) => stages.indexOf(a.stage) - stages.indexOf(b.stage));
113
- preScripts.warned.forEach(({ name }) => {
114
+ for (const { name } of preScripts.warned) {
114
115
  const namePad = name.padEnd(jobNamePad);
116
+ const safeName = utils_1.Utils.getSafeJobName(name);
115
117
  writeStreams.stdout((0, chalk_1.default) `{black.bgYellowBright WARN } {blueBright ${namePad}} pre_script\n`);
116
- });
118
+ const outputLog = await fs_extra_1.default.readFile(`${cwd}/.gitlab-ci-local/output/${safeName}.log`, "utf8");
119
+ for (const line of outputLog.split(/\r?\n/).filter(j => !j.includes("[32m$ ")).filter(j => j !== "").slice(-3)) {
120
+ writeStreams.stdout((0, chalk_1.default) ` {yellow >} ${line}\n`);
121
+ }
122
+ }
117
123
  }
118
124
  if (afterScripts.warned.length !== 0) {
119
125
  afterScripts.warned.sort((a, b) => stages.indexOf(a.stage) - stages.indexOf(b.stage));
@@ -124,10 +130,15 @@ Commander.printReport = async (writeStreams, jobs, stages, jobNamePad) => {
124
130
  }
125
131
  if (preScripts.failed.length !== 0) {
126
132
  preScripts.failed.sort((a, b) => stages.indexOf(a.stage) - stages.indexOf(b.stage));
127
- preScripts.failed.forEach(({ name }) => {
133
+ for (const { name } of preScripts.failed) {
128
134
  const namePad = name.padEnd(jobNamePad);
135
+ const safeName = utils_1.Utils.getSafeJobName(name);
129
136
  writeStreams.stdout((0, chalk_1.default) `{black.bgRed FAIL } {blueBright ${namePad}}\n`);
130
- });
137
+ const outputLog = await fs_extra_1.default.readFile(`${cwd}/.gitlab-ci-local/output/${safeName}.log`, "utf8");
138
+ for (const line of outputLog.split(/\r?\n/).filter(j => !j.includes("[32m$ ")).filter(j => j !== "").slice(-3)) {
139
+ writeStreams.stdout((0, chalk_1.default) ` {red >} ${line}\n`);
140
+ }
141
+ }
131
142
  }
132
143
  for (const job of preScripts.successful) {
133
144
  const e = job.environment;
@@ -143,4 +154,4 @@ Commander.printReport = async (writeStreams, jobs, stages, jobNamePad) => {
143
154
  writeStreams.stdout(" }\n");
144
155
  }
145
156
  };
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tbWFuZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxrREFBMEI7QUFHMUIsbUNBQThCO0FBRTlCLGlEQUEyQztBQUUzQyxNQUFhLFNBQVM7SUFFbEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBYyxFQUFFLFlBQTBCLEVBQUUsVUFBb0IsRUFBRSxVQUFtQjtRQUMxRyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFN0IsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDM0MsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQztRQUN0RSxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sMEJBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkYsTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBYyxFQUFFLFlBQTBCLEVBQUUsT0FBaUIsRUFBRSxLQUFjLEVBQUUsVUFBb0IsRUFBRSxVQUFtQjtRQUM5SSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFN0IsSUFBSSxpQkFBaUIsR0FBVSxFQUFFLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUMvRSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sR0FBRyxHQUFHLGFBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzlDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLElBQUksS0FBSyxFQUFFO2dCQUNQLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQywwQkFBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7YUFDN0c7WUFDRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLDBCQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQXNGRCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWMsRUFBRSxZQUEwQixFQUFFLE9BQWdCO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVwRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUVuRSxJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFFekYsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUVyQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1NBQy9DO1FBRUQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxTQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssYUFBYSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLFNBQVMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLCtCQUErQixDQUFDLENBQUM7UUFFMUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUM1QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3hCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQzFELElBQUksT0FBTyxHQUFHLElBQUEsZUFBSyxFQUFBLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQ2pILE9BQU8sSUFBSSxJQUFBLGVBQUssRUFBQSxXQUFXLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4SCxJQUFJLEtBQUssRUFBRTtnQkFDUCxPQUFPLElBQUksSUFBQSxlQUFLLEVBQUEsb0JBQW9CLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDM0U7WUFDRCxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDOztBQTFKTCw4QkE0SkM7O0FBNUhVLHFCQUFXLEdBQUcsS0FBSyxFQUFFLFlBQTBCLEVBQUUsSUFBOEIsRUFBRSxNQUF5QixFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUNySSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTFCLE1BQU0sVUFBVSxHQUF3RDtRQUNwRSxVQUFVLEVBQUUsRUFBRTtRQUNkLE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTSxFQUFFLEVBQUU7S0FDYixDQUFDO0lBQ0YsTUFBTSxZQUFZLEdBQXNCO1FBQ3BDLE1BQU0sRUFBRSxFQUFFO0tBQ2IsQ0FBQztJQUVGLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQzdCLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsb0JBQW9CLEtBQUssQ0FBQyxFQUFFO1lBQy9DLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2pDO0tBQ0o7SUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtZQUNkLFNBQVM7U0FDWjtRQUVELElBQUksR0FBRyxDQUFDLGtCQUFrQixLQUFLLENBQUMsRUFBRTtZQUM5QixVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQzthQUFNLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRTtZQUN6QixVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMvQjthQUFNO1lBQ0gsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDL0I7S0FDSjtJQUVELElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3BDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN4RixVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsNENBQTRDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDakYsSUFBSSxHQUFHLENBQUMsZUFBZSxFQUFFO2dCQUNyQixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLElBQUksR0FBRyxDQUFDLGVBQWUsbUJBQW1CLENBQUMsQ0FBQzthQUN4RTtZQUNELFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7S0FDTjtJQUVELElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2hDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRixVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRTtZQUNqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsNkNBQTZDLE9BQU8saUJBQWlCLENBQUMsQ0FBQztRQUNwRyxDQUFDLENBQUMsQ0FBQztLQUNOO0lBRUQsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDbEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFFO1lBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSw2Q0FBNkMsT0FBTyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3RHLENBQUMsQ0FBQyxDQUFDO0tBQ047SUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNoQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEYsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUU7WUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4QyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLG9DQUFvQyxPQUFPLEtBQUssQ0FBQyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxDQUFDO0tBQ047SUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7UUFDckMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDWCxTQUFTO1NBQ1o7UUFDRCxNQUFNLElBQUksR0FBRyxhQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0QsTUFBTSxHQUFHLEdBQUcsYUFBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNELFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsZUFBZSxHQUFHLENBQUMsSUFBSSxpQ0FBaUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUMxRixJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDYixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMvQjtBQUVMLENBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7Sm9ifSBmcm9tIFwiLi9qb2JcIjtcbmltcG9ydCB7UGFyc2VyfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vdHlwZXMvd3JpdGUtc3RyZWFtc1wiO1xuaW1wb3J0IHtKb2JFeGVjdXRvcn0gZnJvbSBcIi4vam9iLWV4ZWN1dG9yXCI7XG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kZXIge1xuXG4gICAgc3RhdGljIGFzeW5jIHJ1blBpcGVsaW5lKHBhcnNlcjogUGFyc2VyLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgbWFudWFsT3B0czogc3RyaW5nW10sIHByaXZpbGVnZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgam9icyA9IHBhcnNlci5qb2JzO1xuICAgICAgICBjb25zdCBzdGFnZXMgPSBwYXJzZXIuc3RhZ2VzO1xuXG4gICAgICAgIGxldCBwb3RlbnRpYWxTdGFydGVycyA9IFsuLi5qb2JzLnZhbHVlcygpXTtcbiAgICAgICAgcG90ZW50aWFsU3RhcnRlcnMgPSBwb3RlbnRpYWxTdGFydGVycy5maWx0ZXIoaiA9PiBqLndoZW4gIT09IFwibmV2ZXJcIik7XG4gICAgICAgIHBvdGVudGlhbFN0YXJ0ZXJzID0gcG90ZW50aWFsU3RhcnRlcnMuZmlsdGVyKGogPT4gai53aGVuICE9PSBcIm1hbnVhbFwiIHx8IG1hbnVhbE9wdHMuaW5jbHVkZXMoai5uYW1lKSk7XG4gICAgICAgIGF3YWl0IEpvYkV4ZWN1dG9yLnJ1bkxvb3Aoam9icywgc3RhZ2VzLCBwb3RlbnRpYWxTdGFydGVycywgbWFudWFsT3B0cywgcHJpdmlsZWdlZCk7XG4gICAgICAgIGF3YWl0IENvbW1hbmRlci5wcmludFJlcG9ydCh3cml0ZVN0cmVhbXMsIGpvYnMsIHN0YWdlcywgcGFyc2VyLmpvYk5hbWVQYWQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBydW5TaW5nbGVKb2IocGFyc2VyOiBQYXJzZXIsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBqb2JBcmdzOiBzdHJpbmdbXSwgbmVlZHM6IGJvb2xlYW4sIG1hbnVhbE9wdHM6IHN0cmluZ1tdLCBwcml2aWxlZ2VkOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGpvYnMgPSBwYXJzZXIuam9icztcbiAgICAgICAgY29uc3Qgc3RhZ2VzID0gcGFyc2VyLnN0YWdlcztcblxuICAgICAgICBsZXQgcG90ZW50aWFsU3RhcnRlcnM6IEpvYltdID0gW107XG4gICAgICAgIGNvbnN0IGpvYlBvb2xNYXAgPSBuZWVkcyA/IG5ldyBNYXA8c3RyaW5nLCBKb2I+KGpvYnMpIDogbmV3IE1hcDxzdHJpbmcsIEpvYj4oKTtcbiAgICAgICAgam9iQXJncy5mb3JFYWNoKGpvYk5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3Qgam9iID0gVXRpbHMuZ2V0Sm9iQnlOYW1lKGpvYnMsIGpvYk5hbWUpO1xuICAgICAgICAgICAgam9iUG9vbE1hcC5zZXQoam9iTmFtZSwgam9iKTtcbiAgICAgICAgICAgIGlmIChuZWVkcykge1xuICAgICAgICAgICAgICAgIHBvdGVudGlhbFN0YXJ0ZXJzID0gcG90ZW50aWFsU3RhcnRlcnMuY29uY2F0KEpvYkV4ZWN1dG9yLmdldFBhc3RUb1dhaXRGb3Ioam9icywgc3RhZ2VzLCBqb2IsIG1hbnVhbE9wdHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvdGVudGlhbFN0YXJ0ZXJzLnB1c2goam9iKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgSm9iRXhlY3V0b3IucnVuTG9vcChqb2JQb29sTWFwLCBzdGFnZXMsIHBvdGVudGlhbFN0YXJ0ZXJzLCBtYW51YWxPcHRzLCBwcml2aWxlZ2VkKTtcbiAgICAgICAgYXdhaXQgQ29tbWFuZGVyLnByaW50UmVwb3J0KHdyaXRlU3RyZWFtcywgam9icywgc3RhZ2VzLCBwYXJzZXIuam9iTmFtZVBhZCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHByaW50UmVwb3J0ID0gYXN5bmMgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBqb2JzOiBSZWFkb25seU1hcDxzdHJpbmcsIEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10sIGpvYk5hbWVQYWQ6IG51bWJlcikgPT4ge1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KFwiXFxuXCIpO1xuXG4gICAgICAgIGNvbnN0IHByZVNjcmlwdHM6IHsgc3VjY2Vzc2Z1bDogSm9iW107IGZhaWxlZDogSm9iW107IHdhcm5lZDogSm9iW10gfSA9IHtcbiAgICAgICAgICAgIHN1Y2Nlc3NmdWw6IFtdLFxuICAgICAgICAgICAgZmFpbGVkOiBbXSxcbiAgICAgICAgICAgIHdhcm5lZDogW10sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFmdGVyU2NyaXB0czogeyB3YXJuZWQ6IEpvYltdIH0gPSB7XG4gICAgICAgICAgICB3YXJuZWQ6IFtdLFxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIGpvYnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGlmIChqb2Iuc3RhcnRlZCAmJiBqb2IuYWZ0ZXJTY3JpcHRzRXhpdENvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICBhZnRlclNjcmlwdHMud2FybmVkLnB1c2goam9iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIGpvYnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGlmICgham9iLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGpvYi5wcmVTY3JpcHRzRXhpdENvZGUgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwcmVTY3JpcHRzLnN1Y2Nlc3NmdWwucHVzaChqb2IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChqb2IuYWxsb3dGYWlsdXJlKSB7XG4gICAgICAgICAgICAgICAgcHJlU2NyaXB0cy53YXJuZWQucHVzaChqb2IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcmVTY3JpcHRzLmZhaWxlZC5wdXNoKGpvYik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJlU2NyaXB0cy5zdWNjZXNzZnVsLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgcHJlU2NyaXB0cy5zdWNjZXNzZnVsLnNvcnQoKGEsIGIpID0+IHN0YWdlcy5pbmRleE9mKGEuc3RhZ2UpIC0gc3RhZ2VzLmluZGV4T2YoYi5zdGFnZSkpO1xuICAgICAgICAgICAgcHJlU2NyaXB0cy5zdWNjZXNzZnVsLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVQYWQgPSBqb2IubmFtZS5wYWRFbmQoam9iTmFtZVBhZCk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7YmxhY2suYmdHcmVlbkJyaWdodCAgUEFTUyB9IHtibHVlQnJpZ2h0ICR7bmFtZVBhZH19YCk7XG4gICAgICAgICAgICAgICAgaWYgKGpvYi5jb3ZlcmFnZVBlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2AgJHtqb2IuY292ZXJhZ2VQZXJjZW50fSUge2dyZXkgY292ZXJhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoXCJcXG5cIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmVTY3JpcHRzLndhcm5lZC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHByZVNjcmlwdHMud2FybmVkLnNvcnQoKGEsIGIpID0+IHN0YWdlcy5pbmRleE9mKGEuc3RhZ2UpIC0gc3RhZ2VzLmluZGV4T2YoYi5zdGFnZSkpO1xuICAgICAgICAgICAgcHJlU2NyaXB0cy53YXJuZWQuZm9yRWFjaCgoe25hbWV9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZVBhZCA9IG5hbWUucGFkRW5kKGpvYk5hbWVQYWQpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0ge2JsdWVCcmlnaHQgJHtuYW1lUGFkfX0gIHByZV9zY3JpcHRcXG5gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFmdGVyU2NyaXB0cy53YXJuZWQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBhZnRlclNjcmlwdHMud2FybmVkLnNvcnQoKGEsIGIpID0+IHN0YWdlcy5pbmRleE9mKGEuc3RhZ2UpIC0gc3RhZ2VzLmluZGV4T2YoYi5zdGFnZSkpO1xuICAgICAgICAgICAgYWZ0ZXJTY3JpcHRzLndhcm5lZC5mb3JFYWNoKCh7bmFtZX0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lUGFkID0gbmFtZS5wYWRFbmQoam9iTmFtZVBhZCk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gfSB7Ymx1ZUJyaWdodCAke25hbWVQYWR9fSAgYWZ0ZXJfc2NyaXB0XFxuYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmVTY3JpcHRzLmZhaWxlZC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHByZVNjcmlwdHMuZmFpbGVkLnNvcnQoKGEsIGIpID0+IHN0YWdlcy5pbmRleE9mKGEuc3RhZ2UpIC0gc3RhZ2VzLmluZGV4T2YoYi5zdGFnZSkpO1xuICAgICAgICAgICAgcHJlU2NyaXB0cy5mYWlsZWQuZm9yRWFjaCgoe25hbWV9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZVBhZCA9IG5hbWUucGFkRW5kKGpvYk5hbWVQYWQpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge2JsYWNrLmJnUmVkICBGQUlMIH0ge2JsdWVCcmlnaHQgJHtuYW1lUGFkfX1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2YgcHJlU2NyaXB0cy5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gam9iLmVudmlyb25tZW50O1xuICAgICAgICAgICAgaWYgKGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IFV0aWxzLmV4cGFuZFRleHQoZS5uYW1lLCBqb2IuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgY29uc3QgdXJsID0gVXRpbHMuZXhwYW5kVGV4dChlLnVybCwgam9iLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge2JsdWVCcmlnaHQgJHtqb2IubmFtZX19IGVudmlyb25tZW50OiBcXHsgbmFtZToge2JvbGQgJHtuYW1lfX1gKTtcbiAgICAgICAgICAgIGlmICh1cmwgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgLCB1cmw6IHtib2xkICR7dXJsfX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoXCIgfVxcblwiKTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHN0YXRpYyBydW5MaXN0KHBhcnNlcjogUGFyc2VyLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgbGlzdEFsbDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBzdGFnZXMgPSBwYXJzZXIuc3RhZ2VzO1xuICAgICAgICBsZXQgam9icyA9IFsuLi5wYXJzZXIuam9icy52YWx1ZXMoKV07XG4gICAgICAgIGpvYnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YWdlcy5pbmRleE9mKGEuc3RhZ2UpIC0gc3RhZ2VzLmluZGV4T2YoYi5zdGFnZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCB3aGVuUGFkRW5kID0gNDtcbiAgICAgICAgam9icy5mb3JFYWNoKGogPT4gd2hlblBhZEVuZCA9IE1hdGgubWF4KGoud2hlbi5sZW5ndGgsIHdoZW5QYWRFbmQpKTtcblxuICAgICAgICBsZXQgc3RhZ2VQYWRFbmQgPSA1O1xuICAgICAgICBzdGFnZXMuZm9yRWFjaChzID0+IHN0YWdlUGFkRW5kID0gTWF0aC5tYXgocy5sZW5ndGgsIHN0YWdlUGFkRW5kKSk7XG5cbiAgICAgICAgbGV0IGRlc2NyaXB0aW9uUGFkRW5kID0gMTE7XG4gICAgICAgIGpvYnMuZm9yRWFjaChqID0+IGRlc2NyaXB0aW9uUGFkRW5kID0gTWF0aC5tYXgoai5kZXNjcmlwdGlvbi5sZW5ndGgsIGRlc2NyaXB0aW9uUGFkRW5kKSk7XG5cbiAgICAgICAgY29uc3Qgam9iTmFtZVBhZCA9IHBhcnNlci5qb2JOYW1lUGFkO1xuXG4gICAgICAgIGlmICghbGlzdEFsbCkge1xuICAgICAgICAgICAgam9icyA9IGpvYnMuZmlsdGVyKGogPT4gai53aGVuICE9PSBcIm5ldmVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7Z3JleSAke1wibmFtZVwiLnBhZEVuZChqb2JOYW1lUGFkKX0gICR7XCJkZXNjcmlwdGlvblwiLnBhZEVuZChkZXNjcmlwdGlvblBhZEVuZCl9fSAgYCk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge2dyZXkgJHtcInN0YWdlXCIucGFkRW5kKHN0YWdlUGFkRW5kKX0gICR7XCJ3aGVuXCIucGFkRW5kKHdoZW5QYWRFbmQpfX0gIGApO1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYHtncmV5IGFsbG93X2ZhaWx1cmUgIG5lZWRzfVxcbmApO1xuXG4gICAgICAgIGNvbnN0IHJlbmRlckxpbmUgPSAoam9iOiBKb2IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5lZWRzID0gam9iLm5lZWRzO1xuICAgICAgICAgICAgY29uc3QgYWxsb3dGYWlsdXJlID0gam9iLmFsbG93RmFpbHVyZSA/IFwidHJ1ZSBcIiA6IFwiZmFsc2VcIjtcbiAgICAgICAgICAgIGxldCBqb2JMaW5lID0gY2hhbGtge2JsdWVCcmlnaHQgJHtqb2IubmFtZS5wYWRFbmQoam9iTmFtZVBhZCl9fSAgJHtqb2IuZGVzY3JpcHRpb24ucGFkRW5kKGRlc2NyaXB0aW9uUGFkRW5kKX0gIGA7XG4gICAgICAgICAgICBqb2JMaW5lICs9IGNoYWxrYHt5ZWxsb3cgJHtqb2Iuc3RhZ2UucGFkRW5kKHN0YWdlUGFkRW5kKX19ICAke2pvYi53aGVuLnBhZEVuZCh3aGVuUGFkRW5kKX0gICR7YWxsb3dGYWlsdXJlLnBhZEVuZCgxMSl9YDtcbiAgICAgICAgICAgIGlmIChuZWVkcykge1xuICAgICAgICAgICAgICAgIGpvYkxpbmUgKz0gY2hhbGtgICAgIFt7Ymx1ZUJyaWdodCAke25lZWRzLm1hcChuID0+IG4uam9iKS5qb2luKFwiLFwiKX19XWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGAke2pvYkxpbmV9XFxuYCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgam9icy5mb3JFYWNoKChqb2IpID0+IHJlbmRlckxpbmUoam9iKSk7XG4gICAgfVxuXG59XG4iXX0=
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tbWFuZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxrREFBMEI7QUFHMUIsbUNBQThCO0FBRTlCLGlEQUEyQztBQUMzQyx3REFBMEI7QUFFMUIsTUFBYSxTQUFTO0lBRWxCLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQWMsRUFBRSxZQUEwQixFQUFFLFVBQW9CLEVBQUUsVUFBbUIsRUFBRSxHQUFXO1FBQ3ZILE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUU3QixJQUFJLGlCQUFpQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMzQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQ3RFLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEcsTUFBTSwwQkFBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRixNQUFNLFNBQVMsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBYyxFQUFFLFlBQTBCLEVBQUUsT0FBaUIsRUFB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Q0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDNUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxhQUFhLElBQUksSUFBSSxDQUFDLENBQUM7YUFDbkQ7U0FDSjtLQUNKO0lBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ1gsU0FBUztTQUNaO1FBQ0QsTUFBTSxJQUFJLEdBQUcsYUFBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdELE1BQU0sR0FBRyxHQUFHLGFBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzRCxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLGVBQWUsR0FBRyxDQUFDLElBQUksaUNBQWlDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDMUYsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ2IsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsQ0FBQztTQUNwRDtRQUNELFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDL0I7QUFFTCxDQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQge0pvYn0gZnJvbSBcIi4vam9iXCI7XG5pbXBvcnQge1BhcnNlcn0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3R5cGVzL3dyaXRlLXN0cmVhbXNcIjtcbmltcG9ydCB7Sm9iRXhlY3V0b3J9IGZyb20gXCIuL2pvYi1leGVjdXRvclwiO1xuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiO1xuXG5leHBvcnQgY2xhc3MgQ29tbWFuZGVyIHtcblxuICAgIHN0YXRpYyBhc3luYyBydW5QaXBlbGluZShwYXJzZXI6IFBhcnNlciwgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIG1hbnVhbE9wdHM6IHN0cmluZ1tdLCBwcml2aWxlZ2VkOiBib29sZWFuLCBjd2Q6IHN0cmluZykge1xuICAgICAgICBjb25zdCBqb2JzID0gcGFyc2VyLmpvYnM7XG4gICAgICAgIGNvbnN0IHN0YWdlcyA9IHBhcnNlci5zdGFnZXM7XG5cbiAgICAgICAgbGV0IHBvdGVudGlhbFN0YXJ0ZXJzID0gWy4uLmpvYnMudmFsdWVzKCldO1xuICAgICAgICBwb3RlbnRpYWxTdGFydGVycyA9IHBvdGVudGlhbFN0YXJ0ZXJzLmZpbHRlcihqID0+IGoud2hlbiAhPT0gXCJuZXZlclwiKTtcbiAgICAgICAgcG90ZW50aWFsU3RhcnRlcnMgPSBwb3RlbnRpYWxTdGFydGVycy5maWx0ZXIoaiA9PiBqLndoZW4gIT09IFwibWFudWFsXCIgfHwgbWFudWFsT3B0cy5pbmNsdWRlcyhqLm5hbWUpKTtcbiAgICAgICAgYXdhaXQgSm9iRXhlY3V0b3IucnVuTG9vcChqb2JzLCBzdGFnZXMsIHBvdGVudGlhbFN0YXJ0ZXJzLCBtYW51YWxPcHRzLCBwcml2aWxlZ2VkKTtcbiAgICAgICAgYXdhaXQgQ29tbWFuZGVyLnByaW50UmVwb3J0KHdyaXRlU3RyZWFtcywgam9icywgc3RhZ2VzLCBwYXJzZXIuam9iTmFtZVBhZCwgY3dkKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcnVuU2luZ2xlSm9iKHBhcnNlcjogUGFyc2VyLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgam9iQXJnczogc3RyaW5nW10sIG5lZWRzOiBib29sZWFuLCBtYW51YWxPcHRzOiBzdHJpbmdbXSwgcHJpdmlsZWdlZDogYm9vbGVhbiwgY3dkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgam9icyA9IHBhcnNlci5qb2JzO1xuICAgICAgICBjb25zdCBzdGFnZXMgPSBwYXJzZXIuc3RhZ2VzO1xuXG4gICAgICAgIGxldCBwb3RlbnRpYWxTdGFydGVyczogSm9iW10gPSBbXTtcbiAgICAgICAgY29uc3Qgam9iUG9vbE1hcCA9IG5lZWRzID8gbmV3IE1hcDxzdHJpbmcsIEpvYj4oam9icykgOiBuZXcgTWFwPHN0cmluZywgSm9iPigpO1xuICAgICAgICBqb2JBcmdzLmZvckVhY2goam9iTmFtZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBqb2IgPSBVdGlscy5nZXRKb2JCeU5hbWUoam9icywgam9iTmFtZSk7XG4gICAgICAgICAgICBqb2JQb29sTWFwLnNldChqb2JOYW1lLCBqb2IpO1xuICAgICAgICAgICAgaWYgKG5lZWRzKSB7XG4gICAgICAgICAgICAgICAgcG90ZW50aWFsU3RhcnRlcnMgPSBwb3RlbnRpYWxTdGFydGVycy5jb25jYXQoSm9iRXhlY3V0b3IuZ2V0UGFzdFRvV2FpdEZvcihqb2JzLCBzdGFnZXMsIGpvYiwgbWFudWFsT3B0cykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG90ZW50aWFsU3RhcnRlcnMucHVzaChqb2IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBKb2JFeGVjdXRvci5ydW5Mb29wKGpvYlBvb2xNYXAsIHN0YWdlcywgcG90ZW50aWFsU3RhcnRlcnMsIG1hbnVhbE9wdHMsIHByaXZpbGVnZWQpO1xuICAgICAgICBhd2FpdCBDb21tYW5kZXIucHJpbnRSZXBvcnQod3JpdGVTdHJlYW1zLCBqb2JzLCBzdGFnZXMsIHBhcnNlci5qb2JOYW1lUGFkLCBjd2QpO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcmludFJlcG9ydCA9IGFzeW5jICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgam9iczogUmVhZG9ubHlNYXA8c3RyaW5nLCBKb2I+LCBzdGFnZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBqb2JOYW1lUGFkOiBudW1iZXIsIGN3ZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoXCJcXG5cIik7XG5cbiAgICAgICAgY29uc3QgcHJlU2NyaXB0czogeyBzdWNjZXNzZnVsOiBKb2JbXTsgZmFpbGVkOiBKb2JbXTsgd2FybmVkOiBKb2JbXSB9ID0ge1xuICAgICAgICAgICAgc3VjY2Vzc2Z1bDogW10sXG4gICAgICAgICAgICBmYWlsZWQ6IFtdLFxuICAgICAgICAgICAgd2FybmVkOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWZ0ZXJTY3JpcHRzOiB7IHdhcm5lZDogSm9iW10gfSA9IHtcbiAgICAgICAgICAgIHdhcm5lZDogW10sXG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2Ygam9icy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKGpvYi5zdGFydGVkICYmIGpvYi5hZnRlclNjcmlwdHNFeGl0Q29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGFmdGVyU2NyaXB0cy53YXJuZWQucHVzaChqb2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2Ygam9icy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKCFqb2Iuc3RhcnRlZCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoam9iLnByZVNjcmlwdHNFeGl0Q29kZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHByZVNjcmlwdHMuc3VjY2Vzc2Z1bC5wdXNoKGpvYik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGpvYi5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgICAgICBwcmVTY3JpcHRzLndhcm5lZC5wdXNoKGpvYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZVNjcmlwdHMuZmFpbGVkLnB1c2goam9iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmVTY3JpcHRzLnN1Y2Nlc3NmdWwubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBwcmVTY3JpcHRzLnN1Y2Nlc3NmdWwuc29ydCgoYSwgYikgPT4gc3RhZ2VzLmluZGV4T2YoYS5zdGFnZSkgLSBzdGFnZXMuaW5kZXhPZihiLnN0YWdlKSk7XG4gICAgICAgICAgICBwcmVTY3JpcHRzLnN1Y2Nlc3NmdWwuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZVBhZCA9IGpvYi5uYW1lLnBhZEVuZChqb2JOYW1lUGFkKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYHtibGFjay5iZ0dyZWVuQnJpZ2h0ICBQQVNTIH0ge2JsdWVCcmlnaHQgJHtuYW1lUGFkfX1gKTtcbiAgICAgICAgICAgICAgICBpZiAoam9iLmNvdmVyYWdlUGVyY2VudCkge1xuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCAke2pvYi5jb3ZlcmFnZVBlcmNlbnR9JSB7Z3JleSBjb3ZlcmFnZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChcIlxcblwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZVNjcmlwdHMud2FybmVkLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgcHJlU2NyaXB0cy53YXJuZWQuc29ydCgoYSwgYikgPT4gc3RhZ2VzLmluZGV4T2YoYS5zdGFnZSkgLSBzdGFnZXMuaW5kZXhPZihiLnN0YWdlKSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHtuYW1lfSBvZiBwcmVTY3JpcHRzLndhcm5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVQYWQgPSBuYW1lLnBhZEVuZChqb2JOYW1lUGFkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzYWZlTmFtZSA9IFV0aWxzLmdldFNhZmVKb2JOYW1lKG5hbWUpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0ge2JsdWVCcmlnaHQgJHtuYW1lUGFkfX0gIHByZV9zY3JpcHRcXG5gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRMb2cgPSBhd2FpdCBmcy5yZWFkRmlsZShgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvb3V0cHV0LyR7c2FmZU5hbWV9LmxvZ2AsIFwidXRmOFwiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3V0cHV0TG9nLnNwbGl0KC9cXHI/XFxuLykuZmlsdGVyKGogPT4gIWouaW5jbHVkZXMoXCJbMzJtJCBcIikpLmZpbHRlcihqID0+IGogIT09IFwiXCIpLnNsaWNlKC0zKSkge1xuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCAge3llbGxvdyA+fSAke2xpbmV9XFxuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFmdGVyU2NyaXB0cy53YXJuZWQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBhZnRlclNjcmlwdHMud2FybmVkLnNvcnQoKGEsIGIpID0+IHN0YWdlcy5pbmRleE9mKGEuc3RhZ2UpIC0gc3RhZ2VzLmluZGV4T2YoYi5zdGFnZSkpO1xuICAgICAgICAgICAgYWZ0ZXJTY3JpcHRzLndhcm5lZC5mb3JFYWNoKCh7bmFtZX0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lUGFkID0gbmFtZS5wYWRFbmQoam9iTmFtZVBhZCk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gfSB7Ymx1ZUJyaWdodCAke25hbWVQYWR9fSAgYWZ0ZXJfc2NyaXB0XFxuYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmVTY3JpcHRzLmZhaWxlZC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHByZVNjcmlwdHMuZmFpbGVkLnNvcnQoKGEsIGIpID0+IHN0YWdlcy5pbmRleE9mKGEuc3RhZ2UpIC0gc3RhZ2VzLmluZGV4T2YoYi5zdGFnZSkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB7bmFtZX0gb2YgcHJlU2NyaXB0cy5mYWlsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lUGFkID0gbmFtZS5wYWRFbmQoam9iTmFtZVBhZCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2FmZU5hbWUgPSBVdGlscy5nZXRTYWZlSm9iTmFtZShuYW1lKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYHtibGFjay5iZ1JlZCAgRkFJTCB9IHtibHVlQnJpZ2h0ICR7bmFtZVBhZH19XFxuYCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0TG9nID0gYXdhaXQgZnMucmVhZEZpbGUoYCR7Y3dkfS8uZ2l0bGFiLWNpLWxvY2FsL291dHB1dC8ke3NhZmVOYW1lfS5sb2dgLCBcInV0ZjhcIik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG91dHB1dExvZy5zcGxpdCgvXFxyP1xcbi8pLmZpbHRlcihqID0+ICFqLmluY2x1ZGVzKFwiWzMybSQgXCIpKS5maWx0ZXIoaiA9PiBqICE9PSBcIlwiKS5zbGljZSgtMykpIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2AgIHtyZWQgPn0gJHtsaW5lfVxcbmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIHByZVNjcmlwdHMuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgY29uc3QgZSA9IGpvYi5lbnZpcm9ubWVudDtcbiAgICAgICAgICAgIGlmIChlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBVdGlscy5leHBhbmRUZXh0KGUubmFtZSwgam9iLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IFV0aWxzLmV4cGFuZFRleHQoZS51cmwsIGpvYi5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fSBlbnZpcm9ubWVudDogXFx7IG5hbWU6IHtib2xkICR7bmFtZX19YCk7XG4gICAgICAgICAgICBpZiAodXJsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCwgdXJsOiB7Ym9sZCAke3VybH19YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KFwiIH1cXG5cIik7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBzdGF0aWMgcnVuTGlzdChwYXJzZXI6IFBhcnNlciwgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGxpc3RBbGw6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgc3RhZ2VzID0gcGFyc2VyLnN0YWdlcztcbiAgICAgICAgbGV0IGpvYnMgPSBbLi4ucGFyc2VyLmpvYnMudmFsdWVzKCldO1xuICAgICAgICBqb2JzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdGFnZXMuaW5kZXhPZihhLnN0YWdlKSAtIHN0YWdlcy5pbmRleE9mKGIuc3RhZ2UpO1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgd2hlblBhZEVuZCA9IDQ7XG4gICAgICAgIGpvYnMuZm9yRWFjaChqID0+IHdoZW5QYWRFbmQgPSBNYXRoLm1heChqLndoZW4ubGVuZ3RoLCB3aGVuUGFkRW5kKSk7XG5cbiAgICAgICAgbGV0IHN0YWdlUGFkRW5kID0gNTtcbiAgICAgICAgc3RhZ2VzLmZvckVhY2gocyA9PiBzdGFnZVBhZEVuZCA9IE1hdGgubWF4KHMubGVuZ3RoLCBzdGFnZVBhZEVuZCkpO1xuXG4gICAgICAgIGxldCBkZXNjcmlwdGlvblBhZEVuZCA9IDExO1xuICAgICAgICBqb2JzLmZvckVhY2goaiA9PiBkZXNjcmlwdGlvblBhZEVuZCA9IE1hdGgubWF4KGouZGVzY3JpcHRpb24ubGVuZ3RoLCBkZXNjcmlwdGlvblBhZEVuZCkpO1xuXG4gICAgICAgIGNvbnN0IGpvYk5hbWVQYWQgPSBwYXJzZXIuam9iTmFtZVBhZDtcblxuICAgICAgICBpZiAoIWxpc3RBbGwpIHtcbiAgICAgICAgICAgIGpvYnMgPSBqb2JzLmZpbHRlcihqID0+IGoud2hlbiAhPT0gXCJuZXZlclwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge2dyZXkgJHtcIm5hbWVcIi5wYWRFbmQoam9iTmFtZVBhZCl9ICAke1wiZGVzY3JpcHRpb25cIi5wYWRFbmQoZGVzY3JpcHRpb25QYWRFbmQpfX0gIGApO1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYHtncmV5ICR7XCJzdGFnZVwiLnBhZEVuZChzdGFnZVBhZEVuZCl9ICAke1wid2hlblwiLnBhZEVuZCh3aGVuUGFkRW5kKX19ICBgKTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7Z3JleSBhbGxvd19mYWlsdXJlICBuZWVkc31cXG5gKTtcblxuICAgICAgICBjb25zdCByZW5kZXJMaW5lID0gKGpvYjogSm9iKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZWVkcyA9IGpvYi5uZWVkcztcbiAgICAgICAgICAgIGNvbnN0IGFsbG93RmFpbHVyZSA9IGpvYi5hbGxvd0ZhaWx1cmUgPyBcInRydWUgXCIgOiBcImZhbHNlXCI7XG4gICAgICAgICAgICBsZXQgam9iTGluZSA9IGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iLm5hbWUucGFkRW5kKGpvYk5hbWVQYWQpfX0gICR7am9iLmRlc2NyaXB0aW9uLnBhZEVuZChkZXNjcmlwdGlvblBhZEVuZCl9ICBgO1xuICAgICAgICAgICAgam9iTGluZSArPSBjaGFsa2B7eWVsbG93ICR7am9iLnN0YWdlLnBhZEVuZChzdGFnZVBhZEVuZCl9fSAgJHtqb2Iud2hlbi5wYWRFbmQod2hlblBhZEVuZCl9ICAke2FsbG93RmFpbHVyZS5wYWRFbmQoMTEpfWA7XG4gICAgICAgICAgICBpZiAobmVlZHMpIHtcbiAgICAgICAgICAgICAgICBqb2JMaW5lICs9IGNoYWxrYCAgICBbe2JsdWVCcmlnaHQgJHtuZWVkcy5tYXAobiA9PiBuLmpvYikuam9pbihcIixcIil9fV1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChgJHtqb2JMaW5lfVxcbmApO1xuICAgICAgICB9O1xuXG4gICAgICAgIGpvYnMuZm9yRWFjaCgoam9iKSA9PiByZW5kZXJMaW5lKGpvYikpO1xuICAgIH1cblxufVxuIl19
package/src/git-data.js CHANGED
@@ -9,10 +9,24 @@ const asserts_1 = require("./asserts");
9
9
  const chalk_1 = __importDefault(require("chalk"));
10
10
  const exit_error_1 = require("./types/exit-error");
11
11
  class GitData {
12
- constructor(data) {
13
- this.remote = data.remote;
14
- this.commit = data.commit;
15
- this.user = data.user;
12
+ constructor() {
13
+ this.user = {
14
+ GITLAB_USER_LOGIN: "local",
15
+ GITLAB_USER_EMAIL: "local@gitlab.com",
16
+ GITLAB_USER_NAME: "Bob Local",
17
+ GITLAB_USER_ID: "1000",
18
+ };
19
+ this.remote = {
20
+ port: "22",
21
+ host: "gitlab.com",
22
+ group: "fallback.group",
23
+ project: "fallback.project",
24
+ };
25
+ this.commit = {
26
+ REF_NAME: "main",
27
+ SHA: "0000000000000000000000000000000000000000",
28
+ SHORT_SHA: "00000000",
29
+ };
16
30
  }
17
31
  get CI_PROJECT_PATH() {
18
32
  return `${this.remote.group}/${this.remote.project}`;
@@ -27,95 +41,77 @@ class GitData {
27
41
  return `${this.remote.group.replace(/\//g, "-")}-${this.remote.project}`;
28
42
  }
29
43
  static async init(cwd, writeStreams) {
44
+ const gitData = new GitData();
30
45
  try {
31
46
  const gitVersion = (await utils_1.Utils.spawn("git --version", cwd)).stdout.trimEnd();
32
47
  (0, asserts_1.assert)(gitVersion != null, "We do not think it is safe to use git without a proper version string!");
33
48
  }
34
49
  catch (e) {
35
50
  writeStreams.stderr((0, chalk_1.default) `{yellow Git not available using fallback}\n`);
36
- return this.defaultData;
51
+ return gitData;
37
52
  }
38
- return new GitData({
39
- user: await GitData.getUserData(cwd, writeStreams),
40
- remote: await GitData.getRemoteData(cwd, writeStreams),
41
- commit: await GitData.getCommitData(cwd, writeStreams),
42
- });
53
+ await gitData.initCommitData(cwd, writeStreams);
54
+ await gitData.initRemoteData(cwd, writeStreams);
55
+ await gitData.initUserData(cwd, writeStreams);
56
+ return gitData;
43
57
  }
44
- static async getCommitData(cwd, writeStreams) {
58
+ async initCommitData(cwd, writeStreams) {
45
59
  try {
46
60
  const gitLogStdout = (await utils_1.Utils.spawn("git log -1 --pretty=format:'%h %H %D'", cwd)).stdout.replace(/\r?\n/g, "");
47
61
  const gitLogMatch = gitLogStdout.match(/(?<short_sha>\S*?) (?<sha>\S*) .*HEAD( -> |, tag: |, )(?<ref_name>.*?)(?:,|$)/);
48
62
  (0, asserts_1.assert)(gitLogMatch?.groups != null, "git log -1 didn't provide valid matches");
49
- return {
50
- REF_NAME: gitLogMatch.groups.ref_name,
51
- SHA: gitLogMatch.groups.sha,
52
- SHORT_SHA: gitLogMatch.groups.short_sha,
53
- };
63
+ this.commit.REF_NAME = gitLogMatch.groups.ref_name;
64
+ this.commit.SHA = gitLogMatch.groups.sha;
65
+ this.commit.SHORT_SHA = gitLogMatch.groups.short_sha;
54
66
  }
55
67
  catch (e) {
56
68
  if (e instanceof exit_error_1.ExitError) {
57
69
  writeStreams.stderr((0, chalk_1.default) `{yellow ${e.message}}\n`);
58
- return this.defaultData.commit;
70
+ return;
59
71
  }
60
72
  writeStreams.stderr((0, chalk_1.default) `{yellow Using fallback git commit data}\n`);
61
- return this.defaultData.commit;
62
73
  }
63
74
  }
64
- static async getRemoteData(cwd, writeStreams) {
75
+ async initRemoteData(cwd, writeStreams) {
65
76
  try {
66
77
  const { stdout: gitRemote } = await utils_1.Utils.spawn("git remote -v", cwd);
67
78
  const gitRemoteMatch = gitRemote.match(/.*(?:\/\/|@)(?<host>[^:/]*)(:(?<port>\d+)\/|:|\/)(?<group>.*)\/(?<project>.*?)(?:\r?\n|\.git)/);
68
79
  (0, asserts_1.assert)(gitRemoteMatch?.groups != null, "git remote -v didn't provide valid matches");
69
- return {
70
- port: gitRemoteMatch.groups.port ?? "22",
71
- host: gitRemoteMatch.groups.host,
72
- group: gitRemoteMatch.groups.group,
73
- project: gitRemoteMatch.groups.project,
74
- };
80
+ this.remote.port = gitRemoteMatch.groups.port ?? "22";
81
+ this.remote.host = gitRemoteMatch.groups.host;
82
+ this.remote.group = gitRemoteMatch.groups.group;
83
+ this.remote.project = gitRemoteMatch.groups.project;
75
84
  }
76
85
  catch (e) {
77
86
  if (e instanceof exit_error_1.ExitError) {
78
87
  writeStreams.stderr((0, chalk_1.default) `{yellow ${e.message}}\n`);
79
- return this.defaultData.remote;
88
+ return;
80
89
  }
81
90
  writeStreams.stderr((0, chalk_1.default) `{yellow Using fallback git remote data}\n`);
82
- return this.defaultData.remote;
83
91
  }
84
92
  }
85
- static async getUserData(cwd, writeStreams) {
93
+ async initUserData(cwd, writeStreams) {
94
+ try {
95
+ this.user.GITLAB_USER_NAME = (await utils_1.Utils.spawn("git config user.name", cwd)).stdout.trimEnd();
96
+ }
97
+ catch (e) {
98
+ writeStreams.stderr((0, chalk_1.default) `{yellow Using fallback git user.name}\n`);
99
+ }
86
100
  try {
87
101
  const email = (await utils_1.Utils.spawn("git config user.email", cwd)).stdout.trimEnd();
88
- return {
89
- GITLAB_USER_NAME: (await utils_1.Utils.spawn("git config user.name", cwd)).stdout.trimEnd(),
90
- GITLAB_USER_ID: (await utils_1.Utils.spawn("id -u", cwd)).stdout.trimEnd(),
91
- GITLAB_USER_EMAIL: email,
92
- GITLAB_USER_LOGIN: email.replace(/@.*/, ""),
93
- };
102
+ this.user.GITLAB_USER_EMAIL = email;
103
+ this.user.GITLAB_USER_LOGIN = email.replace(/@.*/, "");
104
+ }
105
+ catch (e) {
106
+ writeStreams.stderr((0, chalk_1.default) `{yellow Using fallback git user.email}\n`);
107
+ }
108
+ try {
109
+ this.user.GITLAB_USER_ID = (await utils_1.Utils.spawn("id -u", cwd)).stdout.trimEnd();
94
110
  }
95
111
  catch (e) {
96
- writeStreams.stderr((0, chalk_1.default) `{yellow Using fallback git user data}\n`);
97
- return this.defaultData.user;
112
+ writeStreams.stderr((0, chalk_1.default) `{yellow Using fallback linux user id}\n`);
98
113
  }
99
114
  }
100
115
  }
101
116
  exports.GitData = GitData;
102
- GitData.defaultData = new GitData({
103
- user: {
104
- GITLAB_USER_LOGIN: "local",
105
- GITLAB_USER_EMAIL: "local@gitlab.com",
106
- GITLAB_USER_NAME: "Bob Local",
107
- GITLAB_USER_ID: "1000",
108
- },
109
- remote: {
110
- port: "22",
111
- host: "gitlab.com",
112
- group: "fallback.group",
113
- project: "fallback.project",
114
- },
115
- commit: {
116
- REF_NAME: "main",
117
- SHA: "0000000000000000000000000000000000000000",
118
- SHORT_SHA: "00000000",
119
- },
120
- });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJnaXQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FBZ0M7QUFDaEMsdUNBQW1DO0FBRW5DLGtEQUEwQjtBQUMxQixtREFBNkM7QUFzQjdDLE1BQWEsT0FBTztJQTJCaEIsWUFBWSxJQUE2RDtRQUNyRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2YsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sa0JBQWtCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ2pCLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDcEIsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3RSxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBVyxFQUFFLFlBQTBCO1FBQ3JELElBQUk7WUFDQSxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sYUFBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxN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RUFBRSxXQUFXO1FBQzdCLGNBQWMsRUFBRSxNQUFNO0tBQ3pCO0lBQ0QsTUFBTSxFQUFFO1FBQ0osSUFBSSxFQUFFLElBQUk7UUFDVixJQUFJLEVBQUUsWUFBWTtRQUNsQixLQUFLLEVBQUUsZ0JBQWdCO1FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0I7S0FDOUI7SUFDRCxNQUFNLEVBQUU7UUFDSixRQUFRLEVBQUUsTUFBTTtRQUNoQixHQUFHLEVBQUUsMENBQTBDO1FBQy9DLFNBQVMsRUFBRSxVQUFVO0tBQ3hCO0NBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXRpbHMgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSBcIi4vYXNzZXJ0c1wiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3R5cGVzL3dyaXRlLXN0cmVhbXNcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7RXhpdEVycm9yfSBmcm9tIFwiLi90eXBlcy9leGl0LWVycm9yXCI7XG5cbmludGVyZmFjZSBHaXRSZW1vdGUge1xuICAgIHBvcnQ6IHN0cmluZztcbiAgICBob3N0OiBzdHJpbmc7XG4gICAgZ3JvdXA6IHN0cmluZztcbiAgICBwcm9qZWN0OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBHaXRDb21taXQge1xuICAgIFNIQTogc3RyaW5nO1xuICAgIFNIT1JUX1NIQTogc3RyaW5nO1xuICAgIFJFRl9OQU1FOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBHaXRVc2VyIHtcbiAgICBHSVRMQUJfVVNFUl9FTUFJTDogc3RyaW5nO1xuICAgIEdJVExBQl9VU0VSX0xPR0lOOiBzdHJpbmc7XG4gICAgR0lUTEFCX1VTRVJfTkFNRTogc3RyaW5nO1xuICAgIEdJVExBQl9VU0VSX0lEOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBHaXREYXRhIHtcblxuICAgIHN0YXRpYyByZWFkb25seSBkZWZhdWx0RGF0YTogR2l0RGF0YSA9XG4gICAgICAgIG5ldyBHaXREYXRhKHtcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgICBHSVRMQUJfVVNFUl9MT0dJTjogXCJsb2NhbFwiLFxuICAgICAgICAgICAgICAgIEdJVExBQl9VU0VSX0VNQUlMOiBcImxvY2FsQGdpdGxhYi5jb21cIixcbiAgICAgICAgICAgICAgICBHSVRMQUJfVVNFUl9OQU1FOiBcIkJvYiBMb2NhbFwiLFxuICAgICAgICAgICAgICAgIEdJVExBQl9VU0VSX0lEOiBcIjEwMDBcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1vdGU6IHtcbiAgICAgICAgICAgICAgICBwb3J0OiBcIjIyXCIsXG4gICAgICAgICAgICAgICAgaG9zdDogXCJnaXRsYWIuY29tXCIsXG4gICAgICAgICAgICAgICAgZ3JvdXA6IFwiZmFsbGJhY2suZ3JvdXBcIixcbiAgICAgICAgICAgICAgICBwcm9qZWN0OiBcImZhbGxiYWNrLnByb2plY3RcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21taXQ6IHtcbiAgICAgICAgICAgICAgICBSRUZfTkFNRTogXCJtYWluXCIsXG4gICAgICAgICAgICAgICAgU0hBOiBcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcbiAgICAgICAgICAgICAgICBTSE9SVF9TSEE6IFwiMDAwMDAwMDBcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgcmVhZG9ubHkgcmVtb3RlOiBHaXRSZW1vdGU7XG4gICAgcmVhZG9ubHkgY29tbWl0OiBHaXRDb21taXQ7XG4gICAgcmVhZG9ubHkgdXNlcjogR2l0VXNlcjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IHsgcmVtb3RlOiBHaXRSZW1vdGU7IGNvbW1pdDogR2l0Q29tbWl0OyB1c2VyOiBHaXRVc2VyIH0pIHtcbiAgICAgICAgdGhpcy5yZW1vdGUgPSBkYXRhLnJlbW90ZTtcbiAgICAgICAgdGhpcy5jb21taXQgPSBkYXRhLmNvbW1pdDtcbiAgICAgICAgdGhpcy51c2VyID0gZGF0YS51c2VyO1xuICAgIH1cblxuICAgIGdldCBDSV9QUk9KRUNUX1BBVEgoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnJlbW90ZS5ncm91cH0vJHt0aGlzLnJlbW90ZS5wcm9qZWN0fWA7XG4gICAgfVxuXG4gICAgZ2V0IENJX1JFR0lTVFJZKCkge1xuICAgICAgICByZXR1cm4gYGxvY2FsLXJlZ2lzdHJ5LiR7dGhpcy5yZW1vdGUuaG9zdH1gO1xuICAgIH1cblxuICAgIGdldCBDSV9SRUdJU1RSWV9JTUFHRSgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuQ0lfUkVHSVNUUll9LyR7dGhpcy5DSV9QUk9KRUNUX1BBVEh9YDtcbiAgICB9XG5cbiAgICBnZXQgQ0lfUFJPSkVDVF9QQVRIX1NMVUcoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnJlbW90ZS5ncm91cC5yZXBsYWNlKC9cXC8vZywgXCItXCIpfS0ke3RoaXMucmVtb3RlLnByb2plY3R9YDtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgaW5pdChjd2Q6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpOiBQcm9taXNlPEdpdERhdGE+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGdpdFZlcnNpb24gPSAoYXdhaXQgVXRpbHMuc3Bhd24oXCJnaXQgLS12ZXJzaW9uXCIsIGN3ZCkpLnN0ZG91dC50cmltRW5kKCk7XG4gICAgICAgICAgICBhc3NlcnQoZ2l0VmVyc2lvbiAhPSBudWxsLCBcIldlIGRvIG5vdCB0aGluayBpdCBpcyBzYWZlIHRvIHVzZSBnaXQgd2l0aG91dCBhIHByb3BlciB2ZXJzaW9uIHN0cmluZyFcIik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyBHaXQgbm90IGF2YWlsYWJsZSB1c2luZyBmYWxsYmFja31cXG5gKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHREYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBHaXREYXRhKHtcbiAgICAgICAgICAgIHVzZXI6IGF3YWl0IEdpdERhdGEuZ2V0VXNlckRhdGEoY3dkLCB3cml0ZVN0cmVhbXMpLFxuICAgICAgICAgICAgcmVtb3RlOiBhd2FpdCBHaXREYXRhLmdldFJlbW90ZURhdGEoY3dkLCB3cml0ZVN0cmVhbXMpLFxuICAgICAgICAgICAgY29tbWl0OiBhd2FpdCBHaXREYXRhLmdldENvbW1pdERhdGEoY3dkLCB3cml0ZVN0cmVhbXMpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZ2V0Q29tbWl0RGF0YShjd2Q6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpOiBQcm9taXNlPEdpdENvbW1pdD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZ2l0TG9nU3Rkb3V0ID0gKGF3YWl0IFV0aWxzLnNwYXduKFwiZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JyVoICVIICVEJ1wiLCBjd2QpKS5zdGRvdXQucmVwbGFjZSgvXFxyP1xcbi9nLCBcIlwiKTtcbiAgICAgICAgICAgIGNvbnN0IGdpdExvZ01hdGNoID0gZ2l0TG9nU3Rkb3V0Lm1hdGNoKC8oPzxzaG9ydF9zaGE+XFxTKj8pICg/PHNoYT5cXFMqKSAuKkhFQUQoIC0+IHwsIHRhZzogfCwgKSg/PHJlZl9uYW1lPi4qPykoPzosfCQpLyk7XG5cbiAgICAgICAgICAgIGFzc2VydChnaXRMb2dNYXRjaD8uZ3JvdXBzICE9IG51bGwsIFwiZ2l0IGxvZyAtMSBkaWRuJ3QgcHJvdmlkZSB2YWxpZCBtYXRjaGVzXCIpO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFJFRl9OQU1FOiBnaXRMb2dNYXRjaC5ncm91cHMucmVmX25hbWUsXG4gICAgICAgICAgICAgICAgU0hBOiBnaXRMb2dNYXRjaC5ncm91cHMuc2hhLFxuICAgICAgICAgICAgICAgIFNIT1JUX1NIQTogZ2l0TG9nTWF0Y2guZ3JvdXBzLnNob3J0X3NoYSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXhpdEVycm9yKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICR7ZS5tZXNzYWdlfX1cXG5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0RGF0YS5jb21taXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgVXNpbmcgZmFsbGJhY2sgZ2l0IGNvbW1pdCBkYXRhfVxcbmApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdERhdGEuY29tbWl0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGdldFJlbW90ZURhdGEoY3dkOiBzdHJpbmcsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKTogUHJvbWlzZTxHaXRSZW1vdGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3Rkb3V0OiBnaXRSZW1vdGUgfSA9IGF3YWl0IFV0aWxzLnNwYXduKFwiZ2l0IHJlbW90ZSAtdlwiLCBjd2QpO1xuICAgICAgICAgICAgY29uc3QgZ2l0UmVtb3RlTWF0Y2ggPSBnaXRSZW1vdGUubWF0Y2goLy4qKD86XFwvXFwvfEApKD88aG9zdD5bXjovXSopKDooPzxwb3J0PlxcZCspXFwvfDp8XFwvKSg/PGdyb3VwPi4qKVxcLyg/PHByb2plY3Q+Lio/KSg/Olxccj9cXG58XFwuZ2l0KS8pO1xuXG4gICAgICAgICAgICBhc3NlcnQoZ2l0UmVtb3RlTWF0Y2g/Lmdyb3VwcyAhPSBudWxsLCBcImdpdCByZW1vdGUgLXYgZGlkbid0IHByb3ZpZGUgdmFsaWQgbWF0Y2hlc1wiKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwb3J0OiBnaXRSZW1vdGVNYXRjaC5ncm91cHMucG9ydCA/PyBcIjIyXCIsXG4gICAgICAgICAgICAgICAgaG9zdDogZ2l0UmVtb3RlTWF0Y2guZ3JvdXBzLmhvc3QsXG4gICAgICAgICAgICAgICAgZ3JvdXA6IGdpdFJlbW90ZU1hdGNoLmdyb3Vwcy5ncm91cCxcbiAgICAgICAgICAgICAgICBwcm9qZWN0OiBnaXRSZW1vdGVNYXRjaC5ncm91cHMucHJvamVjdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXhpdEVycm9yKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICR7ZS5tZXNzYWdlfX1cXG5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0RGF0YS5yZW1vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgVXNpbmcgZmFsbGJhY2sgZ2l0IHJlbW90ZSBkYXRhfVxcbmApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdERhdGEucmVtb3RlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGdldFVzZXJEYXRhKGN3ZDogc3RyaW5nLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcyk6IFByb21pc2U8R2l0VXNlcj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZW1haWwgPSAoYXdhaXQgVXRpbHMuc3Bhd24oXCJnaXQgY29uZmlnIHVzZXIuZW1haWxcIiwgY3dkKSkuc3Rkb3V0LnRyaW1FbmQoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBHSVRMQUJfVVNFUl9OQU1FOiAoYXdhaXQgVXRpbHMuc3Bhd24oXCJnaXQgY29uZmlnIHVzZXIubmFtZVwiLCBjd2QpKS5zdGRvdXQudHJpbUVuZCgpLFxuICAgICAgICAgICAgICAgIEdJVExBQl9VU0VSX0lEOiAoYXdhaXQgVXRpbHMuc3Bhd24oXCJpZCAtdVwiLCBjd2QpKS5zdGRvdXQudHJpbUVuZCgpLFxuICAgICAgICAgICAgICAgIEdJVExBQl9VU0VSX0VNQUlMOiBlbWFpbCxcbiAgICAgICAgICAgICAgICBHSVRMQUJfVVNFUl9MT0dJTjogZW1haWwucmVwbGFjZSgvQC4qLywgXCJcIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgVXNpbmcgZmFsbGJhY2sgZ2l0IHVzZXIgZGF0YX1cXG5gKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHREYXRhLnVzZXI7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJnaXQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FBOEI7QUFDOUIsdUNBQWlDO0FBRWpDLGtEQUEwQjtBQUMxQixtREFBNkM7QUFFN0MsTUFBYSxPQUFPO0lBQXBCO1FBRW9CLFNBQUksR0FBRztZQUNuQixpQkFBaUIsRUFBRSxPQUFPO1lBQzFCLGlCQUFpQixFQUFFLGtCQUFrQjtZQUNyQyxnQkFBZ0IsRUFBRSxXQUFXO1lBQzdCLGNBQWMsRUFBRSxNQUFNO1NBQ3pCLENBQUM7UUFFYyxXQUFNLEdBQUc7WUFDckIsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsWUFBWTtZQUNsQixLQUFLLEVBQUUsZ0JBQWdCO1lBQ3ZCLE9BQU8sRUFBRSxrQkFBa0I7U0FDOUIsQ0FBQztRQUVjLFdBQU0sR0FBRztZQUNyQixRQUFRLEVBQUUsTUFBTTtZQUNoQixHQUFHLEVBQUUsMENBQTBDO1lBQy9DLFNBQVMsRUFBRSxVQUFVO1NBQ3hCLENBQUM7SUE2Rk4sQ0FBQztJQTNGRyxJQUFJLGVBQWU7UUFDZixPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ1gsT0FBTyxrQkFBa0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDakIsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRCxJQUFJLG9CQUFvQjtRQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxD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eEU7UUFFRCxJQUFJO1lBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2pGO1FBQUMsT0FBTSxDQUFDLEVBQUU7WUFDUCxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLHlDQUF5QyxDQUFDLENBQUM7U0FDdkU7SUFDTCxDQUFDO0NBQ0o7QUFqSEQsMEJBaUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7YXNzZXJ0fSBmcm9tIFwiLi9hc3NlcnRzXCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vdHlwZXMvd3JpdGUtc3RyZWFtc1wiO1xuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHtFeGl0RXJyb3J9IGZyb20gXCIuL3R5cGVzL2V4aXQtZXJyb3JcIjtcblxuZXhwb3J0IGNsYXNzIEdpdERhdGEge1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHVzZXIgPSB7XG4gICAgICAgIEdJVExBQl9VU0VSX0xPR0lOOiBcImxvY2FsXCIsXG4gICAgICAgIEdJVExBQl9VU0VSX0VNQUlMOiBcImxvY2FsQGdpdGxhYi5jb21cIixcbiAgICAgICAgR0lUTEFCX1VTRVJfTkFNRTogXCJCb2IgTG9jYWxcIixcbiAgICAgICAgR0lUTEFCX1VTRVJfSUQ6IFwiMTAwMFwiLFxuICAgIH07XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVtb3RlID0ge1xuICAgICAgICBwb3J0OiBcIjIyXCIsXG4gICAgICAgIGhvc3Q6IFwiZ2l0bGFiLmNvbVwiLFxuICAgICAgICBncm91cDogXCJmYWxsYmFjay5ncm91cFwiLFxuICAgICAgICBwcm9qZWN0OiBcImZhbGxiYWNrLnByb2plY3RcIixcbiAgICB9O1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbW1pdCA9IHtcbiAgICAgICAgUkVGX05BTUU6IFwibWFpblwiLFxuICAgICAgICBTSEE6IFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBTSE9SVF9TSEE6IFwiMDAwMDAwMDBcIixcbiAgICB9O1xuXG4gICAgZ2V0IENJX1BST0pFQ1RfUEFUSCgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMucmVtb3RlLmdyb3VwfS8ke3RoaXMucmVtb3RlLnByb2plY3R9YDtcbiAgICB9XG5cbiAgICBnZXQgQ0lfUkVHSVNUUlkoKSB7XG4gICAgICAgIHJldHVybiBgbG9jYWwtcmVnaXN0cnkuJHt0aGlzLnJlbW90ZS5ob3N0fWA7XG4gICAgfVxuXG4gICAgZ2V0IENJX1JFR0lTVFJZX0lNQUdFKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5DSV9SRUdJU1RSWX0vJHt0aGlzLkNJX1BST0pFQ1RfUEFUSH1gO1xuICAgIH1cblxuICAgIGdldCBDSV9QUk9KRUNUX1BBVEhfU0xVRygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMucmVtb3RlLmdyb3VwLnJlcGxhY2UoL1xcLy9nLCBcIi1cIil9LSR7dGhpcy5yZW1vdGUucHJvamVjdH1gO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBpbml0KGN3ZDogc3RyaW5nLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcyk6IFByb21pc2U8R2l0RGF0YT4ge1xuICAgICAgICBjb25zdCBnaXREYXRhID0gbmV3IEdpdERhdGEoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGdpdFZlcnNpb24gPSAoYXdhaXQgVXRpbHMuc3Bhd24oXCJnaXQgLS12ZXJzaW9uXCIsIGN3ZCkpLnN0ZG91dC50cmltRW5kKCk7XG4gICAgICAgICAgICBhc3NlcnQoZ2l0VmVyc2lvbiAhPSBudWxsLCBcIldlIGRvIG5vdCB0aGluayBpdCBpcyBzYWZlIHRvIHVzZSBnaXQgd2l0aG91dCBhIHByb3BlciB2ZXJzaW9uIHN0cmluZyFcIik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyBHaXQgbm90IGF2YWlsYWJsZSB1c2luZyBmYWxsYmFja31cXG5gKTtcbiAgICAgICAgICAgIHJldHVybiBnaXREYXRhO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGdpdERhdGEuaW5pdENvbW1pdERhdGEoY3dkLCB3cml0ZVN0cmVhbXMpO1xuICAgICAgICBhd2FpdCBnaXREYXRhLmluaXRSZW1vdGVEYXRhKGN3ZCwgd3JpdGVTdHJlYW1zKTtcbiAgICAgICAgYXdhaXQgZ2l0RGF0YS5pbml0VXNlckRhdGEoY3dkLCB3cml0ZVN0cmVhbXMpO1xuICAgICAgICByZXR1cm4gZ2l0RGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRDb21taXREYXRhKGN3ZDogc3RyaW5nLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZ2l0TG9nU3Rkb3V0ID0gKGF3YWl0IFV0aWxzLnNwYXduKFwiZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JyVoICVIICVEJ1wiLCBjd2QpKS5zdGRvdXQucmVwbGFjZSgvXFxyP1xcbi9nLCBcIlwiKTtcbiAgICAgICAgICAgIGNvbnN0IGdpdExvZ01hdGNoID0gZ2l0TG9nU3Rkb3V0Lm1hdGNoKC8oPzxzaG9ydF9zaGE+XFxTKj8pICg/PHNoYT5cXFMqKSAuKkhFQUQoIC0+IHwsIHRhZzogfCwgKSg/PHJlZl9uYW1lPi4qPykoPzosfCQpLyk7XG5cbiAgICAgICAgICAgIGFzc2VydChnaXRMb2dNYXRjaD8uZ3JvdXBzICE9IG51bGwsIFwiZ2l0IGxvZyAtMSBkaWRuJ3QgcHJvdmlkZSB2YWxpZCBtYXRjaGVzXCIpO1xuXG4gICAgICAgICAgICB0aGlzLmNvbW1pdC5SRUZfTkFNRSA9IGdpdExvZ01hdGNoLmdyb3Vwcy5yZWZfbmFtZTtcbiAgICAgICAgICAgIHRoaXMuY29tbWl0LlNIQSA9IGdpdExvZ01hdGNoLmdyb3Vwcy5zaGE7XG4gICAgICAgICAgICB0aGlzLmNvbW1pdC5TSE9SVF9TSEEgPSBnaXRMb2dNYXRjaC5ncm91cHMuc2hvcnRfc2hhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEV4aXRFcnJvcikge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyAke2UubWVzc2FnZX19XFxuYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93IFVzaW5nIGZhbGxiYWNrIGdpdCBjb21taXQgZGF0YX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaW5pdFJlbW90ZURhdGEoY3dkOiBzdHJpbmcsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IHN0ZG91dDogZ2l0UmVtb3RlIH0gPSBhd2FpdCBVdGlscy5zcGF3bihcImdpdCByZW1vdGUgLXZcIiwgY3dkKTtcbiAgICAgICAgICAgIGNvbnN0IGdpdFJlbW90ZU1hdGNoID0gZ2l0UmVtb3RlLm1hdGNoKC8uKig/OlxcL1xcL3xAKSg/PGhvc3Q+W146L10qKSg6KD88cG9ydD5cXGQrKVxcL3w6fFxcLykoPzxncm91cD4uKilcXC8oPzxwcm9qZWN0Pi4qPykoPzpcXHI/XFxufFxcLmdpdCkvKTtcblxuICAgICAgICAgICAgYXNzZXJ0KGdpdFJlbW90ZU1hdGNoPy5ncm91cHMgIT0gbnVsbCwgXCJnaXQgcmVtb3RlIC12IGRpZG4ndCBwcm92aWRlIHZhbGlkIG1hdGNoZXNcIik7XG5cbiAgICAgICAgICAgIHRoaXMucmVtb3RlLnBvcnQgPSBnaXRSZW1vdGVNYXRjaC5ncm91cHMucG9ydCA/PyBcIjIyXCI7XG4gICAgICAgICAgICB0aGlzLnJlbW90ZS5ob3N0ID0gZ2l0UmVtb3RlTWF0Y2guZ3JvdXBzLmhvc3Q7XG4gICAgICAgICAgICB0aGlzLnJlbW90ZS5ncm91cCA9IGdpdFJlbW90ZU1hdGNoLmdyb3Vwcy5ncm91cDtcbiAgICAgICAgICAgIHRoaXMucmVtb3RlLnByb2plY3QgPSBnaXRSZW1vdGVNYXRjaC5ncm91cHMucHJvamVjdDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFeGl0RXJyb3IpIHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgJHtlLm1lc3NhZ2V9fVxcbmApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyBVc2luZyBmYWxsYmFjayBnaXQgcmVtb3RlIGRhdGF9XFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBpbml0VXNlckRhdGEoY3dkOiBzdHJpbmcsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnVzZXIuR0lUTEFCX1VTRVJfTkFNRSA9IChhd2FpdCBVdGlscy5zcGF3bihcImdpdCBjb25maWcgdXNlci5uYW1lXCIsIGN3ZCkpLnN0ZG91dC50cmltRW5kKCk7XG4gICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93IFVzaW5nIGZhbGxiYWNrIGdpdCB1c2VyLm5hbWV9XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZW1haWwgPSAoYXdhaXQgVXRpbHMuc3Bhd24oXCJnaXQgY29uZmlnIHVzZXIuZW1haWxcIiwgY3dkKSkuc3Rkb3V0LnRyaW1FbmQoKTtcbiAgICAgICAgICAgIHRoaXMudXNlci5HSVRMQUJfVVNFUl9FTUFJTCA9IGVtYWlsO1xuICAgICAgICAgICAgdGhpcy51c2VyLkdJVExBQl9VU0VSX0xPR0lOID0gZW1haWwucmVwbGFjZSgvQC4qLywgXCJcIik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyBVc2luZyBmYWxsYmFjayBnaXQgdXNlci5lbWFpbH1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnVzZXIuR0lUTEFCX1VTRVJfSUQgPSAoYXdhaXQgVXRpbHMuc3Bhd24oXCJpZCAtdVwiLCBjd2QpKS5zdGRvdXQudHJpbUVuZCgpO1xuICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyBVc2luZyBmYWxsYmFjayBsaW51eCB1c2VyIGlkfVxcbmApO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
package/src/handler.js CHANGED
@@ -100,13 +100,19 @@ async function handler(argv, writeStreams) {
100
100
  variables[exec.groups.key] = exec?.groups?.value;
101
101
  }
102
102
  });
103
+ if (argv["fetch-includes"] != null && argv["fetch-includes"]) {
104
+ parser = await parser_1.Parser.create({
105
+ cwd, writeStreams, pipelineIid: 0, file: argv.file, home: argv.home, extraHosts, volumes, variables, mountCache: argv.mountCache, fetchIncludes: true,
106
+ });
107
+ return new Map();
108
+ }
103
109
  if (argv.completion != null) {
104
110
  yargs.showCompletionScript();
105
111
  }
106
112
  else if (argv.preview != null) {
107
113
  const pipelineIid = await state.getPipelineIid(cwd);
108
114
  parser = await parser_1.Parser.create({
109
- cwd, writeStreams, pipelineIid, showInitMessage: false, file: argv.file, home: argv.home, extraHosts, volumes, variables, mountCache: argv.mountCache,
115
+ cwd, writeStreams, pipelineIid, file: argv.file, home: argv.home, extraHosts, volumes, variables, mountCache: argv.mountCache,
110
116
  });
111
117
  const gitlabData = parser.gitlabData;
112
118
  for (const jobName of Object.keys(gitlabData)) {
@@ -123,7 +129,7 @@ async function handler(argv, writeStreams) {
123
129
  checkFolderAndFile(cwd, argv.file);
124
130
  const pipelineIid = await state.getPipelineIid(cwd);
125
131
  parser = await parser_1.Parser.create({
126
- cwd, writeStreams, pipelineIid, showInitMessage: false, file: argv.file, home: argv.home, extraHosts, volumes, variables, mountCache: argv.mountCache,
132
+ cwd, writeStreams, pipelineIid, file: argv.file, home: argv.home, extraHosts, volumes, variables, mountCache: argv.mountCache,
127
133
  });
128
134
  commander_1.Commander.runList(parser, writeStreams, argv.listAll != null);
129
135
  }
@@ -140,7 +146,7 @@ async function handler(argv, writeStreams) {
140
146
  cwd, writeStreams, pipelineIid, file: argv.file, home: argv.home, extraHosts, volumes, shellIsolation, variables, mountCache: argv.mountCache,
141
147
  });
142
148
  await utils_1.Utils.rsyncTrackedFiles(cwd, ".docker");
143
- await commander_1.Commander.runSingleJob(parser, writeStreams, argv.job, argv.needs || false, argv.manual || [], argv.privileged || false);
149
+ await commander_1.Commander.runSingleJob(parser, writeStreams, argv.job, argv.needs || false, argv.manual || [], argv.privileged || false, cwd);
144
150
  if (argv.needs === true) {
145
151
  writeStreams.stdout((0, chalk_1.default) `{grey pipeline finished} in {grey ${(0, pretty_hrtime_1.default)(process.hrtime(time))}}\n`);
146
152
  }
@@ -156,7 +162,7 @@ async function handler(argv, writeStreams) {
156
162
  cwd, writeStreams, pipelineIid, file: argv.file, home: argv.home, extraHosts, volumes, shellIsolation, variables, mountCache: argv.mountCache,
157
163
  });
158
164
  await utils_1.Utils.rsyncTrackedFiles(cwd, ".docker");
159
- await commander_1.Commander.runPipeline(parser, writeStreams, argv.manual || [], argv.privileged || false);
165
+ await commander_1.Commander.runPipeline(parser, writeStreams, argv.manual || [], argv.privileged || false, cwd);
160
166
  writeStreams.stdout((0, chalk_1.default) `{grey pipeline finished} in {grey ${(0, pretty_hrtime_1.default)(process.hrtime(time))}}\n`);
161
167
  }
162
168
  writeStreams.flush();
@@ -166,4 +172,4 @@ async function handler(argv, writeStreams) {
166
172
  return new Map();
167
173
  }
168
174
  exports.handler = handler;
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUFnQztBQUNoQyxrREFBMEI7QUFDMUIsNkNBQStCO0FBQy9CLDZDQUErQjtBQUMvQiwyQ0FBc0M7QUFDdEMscUNBQWdDO0FBQ2hDLCtDQUFpQztBQUNqQyx1Q0FBaUM7QUFDakMsK0NBQWlDO0FBQ2pDLDBEQUFrQztBQUNsQyxrRUFBeUM7QUFFekMsK0JBQTBCO0FBQzFCLG1DQUE4QjtBQUM5QixtREFBNkM7QUFFN0MsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQVcsRUFBRSxJQUFhLEVBQUUsRUFBRTtJQUN0RCxJQUFBLGdCQUFNLEVBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcscUJBQXFCLENBQUMsQ0FBQztJQUU1RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsaUJBQWlCLENBQUM7SUFDekUsSUFBQSxnQkFBTSxFQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRyxHQUFHLHFCQUFxQixJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0FBQ2pHLENBQUMsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUN0QyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsR0FBRyw4QkFBOEIsQ0FBQztJQUMvRCxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0lBQzVDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7UUFDbkMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0tBQzFE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TSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQy9GLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEscUNBQXFDLElBQUEsdUJBQVksRUFBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzFHO0lBQ0QsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRXJCLElBQUksTUFBTSxFQUFFO1FBQ1IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0tBQ3RCO0lBRUQsT0FBTyxJQUFJLEdBQUcsRUFBZSxDQUFDO0FBQ2xDLENBQUM7QUE3R0QsMEJBNkdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgeWFtbCBmcm9tIFwianMteWFtbFwiO1xuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyB5YXJncyBmcm9tIFwieWFyZ3NcIjtcbmltcG9ydCB7Q29tbWFuZGVyfSBmcm9tIFwiLi9jb21tYW5kZXJcIjtcbmltcG9ydCB7UGFyc2VyfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCAqIGFzIHN0YXRlIGZyb20gXCIuL3N0YXRlXCI7XG5pbXBvcnQge2Fzc2VydH0gZnJvbSBcIi4vYXNzZXJ0c1wiO1xuaW1wb3J0ICogYXMgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcbmltcG9ydCBjYW1lbENhc2UgZnJvbSBcImNhbWVsY2FzZVwiO1xuaW1wb3J0IHByZXR0eUhydGltZSBmcm9tIFwicHJldHR5LWhydGltZVwiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3R5cGVzL3dyaXRlLXN0cmVhbXNcIjtcbmltcG9ydCB7Sm9ifSBmcm9tIFwiLi9qb2JcIjtcbmltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge0V4aXRFcnJvcn0gZnJvbSBcIi4vdHlwZXMvZXhpdC1lcnJvclwiO1xuXG5jb25zdCBjaGVja0ZvbGRlckFuZEZpbGUgPSAoY3dkOiBzdHJpbmcsIGZpbGU/OiBzdHJpbmcpID0+IHtcbiAgICBhc3NlcnQoZnMucGF0aEV4aXN0c1N5bmMoY3dkKSwgYCR7Y3dkfSBpcyBub3QgYSBkaXJlY3RvcnlgKTtcblxuICAgIGNvbnN0IGdpdGxhYkZpbGVQYXRoID0gZmlsZSA/IGAke2N3ZH0vJHtmaWxlfWAgOiBgJHtjd2R9Ly5naXRsYWItY2kueW1sYDtcbiAgICBhc3NlcnQoZnMuZXhpc3RzU3luYyhnaXRsYWJGaWxlUGF0aCksIGAke2N3ZH0gZG9lcyBub3QgY29udGFpbiAke2ZpbGUgPz8gXCIuZ2l0bGFiLWNpLnltbFwifWApO1xufTtcblxuY29uc3QgZ2VuZXJhdGVHaXRJZ25vcmUgPSAoY3dkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBnaXRJZ25vcmVGaWxlUGF0aCA9IGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC8uZ2l0aWdub3JlYDtcbiAgICBjb25zdCBnaXRJZ25vcmVDb250ZW50ID0gXCIqXFxuIS5naXRpZ25vcmVcXG5cIjtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZ2l0SWdub3JlRmlsZVBhdGgpKSB7XG4gICAgICAgIGZzLm91dHB1dEZpbGVTeW5jKGdpdElnbm9yZUZpbGVQYXRoLCBnaXRJZ25vcmVDb250ZW50KTtcbiAgICB9XG59O1xuXG5jb25zdCBjbGVhbnVwUmVzb3VyY2VzID0gYXN5bmMocGFyc2VyOiBQYXJzZXJ8bnVsbCkgPT4ge1xuICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGpvYiBvZiBwYXJzZXIuam9icy52YWx1ZXMoKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKGpvYi5jbGVhbnVwUmVzb3VyY2VzKCkpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihhcmd2OiBhbnksIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKTogUHJvbWlzZTxSZWFkb25seU1hcDxzdHJpbmcsIEpvYj4+IHtcbiAgICBhc3NlcnQodHlwZW9mIGFyZ3YuY3dkICE9IFwib2JqZWN0XCIsIFwiLS1jd2Qgb3B0aW9uIGNhbm5vdCBiZSBhbiBhcnJheVwiKTtcbiAgICBjb25zdCBjd2QgPSBhcmd2LmN3ZD8ucmVwbGFjZSgvXFwvJC8sIFwiXCIpID8/IHByb2Nlc3MuY3dkKCk7XG5cbiAgICBwcm9jZXNzLm9uKFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsIGFzeW5jIChlKSA9PiB7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXhpdEVycm9yKSB7XG4gICAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShjaGFsa2B7cmVkICR7ZS5tZXNzYWdlfX1cXG5gKTtcbiAgICAgICAgfSBlbHNlIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGNoYWxrYHtyZWQgJHtlLnN0YWNrID8/IGUubWVzc2FnZX19XFxuYCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoY2hhbGtge3JlZCAke2UudG9TdHJpbmcoKX19XFxuYCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgY2xlYW51cFJlc291cmNlcyhwYXJzZXIpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfSk7XG5cbiAgICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIGFzeW5jIChfOiBzdHJpbmcsIGNvZGU6IG51bWJlcikgPT4ge1xuICAgICAgICBhd2FpdCBjbGVhbnVwUmVzb3VyY2VzKHBhcnNlcik7XG4gICAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9KTtcblxuICAgIGxldCBwYXJzZXI6IFBhcnNlciB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoYCR7Y3dkfS8uZ2l0bGFiLWNpLWxvY2FsLWVudmApKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGRvdGVudi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoYCR7Y3dkfS8uZ2l0bGFiLWNpLWxvY2FsLWVudmApKTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uc3QgYXJnS2V5ID0gY2FtZWxDYXNlKGtleSk7XG4gICAgICAgICAgICBpZiAoYXJndlthcmdLZXldID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhcmd2W2FyZ0tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHZvbHVtZXMgPSB0eXBlb2YgYXJndi52b2x1bWUgPT0gXCJzdHJpbmdcIiA/IGFyZ3Yudm9sdW1lLnNwbGl0KFwiIFwiKSA6IGFyZ3Yudm9sdW1lO1xuICAgIGNvbnN0IGV4dHJhSG9zdHMgPSB0eXBlb2YgYXJndi5leHRyYUhvc3QgPT0gXCJzdHJpbmdcIiA/IGFyZ3YuZXh0cmFIb3N0LnNwbGl0KFwiIFwiKSA6IGFyZ3YuZXh0cmFIb3N0O1xuICAgIGNvbnN0IHZhcmlhYmxlUGFpcnMgPSB0eXBlb2YgYXJndi52YXJpYWJsZSA9PSBcInN0cmluZ1wiID8gYXJndi52YXJpYWJsZS5zcGxpdChcIiBcIikgOiBhcmd2LnZhcmlhYmxlO1xuICAgIGNvbnN0IHNoZWxsSXNvbGF0aW9uID0gYXJndi5zaGVsbElzb2xhdGlvbjtcblxuICAgIGNvbnN0IHZhcmlhYmxlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXG4gICAgKHZhcmlhYmxlUGFpcnMgPz8gW10pLmZvckVhY2goKHZhcmlhYmxlUGFpcjogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4ZWMgPSAvKD88a2V5Plxcdyo/KSg9KSg/PHZhbHVlPlxcdy4qKS8uZXhlYyh2YXJpYWJsZVBhaXIpO1xuICAgICAgICBpZiAoZXhlYz8uZ3JvdXBzPy5rZXkpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlc1tleGVjLmdyb3Vwcy5rZXldID0gZXhlYz8uZ3JvdXBzPy52YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGFyZ3YuY29tcGxldGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHlhcmdzLnNob3dDb21wbGV0aW9uU2NyaXB0KCk7XG4gICAgfSBlbHNlIGlmIChhcmd2LnByZXZpZXcgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwaXBlbGluZUlpZCA9IGF3YWl0IHN0YXRlLmdldFBpcGVsaW5lSWlkKGN3ZCk7XG4gICAgICAgIHBhcnNlciA9IGF3YWl0IFBhcnNlci5jcmVhdGUoe1xuICAgICAgICAgICAgY3dkLCB3cml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkLCBzaG93SW5pdE1lc3NhZ2U6IGZhbHNlLCBmaWxlOiBhcmd2LmZpbGUsIGhvbWU6IGFyZ3YuaG9tZSwgZXh0cmFIb3N0cywgdm9sdW1lcywgdmFyaWFibGVzLCBtb3VudENhY2hlOiBhcmd2Lm1vdW50Q2FjaGUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBnaXRsYWJEYXRhID0gcGFyc2VyLmdpdGxhYkRhdGE7XG4gICAgICAgIGZvciAoY29uc3Qgam9iTmFtZSBvZiBPYmplY3Qua2V5cyhnaXRsYWJEYXRhKSkge1xuICAgICAgICAgICAgaWYgKGpvYk5hbWUgPT09IFwic3RhZ2VzXCIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChKb2IuaWxsZWdhbEpvYk5hbWVzLmluY2x1ZGVzKGpvYk5hbWUpIHx8IGpvYk5hbWUuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZ2l0bGFiRGF0YVtqb2JOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGAtLS1cXG4ke3lhbWwuZHVtcChnaXRsYWJEYXRhLCB7bGluZVdpZHRoOiAxNjB9KX1gKTtcbiAgICB9IGVsc2UgaWYgKGFyZ3YubGlzdCAhPSBudWxsIHx8IGFyZ3YubGlzdEFsbCAhPSBudWxsKSB7XG4gICAgICAgIGNoZWNrRm9sZGVyQW5kRmlsZShjd2QsIGFyZ3YuZmlsZSk7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lSWlkID0gYXdhaXQgc3RhdGUuZ2V0UGlwZWxpbmVJaWQoY3dkKTtcbiAgICAgICAgcGFyc2VyID0gYXdhaXQgUGFyc2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICBjd2QsIHdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQsIHNob3dJbml0TWVzc2FnZTogZmFsc2UsIGZpbGU6IGFyZ3YuZmlsZSwgaG9tZTogYXJndi5ob21lLCBleHRyYUhvc3RzLCB2b2x1bWVzLCB2YXJpYWJsZXMsIG1vdW50Q2FjaGU6IGFyZ3YubW91bnRDYWNoZSxcbiAgICAgICAgfSk7XG4gICAgICAgIENvbW1hbmRlci5ydW5MaXN0KHBhcnNlciwgd3JpdGVTdHJlYW1zLCBhcmd2Lmxpc3RBbGwgIT0gbnVsbCk7XG4gICAgfSBlbHNlIGlmIChhcmd2LmpvYikge1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY2hlY2tGb2xkZXJBbmRGaWxlKGN3ZCwgYXJndi5maWxlKTtcbiAgICAgICAgZ2VuZXJhdGVHaXRJZ25vcmUoY3dkKTtcbiAgICAgICAgaWYgKGFyZ3YubmVlZHMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGF3YWl0IGZzLnJlbW92ZShgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvYXJ0aWZhY3RzYCk7XG4gICAgICAgICAgICBhd2FpdCBzdGF0ZS5pbmNyZW1lbnRQaXBlbGluZUlpZChjd2QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lSWlkID0gYXdhaXQgc3RhdGUuZ2V0UGlwZWxpbmVJaWQoY3dkKTtcbiAgICAgICAgcGFyc2VyID0gYXdhaXQgUGFyc2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICBjd2QsIHdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQsIGZpbGU6IGFyZ3YuZmlsZSwgaG9tZTogYXJndi5ob21lLCBleHRyYUhvc3RzLCB2b2x1bWVzLCBzaGVsbElzb2xhdGlvbiwgdmFyaWFibGVzLCBtb3VudENhY2hlOiBhcmd2Lm1vdW50Q2FjaGUsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBVdGlscy5yc3luY1RyYWNrZWRGaWxlcyhjd2QsIFwiLmRvY2tlclwiKTtcbiAgICAgICAgYXdhaXQgQ29tbWFuZGVyLnJ1blNpbmdsZUpvYihwYXJzZXIsIHdyaXRlU3RyZWFtcywgYXJndi5qb2IsIGFyZ3YubmVlZHMgfHwgZmFsc2UsIGFyZ3YubWFudWFsIHx8IFtdLCBhcmd2LnByaXZpbGVnZWQgfHwgZmFsc2UpO1xuICAgICAgICBpZiAoYXJndi5uZWVkcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7Z3JleSBwaXBlbGluZSBmaW5pc2hlZH0gaW4ge2dyZXkgJHtwcmV0dHlIcnRpbWUocHJvY2Vzcy5ocnRpbWUodGltZSkpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBjaGVja0ZvbGRlckFuZEZpbGUoY3dkLCBhcmd2LmZpbGUpO1xuICAgICAgICBnZW5lcmF0ZUdpdElnbm9yZShjd2QpO1xuICAgICAgICBhd2FpdCBmcy5yZW1vdmUoYCR7Y3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2FydGlmYWN0c2ApO1xuICAgICAgICBhd2FpdCBzdGF0ZS5pbmNyZW1lbnRQaXBlbGluZUlpZChjd2QpO1xuICAgICAgICBjb25zdCBwaXBlbGluZUlpZCA9IGF3YWl0IHN0YXRlLmdldFBpcGVsaW5lSWlkKGN3ZCk7XG4gICAgICAgIHBhcnNlciA9IGF3YWl0IFBhcnNlci5jcmVhdGUoe1xuICAgICAgICAgICAgY3dkLCB3cml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkLCBmaWxlOiBhcmd2LmZpbGUsIGhvbWU6IGFyZ3YuaG9tZSwgZXh0cmFIb3N0cywgdm9sdW1lcywgc2hlbGxJc29sYXRpb24sIHZhcmlhYmxlcywgbW91bnRDYWNoZTogYXJndi5tb3VudENhY2hlLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgVXRpbHMucnN5bmNUcmFja2VkRmlsZXMoY3dkLCBcIi5kb2NrZXJcIik7XG4gICAgICAgIGF3YWl0IENvbW1hbmRlci5ydW5QaXBlbGluZShwYXJzZXIsIHdyaXRlU3RyZWFtcywgYXJndi5tYW51YWwgfHwgW10sIGFyZ3YucHJpdmlsZWdlZCB8fCBmYWxzZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge2dyZXkgcGlwZWxpbmUgZmluaXNoZWR9IGluIHtncmV5ICR7cHJldHR5SHJ0aW1lKHByb2Nlc3MuaHJ0aW1lKHRpbWUpKX19XFxuYCk7XG4gICAgfVxuICAgIHdyaXRlU3RyZWFtcy5mbHVzaCgpO1xuXG4gICAgaWYgKHBhcnNlcikge1xuICAgICAgICByZXR1cm4gcGFyc2VyLmpvYnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBKb2I+KCk7XG59XG5cbiJdfQ==
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUFnQztBQUNoQyxrREFBMEI7QUFDMUIsNkNBQStCO0FBQy9CLDZDQUErQjtBQUMvQiwyQ0FBc0M7QUFDdEMscUNBQWdDO0FBQ2hDLCtDQUFpQztBQUNqQyx1Q0FBaUM7QUFDakMsK0NBQWlDO0FBQ2pDLDBEQUFrQztBQUNsQyxrRUFBeUM7QUFFekMsK0JBQTBCO0FBQzFCLG1DQUE4QjtBQUM5QixtREFBNkM7QUFFN0MsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQVcsRUFBRSxJQUFhLEVBQUUsRUFBRTtJQUN0RCxJQUFBLGdCQUFNLEVBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcscUJBQXFCLENBQUMsQ0FBQztJQUU1RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsaUJBQWlCLENBQUM7SUFDekUsSUFBQSxnQkFBTSxFQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRyxHQUFHLHFCQUFxQixJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0FBQ2pHLENBQUMsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUN0QyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsR0FBRyw4QkFBOEIsQ0FBQztJQUMvRCxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0lBQzVDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7UUFDbkMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0tBQzFE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QUFNLENBQUMsTUFBTSxDQUFDO1lBQ3pCLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDaEosQ0FBQyxDQUFDO1FBQ0gsTUFBTSxhQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0scUJBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLHFDQUFxQyxJQUFBLHVCQUFZLEVBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUMxRztJQUNELFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVyQixJQUFJLE1BQU0sRUFBRTtRQUNSLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztLQUN0QjtJQUVELE9BQU8sSUFBSSxHQUFHLEVBQWUsQ0FBQztBQUNsQyxDQUFDO0FBcEhELDBCQW9IQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHlhbWwgZnJvbSBcImpzLXlhbWxcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgeWFyZ3MgZnJvbSBcInlhcmdzXCI7XG5pbXBvcnQge0NvbW1hbmRlcn0gZnJvbSBcIi4vY29tbWFuZGVyXCI7XG5pbXBvcnQge1BhcnNlcn0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgKiBhcyBzdGF0ZSBmcm9tIFwiLi9zdGF0ZVwiO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gXCIuL2Fzc2VydHNcIjtcbmltcG9ydCAqIGFzIGRvdGVudiBmcm9tIFwiZG90ZW52XCI7XG5pbXBvcnQgY2FtZWxDYXNlIGZyb20gXCJjYW1lbGNhc2VcIjtcbmltcG9ydCBwcmV0dHlIcnRpbWUgZnJvbSBcInByZXR0eS1ocnRpbWVcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi90eXBlcy93cml0ZS1zdHJlYW1zXCI7XG5pbXBvcnQge0pvYn0gZnJvbSBcIi4vam9iXCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtFeGl0RXJyb3J9IGZyb20gXCIuL3R5cGVzL2V4aXQtZXJyb3JcIjtcblxuY29uc3QgY2hlY2tGb2xkZXJBbmRGaWxlID0gKGN3ZDogc3RyaW5nLCBmaWxlPzogc3RyaW5nKSA9PiB7XG4gICAgYXNzZXJ0KGZzLnBhdGhFeGlzdHNTeW5jKGN3ZCksIGAke2N3ZH0gaXMgbm90IGEgZGlyZWN0b3J5YCk7XG5cbiAgICBjb25zdCBnaXRsYWJGaWxlUGF0aCA9IGZpbGUgPyBgJHtjd2R9LyR7ZmlsZX1gIDogYCR7Y3dkfS8uZ2l0bGFiLWNpLnltbGA7XG4gICAgYXNzZXJ0KGZzLmV4aXN0c1N5bmMoZ2l0bGFiRmlsZVBhdGgpLCBgJHtjd2R9IGRvZXMgbm90IGNvbnRhaW4gJHtmaWxlID8/IFwiLmdpdGxhYi1jaS55bWxcIn1gKTtcbn07XG5cbmNvbnN0IGdlbmVyYXRlR2l0SWdub3JlID0gKGN3ZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZ2l0SWdub3JlRmlsZVBhdGggPSBgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvLmdpdGlnbm9yZWA7XG4gICAgY29uc3QgZ2l0SWdub3JlQ29udGVudCA9IFwiKlxcbiEuZ2l0aWdub3JlXFxuXCI7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGdpdElnbm9yZUZpbGVQYXRoKSkge1xuICAgICAgICBmcy5vdXRwdXRGaWxlU3luYyhnaXRJZ25vcmVGaWxlUGF0aCwgZ2l0SWdub3JlQ29udGVudCk7XG4gICAgfVxufTtcblxuY29uc3QgY2xlYW51cFJlc291cmNlcyA9IGFzeW5jKHBhcnNlcjogUGFyc2VyfG51bGwpID0+IHtcbiAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgZm9yIChjb25zdCBqb2Igb2YgcGFyc2VyLmpvYnMudmFsdWVzKCkpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChqb2IuY2xlYW51cFJlc291cmNlcygpKTtcbiAgICB9XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoYXJndjogYW55LCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcyk6IFByb21pc2U8UmVhZG9ubHlNYXA8c3RyaW5nLCBKb2I+PiB7XG4gICAgYXNzZXJ0KHR5cGVvZiBhcmd2LmN3ZCAhPSBcIm9iamVjdFwiLCBcIi0tY3dkIG9wdGlvbiBjYW5ub3QgYmUgYW4gYXJyYXlcIik7XG4gICAgY29uc3QgY3dkID0gYXJndi5jd2Q/LnJlcGxhY2UoL1xcLyQvLCBcIlwiKSA/PyBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgcHJvY2Vzcy5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCBhc3luYyAoZSkgPT4ge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEV4aXRFcnJvcikge1xuICAgICAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoY2hhbGtge3JlZCAke2UubWVzc2FnZX19XFxuYCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShjaGFsa2B7cmVkICR7ZS5zdGFjayA/PyBlLm1lc3NhZ2V9fVxcbmApO1xuICAgICAgICB9IGVsc2UgaWYgKGUpIHtcbiAgICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGNoYWxrYHtyZWQgJHtlLnRvU3RyaW5nKCl9fVxcbmApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGNsZWFudXBSZXNvdXJjZXMocGFyc2VyKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH0pO1xuXG4gICAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCBhc3luYyAoXzogc3RyaW5nLCBjb2RlOiBudW1iZXIpID0+IHtcbiAgICAgICAgYXdhaXQgY2xlYW51cFJlc291cmNlcyhwYXJzZXIpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgfSk7XG5cbiAgICBsZXQgcGFyc2VyOiBQYXJzZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChmcy5leGlzdHNTeW5jKGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC1lbnZgKSkge1xuICAgICAgICBjb25zdCBjb25maWcgPSBkb3RlbnYucGFyc2UoZnMucmVhZEZpbGVTeW5jKGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC1lbnZgKSk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ0tleSA9IGNhbWVsQ2FzZShrZXkpO1xuICAgICAgICAgICAgaWYgKGFyZ3ZbYXJnS2V5XSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYXJndlthcmdLZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB2b2x1bWVzID0gdHlwZW9mIGFyZ3Yudm9sdW1lID09IFwic3RyaW5nXCIgPyBhcmd2LnZvbHVtZS5zcGxpdChcIiBcIikgOiBhcmd2LnZvbHVtZTtcbiAgICBjb25zdCBleHRyYUhvc3RzID0gdHlwZW9mIGFyZ3YuZXh0cmFIb3N0ID09IFwic3RyaW5nXCIgPyBhcmd2LmV4dHJhSG9zdC5zcGxpdChcIiBcIikgOiBhcmd2LmV4dHJhSG9zdDtcbiAgICBjb25zdCB2YXJpYWJsZVBhaXJzID0gdHlwZW9mIGFyZ3YudmFyaWFibGUgPT0gXCJzdHJpbmdcIiA/IGFyZ3YudmFyaWFibGUuc3BsaXQoXCIgXCIpIDogYXJndi52YXJpYWJsZTtcbiAgICBjb25zdCBzaGVsbElzb2xhdGlvbiA9IGFyZ3Yuc2hlbGxJc29sYXRpb247XG5cbiAgICBjb25zdCB2YXJpYWJsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcblxuICAgICh2YXJpYWJsZVBhaXJzID8/IFtdKS5mb3JFYWNoKCh2YXJpYWJsZVBhaXI6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBleGVjID0gLyg/PGtleT5cXHcqPykoPSkoPzx2YWx1ZT5cXHcuKikvLmV4ZWModmFyaWFibGVQYWlyKTtcbiAgICAgICAgaWYgKGV4ZWM/Lmdyb3Vwcz8ua2V5KSB7XG4gICAgICAgICAgICB2YXJpYWJsZXNbZXhlYy5ncm91cHMua2V5XSA9IGV4ZWM/Lmdyb3Vwcz8udmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChhcmd2W1wiZmV0Y2gtaW5jbHVkZXNcIl0gIT0gbnVsbCAmJiBhcmd2W1wiZmV0Y2gtaW5jbHVkZXNcIl0pIHtcbiAgICAgICAgcGFyc2VyID0gYXdhaXQgUGFyc2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICBjd2QsIHdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQ6IDAsIGZpbGU6IGFyZ3YuZmlsZSwgaG9tZTogYXJndi5ob21lLCBleHRyYUhvc3RzLCB2b2x1bWVzLCB2YXJpYWJsZXMsIG1vdW50Q2FjaGU6IGFyZ3YubW91bnRDYWNoZSwgZmV0Y2hJbmNsdWRlczogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgSm9iPigpO1xuICAgIH1cblxuICAgIGlmIChhcmd2LmNvbXBsZXRpb24gIT0gbnVsbCkge1xuICAgICAgICB5YXJncy5zaG93Q29tcGxldGlvblNjcmlwdCgpO1xuICAgIH0gZWxzZSBpZiAoYXJndi5wcmV2aWV3ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVJaWQgPSBhd2FpdCBzdGF0ZS5nZXRQaXBlbGluZUlpZChjd2QpO1xuICAgICAgICBwYXJzZXIgPSBhd2FpdCBQYXJzZXIuY3JlYXRlKHtcbiAgICAgICAgICAgIGN3ZCwgd3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZCwgZmlsZTogYXJndi5maWxlLCBob21lOiBhcmd2LmhvbWUsIGV4dHJhSG9zdHMsIHZvbHVtZXMsIHZhcmlhYmxlcywgbW91bnRDYWNoZTogYXJndi5tb3VudENhY2hlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZ2l0bGFiRGF0YSA9IHBhcnNlci5naXRsYWJEYXRhO1xuICAgICAgICBmb3IgKGNvbnN0IGpvYk5hbWUgb2YgT2JqZWN0LmtleXMoZ2l0bGFiRGF0YSkpIHtcbiAgICAgICAgICAgIGlmIChqb2JOYW1lID09PSBcInN0YWdlc1wiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoSm9iLmlsbGVnYWxKb2JOYW1lcy5pbmNsdWRlcyhqb2JOYW1lKSB8fCBqb2JOYW1lLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGdpdGxhYkRhdGFbam9iTmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChgLS0tXFxuJHt5YW1sLmR1bXAoZ2l0bGFiRGF0YSwge2xpbmVXaWR0aDogMTYwfSl9YCk7XG4gICAgfSBlbHNlIGlmIChhcmd2Lmxpc3QgIT0gbnVsbCB8fCBhcmd2Lmxpc3RBbGwgIT0gbnVsbCkge1xuICAgICAgICBjaGVja0ZvbGRlckFuZEZpbGUoY3dkLCBhcmd2LmZpbGUpO1xuICAgICAgICBjb25zdCBwaXBlbGluZUlpZCA9IGF3YWl0IHN0YXRlLmdldFBpcGVsaW5lSWlkKGN3ZCk7XG4gICAgICAgIHBhcnNlciA9IGF3YWl0IFBhcnNlci5jcmVhdGUoe1xuICAgICAgICAgICAgY3dkLCB3cml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkLCBmaWxlOiBhcmd2LmZpbGUsIGhvbWU6IGFyZ3YuaG9tZSwgZXh0cmFIb3N0cywgdm9sdW1lcywgdmFyaWFibGVzLCBtb3VudENhY2hlOiBhcmd2Lm1vdW50Q2FjaGUsXG4gICAgICAgIH0pO1xuICAgICAgICBDb21tYW5kZXIucnVuTGlzdChwYXJzZXIsIHdyaXRlU3RyZWFtcywgYXJndi5saXN0QWxsICE9IG51bGwpO1xuICAgIH0gZWxzZSBpZiAoYXJndi5qb2IpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNoZWNrRm9sZGVyQW5kRmlsZShjd2QsIGFyZ3YuZmlsZSk7XG4gICAgICAgIGdlbmVyYXRlR2l0SWdub3JlKGN3ZCk7XG4gICAgICAgIGlmIChhcmd2Lm5lZWRzID09PSB0cnVlKSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5yZW1vdmUoYCR7Y3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2FydGlmYWN0c2ApO1xuICAgICAgICAgICAgYXdhaXQgc3RhdGUuaW5jcmVtZW50UGlwZWxpbmVJaWQoY3dkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwaXBlbGluZUlpZCA9IGF3YWl0IHN0YXRlLmdldFBpcGVsaW5lSWlkKGN3ZCk7XG4gICAgICAgIHBhcnNlciA9IGF3YWl0IFBhcnNlci5jcmVhdGUoe1xuICAgICAgICAgICAgY3dkLCB3cml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkLCBmaWxlOiBhcmd2LmZpbGUsIGhvbWU6IGFyZ3YuaG9tZSwgZXh0cmFIb3N0cywgdm9sdW1lcywgc2hlbGxJc29sYXRpb24sIHZhcmlhYmxlcywgbW91bnRDYWNoZTogYXJndi5tb3VudENhY2hlLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgVXRpbHMucnN5bmNUcmFja2VkRmlsZXMoY3dkLCBcIi5kb2NrZXJcIik7XG4gICAgICAgIGF3YWl0IENvbW1hbmRlci5ydW5TaW5nbGVKb2IocGFyc2VyLCB3cml0ZVN0cmVhbXMsIGFyZ3Yuam9iLCBhcmd2Lm5lZWRzIHx8IGZhbHNlLCBhcmd2Lm1hbnVhbCB8fCBbXSwgYXJndi5wcml2aWxlZ2VkIHx8IGZhbHNlLCBjd2QpO1xuICAgICAgICBpZiAoYXJndi5uZWVkcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7Z3JleSBwaXBlbGluZSBmaW5pc2hlZH0gaW4ge2dyZXkgJHtwcmV0dHlIcnRpbWUocHJvY2Vzcy5ocnRpbWUodGltZSkpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBjaGVja0ZvbGRlckFuZEZpbGUoY3dkLCBhcmd2LmZpbGUpO1xuICAgICAgICBnZW5lcmF0ZUdpdElnbm9yZShjd2QpO1xuICAgICAgICBhd2FpdCBmcy5yZW1vdmUoYCR7Y3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2FydGlmYWN0c2ApO1xuICAgICAgICBhd2FpdCBzdGF0ZS5pbmNyZW1lbnRQaXBlbGluZUlpZChjd2QpO1xuICAgICAgICBjb25zdCBwaXBlbGluZUlpZCA9IGF3YWl0IHN0YXRlLmdldFBpcGVsaW5lSWlkKGN3ZCk7XG4gICAgICAgIHBhcnNlciA9IGF3YWl0IFBhcnNlci5jcmVhdGUoe1xuICAgICAgICAgICAgY3dkLCB3cml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkLCBmaWxlOiBhcmd2LmZpbGUsIGhvbWU6IGFyZ3YuaG9tZSwgZXh0cmFIb3N0cywgdm9sdW1lcywgc2hlbGxJc29sYXRpb24sIHZhcmlhYmxlcywgbW91bnRDYWNoZTogYXJndi5tb3VudENhY2hlLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgVXRpbHMucnN5bmNUcmFja2VkRmlsZXMoY3dkLCBcIi5kb2NrZXJcIik7XG4gICAgICAgIGF3YWl0IENvbW1hbmRlci5ydW5QaXBlbGluZShwYXJzZXIsIHdyaXRlU3RyZWFtcywgYXJndi5tYW51YWwgfHwgW10sIGFyZ3YucHJpdmlsZWdlZCB8fCBmYWxzZSwgY3dkKTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7Z3JleSBwaXBlbGluZSBmaW5pc2hlZH0gaW4ge2dyZXkgJHtwcmV0dHlIcnRpbWUocHJvY2Vzcy5ocnRpbWUodGltZSkpfX1cXG5gKTtcbiAgICB9XG4gICAgd3JpdGVTdHJlYW1zLmZsdXNoKCk7XG5cbiAgICBpZiAocGFyc2VyKSB7XG4gICAgICAgIHJldHVybiBwYXJzZXIuam9icztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIEpvYj4oKTtcbn1cblxuIl19