gitlab-ci-local 4.39.0 → 4.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -58,7 +58,7 @@ npm install -g gitlab-ci-local
58
58
  Users of Debian-based distributions should prefer the [the Deb822 format][deb822], installed with:
59
59
 
60
60
  ```bash
61
- sudo wget -O /etc/apt/sources.list.d/gitlab-ci-local.sources https://gitlab-ci-local.firecow.dk/gitlab-ci-local.sources
61
+ sudo wget -O /etc/apt/sources.list.d/gitlab-ci-local.sources https://gitlab-ci-local-ppa.firecow.dk/gitlab-ci-local.sources
62
62
  sudo apt-get update
63
63
  sudo apt-get install gitlab-ci-local
64
64
  ```
@@ -68,8 +68,8 @@ sudo apt-get install gitlab-ci-local
68
68
  If your distribution does not support this, you can run these commands:
69
69
 
70
70
  ```bash
71
- curl -s "https://gitlab-ci-local.firecow.dk/pubkey.gpg" | sudo apt-key add -
72
- echo "deb https://gitlab-ci-local.firecow.dk ./" | sudo tee /etc/apt/sources.list.d/gitlab-ci-local.list
71
+ curl -s "https://gitlab-ci-local-ppa.firecow.dk/pubkey.gpg" | sudo apt-key add -
72
+ echo "deb https://gitlab-ci-local-ppa.firecow.dk ./" | sudo tee /etc/apt/sources.list.d/gitlab-ci-local.list
73
73
  sudo apt-get update
74
74
  sudo apt-get install gitlab-ci-local
75
75
  ```
@@ -135,6 +135,14 @@ echo "alias gcl='gitlab-ci-local'" >> ~/.bashrc
135
135
  gitlab-ci-local --completion >> ~/.bashrc
136
136
  ```
137
137
 
138
+ ### Logging options
139
+
140
+ ```shell
141
+ export GCL_TIMESTAMPS=true # or --timestamps: show timestamps in logs
142
+ export GCL_MAX_JOB_NAME_LENGTH=30 # or --maxJobNameLength: limit padding around job name
143
+ export GCL_QUIET=true # or --quiet: Suppress all job output
144
+ ```
145
+
138
146
  ### List Pipeline Jobs
139
147
 
140
148
  Sometimes there is the need of knowing which jobs will be added before actually executing the pipeline.
@@ -348,9 +356,17 @@ You need nodejs 18+
348
356
  ### Scripts
349
357
 
350
358
  ```bash
359
+ # Install node_modules
351
360
  npm install
361
+
362
+ # Compiled typescript to javascript
352
363
  npm run build
364
+
365
+ # Run all tests
353
366
  npm run test
367
+
368
+ # Run individual test-case
369
+ node src/index.js --cwd tests/test-cases/cache-paths-not-array/ test-job --shell-isolation
354
370
  ```
355
371
 
356
372
  ![example](./docs/images/example.png)
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.39.0",
6
+ "version": "4.40.0",
7
7
  "scripts": {
8
8
  "pkg-linux": "pkg src/index.js --public -t node18-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",
9
9
  "pkg-macos": "pkg src/index.js --public -t node18-macos-x64 -o bin/macos/gitlab-ci-local && gzip -c bin/macos/gitlab-ci-local > bin/macos.gz",
@@ -34,8 +34,8 @@
34
34
  "object-traversal": "1.0.1",
35
35
  "pretty-hrtime": "1.0.3",
36
36
  "source-map-support": "0.5.21",
37
- "split2": "4.1.0",
38
- "yargs": "17.7.1"
37
+ "split2": "4.2.0",
38
+ "yargs": "17.7.2"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/base64url": "2.0.3",
@@ -43,24 +43,23 @@
43
43
  "@types/checksum": "0.1.33",
44
44
  "@types/deep-extend": "0.6.0",
45
45
  "@types/fs-extra": "9.0.13",
46
- "@types/jest": "29.4.0",
46
+ "@types/jest": "29.5.1",
47
47
  "@types/jest-when": "3.5.2",
48
48
  "@types/js-yaml": "4.0.5",
49
49
  "@types/pretty-hrtime": "1.0.1",
50
50
  "@types/source-map-support": "0.5.6",
51
- "@types/split2": "3.2.1",
52
- "@types/yargs": "17.0.22",
53
- "@typescript-eslint/eslint-plugin": "5.54.0",
54
- "@typescript-eslint/parser": "5.54.0",
55
- "axios-mock-adapter": "1.21.2",
51
+ "@types/split2": "4.2.0",
52
+ "@types/yargs": "17.0.24",
53
+ "@typescript-eslint/eslint-plugin": "5.59.2",
54
+ "@typescript-eslint/parser": "5.59.2",
55
+ "axios-mock-adapter": "1.21.4",
56
56
  "depcheck": "1.4.3",
57
- "eslint": "8.35.0",
58
- "jest": "29.4.3",
57
+ "eslint": "8.40.0",
58
+ "jest": "29.5.0",
59
59
  "jest-when": "3.5.2",
60
- "pkg": "5.8.0",
61
- "ts-jest": "29.0.5",
62
- "ts-node": "10.9.1",
63
- "typescript": "4.9.5"
60
+ "pkg": "5.8.1",
61
+ "ts-jest": "29.1.0",
62
+ "typescript": "5.0.4"
64
63
  },
65
64
  "engines": {
66
65
  "node": ">=16.10.0"
package/src/argv.js CHANGED
@@ -85,7 +85,7 @@ class Argv {
85
85
  const variables = {};
86
86
  const pairs = typeof val == "string" ? val.split(" ") : val;
87
87
  (pairs ?? []).forEach((variablePair) => {
88
- const exec = /(?<key>\w*?)(=)(?<value>\w.*)/.exec(variablePair);
88
+ const exec = /(?<key>\w*?)(=)(?<value>.*)/.exec(variablePair);
89
89
  if (exec?.groups?.key) {
90
90
  variables[exec.groups.key] = exec?.groups?.value;
91
91
  }
@@ -117,6 +117,9 @@ class Argv {
117
117
  get privileged() {
118
118
  return this.map.get("privileged") ?? false;
119
119
  }
120
+ get ulimit() {
121
+ return this.map.get("ulimit") ?? -1;
122
+ }
120
123
  get needs() {
121
124
  return this.map.get("needs") ?? false;
122
125
  }
@@ -159,6 +162,12 @@ class Argv {
159
162
  get artifactsToSource() {
160
163
  return this.map.get("artifactsToSource") ?? true;
161
164
  }
165
+ get showTimestamps() {
166
+ return this.map.get("timestamps") ?? false;
167
+ }
168
+ get maxJobNameLength() {
169
+ return this.map.get("maxJobNameLength");
170
+ }
162
171
  }
163
172
  exports.Argv = Argv;
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJndi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFyZ3YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsNkNBQStCO0FBQy9CLCtDQUFpQztBQUNqQywyQ0FBNkI7QUFDN0IsMERBQWtDO0FBRWxDLE1BQWEsSUFBSTtJQUVMLEdBQUcsR0FBcUIsSUFBSSxHQUFHLEVBQWUsQ0FBQztJQUV2RCxZQUFhLElBQVM7UUFDbEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzVCO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLHdCQUF3QixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sWUFBWSxDQUFFLHVCQUErQixFQUFFLElBQVM7UUFDNUQsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLEVBQUU7WUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztZQUN0RSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDL0MsTUFBTSxNQUFNLEdBQUcsSUFBQSxtQkFBUyxFQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUU7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QyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNqQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSSxDQUFDO0lBQ3JELENBQUM7Q0FDSjtBQWpLRCxvQkFpS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBjYW1lbENhc2UgZnJvbSBcImNhbWVsY2FzZVwiO1xuXG5leHBvcnQgY2xhc3MgQXJndiB7XG5cbiAgICBwcml2YXRlIG1hcDogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgICBjb25zdHJ1Y3RvciAoYXJndjogYW55KSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3YpKSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluamVjdERvdGVudihgJHt0aGlzLmhvbWV9Ly5naXRsYWItY2ktbG9jYWwvLmVudmAsIGFyZ3YpO1xuICAgICAgICB0aGlzLmluamVjdERvdGVudihgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC1lbnZgLCBhcmd2KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluamVjdERvdGVudiAocG90ZW50aWFsRG90ZW52RmlsZXBhdGg6IHN0cmluZywgYXJndjogYW55KSB7XG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHBvdGVudGlhbERvdGVudkZpbGVwYXRoKSkge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gZG90ZW52LnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwb3RlbnRpYWxEb3RlbnZGaWxlcGF0aCkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ0tleSA9IGNhbWVsQ2FzZShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChhcmd2W2FyZ0tleV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5zZXQoYXJnS2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGN3ZCAoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGN3ZCA9IHRoaXMubWFwLmdldChcImN3ZFwiKSA/PyBcIi5cIjtcbiAgICAgICAgYXNzZXJ0KHR5cGVvZiBjd2QgIT0gXCJvYmplY3RcIiwgXCItLWN3ZCBvcHRpb24gY2Fubm90IGJlIGFuIGFycmF5XCIpO1xuICAgICAgICBjd2QgPSBwYXRoLm5vcm1hbGl6ZShgJHtwcm9jZXNzLmN3ZCgpfS8ke2N3ZH1gKTtcbiAgICAgICAgY3dkID0gY3dkLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcbiAgICAgICAgYXNzZXJ0KGZzLnBhdGhFeGlzdHNTeW5jKGN3ZCksIGAke2N3ZH0gaXMgbm90IGEgZGlyZWN0b3J5YCk7XG4gICAgICAgIHJldHVybiBjd2Q7XG4gICAgfVxuXG4gICAgZ2V0IGZpbGUgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJmaWxlXCIpID8/IFwiLmdpdGxhYi1jaS55bWxcIjtcbiAgICB9XG5cbiAgICBnZXQgc3RhdGVEaXIgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAodGhpcy5tYXAuZ2V0KFwic3RhdGVEaXJcIikgPz8gXCIuZ2l0bGFiLWNpLWxvY2FsXCIpLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcbiAgICB9XG5cbiAgICBnZXQgaG9tZSAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLm1hcC5nZXQoXCJob21lXCIpID8/IHByb2Nlc3MuZW52LkhPTUUgPz8gXCJcIikucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICAgIH1cblxuICAgIGdldCB2b2x1bWUgKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5tYXAuZ2V0KFwidm9sdW1lXCIpID8/IFtdO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiID8gdmFsLnNwbGl0KFwiIFwiKSA6IHZhbDtcbiAgICB9XG5cbiAgICBnZXQgZXh0cmFIb3N0ICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMubWFwLmdldChcImV4dHJhSG9zdFwiKSA/PyBbXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIiA/IHZhbC5zcGxpdChcIiBcIikgOiB2YWw7XG4gICAgfVxuXG4gICAgZ2V0IHJlbW90ZVZhcmlhYmxlcyAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcInJlbW90ZVZhcmlhYmxlc1wiKTtcbiAgICB9XG5cbiAgICBnZXQgdmFyaWFibGUgKCk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5tYXAuZ2V0KFwidmFyaWFibGVcIik7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgICAgICAgY29uc3QgcGFpcnMgPSB0eXBlb2YgdmFsID09IFwic3RyaW5nXCIgPyB2YWwuc3BsaXQoXCIgXCIpIDogdmFsO1xuICAgICAgICAocGFpcnMgPz8gW10pLmZvckVhY2goKHZhcmlhYmxlUGFpcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGVjID0gLyg/PGtleT5cXHcqPykoPSkoPzx2YWx1ZT5cXHcuKikvLmV4ZWModmFyaWFibGVQYWlyKTtcbiAgICAgICAgICAgIGlmIChleGVjPy5ncm91cHM/LmtleSkge1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlc1tleGVjLmdyb3Vwcy5rZXldID0gZXhlYz8uZ3JvdXBzPy52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZXM7XG4gICAgfVxuXG4gICAgZ2V0IHVuc2V0VmFyaWFibGVzICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJ1bnNldFZhcmlhYmxlXCIpID8/IFtdO1xuICAgIH1cblxuICAgIGdldCBtYW51YWwgKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5tYXAuZ2V0KFwibWFudWFsXCIpID8/IFtdO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiID8gdmFsLnNwbGl0KFwiIFwiKSA6IHZhbDtcbiAgICB9XG5cbiAgICBnZXQgam9iICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJqb2JcIikgPz8gW107XG4gICAgfVxuXG4gICAgZ2V0IGF1dG9Db21wbGV0aW5nICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcImF1dG9Db21wbGV0aW5nXCIpID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBjbGVhbnVwICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcImNsZWFudXBcIikgPz8gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXQgcXVpZXQgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwicXVpZXRcIikgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IHVtYXNrICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcInVtYXNrXCIpID8/IHRydWU7XG4gICAgfVxuXG4gICAgZ2V0IHByaXZpbGVnZWQgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwicHJpdmlsZWdlZFwiKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgbmVlZHMgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwibmVlZHNcIikgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IG9ubHlOZWVkcyAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJvbmx5TmVlZHNcIikgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IHN0YWdlICgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwic3RhZ2VcIik7XG4gICAgfVxuXG4gICAgZ2V0IGNvbXBsZXRpb24gKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwiY29tcGxldGlvblwiKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgbGlzdCAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJsaXN0XCIpID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBsaXN0QWxsICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcImxpc3RBbGxcIikgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGxpc3RKc29uICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcImxpc3RKc29uXCIpID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBsaXN0Q3N2ICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcImxpc3RDc3ZcIikgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGxpc3RDc3ZBbGwgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwibGlzdENzdkFsbFwiKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgcHJldmlldyAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJwcmV2aWV3XCIpID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBzaGVsbElzb2xhdGlvbiAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJzaGVsbElzb2xhdGlvblwiKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgZmV0Y2hJbmNsdWRlcyAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJmZXRjaEluY2x1ZGVzXCIpID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBtb3VudENhY2hlICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcIm1vdW50Q2FjaGVcIikgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGFydGlmYWN0c1RvU291cmNlICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcImFydGlmYWN0c1RvU291cmNlXCIpID8/IHRydWU7XG4gICAgfVxufVxuIl19
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJndi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFyZ3YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsNkNBQStCO0FBQy9CLCtDQUFpQztBQUNqQywyQ0FBNkI7QUFDN0IsMERBQWtDO0FBRWxDLE1BQWEsSUFBSTtJQUVMLEdBQUcsR0FBcUIsSUFBSSxHQUFHLEVBQWUsQ0FBQztJQUV2RCxZQUFhLElBQVM7UUFDbEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzVCO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLHdCQUF3QixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sWUFBWSxDQUFFLHVCQUErQixFQUFFLElBQVM7UUFDNUQsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLEVBQUU7WUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztZQUN0RSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDL0MsTUFBTSxNQUFNLEdBQUcsSUFBQSxtQkFBUyxFQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUU7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SSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNqQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSSxDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVDLENBQUM7Q0FDSjtBQTdLRCxvQkE2S0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBjYW1lbENhc2UgZnJvbSBcImNhbWVsY2FzZVwiO1xuXG5leHBvcnQgY2xhc3MgQXJndiB7XG5cbiAgICBwcml2YXRlIG1hcDogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgICBjb25zdHJ1Y3RvciAoYXJndjogYW55KSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3YpKSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluamVjdERvdGVudihgJHt0aGlzLmhvbWV9Ly5naXRsYWItY2ktbG9jYWwvLmVudmAsIGFyZ3YpO1xuICAgICAgICB0aGlzLmluamVjdERvdGVudihgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC1lbnZgLCBhcmd2KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluamVjdERvdGVudiAocG90ZW50aWFsRG90ZW52RmlsZXBhdGg6IHN0cmluZywgYXJndjogYW55KSB7XG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHBvdGVudGlhbERvdGVudkZpbGVwYXRoKSkge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gZG90ZW52LnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwb3RlbnRpYWxEb3RlbnZGaWxlcGF0aCkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ0tleSA9IGNhbWVsQ2FzZShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChhcmd2W2FyZ0tleV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5zZXQoYXJnS2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGN3ZCAoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGN3ZCA9IHRoaXMubWFwLmdldChcImN3ZFwiKSA/PyBcIi5cIjtcbiAgICAgICAgYXNzZXJ0KHR5cGVvZiBjd2QgIT0gXCJvYmplY3RcIiwgXCItLWN3ZCBvcHRpb24gY2Fubm90IGJlIGFuIGFycmF5XCIpO1xuICAgICAgICBjd2QgPSBwYXRoLm5vcm1hbGl6ZShgJHtwcm9jZXNzLmN3ZCgpfS8ke2N3ZH1gKTtcbiAgICAgICAgY3dkID0gY3dkLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcbiAgICAgICAgYXNzZXJ0KGZzLnBhdGhFeGlzdHNTeW5jKGN3ZCksIGAke2N3ZH0gaXMgbm90IGEgZGlyZWN0b3J5YCk7XG4gICAgICAgIHJldHVybiBjd2Q7XG4gICAgfVxuXG4gICAgZ2V0IGZpbGUgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJmaWxlXCIpID8/IFwiLmdpdGxhYi1jaS55bWxcIjtcbiAgICB9XG5cbiAgICBnZXQgc3RhdGVEaXIgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAodGhpcy5tYXAuZ2V0KFwic3RhdGVEaXJcIikgPz8gXCIuZ2l0bGFiLWNpLWxvY2FsXCIpLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcbiAgICB9XG5cbiAgICBnZXQgaG9tZSAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLm1hcC5nZXQoXCJob21lXCIpID8/IHByb2Nlc3MuZW52LkhPTUUgPz8gXCJcIikucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICAgIH1cblxuICAgIGdldCB2b2x1bWUgKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5tYXAuZ2V0KFwidm9sdW1lXCIpID8/IFtdO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiID8gdmFsLnNwbGl0KFwiIFwiKSA6IHZhbDtcbiAgICB9XG5cbiAgICBnZXQgZXh0cmFIb3N0ICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMubWFwLmdldChcImV4dHJhSG9zdFwiKSA/PyBbXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIiA/IHZhbC5zcGxpdChcIiBcIikgOiB2YWw7XG4gICAgfVxuXG4gICAgZ2V0IHJlbW90ZVZhcmlhYmxlcyAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcInJlbW90ZVZhcmlhYmxlc1wiKTtcbiAgICB9XG5cbiAgICBnZXQgdmFyaWFibGUgKCk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5tYXAuZ2V0KFwidmFyaWFibGVcIik7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgICAgICAgY29uc3QgcGFpcnMgPSB0eXBlb2YgdmFsID09IFwic3RyaW5nXCIgPyB2YWwuc3BsaXQoXCIgXCIpIDogdmFsO1xuICAgICAgICAocGFpcnMgPz8gW10pLmZvckVhY2goKHZhcmlhYmxlUGFpcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGVjID0gLyg/PGtleT5cXHcqPykoPSkoPzx2YWx1ZT4uKikvLmV4ZWModmFyaWFibGVQYWlyKTtcbiAgICAgICAgICAgIGlmIChleGVjPy5ncm91cHM/LmtleSkge1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlc1tleGVjLmdyb3Vwcy5rZXldID0gZXhlYz8uZ3JvdXBzPy52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZXM7XG4gICAgfVxuXG4gICAgZ2V0IHVuc2V0VmFyaWFibGVzICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJ1bnNldFZhcmlhYmxlXCIpID8/IFtdO1xuICAgIH1cblxuICAgIGdldCBtYW51YWwgKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5tYXAuZ2V0KFwibWFudWFsXCIpID8/IFtdO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiID8gdmFsLnNwbGl0KFwiIFwiKSA6IHZhbDtcbiAgICB9XG5cbiAgICBnZXQgam9iICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJqb2JcIikgPz8gW107XG4gICAgfVxuXG4gICAgZ2V0IGF1dG9Db21wbGV0aW5nICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcImF1dG9Db21wbGV0aW5nXCIpID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBjbGVhbnVwICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcImNsZWFudXBcIikgPz8gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXQgcXVpZXQgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwicXVpZXRcIikgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IHVtYXNrICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcInVtYXNrXCIpID8/IHRydWU7XG4gICAgfVxuXG4gICAgZ2V0IHByaXZpbGVnZWQgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwicHJpdmlsZWdlZFwiKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgdWxpbWl0ICgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwidWxpbWl0XCIpID8/IC0xO1xuICAgIH1cblxuICAgIGdldCBuZWVkcyAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJuZWVkc1wiKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgb25seU5lZWRzICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcIm9ubHlOZWVkc1wiKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgc3RhZ2UgKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJzdGFnZVwiKTtcbiAgICB9XG5cbiAgICBnZXQgY29tcGxldGlvbiAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJjb21wbGV0aW9uXCIpID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBsaXN0ICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcImxpc3RcIikgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGxpc3RBbGwgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwibGlzdEFsbFwiKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgbGlzdEpzb24gKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwibGlzdEpzb25cIikgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGxpc3RDc3YgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwibGlzdENzdlwiKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgbGlzdENzdkFsbCAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoXCJsaXN0Q3N2QWxsXCIpID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBwcmV2aWV3ICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcInByZXZpZXdcIikgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IHNoZWxsSXNvbGF0aW9uICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcInNoZWxsSXNvbGF0aW9uXCIpID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBmZXRjaEluY2x1ZGVzICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcImZldGNoSW5jbHVkZXNcIikgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IG1vdW50Q2FjaGUgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwibW91bnRDYWNoZVwiKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgYXJ0aWZhY3RzVG9Tb3VyY2UgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwiYXJ0aWZhY3RzVG9Tb3VyY2VcIikgPz8gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXQgc2hvd1RpbWVzdGFtcHMgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KFwidGltZXN0YW1wc1wiKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgbWF4Sm9iTmFtZUxlbmd0aCAoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChcIm1heEpvYk5hbWVMZW5ndGhcIik7XG4gICAgfVxufVxuIl19
package/src/commander.js CHANGED
@@ -17,7 +17,15 @@ class Commander {
17
17
  potentialStarters = potentialStarters.filter(j => j.when !== "never");
18
18
  potentialStarters = potentialStarters.filter(j => j.when !== "manual" || argv.manual.includes(j.name));
19
19
  await executor_1.Executor.runLoop(argv, jobs, stages, potentialStarters);
20
- await Commander.printReport(argv.cwd, argv.stateDir, writeStreams, jobs, stages, parser.jobNamePad);
20
+ await Commander.printReport({
21
+ cwd: argv.cwd,
22
+ showTimestamps: argv.showTimestamps,
23
+ stateDir: argv.stateDir,
24
+ writeStreams: writeStreams,
25
+ jobs: jobs,
26
+ stages: stages,
27
+ jobNamePad: parser.jobNamePad,
28
+ });
21
29
  }
22
30
  static async runJobsInStage(argv, parser, writeStreams) {
23
31
  const jobs = parser.jobs.filter(j => j.stage === argv.stage);
@@ -27,7 +35,15 @@ class Commander {
27
35
  potentialStarters = potentialStarters.filter(j => j.when !== "manual" || argv.manual.includes(j.name));
28
36
  potentialStarters = potentialStarters.filter(j => j.stage === argv.stage);
29
37
  await executor_1.Executor.runLoop(argv, jobs, stages, potentialStarters);
30
- await Commander.printReport(argv.cwd, argv.stateDir, writeStreams, jobs, stages, parser.jobNamePad);
38
+ await Commander.printReport({
39
+ cwd: argv.cwd,
40
+ showTimestamps: argv.showTimestamps,
41
+ stateDir: argv.stateDir,
42
+ writeStreams: writeStreams,
43
+ jobs: jobs,
44
+ stages: stages,
45
+ jobNamePad: parser.jobNamePad,
46
+ });
31
47
  }
32
48
  static async runJobs(argv, parser, writeStreams) {
33
49
  const needs = argv.needs || argv.onlyNeeds;
@@ -55,10 +71,19 @@ class Commander {
55
71
  });
56
72
  }
57
73
  await executor_1.Executor.runLoop(argv, Array.from(jobSet), stages, potentialStarters);
58
- await Commander.printReport(argv.cwd, argv.stateDir, writeStreams, jobs, stages, parser.jobNamePad);
74
+ await Commander.printReport({
75
+ cwd: argv.cwd,
76
+ showTimestamps: argv.showTimestamps,
77
+ stateDir: argv.stateDir,
78
+ writeStreams: writeStreams,
79
+ jobs: jobs,
80
+ stages: stages,
81
+ jobNamePad: parser.jobNamePad,
82
+ });
59
83
  }
60
- static async printReport(cwd, stateDir, writeStreams, jobs, stages, jobNamePad) {
84
+ static async printReport({ cwd, stateDir, showTimestamps, writeStreams, jobs, stages, jobNamePad }) {
61
85
  writeStreams.stdout("\n");
86
+ const renderDuration = (duration) => showTimestamps ? ` [${duration.padStart(7)}]` : "";
62
87
  const preScripts = {
63
88
  successful: [],
64
89
  failed: [],
@@ -88,21 +113,21 @@ class Commander {
88
113
  }
89
114
  if (preScripts.successful.length !== 0) {
90
115
  preScripts.successful.sort((a, b) => stages.indexOf(a.stage) - stages.indexOf(b.stage));
91
- preScripts.successful.forEach((job) => {
92
- const namePad = job.name.padEnd(jobNamePad);
93
- writeStreams.stdout((0, chalk_1.default) `{black.bgGreenBright PASS } {blueBright ${namePad}}`);
94
- if (job.coveragePercent) {
95
- writeStreams.stdout((0, chalk_1.default) ` ${job.coveragePercent}% {grey coverage}`);
116
+ preScripts.successful.forEach(({ coveragePercent, name, prettyDuration }) => {
117
+ const namePad = name.padEnd(jobNamePad);
118
+ writeStreams.stdout((0, chalk_1.default) `{black.bgGreenBright PASS }${renderDuration(prettyDuration)} {blueBright ${namePad}}`);
119
+ if (coveragePercent) {
120
+ writeStreams.stdout((0, chalk_1.default) ` ${coveragePercent}% {grey coverage}`);
96
121
  }
97
122
  writeStreams.stdout("\n");
98
123
  });
99
124
  }
100
125
  if (preScripts.warned.length !== 0) {
101
126
  preScripts.warned.sort((a, b) => stages.indexOf(a.stage) - stages.indexOf(b.stage));
102
- for (const { name } of preScripts.warned) {
127
+ for (const { name, prettyDuration } of preScripts.warned) {
103
128
  const namePad = name.padEnd(jobNamePad);
104
129
  const safeName = utils_1.Utils.safeDockerString(name);
105
- writeStreams.stdout((0, chalk_1.default) `{black.bgYellowBright WARN } {blueBright ${namePad}} pre_script\n`);
130
+ writeStreams.stdout((0, chalk_1.default) `{black.bgYellowBright WARN }${renderDuration(prettyDuration)} {blueBright ${namePad}} pre_script\n`);
106
131
  const outputLog = await fs_extra_1.default.readFile(`${cwd}/${stateDir}/output/${safeName}.log`, "utf8");
107
132
  for (const line of outputLog.split(/\r?\n/).filter(j => !j.includes("[32m$ ")).filter(j => j !== "").slice(-3)) {
108
133
  writeStreams.stdout((0, chalk_1.default) ` {yellow >} ${line}\n`);
@@ -111,17 +136,17 @@ class Commander {
111
136
  }
112
137
  if (afterScripts.warned.length !== 0) {
113
138
  afterScripts.warned.sort((a, b) => stages.indexOf(a.stage) - stages.indexOf(b.stage));
114
- afterScripts.warned.forEach(({ name }) => {
139
+ afterScripts.warned.forEach(({ name, prettyDuration }) => {
115
140
  const namePad = name.padEnd(jobNamePad);
116
- writeStreams.stdout((0, chalk_1.default) `{black.bgYellowBright WARN } {blueBright ${namePad}} after_script\n`);
141
+ writeStreams.stdout((0, chalk_1.default) `{black.bgYellowBright WARN }${renderDuration(prettyDuration)} {blueBright ${namePad}} after_script\n`);
117
142
  });
118
143
  }
119
144
  if (preScripts.failed.length !== 0) {
120
145
  preScripts.failed.sort((a, b) => stages.indexOf(a.stage) - stages.indexOf(b.stage));
121
- for (const { name } of preScripts.failed) {
146
+ for (const { name, prettyDuration } of preScripts.failed) {
122
147
  const namePad = name.padEnd(jobNamePad);
123
148
  const safeName = utils_1.Utils.safeDockerString(name);
124
- writeStreams.stdout((0, chalk_1.default) `{black.bgRed FAIL } {blueBright ${namePad}}\n`);
149
+ writeStreams.stdout((0, chalk_1.default) `{black.bgRed FAIL }${renderDuration(prettyDuration)} {blueBright ${namePad}}\n`);
125
150
  const outputLog = await fs_extra_1.default.readFile(`${cwd}/${stateDir}/output/${safeName}.log`, "utf8");
126
151
  for (const line of outputLog.split(/\r?\n/).filter(j => !j.includes("[32m$ ")).filter(j => j !== "").slice(-3)) {
127
152
  writeStreams.stdout((0, chalk_1.default) ` {red >} ${line}\n`);
@@ -133,8 +158,8 @@ class Commander {
133
158
  if (e == null) {
134
159
  continue;
135
160
  }
136
- const name = utils_1.Utils.expandText(e.name, job.expandedVariables);
137
- const url = utils_1.Utils.expandText(e.url, job.expandedVariables);
161
+ const name = e.name;
162
+ const url = e.url;
138
163
  writeStreams.stdout((0, chalk_1.default) `{blueBright ${job.name}} environment: \{ name: {bold ${name}}`);
139
164
  if (url != null) {
140
165
  writeStreams.stdout((0, chalk_1.default) `, url: {bold ${url}}`);
@@ -162,12 +187,12 @@ class Commander {
162
187
  writeStreams.stdout((0, chalk_1.default) `{grey ${"stage".padEnd(stagePadEnd)} ${"when".padEnd(whenPadEnd)}} `);
163
188
  writeStreams.stdout((0, chalk_1.default) `{grey allow_failure needs}\n`);
164
189
  const renderLine = (job) => {
165
- const needs = job.needs;
190
+ const needs = job.needs?.filter(n => !n.project && !n.pipeline).map(n => n.job).join(",");
166
191
  const allowFailure = job.allowFailure ? "true " : "false";
167
192
  let jobLine = (0, chalk_1.default) `{blueBright ${job.name.padEnd(jobNamePad)}} ${job.description.padEnd(descriptionPadEnd)} `;
168
193
  jobLine += (0, chalk_1.default) `{yellow ${job.stage.padEnd(stagePadEnd)}} ${job.when.padEnd(whenPadEnd)} ${allowFailure.padEnd(11)}`;
169
194
  if (needs) {
170
- jobLine += (0, chalk_1.default) ` [{blueBright ${needs.map(n => n.job).join(",")}}]`;
195
+ jobLine += (0, chalk_1.default) ` [{blueBright ${needs}}]`;
171
196
  }
172
197
  writeStreams.stdout(`${jobLine}\n`);
173
198
  };
@@ -183,7 +208,7 @@ class Commander {
183
208
  stage: job.stage,
184
209
  when: job.when,
185
210
  allow_failure: job.allowFailure,
186
- needs: job.needs,
211
+ needs: job.needs?.filter(n => !n.project && !n.pipeline),
187
212
  });
188
213
  });
189
214
  writeStreams.stdout(`${JSON.stringify(json, null, 2)}\n`);
@@ -199,10 +224,10 @@ class Commander {
199
224
  }
200
225
  writeStreams.stdout("name;description;stage;when;allowFailure;needs\n");
201
226
  jobs.forEach((job) => {
202
- const needs = job.needs || [];
203
- writeStreams.stdout(`${job.name};"${job.description}";${job.stage};${job.when};${job.allowFailure};[${needs.map(n => n.job).join(",")}]\n`);
227
+ const needs = job.needs?.filter(n => !n.project && !n.pipeline).map(n => n.job).join(",") ?? [];
228
+ writeStreams.stdout(`${job.name};"${job.description}";${job.stage};${job.when};${job.allowFailure};[${needs}]\n`);
204
229
  });
205
230
  }
206
231
  }
207
232
  exports.Commander = Commander;
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tbWFuZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUEwQjtBQUcxQixtQ0FBOEI7QUFFOUIseUNBQW9DO0FBQ3BDLHdEQUEwQjtBQUUxQixtQ0FBc0M7QUFFdEMsTUFBYSxTQUFTO0lBRWxCLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFFLElBQVUsRUFBRSxNQUFjLEVBQUUsWUFBMEI7UUFDNUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRTdCLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDdEUsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkcsTUFBTSxtQkFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlELE1BQU0sU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBRSxJQUFVLEVBQUUsTUFBYyxFQUFFLFlBQTBCO1FBQy9FLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUU3QixJQUFJLGlCQUFpQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMzQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQ3RFLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFFLE1BQU0sbUJBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUM5RCxNQUFNLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUUsSUFBVSxFQUFFLE1BQWMsRUFBRSxZQUEwQjtRQUN4RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFN0IsSUFBSSxpQkFBaUIsR0FBVSxFQUFFLENBQUM7UUFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQU8sQ0FBQztRQUN0RCxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDO1lBQ3pELEtBQUssTUFBTSxDQUFDLElBQUksUUFBUSxFQUFFO2dCQUN0QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNkLElBQUksS0FBSyxFQUFFO29CQUNQLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxtQkFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUN6RztnQkFDRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0I7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNoQyxNQUFNLElBQUksdUJBQWMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFBLGVBQUssRUFBQSxlQUFlLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFDLENBQUMsQ0FBQztTQUNwRztRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xCLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELE1BQU0sbUJBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDNUUsTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFFLEdBQVcsRUFBRSxRQUFnQixFQUFFLFlBQTBCLEVBQUUsSUFBd0IsRUFBRSxNQUF5QixFQUFFLFVBQWtCO1FBRXhKLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsTUFBTSxVQUFVLEdBQXNEO1lBQ2xFLFVBQVUsRUFBRSxFQUFFO1lBQ2QsTUFBTSxFQUFFLEVBQUU7WUFDVixNQUFNLEVBQUUsRUFBRTtTQUNiLENBQUM7UUFDRixNQUFNLFlBQVksR0FBb0I7WUFDbEMsTUFBTSxFQUFFLEVBQUU7U0FDYixDQUFDO1FBRUYsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxvQkFBb0IsS0FBSyxDQUFDLEVBQUU7Z0JBQy9DLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2pDO1NBQ0o7UUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZCxTQUFTO2FBQ1o7WUFFRCxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsS0FBSyxDQUFDLEVBQUU7Z0JBQzlCLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25DO2lCQUFNLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRTtnQkFDekIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDL0I7aUJBQU07Z0JBQ0gsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDL0I7U0FDSjtRQUVELElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN4RixVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDNUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSw0Q0FBNEMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDakYsSUFBSSxHQUFHLENBQUMsZUFBZSxFQUFFO29CQUNyQixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLElBQUksR0FBRyxDQUFDLGVBQWUsbUJBQW1CLENBQUMsQ0FBQztpQkFDeEU7Z0JBQ0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDaEMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLEtBQUssTUFBTSxFQUFDLElBQUksRUFBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sUUFBUSxHQUFHLGFBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSw2Q0FBNkMsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNoRyxNQUFNLFNBQVMsR0FBRyxNQUFNLGtCQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsV0FBVyxRQUFRLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDekYsS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDNUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsQ0FBQztpQkFDdEQ7YUFDSjtTQUNKO1FBRUQsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFFO2dCQUNuQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN4QyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLDZDQUE2QyxPQUFPLG1CQUFtQixDQUFDLENBQUM7WUFDdEcsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNwRixLQUFLLE1BQU0sRUFBQyxJQUFJLEVBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLFFBQVEsR0FBRyxhQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsb0NBQW9DLE9BQU8sS0FBSyxDQUFDLENBQUM7Z0JBQzNFLE1BQU0sU0FBUyxHQUFHLE1BQU0sa0JBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxXQUFXLFFBQVEsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN6RixLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUM1RyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLGFBQWEsSUFBSSxJQUFJLENBQUMsQ0FBQztpQkFDbkQ7YUFDSjtTQUNKO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFO1lBQ3JDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUNYLFNBQVM7YUFDWjtZQUNELE1BQU0sSUFBSSxHQUFHLGFBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM3RCxNQUFNLEdBQUcsR0FBRyxhQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDM0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxlQUFlLEdBQUcsQ0FBQyxJQUFJLGlDQUFpQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQzFGLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtnQkFDYixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxDQUFDO2FBQ3BEO1lBQ0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQjtJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFFLE1BQWMsRUFBRSxZQUEwQixFQUFFLE9BQWdCO1FBQ3hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVwRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUVuRSxJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFFekYsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUVyQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1NBQy9DO1FBRUQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxTQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssYUFBYSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLFNBQVMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLCtCQUErQixDQUFDLENBQUM7UUFFMUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUM1QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3hCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQzFELElBQUksT0FBTyxHQUFHLElBQUEsZUFBSyxFQUFBLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQ2pILE9BQU8sSUFBSSxJQUFBLGVBQUssRUFBQSxXQUFXLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4SCxJQUFJLEtBQUssRUFBRTtnQkFDUCxPQUFPLElBQUksSUFBQSxlQUFLLEVBQUEsb0JBQW9CLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDM0U7WUFDRCxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBRSxNQUFjLEVBQUUsWUFBMEI7UUFDdEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2QyxNQUFNLElBQUksR0FBVSxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ04sSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO2dCQUNkLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVztnQkFDNUIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dCQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7Z0JBQ2QsYUFBYSxFQUFFLEdBQUcsQ0FBQyxZQUFZO2dCQUMvQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7YUFDbkIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFSCxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBRSxNQUFjLEVBQUUsWUFBMEIsRUFBRSxHQUFZO1FBQ25FLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUM7U0FDL0M7UUFFRCxZQUFZLENBQUMsTUFBTSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBRTlCLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxXQUFXLEtBQUssR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hKLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUVKO0FBcE9ELDhCQW9PQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7Sm9ifSBmcm9tIFwiLi9qb2JcIjtcbmltcG9ydCB7UGFyc2VyfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vd3JpdGUtc3RyZWFtc1wiO1xuaW1wb3J0IHtFeGVjdXRvcn0gZnJvbSBcIi4vZXhlY3V0b3JcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCB7QXJndn0gZnJvbSBcIi4vYXJndlwiO1xuaW1wb3J0IHtBc3NlcnRpb25FcnJvcn0gZnJvbSBcImFzc2VydFwiO1xuXG5leHBvcnQgY2xhc3MgQ29tbWFuZGVyIHtcblxuICAgIHN0YXRpYyBhc3luYyBydW5QaXBlbGluZSAoYXJndjogQXJndiwgcGFyc2VyOiBQYXJzZXIsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGNvbnN0IGpvYnMgPSBwYXJzZXIuam9icztcbiAgICAgICAgY29uc3Qgc3RhZ2VzID0gcGFyc2VyLnN0YWdlcztcblxuICAgICAgICBsZXQgcG90ZW50aWFsU3RhcnRlcnMgPSBbLi4uam9icy52YWx1ZXMoKV07XG4gICAgICAgIHBvdGVudGlhbFN0YXJ0ZXJzID0gcG90ZW50aWFsU3RhcnRlcnMuZmlsdGVyKGogPT4gai53aGVuICE9PSBcIm5ldmVyXCIpO1xuICAgICAgICBwb3RlbnRpYWxTdGFydGVycyA9IHBvdGVudGlhbFN0YXJ0ZXJzLmZpbHRlcihqID0+IGoud2hlbiAhPT0gXCJtYW51YWxcIiB8fCBhcmd2Lm1hbnVhbC5pbmNsdWRlcyhqLm5hbWUpKTtcbiAgICAgICAgYXdhaXQgRXhlY3V0b3IucnVuTG9vcChhcmd2LCBqb2JzLCBzdGFnZXMsIHBvdGVudGlhbFN0YXJ0ZXJzKTtcbiAgICAgICAgYXdhaXQgQ29tbWFuZGVyLnByaW50UmVwb3J0KGFyZ3YuY3dkLCBhcmd2LnN0YXRlRGlyLCB3cml0ZVN0cmVhbXMsIGpvYnMsIHN0YWdlcywgcGFyc2VyLmpvYk5hbWVQYWQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBydW5Kb2JzSW5TdGFnZSAoYXJndjogQXJndiwgcGFyc2VyOiBQYXJzZXIsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGNvbnN0IGpvYnMgPSBwYXJzZXIuam9icy5maWx0ZXIoaiA9PiBqLnN0YWdlID09PSBhcmd2LnN0YWdlKTtcbiAgICAgICAgY29uc3Qgc3RhZ2VzID0gcGFyc2VyLnN0YWdlcztcblxuICAgICAgICBsZXQgcG90ZW50aWFsU3RhcnRlcnMgPSBbLi4uam9icy52YWx1ZXMoKV07XG4gICAgICAgIHBvdGVudGlhbFN0YXJ0ZXJzID0gcG90ZW50aWFsU3RhcnRlcnMuZmlsdGVyKGogPT4gai53aGVuICE9PSBcIm5ldmVyXCIpO1xuICAgICAgICBwb3RlbnRpYWxTdGFydGVycyA9IHBvdGVudGlhbFN0YXJ0ZXJzLmZpbHRlcihqID0+IGoud2hlbiAhPT0gXCJtYW51YWxcIiB8fCBhcmd2Lm1hbnVhbC5pbmNsdWRlcyhqLm5hbWUpKTtcbiAgICAgICAgcG90ZW50aWFsU3RhcnRlcnMgPSBwb3RlbnRpYWxTdGFydGVycy5maWx0ZXIoaiA9PiBqLnN0YWdlID09PSBhcmd2LnN0YWdlKTtcbiAgICAgICAgYXdhaXQgRXhlY3V0b3IucnVuTG9vcChhcmd2LCBqb2JzLCBzdGFnZXMsIHBvdGVudGlhbFN0YXJ0ZXJzKTtcbiAgICAgICAgYXdhaXQgQ29tbWFuZGVyLnByaW50UmVwb3J0KGFyZ3YuY3dkLCBhcmd2LnN0YXRlRGlyLCB3cml0ZVN0cmVhbXMsIGpvYnMsIHN0YWdlcywgcGFyc2VyLmpvYk5hbWVQYWQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBydW5Kb2JzIChhcmd2OiBBcmd2LCBwYXJzZXI6IFBhcnNlciwgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgY29uc3QgbmVlZHMgPSBhcmd2Lm5lZWRzIHx8IGFyZ3Yub25seU5lZWRzO1xuICAgICAgICBjb25zdCBqb2JBcmdzID0gYXJndi5qb2I7XG4gICAgICAgIGNvbnN0IGpvYnMgPSBwYXJzZXIuam9icztcbiAgICAgICAgY29uc3Qgc3RhZ2VzID0gcGFyc2VyLnN0YWdlcztcblxuICAgICAgICBsZXQgcG90ZW50aWFsU3RhcnRlcnM6IEpvYltdID0gW107XG4gICAgICAgIGNvbnN0IGpvYlNldCA9IG5lZWRzID8gbmV3IFNldChqb2JzKSA6IG5ldyBTZXQ8Sm9iPigpO1xuICAgICAgICBqb2JBcmdzLmZvckVhY2goam9iTmFtZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXNlSm9icyA9IGpvYnMuZmlsdGVyKGogPT4gai5iYXNlTmFtZSA9PSBqb2JOYW1lKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYiBvZiBiYXNlSm9icykge1xuICAgICAgICAgICAgICAgIGpvYlNldC5hZGQoYik7XG4gICAgICAgICAgICAgICAgaWYgKG5lZWRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbFN0YXJ0ZXJzID0gcG90ZW50aWFsU3RhcnRlcnMuY29uY2F0KEV4ZWN1dG9yLmdldFBhc3RUb1dhaXRGb3Ioam9icywgc3RhZ2VzLCBiLCBhcmd2Lm1hbnVhbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxTdGFydGVycy5wdXNoKGIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHBvdGVudGlhbFN0YXJ0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBjaGFsa2B7Ymx1ZUJyaWdodCAke2pvYkFyZ3Muam9pbihcIixcIil9fSBjb3VsZCBub3QgYmUgZm91bmRgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJndi5vbmx5TmVlZHMpIHtcbiAgICAgICAgICAgIGpvYkFyZ3MuZm9yRWFjaCgoaikgPT4ge1xuICAgICAgICAgICAgICAgIHBvdGVudGlhbFN0YXJ0ZXJzID0gcG90ZW50aWFsU3RhcnRlcnMuZmlsdGVyKHAgPT4gcC5uYW1lICE9PSBqKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgRXhlY3V0b3IucnVuTG9vcChhcmd2LCBBcnJheS5mcm9tKGpvYlNldCksIHN0YWdlcywgcG90ZW50aWFsU3RhcnRlcnMpO1xuICAgICAgICBhd2FpdCBDb21tYW5kZXIucHJpbnRSZXBvcnQoYXJndi5jd2QsIGFyZ3Yuc3RhdGVEaXIsIHdyaXRlU3RyZWFtcywgam9icywgc3RhZ2VzLCBwYXJzZXIuam9iTmFtZVBhZCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIHByaW50UmVwb3J0IChjd2Q6IHN0cmluZywgc3RhdGVEaXI6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPiwgc3RhZ2VzOiByZWFkb25seSBzdHJpbmdbXSwgam9iTmFtZVBhZDogbnVtYmVyKSB7XG5cbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChcIlxcblwiKTtcblxuICAgICAgICBjb25zdCBwcmVTY3JpcHRzOiB7c3VjY2Vzc2Z1bDogSm9iW107IGZhaWxlZDogSm9iW107IHdhcm5lZDogSm9iW119ID0ge1xuICAgICAgICAgICAgc3VjY2Vzc2Z1bDogW10sXG4gICAgICAgICAgICBmYWlsZWQ6IFtdLFxuICAgICAgICAgICAgd2FybmVkOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWZ0ZXJTY3JpcHRzOiB7d2FybmVkOiBKb2JbXX0gPSB7XG4gICAgICAgICAgICB3YXJuZWQ6IFtdLFxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIGpvYnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGlmIChqb2Iuc3RhcnRlZCAmJiBqb2IuYWZ0ZXJTY3JpcHRzRXhpdENvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICBhZnRlclNjcmlwdHMud2FybmVkLnB1c2goam9iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIGpvYnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGlmICgham9iLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGpvYi5wcmVTY3JpcHRzRXhpdENvZGUgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwcmVTY3JpcHRzLnN1Y2Nlc3NmdWwucHVzaChqb2IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChqb2IuYWxsb3dGYWlsdXJlKSB7XG4gICAgICAgICAgICAgICAgcHJlU2NyaXB0cy53YXJuZWQucHVzaChqb2IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcmVTY3JpcHRzLmZhaWxlZC5wdXNoKGpvYik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJlU2NyaXB0cy5zdWNjZXNzZnVsLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgcHJlU2NyaXB0cy5zdWNjZXNzZnVsLnNvcnQoKGEsIGIpID0+IHN0YWdlcy5pbmRleE9mKGEuc3RhZ2UpIC0gc3RhZ2VzLmluZGV4T2YoYi5zdGFnZSkpO1xuICAgICAgICAgICAgcHJlU2NyaXB0cy5zdWNjZXNzZnVsLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVQYWQgPSBqb2IubmFtZS5wYWRFbmQoam9iTmFtZVBhZCk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7YmxhY2suYmdHcmVlbkJyaWdodCAgUEFTUyB9IHtibHVlQnJpZ2h0ICR7bmFtZVBhZH19YCk7XG4gICAgICAgICAgICAgICAgaWYgKGpvYi5jb3ZlcmFnZVBlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2AgJHtqb2IuY292ZXJhZ2VQZXJjZW50fSUge2dyZXkgY292ZXJhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoXCJcXG5cIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmVTY3JpcHRzLndhcm5lZC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHByZVNjcmlwdHMud2FybmVkLnNvcnQoKGEsIGIpID0+IHN0YWdlcy5pbmRleE9mKGEuc3RhZ2UpIC0gc3RhZ2VzLmluZGV4T2YoYi5zdGFnZSkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB7bmFtZX0gb2YgcHJlU2NyaXB0cy53YXJuZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lUGFkID0gbmFtZS5wYWRFbmQoam9iTmFtZVBhZCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2FmZU5hbWUgPSBVdGlscy5zYWZlRG9ja2VyU3RyaW5nKG5hbWUpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0ge2JsdWVCcmlnaHQgJHtuYW1lUGFkfX0gIHByZV9zY3JpcHRcXG5gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRMb2cgPSBhd2FpdCBmcy5yZWFkRmlsZShgJHtjd2R9LyR7c3RhdGVEaXJ9L291dHB1dC8ke3NhZmVOYW1lfS5sb2dgLCBcInV0ZjhcIik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG91dHB1dExvZy5zcGxpdCgvXFxyP1xcbi8pLmZpbHRlcihqID0+ICFqLmluY2x1ZGVzKFwiWzMybSQgXCIpKS5maWx0ZXIoaiA9PiBqICE9PSBcIlwiKS5zbGljZSgtMykpIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2AgIHt5ZWxsb3cgPn0gJHtsaW5lfVxcbmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZnRlclNjcmlwdHMud2FybmVkLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgYWZ0ZXJTY3JpcHRzLndhcm5lZC5zb3J0KChhLCBiKSA9PiBzdGFnZXMuaW5kZXhPZihhLnN0YWdlKSAtIHN0YWdlcy5pbmRleE9mKGIuc3RhZ2UpKTtcbiAgICAgICAgICAgIGFmdGVyU2NyaXB0cy53YXJuZWQuZm9yRWFjaCgoe25hbWV9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZVBhZCA9IG5hbWUucGFkRW5kKGpvYk5hbWVQYWQpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0ge2JsdWVCcmlnaHQgJHtuYW1lUGFkfX0gIGFmdGVyX3NjcmlwdFxcbmApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJlU2NyaXB0cy5mYWlsZWQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBwcmVTY3JpcHRzLmZhaWxlZC5zb3J0KChhLCBiKSA9PiBzdGFnZXMuaW5kZXhPZihhLnN0YWdlKSAtIHN0YWdlcy5pbmRleE9mKGIuc3RhZ2UpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qge25hbWV9IG9mIHByZVNjcmlwdHMuZmFpbGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZVBhZCA9IG5hbWUucGFkRW5kKGpvYk5hbWVQYWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNhZmVOYW1lID0gVXRpbHMuc2FmZURvY2tlclN0cmluZyhuYW1lKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYHtibGFjay5iZ1JlZCAgRkFJTCB9IHtibHVlQnJpZ2h0ICR7bmFtZVBhZH19XFxuYCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0TG9nID0gYXdhaXQgZnMucmVhZEZpbGUoYCR7Y3dkfS8ke3N0YXRlRGlyfS9vdXRwdXQvJHtzYWZlTmFtZX0ubG9nYCwgXCJ1dGY4XCIpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBvdXRwdXRMb2cuc3BsaXQoL1xccj9cXG4vKS5maWx0ZXIoaiA9PiAhai5pbmNsdWRlcyhcIlszMm0kIFwiKSkuZmlsdGVyKGogPT4gaiAhPT0gXCJcIikuc2xpY2UoLTMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgICB7cmVkID59ICR7bGluZX1cXG5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBwcmVTY3JpcHRzLnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBqb2IuZW52aXJvbm1lbnQ7XG4gICAgICAgICAgICBpZiAoZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gVXRpbHMuZXhwYW5kVGV4dChlLm5hbWUsIGpvYi5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBVdGlscy5leHBhbmRUZXh0KGUudXJsLCBqb2IuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX0gZW52aXJvbm1lbnQ6IFxceyBuYW1lOiB7Ym9sZCAke25hbWV9fWApO1xuICAgICAgICAgICAgaWYgKHVybCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2AsIHVybDoge2JvbGQgJHt1cmx9fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChcIiB9XFxuXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHJ1bkxpc3QgKHBhcnNlcjogUGFyc2VyLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgbGlzdEFsbDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBzdGFnZXMgPSBwYXJzZXIuc3RhZ2VzO1xuICAgICAgICBsZXQgam9icyA9IFsuLi5wYXJzZXIuam9icy52YWx1ZXMoKV07XG4gICAgICAgIGpvYnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YWdlcy5pbmRleE9mKGEuc3RhZ2UpIC0gc3RhZ2VzLmluZGV4T2YoYi5zdGFnZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCB3aGVuUGFkRW5kID0gNDtcbiAgICAgICAgam9icy5mb3JFYWNoKGogPT4gd2hlblBhZEVuZCA9IE1hdGgubWF4KGoud2hlbi5sZW5ndGgsIHdoZW5QYWRFbmQpKTtcblxuICAgICAgICBsZXQgc3RhZ2VQYWRFbmQgPSA1O1xuICAgICAgICBzdGFnZXMuZm9yRWFjaChzID0+IHN0YWdlUGFkRW5kID0gTWF0aC5tYXgocy5sZW5ndGgsIHN0YWdlUGFkRW5kKSk7XG5cbiAgICAgICAgbGV0IGRlc2NyaXB0aW9uUGFkRW5kID0gMTE7XG4gICAgICAgIGpvYnMuZm9yRWFjaChqID0+IGRlc2NyaXB0aW9uUGFkRW5kID0gTWF0aC5tYXgoai5kZXNjcmlwdGlvbi5sZW5ndGgsIGRlc2NyaXB0aW9uUGFkRW5kKSk7XG5cbiAgICAgICAgY29uc3Qgam9iTmFtZVBhZCA9IHBhcnNlci5qb2JOYW1lUGFkO1xuXG4gICAgICAgIGlmICghbGlzdEFsbCkge1xuICAgICAgICAgICAgam9icyA9IGpvYnMuZmlsdGVyKGogPT4gai53aGVuICE9PSBcIm5ldmVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7Z3JleSAke1wibmFtZVwiLnBhZEVuZChqb2JOYW1lUGFkKX0gICR7XCJkZXNjcmlwdGlvblwiLnBhZEVuZChkZXNjcmlwdGlvblBhZEVuZCl9fSAgYCk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge2dyZXkgJHtcInN0YWdlXCIucGFkRW5kKHN0YWdlUGFkRW5kKX0gICR7XCJ3aGVuXCIucGFkRW5kKHdoZW5QYWRFbmQpfX0gIGApO1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYHtncmV5IGFsbG93X2ZhaWx1cmUgIG5lZWRzfVxcbmApO1xuXG4gICAgICAgIGNvbnN0IHJlbmRlckxpbmUgPSAoam9iOiBKb2IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5lZWRzID0gam9iLm5lZWRzO1xuICAgICAgICAgICAgY29uc3QgYWxsb3dGYWlsdXJlID0gam9iLmFsbG93RmFpbHVyZSA/IFwidHJ1ZSBcIiA6IFwiZmFsc2VcIjtcbiAgICAgICAgICAgIGxldCBqb2JMaW5lID0gY2hhbGtge2JsdWVCcmlnaHQgJHtqb2IubmFtZS5wYWRFbmQoam9iTmFtZVBhZCl9fSAgJHtqb2IuZGVzY3JpcHRpb24ucGFkRW5kKGRlc2NyaXB0aW9uUGFkRW5kKX0gIGA7XG4gICAgICAgICAgICBqb2JMaW5lICs9IGNoYWxrYHt5ZWxsb3cgJHtqb2Iuc3RhZ2UucGFkRW5kKHN0YWdlUGFkRW5kKX19ICAke2pvYi53aGVuLnBhZEVuZCh3aGVuUGFkRW5kKX0gICR7YWxsb3dGYWlsdXJlLnBhZEVuZCgxMSl9YDtcbiAgICAgICAgICAgIGlmIChuZWVkcykge1xuICAgICAgICAgICAgICAgIGpvYkxpbmUgKz0gY2hhbGtgICAgIFt7Ymx1ZUJyaWdodCAke25lZWRzLm1hcChuID0+IG4uam9iKS5qb2luKFwiLFwiKX19XWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGAke2pvYkxpbmV9XFxuYCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgam9icy5mb3JFYWNoKChqb2IpID0+IHJlbmRlckxpbmUoam9iKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJ1bkpzb24gKHBhcnNlcjogUGFyc2VyLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBjb25zdCBqb2JzID0gWy4uLnBhcnNlci5qb2JzLnZhbHVlcygpXTtcbiAgICAgICAgY29uc3QganNvbjogYW55W10gPSBbXTtcblxuICAgICAgICBqb2JzLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAganNvbi5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBqb2IubmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogam9iLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIHN0YWdlOiBqb2Iuc3RhZ2UsXG4gICAgICAgICAgICAgICAgd2hlbjogam9iLndoZW4sXG4gICAgICAgICAgICAgICAgYWxsb3dfZmFpbHVyZTogam9iLmFsbG93RmFpbHVyZSxcbiAgICAgICAgICAgICAgICBuZWVkczogam9iLm5lZWRzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoYCR7SlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMil9XFxuYCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJ1bkNzdiAocGFyc2VyOiBQYXJzZXIsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBhbGw6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgc3RhZ2VzID0gcGFyc2VyLnN0YWdlcztcbiAgICAgICAgbGV0IGpvYnMgPSBbLi4ucGFyc2VyLmpvYnMudmFsdWVzKCldO1xuICAgICAgICBqb2JzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdGFnZXMuaW5kZXhPZihhLnN0YWdlKSAtIHN0YWdlcy5pbmRleE9mKGIuc3RhZ2UpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWFsbCkge1xuICAgICAgICAgICAgam9icyA9IGpvYnMuZmlsdGVyKGogPT4gai53aGVuICE9PSBcIm5ldmVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChcIm5hbWU7ZGVzY3JpcHRpb247c3RhZ2U7d2hlbjthbGxvd0ZhaWx1cmU7bmVlZHNcXG5cIik7XG4gICAgICAgIGpvYnMuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZWVkcyA9IGpvYi5uZWVkcyB8fCBbXTtcblxuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChgJHtqb2IubmFtZX07XCIke2pvYi5kZXNjcmlwdGlvbn1cIjske2pvYi5zdGFnZX07JHtqb2Iud2hlbn07JHtqb2IuYWxsb3dGYWlsdXJlfTtbJHtuZWVkcy5tYXAobiA9PiBuLmpvYikuam9pbihcIixcIil9XVxcbmApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbn1cbiJdfQ==
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tbWFuZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUEwQjtBQUcxQixtQ0FBOEI7QUFFOUIseUNBQW9DO0FBQ3BDLHdEQUEwQjtBQUUxQixtQ0FBc0M7QUFFdEMsTUFBYSxTQUFTO0lBRWxCLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFFLElBQVUsRUFBRSxNQUFjLEVBQUUsWUFBMEI7UUFDNUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRTdCLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDdEUsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkcsTUFBTSxtQkFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlELE1BQU0sU0FBUyxDQUFDLFdBQVcsQ0FBQztZQUN4QixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFlBQVksRUFBRSxZQUFZO1lBQzFCLElBQUksRUFBRSxJQUFJO1lBQ1YsTUFBTSxFQUFFLE1B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SyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1NBQy9DO1FBRUQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoRyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsWUFBWSxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDdEgsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBRUo7QUFyUUQsOEJBcVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHtKb2J9IGZyb20gXCIuL2pvYlwiO1xuaW1wb3J0IHtQYXJzZXJ9IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi93cml0ZS1zdHJlYW1zXCI7XG5pbXBvcnQge0V4ZWN1dG9yfSBmcm9tIFwiLi9leGVjdXRvclwiO1xuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2XCI7XG5pbXBvcnQge0Fzc2VydGlvbkVycm9yfSBmcm9tIFwiYXNzZXJ0XCI7XG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kZXIge1xuXG4gICAgc3RhdGljIGFzeW5jIHJ1blBpcGVsaW5lIChhcmd2OiBBcmd2LCBwYXJzZXI6IFBhcnNlciwgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgY29uc3Qgam9icyA9IHBhcnNlci5qb2JzO1xuICAgICAgICBjb25zdCBzdGFnZXMgPSBwYXJzZXIuc3RhZ2VzO1xuXG4gICAgICAgIGxldCBwb3RlbnRpYWxTdGFydGVycyA9IFsuLi5qb2JzLnZhbHVlcygpXTtcbiAgICAgICAgcG90ZW50aWFsU3RhcnRlcnMgPSBwb3RlbnRpYWxTdGFydGVycy5maWx0ZXIoaiA9PiBqLndoZW4gIT09IFwibmV2ZXJcIik7XG4gICAgICAgIHBvdGVudGlhbFN0YXJ0ZXJzID0gcG90ZW50aWFsU3RhcnRlcnMuZmlsdGVyKGogPT4gai53aGVuICE9PSBcIm1hbnVhbFwiIHx8IGFyZ3YubWFudWFsLmluY2x1ZGVzKGoubmFtZSkpO1xuICAgICAgICBhd2FpdCBFeGVjdXRvci5ydW5Mb29wKGFyZ3YsIGpvYnMsIHN0YWdlcywgcG90ZW50aWFsU3RhcnRlcnMpO1xuICAgICAgICBhd2FpdCBDb21tYW5kZXIucHJpbnRSZXBvcnQoe1xuICAgICAgICAgICAgY3dkOiBhcmd2LmN3ZCxcbiAgICAgICAgICAgIHNob3dUaW1lc3RhbXBzOiBhcmd2LnNob3dUaW1lc3RhbXBzLFxuICAgICAgICAgICAgc3RhdGVEaXI6IGFyZ3Yuc3RhdGVEaXIsXG4gICAgICAgICAgICB3cml0ZVN0cmVhbXM6IHdyaXRlU3RyZWFtcyxcbiAgICAgICAgICAgIGpvYnM6IGpvYnMsXG4gICAgICAgICAgICBzdGFnZXM6IHN0YWdlcyxcbiAgICAgICAgICAgIGpvYk5hbWVQYWQ6IHBhcnNlci5qb2JOYW1lUGFkLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcnVuSm9ic0luU3RhZ2UgKGFyZ3Y6IEFyZ3YsIHBhcnNlcjogUGFyc2VyLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBjb25zdCBqb2JzID0gcGFyc2VyLmpvYnMuZmlsdGVyKGogPT4gai5zdGFnZSA9PT0gYXJndi5zdGFnZSk7XG4gICAgICAgIGNvbnN0IHN0YWdlcyA9IHBhcnNlci5zdGFnZXM7XG5cbiAgICAgICAgbGV0IHBvdGVudGlhbFN0YXJ0ZXJzID0gWy4uLmpvYnMudmFsdWVzKCldO1xuICAgICAgICBwb3RlbnRpYWxTdGFydGVycyA9IHBvdGVudGlhbFN0YXJ0ZXJzLmZpbHRlcihqID0+IGoud2hlbiAhPT0gXCJuZXZlclwiKTtcbiAgICAgICAgcG90ZW50aWFsU3RhcnRlcnMgPSBwb3RlbnRpYWxTdGFydGVycy5maWx0ZXIoaiA9PiBqLndoZW4gIT09IFwibWFudWFsXCIgfHwgYXJndi5tYW51YWwuaW5jbHVkZXMoai5uYW1lKSk7XG4gICAgICAgIHBvdGVudGlhbFN0YXJ0ZXJzID0gcG90ZW50aWFsU3RhcnRlcnMuZmlsdGVyKGogPT4gai5zdGFnZSA9PT0gYXJndi5zdGFnZSk7XG4gICAgICAgIGF3YWl0IEV4ZWN1dG9yLnJ1bkxvb3AoYXJndiwgam9icywgc3RhZ2VzLCBwb3RlbnRpYWxTdGFydGVycyk7XG4gICAgICAgIGF3YWl0IENvbW1hbmRlci5wcmludFJlcG9ydCh7XG4gICAgICAgICAgICBjd2Q6IGFyZ3YuY3dkLFxuICAgICAgICAgICAgc2hvd1RpbWVzdGFtcHM6IGFyZ3Yuc2hvd1RpbWVzdGFtcHMsXG4gICAgICAgICAgICBzdGF0ZURpcjogYXJndi5zdGF0ZURpcixcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtczogd3JpdGVTdHJlYW1zLFxuICAgICAgICAgICAgam9iczogam9icyxcbiAgICAgICAgICAgIHN0YWdlczogc3RhZ2VzLFxuICAgICAgICAgICAgam9iTmFtZVBhZDogcGFyc2VyLmpvYk5hbWVQYWQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBydW5Kb2JzIChhcmd2OiBBcmd2LCBwYXJzZXI6IFBhcnNlciwgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgY29uc3QgbmVlZHMgPSBhcmd2Lm5lZWRzIHx8IGFyZ3Yub25seU5lZWRzO1xuICAgICAgICBjb25zdCBqb2JBcmdzID0gYXJndi5qb2I7XG4gICAgICAgIGNvbnN0IGpvYnMgPSBwYXJzZXIuam9icztcbiAgICAgICAgY29uc3Qgc3RhZ2VzID0gcGFyc2VyLnN0YWdlcztcblxuICAgICAgICBsZXQgcG90ZW50aWFsU3RhcnRlcnM6IEpvYltdID0gW107XG4gICAgICAgIGNvbnN0IGpvYlNldCA9IG5lZWRzID8gbmV3IFNldChqb2JzKSA6IG5ldyBTZXQ8Sm9iPigpO1xuICAgICAgICBqb2JBcmdzLmZvckVhY2goam9iTmFtZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXNlSm9icyA9IGpvYnMuZmlsdGVyKGogPT4gai5iYXNlTmFtZSA9PSBqb2JOYW1lKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYiBvZiBiYXNlSm9icykge1xuICAgICAgICAgICAgICAgIGpvYlNldC5hZGQoYik7XG4gICAgICAgICAgICAgICAgaWYgKG5lZWRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbFN0YXJ0ZXJzID0gcG90ZW50aWFsU3RhcnRlcnMuY29uY2F0KEV4ZWN1dG9yLmdldFBhc3RUb1dhaXRGb3Ioam9icywgc3RhZ2VzLCBiLCBhcmd2Lm1hbnVhbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxTdGFydGVycy5wdXNoKGIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHBvdGVudGlhbFN0YXJ0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBjaGFsa2B7Ymx1ZUJyaWdodCAke2pvYkFyZ3Muam9pbihcIixcIil9fSBjb3VsZCBub3QgYmUgZm91bmRgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJndi5vbmx5TmVlZHMpIHtcbiAgICAgICAgICAgIGpvYkFyZ3MuZm9yRWFjaCgoaikgPT4ge1xuICAgICAgICAgICAgICAgIHBvdGVudGlhbFN0YXJ0ZXJzID0gcG90ZW50aWFsU3RhcnRlcnMuZmlsdGVyKHAgPT4gcC5uYW1lICE9PSBqKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgRXhlY3V0b3IucnVuTG9vcChhcmd2LCBBcnJheS5mcm9tKGpvYlNldCksIHN0YWdlcywgcG90ZW50aWFsU3RhcnRlcnMpO1xuICAgICAgICBhd2FpdCBDb21tYW5kZXIucHJpbnRSZXBvcnQoe1xuICAgICAgICAgICAgY3dkOiBhcmd2LmN3ZCxcbiAgICAgICAgICAgIHNob3dUaW1lc3RhbXBzOiBhcmd2LnNob3dUaW1lc3RhbXBzLFxuICAgICAgICAgICAgc3RhdGVEaXI6IGFyZ3Yuc3RhdGVEaXIsXG4gICAgICAgICAgICB3cml0ZVN0cmVhbXM6IHdyaXRlU3RyZWFtcyxcbiAgICAgICAgICAgIGpvYnM6IGpvYnMsXG4gICAgICAgICAgICBzdGFnZXM6IHN0YWdlcyxcbiAgICAgICAgICAgIGpvYk5hbWVQYWQ6IHBhcnNlci5qb2JOYW1lUGFkLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcHJpbnRSZXBvcnQgKHtjd2QsIHN0YXRlRGlyLCBzaG93VGltZXN0YW1wcywgd3JpdGVTdHJlYW1zLCBqb2JzLCBzdGFnZXMsIGpvYk5hbWVQYWR9OiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBzaG93VGltZXN0YW1wczogYm9vbGVhbjtcbiAgICAgICAgc3RhdGVEaXI6IHN0cmluZztcbiAgICAgICAgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgICAgIGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPjtcbiAgICAgICAgc3RhZ2VzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgICAgICAgam9iTmFtZVBhZDogbnVtYmVyO1xuICAgIH0pIHtcblxuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KFwiXFxuXCIpO1xuXG4gICAgICAgIGNvbnN0IHJlbmRlckR1cmF0aW9uID0gKGR1cmF0aW9uOiBzdHJpbmcpID0+IHNob3dUaW1lc3RhbXBzID8gYCBbJHtkdXJhdGlvbi5wYWRTdGFydCg3KX1dYCA6IFwiXCI7XG5cbiAgICAgICAgY29uc3QgcHJlU2NyaXB0czoge3N1Y2Nlc3NmdWw6IEpvYltdOyBmYWlsZWQ6IEpvYltdOyB3YXJuZWQ6IEpvYltdfSA9IHtcbiAgICAgICAgICAgIHN1Y2Nlc3NmdWw6IFtdLFxuICAgICAgICAgICAgZmFpbGVkOiBbXSxcbiAgICAgICAgICAgIHdhcm5lZDogW10sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFmdGVyU2NyaXB0czoge3dhcm5lZDogSm9iW119ID0ge1xuICAgICAgICAgICAgd2FybmVkOiBbXSxcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBqb2JzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBpZiAoam9iLnN0YXJ0ZWQgJiYgam9iLmFmdGVyU2NyaXB0c0V4aXRDb2RlICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgYWZ0ZXJTY3JpcHRzLndhcm5lZC5wdXNoKGpvYik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBqb2JzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBpZiAoIWpvYi5zdGFydGVkKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChqb2IucHJlU2NyaXB0c0V4aXRDb2RlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcHJlU2NyaXB0cy5zdWNjZXNzZnVsLnB1c2goam9iKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoam9iLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgICAgIHByZVNjcmlwdHMud2FybmVkLnB1c2goam9iKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJlU2NyaXB0cy5mYWlsZWQucHVzaChqb2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZVNjcmlwdHMuc3VjY2Vzc2Z1bC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHByZVNjcmlwdHMuc3VjY2Vzc2Z1bC5zb3J0KChhLCBiKSA9PiBzdGFnZXMuaW5kZXhPZihhLnN0YWdlKSAtIHN0YWdlcy5pbmRleE9mKGIuc3RhZ2UpKTtcbiAgICAgICAgICAgIHByZVNjcmlwdHMuc3VjY2Vzc2Z1bC5mb3JFYWNoKCh7Y292ZXJhZ2VQZXJjZW50LCBuYW1lLCBwcmV0dHlEdXJhdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lUGFkID0gbmFtZS5wYWRFbmQoam9iTmFtZVBhZCk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7YmxhY2suYmdHcmVlbkJyaWdodCAgUEFTUyB9JHtyZW5kZXJEdXJhdGlvbihwcmV0dHlEdXJhdGlvbil9IHtibHVlQnJpZ2h0ICR7bmFtZVBhZH19YCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvdmVyYWdlUGVyY2VudCkge1xuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCAke2NvdmVyYWdlUGVyY2VudH0lIHtncmV5IGNvdmVyYWdlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KFwiXFxuXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJlU2NyaXB0cy53YXJuZWQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBwcmVTY3JpcHRzLndhcm5lZC5zb3J0KChhLCBiKSA9PiBzdGFnZXMuaW5kZXhPZihhLnN0YWdlKSAtIHN0YWdlcy5pbmRleE9mKGIuc3RhZ2UpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qge25hbWUsIHByZXR0eUR1cmF0aW9ufSBvZiBwcmVTY3JpcHRzLndhcm5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVQYWQgPSBuYW1lLnBhZEVuZChqb2JOYW1lUGFkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzYWZlTmFtZSA9IFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcobmFtZSk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gfSR7cmVuZGVyRHVyYXRpb24ocHJldHR5RHVyYXRpb24pfSB7Ymx1ZUJyaWdodCAke25hbWVQYWR9fSAgcHJlX3NjcmlwdFxcbmApO1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dExvZyA9IGF3YWl0IGZzLnJlYWRGaWxlKGAke2N3ZH0vJHtzdGF0ZURpcn0vb3V0cHV0LyR7c2FmZU5hbWV9LmxvZ2AsIFwidXRmOFwiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3V0cHV0TG9nLnNwbGl0KC9cXHI/XFxuLykuZmlsdGVyKGogPT4gIWouaW5jbHVkZXMoXCJbMzJtJCBcIikpLmZpbHRlcihqID0+IGogIT09IFwiXCIpLnNsaWNlKC0zKSkge1xuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCAge3llbGxvdyA+fSAke2xpbmV9XFxuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFmdGVyU2NyaXB0cy53YXJuZWQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBhZnRlclNjcmlwdHMud2FybmVkLnNvcnQoKGEsIGIpID0+IHN0YWdlcy5pbmRleE9mKGEuc3RhZ2UpIC0gc3RhZ2VzLmluZGV4T2YoYi5zdGFnZSkpO1xuICAgICAgICAgICAgYWZ0ZXJTY3JpcHRzLndhcm5lZC5mb3JFYWNoKCh7bmFtZSwgcHJldHR5RHVyYXRpb259KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZVBhZCA9IG5hbWUucGFkRW5kKGpvYk5hbWVQYWQpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0ke3JlbmRlckR1cmF0aW9uKHByZXR0eUR1cmF0aW9uKX0ge2JsdWVCcmlnaHQgJHtuYW1lUGFkfX0gIGFmdGVyX3NjcmlwdFxcbmApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJlU2NyaXB0cy5mYWlsZWQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBwcmVTY3JpcHRzLmZhaWxlZC5zb3J0KChhLCBiKSA9PiBzdGFnZXMuaW5kZXhPZihhLnN0YWdlKSAtIHN0YWdlcy5pbmRleE9mKGIuc3RhZ2UpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qge25hbWUsIHByZXR0eUR1cmF0aW9ufSBvZiBwcmVTY3JpcHRzLmZhaWxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVQYWQgPSBuYW1lLnBhZEVuZChqb2JOYW1lUGFkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzYWZlTmFtZSA9IFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcobmFtZSk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7YmxhY2suYmdSZWQgIEZBSUwgfSR7cmVuZGVyRHVyYXRpb24ocHJldHR5RHVyYXRpb24pfSB7Ymx1ZUJyaWdodCAke25hbWVQYWR9fVxcbmApO1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dExvZyA9IGF3YWl0IGZzLnJlYWRGaWxlKGAke2N3ZH0vJHtzdGF0ZURpcn0vb3V0cHV0LyR7c2FmZU5hbWV9LmxvZ2AsIFwidXRmOFwiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3V0cHV0TG9nLnNwbGl0KC9cXHI/XFxuLykuZmlsdGVyKGogPT4gIWouaW5jbHVkZXMoXCJbMzJtJCBcIikpLmZpbHRlcihqID0+IGogIT09IFwiXCIpLnNsaWNlKC0zKSkge1xuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCAge3JlZCA+fSAke2xpbmV9XFxuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2YgcHJlU2NyaXB0cy5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gam9iLmVudmlyb25tZW50O1xuICAgICAgICAgICAgaWYgKGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGUubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IGUudXJsO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX0gZW52aXJvbm1lbnQ6IFxceyBuYW1lOiB7Ym9sZCAke25hbWV9fWApO1xuICAgICAgICAgICAgaWYgKHVybCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2AsIHVybDoge2JvbGQgJHt1cmx9fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChcIiB9XFxuXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHJ1bkxpc3QgKHBhcnNlcjogUGFyc2VyLCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgbGlzdEFsbDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBzdGFnZXMgPSBwYXJzZXIuc3RhZ2VzO1xuICAgICAgICBsZXQgam9icyA9IFsuLi5wYXJzZXIuam9icy52YWx1ZXMoKV07XG4gICAgICAgIGpvYnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YWdlcy5pbmRleE9mKGEuc3RhZ2UpIC0gc3RhZ2VzLmluZGV4T2YoYi5zdGFnZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCB3aGVuUGFkRW5kID0gNDtcbiAgICAgICAgam9icy5mb3JFYWNoKGogPT4gd2hlblBhZEVuZCA9IE1hdGgubWF4KGoud2hlbi5sZW5ndGgsIHdoZW5QYWRFbmQpKTtcblxuICAgICAgICBsZXQgc3RhZ2VQYWRFbmQgPSA1O1xuICAgICAgICBzdGFnZXMuZm9yRWFjaChzID0+IHN0YWdlUGFkRW5kID0gTWF0aC5tYXgocy5sZW5ndGgsIHN0YWdlUGFkRW5kKSk7XG5cbiAgICAgICAgbGV0IGRlc2NyaXB0aW9uUGFkRW5kID0gMTE7XG4gICAgICAgIGpvYnMuZm9yRWFjaChqID0+IGRlc2NyaXB0aW9uUGFkRW5kID0gTWF0aC5tYXgoai5kZXNjcmlwdGlvbi5sZW5ndGgsIGRlc2NyaXB0aW9uUGFkRW5kKSk7XG5cbiAgICAgICAgY29uc3Qgam9iTmFtZVBhZCA9IHBhcnNlci5qb2JOYW1lUGFkO1xuXG4gICAgICAgIGlmICghbGlzdEFsbCkge1xuICAgICAgICAgICAgam9icyA9IGpvYnMuZmlsdGVyKGogPT4gai53aGVuICE9PSBcIm5ldmVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2B7Z3JleSAke1wibmFtZVwiLnBhZEVuZChqb2JOYW1lUGFkKX0gICR7XCJkZXNjcmlwdGlvblwiLnBhZEVuZChkZXNjcmlwdGlvblBhZEVuZCl9fSAgYCk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge2dyZXkgJHtcInN0YWdlXCIucGFkRW5kKHN0YWdlUGFkRW5kKX0gICR7XCJ3aGVuXCIucGFkRW5kKHdoZW5QYWRFbmQpfX0gIGApO1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYHtncmV5IGFsbG93X2ZhaWx1cmUgIG5lZWRzfVxcbmApO1xuXG4gICAgICAgIGNvbnN0IHJlbmRlckxpbmUgPSAoam9iOiBKb2IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5lZWRzID0gam9iLm5lZWRzPy5maWx0ZXIobiA9PiAhbi5wcm9qZWN0ICYmICFuLnBpcGVsaW5lKS5tYXAobiA9PiBuLmpvYikuam9pbihcIixcIik7XG4gICAgICAgICAgICBjb25zdCBhbGxvd0ZhaWx1cmUgPSBqb2IuYWxsb3dGYWlsdXJlID8gXCJ0cnVlIFwiIDogXCJmYWxzZVwiO1xuICAgICAgICAgICAgbGV0IGpvYkxpbmUgPSBjaGFsa2B7Ymx1ZUJyaWdodCAke2pvYi5uYW1lLnBhZEVuZChqb2JOYW1lUGFkKX19ICAke2pvYi5kZXNjcmlwdGlvbi5wYWRFbmQoZGVzY3JpcHRpb25QYWRFbmQpfSAgYDtcbiAgICAgICAgICAgIGpvYkxpbmUgKz0gY2hhbGtge3llbGxvdyAke2pvYi5zdGFnZS5wYWRFbmQoc3RhZ2VQYWRFbmQpfX0gICR7am9iLndoZW4ucGFkRW5kKHdoZW5QYWRFbmQpfSAgJHthbGxvd0ZhaWx1cmUucGFkRW5kKDExKX1gO1xuICAgICAgICAgICAgaWYgKG5lZWRzKSB7XG4gICAgICAgICAgICAgICAgam9iTGluZSArPSBjaGFsa2AgICAgW3tibHVlQnJpZ2h0ICR7bmVlZHN9fV1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChgJHtqb2JMaW5lfVxcbmApO1xuICAgICAgICB9O1xuXG4gICAgICAgIGpvYnMuZm9yRWFjaCgoam9iKSA9PiByZW5kZXJMaW5lKGpvYikpO1xuICAgIH1cblxuICAgIHN0YXRpYyBydW5Kc29uIChwYXJzZXI6IFBhcnNlciwgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgY29uc3Qgam9icyA9IFsuLi5wYXJzZXIuam9icy52YWx1ZXMoKV07XG4gICAgICAgIGNvbnN0IGpzb246IGFueVtdID0gW107XG5cbiAgICAgICAgam9icy5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgICAgICAgIGpzb24ucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogam9iLm5hbWUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGpvYi5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBzdGFnZTogam9iLnN0YWdlLFxuICAgICAgICAgICAgICAgIHdoZW46IGpvYi53aGVuLFxuICAgICAgICAgICAgICAgIGFsbG93X2ZhaWx1cmU6IGpvYi5hbGxvd0ZhaWx1cmUsXG4gICAgICAgICAgICAgICAgbmVlZHM6IGpvYi5uZWVkcz8uZmlsdGVyKG4gPT4gIW4ucHJvamVjdCAmJiAhbi5waXBlbGluZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChgJHtKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAyKX1cXG5gKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcnVuQ3N2IChwYXJzZXI6IFBhcnNlciwgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGFsbDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBzdGFnZXMgPSBwYXJzZXIuc3RhZ2VzO1xuICAgICAgICBsZXQgam9icyA9IFsuLi5wYXJzZXIuam9icy52YWx1ZXMoKV07XG4gICAgICAgIGpvYnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YWdlcy5pbmRleE9mKGEuc3RhZ2UpIC0gc3RhZ2VzLmluZGV4T2YoYi5zdGFnZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghYWxsKSB7XG4gICAgICAgICAgICBqb2JzID0gam9icy5maWx0ZXIoaiA9PiBqLndoZW4gIT09IFwibmV2ZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KFwibmFtZTtkZXNjcmlwdGlvbjtzdGFnZTt3aGVuO2FsbG93RmFpbHVyZTtuZWVkc1xcblwiKTtcbiAgICAgICAgam9icy5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5lZWRzID0gam9iLm5lZWRzPy5maWx0ZXIobiA9PiAhbi5wcm9qZWN0ICYmICFuLnBpcGVsaW5lKS5tYXAobiA9PiBuLmpvYikuam9pbihcIixcIikgPz8gW107XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGAke2pvYi5uYW1lfTtcIiR7am9iLmRlc2NyaXB0aW9ufVwiOyR7am9iLnN0YWdlfTske2pvYi53aGVufTske2pvYi5hbGxvd0ZhaWx1cmV9O1ske25lZWRzfV1cXG5gKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG59XG4iXX0=