@datagrok-libraries/utils 1.15.1 → 1.15.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "fullName": "Utils",
7
- "version": "1.15.1",
7
+ "version": "1.15.3",
8
8
  "description": "Common utilities",
9
9
  "dependencies": {
10
10
  "fast-sha256": "^1.3.0",
@@ -1 +1 @@
1
- {"version":3,"file":"computation-view.d.ts","sourceRoot":"","sources":["computation-view.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,6BAA6B,CAAC;AAErC;;;;;;;;;;;;;;KAcK;AACL,qBAAa,eAAgB,SAAQ,YAAY;IAC/C;;;MAGE;gBACU,QAAQ,CAAC,EAAE,MAAM;IAwC7B;;MAEE;IACF,QAAQ,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAC,EAAE,CAAC,GAAG,IAAI,CAAQ;IAE5E;;MAEE;IACF,YAAY,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAC,EAAE,CAAC,GAAG,IAAI,CAAQ;IAE5E;;MAEE;IACF,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAQ;IAE7C;;MAEE;IACF,SAAS,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAQ;IAE/C;;;MAGE;IACO,eAAe;CA4CzB"}
1
+ {"version":3,"file":"computation-view.d.ts","sourceRoot":"","sources":["computation-view.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,6BAA6B,CAAC;AAGrC;;;;;;;;;;;;;;KAcK;AACL,qBAAa,eAAgB,SAAQ,YAAY;IAC/C;;;MAGE;gBACU,QAAQ,CAAC,EAAE,MAAM;IA4C7B;;MAEE;IACF,QAAQ,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAC,EAAE,CAAC,GAAG,IAAI,CAAQ;IAE5E;;MAEE;IACF,YAAY,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAC,EAAE,CAAC,GAAG,IAAI,CAAQ;IAE5E;;MAEE;IACF,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAQ;IAE7C;;MAEE;IACF,SAAS,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAQ;IAE/C;;;MAGE;IACO,eAAe;CA4CzB"}
@@ -14,6 +14,7 @@ import * as ui from 'datagrok-api/ui';
14
14
  import * as DG from 'datagrok-api/dg';
15
15
  import { FunctionView } from './function-view';
16
16
  import '../css/computation-view.css';
17
+ import { historyUtils } from './history-utils';
17
18
  /**
18
19
  * Base class for handling Compute models (see https://github.com/datagrok-ai/public/blob/master/help/compute/compute.md).
19
20
  * In most cases, the computation is a simple {@link Func}
@@ -62,9 +63,13 @@ export class ComputationView extends FunctionView {
62
63
  if (runId) {
63
64
  setTimeout(() => __awaiter(this, void 0, void 0, function* () {
64
65
  yield this.init();
65
- this.linkFunccall(yield this.loadRun(runId));
66
+ const urlRun = yield historyUtils.loadRun(runId);
67
+ this.linkFunccall(urlRun);
66
68
  this.build();
67
- this.linkFunccall(yield this.loadRun(runId));
69
+ yield this.onBeforeLoadRun();
70
+ this.linkFunccall(urlRun);
71
+ yield this.onAfterLoadRun(urlRun);
72
+ this.setRunViewReadonly();
68
73
  ui.setUpdateIndicator(this.root, false);
69
74
  }), 0);
70
75
  }
@@ -134,4 +139,4 @@ export class ComputationView extends FunctionView {
134
139
  ribbonMenu.item('Help', () => this.getHelp());
135
140
  }
136
141
  }
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0YXRpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbXB1dGF0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyw2QkFBNkIsQ0FBQztBQUVyQzs7Ozs7Ozs7Ozs7Ozs7S0FjSztBQUNMLE1BQU0sT0FBTyxlQUFnQixTQUFRLFlBQVk7SUFDL0M7OztNQUdFO0lBQ0YsWUFBWSxRQUFpQjs7UUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QyxLQUFLLEVBQUUsQ0FBQztRQW9DVjs7VUFFRTtRQUNGLGFBQVEsR0FBK0QsSUFBSSxDQUFDO1FBRTVFOztVQUVFO1FBQ0YsaUJBQVksR0FBMkQsSUFBSSxDQUFDO1FBRTVFOztVQUVFO1FBQ0YsWUFBTyxHQUFpQyxJQUFJLENBQUM7UUFFN0M7O1VBRUU7UUFDRixjQUFTLEdBQWlDLElBQUksQ0FBQztRQXBEN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxR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QUMsQ0FBQSxHQUFBLENBQUM7aUJBQ3BLLFFBQVEsRUFBRSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTO1lBQ2hCLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRTNELElBQUksSUFBSSxDQUFDLE9BQU87WUFDZCxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBUSxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7RnVuY3Rpb25WaWV3fSBmcm9tICcuL2Z1bmN0aW9uLXZpZXcnO1xuaW1wb3J0ICcuLi9jc3MvY29tcHV0YXRpb24tdmlldy5jc3MnO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGhhbmRsaW5nIENvbXB1dGUgbW9kZWxzIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhdGFncm9rLWFpL3B1YmxpYy9ibG9iL21hc3Rlci9oZWxwL2NvbXB1dGUvY29tcHV0ZS5tZCkuXG4gKiBJbiBtb3N0IGNhc2VzLCB0aGUgY29tcHV0YXRpb24gaXMgYSBzaW1wbGUge0BsaW5rIEZ1bmN9XG4gKiBFeHRlbmQgaXQgaW4gY2FzZXMgd2hlcmUgYSBiZWhhdmlvciBvciBVSSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB7QGxpbmsgRnVuY3Rpb25WaWV3fSBpcyBuZWVkZWQuXG4gKlxuICogSXQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsaXR5IG91dC1vZi10aGUtYm94LCB3aGVyZSBlYWNoIHNlY3Rpb24gY291bGQgYmUgY3VzdG9taXplZDpcbiAqIC0gYSBzdHJ1Y3R1cmVkIHdheSB0byByZXByZXNlbnQgaW5wdXQgYW5kIG91dHB1dCBwYXJhbWV0ZXJzOiB7QGxpbmsgcGFyYW1ldGVyc31cbiAqIC0gZ2VuZXJpYyB3YXkgdG8gZ2VuZXJhdGUgVUkgZm9yIGlucHV0cywgb3V0cHV0cywgYW5kIGludGVyYWN0aXZpdHkgKHJ1bm5pbmcgdGhlIG1vZGVsLCBldGMpXG4gKiAgIC0gcGVyc2lzdGluZyBoaXN0b3JpY2FsIHJlc3VsdHMgdG8gdGhlIGRiICh2aWEge0BsaW5rIHBhcmFtZXRlcnN9KVxuICogLSBleHBvcnQgKHRvIEV4Y2VsIGFuZCBQREYpOiB7QGxpbmsgZXhwb3J0fVxuICogLSBlYXN5IGxvYWRpbmcgb2YgaGlzdG9yaWNhbCBydW5zXG4gKiAtIHJvdXRpbmdcbiAqIC0gZW50ZXJpbmcgdGhlIHJlYWwsIG1lYXN1cmVkIChhcyBvcHBvc2VkIHRvIHByZWRpY3RlZCkgdmFsdWVzIG1hbnVhbGx5XG4gKiAtIG5vdGlmaWNhdGlvbnMgZm9yIGNoYW5naW5nIGlucHV0cywgY29tcGxldGlvbiBvZiBjb21wdXRhdGlvbnMsIGV0Yzoge0BsaW5rIG9uSW5wdXRDaGFuZ2VkfVxuICogKi9cbmV4cG9ydCBjbGFzcyBDb21wdXRhdGlvblZpZXcgZXh0ZW5kcyBGdW5jdGlvblZpZXcge1xuICAvKiogRmluZCB0aGUgZnVuY3Rpb24gYnkgZnVsbHkgc3BlY2lmaWVkIG5hbWUsIGxpbmsgaXQgdG8gdGhlIHZpZXcgYW5kIGNvbnN0cnVjdHMgdGhlIHZpZXcuXG4gICAgKiBJZiBmdW5jdGlvbiBuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGNhbGxzIHtAbGluayBpbml0fSBhbmQge0BsaW5rIGJ1aWxkfSB3aXRob3V0IEZ1bmNDYWxsIGxpbmthZ2UuXG4gICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAqL1xuICBjb25zdHJ1Y3RvcihmdW5jTmFtZT86IHN0cmluZykge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoZ3Jvay5zaGVsbC5zdGFydFVyaSk7XG4gICAgY29uc3QgcnVuSWQgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnaWQnKTtcblxuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnBhcmVudENhbGwgPSBncm9rLmZ1bmN0aW9ucy5nZXRDdXJyZW50Q2FsbCgpO1xuICAgIHRoaXMucGFyZW50VmlldyA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCkucGFyZW50Q2FsbC5hdXhbJ3ZpZXcnXTtcbiAgICB0aGlzLmJhc2VQYXRoID0gYC8ke2dyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCk/LmZ1bmMubmFtZX1gO1xuXG4gICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMucm9vdCwgdHJ1ZSk7XG4gICAgaWYgKHJ1bklkKSB7XG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIHRoaXMubGlua0Z1bmNjYWxsKGF3YWl0IHRoaXMubG9hZFJ1bihydW5JZCkpO1xuICAgICAgICB0aGlzLmJ1aWxkKCk7XG4gICAgICAgIHRoaXMubGlua0Z1bmNjYWxsKGF3YWl0IHRoaXMubG9hZFJ1bihydW5JZCkpO1xuICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy5yb290LCBmYWxzZSk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZ1bmNOYW1lKSB7XG4gICAgICAgIChncm9rLmZ1bmN0aW9ucy5ldmFsKGZ1bmNOYW1lKSBhcyBQcm9taXNlPERHLkZ1bmM+KS50aGVuKGFzeW5jIChmdW5jOiBERy5GdW5jKSA9PiB7XG4gICAgICAgICAgY29uc3QgZnVuY2NhbGwgPSBmdW5jLnByZXBhcmUoe30pO1xuICAgICAgICAgIHRoaXMubGlua0Z1bmNjYWxsKGZ1bmNjYWxsKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgICB0aGlzLmJ1aWxkKCk7XG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgICB0aGlzLmJ1aWxkKCk7XG4gICAgICAgICAgdGhpcy5idWlsZFJpYmJvblBhbmVscygpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIE92ZXJyaWRlIHRvIGN1c3RvbWl6ZSBnZXR0aW5nIG1vY2tzXG4gICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICAqL1xuICBnZXRNb2NrczogKHttb2NrTmFtZTogc3RyaW5nLCBhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD59W10pIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIE92ZXJyaWRlIHRvIGN1c3RvbWl6ZSBnZXR0aW5nIHRlbXBsYXRlc1xuICAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAgKi9cbiAgZ2V0VGVtcGxhdGVzOiAoe25hbWU6IHN0cmluZywgYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+fVtdKSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBPdmVycmlkZSB0byBjdXN0b21pemUgZ2V0dGluZyBoZWxwIGZlYXR1cmVcbiAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIGdldEhlbHA6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBPdmVycmlkZSB0byBjdXN0b21pemUgYnVnIHJlcG9ydGluZyBmZWF0dXJlXG4gICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAqL1xuICByZXBvcnRCdWc6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBMb29rcyBmb3Ige0BsaW5rIHJlcG9ydEJ1Z30sIHtAbGluayBnZXRIZWxwfSBhbmQge0BsaW5rIGV4cG9ydENvbmZpZ30gbWVtYmVycyBhbmQgY3JlYXRlcyBtb2RlbCBtZW51c1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAqL1xuICBvdmVycmlkZSBidWlsZFJpYmJvbk1lbnUoKSB7XG4gICAgc3VwZXIuYnVpbGRSaWJib25NZW51KCk7XG5cbiAgICBpZiAoIXRoaXMuZXhwb3J0Q29uZmlnICYmICF0aGlzLnJlcG9ydEJ1ZyAmJiAhdGhpcy5nZXRIZWxwICYmICF0aGlzLmdldE1vY2tzICYmICF0aGlzLmdldFRlbXBsYXRlcykgcmV0dXJuO1xuXG4gICAgY29uc3QgcmliYm9uTWVudSA9IHRoaXMucmliYm9uTWVudS5ncm91cCgnTW9kZWwnKTtcblxuICAgIGlmICh0aGlzLmdldE1vY2tzICYmIHRoaXMuZ2V0TW9ja3MubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMuZ2V0TW9ja3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJpYmJvbk1lbnUuaXRlbSgnSW5wdXQgZGF0YSBtb2NrJywgdGhpcy5nZXRNb2Nrc1swXS5hY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGF0YUdyb3VwID0gcmliYm9uTWVudS5ncm91cCgnSW5wdXQgZGF0YSBtb2NrcycpO1xuICAgICAgICB0aGlzLmdldE1vY2tzLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgICAgIGRhdGFHcm91cC5pdGVtKHZhbC5tb2NrTmFtZSwgdmFsLmFjdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICByaWJib25NZW51LmVuZEdyb3VwKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0VGVtcGxhdGVzICYmIHRoaXMuZ2V0VGVtcGxhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0aGlzLmdldFRlbXBsYXRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmliYm9uTWVudS5pdGVtKCdJbnB1dCBkYXRhIHRlbXBsYXRlJywgdGhpcy5nZXRUZW1wbGF0ZXNbMF0uYWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRhdGFHcm91cCA9IHJpYmJvbk1lbnUuZ3JvdXAoJ0lucHV0IGRhdGEgdGVtcGxhdGVzJyk7XG4gICAgICAgIHRoaXMuZ2V0VGVtcGxhdGVzLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgICAgIGRhdGFHcm91cC5pdGVtKHZhbC5uYW1lLCB2YWwuYWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJpYmJvbk1lbnUuZW5kR3JvdXAoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5leHBvcnRDb25maWcgJiYgdGhpcy5leHBvcnRDb25maWcuc3VwcG9ydGVkRm9ybWF0cy5sZW5ndGggPiAwKSB7XG4gICAgICByaWJib25NZW51XG4gICAgICAgIC5ncm91cCgnRXhwb3J0JylcbiAgICAgICAgLml0ZW1zKHRoaXMuZXhwb3J0Q29uZmlnLnN1cHBvcnRlZEZvcm1hdHMsIGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4gREcuVXRpbHMuZG93bmxvYWQodGhpcy5leHBvcnRDb25maWchLmZpbGVuYW1lKGZvcm1hdCksIGF3YWl0IHRoaXMuZXhwb3J0Q29uZmlnIS5leHBvcnQoZm9ybWF0KSkpXG4gICAgICAgIC5lbmRHcm91cCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlcG9ydEJ1ZylcbiAgICAgIHJpYmJvbk1lbnUuaXRlbSgnUmVwb3J0IGEgYnVnJywgKCkgPT4gdGhpcy5yZXBvcnRCdWchKCkpO1xuXG4gICAgaWYgKHRoaXMuZ2V0SGVscClcbiAgICAgIHJpYmJvbk1lbnUuaXRlbSgnSGVscCcsICgpID0+IHRoaXMuZ2V0SGVscCEoKSk7XG4gIH1cbn1cbiJdfQ==
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0YXRpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbXB1dGF0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7O0tBY0s7QUFDTCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxZQUFZO0lBQy9DOzs7TUFHRTtJQUNGLFlBQVksUUFBaUI7O1FBQzNCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekMsS0FBSyxFQUFFLENBQUM7UUF3Q1Y7O1VBRUU7UUFDRixhQUFRLEdBQStELElBQUksQ0FBQztRQUU1RTs7VUFFRTtRQUNGLGlCQUFZLEdBQTJELElBQUksQ0FBQztRQUU1RTs7VUFFRTtRQUNGLFlBQU8sR0FBaUMsSUFBSSxDQUFDO1FBRTdDOztVQUVFO1FBQ0YsY0FBUyxHQUFpQyxJQUFJLENBQUM7UUF4RDdDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUMsVUFBVSxDQUFD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QUFnQixFQUFFLENBQU8sTUFBYyxFQUFFLEVBQUUsZ0RBQUMsT0FBQSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxZQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsR0FBQSxDQUFDO2lCQUNwSyxRQUFRLEVBQUUsQ0FBQztTQUNmO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUztZQUNoQixVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBVSxFQUFFLENBQUMsQ0FBQztRQUUzRCxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ2QsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQVEsRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge0Z1bmN0aW9uVmlld30gZnJvbSAnLi9mdW5jdGlvbi12aWV3JztcbmltcG9ydCAnLi4vY3NzL2NvbXB1dGF0aW9uLXZpZXcuY3NzJztcbmltcG9ydCB7aGlzdG9yeVV0aWxzfSBmcm9tICcuL2hpc3RvcnktdXRpbHMnO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGhhbmRsaW5nIENvbXB1dGUgbW9kZWxzIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhdGFncm9rLWFpL3B1YmxpYy9ibG9iL21hc3Rlci9oZWxwL2NvbXB1dGUvY29tcHV0ZS5tZCkuXG4gKiBJbiBtb3N0IGNhc2VzLCB0aGUgY29tcHV0YXRpb24gaXMgYSBzaW1wbGUge0BsaW5rIEZ1bmN9XG4gKiBFeHRlbmQgaXQgaW4gY2FzZXMgd2hlcmUgYSBiZWhhdmlvciBvciBVSSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB7QGxpbmsgRnVuY3Rpb25WaWV3fSBpcyBuZWVkZWQuXG4gKlxuICogSXQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsaXR5IG91dC1vZi10aGUtYm94LCB3aGVyZSBlYWNoIHNlY3Rpb24gY291bGQgYmUgY3VzdG9taXplZDpcbiAqIC0gYSBzdHJ1Y3R1cmVkIHdheSB0byByZXByZXNlbnQgaW5wdXQgYW5kIG91dHB1dCBwYXJhbWV0ZXJzOiB7QGxpbmsgcGFyYW1ldGVyc31cbiAqIC0gZ2VuZXJpYyB3YXkgdG8gZ2VuZXJhdGUgVUkgZm9yIGlucHV0cywgb3V0cHV0cywgYW5kIGludGVyYWN0aXZpdHkgKHJ1bm5pbmcgdGhlIG1vZGVsLCBldGMpXG4gKiAgIC0gcGVyc2lzdGluZyBoaXN0b3JpY2FsIHJlc3VsdHMgdG8gdGhlIGRiICh2aWEge0BsaW5rIHBhcmFtZXRlcnN9KVxuICogLSBleHBvcnQgKHRvIEV4Y2VsIGFuZCBQREYpOiB7QGxpbmsgZXhwb3J0fVxuICogLSBlYXN5IGxvYWRpbmcgb2YgaGlzdG9yaWNhbCBydW5zXG4gKiAtIHJvdXRpbmdcbiAqIC0gZW50ZXJpbmcgdGhlIHJlYWwsIG1lYXN1cmVkIChhcyBvcHBvc2VkIHRvIHByZWRpY3RlZCkgdmFsdWVzIG1hbnVhbGx5XG4gKiAtIG5vdGlmaWNhdGlvbnMgZm9yIGNoYW5naW5nIGlucHV0cywgY29tcGxldGlvbiBvZiBjb21wdXRhdGlvbnMsIGV0Yzoge0BsaW5rIG9uSW5wdXRDaGFuZ2VkfVxuICogKi9cbmV4cG9ydCBjbGFzcyBDb21wdXRhdGlvblZpZXcgZXh0ZW5kcyBGdW5jdGlvblZpZXcge1xuICAvKiogRmluZCB0aGUgZnVuY3Rpb24gYnkgZnVsbHkgc3BlY2lmaWVkIG5hbWUsIGxpbmsgaXQgdG8gdGhlIHZpZXcgYW5kIGNvbnN0cnVjdHMgdGhlIHZpZXcuXG4gICAgKiBJZiBmdW5jdGlvbiBuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGNhbGxzIHtAbGluayBpbml0fSBhbmQge0BsaW5rIGJ1aWxkfSB3aXRob3V0IEZ1bmNDYWxsIGxpbmthZ2UuXG4gICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAqL1xuICBjb25zdHJ1Y3RvcihmdW5jTmFtZT86IHN0cmluZykge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoZ3Jvay5zaGVsbC5zdGFydFVyaSk7XG4gICAgY29uc3QgcnVuSWQgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnaWQnKTtcblxuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnBhcmVudENhbGwgPSBncm9rLmZ1bmN0aW9ucy5nZXRDdXJyZW50Q2FsbCgpO1xuICAgIHRoaXMucGFyZW50VmlldyA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCkucGFyZW50Q2FsbC5hdXhbJ3ZpZXcnXTtcbiAgICB0aGlzLmJhc2VQYXRoID0gYC8ke2dyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCk/LmZ1bmMubmFtZX1gO1xuXG4gICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMucm9vdCwgdHJ1ZSk7XG4gICAgaWYgKHJ1bklkKSB7XG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIGNvbnN0IHVybFJ1biA9IGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkUnVuKHJ1bklkKTtcbiAgICAgICAgdGhpcy5saW5rRnVuY2NhbGwodXJsUnVuKTtcbiAgICAgICAgdGhpcy5idWlsZCgpO1xuICAgICAgICBhd2FpdCB0aGlzLm9uQmVmb3JlTG9hZFJ1bigpO1xuICAgICAgICB0aGlzLmxpbmtGdW5jY2FsbCh1cmxSdW4pO1xuICAgICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJMb2FkUnVuKHVybFJ1bik7XG4gICAgICAgIHRoaXMuc2V0UnVuVmlld1JlYWRvbmx5KCk7XG4gICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIGZhbHNlKTtcbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZnVuY05hbWUpIHtcbiAgICAgICAgKGdyb2suZnVuY3Rpb25zLmV2YWwoZnVuY05hbWUpIGFzIFByb21pc2U8REcuRnVuYz4pLnRoZW4oYXN5bmMgKGZ1bmM6IERHLkZ1bmMpID0+IHtcbiAgICAgICAgICBjb25zdCBmdW5jY2FsbCA9IGZ1bmMucHJlcGFyZSh7fSk7XG4gICAgICAgICAgdGhpcy5saW5rRnVuY2NhbGwoZnVuY2NhbGwpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgICAgICAgIHRoaXMuYnVpbGQoKTtcbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMucm9vdCwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgICAgICAgIHRoaXMuYnVpbGQoKTtcbiAgICAgICAgICB0aGlzLmJ1aWxkUmliYm9uUGFuZWxzKCk7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMucm9vdCwgZmFsc2UpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogT3ZlcnJpZGUgdG8gY3VzdG9taXplIGdldHRpbmcgbW9ja3NcbiAgICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gICovXG4gIGdldE1vY2tzOiAoe21vY2tOYW1lOiBzdHJpbmcsIGFjdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPn1bXSkgfCBudWxsID0gbnVsbDtcblxuICAvKiogT3ZlcnJpZGUgdG8gY3VzdG9taXplIGdldHRpbmcgdGVtcGxhdGVzXG4gICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICAqL1xuICBnZXRUZW1wbGF0ZXM6ICh7bmFtZTogc3RyaW5nLCBhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD59W10pIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIE92ZXJyaWRlIHRvIGN1c3RvbWl6ZSBnZXR0aW5nIGhlbHAgZmVhdHVyZVxuICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgKi9cbiAgZ2V0SGVscDogKCgpID0+IFByb21pc2U8dm9pZD4pIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIE92ZXJyaWRlIHRvIGN1c3RvbWl6ZSBidWcgcmVwb3J0aW5nIGZlYXR1cmVcbiAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIHJlcG9ydEJ1ZzogKCgpID0+IFByb21pc2U8dm9pZD4pIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIExvb2tzIGZvciB7QGxpbmsgcmVwb3J0QnVnfSwge0BsaW5rIGdldEhlbHB9IGFuZCB7QGxpbmsgZXhwb3J0Q29uZmlnfSBtZW1iZXJzIGFuZCBjcmVhdGVzIG1vZGVsIG1lbnVzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIG92ZXJyaWRlIGJ1aWxkUmliYm9uTWVudSgpIHtcbiAgICBzdXBlci5idWlsZFJpYmJvbk1lbnUoKTtcblxuICAgIGlmICghdGhpcy5leHBvcnRDb25maWcgJiYgIXRoaXMucmVwb3J0QnVnICYmICF0aGlzLmdldEhlbHAgJiYgIXRoaXMuZ2V0TW9ja3MgJiYgIXRoaXMuZ2V0VGVtcGxhdGVzKSByZXR1cm47XG5cbiAgICBjb25zdCByaWJib25NZW51ID0gdGhpcy5yaWJib25NZW51Lmdyb3VwKCdNb2RlbCcpO1xuXG4gICAgaWYgKHRoaXMuZ2V0TW9ja3MgJiYgdGhpcy5nZXRNb2Nrcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodGhpcy5nZXRNb2Nrcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmliYm9uTWVudS5pdGVtKCdJbnB1dCBkYXRhIG1vY2snLCB0aGlzLmdldE1vY2tzWzBdLmFjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkYXRhR3JvdXAgPSByaWJib25NZW51Lmdyb3VwKCdJbnB1dCBkYXRhIG1vY2tzJyk7XG4gICAgICAgIHRoaXMuZ2V0TW9ja3MuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgZGF0YUdyb3VwLml0ZW0odmFsLm1vY2tOYW1lLCB2YWwuYWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJpYmJvbk1lbnUuZW5kR3JvdXAoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRUZW1wbGF0ZXMgJiYgdGhpcy5nZXRUZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMuZ2V0VGVtcGxhdGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByaWJib25NZW51Lml0ZW0oJ0lucHV0IGRhdGEgdGVtcGxhdGUnLCB0aGlzLmdldFRlbXBsYXRlc1swXS5hY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGF0YUdyb3VwID0gcmliYm9uTWVudS5ncm91cCgnSW5wdXQgZGF0YSB0ZW1wbGF0ZXMnKTtcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZXMuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgZGF0YUdyb3VwLml0ZW0odmFsLm5hbWUsIHZhbC5hY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmliYm9uTWVudS5lbmRHcm91cCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmV4cG9ydENvbmZpZyAmJiB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJpYmJvbk1lbnVcbiAgICAgICAgLmdyb3VwKCdFeHBvcnQnKVxuICAgICAgICAuaXRlbXModGhpcy5leHBvcnRDb25maWcuc3VwcG9ydGVkRm9ybWF0cywgYXN5bmMgKGZvcm1hdDogc3RyaW5nKSA9PiBERy5VdGlscy5kb3dubG9hZCh0aGlzLmV4cG9ydENvbmZpZyEuZmlsZW5hbWUoZm9ybWF0KSwgYXdhaXQgdGhpcy5leHBvcnRDb25maWchLmV4cG9ydChmb3JtYXQpKSlcbiAgICAgICAgLmVuZEdyb3VwKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVwb3J0QnVnKVxuICAgICAgcmliYm9uTWVudS5pdGVtKCdSZXBvcnQgYSBidWcnLCAoKSA9PiB0aGlzLnJlcG9ydEJ1ZyEoKSk7XG5cbiAgICBpZiAodGhpcy5nZXRIZWxwKVxuICAgICAgcmliYm9uTWVudS5pdGVtKCdIZWxwJywgKCkgPT4gdGhpcy5nZXRIZWxwISgpKTtcbiAgfVxufVxuIl19
@@ -246,7 +246,7 @@ export declare class FunctionView extends DG.ViewBase {
246
246
  private overlayDiv;
247
247
  private rootReadonlyEventListeners;
248
248
  private interactiveEventListeners;
249
- private setRunViewReadonly;
249
+ protected setRunViewReadonly(): void;
250
250
  private setRunViewEditable;
251
251
  /**
252
252
  * Loads all the function call of this function.
@@ -1 +1 @@
1
- {"version":3,"file":"function-view.d.ts","sourceRoot":"","sources":["function-view.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"function-view.d.ts","sourceRoot":"","sources":["function-view.ts"],"names":[],"mappings":"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"}
@@ -627,7 +627,7 @@ export class FunctionView extends DG.ViewBase {
627
627
  return ui.divV(historyCards);
628
628
  });
629
629
  const buildSharedList = () => ui.wait(() => __awaiter(this, void 0, void 0, function* () {
630
- const historicalRuns = yield historyUtils.pullRunsByName(this.func.name, filteringOptions);
630
+ const historicalRuns = yield historyUtils.pullRunsByName(this.func.name, [filteringOptions], { order: 'started' }, ['session.user', 'options']);
631
631
  const sharedRuns = historicalRuns.filter((run) => run.options['isShared']);
632
632
  if (sharedRuns.length > 0)
633
633
  return ui.wait(() => renderSharedCards(sharedRuns));
@@ -641,7 +641,7 @@ export class FunctionView extends DG.ViewBase {
641
641
  sharedListPane = mainAcc.addPane('Shared', () => buildSharedList(), isExpanded, favoritesListPane);
642
642
  };
643
643
  const buildFavoritesList = (filterOptions = {}) => ui.wait(() => __awaiter(this, void 0, void 0, function* () {
644
- const historicalRuns = yield historyUtils.pullRunsByName(this.func.name, filterOptions);
644
+ const historicalRuns = yield historyUtils.pullRunsByName(this.func.name, [filterOptions], { order: 'started' }, ['session.user', 'options']);
645
645
  const favoriteRuns = historicalRuns.filter((run) => run.options['isFavorite'] && !run.options['isImported']);
646
646
  if (favoriteRuns.length > 0)
647
647
  return ui.wait(() => renderFavoriteCards(favoriteRuns));
@@ -655,7 +655,7 @@ export class FunctionView extends DG.ViewBase {
655
655
  favoritesListPane = mainAcc.addPane('My favorites', () => buildFavoritesList(Object.assign(Object.assign({}, filteringOptions), { author: grok.shell.user })), isExpanded, historyPane);
656
656
  };
657
657
  const buildHistoryPane = (filterOptions = {}) => ui.wait(() => __awaiter(this, void 0, void 0, function* () {
658
- const historicalRuns = (yield historyUtils.pullRunsByName(this.func.name, filterOptions));
658
+ const historicalRuns = (yield historyUtils.pullRunsByName(this.func.name, [filterOptions], { order: 'started' }, ['session.user', 'options']));
659
659
  if (historicalRuns.length > 0)
660
660
  return ui.wait(() => renderHistoryCards(historicalRuns));
661
661
  else
@@ -1202,4 +1202,4 @@ const plotToSheet = (exportWb, sheet, plot, columnForImage, rowForImage = 0) =>
1202
1202
  ext: { width: canvas.width, height: canvas.height },
1203
1203
  });
1204
1204
  });
1205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLENBQUMsTUFBTSxVQUFVLENBQUM7QUFDekIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFN0I7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsRUFBRTtJQUNuQyxPQUFPLENBQUMsTUFBVyxFQUFFLFVBQWtCLEVBQUUsVUFBOEIsRUFBRSxFQUFFO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFFbEMsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFlLEdBQUcsSUFBVzs7Z0JBQzlDLElBQUk7b0JBQ0YsT0FBTyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7aUJBQzNDO2dCQUFDLE9BQU8sR0FBUSxFQUFFO29CQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBRSxHQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pDLE1BQU0sR0FBRyxDQUFDO2lCQUNYO1lBQ0gsQ0FBQztTQUFBLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDLENB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QUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUNsQyxHQUFHLEdBQUcsQ0FBQztLQUNYO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBTyxRQUEwQixFQUFFLEtBQXdCLEVBQUUsSUFBaUIsRUFBRSxjQUFzQixFQUFFLGNBQXNCLENBQUMsRUFBRSxFQUFFO0lBQ3JKLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLElBQW1CLEVBQUUsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDaEMsTUFBTSxFQUFFLE9BQU87UUFDZixTQUFTLEVBQUUsS0FBSztLQUNqQixDQUFDLENBQUM7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUN0QixFQUFFLEVBQUUsRUFBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUM7UUFDM0MsR0FBRyxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUM7S0FDbEQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xuaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQgJCBmcm9tICdjYXNoLWRvbSc7XG5pbXBvcnQge2hpc3RvcnlVdGlsc30gZnJvbSAnLi9oaXN0b3J5LXV0aWxzJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICAgKiBEZWNvcmF0b3IgdG8gcGFzcyBhbGwgdGhyb3duIGVycm9ycyB0byBncm9rLnNoZWxsLmVycm9yXG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuY2NhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjb25zdCBwYXNzRXJyb3JUb1NoZWxsID0gKCkgPT4ge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBtZW1iZXJOYW1lOiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gZGVzY3JpcHRvci52YWx1ZTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG9yaWdpbmFsLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBncm9rLnNoZWxsLmVycm9yKChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBJTlRFUkFDVElWRV9DU1NfQ0xBU1MgPSAnY3YtaW50ZXJhY3RpdmUnO1xuXG5leHBvcnQgdHlwZSBEYXRlT3B0aW9ucyA9ICdBbnkgdGltZScgfCAnVG9kYXknIHwgJ1llc3RlcmRheScgfCAnVGhpcyB3ZWVrJyB8ICdMYXN0IHdlZWsnIHwgJ1RoaXMgbW9udGgnIHwgJ0xhc3QgbW9udGgnIHwgJ1RoaXMgeWVhcicgfCAnTGFzdCB5ZWFyJztcblxuZXhwb3J0IHR5cGUgRmlsdGVyT3B0aW9ucyA9IHtcbiAgdGV4dD86IHN0cmluZyxcbiAgZGF0ZT86IERhdGVPcHRpb25zLFxuICBhdXRob3I/OiBERy5Vc2VyLFxuICBpc1NoYXJlZD86IGJvb2xlYW4sXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFVzZXJzSWRzID0ge1xuICAnVGVzdCc6ICdjYTFlNjcyZS1lM2JlLTQwZTAtYjc5Yi1kMmM2OGU2OGQzODAnLFxuICAnQWRtaW4nOiAnODc4YzQyYjAtOWE1MC0xMWU2LWM1MzctNmJmOGU5YWIwMmVlJyxcbiAgJ1N5c3RlbSc6ICczZTMyYzVmYS1hYzljLTRkMzktOGI0Yi00ZGIzZTU3NmIzYzMnLFxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRHcm91cHNJZHMgPSB7XG4gICdBbGwgdXNlcnMnOiAnYTRiNDU4NDAtOWE1MC0xMWU2LTljYzktODU0NmI4YmY2MmU2JyxcbiAgJ0RldmVsb3BlcnMnOiAnYmE5Y2QxOTEtOWE1MC0xMWU2LTljYzktOTEwYmY4MjdmMGFiJyxcbiAgJ05lZWQgdG8gY3JlYXRlJzogJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcsXG4gICdUZXN0JzogJ2NhMWU2NzJlLWUzYmUtNDBlMC1iNzliLTg1NDZiOGJmNjJlNicsXG4gICdBZG1pbic6ICdhNGI0NTg0MC05YTUwLTExZTYtYzUzNy02YmY4ZTlhYjAyZWUnLFxuICAnU3lzdGVtJzogJ2E0YjQ1ODQwLWFjOWMtNGQzOS04YjRiLTRkYjNlNTc2YjNjMycsXG4gICdBZG1pbmlzdHJhdG9ycyc6ICcxYWI4YjM4ZC05YzRlLTRiMWUtODFjMy1hZTJiZGUzZTEyYzUnLFxufTtcblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uVmlldyBleHRlbmRzIERHLlZpZXdCYXNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRleHQ6IERHLkNvbnRleHQ7XG4gIHByb3RlY3RlZCBfZnVuY0NhbGw/OiBERy5GdW5jQ2FsbDtcbiAgcHJvdGVjdGVkIF9sYXN0Q2FsbD86IERHLkZ1bmNDYWxsO1xuICBwcm90ZWN0ZWQgX3R5cGU6IHN0cmluZyA9ICdmdW5jdGlvbic7XG5cbiAgY29uc3RydWN0b3IoZnVuY0NhbGw/OiBERy5GdW5jQ2FsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5ib3ggPSB0cnVlO1xuICAgIHRoaXMuY29udGV4dCA9IERHLkNvbnRleHQuY2xvbmVEZWZhdWx0KCk7XG5cbiAgICBpZiAoIWZ1bmNDYWxsKSByZXR1cm47XG5cbiAgICB0aGlzLmJhc2VQYXRoID0gYC8ke2Z1bmNDYWxsLmZ1bmMubmFtZX1gO1xuICAgIHRoaXMubGlua0Z1bmNjYWxsKGZ1bmNDYWxsKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLmJ1aWxkKCk7XG4gICAgdGhpcy5uYW1lID0gZnVuY0NhbGwuZnVuYy5mcmllbmRseU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgZnVuY3Rpb24gY2FsbCBvZiB0aGUgdmlld1xuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmNjYWxsIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBnZXQgZnVuY0NhbGwoKTogREcuRnVuY0NhbGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mdW5jQ2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgRnVuYyBvZiB0aGUgdmlld1xuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmMgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgZ2V0IGZ1bmMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY0NhbGw/LmZ1bmM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRhdGEgb2YgbGFzdCBjYWxsIG9mIGFzc29jaWF0ZWQgZnVuY3Rpb25cbiAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmdW5jIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGdldCBsYXN0Q2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFzdENhbGw7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGRhdGEgb2YgbGFzdCBjYWxsIG9mIGFzc29jaWF0ZWQgZnVuY3Rpb25cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBzZXQgbGFzdENhbGwobGFzdENhbGw6IERHLkZ1bmNDYWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbGFzdENhbGwgPSBsYXN0Q2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaWV3IHR5cGVcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIC8qKiBFeHBvcnQgb3B0aW9ucy4gQ291bGQgYmUgb3ZlcnJpZGVuIHBhcnRpYWxseSwgdXNpbmcgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIG9wdGlvbi5cbiAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIGV4cG9ydENvbmZpZzoge1xuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBleHBvcnQgbG9naWMuXG4gICAgICAqXG4gICAgICAqICBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHtAbGluayBkZWZhdWx0RXhwb3J0fSBoZWF2aWx5IHJlbGllcyBvbiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgYnVpbGRJT30uXG4gICAgICAqIEByZXR1cm5zIEJsb2Igd2l0aCBkYXRhIHRvIGJlIGV4cG9ydGVkIGludG8gdGhlIGZpbGUuXG4gICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBleHBvcnQ6ICgoZm9ybWF0OiBzdHJpbmcpID0+IFByb21pc2U8QmxvYj4pO1xuXG5cbiAgICAvKiogRmlsZW5hbWUgZm9yIGV4cG9ydGVkIGZpbGVzLiBPdmVycmlkZSBmb3IgY3VzdG9tIGZpbGVuYW1lcy5cbiAgICAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB7QGxpbmsgZGVmYXVsdEV4cG9ydEZpbGVuYW1lfVxuICAgICAgKiBAcGFyYW0gZm9ybWF0IEZvcm1hdCBuYW1lIHRvIGJlIGV4cG9ydGVkXG4gICAgICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZmlsZW5hbWUgdG8gYmUgdXNlZCBmb3IgdGhlIGdlbmVyYXRlZCBmaWxlLlxuICAgICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAgICovXG4gICAgZmlsZW5hbWU6ICgoZm9ybWF0OiBzdHJpbmcpID0+IHN0cmluZyk7XG5cbiAgICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBjdXN0b20gbGlzdCBvZiBzdXBwb3J0ZWQgZXhwb3J0IGZvcm1hdHMuXG4gICAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB7QGxpbmsgZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEZvcm1hdHN9XG4gICAgICogVGhlc2UgZm9ybWF0cyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBcIkV4cG9ydFwiIHBvcHVwIG9uIHRoZSByaWJib24gcGFuZWwuXG4gICAgICogQHJldHVybnMgVGhlIGFycmF5IG9mIGZvcm1hdHMgYXZhaWxhYmxlIGZvciB0aGUgZXhwb3J0LlxuICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBzdXBwb3J0ZWRGb3JtYXRzOiBzdHJpbmdbXTtcblxuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBmaWxlIGV4dGVuc2lvbnMgZm9yIGV4cG9ydGVkIGZvcm1hdHMuXG4gICAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9uc31cbiAgICAgICAqIFRoZXNlIGV4dGVuc2lvbnMgYXJlIHVzZWQgaW4gZmlsZW5hbWVzIHtAbGluayBleHBvcnRGaWxlbmFtZX0uXG4gICAgICAgKiBAcmV0dXJucyBUaGUgbWFwcGluZyBiZXR3ZWVuIHN1cHBvcnRlZCBleHBvcnQgZm9ybWF0cyBhbmQgdGhlaXIgZXh0ZW5zaW9ucy5cbiAgICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgICovXG4gICAgc3VwcG9ydGVkRXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBMaW5rIEZ1bmNDYWxsIHRvIHRoZSB2aWV3XG4gICAqIEBwYXJhbSBmdW5jQ2FsbCBUaGUgYWN0dWFsIGZ1bmNjYWxsIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBsaW5rRnVuY2NhbGwoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7XG4gICAgY29uc3QgaXNQcmV2aW91c0hpc3RvcmljYWwgPSB0aGlzLl9mdW5jQ2FsbD8ub3B0aW9uc1snaXNIaXN0b3JpY2FsJ107XG4gICAgdGhpcy5fZnVuY0NhbGwgPSBmdW5jQ2FsbDtcblxuICAgIGlmIChmdW5jQ2FsbC5vcHRpb25zWydpc0hpc3RvcmljYWwnXSkge1xuICAgICAgaWYgKCFpc1ByZXZpb3VzSGlzdG9yaWNhbCkge1xuICAgICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLm5hbWV9IOKAlCAke2Z1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSl9YDtcbiAgICAgICAgdGhpcy5zZXRSdW5WaWV3UmVhZG9ubHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZS5zdWJzdHJpbmcoMCwgdGhpcy5uYW1lLmluZGV4T2YoJyDigJQgJykpfSDigJQgJHtmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID8/IG5ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pfWA7XG4gICAgICB9XG5cbiAgICAgIC8vIEZJWCBNRTogdmlldyBuYW1lIGRvZXMgbm90IGNoYW5nZSBpbiBtb2RlbHNcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5kNC1yaWJib24tbmFtZScpPy5yZXBsYWNlQ2hpbGRyZW4odWkuc3BhbihbdGhpcy5uYW1lXSkpO1xuICAgICAgdGhpcy5wYXRoID0gYD9pZD0ke3RoaXMuX2Z1bmNDYWxsLmlkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0UnVuVmlld0VkaXRhYmxlKCk7XG4gICAgICB0aGlzLnBhdGggPSBgYDtcblxuICAgICAgaWYgKGlzUHJldmlvdXNIaXN0b3JpY2FsKVxuICAgICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLm5hbWUuc3Vic3RyaW5nKDAsIHRoaXMubmFtZS5pbmRleE9mKCcg4oCUICcpKX1gO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUmliYm9uUGFuZWxzKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIGZvciBjdXN0b20gbG9naWMgdGhhdCBjb3VsZCBub3QgYmUgcGxhY2VkIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICogQW55IGFzeW5jIG1ldGhvZHMgYW5kIG1vc3Qgb2YgdGhlIGxvZ2ljIHNob3VsZCBiZSBwbGFjZWQgaGVyZS5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgaW5pdCgpIHtcbiAgICBpZiAodGhpcy5mdW5jQ2FsbCAmJiB0aGlzLmZ1bmMpIHtcbiAgICAgIHRoaXMuZnVuY0NhbGwuYXV4Wyd2aWV3J10gPSB0aGlzO1xuICAgICAgdGhpcy5mdW5jQ2FsbC5jb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgICBmb3IgKGNvbnN0IGluUGFyYW0gb2Ygd3UodGhpcy5mdW5jQ2FsbC5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAgIC5maWx0ZXIoKHA6IERHLkZ1bmNDYWxsUGFyYW0pID0+XG4gICAgICAgICAgcC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIHAucHJvcGVydHkub3B0aW9uc1sndmlld2VyJ10gIT0gbnVsbCkpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goaW5QYXJhbS5vbkNoYW5nZWQuc3Vic2NyaWJlKGFzeW5jIChwYXJhbTogREcuRnVuY0NhbGxQYXJhbSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2xlYXJSZXN1bHRzKGZhbHNlKTtcbiAgICAgICAgICBwYXJhbS5wcm9jZXNzT3V0cHV0KCk7XG5cbiAgICAgICAgICB0aGlzLmFwcGVuZE91dHB1dERmKHBhcmFtLCB7XG4gICAgICAgICAgICBoZWlnaHQ6IDQwMCxcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnSW5wdXQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgZnVsbHkgY3VzdG9tIFVJIGluY2x1ZGluZyByaWJib24gbWVudXMgYW5kIHBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5idWlsZElPKCkpO1xuICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLm92ZXJsYXlEaXYpO1xuXG4gICAgdGhpcy5idWlsZEhpc3RvcnlCbG9jaygpO1xuICAgIHRoaXMuYnVpbGRSaWJib25NZW51KCk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIGlucHV0LW91dHB1dCBibG9ja1xuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCB3aG9sZSBVSSBleGNsdWRpbmcgcmliYm9uIG1lbnVzIGFuZCBwYW5lbHNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRJTygpOiBIVE1MRWxlbWVudCB7XG4gICAgdGhpcy5leHBvcnRDb25maWcgPSB7XG4gICAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zKCksXG4gICAgICBzdXBwb3J0ZWRGb3JtYXRzOiB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRGb3JtYXRzKCksXG4gICAgICBleHBvcnQ6IHRoaXMuZGVmYXVsdEV4cG9ydCxcbiAgICAgIGZpbGVuYW1lOiB0aGlzLmRlZmF1bHRFeHBvcnRGaWxlbmFtZSxcbiAgICB9O1xuXG4gICAgY29uc3QgaW5wdXRCbG9jayA9IHRoaXMuYnVpbGRJbnB1dEJsb2NrKCk7XG4gICAgY29uc3Qgb3V0cHV0QmxvY2sgPSB0aGlzLmJ1aWxkT3V0cHV0QmxvY2soKTtcblxuICAgIHJldHVybiB1aS5zcGxpdEgoW2lucHV0QmxvY2ssIG91dHB1dEJsb2NrXSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaW5wdXQgYmxvY2tcbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaW5wdXQgYmxvY2sgVUkgb24gdGhlIGxlZnQgc2lkZSBieSBkZWZhdWx0XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkSW5wdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmZ1bmNDYWxsKSByZXR1cm4gdGhpcy5jb250cm9sc1Jvb3Q7XG5cbiAgICBjb25zdCBmdW5jRGl2ID0gdWkuZGl2KFt0aGlzLnJlbmRlclJ1blNlY3Rpb24odGhpcy5mdW5jQ2FsbCldLCAndWktZGl2Jyk7XG4gICAgdWkuZW1wdHkodGhpcy5jb250cm9sc1Jvb3QpO1xuICAgIHRoaXMuY29udHJvbHNSb290LmFwcGVuZENoaWxkKGZ1bmNEaXYpO1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xzUm9vdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gb3V0cHV0IGJsb2NrLlxuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCBpbnB1dCBibG9jayBVSSBvbiB0aGUgbGVmdCBzaWRlIGJ5IGRlZmF1bHRcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRPdXRwdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgdWkuZW1wdHkodGhpcy5yZXN1bHRzUm9vdCk7XG4gICAgdGhpcy5yZXN1bHRzUm9vdC5hcHBlbmRDaGlsZCh0aGlzLnJlc3VsdHNEaXYpO1xuICAgIHJldHVybiB0aGlzLnJlc3VsdHNSb290O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBoaXN0b3JpY2FsIHJ1bnMgY29udHJvbC5cbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaGlzdG9yeSBibG9jayBVSVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZEhpc3RvcnlCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgbWFpbkFjYyA9IHVpLmFjY29yZGlvbigpO1xuICAgIG1haW5BY2Mucm9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBtYWluQWNjLmFkZFRpdGxlKHVpLnNwYW4oWydIaXN0b3J5J10pKTtcblxuICAgIGNvbnN0IGZpbHRlcmluZ09wdGlvbnM6IEZpbHRlck9wdGlvbnMgPSB7fTtcbiAgICBjb25zdCBmaWx0ZXJpbmdUZXh0ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0IGJ1aWxkRmlsdGVyUGFuZSA9ICgpID0+IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGV4dElucHV0ID0gdWkuc3RyaW5nSW5wdXQoJ1NlYXJjaCcsICcnLCAodjogc3RyaW5nKSA9PiBmaWx0ZXJpbmdUZXh0Lm5leHQodikpO1xuICAgICAgREcuZGVib3VuY2UoZmlsdGVyaW5nVGV4dC5hc09ic2VydmFibGUoKSwgNjAwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBmaWx0ZXJpbmdPcHRpb25zLnRleHQgPSB0ZXh0SW5wdXQuc3RyaW5nVmFsdWU7XG4gICAgICAgIHVwZGF0ZVNoYXJlZFBhbmUoKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0ZUlucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ0RhdGUgc3RhcnRlZCcsICdBbnkgdGltZScsIFsnQW55IHRpbWUnLCAnVG9kYXknLCAnWWVzdGVyZGF5JywgJ1RoaXMgd2VlaycsICdMYXN0IHdlZWsnLCAnVGhpcyBtb250aCcsICdMYXN0IG1vbnRoJywgJ1RoaXMgeWVhcicsICdMYXN0IHllYXInXSwgKHY6IERhdGVPcHRpb25zKSA9PiB7XG4gICAgICAgIGZpbHRlcmluZ09wdGlvbnMuZGF0ZSA9IHY7XG4gICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKGZpbHRlcmluZ09wdGlvbnMpO1xuICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgIHVwZGF0ZVNoYXJlZFBhbmUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkZWZhdWx0VXNlcnMgPSBPYmplY3QudmFsdWVzKGRlZmF1bHRVc2Vyc0lkcyk7XG4gICAgICBjb25zdCBhbGxVc2VycyA9IGF3YWl0IGdyb2suZGFwaS51c2Vycy5saXN0KCk7XG4gICAgICBjb25zdCBmaWx0ZXJlZFVzZXJzID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyKSA9PiAhZGVmYXVsdFVzZXJzLmluY2x1ZGVzKHVzZXIuaWQpKTtcblxuICAgICAgY29uc3QgYXV0aG9ySW5wdXQgPSB1aS5jaG9pY2VJbnB1dDxERy5Vc2VyIHwgc3RyaW5nPignQXV0aG9yJywgJ0FueW9uZScsIFsnQW55b25lJywgLi4uZmlsdGVyZWRVc2Vyc10sICh2OiBERy5Vc2VyIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgIGZpbHRlcmluZ09wdGlvbnMuYXV0aG9yID0gKHYgPT09ICdBbnlvbmUnKSA/IHVuZGVmaW5lZCA6IHYgYXMgREcuVXNlcjtcbiAgICAgICAgdXBkYXRlU2hhcmVkUGFuZSgpO1xuICAgICAgfSk7XG4gICAgICBkYXRlSW5wdXQuYWRkUGF0dGVybk1lbnUoJ2RhdGV0aW1lJyk7XG4gICAgICBjb25zdCBmb3JtID0gdWkuZGl2VihbXG4gICAgICAgIHRleHRJbnB1dCxcbiAgICAgICAgZGF0ZUlucHV0LFxuICAgICAgICBhdXRob3JJbnB1dCxcbiAgICAgIF0sICd1aS1mb3JtLWNvbmRlbnNlZCB1aS1mb3JtJyk7XG4gICAgICBmb3JtLnN0eWxlLm1hcmdpbkxlZnQgPSAnMHB4JztcblxuICAgICAgcmV0dXJuIGZvcm07XG4gICAgfSk7XG4gICAgbGV0IGZpbHRlclBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ0ZpbHRlcicsIGJ1aWxkRmlsdGVyUGFuZSk7XG4gICAgY29uc3QgdXBkYXRlRmlsdGVyUGFuZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBmaWx0ZXJQYW5lLmV4cGFuZGVkO1xuICAgICAgbWFpbkFjYy5yZW1vdmVQYW5lKGZpbHRlclBhbmUpO1xuICAgICAgZmlsdGVyUGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnRmlsdGVyJywgYnVpbGRGaWx0ZXJQYW5lLCBpc0V4cGFuZGVkLCBmYXZvcml0ZXNMaXN0UGFuZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dBZGRUb0Zhdm9yaXRlc0RpYWxvZyA9IChmdW5jQ2FsbDogREcuRnVuY0NhbGwpID0+IHtcbiAgICAgIGxldCB0aXRsZSA9IGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gJyc7XG4gICAgICBsZXQgYW5ub3RhdGlvbiA9IGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA/PyAnJztcbiAgICAgIGNvbnN0IHRpdGxlSW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnVGl0bGUnLCB0aXRsZSwgKHM6IHN0cmluZykgPT4ge1xuICAgICAgICB0aXRsZSA9IHM7XG4gICAgICAgIGlmIChzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRpdGxlSW5wdXQuc2V0VG9vbHRpcCgnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aXRsZUlucHV0LmlucHV0LmNsYXNzTGlzdC5hZGQoJ2Q0LWludmFsaWQnKSwgMTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aXRsZUlucHV0LnNldFRvb2x0aXAoJycpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGl0bGVJbnB1dC5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdkNC1pbnZhbGlkJyksIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB1aS5kaWFsb2coe3RpdGxlOiAnQWRkIHRvIGZhdm9yaXRlcyd9KVxuICAgICAgICAuYWRkKHVpLmZvcm0oW1xuICAgICAgICAgIHRpdGxlSW5wdXQsXG4gICAgICAgICAgdWkuc3RyaW5nSW5wdXQoJ0Fubm90YXRpb24nLCBhbm5vdGF0aW9uLCAoczogc3RyaW5nKSA9PiB7IGFubm90YXRpb24gPSBzOyB9KSxcbiAgICAgICAgXSkpXG4gICAgICAgIC5vbk9LKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAodGl0bGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA9IHRpdGxlO1xuICAgICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddID0gYW5ub3RhdGlvbjtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUnVuVG9GYXZvcml0ZXMoZnVuY0NhbGwpO1xuICAgICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICAgIHVwZGF0ZUZhdm9yaXRlc1BhbmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdUaXRsZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvd0RlbGV0ZVJ1bkRpYWxvZyA9IChmdW5jQ2FsbDogREcuRnVuY0NhbGwpID0+IHtcbiAgICAgIHVpLmRpYWxvZyh7dGl0bGU6ICdEZWxldGUgcnVuJ30pXG4gICAgICAgIC5hZGQodWkuZGl2VGV4dCgnVGhlIGRlbGV0ZWQgcnVuIGlzIGltcG9zc2libGUgdG8gcmVzdG9yZS4gQXJlIHlvdSBzdXJlPycpKVxuICAgICAgICAub25PSyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVSdW4oZnVuY0NhbGwpO1xuICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvd0FkZFRvU2hhcmVkRGlhbG9nID0gKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkgPT4ge1xuICAgICAgbGV0IHRpdGxlID0gZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyAnJztcbiAgICAgIGxldCBhbm5vdGF0aW9uID0gZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddID8/ICcnO1xuICAgICAgY29uc3QgdGl0bGVJbnB1dCA9IHVpLnN0cmluZ0lucHV0KCdUaXRsZScsIHRpdGxlLCAoczogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRpdGxlID0gcztcbiAgICAgICAgaWYgKHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGl0bGVJbnB1dC5zZXRUb29sdGlwKCdUaXRsZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRpdGxlSW5wdXQuaW5wdXQuY2xhc3NMaXN0LmFkZCgnZDQtaW52YWxpZCcpLCAxMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRpdGxlSW5wdXQuc2V0VG9vbHRpcCgnJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aXRsZUlucHV0LmlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Q0LWludmFsaWQnKSwgMTAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHVpLmRpYWxvZyh7dGl0bGU6ICdBZGQgdG8gc2hhcmVkJ30pXG4gICAgICAgIC5hZGQodWkuZm9ybShbXG4gICAgICAgICAgdGl0bGVJbnB1dCxcbiAgICAgICAgICB1aS5zdHJpbmdJbnB1dCgnQW5ub3RhdGlvbicsIGFubm90YXRpb24sIChzOiBzdHJpbmcpID0+IHsgYW5ub3RhdGlvbiA9IHM7IH0pLFxuICAgICAgICBdKSlcbiAgICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aXRsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmdW5jQ2FsbCA9IGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkUnVuKGZ1bmNDYWxsLmlkKTtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPSB0aXRsZTtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA9IGFubm90YXRpb247XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJ1blRvU2hhcmVkKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgICAgICB1cGRhdGVTaGFyZWRQYW5lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZygnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlfSk7XG4gICAgfTtcblxuICAgIGxldCBoaXN0b3J5Q2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGxldCBmYXZvcml0ZUNhcmRzID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBsZXQgc2hhcmVkQ2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGNvbnN0IHJlbmRlckZhdm9yaXRlQ2FyZHMgPSBhc3luYyAoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSA9PiB7XG4gICAgICBmYXZvcml0ZUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHtcbiAgICAgICAgY29uc3QgdW5zdGFySWNvbiA9IHVpLmljb25GQSgnc3RhcicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmdW5jQ2FsbCk7XG4gICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgIH0sICdVbmZhdm9yaXRlIHRoZSBydW4nKTtcbiAgICAgICAgdW5zdGFySWNvbi5jbGFzc0xpc3QuYWRkKCdmYXMnKTtcblxuICAgICAgICBjb25zdCBzaGFyZUljb24gPSB1aS5pY29uRkEoJ2V5ZScsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHNob3dBZGRUb1NoYXJlZERpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgIH0sICdBZGQgdG8gc2hhcmVkJyk7XG4gICAgICAgIHNoYXJlSWNvbi5jbGFzc0xpc3QuYWRkKCdmYWwnKTtcblxuICAgICAgICBjb25zdCBjYXJkID0gdWkuZGl2SChbXG4gICAgICAgICAgdWkuZGl2VihbXG4gICAgICAgICAgICB1aS5kaXZUZXh0KGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gJ0RlZmF1bHQgdGl0bGUnLCAndGl0bGUnKSxcbiAgICAgICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10pID8gW3VpLmRpdlRleHQoZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddLCAnZGVzY3JpcHRpb24nKV06IFtdLFxuICAgICAgICAgICAgdWkuZGl2SChbdWkucmVuZGVyKGZ1bmNDYWxsLmF1dGhvciksIHVpLnNwYW4oW25ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pXSwgJ2RhdGUnKV0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgc2hhcmVJY29uLFxuICAgICAgICAgICAgdWkuaWNvbkZBKCdwZW4nLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHNob3dBZGRUb0Zhdm9yaXRlc0RpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgICAgICB9LCAnRWRpdCBydW4gbWV0YWRhdGEnKSxcbiAgICAgICAgICAgIHVuc3Rhckljb25cbiAgICAgICAgICBdLCAnY3YtZnVuY2NhbGwtY2FyZC1pY29ucycpXG4gICAgICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkJyk7XG5cbiAgICAgICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy5yb290LCB0cnVlKTtcbiAgICAgICAgICB0aGlzLmxpbmtGdW5jY2FsbChhd2FpdCB0aGlzLmxvYWRSdW4oZnVuY0NhbGwuaWQpKTtcbiAgICAgICAgICBjYXJkLmNsYXNzTGlzdC5hZGQoJ2NsaWNrZWQnKTtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy5yb290LCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2FyZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhbGxDYXJkcyA9IFsuLi5oaXN0b3J5Q2FyZHMsIC4uLmZhdm9yaXRlQ2FyZHMsIC4uLnNoYXJlZENhcmRzXTtcbiAgICAgIGFsbENhcmRzLmZvckVhY2goKGNhcmQpID0+IGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBhbGxDYXJkcy5mb3JFYWNoKChjKSA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ2NsaWNrZWQnKSkpKTtcblxuICAgICAgcmV0dXJuIHVpLmRpdlYoZmF2b3JpdGVDYXJkcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlclNoYXJlZENhcmRzID0gYXN5bmMgKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkgPT4ge1xuICAgICAgc2hhcmVkQ2FyZHMgPSBmdW5jQ2FsbHMubWFwKChmdW5jQ2FsbCkgPT4ge1xuICAgICAgICBjb25zdCB1bnNoYXJlSWNvbiA9IHVpLmljb25GQSgnZXllLXNsYXNoJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVSdW5Gcm9tU2hhcmVkKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1cGRhdGVIaXN0b3J5UGFuZSgpO1xuICAgICAgICAgIHVwZGF0ZVNoYXJlZFBhbmUoKTtcbiAgICAgICAgfSwgJ0hpZGUgZnJvbSBzaGFyZWQnKTtcblxuICAgICAgICBjb25zdCBjYXJkID0gdWkuZGl2SChbXG4gICAgICAgICAgdWkuZGl2VihbXG4gICAgICAgICAgICB1aS5kaXZUZXh0KGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gJ0RlZmF1bHQgdGl0bGUnLCAndGl0bGUnKSxcbiAgICAgICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10pID8gW3VpLmRpdlRleHQoZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddLCAnZGVzY3JpcHRpb24nKV06IFtdLFxuICAgICAgICAgICAgdWkuZGl2SChbdWkucmVuZGVyKGZ1bmNDYWxsLmF1dGhvciksIHVpLnNwYW4oW25ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pXSwgJ2RhdGUnKV0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgdWkuaWNvbkZBKCdsaW5rJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufSR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfT9pZD0ke2Z1bmNDYWxsLmlkfWApO1xuICAgICAgICAgICAgfSwgJ0NvcHkgbGluayB0byB0aGUgcnVuJyksXG4gICAgICAgICAgICAuLi4oZnVuY0NhbGwuYXV0aG9yLmlkID09PSBncm9rLnNoZWxsLnVzZXIuaWQpID8gW1xuICAgICAgICAgICAgICB1aS5pY29uRkEoJ3BlbicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHNob3dBZGRUb1NoYXJlZERpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgICAgICAgIH0sICdFZGl0IHJ1biBtZXRhZGF0YScpLFxuICAgICAgICAgICAgICB1bnNoYXJlSWNvbl06IFtdLFxuICAgICAgICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkLWljb25zJylcbiAgICAgICAgXSwgJ2N2LWZ1bmNjYWxsLWNhcmQnKTtcblxuICAgICAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIHRoaXMubGlua0Z1bmNjYWxsKGF3YWl0IHRoaXMubG9hZFJ1bihmdW5jQ2FsbC5pZCkpO1xuICAgICAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZCgnY2xpY2tlZCcpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYXJkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFsbENhcmRzID0gWy4uLmhpc3RvcnlDYXJkcywgLi4uZmF2b3JpdGVDYXJkcywgLi4uc2hhcmVkQ2FyZHNdO1xuICAgICAgYWxsQ2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4gY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGFsbENhcmRzLmZvckVhY2goKGMpID0+IGMuY2xhc3NMaXN0LnJlbW92ZSgnY2xpY2tlZCcpKSkpO1xuXG4gICAgICByZXR1cm4gdWkuZGl2VihzaGFyZWRDYXJkcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckhpc3RvcnlDYXJkcyA9IGFzeW5jIChmdW5jQ2FsbHM6IERHLkZ1bmNDYWxsW10pID0+IHtcbiAgICAgIGhpc3RvcnlDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IGljb24gPSBmdW5jQ2FsbC5hdXRob3IucGljdHVyZSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWNvbi5zdHlsZS53aWR0aCA9ICcyNXB4JztcbiAgICAgICAgaWNvbi5zdHlsZS5oZWlnaHQgPSAnMjVweCc7XG4gICAgICAgIGljb24uc3R5bGUuZm9udFNpemUgPSAnMjBweCc7XG4gICAgICAgIGljb24uc3R5bGUubWFyZ2luUmlnaHQgPSAnM3B4JztcbiAgICAgICAgaWNvbi5zdHlsZS5hbGlnblNlbGYgPSAnY2VudGVyJztcbiAgICAgICAgY29uc3QgdXNlckxhYmVsID0gdWkubGFiZWwoZnVuY0NhbGwuYXV0aG9yLmZyaWVuZGx5TmFtZSwgJ2Q0LWxpbmstbGFiZWwnKTtcbiAgICAgICAgdWkuYmluZChmdW5jQ2FsbC5hdXRob3IsIGljb24pO1xuXG4gICAgICAgIGNvbnN0IHNoYXJlSWNvbiA9IHVpLmljb25GQSgnZXllJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgc2hvd0FkZFRvU2hhcmVkRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgfSwgJ0FkZCB0byBzaGFyZWQnKTtcbiAgICAgICAgc2hhcmVJY29uLmNsYXNzTGlzdC5hZGQoJ2ZhbCcpO1xuXG4gICAgICAgIGNvbnN0IHVuc2hhcmVJY29uID0gdWkuaWNvbkZBKCdleWUtc2xhc2gnLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZVJ1bkZyb21TaGFyZWQoZnVuY0NhbGwpO1xuICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgICAgdXBkYXRlU2hhcmVkUGFuZSgpO1xuICAgICAgICB9LCAnSGlkZSBmcm9tIHNoYXJlZCcpO1xuXG4gICAgICAgIGNvbnN0IHVuc3RhciA9IHVpLmljb25GQSgnc3RhcicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmdW5jQ2FsbCk7XG4gICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgIH0sICdVbmZhdm9yaXRlIHRoZSBydW4nKTtcbiAgICAgICAgdW5zdGFyLmNsYXNzTGlzdC5hZGQoJ2ZhcycpO1xuXG4gICAgICAgIGNvbnN0IGNhcmQgPSB1aS5kaXZIKFtcbiAgICAgICAgICB1aS5kaXZIKFtcbiAgICAgICAgICAgIGljb24sXG4gICAgICAgICAgICB1aS5kaXZWKFtcbiAgICAgICAgICAgICAgdXNlckxhYmVsLFxuICAgICAgICAgICAgICB1aS5zcGFuKFtuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KV0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICB1aS5kaXZIKFtcbiAgICAgICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddKSA/IFt1bnNoYXJlSWNvbl06IFtzaGFyZUljb25dLFxuICAgICAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSkgPyBbdW5zdGFyXSA6IFt1aS5pY29uRkEoJ3N0YXInLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHNob3dBZGRUb0Zhdm9yaXRlc0RpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgICAgICB9LCAnQWRkIHRvIGZhdm9yaXRlcycpXSxcbiAgICAgICAgICAgIHVpLmljb25GQSgndHJhc2gtYWx0JywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBzaG93RGVsZXRlUnVuRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIH0sICdEZWxldGUgdGhlIHJ1bicpLFxuICAgICAgICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkLWljb25zJylcbiAgICAgICAgXSwgJ2N2LWZ1bmNjYWxsLWNhcmQnKTtcblxuICAgICAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIHRoaXMubGlua0Z1bmNjYWxsKGF3YWl0IHRoaXMubG9hZFJ1bihmdW5jQ2FsbC5pZCkpO1xuICAgICAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZCgnY2xpY2tlZCcpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNhcmQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWxsQ2FyZHMgPSBbLi4uaGlzdG9yeUNhcmRzLCAuLi5mYXZvcml0ZUNhcmRzLCAuLi5zaGFyZWRDYXJkc107XG4gICAgICBhbGxDYXJkcy5mb3JFYWNoKChjYXJkKSA9PiBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gYWxsQ2FyZHMuZm9yRWFjaCgoYykgPT4gYy5jbGFzc0xpc3QucmVtb3ZlKCdjbGlja2VkJykpKSk7XG5cbiAgICAgIHJldHVybiB1aS5kaXZWKGhpc3RvcnlDYXJkcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkU2hhcmVkTGlzdCA9ICgpID0+IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaGlzdG9yaWNhbFJ1bnMgPSBhd2FpdCBoaXN0b3J5VXRpbHMucHVsbFJ1bnNCeU5hbWUodGhpcy5mdW5jIS5uYW1lLCBmaWx0ZXJpbmdPcHRpb25zKTtcbiAgICAgIGNvbnN0IHNoYXJlZFJ1bnMgPSBoaXN0b3JpY2FsUnVucy5maWx0ZXIoKHJ1bikgPT4gcnVuLm9wdGlvbnNbJ2lzU2hhcmVkJ10pO1xuICAgICAgaWYgKHNoYXJlZFJ1bnMubGVuZ3RoID4gMClcbiAgICAgICAgcmV0dXJuIHVpLndhaXQoKCkgPT4gcmVuZGVyU2hhcmVkQ2FyZHMoc2hhcmVkUnVucykpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgbWFya2VkIGFzIHNoYXJlZCcsICdkZXNjcmlwdGlvbicpO1xuICAgIH0pO1xuICAgIGxldCBzaGFyZWRMaXN0UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnU2hhcmVkJywgKCkgPT4gYnVpbGRTaGFyZWRMaXN0KCksIHRydWUpO1xuICAgIGNvbnN0IHVwZGF0ZVNoYXJlZFBhbmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpc0V4cGFuZGVkID0gc2hhcmVkTGlzdFBhbmUuZXhwYW5kZWQ7XG4gICAgICBtYWluQWNjLnJlbW92ZVBhbmUoc2hhcmVkTGlzdFBhbmUpO1xuICAgICAgc2hhcmVkTGlzdFBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ1NoYXJlZCcsICgpID0+IGJ1aWxkU2hhcmVkTGlzdCgpLCBpc0V4cGFuZGVkLCBmYXZvcml0ZXNMaXN0UGFuZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkRmF2b3JpdGVzTGlzdCA9IChmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30pID0+IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaGlzdG9yaWNhbFJ1bnMgPSBhd2FpdCBoaXN0b3J5VXRpbHMucHVsbFJ1bnNCeU5hbWUodGhpcy5mdW5jIS5uYW1lLCBmaWx0ZXJPcHRpb25zKTtcbiAgICAgIGNvbnN0IGZhdm9yaXRlUnVucyA9IGhpc3RvcmljYWxSdW5zLmZpbHRlcigocnVuKSA9PiBydW4ub3B0aW9uc1snaXNGYXZvcml0ZSddICYmICFydW4ub3B0aW9uc1snaXNJbXBvcnRlZCddKTtcbiAgICAgIGlmIChmYXZvcml0ZVJ1bnMubGVuZ3RoID4gMClcbiAgICAgICAgcmV0dXJuIHVpLndhaXQoKCkgPT4gcmVuZGVyRmF2b3JpdGVDYXJkcyhmYXZvcml0ZVJ1bnMpKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHVpLmRpdlRleHQoJ05vIHJ1bnMgYXJlIG1hcmtlZCBhcyBmYXZvcml0ZXMnLCAnZGVzY3JpcHRpb24nKTtcbiAgICB9KTtcbiAgICBsZXQgZmF2b3JpdGVzTGlzdFBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ015IGZhdm9yaXRlcycsICgpID0+IGJ1aWxkRmF2b3JpdGVzTGlzdCh7XG4gICAgICAuLi5maWx0ZXJpbmdPcHRpb25zLFxuICAgICAgYXV0aG9yOiBncm9rLnNoZWxsLnVzZXJcbiAgICB9KSwgdHJ1ZSk7XG4gICAgY29uc3QgdXBkYXRlRmF2b3JpdGVzUGFuZSA9IChmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBmYXZvcml0ZXNMaXN0UGFuZS5leHBhbmRlZDtcbiAgICAgIG1haW5BY2MucmVtb3ZlUGFuZShmYXZvcml0ZXNMaXN0UGFuZSk7XG4gICAgICBmYXZvcml0ZXNMaXN0UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnTXkgZmF2b3JpdGVzJywgKCkgPT4gYnVpbGRGYXZvcml0ZXNMaXN0KHtcbiAgICAgICAgLi4uZmlsdGVyaW5nT3B0aW9ucyxcbiAgICAgICAgYXV0aG9yOiBncm9rLnNoZWxsLnVzZXJcbiAgICAgIH0pLCBpc0V4cGFuZGVkLCBoaXN0b3J5UGFuZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkSGlzdG9yeVBhbmUgPSAoZmlsdGVyT3B0aW9uczogRmlsdGVyT3B0aW9ucyA9IHt9KSA9PiB1aS53YWl0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGhpc3RvcmljYWxSdW5zID0gKGF3YWl0IGhpc3RvcnlVdGlscy5wdWxsUnVuc0J5TmFtZSh0aGlzLmZ1bmMhLm5hbWUsIGZpbHRlck9wdGlvbnMpKTtcbiAgICAgIGlmIChoaXN0b3JpY2FsUnVucy5sZW5ndGggPiAwKVxuICAgICAgICByZXR1cm4gdWkud2FpdCgoKSA9PiByZW5kZXJIaXN0b3J5Q2FyZHMoaGlzdG9yaWNhbFJ1bnMpKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHVpLmRpdlRleHQoJ05vIHJ1bnMgYXJlIGZvdW5kIGluIGhpc3RvcnknLCAnZGVzY3JpcHRpb24nKTtcbiAgICB9KTtcbiAgICBsZXQgaGlzdG9yeVBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ015IGhpc3RvcnknLCAoKSA9PiBidWlsZEhpc3RvcnlQYW5lKHtcbiAgICAgIC4uLmZpbHRlcmluZ09wdGlvbnMsXG4gICAgICBhdXRob3I6IGdyb2suc2hlbGwudXNlclxuICAgIH0pLCB0cnVlKTtcbiAgICBjb25zdCB1cGRhdGVIaXN0b3J5UGFuZSA9IChmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBoaXN0b3J5UGFuZS5leHBhbmRlZDtcbiAgICAgIG1haW5BY2MucmVtb3ZlUGFuZShoaXN0b3J5UGFuZSk7XG4gICAgICBoaXN0b3J5UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnTXkgaGlzdG9yeScsICgpID0+IGJ1aWxkSGlzdG9yeVBhbmUoe1xuICAgICAgICAuLi5maWx0ZXJPcHRpb25zLFxuICAgICAgICBhdXRob3I6IGdyb2suc2hlbGwudXNlclxuICAgICAgfSksIGlzRXhwYW5kZWQpO1xuICAgIH07XG5cbiAgICBjb25zdCBuZXdIaXN0b3J5QmxvY2sgPSBtYWluQWNjLnJvb3Q7XG4gICAgdWkuZW1wdHkodGhpcy5oaXN0b3J5Um9vdCk7XG4gICAgdGhpcy5oaXN0b3J5Um9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnanVzdGlmeS1jb250ZW50Jyk7XG4gICAgdGhpcy5oaXN0b3J5Um9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLmhpc3RvcnlSb290LmFwcGVuZChuZXdIaXN0b3J5QmxvY2spO1xuICAgIHJldHVybiBuZXdIaXN0b3J5QmxvY2s7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgZm9yIHtAbGluayBzdXBwb3J0ZWRFeHBvcnRGb3JtYXRzfSBtZW1iZXJzIGFuZCBjcmVhdGVzIHJpYmJvbiBwYW5lbFxuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnRzIG9mIHJpYmJvblBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGJ1aWxkUmliYm9uUGFuZWxzKCk6IEhUTUxFbGVtZW50W11bXSB7XG4gICAgY29uc3QgbmV3UmliYm9uUGFuZWxzOiBIVE1MRWxlbWVudFtdW10gPSBbXG4gICAgICBbLi4uKHRoaXMuZXhwb3J0Q29uZmlnICYmIHRoaXMuZXhwb3J0Q29uZmlnLnN1cHBvcnRlZEZvcm1hdHMubGVuZ3RoID4gMCkgPyBbdWkuZGl2SChbXG4gICAgICAgIHVpLmNvbWJvUG9wdXAoXG4gICAgICAgICAgdWkuaWNvbkZBKCdhcnJvdy10by1ib3R0b20nKSxcbiAgICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLFxuICAgICAgICAgIGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4gREcuVXRpbHMuZG93bmxvYWQodGhpcy5leHBvcnRDb25maWchLmZpbGVuYW1lKGZvcm1hdCksIGF3YWl0IHRoaXMuZXhwb3J0Q29uZmlnIS5leHBvcnQoZm9ybWF0KSkpLFxuICAgICAgXSldOiBbXVxuICAgICAgXV07XG5cbiAgICBpZiAodGhpcy5mdW5jPy5pZCkge1xuICAgICAgY29uc3QgaGlzdG9yeUJ1dHRvbiA9IHVpLmljb25GQSgnaGlzdG9yeScsICgpID0+IHtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzID0gIWdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcztcbiAgICAgICAgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCdkNC1jdXJyZW50Jyk7XG4gICAgICAgIGdyb2suc2hlbGwubyA9IHRoaXMuaGlzdG9yeVJvb3Q7XG4gICAgICB9KTtcblxuICAgICAgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdkNC10b2dnbGUtYnV0dG9uJyk7XG4gICAgICBpZiAoZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzKSBoaXN0b3J5QnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2Q0LWN1cnJlbnQnKTtcblxuICAgICAgY29uc3QgY2xvbmVSdW5CdG4gPSB1aS5idXR0b24oJ0Nsb25lJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNsb25lUnVuQXNDdXJyZW50KCk7XG4gICAgICB9LCAnQ2xvbmUgdGhlIHJ1bicpO1xuXG4gICAgICBuZXdSaWJib25QYW5lbHMucHVzaChbXG4gICAgICAgIGhpc3RvcnlCdXR0b24sXG4gICAgICAgIC4uLnRoaXMuZnVuY0NhbGw/Lm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddPyBbY2xvbmVSdW5CdG5dOiBbXSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHRoaXMuc2V0UmliYm9uUGFuZWxzKG5ld1JpYmJvblBhbmVscyk7XG4gICAgcmV0dXJuIG5ld1JpYmJvblBhbmVscztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gcmliYm9uIG1lbnUgb24gdGhlIHRvcC5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRSaWJib25NZW51KCkge1xuXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb0Zhdm9yaXRlOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGZhdm9yaXRlQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcnVuIGFzIHVzdWFsIHJ1blxuICAgKiBAcGFyYW0gY2FsbFRvVW5mYXZvcml0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gZmF2b3JpdGVzXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbiAgcHVibGljIGFzeW5jIHJlbW92ZVJ1bkZyb21GYXZvcml0ZXMoY2FsbFRvVW5mYXZvcml0ZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWyd0aXRsZSddID0gbnVsbDtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA9IG51bGw7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9VbmZhdm9yaXRlKTtcbiAgICBjb25zdCBmYXZvcml0ZVNhdmUgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvVW5mYXZvcml0ZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmYXZvcml0ZVNhdmUpO1xuICAgIHJldHVybiBmYXZvcml0ZVNhdmU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVBZGRpbmdUb0Zhdm9yaXRlcyhjYWxsVG9BZGRUb0Zhdm9yaXRlczogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQWRkaW5nVG9GYXZvcml0ZXMoZmF2b3JpdGVDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBydW4gYXMgZmF2b3JpdGVcbiAgICogQHBhcmFtIGNhbGxUb0Zhdm9yaXRlIEZ1bmNDYWxsIG9iamVjdCB0byBhZGQgdG8gZmF2b3JpdGVzXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cblxuICBwdWJsaWMgYXN5bmMgYWRkUnVuVG9GYXZvcml0ZXMoY2FsbFRvRmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb0Zhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZUFkZGluZ1RvRmF2b3JpdGVzKGNhbGxUb0Zhdm9yaXRlKTtcbiAgICBjb25zdCBzYXZlZEZhdm9yaXRlID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5zYXZlKGNhbGxUb0Zhdm9yaXRlKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJBZGRpbmdUb0Zhdm9yaXRlcyhzYXZlZEZhdm9yaXRlKTtcbiAgICByZXR1cm4gc2F2ZWRGYXZvcml0ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZVJlbW92ZVJ1bkZyb21TaGFyZWQoY2FsbFRvU2hhcmU6IERHLkZ1bmNDYWxsKSB7IH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlclJlbW92ZVJ1bkZyb21TYWhyZWQoc2hhcmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHJ1biBmcm9tIHNoYXJlZFxuICAgKiBAcGFyYW0gY2FsbFRvVW5zaGFyZSBGdW5jQ2FsbCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gc2hhcmVkXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cblxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlUnVuRnJvbVNoYXJlZChjYWxsVG9VbnNoYXJlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjYWxsVG9VbnNoYXJlLm9wdGlvbnNbJ3RpdGxlJ10gPSBudWxsO1xuICAgIGNhbGxUb1Vuc2hhcmUub3B0aW9uc1snYW5ub3RhdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbnNoYXJlLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9VbnNoYXJlKTtcbiAgICBjb25zdCBzYXZlZFNoYXJlZCA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuc2F2ZShjYWxsVG9VbnNoYXJlKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKHNhdmVkU2hhcmVkKTtcbiAgICByZXR1cm4gc2F2ZWRTaGFyZWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVBZGRpbmdUb1NoYXJlZChjYWxsVG9BZGRUb1NoYXJlZDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQWRkaW5nVG9TaGFyZWQoc2hhcmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcnVuIGFzIHNoYXJlZFxuICAgKiBAcGFyYW0gY2FsbFRvU2hhcmUgRnVuY0NhbGwgb2JqZWN0IHRvIGFkZCB0byBzaGFyZWRcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuXG4gIHB1YmxpYyBhc3luYyBhZGRSdW5Ub1NoYXJlZChjYWxsVG9TaGFyZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvU2hhcmUub3B0aW9uc1snaXNTaGFyZWQnXSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZUFkZGluZ1RvU2hhcmVkKGNhbGxUb1NoYXJlKTtcblxuICAgIGNvbnN0IGFsbEdyb3VwID0gYXdhaXQgZ3Jvay5kYXBpLmdyb3Vwcy5maW5kKGRlZmF1bHRHcm91cHNJZHNbJ0FsbCB1c2VycyddKTtcblxuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KGNhbGxUb1NoYXJlLm91dHB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG5cbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpIHtcbiAgICAgIGNvbnN0IGRmID0gY2FsbFRvU2hhcmUub3V0cHV0c1tvdXRwdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lO1xuICAgICAgYXdhaXQgZ3Jvay5kYXBpLnBlcm1pc3Npb25zLmdyYW50KGRmLmdldFRhYmxlSW5mbygpLCBhbGxHcm91cCwgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGRmSW5wdXRzID0gd3UoY2FsbFRvU2hhcmUuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigoaW5wdXQpID0+IGlucHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGRmSW5wdXRzKSB7XG4gICAgICBjb25zdCBkZiA9IGNhbGxUb1NoYXJlLmlucHV0c1tpbnB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWU7XG4gICAgICBhd2FpdCBncm9rLmRhcGkucGVybWlzc2lvbnMuZ3JhbnQoZGYuZ2V0VGFibGVJbmZvKCksIGFsbEdyb3VwLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2F2ZWRTaGFyZWQgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvU2hhcmUpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckFkZGluZ1RvU2hhcmVkKHNhdmVkU2hhcmVkKTtcbiAgICByZXR1cm4gc2F2ZWRTaGFyZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBzYXZpbmcgdGhlIEZVbmNDYWxsIHJlc3VsdHMgdG8gdGhlIGhpc3RvcmljYWwgcmVzdWx0cywgcmV0dXJucyB0aGUgc2F2ZWQgY2FsbC4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvU2F2ZSBGdW5jQ2FsbCBvYmplY3QgdG8gc2F2ZVxuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZVNhdmVSdW4oY2FsbFRvU2F2ZTogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyB0byB0aGUgaGlzdG9yaWNhbCByZXN1bHRzLCByZXR1cm5zIHRoZSBzYXZlZCBjYWxsLiBTZWUgYWxzbyB7QGxpbmsgc2F2ZVJ1bn0uXG4gICAqIEBwYXJhbSBzYXZlZENhbGwgRnVuY0NhbGwgb2JqZWN0IHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlclNhdmVSdW4oc2F2ZWRDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgdGhlIHNhdmVkIGNhbGwuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb1NhdmUgRnVuY0NhbGwgb2JqZWN0IHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlU2F2ZVJ1bihjYWxsVG9TYXZlKTtcbiAgICBjb25zdCBzYXZlZENhbGwgPSBhd2FpdCBoaXN0b3J5VXRpbHMuc2F2ZVJ1bihjYWxsVG9TYXZlKTtcbiAgICB0aGlzLmJ1aWxkSGlzdG9yeUJsb2NrKCk7XG4gICAgdGhpcy5wYXRoID0gYD9pZD0ke3NhdmVkQ2FsbC5pZH1gO1xuICAgIGF3YWl0IHRoaXMub25BZnRlclNhdmVSdW4oc2F2ZWRDYWxsKTtcbiAgICByZXR1cm4gc2F2ZWRDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgZGVsZXRpbmcgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgZnJvbSBoaXN0b3J5LCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvRGVsZXRlIEZ1bmNDYWxsIG9iamVjdCB0byBiZSBkZWxldGVkXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlRGVsZXRlUnVuKGNhbGxUb0RlbGV0ZTogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgZGVsZXRpbmcgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgZnJvbSBoaXN0b3J5LCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gZGVsZXRlZENhbGwgZGVsZXRlZCBGdW5jQ2FsbCB2YWx1ZVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyRGVsZXRlUnVuKGRlbGV0ZWRDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgZnJvbSBoaXN0b3J5LCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvRGVsZXRlIEZ1bmNDYWxsIG9iamVjdCB0byBkZWxldGVcbiAgICogQHJldHVybnMgSUQgb2YgZGVsZXRlZCBoaXN0b3JpY2FsIHJ1blxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZVJ1bihjYWxsVG9EZWxldGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlRGVsZXRlUnVuKGNhbGxUb0RlbGV0ZSk7XG4gICAgYXdhaXQgaGlzdG9yeVV0aWxzLmRlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckRlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIHJldHVybiBjYWxsVG9EZWxldGUuaWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBmZXRjaGluZyB0aGUgaGlzdG9yaWNhbCBydW4gZGF0YSBpbiB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlTG9hZFJ1bigpIHt9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBmZXRjaGluZyB0aGUgaGlzdG9yaWNhbCBydW4gZGF0YSBpbiB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBmdW5jQ2FsbCBGdW5jQ2FsbCBmZXRjaGVkIGZyb20gc2VydmVyIGR1cmluZyB7QGxpbmsgbG9hZFJ1bn1cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlckxvYWRSdW4oZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7fVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgc3BlY2lmaWVkIGhpc3RvcmljYWwgcnVuLiBTZWUgYWxzbyB7QGxpbmsgc2F2ZVJ1bn0uXG4gICAqIEBwYXJhbSBmdW5jQ2FsbElkIElEIG9mIEZ1bmNDYWxsIHRvIGxvb2sgZm9yLiBHZXQgaXQgdXNpbmcge0BzZWUgZnVuY0NhbGwuaWR9IGZpZWxkXG4gICAqIEByZXR1cm5zIEZ1bmNDYWxsIGF1Z2VtZW50ZWQgd2l0aCBpbnB1dHMnIGFuZCBvdXRwdXRzJyB2YWx1ZXNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuXG4gIHB1YmxpYyBhc3luYyBsb2FkUnVuKGZ1bmNDYWxsSWQ6IHN0cmluZyk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlTG9hZFJ1bigpO1xuICAgIGNvbnN0IHB1bGxlZFJ1biA9IGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkUnVuKGZ1bmNDYWxsSWQpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckxvYWRSdW4ocHVsbGVkUnVuKTtcbiAgICB0aGlzLnNldFJ1blZpZXdSZWFkb25seSgpO1xuICAgIHJldHVybiBwdWxsZWRSdW47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVDbG9uZVJ1bkFzQ3VycmVudCgpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQ2xvbmVSdW5Bc0N1cnJlbnQoKSB7IH1cblxuXG4gIHB1YmxpYyBhc3luYyBjbG9uZVJ1bkFzQ3VycmVudCgpIHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignQ3VycmVudCBGdW5jY2FsbCBpcyBub3Qgc2V0Jyk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlQ2xvbmVSdW5Bc0N1cnJlbnQoKTtcbiAgICBjb25zdCBjbG9uZWRGdW5jY2FsbCA9IHRoaXMuZnVuY0NhbGwuY2xvbmUoKTtcbiAgICBjbG9uZWRGdW5jY2FsbC5uZXdJZCgpO1xuICAgIGNsb25lZEZ1bmNjYWxsLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddID0gZmFsc2U7XG4gICAgdGhpcy5saW5rRnVuY2NhbGwoY2xvbmVkRnVuY2NhbGwpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckNsb25lUnVuQXNDdXJyZW50KCk7XG4gIH1cblxuICBwcml2YXRlIG92ZXJsYXlEaXYgPSB1aS5kaXYoW10sIHtzdHlsZToge1xuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2dyYXknLFxuICAgICdvcGFjaXR5JzogJzAuMDcnLFxuICAgICdwb3NpdGlvbic6ICdhYnNvbHV0ZScsXG4gICAgJ2JvdHRvbSc6ICcwJyxcbiAgICAnbGVmdCc6ICcwJyxcbiAgICAncmlnaHQnOiAnMCcsXG4gICAgJ3RvcCc6ICcwJyxcbiAgICAnZGlzcGxheSc6ICdub25lJyxcbiAgICAnY3Vyc29yJzogJ25vdC1hbGxvd2VkJyxcbiAgICAnei1pbmRleCc6ICcxJyxcbiAgfX0pO1xuXG4gIHByaXZhdGUgcm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnMgPSBbXG4gICAgKGV2OiBNb3VzZUV2ZW50KT0+IHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMub3ZlcmxheURpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgIH0sXG4gICAgKCkgPT4ge1xuICAgICAgdGhpcy5vdmVybGF5RGl2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgfSxcbiAgICAoKSA9PiB7XG4gICAgICBncm9rLnNoZWxsLndhcm5pbmcoJ0Nsb25lIHRoZSBydW4gdG8gZWRpdCBpdCcpO1xuICAgIH0sXG4gIF07XG5cbiAgcHJpdmF0ZSBpbnRlcmFjdGl2ZUV2ZW50TGlzdGVuZXJzID0gW1xuICAgICgpID0+dGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1syXSksXG4gICAgKCkgPT5zZXRUaW1lb3V0KCgpID0+IHRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMl0pLCAxMDApXG4gIF07XG5cbiAgcHJpdmF0ZSBzZXRSdW5WaWV3UmVhZG9ubHkoKTogdm9pZCB7XG4gICAgdGhpcy5vdmVybGF5RGl2LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgdGhpcy5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1syXSk7XG4gICAgdGhpcy5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMF0pO1xuICAgIHRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1sxXSk7XG4gICAgdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0lOVEVSQUNUSVZFX0NTU19DTEFTU31gKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS56SW5kZXggPSAnMic7XG4gICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaW50ZXJhY3RpdmVFdmVudExpc3RlbmVyc1swXSk7XG4gICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmludGVyYWN0aXZlRXZlbnRMaXN0ZW5lcnNbMV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRSdW5WaWV3RWRpdGFibGUoKTogdm9pZCB7XG4gICAgdGhpcy5vdmVybGF5RGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgdGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1syXSk7XG4gICAgdGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMF0pO1xuICAgIHRoaXMucm9vdC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1sxXSk7XG4gICAgdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0lOVEVSQUNUSVZFX0NTU19DTEFTU31gKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnei1pbmRleCcpO1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmludGVyYWN0aXZlRXZlbnRMaXN0ZW5lcnNbMF0pO1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5pbnRlcmFjdGl2ZUV2ZW50TGlzdGVuZXJzWzFdKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogRGVzaWduZWQgdG8gcHVsbCBoc3RvcmljYWwgcnVucyBpbiBmYXN0IG1hbm5lciBhbmQgdGhlIGNhbGwge0BsaW5rIGxvYWRSdW59IHdpdGggc3BlY2lmaWVkIHJ1biBJRC5cbiAgICogV0FSTklORzogRnVuY0NhbGwgaW5wdXRzL291dHB1dHMgZmllbGRzIGFyZSBub3QgaW5jbHVkZWRcbiAgICogQHBhcmFtIGZ1bmNJZCBJRCBvZiBGdW5jIHdoaWNoIGNhbGxzIHdlIGFyZSBsb29raW5nIGZvci4gR2V0IGl0IHVzaW5nIHtAbGluayBmdW5jLmlkfSBmaWVsZFxuICAgKiBAcmV0dXJucyBQcm9taXNlIG9uIGFycmF5IG9mIEZ1bmNDYWxscyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgRnVuYyBJRFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBwdWxsUnVucyhmdW5jSWQ6IHN0cmluZywgZmlsdGVyT3B0aW9uczogRmlsdGVyT3B0aW9ucyA9IHt9LCBsaXN0T3B0aW9uczoge3BhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBmaWx0ZXI/OiBzdHJpbmcsIG9yZGVyPzogc3RyaW5nfSA9IHt9KTogUHJvbWlzZTxERy5GdW5jQ2FsbFtdPiB7XG4gICAgcmV0dXJuIGhpc3RvcnlVdGlscy5wdWxsUnVucyhmdW5jSWQsIGZpbHRlck9wdGlvbnMsIGxpc3RPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIGFjdHVhbCBjb21wdXRhdGlvbnMgYXJlIG1hZGUge0BsaW5rIHJ1bn0uXG4gICAqIEBwYXJhbSBmdW5jVG9DYWxsIEZ1bmNDYWxsIG9iamVjdCB0byBiZSBjYWxsZWQge0BzZWUgREcuRnVuY0NhbGwuY2FsbCgpfVxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICAqL1xuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVSdW4oZnVuY1RvQ2FsbDogREcuRnVuY0NhbGwpIHt9XG5cbiAgLyoqXG4gICAgKiBDYWxsZWQgYWZ0ZXIgYWN0dWFsIGNvbXB1dGF0aW9ucyBhcmUgbWFkZSB7QGxpbmsgcnVufS5cbiAgICAqIEBwYXJhbSBydW5GdW5jIEZ1bmNDYWxsIG9iamVjdCBhZnRlciBjYWxsIG1ldGhvZCB7QHNlZSBERy5GdW5jQ2FsbC5jYWxsKCl9XG4gICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICAgKi9cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJSdW4ocnVuRnVuYzogREcuRnVuY0NhbGwpIHtcbiAgICB0aGlzLm91dHB1dFBhcmFtZXRlcnNUb1ZpZXcodGhpcy5sYXN0Q2FsbCEpO1xuICB9XG5cblxuICBwdWJsaWMgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5mdW5jQ2FsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgY29ycmVzcG9kaW5nIGZ1bmN0aW9uIGlzIG5vdCBzcGVjaWZpZWQnKTtcblxuICAgIGF3YWl0IHRoaXMub25CZWZvcmVSdW4odGhpcy5mdW5jQ2FsbCk7XG4gICAgY29uc3QgcGkgPSBERy5UYXNrQmFyUHJvZ3Jlc3NJbmRpY2F0b3IuY3JlYXRlKCdDYWxjdWxhdGluZy4uLicpO1xuICAgIHRoaXMuZnVuY0NhbGwubmV3SWQoKTtcbiAgICBhd2FpdCB0aGlzLmZ1bmNDYWxsLmNhbGwoKTsgLy8gbXV0YXRlcyB0aGUgZnVuY0NhbGwgZmllbGRcbiAgICBwaS5jbG9zZSgpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlclJ1bih0aGlzLmZ1bmNDYWxsKTtcblxuICAgIHRoaXMubGFzdENhbGwgPSBhd2FpdCB0aGlzLnNhdmVSdW4odGhpcy5mdW5jQ2FsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdEV4cG9ydEZpbGVuYW1lID0gKGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX0gLSAke25ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoKX0uJHt0aGlzLmV4cG9ydENvbmZpZyEuc3VwcG9ydGVkRXh0ZW5zaW9uc1tmb3JtYXRdfWA7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAnRXhjZWwnOiAneGxzeCdcbiAgICB9O1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0cyA9ICgpID0+IHtcbiAgICByZXR1cm4gWydFeGNlbCddO1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0RXhwb3J0ID0gYXN5bmMgKGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbGFzdENhbGwgPSB0aGlzLmxhc3RDYWxsO1xuICAgIGlmICghbGFzdENhbGwpIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gd2FzIG5vdCBjYWxsZWRgKTtcblxuICAgIGlmICghdGhpcy5leHBvcnRDb25maWchLnN1cHBvcnRlZEZvcm1hdHMuaW5jbHVkZXMoZm9ybWF0KSkgdGhyb3cgbmV3IEVycm9yKGBGb3JtYXQgXCIke2Zvcm1hdH1cIiBpcyBub3Qgc3VwcG9ydGVkLmApO1xuXG4gICAgaWYgKCF0aGlzLmZ1bmMpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBjb25zdCBCTE9CX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG4gICAgY29uc3QgZXhwb3J0V29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xuXG4gICAgY29uc3QgaXNTY2FsYXJUeXBlID0gKHR5cGU6IERHLlRZUEUpID0+IChERy5UWVBFU19TQ0FMQVIuaGFzKHR5cGUpKTtcblxuICAgIGNvbnN0IGlzRGF0YUZyYW1lID0gKHR5cGU6IERHLlRZUEUpID0+ICh0eXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuXG4gICAgY29uc3QgZGZJbnB1dHMgPSB0aGlzLmZ1bmMuaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlzRGF0YUZyYW1lKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IHNjYWxhcklucHV0cyA9IHRoaXMuZnVuYy5pbnB1dHMuZmlsdGVyKChpbnB1dCkgPT4gaXNTY2FsYXJUeXBlKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc0RhdGFGcmFtZShvdXRwdXQucHJvcGVydHlUeXBlKSk7XG4gICAgY29uc3Qgc2NhbGFyT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc1NjYWxhclR5cGUob3V0cHV0LnByb3BlcnR5VHlwZSkpO1xuXG4gICAgY29uc3QgaW5wdXRQYXJhbXMgPSBbLi4ubGFzdENhbGwuaW5wdXRQYXJhbXMudmFsdWVzKCldIGFzIERHLkZ1bmNDYWxsUGFyYW1bXTtcbiAgICBjb25zdCBvdXRwdXRQYXJhbXMgPSBbLi4ubGFzdENhbGwub3V0cHV0UGFyYW1zLnZhbHVlcygpXSBhcyBERy5GdW5jQ2FsbFBhcmFtW107XG5cbiAgICBkZklucHV0cy5mb3JFYWNoKChkZklucHV0KSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZklucHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZklucHV0Lm5hbWU7XG4gICAgICBjb25zdCBjdXJyZW50RGZTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uSU5QVVQpKTtcblxuICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLmlucHV0c1tkZklucHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG4gICAgICBkZlRvU2hlZXQoY3VycmVudERmU2hlZXQsIGN1cnJlbnREZik7XG4gICAgfSk7XG5cbiAgICBpZiAoc2NhbGFySW5wdXRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgaW5wdXRTY2FsYXJzU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoJ0lucHV0IHNjYWxhcnMnKTtcbiAgICAgIHNjYWxhcnNUb1NoZWV0KGlucHV0U2NhbGFyc1NoZWV0LCBzY2FsYXJJbnB1dHMubWFwKChzY2FsYXJJbnB1dCkgPT4gKHtcbiAgICAgICAgY2FwdGlvbjogc2NhbGFySW5wdXQub3B0aW9uc1snY2FwdGlvbiddIHx8IHNjYWxhcklucHV0Lm5hbWUsXG4gICAgICAgIHZhbHVlOiBsYXN0Q2FsbC5pbnB1dHNbc2NhbGFySW5wdXQubmFtZV0sXG4gICAgICAgIHVuaXRzOiBzY2FsYXJJbnB1dC5vcHRpb25zWyd1bml0cyddIHx8ICcnLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBkZk91dHB1dHMuZm9yRWFjaCgoZGZPdXRwdXQpID0+IHtcbiAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmT3V0cHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZk91dHB1dC5uYW1lO1xuICAgICAgY29uc3QgY3VycmVudERmU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpO1xuXG4gICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwub3V0cHV0c1tkZk91dHB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuICAgICAgZGZUb1NoZWV0KGN1cnJlbnREZlNoZWV0LCBjdXJyZW50RGYpO1xuICAgIH0pO1xuXG5cbiAgICBpZiAoc2NhbGFyT3V0cHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG91dHB1dFNjYWxhcnNTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldCgnT3V0cHV0IHNjYWxhcnMnKTtcbiAgICAgIHNjYWxhcnNUb1NoZWV0KG91dHB1dFNjYWxhcnNTaGVldCwgc2NhbGFyT3V0cHV0cy5tYXAoKHNjYWxhck91dHB1dCkgPT4gKHtcbiAgICAgICAgY2FwdGlvbjogc2NhbGFyT3V0cHV0Lm9wdGlvbnNbJ2NhcHRpb24nXSB8fCBzY2FsYXJPdXRwdXQubmFtZSxcbiAgICAgICAgdmFsdWU6IGxhc3RDYWxsLm91dHB1dHNbc2NhbGFyT3V0cHV0Lm5hbWVdLFxuICAgICAgICB1bml0czogc2NhbGFyT3V0cHV0Lm9wdGlvbnNbJ3VuaXRzJ10gfHwgJycsXG4gICAgICB9KSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRhYkNvbnRyb2wgPSB0aGlzLnJlc3VsdHNUYWJDb250cm9sO1xuICAgIGlmICh0YWJDb250cm9sKSB7XG4gICAgICBmb3IgKGNvbnN0IHRhYkxhYmVsIG9mIHRoaXMudGFic0xhYmVscykge1xuICAgICAgICB0YWJDb250cm9sLmN1cnJlbnRQYW5lID0gdGFiQ29udHJvbC5nZXRQYW5lKHRhYkxhYmVsKTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTAwKSk7XG4gICAgICAgIGlmICh0YWJMYWJlbCA9PT0gJ0lucHV0Jykge1xuICAgICAgICAgIGZvciAoY29uc3QgaW5wdXRQYXJhbSBvZiBpbnB1dFBhcmFtcy5maWx0ZXIoKGlucHV0UGFyYW0pID0+IGlucHV0UGFyYW0ucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpKSB7XG4gICAgICAgICAgICBjb25zdCBub25HcmlkVmlld2VycyA9IChpbnB1dFBhcmFtLmF1eFsndmlld2VycyddIGFzIERHLlZpZXdlcltdKS5maWx0ZXIoKHZpZXdlcikgPT4gdmlld2VyLnR5cGUgIT09IERHLlZJRVdFUi5HUklEKTtcblxuICAgICAgICAgICAgY29uc3QgZGZJbnB1dCA9IGRmSW5wdXRzLmZpbmQoKGlucHV0KSA9PiBpbnB1dC5uYW1lID09PSBpbnB1dFBhcmFtLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZJbnB1dCEub3B0aW9ucy5jYXB0aW9uIHx8IGlucHV0UGFyYW0ubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5pbnB1dHNbZGZJbnB1dCEubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHZpZXdlcl0gb2Ygbm9uR3JpZFZpZXdlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgIGlmICh2aWV3ZXIucm9vdC5wYXJlbnRFbGVtZW50Py5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtR3JpZFN3aXRjaGVzLmdldChpbnB1dFBhcmFtLm5hbWUpPy5jbGljaygpO1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhd2FpdCBwbG90VG9TaGVldChcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vayxcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLklOUFVUKSksXG4gICAgICAgICAgICAgICAgdmlld2VyLnJvb3QsXG4gICAgICAgICAgICAgICAgY3VycmVudERmLmNvbHVtbnMubGVuZ3RoICsgMixcbiAgICAgICAgICAgICAgICAoaW5kZXggPiAwKSA/IE1hdGguY2VpbChub25HcmlkVmlld2Vyc1tpbmRleC0xXS5yb290LmNsaWVudEhlaWdodCAvIDIwKSArIDEgOiAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG91dHB1dFBhcmFtIG9mIG91dHB1dFBhcmFtcy5maWx0ZXIoKG91dHB1dFBhcmFtKSA9PiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5jYXRlZ29yeSA9PT0gdGFiTGFiZWwpKSB7XG4gICAgICAgICAgICBjb25zdCBub25HcmlkVmlld2VycyA9IChvdXRwdXRQYXJhbS5hdXhbJ3ZpZXdlcnMnXSBhcyBERy5WaWV3ZXJbXSkuZmlsdGVyKCh2aWV3ZXIpID0+IHZpZXdlci50eXBlICE9PSBERy5WSUVXRVIuR1JJRCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRmT3V0cHV0ID0gZGZPdXRwdXRzLmZpbmQoKGlucHV0KSA9PiBpbnB1dC5uYW1lID09PSBvdXRwdXRQYXJhbS5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmT3V0cHV0IS5vcHRpb25zLmNhcHRpb24gfHwgb3V0cHV0UGFyYW0ubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5vdXRwdXRzW2RmT3V0cHV0IS5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgdmlld2VyXSBvZiBub25HcmlkVmlld2Vycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgaWYgKHZpZXdlci5yb290LnBhcmVudEVsZW1lbnQ/LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1HcmlkU3dpdGNoZXMuZ2V0KG91dHB1dFBhcmFtLm5hbWUpPy5jbGljaygpO1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhd2FpdCBwbG90VG9TaGVldChcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vayxcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpLFxuICAgICAgICAgICAgICAgIHZpZXdlci5yb290LFxuICAgICAgICAgICAgICAgIGN1cnJlbnREZi5jb2x1bW5zLmxlbmd0aCArIDIsXG4gICAgICAgICAgICAgICAgKGluZGV4ID4gMCkgPyBNYXRoLmNlaWwobm9uR3JpZFZpZXdlcnNbaW5kZXgtMV0ucm9vdC5jbGllbnRIZWlnaHQgLyAyMCkgKyAxIDogMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGV4cG9ydFdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcblxuICAgIHJldHVybiBuZXcgQmxvYihbYnVmZmVyXSwge3R5cGU6IEJMT0JfVFlQRX0pO1xuICB9O1xuXG4gIHByb3RlY3RlZCBnZXQgaXNJbnB1dFBhbmVsUmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuYz8uaW5wdXRzLnNvbWUoKHApID0+IHAucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLm9wdGlvbnNbJ3ZpZXdlciddICE9IG51bGwpIHx8IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBvdXRQYXJhbUNhdGVnb3JpZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLm5ldyBTZXQodGhpcy5mdW5jIS5vdXRwdXRzLm1hcCgocCkgPT4gcC5jYXRlZ29yeSkpIC8vIGdldCBhbGwgb3V0cHV0IHBhcmFtcycgY2F0ZWdvcmllc1xuICAgIF07IC8vIGtlZXAgb25seSB1bmlxdWUgb2YgdGhlbVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBvdXRwdXRUYWJzTGFiZWxzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi50aGlzLm91dFBhcmFtQ2F0ZWdvcmllcyxcbiAgICAgIC4uLnRoaXMub3V0UGFyYW1DYXRlZ29yaWVzLmZpbmQoKHZhbCkgPT4gdmFsID09PSAnTWlzYycpID8gWydPdXRwdXQnXSA6IFtdLCAvLyBpZiBubyBjYXRlZ29yaWVzIGFyZSBzdGF0ZWQsIHRoZSBkZWZhdWx0IGNhdGVnb3J5IGlzIGFkZGVkXG4gICAgXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdGFic0xhYmVscygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbVRvQ2F0ZWdvcnlNYXApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBwYXJhbVRvQ2F0ZWdvcnlNYXAoKSB7XG4gICAgY29uc3QgbWFwID0ge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuICAgIGlmICh0aGlzLmlzSW5wdXRQYW5lbFJlcXVpcmVkKVxuICAgICAgdGhpcy5mdW5jIS5pbnB1dHMuZm9yRWFjaCgocCkgPT4gbWFwWydJbnB1dCddID8gbWFwWydJbnB1dCddLnB1c2gocC5uYW1lKTogbWFwWydJbnB1dCddID0gW3AubmFtZV0pO1xuXG4gICAgdGhpcy5mdW5jIS5vdXRwdXRzLmZvckVhY2goKHApID0+IG1hcFtwLmNhdGVnb3J5ID09PSAnTWlzYycgPyAnT3V0cHV0JzogcC5jYXRlZ29yeV0gPyBtYXBbcC5jYXRlZ29yeSA9PT0gJ01pc2MnID8gJ091dHB1dCc6IHAuY2F0ZWdvcnldLnB1c2gocC5uYW1lKSA6IG1hcFtwLmNhdGVnb3J5ID09PSAnTWlzYycgPyAnT3V0cHV0JzogcC5jYXRlZ29yeV0gPSBbcC5uYW1lXSk7XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgcmVuZGVyUnVuU2VjdGlvbihjYWxsOiBERy5GdW5jQ2FsbCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdWkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBydW5CdXR0b24gPSB1aS5iaWdCdXR0b24oJ1J1bicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY2FsbC5hdXhbJ3ZpZXcnXSA9IHRoaXMuZGFydDtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW4oKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZWRpdG9yID0gdWkuZGl2KCk7XG4gICAgICBjb25zdCBpbnB1dHM6IERHLklucHV0QmFzZVtdID0gYXdhaXQgY2FsbC5idWlsZEVkaXRvcihlZGl0b3IsIHtjb25kZW5zZWQ6IHRydWV9KTtcbiAgICAgIGVkaXRvci5jbGFzc0xpc3QuYWRkKCd1aS1mb3JtJyk7XG4gICAgICBjb25zdCBidXR0b25zID0gdWkuZGl2SChbcnVuQnV0dG9uXSwge3N0eWxlOiB7J2p1c3RpZnktY29udGVudCc6ICdzcGFjZS1iZXR3ZWVuJ319KTtcbiAgICAgIGVkaXRvci5hcHBlbmRDaGlsZChidXR0b25zKTtcbiAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyUmVzdWx0cyhzd2l0Y2hUb091dHB1dDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBjYXRlZ29yaWVzID0gdGhpcy50YWJzTGFiZWxzO1xuXG4gICAgaWYgKChjYXRlZ29yaWVzLmxlbmd0aCA+IDEgfHwgKGNhdGVnb3JpZXMubGVuZ3RoID09IDEgJiYgY2F0ZWdvcmllc1swXSAhPSAnTWlzYycpKSkge1xuICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCA9IERHLlRhYkNvbnRyb2wuY3JlYXRlKCk7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgY2F0ZWdvcmllcykge1xuICAgICAgICBpZiAoIXRoaXMucmVzdWx0VGFicy5oYXMoYykpXG4gICAgICAgICAgdGhpcy5yZXN1bHRUYWJzLnNldChjLCB1aS5kaXYoW10sICd1aS1wYW5lbCwgZ3Jvay1mdW5jLXJlc3VsdHMsIHVpLWJveCcpKTtcbiAgICAgICAgbGV0IG5hbWUgPSBjO1xuICAgICAgICBpZiAodGhpcy5pc0lucHV0UGFuZWxSZXF1aXJlZCAmJiBjYXRlZ29yaWVzLmxlbmd0aCA9PSAyICYmIGMgPT0gJ01pc2MnKVxuICAgICAgICAgIG5hbWUgPSAnT1VUUFVUJztcbiAgICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5hZGRQYW5lKG5hbWUsICgpID0+IHRoaXMucmVzdWx0VGFicy5nZXQoYykgPz8gdWkuZGl2KCkpO1xuICAgICAgfVxuICAgICAgaWYgKGNhdGVnb3JpZXMubGVuZ3RoID4gMSAmJiB0aGlzLmlzSW5wdXRQYW5lbFJlcXVpcmVkICYmIHN3aXRjaFRvT3V0cHV0KVxuICAgICAgICB0aGlzLnJlc3VsdHNUYWJDb250cm9sLmN1cnJlbnRQYW5lID0gdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5wYW5lc1sxXTtcbiAgICAgIHRoaXMucmVzdWx0c0RpdiA9IHRoaXMucmVzdWx0c1RhYkNvbnRyb2wucm9vdDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG91dHB1dFBhcmFtZXRlcnNUb1ZpZXcoY2FsbDogREcuRnVuY0NhbGwpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyUmVzdWx0cyh0cnVlKTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgY2FsbC5vdXRwdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKSB7XG4gICAgICBwLnByb2Nlc3NPdXRwdXQoKTtcbiAgICAgIGlmIChwLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC52YWx1ZSAhPSBudWxsKVxuICAgICAgICB0aGlzLmFwcGVuZE91dHB1dERmKHAsIHtjYXB0aW9uOiBwLnByb3BlcnR5Lm5hbWUsIGNhdGVnb3J5OiBwLnByb3BlcnR5LmNhdGVnb3J5fSk7XG4gICAgICBlbHNlIHRoaXMuYXBwZW5kUmVzdWx0U2NhbGFyKHAsIHtjYXB0aW9uOiBwLnByb3BlcnR5Lm5hbWUsIGNhdGVnb3J5OiBwLnByb3BlcnR5LmNhdGVnb3J5fSk7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRPdXRwdXRCbG9jaygpO1xuICB9XG5cbiAgLy8gbWFwcHBpbmcgb2YgcGFyYW0gdG8gdGhlIHN3aXRjaGNlcyBvZiB0aGVpciB2aWV3ZXJzL2dyaWRzXG4gIHByaXZhdGUgcGFyYW1HcmlkU3dpdGNoZXM6IE1hcDxzdHJpbmcsIEhUTUxFbGVtZW50PiA9IG5ldyBNYXAoKTtcbiAgLy8gbWFwcHBpbmcgb2YgcGFyYW0gdG8gdGhlaXIgdmlld2VycyBwbGFjZWQgb24gRE9NXG4gIHByaXZhdGUgZXhpc3RpbmdQYXJhbVZpZXdlcnM6IE1hcDxzdHJpbmcsIERHLlZpZXdlcltdPiA9IG5ldyBNYXAoKTtcbiAgLy8gbWFwcHBpbmcgb2YgcGFyYW0gdG8gdGhlaXIgaHRtbCBlbGVtZW50c1xuICBwcml2YXRlIHBhcmFtU3BhbnM6IE1hcDxzdHJpbmcsIEhUTUxFbGVtZW50PiA9IG5ldyBNYXAoKTtcbiAgLy8gbWFwcHBpbmcgb2YgdGFiIG5hbWVzIHRvIHRoZWlyIGNvbnRlbnRcbiAgcHJpdmF0ZSByZXN1bHRUYWJzOiBNYXA8U3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcmVzdWx0c1RhYkNvbnRyb2w6IERHLlRhYkNvbnRyb2wgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVzdWx0c0RpdjogSFRNTEVsZW1lbnQgPSB1aS5wYW5lbChbXSwgJ2dyb2stZnVuYy1yZXN1bHRzJyk7XG5cbiAgcHJvdGVjdGVkIGNvbnRyb2xzUm9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5ib3gobnVsbCwge3N0eWxlOiB7bWF4V2lkdGg6ICczNzBweCd9fSk7XG4gIHByb3RlY3RlZCByZXN1bHRzUm9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5ib3goKTtcbiAgcHJvdGVjdGVkIGhpc3RvcnlSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLmRpdlYoW10sIHtzdHlsZTogeydqdXN0aWZ5LWNvbnRlbnQnOiAnY2VudGVyJ319KTtcbiAgcHJvdGVjdGVkIGlucHV0c1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cywgdWktYm94Jyk7XG5cbiAgcHJpdmF0ZSBhcHBlbmRPdXRwdXREZihwYXJhbTogREcuRnVuY0NhbGxQYXJhbSwgb3B0aW9ucz86IHsgY2FwdGlvbj86IHN0cmluZywgY2F0ZWdvcnk/OiBzdHJpbmcsIGhlaWdodD86IG51bWJlciB9KSB7XG4gICAgY29uc3QgcGFyYW1EZiA9IHBhcmFtLnZhbHVlIGFzIERHLkRhdGFGcmFtZTtcbiAgICBjb25zdCBoZWlnaHQgPSBvcHRpb25zPy5oZWlnaHQgPz8gNDAwO1xuICAgIGNvbnN0IHBhcmFtVmlld2VyczogREcuVmlld2VyW10gPSBwYXJhbS5hdXhbJ3ZpZXdlcnMnXSA/PyBbXTsgLy8gc3RvcmluZyB0aGUgdmlld2VycyBvZiBEZlxuICAgIGNvbnN0IHBhcmFtQ2FwdGlvbiA9IG9wdGlvbnM/LmNhcHRpb24gPz8gcGFyYW0uYXV4Wyd2aWV3ZXJUaXRsZSddID8/IHBhcmFtLnByb3BlcnR5LmNhcHRpb24gPz8gJyc7XG4gICAgbGV0IGV4aXN0aW5nVmlld2VycyA9IHRoaXMuZXhpc3RpbmdQYXJhbVZpZXdlcnMuZ2V0KHBhcmFtLm5hbWUpO1xuICAgIGlmIChleGlzdGluZ1ZpZXdlcnMgIT0gbnVsbCkge1xuICAgICAgZm9yIChjb25zdCB2IG9mIGV4aXN0aW5nVmlld2VycylcbiAgICAgICAgdi5kYXRhRnJhbWUgPSBwYXJhbURmO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4aXN0aW5nVmlld2VycyA/Pz0gW107XG4gICAgdGhpcy5leGlzdGluZ1BhcmFtVmlld2Vycy5zZXQocGFyYW0ubmFtZSwgZXhpc3RpbmdWaWV3ZXJzKTtcbiAgICBpZiAocGFyYW1WaWV3ZXJzLmxlbmd0aCA9PSAwKVxuICAgICAgcGFyYW1WaWV3ZXJzLnB1c2gocGFyYW1EZi5wbG90LmdyaWQoKSk7XG5cbiAgICBjb25zdCB2aWV3ZXJzVG9IaWRlOiBIVE1MRWxlbWVudFtdID0gW107XG4gICAgbGV0IGJsb2NrczogbnVtYmVyID0gMDtcbiAgICBsZXQgYmxvY2tXaWR0aDogbnVtYmVyID0gMDtcbiAgICBjb25zdCBncmlkV3JhcHBlciA9IHVpLmJveChudWxsLCB7c3R5bGU6IHtoZWlnaHQ6ICcxMDAlJ319KTtcblxuICAgIGNvbnN0IGlzR3JpZFN3aXRjaGFibGUgPSB3dShwYXJhbVZpZXdlcnMpLmV2ZXJ5KCh2OiBERy5WaWV3ZXIpID0+IHYudHlwZSAhPT0gJ0dyaWQnKTtcbiAgICAkKGdyaWRXcmFwcGVyKS5oaWRlKCk7XG5cbiAgICBjb25zdCBnZXRIZWFkZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBoZWFkZXJMYWJlbCA9IHBhcmFtQ2FwdGlvbiA/PyBwYXJhbURmLm5hbWUgPz8gJyc7XG4gICAgICBjb25zdCBoZWFkZXIgPSB1aS5kaXYoW10sICdncm9rLWZ1bmMtcmVzdWx0cy1oZWFkZXInKTtcbiAgICAgIGlmIChoZWFkZXJMYWJlbCAhPSAnJykge1xuICAgICAgICBjb25zdCBoID0gdWkuaDEoaGVhZGVyTGFiZWwpO1xuICAgICAgICB1aS5Ub29sdGlwLmJpbmQoaCwgKCkgPT4gaGVhZGVyTGFiZWwpO1xuICAgICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoaCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNHcmlkU3dpdGNoYWJsZSkge1xuICAgICAgICBjb25zdCBpY29uID0gdWkuaWNvblN2ZygndGFibGUnLCAoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdWkuc2V0RGlzcGxheUFsbCh2aWV3ZXJzVG9IaWRlLCB2aWV3ZXJzVG9IaWRlLnNvbWUoKHZpZXdlcikgPT4gdmlld2VyLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykpO1xuICAgICAgICAgIHVpLnNldERpc3BsYXkoZ3JpZFdyYXBwZXIsIGdyaWRXcmFwcGVyLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyk7XG4gICAgICAgIH0sICdTaG93IGdyaWQnKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGljb24pO1xuICAgICAgICB0aGlzLnBhcmFtR3JpZFN3aXRjaGVzLnNldChwYXJhbS5uYW1lLCBpY29uKTtcbiAgICAgIH1cbiAgICAgIGlmICghZ3Jvay5zaGVsbC50YWJsZXMuaW5jbHVkZXMocGFyYW1EZikpIHtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKFxuICAgICAgICAgIHVpLmljb25zLmFkZCgoZTogYW55KSA9PiB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgY29uc3QgdiA9IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHBhcmFtRGYpO1xuICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCB2aWV3ZXIgb2YgcGFyYW1WaWV3ZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZpZXdlci50eXBlICE9ICdHcmlkJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Vmlld2VyID0gYXdhaXQgcGFyYW1EZi5wbG90LmZyb21UeXBlKHZpZXdlci50eXBlKSBhcyBERy5WaWV3ZXI7XG4gICAgICAgICAgICAgICAgICBuZXdWaWV3ZXIuc2V0T3B0aW9ucyh2aWV3ZXIuZ2V0T3B0aW9ucygpKTtcbiAgICAgICAgICAgICAgICAgIHYuYWRkVmlld2VyKG5ld1ZpZXdlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgJ0FkZCB0byB3b3Jrc3BhY2UnXG4gICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGVhZGVyO1xuICAgIH07XG5cbiAgICBpZiAoaXNHcmlkU3dpdGNoYWJsZSkge1xuICAgICAgY29uc3QgZ3JpZCA9IHBhcmFtRGYucGxvdC5ncmlkKCk7XG4gICAgICBncmlkV3JhcHBlci5hcHBlbmRDaGlsZChncmlkLnJvb3QpO1xuICAgICAgZXhpc3RpbmdWaWV3ZXJzLnB1c2goZ3JpZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyID0gZ2V0SGVhZGVyKCk7XG4gICAgY29uc3Qgd3JhcHBlciA9IHVpLmRpdkgoW10sIHtzdHlsZToge2hlaWdodDogJzEwMCUnfX0pO1xuICAgIHBhcmFtVmlld2Vycy5mb3JFYWNoKCh2aWV3ZXIpID0+IHtcbiAgICAgIGlmICh2aWV3ZXI/LnRhZ3MgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZXhpc3RpbmdWaWV3ZXJzIS5wdXNoKHZpZXdlcik7XG4gICAgICBjb25zdCB2aWV3ZXJTaXplID0gdmlld2VyLnRhZ3NbJy5ibG9jay1zaXplJ10gPz8gMTAwOyAvLyBnZXR0aW5nIGAoYmxvY2s6IDI1KWAgdmFsdWU7IGlmIG5vdCBkZWZpbmVkLCBpdCBpcyAxMDBcblxuICAgICAgdmlld2VyLnJvb3Quc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgICAgdmlld2VyLnJvb3QuY2xhc3NMaXN0LmFkZChgdWktYmxvY2stJHt2aWV3ZXJTaXplfWApO1xuICAgICAgaWYgKGJsb2NrcyArIHZpZXdlclNpemUgPD0gMTAwKSB7XG4gICAgICAgIHZpZXdlcnNUb0hpZGUucHVzaCh3cmFwcGVyKTtcbiAgICAgICAgYmxvY2tXaWR0aCArPSB2aWV3ZXJTaXplO1xuICAgICAgfVxuICAgICAgYmxvY2tzICs9IHZpZXdlclNpemU7XG4gICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHZpZXdlci5yb290KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGJsb2NrID0gdWkuZGl2VihbaGVhZGVyLCB3cmFwcGVyLCBncmlkV3JhcHBlcl0sIHtzdHlsZToge2hlaWdodDogYCR7aGVpZ2h0fXB4YCwgd2lkdGg6IGAke2Jsb2NrV2lkdGh9JWB9fSk7XG4gICAgYmxvY2suY2xhc3NMaXN0LmFkZCgndWktYm94Jyk7XG4gICAgdGhpcy5hcHBlbmRSZXN1bHRFbGVtZW50KGJsb2NrLCBvcHRpb25zPy5jYXRlZ29yeSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFJlc3VsdFNjYWxhcihwYXJhbTogREcuRnVuY0NhbGxQYXJhbSwgb3B0aW9uczogeyBjYXB0aW9uPzogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBoZWlnaHQ/OiBudW1iZXIgfSkge1xuICAgIGNvbnN0IHNwYW4gPSB1aS5zcGFuKFtgJHtvcHRpb25zLmNhcHRpb24gPz8gcGFyYW0ubmFtZX06IGAsIGAke3BhcmFtLnZhbHVlfWBdKTtcbiAgICBpZiAoIXRoaXMucGFyYW1TcGFucy5nZXQocGFyYW0ubmFtZSkpIHtcbiAgICAgIGlmICh0aGlzLnJlc3VsdHNUYWJDb250cm9sKVxuICAgICAgICB0aGlzLnJlc3VsdFRhYnMuZ2V0KG9wdGlvbnMuY2F0ZWdvcnkpIS5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5yZXN1bHRzRGl2LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcmFtU3BhbnMuZ2V0KHBhcmFtLm5hbWUpPy5yZXBsYWNlV2l0aChzcGFuKTtcbiAgICB9XG4gICAgdGhpcy5wYXJhbVNwYW5zLnNldChwYXJhbS5uYW1lLCBzcGFuKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwZW5kUmVzdWx0RWxlbWVudChkOiBIVE1MRWxlbWVudCwgY2F0ZWdvcnk/OiBzdHJpbmcpIHtcbiAgICBpZiAoY2F0ZWdvcnkgIT0gbnVsbCAmJiB0aGlzLnJlc3VsdHNUYWJDb250cm9sICE9IHVuZGVmaW5lZCAmJiB0aGlzLnJlc3VsdFRhYnMuZ2V0KGNhdGVnb3J5KSAhPSBudWxsKVxuICAgICAgdGhpcy5yZXN1bHRUYWJzLmdldChjYXRlZ29yeSkhLmFwcGVuZENoaWxkKGQpO1xuICAgIGVsc2VcbiAgICAgIHRoaXMucmVzdWx0c0Rpdi5hcHBlbmRDaGlsZChkKTtcbiAgfVxufVxuXG5jb25zdCBnZXRTaGVldE5hbWUgPSAobmFtZTogc3RyaW5nLCBkaXJlY3Rpb246IERJUkVDVElPTikgPT4ge1xuICBjb25zdCBpZGVhbE5hbWUgPSBgJHtkaXJlY3Rpb259IC0gJHtuYW1lfWA7XG4gIHJldHVybiAoaWRlYWxOYW1lLmxlbmd0aCA+IDMxKSA/IG5hbWUuc3Vic3RyaW5nKDAsIDMyKSA6IGlkZWFsTmFtZTtcbn07XG5cbmVudW0gRElSRUNUSU9OIHtcbiAgSU5QVVQgPSAnSW5wdXQnLFxuICBPVVRQVVQgPSAnT3V0cHV0J1xufVxuXG5jb25zdCBzY2FsYXJzVG9TaGVldCA9IChzaGVldDogRXhjZWxKUy5Xb3Jrc2hlZXQsIHNjYWxhcnM6IHsgY2FwdGlvbjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCB1bml0czogc3RyaW5nIH1bXSkgPT4ge1xuICBzaGVldC5hZGRSb3coWydQYXJhbWV0ZXInLCAnVmFsdWUnLCAnVW5pdHMnXSkuZm9udCA9IHtib2xkOiB0cnVlfTtcbiAgc2NhbGFycy5mb3JFYWNoKChzY2FsYXIpID0+IHtcbiAgICBzaGVldC5hZGRSb3coW3NjYWxhci5jYXB0aW9uLCBzY2FsYXIudmFsdWUsIHNjYWxhci51bml0c10pO1xuICB9KTtcblxuICBzaGVldC5nZXRDb2x1bW4oMSkud2lkdGggPSBNYXRoLm1heChcbiAgICAuLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIuY2FwdGlvbi50b1N0cmluZygpLmxlbmd0aCksICdQYXJhbWV0ZXInLmxlbmd0aFxuICApICogMS4yO1xuICBzaGVldC5nZXRDb2x1bW4oMikud2lkdGggPSBNYXRoLm1heCguLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIudmFsdWUudG9TdHJpbmcoKS5sZW5ndGgpLCAnVmFsdWUnLmxlbmd0aCkgKiAxLjI7XG4gIHNoZWV0LmdldENvbHVtbigzKS53aWR0aCA9IE1hdGgubWF4KC4uLnNjYWxhcnMubWFwKChzY2FsYXIpID0+IHNjYWxhci51bml0cy50b1N0cmluZygpLmxlbmd0aCksICdVbml0cycubGVuZ3RoKSAqIDEuMjtcbn07XG5cbmNvbnN0IGRmVG9TaGVldCA9IChzaGVldDogRXhjZWxKUy5Xb3Jrc2hlZXQsIGRmOiBERy5EYXRhRnJhbWUpID0+IHtcbiAgc2hlZXQuYWRkUm93KGRmLmNvbHVtbnMubmFtZXMoKSkuZm9udCA9IHtib2xkOiB0cnVlfTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZi5yb3dDb3VudDsgaSsrKVxuICAgIHNoZWV0LmFkZFJvdyhbLi4uZGYucm93KGkpLmNlbGxzXS5tYXAoKGNlbGw6IERHLkNlbGwpID0+IGNlbGwudmFsdWUpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRmLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICBzaGVldC5nZXRDb2x1bW4oaSArIDEpLndpZHRoID1cbiAgICAgIE1hdGgubWF4KFxuICAgICAgICAuLi5kZi5jb2x1bW5zLmJ5SW5kZXgoaSkuY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS50b1N0cmluZygpLmxlbmd0aCksXG4gICAgICAgIGRmLmNvbHVtbnMuYnlJbmRleChpKS5uYW1lLmxlbmd0aFxuICAgICAgKSAqIDEuMjtcbiAgfVxufTtcblxuY29uc3QgcGxvdFRvU2hlZXQgPSBhc3luYyAoZXhwb3J0V2I6IEV4Y2VsSlMuV29ya2Jvb2ssIHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgcGxvdDogSFRNTEVsZW1lbnQsIGNvbHVtbkZvckltYWdlOiBudW1iZXIsIHJvd0ZvckltYWdlOiBudW1iZXIgPSAwKSA9PiB7XG4gIGNvbnN0IGNhbnZhcyA9IGF3YWl0IGh0bWwyY2FudmFzKHBsb3QgYXMgSFRNTEVsZW1lbnQsIHtsb2dnaW5nOiBmYWxzZX0pO1xuICBjb25zdCBkYXRhVXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG5cbiAgY29uc3QgaW1hZ2VJZCA9IGV4cG9ydFdiLmFkZEltYWdlKHtcbiAgICBiYXNlNjQ6IGRhdGFVcmwsXG4gICAgZXh0ZW5zaW9uOiAncG5nJyxcbiAgfSk7XG4gIHNoZWV0LmFkZEltYWdlKGltYWdlSWQsIHtcbiAgICB0bDoge2NvbDogY29sdW1uRm9ySW1hZ2UsIHJvdzogcm93Rm9ySW1hZ2V9LFxuICAgIGV4dDoge3dpZHRoOiBjYW52YXMud2lkdGgsIGhlaWdodDogY2FudmFzLmhlaWdodH0sXG4gIH0pO1xufTtcbiJdfQ==
1205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLENBQUMsTUFBTSxVQUFVLENBQUM7QUFDekIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFN0I7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsRUFBRTtJQUNuQyxPQUFPLENBQUMsTUFBVyxFQUFFLFVBQWtCLEVBQUUsVUFBOEIsRUFBRSxFQUFFO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFFbEMsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFlLEdBQUcsSUFBVzs7Z0JBQzlDLElBQUk7b0JBQ0YsT0FBTyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7aUJBQzNDO2dCQUFDLE9BQU8sR0FBUSxFQUFFO29CQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBRSxHQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pDLE1BQU0sR0FBRyxDQUFDO2lCQUNYO1lBQ0gsQ0FBQztTQUFBLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDLENB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LENBQUMsS0FBSztZQUMxQixJQUFJLENBQUMsR0FBRyxDQUNOLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUNqRixFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUNsQyxHQUFHLEdBQUcsQ0FBQztLQUNYO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBTyxRQUEwQixFQUFFLEtBQXdCLEVBQUUsSUFBaUIsRUFBRSxjQUFzQixFQUFFLGNBQXNCLENBQUMsRUFBRSxFQUFFO0lBQ3JKLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLElBQW1CLEVBQUUsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDaEMsTUFBTSxFQUFFLE9BQU87UUFDZixTQUFTLEVBQUUsS0FBSztLQUNqQixDQUFDLENBQUM7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUN0QixFQUFFLEVBQUUsRUFBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUM7UUFDM0MsR0FBRyxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUM7S0FDbEQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xuaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQgJCBmcm9tICdjYXNoLWRvbSc7XG5pbXBvcnQge2hpc3RvcnlVdGlsc30gZnJvbSAnLi9oaXN0b3J5LXV0aWxzJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICAgKiBEZWNvcmF0b3IgdG8gcGFzcyBhbGwgdGhyb3duIGVycm9ycyB0byBncm9rLnNoZWxsLmVycm9yXG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuY2NhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjb25zdCBwYXNzRXJyb3JUb1NoZWxsID0gKCkgPT4ge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBtZW1iZXJOYW1lOiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gZGVzY3JpcHRvci52YWx1ZTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG9yaWdpbmFsLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBncm9rLnNoZWxsLmVycm9yKChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBJTlRFUkFDVElWRV9DU1NfQ0xBU1MgPSAnY3YtaW50ZXJhY3RpdmUnO1xuXG5leHBvcnQgdHlwZSBEYXRlT3B0aW9ucyA9ICdBbnkgdGltZScgfCAnVG9kYXknIHwgJ1llc3RlcmRheScgfCAnVGhpcyB3ZWVrJyB8ICdMYXN0IHdlZWsnIHwgJ1RoaXMgbW9udGgnIHwgJ0xhc3QgbW9udGgnIHwgJ1RoaXMgeWVhcicgfCAnTGFzdCB5ZWFyJztcblxuZXhwb3J0IHR5cGUgRmlsdGVyT3B0aW9ucyA9IHtcbiAgdGV4dD86IHN0cmluZyxcbiAgZGF0ZT86IERhdGVPcHRpb25zLFxuICBhdXRob3I/OiBERy5Vc2VyLFxuICBpc1NoYXJlZD86IGJvb2xlYW4sXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFVzZXJzSWRzID0ge1xuICAnVGVzdCc6ICdjYTFlNjcyZS1lM2JlLTQwZTAtYjc5Yi1kMmM2OGU2OGQzODAnLFxuICAnQWRtaW4nOiAnODc4YzQyYjAtOWE1MC0xMWU2LWM1MzctNmJmOGU5YWIwMmVlJyxcbiAgJ1N5c3RlbSc6ICczZTMyYzVmYS1hYzljLTRkMzktOGI0Yi00ZGIzZTU3NmIzYzMnLFxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRHcm91cHNJZHMgPSB7XG4gICdBbGwgdXNlcnMnOiAnYTRiNDU4NDAtOWE1MC0xMWU2LTljYzktODU0NmI4YmY2MmU2JyxcbiAgJ0RldmVsb3BlcnMnOiAnYmE5Y2QxOTEtOWE1MC0xMWU2LTljYzktOTEwYmY4MjdmMGFiJyxcbiAgJ05lZWQgdG8gY3JlYXRlJzogJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcsXG4gICdUZXN0JzogJ2NhMWU2NzJlLWUzYmUtNDBlMC1iNzliLTg1NDZiOGJmNjJlNicsXG4gICdBZG1pbic6ICdhNGI0NTg0MC05YTUwLTExZTYtYzUzNy02YmY4ZTlhYjAyZWUnLFxuICAnU3lzdGVtJzogJ2E0YjQ1ODQwLWFjOWMtNGQzOS04YjRiLTRkYjNlNTc2YjNjMycsXG4gICdBZG1pbmlzdHJhdG9ycyc6ICcxYWI4YjM4ZC05YzRlLTRiMWUtODFjMy1hZTJiZGUzZTEyYzUnLFxufTtcblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uVmlldyBleHRlbmRzIERHLlZpZXdCYXNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRleHQ6IERHLkNvbnRleHQ7XG4gIHByb3RlY3RlZCBfZnVuY0NhbGw/OiBERy5GdW5jQ2FsbDtcbiAgcHJvdGVjdGVkIF9sYXN0Q2FsbD86IERHLkZ1bmNDYWxsO1xuICBwcm90ZWN0ZWQgX3R5cGU6IHN0cmluZyA9ICdmdW5jdGlvbic7XG5cbiAgY29uc3RydWN0b3IoZnVuY0NhbGw/OiBERy5GdW5jQ2FsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5ib3ggPSB0cnVlO1xuICAgIHRoaXMuY29udGV4dCA9IERHLkNvbnRleHQuY2xvbmVEZWZhdWx0KCk7XG5cbiAgICBpZiAoIWZ1bmNDYWxsKSByZXR1cm47XG5cbiAgICB0aGlzLmJhc2VQYXRoID0gYC8ke2Z1bmNDYWxsLmZ1bmMubmFtZX1gO1xuICAgIHRoaXMubGlua0Z1bmNjYWxsKGZ1bmNDYWxsKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLmJ1aWxkKCk7XG4gICAgdGhpcy5uYW1lID0gZnVuY0NhbGwuZnVuYy5mcmllbmRseU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgZnVuY3Rpb24gY2FsbCBvZiB0aGUgdmlld1xuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmNjYWxsIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBnZXQgZnVuY0NhbGwoKTogREcuRnVuY0NhbGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mdW5jQ2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgRnVuYyBvZiB0aGUgdmlld1xuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmMgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgZ2V0IGZ1bmMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY0NhbGw/LmZ1bmM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRhdGEgb2YgbGFzdCBjYWxsIG9mIGFzc29jaWF0ZWQgZnVuY3Rpb25cbiAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmdW5jIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGdldCBsYXN0Q2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFzdENhbGw7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGRhdGEgb2YgbGFzdCBjYWxsIG9mIGFzc29jaWF0ZWQgZnVuY3Rpb25cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBzZXQgbGFzdENhbGwobGFzdENhbGw6IERHLkZ1bmNDYWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbGFzdENhbGwgPSBsYXN0Q2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaWV3IHR5cGVcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIC8qKiBFeHBvcnQgb3B0aW9ucy4gQ291bGQgYmUgb3ZlcnJpZGVuIHBhcnRpYWxseSwgdXNpbmcgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIG9wdGlvbi5cbiAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIGV4cG9ydENvbmZpZzoge1xuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBleHBvcnQgbG9naWMuXG4gICAgICAqXG4gICAgICAqICBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHtAbGluayBkZWZhdWx0RXhwb3J0fSBoZWF2aWx5IHJlbGllcyBvbiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgYnVpbGRJT30uXG4gICAgICAqIEByZXR1cm5zIEJsb2Igd2l0aCBkYXRhIHRvIGJlIGV4cG9ydGVkIGludG8gdGhlIGZpbGUuXG4gICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBleHBvcnQ6ICgoZm9ybWF0OiBzdHJpbmcpID0+IFByb21pc2U8QmxvYj4pO1xuXG5cbiAgICAvKiogRmlsZW5hbWUgZm9yIGV4cG9ydGVkIGZpbGVzLiBPdmVycmlkZSBmb3IgY3VzdG9tIGZpbGVuYW1lcy5cbiAgICAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB7QGxpbmsgZGVmYXVsdEV4cG9ydEZpbGVuYW1lfVxuICAgICAgKiBAcGFyYW0gZm9ybWF0IEZvcm1hdCBuYW1lIHRvIGJlIGV4cG9ydGVkXG4gICAgICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZmlsZW5hbWUgdG8gYmUgdXNlZCBmb3IgdGhlIGdlbmVyYXRlZCBmaWxlLlxuICAgICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAgICovXG4gICAgZmlsZW5hbWU6ICgoZm9ybWF0OiBzdHJpbmcpID0+IHN0cmluZyk7XG5cbiAgICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBjdXN0b20gbGlzdCBvZiBzdXBwb3J0ZWQgZXhwb3J0IGZvcm1hdHMuXG4gICAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB7QGxpbmsgZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEZvcm1hdHN9XG4gICAgICogVGhlc2UgZm9ybWF0cyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBcIkV4cG9ydFwiIHBvcHVwIG9uIHRoZSByaWJib24gcGFuZWwuXG4gICAgICogQHJldHVybnMgVGhlIGFycmF5IG9mIGZvcm1hdHMgYXZhaWxhYmxlIGZvciB0aGUgZXhwb3J0LlxuICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBzdXBwb3J0ZWRGb3JtYXRzOiBzdHJpbmdbXTtcblxuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBmaWxlIGV4dGVuc2lvbnMgZm9yIGV4cG9ydGVkIGZvcm1hdHMuXG4gICAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9uc31cbiAgICAgICAqIFRoZXNlIGV4dGVuc2lvbnMgYXJlIHVzZWQgaW4gZmlsZW5hbWVzIHtAbGluayBleHBvcnRGaWxlbmFtZX0uXG4gICAgICAgKiBAcmV0dXJucyBUaGUgbWFwcGluZyBiZXR3ZWVuIHN1cHBvcnRlZCBleHBvcnQgZm9ybWF0cyBhbmQgdGhlaXIgZXh0ZW5zaW9ucy5cbiAgICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgICovXG4gICAgc3VwcG9ydGVkRXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBMaW5rIEZ1bmNDYWxsIHRvIHRoZSB2aWV3XG4gICAqIEBwYXJhbSBmdW5jQ2FsbCBUaGUgYWN0dWFsIGZ1bmNjYWxsIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBsaW5rRnVuY2NhbGwoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7XG4gICAgY29uc3QgaXNQcmV2aW91c0hpc3RvcmljYWwgPSB0aGlzLl9mdW5jQ2FsbD8ub3B0aW9uc1snaXNIaXN0b3JpY2FsJ107XG4gICAgdGhpcy5fZnVuY0NhbGwgPSBmdW5jQ2FsbDtcblxuICAgIGlmIChmdW5jQ2FsbC5vcHRpb25zWydpc0hpc3RvcmljYWwnXSkge1xuICAgICAgaWYgKCFpc1ByZXZpb3VzSGlzdG9yaWNhbCkge1xuICAgICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLm5hbWV9IOKAlCAke2Z1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSl9YDtcbiAgICAgICAgdGhpcy5zZXRSdW5WaWV3UmVhZG9ubHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZS5zdWJzdHJpbmcoMCwgdGhpcy5uYW1lLmluZGV4T2YoJyDigJQgJykpfSDigJQgJHtmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID8/IG5ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pfWA7XG4gICAgICB9XG5cbiAgICAgIC8vIEZJWCBNRTogdmlldyBuYW1lIGRvZXMgbm90IGNoYW5nZSBpbiBtb2RlbHNcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5kNC1yaWJib24tbmFtZScpPy5yZXBsYWNlQ2hpbGRyZW4odWkuc3BhbihbdGhpcy5uYW1lXSkpO1xuICAgICAgdGhpcy5wYXRoID0gYD9pZD0ke3RoaXMuX2Z1bmNDYWxsLmlkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0UnVuVmlld0VkaXRhYmxlKCk7XG4gICAgICB0aGlzLnBhdGggPSBgYDtcblxuICAgICAgaWYgKGlzUHJldmlvdXNIaXN0b3JpY2FsKVxuICAgICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLm5hbWUuc3Vic3RyaW5nKDAsIHRoaXMubmFtZS5pbmRleE9mKCcg4oCUICcpKX1gO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUmliYm9uUGFuZWxzKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIGZvciBjdXN0b20gbG9naWMgdGhhdCBjb3VsZCBub3QgYmUgcGxhY2VkIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICogQW55IGFzeW5jIG1ldGhvZHMgYW5kIG1vc3Qgb2YgdGhlIGxvZ2ljIHNob3VsZCBiZSBwbGFjZWQgaGVyZS5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgaW5pdCgpIHtcbiAgICBpZiAodGhpcy5mdW5jQ2FsbCAmJiB0aGlzLmZ1bmMpIHtcbiAgICAgIHRoaXMuZnVuY0NhbGwuYXV4Wyd2aWV3J10gPSB0aGlzO1xuICAgICAgdGhpcy5mdW5jQ2FsbC5jb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgICBmb3IgKGNvbnN0IGluUGFyYW0gb2Ygd3UodGhpcy5mdW5jQ2FsbC5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAgIC5maWx0ZXIoKHA6IERHLkZ1bmNDYWxsUGFyYW0pID0+XG4gICAgICAgICAgcC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIHAucHJvcGVydHkub3B0aW9uc1sndmlld2VyJ10gIT0gbnVsbCkpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goaW5QYXJhbS5vbkNoYW5nZWQuc3Vic2NyaWJlKGFzeW5jIChwYXJhbTogREcuRnVuY0NhbGxQYXJhbSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2xlYXJSZXN1bHRzKGZhbHNlKTtcbiAgICAgICAgICBwYXJhbS5wcm9jZXNzT3V0cHV0KCk7XG5cbiAgICAgICAgICB0aGlzLmFwcGVuZE91dHB1dERmKHBhcmFtLCB7XG4gICAgICAgICAgICBoZWlnaHQ6IDQwMCxcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnSW5wdXQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgZnVsbHkgY3VzdG9tIFVJIGluY2x1ZGluZyByaWJib24gbWVudXMgYW5kIHBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5idWlsZElPKCkpO1xuICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLm92ZXJsYXlEaXYpO1xuXG4gICAgdGhpcy5idWlsZEhpc3RvcnlCbG9jaygpO1xuICAgIHRoaXMuYnVpbGRSaWJib25NZW51KCk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIGlucHV0LW91dHB1dCBibG9ja1xuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCB3aG9sZSBVSSBleGNsdWRpbmcgcmliYm9uIG1lbnVzIGFuZCBwYW5lbHNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRJTygpOiBIVE1MRWxlbWVudCB7XG4gICAgdGhpcy5leHBvcnRDb25maWcgPSB7XG4gICAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zKCksXG4gICAgICBzdXBwb3J0ZWRGb3JtYXRzOiB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRGb3JtYXRzKCksXG4gICAgICBleHBvcnQ6IHRoaXMuZGVmYXVsdEV4cG9ydCxcbiAgICAgIGZpbGVuYW1lOiB0aGlzLmRlZmF1bHRFeHBvcnRGaWxlbmFtZSxcbiAgICB9O1xuXG4gICAgY29uc3QgaW5wdXRCbG9jayA9IHRoaXMuYnVpbGRJbnB1dEJsb2NrKCk7XG4gICAgY29uc3Qgb3V0cHV0QmxvY2sgPSB0aGlzLmJ1aWxkT3V0cHV0QmxvY2soKTtcblxuICAgIHJldHVybiB1aS5zcGxpdEgoW2lucHV0QmxvY2ssIG91dHB1dEJsb2NrXSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaW5wdXQgYmxvY2tcbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaW5wdXQgYmxvY2sgVUkgb24gdGhlIGxlZnQgc2lkZSBieSBkZWZhdWx0XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkSW5wdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmZ1bmNDYWxsKSByZXR1cm4gdGhpcy5jb250cm9sc1Jvb3Q7XG5cbiAgICBjb25zdCBmdW5jRGl2ID0gdWkuZGl2KFt0aGlzLnJlbmRlclJ1blNlY3Rpb24odGhpcy5mdW5jQ2FsbCldLCAndWktZGl2Jyk7XG4gICAgdWkuZW1wdHkodGhpcy5jb250cm9sc1Jvb3QpO1xuICAgIHRoaXMuY29udHJvbHNSb290LmFwcGVuZENoaWxkKGZ1bmNEaXYpO1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xzUm9vdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gb3V0cHV0IGJsb2NrLlxuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCBpbnB1dCBibG9jayBVSSBvbiB0aGUgbGVmdCBzaWRlIGJ5IGRlZmF1bHRcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRPdXRwdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgdWkuZW1wdHkodGhpcy5yZXN1bHRzUm9vdCk7XG4gICAgdGhpcy5yZXN1bHRzUm9vdC5hcHBlbmRDaGlsZCh0aGlzLnJlc3VsdHNEaXYpO1xuICAgIHJldHVybiB0aGlzLnJlc3VsdHNSb290O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBoaXN0b3JpY2FsIHJ1bnMgY29udHJvbC5cbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaGlzdG9yeSBibG9jayBVSVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZEhpc3RvcnlCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgbWFpbkFjYyA9IHVpLmFjY29yZGlvbigpO1xuICAgIG1haW5BY2Mucm9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBtYWluQWNjLmFkZFRpdGxlKHVpLnNwYW4oWydIaXN0b3J5J10pKTtcblxuICAgIGNvbnN0IGZpbHRlcmluZ09wdGlvbnM6IEZpbHRlck9wdGlvbnMgPSB7fTtcbiAgICBjb25zdCBmaWx0ZXJpbmdUZXh0ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0IGJ1aWxkRmlsdGVyUGFuZSA9ICgpID0+IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGV4dElucHV0ID0gdWkuc3RyaW5nSW5wdXQoJ1NlYXJjaCcsICcnLCAodjogc3RyaW5nKSA9PiBmaWx0ZXJpbmdUZXh0Lm5leHQodikpO1xuICAgICAgREcuZGVib3VuY2UoZmlsdGVyaW5nVGV4dC5hc09ic2VydmFibGUoKSwgNjAwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBmaWx0ZXJpbmdPcHRpb25zLnRleHQgPSB0ZXh0SW5wdXQuc3RyaW5nVmFsdWU7XG4gICAgICAgIHVwZGF0ZVNoYXJlZFBhbmUoKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0ZUlucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ0RhdGUgc3RhcnRlZCcsICdBbnkgdGltZScsIFsnQW55IHRpbWUnLCAnVG9kYXknLCAnWWVzdGVyZGF5JywgJ1RoaXMgd2VlaycsICdMYXN0IHdlZWsnLCAnVGhpcyBtb250aCcsICdMYXN0IG1vbnRoJywgJ1RoaXMgeWVhcicsICdMYXN0IHllYXInXSwgKHY6IERhdGVPcHRpb25zKSA9PiB7XG4gICAgICAgIGZpbHRlcmluZ09wdGlvbnMuZGF0ZSA9IHY7XG4gICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKGZpbHRlcmluZ09wdGlvbnMpO1xuICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgIHVwZGF0ZVNoYXJlZFBhbmUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkZWZhdWx0VXNlcnMgPSBPYmplY3QudmFsdWVzKGRlZmF1bHRVc2Vyc0lkcyk7XG4gICAgICBjb25zdCBhbGxVc2VycyA9IGF3YWl0IGdyb2suZGFwaS51c2Vycy5saXN0KCk7XG4gICAgICBjb25zdCBmaWx0ZXJlZFVzZXJzID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyKSA9PiAhZGVmYXVsdFVzZXJzLmluY2x1ZGVzKHVzZXIuaWQpKTtcblxuICAgICAgY29uc3QgYXV0aG9ySW5wdXQgPSB1aS5jaG9pY2VJbnB1dDxERy5Vc2VyIHwgc3RyaW5nPignQXV0aG9yJywgJ0FueW9uZScsIFsnQW55b25lJywgLi4uZmlsdGVyZWRVc2Vyc10sICh2OiBERy5Vc2VyIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgIGZpbHRlcmluZ09wdGlvbnMuYXV0aG9yID0gKHYgPT09ICdBbnlvbmUnKSA/IHVuZGVmaW5lZCA6IHYgYXMgREcuVXNlcjtcbiAgICAgICAgdXBkYXRlU2hhcmVkUGFuZSgpO1xuICAgICAgfSk7XG4gICAgICBkYXRlSW5wdXQuYWRkUGF0dGVybk1lbnUoJ2RhdGV0aW1lJyk7XG4gICAgICBjb25zdCBmb3JtID0gdWkuZGl2VihbXG4gICAgICAgIHRleHRJbnB1dCxcbiAgICAgICAgZGF0ZUlucHV0LFxuICAgICAgICBhdXRob3JJbnB1dCxcbiAgICAgIF0sICd1aS1mb3JtLWNvbmRlbnNlZCB1aS1mb3JtJyk7XG4gICAgICBmb3JtLnN0eWxlLm1hcmdpbkxlZnQgPSAnMHB4JztcblxuICAgICAgcmV0dXJuIGZvcm07XG4gICAgfSk7XG4gICAgbGV0IGZpbHRlclBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ0ZpbHRlcicsIGJ1aWxkRmlsdGVyUGFuZSk7XG4gICAgY29uc3QgdXBkYXRlRmlsdGVyUGFuZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBmaWx0ZXJQYW5lLmV4cGFuZGVkO1xuICAgICAgbWFpbkFjYy5yZW1vdmVQYW5lKGZpbHRlclBhbmUpO1xuICAgICAgZmlsdGVyUGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnRmlsdGVyJywgYnVpbGRGaWx0ZXJQYW5lLCBpc0V4cGFuZGVkLCBmYXZvcml0ZXNMaXN0UGFuZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dBZGRUb0Zhdm9yaXRlc0RpYWxvZyA9IChmdW5jQ2FsbDogREcuRnVuY0NhbGwpID0+IHtcbiAgICAgIGxldCB0aXRsZSA9IGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gJyc7XG4gICAgICBsZXQgYW5ub3RhdGlvbiA9IGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA/PyAnJztcbiAgICAgIGNvbnN0IHRpdGxlSW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnVGl0bGUnLCB0aXRsZSwgKHM6IHN0cmluZykgPT4ge1xuICAgICAgICB0aXRsZSA9IHM7XG4gICAgICAgIGlmIChzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRpdGxlSW5wdXQuc2V0VG9vbHRpcCgnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aXRsZUlucHV0LmlucHV0LmNsYXNzTGlzdC5hZGQoJ2Q0LWludmFsaWQnKSwgMTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aXRsZUlucHV0LnNldFRvb2x0aXAoJycpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGl0bGVJbnB1dC5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdkNC1pbnZhbGlkJyksIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB1aS5kaWFsb2coe3RpdGxlOiAnQWRkIHRvIGZhdm9yaXRlcyd9KVxuICAgICAgICAuYWRkKHVpLmZvcm0oW1xuICAgICAgICAgIHRpdGxlSW5wdXQsXG4gICAgICAgICAgdWkuc3RyaW5nSW5wdXQoJ0Fubm90YXRpb24nLCBhbm5vdGF0aW9uLCAoczogc3RyaW5nKSA9PiB7IGFubm90YXRpb24gPSBzOyB9KSxcbiAgICAgICAgXSkpXG4gICAgICAgIC5vbk9LKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAodGl0bGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA9IHRpdGxlO1xuICAgICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddID0gYW5ub3RhdGlvbjtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUnVuVG9GYXZvcml0ZXMoZnVuY0NhbGwpO1xuICAgICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICAgIHVwZGF0ZUZhdm9yaXRlc1BhbmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdUaXRsZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvd0RlbGV0ZVJ1bkRpYWxvZyA9IChmdW5jQ2FsbDogREcuRnVuY0NhbGwpID0+IHtcbiAgICAgIHVpLmRpYWxvZyh7dGl0bGU6ICdEZWxldGUgcnVuJ30pXG4gICAgICAgIC5hZGQodWkuZGl2VGV4dCgnVGhlIGRlbGV0ZWQgcnVuIGlzIGltcG9zc2libGUgdG8gcmVzdG9yZS4gQXJlIHlvdSBzdXJlPycpKVxuICAgICAgICAub25PSyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVSdW4oZnVuY0NhbGwpO1xuICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvd0FkZFRvU2hhcmVkRGlhbG9nID0gKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkgPT4ge1xuICAgICAgbGV0IHRpdGxlID0gZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyAnJztcbiAgICAgIGxldCBhbm5vdGF0aW9uID0gZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddID8/ICcnO1xuICAgICAgY29uc3QgdGl0bGVJbnB1dCA9IHVpLnN0cmluZ0lucHV0KCdUaXRsZScsIHRpdGxlLCAoczogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRpdGxlID0gcztcbiAgICAgICAgaWYgKHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGl0bGVJbnB1dC5zZXRUb29sdGlwKCdUaXRsZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRpdGxlSW5wdXQuaW5wdXQuY2xhc3NMaXN0LmFkZCgnZDQtaW52YWxpZCcpLCAxMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRpdGxlSW5wdXQuc2V0VG9vbHRpcCgnJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aXRsZUlucHV0LmlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Q0LWludmFsaWQnKSwgMTAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHVpLmRpYWxvZyh7dGl0bGU6ICdBZGQgdG8gc2hhcmVkJ30pXG4gICAgICAgIC5hZGQodWkuZm9ybShbXG4gICAgICAgICAgdGl0bGVJbnB1dCxcbiAgICAgICAgICB1aS5zdHJpbmdJbnB1dCgnQW5ub3RhdGlvbicsIGFubm90YXRpb24sIChzOiBzdHJpbmcpID0+IHsgYW5ub3RhdGlvbiA9IHM7IH0pLFxuICAgICAgICBdKSlcbiAgICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aXRsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmdW5jQ2FsbCA9IGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkUnVuKGZ1bmNDYWxsLmlkKTtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPSB0aXRsZTtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA9IGFubm90YXRpb247XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJ1blRvU2hhcmVkKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgICAgICB1cGRhdGVTaGFyZWRQYW5lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZygnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlfSk7XG4gICAgfTtcblxuICAgIGxldCBoaXN0b3J5Q2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGxldCBmYXZvcml0ZUNhcmRzID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBsZXQgc2hhcmVkQ2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGNvbnN0IHJlbmRlckZhdm9yaXRlQ2FyZHMgPSBhc3luYyAoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSA9PiB7XG4gICAgICBmYXZvcml0ZUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHtcbiAgICAgICAgY29uc3QgdW5zdGFySWNvbiA9IHVpLmljb25GQSgnc3RhcicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmdW5jQ2FsbCk7XG4gICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgIH0sICdVbmZhdm9yaXRlIHRoZSBydW4nKTtcbiAgICAgICAgdW5zdGFySWNvbi5jbGFzc0xpc3QuYWRkKCdmYXMnKTtcblxuICAgICAgICBjb25zdCBzaGFyZUljb24gPSB1aS5pY29uRkEoJ2V5ZScsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHNob3dBZGRUb1NoYXJlZERpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgIH0sICdBZGQgdG8gc2hhcmVkJyk7XG4gICAgICAgIHNoYXJlSWNvbi5jbGFzc0xpc3QuYWRkKCdmYWwnKTtcblxuICAgICAgICBjb25zdCBjYXJkID0gdWkuZGl2SChbXG4gICAgICAgICAgdWkuZGl2VihbXG4gICAgICAgICAgICB1aS5kaXZUZXh0KGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gJ0RlZmF1bHQgdGl0bGUnLCAndGl0bGUnKSxcbiAgICAgICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10pID8gW3VpLmRpdlRleHQoZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddLCAnZGVzY3JpcHRpb24nKV06IFtdLFxuICAgICAgICAgICAgdWkuZGl2SChbdWkucmVuZGVyKGZ1bmNDYWxsLmF1dGhvciksIHVpLnNwYW4oW25ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pXSwgJ2RhdGUnKV0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgc2hhcmVJY29uLFxuICAgICAgICAgICAgdWkuaWNvbkZBKCdwZW4nLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHNob3dBZGRUb0Zhdm9yaXRlc0RpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgICAgICB9LCAnRWRpdCBydW4gbWV0YWRhdGEnKSxcbiAgICAgICAgICAgIHVuc3Rhckljb25cbiAgICAgICAgICBdLCAnY3YtZnVuY2NhbGwtY2FyZC1pY29ucycpXG4gICAgICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkJyk7XG5cbiAgICAgICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy5yb290LCB0cnVlKTtcbiAgICAgICAgICB0aGlzLmxpbmtGdW5jY2FsbChhd2FpdCB0aGlzLmxvYWRSdW4oZnVuY0NhbGwuaWQpKTtcbiAgICAgICAgICBjYXJkLmNsYXNzTGlzdC5hZGQoJ2NsaWNrZWQnKTtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy5yb290LCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2FyZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhbGxDYXJkcyA9IFsuLi5oaXN0b3J5Q2FyZHMsIC4uLmZhdm9yaXRlQ2FyZHMsIC4uLnNoYXJlZENhcmRzXTtcbiAgICAgIGFsbENhcmRzLmZvckVhY2goKGNhcmQpID0+IGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBhbGxDYXJkcy5mb3JFYWNoKChjKSA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ2NsaWNrZWQnKSkpKTtcblxuICAgICAgcmV0dXJuIHVpLmRpdlYoZmF2b3JpdGVDYXJkcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlclNoYXJlZENhcmRzID0gYXN5bmMgKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkgPT4ge1xuICAgICAgc2hhcmVkQ2FyZHMgPSBmdW5jQ2FsbHMubWFwKChmdW5jQ2FsbCkgPT4ge1xuICAgICAgICBjb25zdCB1bnNoYXJlSWNvbiA9IHVpLmljb25GQSgnZXllLXNsYXNoJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVSdW5Gcm9tU2hhcmVkKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1cGRhdGVIaXN0b3J5UGFuZSgpO1xuICAgICAgICAgIHVwZGF0ZVNoYXJlZFBhbmUoKTtcbiAgICAgICAgfSwgJ0hpZGUgZnJvbSBzaGFyZWQnKTtcblxuICAgICAgICBjb25zdCBjYXJkID0gdWkuZGl2SChbXG4gICAgICAgICAgdWkuZGl2VihbXG4gICAgICAgICAgICB1aS5kaXZUZXh0KGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gJ0RlZmF1bHQgdGl0bGUnLCAndGl0bGUnKSxcbiAgICAgICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10pID8gW3VpLmRpdlRleHQoZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddLCAnZGVzY3JpcHRpb24nKV06IFtdLFxuICAgICAgICAgICAgdWkuZGl2SChbdWkucmVuZGVyKGZ1bmNDYWxsLmF1dGhvciksIHVpLnNwYW4oW25ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pXSwgJ2RhdGUnKV0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgdWkuaWNvbkZBKCdsaW5rJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufSR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfT9pZD0ke2Z1bmNDYWxsLmlkfWApO1xuICAgICAgICAgICAgfSwgJ0NvcHkgbGluayB0byB0aGUgcnVuJyksXG4gICAgICAgICAgICAuLi4oZnVuY0NhbGwuYXV0aG9yLmlkID09PSBncm9rLnNoZWxsLnVzZXIuaWQpID8gW1xuICAgICAgICAgICAgICB1aS5pY29uRkEoJ3BlbicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHNob3dBZGRUb1NoYXJlZERpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgICAgICAgIH0sICdFZGl0IHJ1biBtZXRhZGF0YScpLFxuICAgICAgICAgICAgICB1bnNoYXJlSWNvbl06IFtdLFxuICAgICAgICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkLWljb25zJylcbiAgICAgICAgXSwgJ2N2LWZ1bmNjYWxsLWNhcmQnKTtcblxuICAgICAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIHRoaXMubGlua0Z1bmNjYWxsKGF3YWl0IHRoaXMubG9hZFJ1bihmdW5jQ2FsbC5pZCkpO1xuICAgICAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZCgnY2xpY2tlZCcpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYXJkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFsbENhcmRzID0gWy4uLmhpc3RvcnlDYXJkcywgLi4uZmF2b3JpdGVDYXJkcywgLi4uc2hhcmVkQ2FyZHNdO1xuICAgICAgYWxsQ2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4gY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGFsbENhcmRzLmZvckVhY2goKGMpID0+IGMuY2xhc3NMaXN0LnJlbW92ZSgnY2xpY2tlZCcpKSkpO1xuXG4gICAgICByZXR1cm4gdWkuZGl2VihzaGFyZWRDYXJkcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckhpc3RvcnlDYXJkcyA9IGFzeW5jIChmdW5jQ2FsbHM6IERHLkZ1bmNDYWxsW10pID0+IHtcbiAgICAgIGhpc3RvcnlDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IGljb24gPSBmdW5jQ2FsbC5hdXRob3IucGljdHVyZSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWNvbi5zdHlsZS53aWR0aCA9ICcyNXB4JztcbiAgICAgICAgaWNvbi5zdHlsZS5oZWlnaHQgPSAnMjVweCc7XG4gICAgICAgIGljb24uc3R5bGUuZm9udFNpemUgPSAnMjBweCc7XG4gICAgICAgIGljb24uc3R5bGUubWFyZ2luUmlnaHQgPSAnM3B4JztcbiAgICAgICAgaWNvbi5zdHlsZS5hbGlnblNlbGYgPSAnY2VudGVyJztcbiAgICAgICAgY29uc3QgdXNlckxhYmVsID0gdWkubGFiZWwoZnVuY0NhbGwuYXV0aG9yLmZyaWVuZGx5TmFtZSwgJ2Q0LWxpbmstbGFiZWwnKTtcbiAgICAgICAgdWkuYmluZChmdW5jQ2FsbC5hdXRob3IsIGljb24pO1xuXG4gICAgICAgIGNvbnN0IHNoYXJlSWNvbiA9IHVpLmljb25GQSgnZXllJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgc2hvd0FkZFRvU2hhcmVkRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgfSwgJ0FkZCB0byBzaGFyZWQnKTtcbiAgICAgICAgc2hhcmVJY29uLmNsYXNzTGlzdC5hZGQoJ2ZhbCcpO1xuXG4gICAgICAgIGNvbnN0IHVuc2hhcmVJY29uID0gdWkuaWNvbkZBKCdleWUtc2xhc2gnLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZVJ1bkZyb21TaGFyZWQoZnVuY0NhbGwpO1xuICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgICAgdXBkYXRlU2hhcmVkUGFuZSgpO1xuICAgICAgICB9LCAnSGlkZSBmcm9tIHNoYXJlZCcpO1xuXG4gICAgICAgIGNvbnN0IHVuc3RhciA9IHVpLmljb25GQSgnc3RhcicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmdW5jQ2FsbCk7XG4gICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgIH0sICdVbmZhdm9yaXRlIHRoZSBydW4nKTtcbiAgICAgICAgdW5zdGFyLmNsYXNzTGlzdC5hZGQoJ2ZhcycpO1xuXG4gICAgICAgIGNvbnN0IGNhcmQgPSB1aS5kaXZIKFtcbiAgICAgICAgICB1aS5kaXZIKFtcbiAgICAgICAgICAgIGljb24sXG4gICAgICAgICAgICB1aS5kaXZWKFtcbiAgICAgICAgICAgICAgdXNlckxhYmVsLFxuICAgICAgICAgICAgICB1aS5zcGFuKFtuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KV0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICB1aS5kaXZIKFtcbiAgICAgICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddKSA/IFt1bnNoYXJlSWNvbl06IFtzaGFyZUljb25dLFxuICAgICAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSkgPyBbdW5zdGFyXSA6IFt1aS5pY29uRkEoJ3N0YXInLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHNob3dBZGRUb0Zhdm9yaXRlc0RpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgICAgICB9LCAnQWRkIHRvIGZhdm9yaXRlcycpXSxcbiAgICAgICAgICAgIHVpLmljb25GQSgndHJhc2gtYWx0JywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBzaG93RGVsZXRlUnVuRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIH0sICdEZWxldGUgdGhlIHJ1bicpLFxuICAgICAgICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkLWljb25zJylcbiAgICAgICAgXSwgJ2N2LWZ1bmNjYWxsLWNhcmQnKTtcblxuICAgICAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIHRoaXMubGlua0Z1bmNjYWxsKGF3YWl0IHRoaXMubG9hZFJ1bihmdW5jQ2FsbC5pZCkpO1xuICAgICAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZCgnY2xpY2tlZCcpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNhcmQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWxsQ2FyZHMgPSBbLi4uaGlzdG9yeUNhcmRzLCAuLi5mYXZvcml0ZUNhcmRzLCAuLi5zaGFyZWRDYXJkc107XG4gICAgICBhbGxDYXJkcy5mb3JFYWNoKChjYXJkKSA9PiBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gYWxsQ2FyZHMuZm9yRWFjaCgoYykgPT4gYy5jbGFzc0xpc3QucmVtb3ZlKCdjbGlja2VkJykpKSk7XG5cbiAgICAgIHJldHVybiB1aS5kaXZWKGhpc3RvcnlDYXJkcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkU2hhcmVkTGlzdCA9ICgpID0+IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaGlzdG9yaWNhbFJ1bnMgPSBhd2FpdCBoaXN0b3J5VXRpbHMucHVsbFJ1bnNCeU5hbWUodGhpcy5mdW5jIS5uYW1lLCBbZmlsdGVyaW5nT3B0aW9uc10sIHtvcmRlcjogJ3N0YXJ0ZWQnfSwgWydzZXNzaW9uLnVzZXInLCAnb3B0aW9ucyddKTtcbiAgICAgIGNvbnN0IHNoYXJlZFJ1bnMgPSBoaXN0b3JpY2FsUnVucy5maWx0ZXIoKHJ1bikgPT4gcnVuLm9wdGlvbnNbJ2lzU2hhcmVkJ10pO1xuICAgICAgaWYgKHNoYXJlZFJ1bnMubGVuZ3RoID4gMClcbiAgICAgICAgcmV0dXJuIHVpLndhaXQoKCkgPT4gcmVuZGVyU2hhcmVkQ2FyZHMoc2hhcmVkUnVucykpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgbWFya2VkIGFzIHNoYXJlZCcsICdkZXNjcmlwdGlvbicpO1xuICAgIH0pO1xuICAgIGxldCBzaGFyZWRMaXN0UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnU2hhcmVkJywgKCkgPT4gYnVpbGRTaGFyZWRMaXN0KCksIHRydWUpO1xuICAgIGNvbnN0IHVwZGF0ZVNoYXJlZFBhbmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpc0V4cGFuZGVkID0gc2hhcmVkTGlzdFBhbmUuZXhwYW5kZWQ7XG4gICAgICBtYWluQWNjLnJlbW92ZVBhbmUoc2hhcmVkTGlzdFBhbmUpO1xuICAgICAgc2hhcmVkTGlzdFBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ1NoYXJlZCcsICgpID0+IGJ1aWxkU2hhcmVkTGlzdCgpLCBpc0V4cGFuZGVkLCBmYXZvcml0ZXNMaXN0UGFuZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkRmF2b3JpdGVzTGlzdCA9IChmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30pID0+IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaGlzdG9yaWNhbFJ1bnMgPSBhd2FpdCBoaXN0b3J5VXRpbHMucHVsbFJ1bnNCeU5hbWUodGhpcy5mdW5jIS5uYW1lLCBbZmlsdGVyT3B0aW9uc10sIHtvcmRlcjogJ3N0YXJ0ZWQnfSwgWydzZXNzaW9uLnVzZXInLCAnb3B0aW9ucyddKTtcbiAgICAgIGNvbnN0IGZhdm9yaXRlUnVucyA9IGhpc3RvcmljYWxSdW5zLmZpbHRlcigocnVuKSA9PiBydW4ub3B0aW9uc1snaXNGYXZvcml0ZSddICYmICFydW4ub3B0aW9uc1snaXNJbXBvcnRlZCddKTtcbiAgICAgIGlmIChmYXZvcml0ZVJ1bnMubGVuZ3RoID4gMClcbiAgICAgICAgcmV0dXJuIHVpLndhaXQoKCkgPT4gcmVuZGVyRmF2b3JpdGVDYXJkcyhmYXZvcml0ZVJ1bnMpKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHVpLmRpdlRleHQoJ05vIHJ1bnMgYXJlIG1hcmtlZCBhcyBmYXZvcml0ZXMnLCAnZGVzY3JpcHRpb24nKTtcbiAgICB9KTtcbiAgICBsZXQgZmF2b3JpdGVzTGlzdFBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ015IGZhdm9yaXRlcycsICgpID0+IGJ1aWxkRmF2b3JpdGVzTGlzdCh7XG4gICAgICAuLi5maWx0ZXJpbmdPcHRpb25zLFxuICAgICAgYXV0aG9yOiBncm9rLnNoZWxsLnVzZXJcbiAgICB9KSwgdHJ1ZSk7XG4gICAgY29uc3QgdXBkYXRlRmF2b3JpdGVzUGFuZSA9IChmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBmYXZvcml0ZXNMaXN0UGFuZS5leHBhbmRlZDtcbiAgICAgIG1haW5BY2MucmVtb3ZlUGFuZShmYXZvcml0ZXNMaXN0UGFuZSk7XG4gICAgICBmYXZvcml0ZXNMaXN0UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnTXkgZmF2b3JpdGVzJywgKCkgPT4gYnVpbGRGYXZvcml0ZXNMaXN0KHtcbiAgICAgICAgLi4uZmlsdGVyaW5nT3B0aW9ucyxcbiAgICAgICAgYXV0aG9yOiBncm9rLnNoZWxsLnVzZXJcbiAgICAgIH0pLCBpc0V4cGFuZGVkLCBoaXN0b3J5UGFuZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkSGlzdG9yeVBhbmUgPSAoZmlsdGVyT3B0aW9uczogRmlsdGVyT3B0aW9ucyA9IHt9KSA9PiB1aS53YWl0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGhpc3RvcmljYWxSdW5zID0gKGF3YWl0IGhpc3RvcnlVdGlscy5wdWxsUnVuc0J5TmFtZSh0aGlzLmZ1bmMhLm5hbWUsIFtmaWx0ZXJPcHRpb25zXSwge29yZGVyOiAnc3RhcnRlZCd9LCBbJ3Nlc3Npb24udXNlcicsICdvcHRpb25zJ10pKTtcbiAgICAgIGlmIChoaXN0b3JpY2FsUnVucy5sZW5ndGggPiAwKVxuICAgICAgICByZXR1cm4gdWkud2FpdCgoKSA9PiByZW5kZXJIaXN0b3J5Q2FyZHMoaGlzdG9yaWNhbFJ1bnMpKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHVpLmRpdlRleHQoJ05vIHJ1bnMgYXJlIGZvdW5kIGluIGhpc3RvcnknLCAnZGVzY3JpcHRpb24nKTtcbiAgICB9KTtcbiAgICBsZXQgaGlzdG9yeVBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ015IGhpc3RvcnknLCAoKSA9PiBidWlsZEhpc3RvcnlQYW5lKHtcbiAgICAgIC4uLmZpbHRlcmluZ09wdGlvbnMsXG4gICAgICBhdXRob3I6IGdyb2suc2hlbGwudXNlclxuICAgIH0pLCB0cnVlKTtcbiAgICBjb25zdCB1cGRhdGVIaXN0b3J5UGFuZSA9IChmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBoaXN0b3J5UGFuZS5leHBhbmRlZDtcbiAgICAgIG1haW5BY2MucmVtb3ZlUGFuZShoaXN0b3J5UGFuZSk7XG4gICAgICBoaXN0b3J5UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnTXkgaGlzdG9yeScsICgpID0+IGJ1aWxkSGlzdG9yeVBhbmUoe1xuICAgICAgICAuLi5maWx0ZXJPcHRpb25zLFxuICAgICAgICBhdXRob3I6IGdyb2suc2hlbGwudXNlclxuICAgICAgfSksIGlzRXhwYW5kZWQpO1xuICAgIH07XG5cbiAgICBjb25zdCBuZXdIaXN0b3J5QmxvY2sgPSBtYWluQWNjLnJvb3Q7XG4gICAgdWkuZW1wdHkodGhpcy5oaXN0b3J5Um9vdCk7XG4gICAgdGhpcy5oaXN0b3J5Um9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnanVzdGlmeS1jb250ZW50Jyk7XG4gICAgdGhpcy5oaXN0b3J5Um9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLmhpc3RvcnlSb290LmFwcGVuZChuZXdIaXN0b3J5QmxvY2spO1xuICAgIHJldHVybiBuZXdIaXN0b3J5QmxvY2s7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgZm9yIHtAbGluayBzdXBwb3J0ZWRFeHBvcnRGb3JtYXRzfSBtZW1iZXJzIGFuZCBjcmVhdGVzIHJpYmJvbiBwYW5lbFxuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnRzIG9mIHJpYmJvblBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGJ1aWxkUmliYm9uUGFuZWxzKCk6IEhUTUxFbGVtZW50W11bXSB7XG4gICAgY29uc3QgbmV3UmliYm9uUGFuZWxzOiBIVE1MRWxlbWVudFtdW10gPSBbXG4gICAgICBbLi4uKHRoaXMuZXhwb3J0Q29uZmlnICYmIHRoaXMuZXhwb3J0Q29uZmlnLnN1cHBvcnRlZEZvcm1hdHMubGVuZ3RoID4gMCkgPyBbdWkuZGl2SChbXG4gICAgICAgIHVpLmNvbWJvUG9wdXAoXG4gICAgICAgICAgdWkuaWNvbkZBKCdhcnJvdy10by1ib3R0b20nKSxcbiAgICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLFxuICAgICAgICAgIGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4gREcuVXRpbHMuZG93bmxvYWQodGhpcy5leHBvcnRDb25maWchLmZpbGVuYW1lKGZvcm1hdCksIGF3YWl0IHRoaXMuZXhwb3J0Q29uZmlnIS5leHBvcnQoZm9ybWF0KSkpLFxuICAgICAgXSldOiBbXVxuICAgICAgXV07XG5cbiAgICBpZiAodGhpcy5mdW5jPy5pZCkge1xuICAgICAgY29uc3QgaGlzdG9yeUJ1dHRvbiA9IHVpLmljb25GQSgnaGlzdG9yeScsICgpID0+IHtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzID0gIWdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcztcbiAgICAgICAgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCdkNC1jdXJyZW50Jyk7XG4gICAgICAgIGdyb2suc2hlbGwubyA9IHRoaXMuaGlzdG9yeVJvb3Q7XG4gICAgICB9KTtcblxuICAgICAgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdkNC10b2dnbGUtYnV0dG9uJyk7XG4gICAgICBpZiAoZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzKSBoaXN0b3J5QnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2Q0LWN1cnJlbnQnKTtcblxuICAgICAgY29uc3QgY2xvbmVSdW5CdG4gPSB1aS5idXR0b24oJ0Nsb25lJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNsb25lUnVuQXNDdXJyZW50KCk7XG4gICAgICB9LCAnQ2xvbmUgdGhlIHJ1bicpO1xuXG4gICAgICBuZXdSaWJib25QYW5lbHMucHVzaChbXG4gICAgICAgIGhpc3RvcnlCdXR0b24sXG4gICAgICAgIC4uLnRoaXMuZnVuY0NhbGw/Lm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddPyBbY2xvbmVSdW5CdG5dOiBbXSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHRoaXMuc2V0UmliYm9uUGFuZWxzKG5ld1JpYmJvblBhbmVscyk7XG4gICAgcmV0dXJuIG5ld1JpYmJvblBhbmVscztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gcmliYm9uIG1lbnUgb24gdGhlIHRvcC5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRSaWJib25NZW51KCkge1xuXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb0Zhdm9yaXRlOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGZhdm9yaXRlQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcnVuIGFzIHVzdWFsIHJ1blxuICAgKiBAcGFyYW0gY2FsbFRvVW5mYXZvcml0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gZmF2b3JpdGVzXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbiAgcHVibGljIGFzeW5jIHJlbW92ZVJ1bkZyb21GYXZvcml0ZXMoY2FsbFRvVW5mYXZvcml0ZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWyd0aXRsZSddID0gbnVsbDtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA9IG51bGw7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9VbmZhdm9yaXRlKTtcbiAgICBjb25zdCBmYXZvcml0ZVNhdmUgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvVW5mYXZvcml0ZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmYXZvcml0ZVNhdmUpO1xuICAgIHJldHVybiBmYXZvcml0ZVNhdmU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVBZGRpbmdUb0Zhdm9yaXRlcyhjYWxsVG9BZGRUb0Zhdm9yaXRlczogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQWRkaW5nVG9GYXZvcml0ZXMoZmF2b3JpdGVDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBydW4gYXMgZmF2b3JpdGVcbiAgICogQHBhcmFtIGNhbGxUb0Zhdm9yaXRlIEZ1bmNDYWxsIG9iamVjdCB0byBhZGQgdG8gZmF2b3JpdGVzXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cblxuICBwdWJsaWMgYXN5bmMgYWRkUnVuVG9GYXZvcml0ZXMoY2FsbFRvRmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb0Zhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZUFkZGluZ1RvRmF2b3JpdGVzKGNhbGxUb0Zhdm9yaXRlKTtcbiAgICBjb25zdCBzYXZlZEZhdm9yaXRlID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5zYXZlKGNhbGxUb0Zhdm9yaXRlKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJBZGRpbmdUb0Zhdm9yaXRlcyhzYXZlZEZhdm9yaXRlKTtcbiAgICByZXR1cm4gc2F2ZWRGYXZvcml0ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZVJlbW92ZVJ1bkZyb21TaGFyZWQoY2FsbFRvU2hhcmU6IERHLkZ1bmNDYWxsKSB7IH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlclJlbW92ZVJ1bkZyb21TYWhyZWQoc2hhcmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHJ1biBmcm9tIHNoYXJlZFxuICAgKiBAcGFyYW0gY2FsbFRvVW5zaGFyZSBGdW5jQ2FsbCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gc2hhcmVkXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cblxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlUnVuRnJvbVNoYXJlZChjYWxsVG9VbnNoYXJlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjYWxsVG9VbnNoYXJlLm9wdGlvbnNbJ3RpdGxlJ10gPSBudWxsO1xuICAgIGNhbGxUb1Vuc2hhcmUub3B0aW9uc1snYW5ub3RhdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbnNoYXJlLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9VbnNoYXJlKTtcbiAgICBjb25zdCBzYXZlZFNoYXJlZCA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuc2F2ZShjYWxsVG9VbnNoYXJlKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKHNhdmVkU2hhcmVkKTtcbiAgICByZXR1cm4gc2F2ZWRTaGFyZWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVBZGRpbmdUb1NoYXJlZChjYWxsVG9BZGRUb1NoYXJlZDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQWRkaW5nVG9TaGFyZWQoc2hhcmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcnVuIGFzIHNoYXJlZFxuICAgKiBAcGFyYW0gY2FsbFRvU2hhcmUgRnVuY0NhbGwgb2JqZWN0IHRvIGFkZCB0byBzaGFyZWRcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuXG4gIHB1YmxpYyBhc3luYyBhZGRSdW5Ub1NoYXJlZChjYWxsVG9TaGFyZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvU2hhcmUub3B0aW9uc1snaXNTaGFyZWQnXSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZUFkZGluZ1RvU2hhcmVkKGNhbGxUb1NoYXJlKTtcblxuICAgIGNvbnN0IGFsbEdyb3VwID0gYXdhaXQgZ3Jvay5kYXBpLmdyb3Vwcy5maW5kKGRlZmF1bHRHcm91cHNJZHNbJ0FsbCB1c2VycyddKTtcblxuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KGNhbGxUb1NoYXJlLm91dHB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG5cbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpIHtcbiAgICAgIGNvbnN0IGRmID0gY2FsbFRvU2hhcmUub3V0cHV0c1tvdXRwdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lO1xuICAgICAgYXdhaXQgZ3Jvay5kYXBpLnBlcm1pc3Npb25zLmdyYW50KGRmLmdldFRhYmxlSW5mbygpLCBhbGxHcm91cCwgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGRmSW5wdXRzID0gd3UoY2FsbFRvU2hhcmUuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigoaW5wdXQpID0+IGlucHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGRmSW5wdXRzKSB7XG4gICAgICBjb25zdCBkZiA9IGNhbGxUb1NoYXJlLmlucHV0c1tpbnB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWU7XG4gICAgICBhd2FpdCBncm9rLmRhcGkucGVybWlzc2lvbnMuZ3JhbnQoZGYuZ2V0VGFibGVJbmZvKCksIGFsbEdyb3VwLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2F2ZWRTaGFyZWQgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvU2hhcmUpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckFkZGluZ1RvU2hhcmVkKHNhdmVkU2hhcmVkKTtcbiAgICByZXR1cm4gc2F2ZWRTaGFyZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBzYXZpbmcgdGhlIEZVbmNDYWxsIHJlc3VsdHMgdG8gdGhlIGhpc3RvcmljYWwgcmVzdWx0cywgcmV0dXJucyB0aGUgc2F2ZWQgY2FsbC4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvU2F2ZSBGdW5jQ2FsbCBvYmplY3QgdG8gc2F2ZVxuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZVNhdmVSdW4oY2FsbFRvU2F2ZTogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyB0byB0aGUgaGlzdG9yaWNhbCByZXN1bHRzLCByZXR1cm5zIHRoZSBzYXZlZCBjYWxsLiBTZWUgYWxzbyB7QGxpbmsgc2F2ZVJ1bn0uXG4gICAqIEBwYXJhbSBzYXZlZENhbGwgRnVuY0NhbGwgb2JqZWN0IHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlclNhdmVSdW4oc2F2ZWRDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgdGhlIHNhdmVkIGNhbGwuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb1NhdmUgRnVuY0NhbGwgb2JqZWN0IHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlU2F2ZVJ1bihjYWxsVG9TYXZlKTtcbiAgICBjb25zdCBzYXZlZENhbGwgPSBhd2FpdCBoaXN0b3J5VXRpbHMuc2F2ZVJ1bihjYWxsVG9TYXZlKTtcbiAgICB0aGlzLmJ1aWxkSGlzdG9yeUJsb2NrKCk7XG4gICAgdGhpcy5wYXRoID0gYD9pZD0ke3NhdmVkQ2FsbC5pZH1gO1xuICAgIGF3YWl0IHRoaXMub25BZnRlclNhdmVSdW4oc2F2ZWRDYWxsKTtcbiAgICByZXR1cm4gc2F2ZWRDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgZGVsZXRpbmcgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgZnJvbSBoaXN0b3J5LCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvRGVsZXRlIEZ1bmNDYWxsIG9iamVjdCB0byBiZSBkZWxldGVkXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlRGVsZXRlUnVuKGNhbGxUb0RlbGV0ZTogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgZGVsZXRpbmcgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgZnJvbSBoaXN0b3J5LCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gZGVsZXRlZENhbGwgZGVsZXRlZCBGdW5jQ2FsbCB2YWx1ZVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyRGVsZXRlUnVuKGRlbGV0ZWRDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgZnJvbSBoaXN0b3J5LCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvRGVsZXRlIEZ1bmNDYWxsIG9iamVjdCB0byBkZWxldGVcbiAgICogQHJldHVybnMgSUQgb2YgZGVsZXRlZCBoaXN0b3JpY2FsIHJ1blxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZVJ1bihjYWxsVG9EZWxldGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlRGVsZXRlUnVuKGNhbGxUb0RlbGV0ZSk7XG4gICAgYXdhaXQgaGlzdG9yeVV0aWxzLmRlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckRlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIHJldHVybiBjYWxsVG9EZWxldGUuaWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBmZXRjaGluZyB0aGUgaGlzdG9yaWNhbCBydW4gZGF0YSBpbiB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlTG9hZFJ1bigpIHt9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBmZXRjaGluZyB0aGUgaGlzdG9yaWNhbCBydW4gZGF0YSBpbiB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBmdW5jQ2FsbCBGdW5jQ2FsbCBmZXRjaGVkIGZyb20gc2VydmVyIGR1cmluZyB7QGxpbmsgbG9hZFJ1bn1cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlckxvYWRSdW4oZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7fVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgc3BlY2lmaWVkIGhpc3RvcmljYWwgcnVuLiBTZWUgYWxzbyB7QGxpbmsgc2F2ZVJ1bn0uXG4gICAqIEBwYXJhbSBmdW5jQ2FsbElkIElEIG9mIEZ1bmNDYWxsIHRvIGxvb2sgZm9yLiBHZXQgaXQgdXNpbmcge0BzZWUgZnVuY0NhbGwuaWR9IGZpZWxkXG4gICAqIEByZXR1cm5zIEZ1bmNDYWxsIGF1Z2VtZW50ZWQgd2l0aCBpbnB1dHMnIGFuZCBvdXRwdXRzJyB2YWx1ZXNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuXG4gIHB1YmxpYyBhc3luYyBsb2FkUnVuKGZ1bmNDYWxsSWQ6IHN0cmluZyk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlTG9hZFJ1bigpO1xuICAgIGNvbnN0IHB1bGxlZFJ1biA9IGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkUnVuKGZ1bmNDYWxsSWQpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckxvYWRSdW4ocHVsbGVkUnVuKTtcbiAgICB0aGlzLnNldFJ1blZpZXdSZWFkb25seSgpO1xuICAgIHJldHVybiBwdWxsZWRSdW47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVDbG9uZVJ1bkFzQ3VycmVudCgpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQ2xvbmVSdW5Bc0N1cnJlbnQoKSB7IH1cblxuXG4gIHB1YmxpYyBhc3luYyBjbG9uZVJ1bkFzQ3VycmVudCgpIHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignQ3VycmVudCBGdW5jY2FsbCBpcyBub3Qgc2V0Jyk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlQ2xvbmVSdW5Bc0N1cnJlbnQoKTtcbiAgICBjb25zdCBjbG9uZWRGdW5jY2FsbCA9IHRoaXMuZnVuY0NhbGwuY2xvbmUoKTtcbiAgICBjbG9uZWRGdW5jY2FsbC5uZXdJZCgpO1xuICAgIGNsb25lZEZ1bmNjYWxsLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddID0gZmFsc2U7XG4gICAgdGhpcy5saW5rRnVuY2NhbGwoY2xvbmVkRnVuY2NhbGwpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckNsb25lUnVuQXNDdXJyZW50KCk7XG4gIH1cblxuICBwcml2YXRlIG92ZXJsYXlEaXYgPSB1aS5kaXYoW10sIHtzdHlsZToge1xuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2dyYXknLFxuICAgICdvcGFjaXR5JzogJzAuMDcnLFxuICAgICdwb3NpdGlvbic6ICdhYnNvbHV0ZScsXG4gICAgJ2JvdHRvbSc6ICcwJyxcbiAgICAnbGVmdCc6ICcwJyxcbiAgICAncmlnaHQnOiAnMCcsXG4gICAgJ3RvcCc6ICcwJyxcbiAgICAnZGlzcGxheSc6ICdub25lJyxcbiAgICAnY3Vyc29yJzogJ25vdC1hbGxvd2VkJyxcbiAgICAnei1pbmRleCc6ICcxJyxcbiAgfX0pO1xuXG4gIHByaXZhdGUgcm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnMgPSBbXG4gICAgKGV2OiBNb3VzZUV2ZW50KT0+IHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMub3ZlcmxheURpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgIH0sXG4gICAgKCkgPT4ge1xuICAgICAgdGhpcy5vdmVybGF5RGl2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgfSxcbiAgICAoKSA9PiB7XG4gICAgICBncm9rLnNoZWxsLndhcm5pbmcoJ0Nsb25lIHRoZSBydW4gdG8gZWRpdCBpdCcpO1xuICAgIH0sXG4gIF07XG5cbiAgcHJpdmF0ZSBpbnRlcmFjdGl2ZUV2ZW50TGlzdGVuZXJzID0gW1xuICAgICgpID0+dGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1syXSksXG4gICAgKCkgPT5zZXRUaW1lb3V0KCgpID0+IHRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMl0pLCAxMDApXG4gIF07XG5cbiAgcHJvdGVjdGVkIHNldFJ1blZpZXdSZWFkb25seSgpOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlEaXYuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICB0aGlzLnJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnJvb3RSZWFkb25seUV2ZW50TGlzdGVuZXJzWzJdKTtcbiAgICB0aGlzLnJvb3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1swXSk7XG4gICAgdGhpcy5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJvb3RSZWFkb25seUV2ZW50TGlzdGVuZXJzWzFdKTtcbiAgICB0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbChgLiR7SU5URVJBQ1RJVkVfQ1NTX0NMQVNTfWApLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnpJbmRleCA9ICcyJztcbiAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5pbnRlcmFjdGl2ZUV2ZW50TGlzdGVuZXJzWzBdKTtcbiAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuaW50ZXJhY3RpdmVFdmVudExpc3RlbmVyc1sxXSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFJ1blZpZXdFZGl0YWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLnJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnJvb3RSZWFkb25seUV2ZW50TGlzdGVuZXJzWzJdKTtcbiAgICB0aGlzLnJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1swXSk7XG4gICAgdGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJvb3RSZWFkb25seUV2ZW50TGlzdGVuZXJzWzFdKTtcbiAgICB0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbChgLiR7SU5URVJBQ1RJVkVfQ1NTX0NMQVNTfWApLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnJlbW92ZVByb3BlcnR5KCd6LWluZGV4Jyk7XG4gICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaW50ZXJhY3RpdmVFdmVudExpc3RlbmVyc1swXSk7XG4gICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmludGVyYWN0aXZlRXZlbnRMaXN0ZW5lcnNbMV0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGFsbCB0aGUgZnVuY3Rpb24gY2FsbCBvZiB0aGlzIGZ1bmN0aW9uLlxuICAgKiBEZXNpZ25lZCB0byBwdWxsIGhzdG9yaWNhbCBydW5zIGluIGZhc3QgbWFubmVyIGFuZCB0aGUgY2FsbCB7QGxpbmsgbG9hZFJ1bn0gd2l0aCBzcGVjaWZpZWQgcnVuIElELlxuICAgKiBXQVJOSU5HOiBGdW5jQ2FsbCBpbnB1dHMvb3V0cHV0cyBmaWVsZHMgYXJlIG5vdCBpbmNsdWRlZFxuICAgKiBAcGFyYW0gZnVuY0lkIElEIG9mIEZ1bmMgd2hpY2ggY2FsbHMgd2UgYXJlIGxvb2tpbmcgZm9yLiBHZXQgaXQgdXNpbmcge0BsaW5rIGZ1bmMuaWR9IGZpZWxkXG4gICAqIEByZXR1cm5zIFByb21pc2Ugb24gYXJyYXkgb2YgRnVuY0NhbGxzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhc3NlZCBGdW5jIElEXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIHB1bGxSdW5zKGZ1bmNJZDogc3RyaW5nLCBmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30sIGxpc3RPcHRpb25zOiB7cGFnZVNpemU/OiBudW1iZXIsIHBhZ2VOdW1iZXI/OiBudW1iZXIsIGZpbHRlcj86IHN0cmluZywgb3JkZXI/OiBzdHJpbmd9ID0ge30pOiBQcm9taXNlPERHLkZ1bmNDYWxsW10+IHtcbiAgICByZXR1cm4gaGlzdG9yeVV0aWxzLnB1bGxSdW5zKGZ1bmNJZCwgZmlsdGVyT3B0aW9ucywgbGlzdE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgYWN0dWFsIGNvbXB1dGF0aW9ucyBhcmUgbWFkZSB7QGxpbmsgcnVufS5cbiAgICogQHBhcmFtIGZ1bmNUb0NhbGwgRnVuY0NhbGwgb2JqZWN0IHRvIGJlIGNhbGxlZCB7QHNlZSBERy5GdW5jQ2FsbC5jYWxsKCl9XG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZVJ1bihmdW5jVG9DYWxsOiBERy5GdW5jQ2FsbCkge31cblxuICAvKipcbiAgICAqIENhbGxlZCBhZnRlciBhY3R1YWwgY29tcHV0YXRpb25zIGFyZSBtYWRlIHtAbGluayBydW59LlxuICAgICogQHBhcmFtIHJ1bkZ1bmMgRnVuY0NhbGwgb2JqZWN0IGFmdGVyIGNhbGwgbWV0aG9kIHtAc2VlIERHLkZ1bmNDYWxsLmNhbGwoKX1cbiAgICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlclJ1bihydW5GdW5jOiBERy5GdW5jQ2FsbCkge1xuICAgIHRoaXMub3V0cHV0UGFyYW1ldGVyc1RvVmlldyh0aGlzLmxhc3RDYWxsISk7XG4gIH1cblxuXG4gIHB1YmxpYyBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmZ1bmNDYWxsKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjb3JyZXNwb2RpbmcgZnVuY3Rpb24gaXMgbm90IHNwZWNpZmllZCcpO1xuXG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZVJ1bih0aGlzLmZ1bmNDYWxsKTtcbiAgICBjb25zdCBwaSA9IERHLlRhc2tCYXJQcm9ncmVzc0luZGljYXRvci5jcmVhdGUoJ0NhbGN1bGF0aW5nLi4uJyk7XG4gICAgdGhpcy5mdW5jQ2FsbC5uZXdJZCgpO1xuICAgIGF3YWl0IHRoaXMuZnVuY0NhbGwuY2FsbCgpOyAvLyBtdXRhdGVzIHRoZSBmdW5jQ2FsbCBmaWVsZFxuICAgIHBpLmNsb3NlKCk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyUnVuKHRoaXMuZnVuY0NhbGwpO1xuXG4gICAgdGhpcy5sYXN0Q2FsbCA9IGF3YWl0IHRoaXMuc2F2ZVJ1bih0aGlzLmZ1bmNDYWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0RXhwb3J0RmlsZW5hbWUgPSAoZm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSAtICR7bmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygpfS4ke3RoaXMuZXhwb3J0Q29uZmlnIS5zdXBwb3J0ZWRFeHRlbnNpb25zW2Zvcm1hdF19YDtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEV4dGVuc2lvbnMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdFeGNlbCc6ICd4bHN4J1xuICAgIH07XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRGb3JtYXRzID0gKCkgPT4ge1xuICAgIHJldHVybiBbJ0V4Y2VsJ107XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRFeHBvcnQgPSBhc3luYyAoZm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBsYXN0Q2FsbCA9IHRoaXMubGFzdENhbGw7XG4gICAgaWYgKCFsYXN0Q2FsbCkgdGhyb3cgbmV3IEVycm9yKGBGdW5jdGlvbiB3YXMgbm90IGNhbGxlZGApO1xuXG4gICAgaWYgKCF0aGlzLmV4cG9ydENvbmZpZyEuc3VwcG9ydGVkRm9ybWF0cy5pbmNsdWRlcyhmb3JtYXQpKSB0aHJvdyBuZXcgRXJyb3IoYEZvcm1hdCBcIiR7Zm9ybWF0fVwiIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG5cbiAgICBpZiAoIXRoaXMuZnVuYykgdGhyb3cgbmV3IEVycm9yKCdUaGUgY29ycmVzcG9kaW5nIGZ1bmN0aW9uIGlzIG5vdCBzcGVjaWZpZWQnKTtcblxuICAgIGNvbnN0IEJMT0JfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcbiAgICBjb25zdCBleHBvcnRXb3JrYm9vayA9IG5ldyBFeGNlbEpTLldvcmtib29rKCk7XG5cbiAgICBjb25zdCBpc1NjYWxhclR5cGUgPSAodHlwZTogREcuVFlQRSkgPT4gKERHLlRZUEVTX1NDQUxBUi5oYXModHlwZSkpO1xuXG4gICAgY29uc3QgaXNEYXRhRnJhbWUgPSAodHlwZTogREcuVFlQRSkgPT4gKHR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG5cbiAgICBjb25zdCBkZklucHV0cyA9IHRoaXMuZnVuYy5pbnB1dHMuZmlsdGVyKChpbnB1dCkgPT4gaXNEYXRhRnJhbWUoaW5wdXQucHJvcGVydHlUeXBlKSk7XG4gICAgY29uc3Qgc2NhbGFySW5wdXRzID0gdGhpcy5mdW5jLmlucHV0cy5maWx0ZXIoKGlucHV0KSA9PiBpc1NjYWxhclR5cGUoaW5wdXQucHJvcGVydHlUeXBlKSk7XG4gICAgY29uc3QgZGZPdXRwdXRzID0gdGhpcy5mdW5jLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IGlzRGF0YUZyYW1lKG91dHB1dC5wcm9wZXJ0eVR5cGUpKTtcbiAgICBjb25zdCBzY2FsYXJPdXRwdXRzID0gdGhpcy5mdW5jLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IGlzU2NhbGFyVHlwZShvdXRwdXQucHJvcGVydHlUeXBlKSk7XG5cbiAgICBjb25zdCBpbnB1dFBhcmFtcyA9IFsuLi5sYXN0Q2FsbC5pbnB1dFBhcmFtcy52YWx1ZXMoKV0gYXMgREcuRnVuY0NhbGxQYXJhbVtdO1xuICAgIGNvbnN0IG91dHB1dFBhcmFtcyA9IFsuLi5sYXN0Q2FsbC5vdXRwdXRQYXJhbXMudmFsdWVzKCldIGFzIERHLkZ1bmNDYWxsUGFyYW1bXTtcblxuICAgIGRmSW5wdXRzLmZvckVhY2goKGRmSW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmSW5wdXQub3B0aW9ucy5jYXB0aW9uIHx8IGRmSW5wdXQubmFtZTtcbiAgICAgIGNvbnN0IGN1cnJlbnREZlNoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5JTlBVVCkpO1xuXG4gICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwuaW5wdXRzW2RmSW5wdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcbiAgICAgIGRmVG9TaGVldChjdXJyZW50RGZTaGVldCwgY3VycmVudERmKTtcbiAgICB9KTtcblxuICAgIGlmIChzY2FsYXJJbnB1dHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpbnB1dFNjYWxhcnNTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldCgnSW5wdXQgc2NhbGFycycpO1xuICAgICAgc2NhbGFyc1RvU2hlZXQoaW5wdXRTY2FsYXJzU2hlZXQsIHNjYWxhcklucHV0cy5tYXAoKHNjYWxhcklucHV0KSA9PiAoe1xuICAgICAgICBjYXB0aW9uOiBzY2FsYXJJbnB1dC5vcHRpb25zWydjYXB0aW9uJ10gfHwgc2NhbGFySW5wdXQubmFtZSxcbiAgICAgICAgdmFsdWU6IGxhc3RDYWxsLmlucHV0c1tzY2FsYXJJbnB1dC5uYW1lXSxcbiAgICAgICAgdW5pdHM6IHNjYWxhcklucHV0Lm9wdGlvbnNbJ3VuaXRzJ10gfHwgJycsXG4gICAgICB9KSkpO1xuICAgIH1cblxuICAgIGRmT3V0cHV0cy5mb3JFYWNoKChkZk91dHB1dCkgPT4ge1xuICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZPdXRwdXQub3B0aW9ucy5jYXB0aW9uIHx8IGRmT3V0cHV0Lm5hbWU7XG4gICAgICBjb25zdCBjdXJyZW50RGZTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uT1VUUFVUKSk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5vdXRwdXRzW2RmT3V0cHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG4gICAgICBkZlRvU2hlZXQoY3VycmVudERmU2hlZXQsIGN1cnJlbnREZik7XG4gICAgfSk7XG5cblxuICAgIGlmIChzY2FsYXJPdXRwdXRzLmxlbmd0aCkge1xuICAgICAgY29uc3Qgb3V0cHV0U2NhbGFyc1NoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KCdPdXRwdXQgc2NhbGFycycpO1xuICAgICAgc2NhbGFyc1RvU2hlZXQob3V0cHV0U2NhbGFyc1NoZWV0LCBzY2FsYXJPdXRwdXRzLm1hcCgoc2NhbGFyT3V0cHV0KSA9PiAoe1xuICAgICAgICBjYXB0aW9uOiBzY2FsYXJPdXRwdXQub3B0aW9uc1snY2FwdGlvbiddIHx8IHNjYWxhck91dHB1dC5uYW1lLFxuICAgICAgICB2YWx1ZTogbGFzdENhbGwub3V0cHV0c1tzY2FsYXJPdXRwdXQubmFtZV0sXG4gICAgICAgIHVuaXRzOiBzY2FsYXJPdXRwdXQub3B0aW9uc1sndW5pdHMnXSB8fCAnJyxcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGFiQ29udHJvbCA9IHRoaXMucmVzdWx0c1RhYkNvbnRyb2w7XG4gICAgaWYgKHRhYkNvbnRyb2wpIHtcbiAgICAgIGZvciAoY29uc3QgdGFiTGFiZWwgb2YgdGhpcy50YWJzTGFiZWxzKSB7XG4gICAgICAgIHRhYkNvbnRyb2wuY3VycmVudFBhbmUgPSB0YWJDb250cm9sLmdldFBhbmUodGFiTGFiZWwpO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxMDApKTtcbiAgICAgICAgaWYgKHRhYkxhYmVsID09PSAnSW5wdXQnKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBpbnB1dFBhcmFtIG9mIGlucHV0UGFyYW1zLmZpbHRlcigoaW5wdXRQYXJhbSkgPT4gaW5wdXRQYXJhbS5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vbkdyaWRWaWV3ZXJzID0gKGlucHV0UGFyYW0uYXV4Wyd2aWV3ZXJzJ10gYXMgREcuVmlld2VyW10pLmZpbHRlcigodmlld2VyKSA9PiB2aWV3ZXIudHlwZSAhPT0gREcuVklFV0VSLkdSSUQpO1xuXG4gICAgICAgICAgICBjb25zdCBkZklucHV0ID0gZGZJbnB1dHMuZmluZCgoaW5wdXQpID0+IGlucHV0Lm5hbWUgPT09IGlucHV0UGFyYW0ubmFtZSk7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZklucHV0IS5vcHRpb25zLmNhcHRpb24gfHwgaW5wdXRQYXJhbS5uYW1lO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLmlucHV0c1tkZklucHV0IS5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgdmlld2VyXSBvZiBub25HcmlkVmlld2Vycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgaWYgKHZpZXdlci5yb290LnBhcmVudEVsZW1lbnQ/LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1HcmlkU3dpdGNoZXMuZ2V0KGlucHV0UGFyYW0ubmFtZSk/LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgNTApKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGF3YWl0IHBsb3RUb1NoZWV0KFxuICAgICAgICAgICAgICAgIGV4cG9ydFdvcmtib29rLFxuICAgICAgICAgICAgICAgIGV4cG9ydFdvcmtib29rLmdldFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uSU5QVVQpKSxcbiAgICAgICAgICAgICAgICB2aWV3ZXIucm9vdCxcbiAgICAgICAgICAgICAgICBjdXJyZW50RGYuY29sdW1ucy5sZW5ndGggKyAyLFxuICAgICAgICAgICAgICAgIChpbmRleCA+IDApID8gTWF0aC5jZWlsKG5vbkdyaWRWaWV3ZXJzW2luZGV4LTFdLnJvb3QuY2xpZW50SGVpZ2h0IC8gMjApICsgMSA6IDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoY29uc3Qgb3V0cHV0UGFyYW0gb2Ygb3V0cHV0UGFyYW1zLmZpbHRlcigob3V0cHV0UGFyYW0pID0+IG91dHB1dFBhcmFtLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIG91dHB1dFBhcmFtLnByb3BlcnR5LmNhdGVnb3J5ID09PSB0YWJMYWJlbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vbkdyaWRWaWV3ZXJzID0gKG91dHB1dFBhcmFtLmF1eFsndmlld2VycyddIGFzIERHLlZpZXdlcltdKS5maWx0ZXIoKHZpZXdlcikgPT4gdmlld2VyLnR5cGUgIT09IERHLlZJRVdFUi5HUklEKTtcblxuICAgICAgICAgICAgY29uc3QgZGZPdXRwdXQgPSBkZk91dHB1dHMuZmluZCgoaW5wdXQpID0+IGlucHV0Lm5hbWUgPT09IG91dHB1dFBhcmFtLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZPdXRwdXQhLm9wdGlvbnMuY2FwdGlvbiB8fCBvdXRwdXRQYXJhbS5uYW1lO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLm91dHB1dHNbZGZPdXRwdXQhLm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCB2aWV3ZXJdIG9mIG5vbkdyaWRWaWV3ZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICBpZiAodmlld2VyLnJvb3QucGFyZW50RWxlbWVudD8uc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbUdyaWRTd2l0Y2hlcy5nZXQob3V0cHV0UGFyYW0ubmFtZSk/LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgNTApKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGF3YWl0IHBsb3RUb1NoZWV0KFxuICAgICAgICAgICAgICAgIGV4cG9ydFdvcmtib29rLFxuICAgICAgICAgICAgICAgIGV4cG9ydFdvcmtib29rLmdldFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uT1VUUFVUKSksXG4gICAgICAgICAgICAgICAgdmlld2VyLnJvb3QsXG4gICAgICAgICAgICAgICAgY3VycmVudERmLmNvbHVtbnMubGVuZ3RoICsgMixcbiAgICAgICAgICAgICAgICAoaW5kZXggPiAwKSA/IE1hdGguY2VpbChub25HcmlkVmlld2Vyc1tpbmRleC0xXS5yb290LmNsaWVudEhlaWdodCAvIDIwKSArIDEgOiAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgZXhwb3J0V29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpO1xuXG4gICAgcmV0dXJuIG5ldyBCbG9iKFtidWZmZXJdLCB7dHlwZTogQkxPQl9UWVBFfSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGdldCBpc0lucHV0UGFuZWxSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jPy5pbnB1dHMuc29tZSgocCkgPT4gcC5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIHAub3B0aW9uc1sndmlld2VyJ10gIT0gbnVsbCkgfHwgZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IG91dFBhcmFtQ2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4ubmV3IFNldCh0aGlzLmZ1bmMhLm91dHB1dHMubWFwKChwKSA9PiBwLmNhdGVnb3J5KSkgLy8gZ2V0IGFsbCBvdXRwdXQgcGFyYW1zJyBjYXRlZ29yaWVzXG4gICAgXTsgLy8ga2VlcCBvbmx5IHVuaXF1ZSBvZiB0aGVtXG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IG91dHB1dFRhYnNMYWJlbHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnRoaXMub3V0UGFyYW1DYXRlZ29yaWVzLFxuICAgICAgLi4udGhpcy5vdXRQYXJhbUNhdGVnb3JpZXMuZmluZCgodmFsKSA9PiB2YWwgPT09ICdNaXNjJykgPyBbJ091dHB1dCddIDogW10sIC8vIGlmIG5vIGNhdGVnb3JpZXMgYXJlIHN0YXRlZCwgdGhlIGRlZmF1bHQgY2F0ZWdvcnkgaXMgYWRkZWRcbiAgICBdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0YWJzTGFiZWxzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnBhcmFtVG9DYXRlZ29yeU1hcCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHBhcmFtVG9DYXRlZ29yeU1hcCgpIHtcbiAgICBjb25zdCBtYXAgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG4gICAgaWYgKHRoaXMuaXNJbnB1dFBhbmVsUmVxdWlyZWQpXG4gICAgICB0aGlzLmZ1bmMhLmlucHV0cy5mb3JFYWNoKChwKSA9PiBtYXBbJ0lucHV0J10gPyBtYXBbJ0lucHV0J10ucHVzaChwLm5hbWUpOiBtYXBbJ0lucHV0J10gPSBbcC5uYW1lXSk7XG5cbiAgICB0aGlzLmZ1bmMhLm91dHB1dHMuZm9yRWFjaCgocCkgPT4gbWFwW3AuY2F0ZWdvcnkgPT09ICdNaXNjJyA/ICdPdXRwdXQnOiBwLmNhdGVnb3J5XSA/IG1hcFtwLmNhdGVnb3J5ID09PSAnTWlzYycgPyAnT3V0cHV0JzogcC5jYXRlZ29yeV0ucHVzaChwLm5hbWUpIDogbWFwW3AuY2F0ZWdvcnkgPT09ICdNaXNjJyA/ICdPdXRwdXQnOiBwLmNhdGVnb3J5XSA9IFtwLm5hbWVdKTtcblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuXG4gIHByb3RlY3RlZCByZW5kZXJSdW5TZWN0aW9uKGNhbGw6IERHLkZ1bmNDYWxsKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB1aS53YWl0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJ1bkJ1dHRvbiA9IHVpLmJpZ0J1dHRvbignUnVuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjYWxsLmF1eFsndmlldyddID0gdGhpcy5kYXJ0O1xuICAgICAgICBhd2FpdCB0aGlzLnJ1bigpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlZGl0b3IgPSB1aS5kaXYoKTtcbiAgICAgIGNvbnN0IGlucHV0czogREcuSW5wdXRCYXNlW10gPSBhd2FpdCBjYWxsLmJ1aWxkRWRpdG9yKGVkaXRvciwge2NvbmRlbnNlZDogdHJ1ZX0pO1xuICAgICAgZWRpdG9yLmNsYXNzTGlzdC5hZGQoJ3VpLWZvcm0nKTtcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSB1aS5kaXZIKFtydW5CdXR0b25dLCB7c3R5bGU6IHsnanVzdGlmeS1jb250ZW50JzogJ3NwYWNlLWJldHdlZW4nfX0pO1xuICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKGJ1dHRvbnMpO1xuICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJSZXN1bHRzKHN3aXRjaFRvT3V0cHV0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNhdGVnb3JpZXMgPSB0aGlzLnRhYnNMYWJlbHM7XG5cbiAgICBpZiAoKGNhdGVnb3JpZXMubGVuZ3RoID4gMSB8fCAoY2F0ZWdvcmllcy5sZW5ndGggPT0gMSAmJiBjYXRlZ29yaWVzWzBdICE9ICdNaXNjJykpKSB7XG4gICAgICB0aGlzLnJlc3VsdHNUYWJDb250cm9sID0gREcuVGFiQ29udHJvbC5jcmVhdGUoKTtcbiAgICAgIGZvciAoY29uc3QgYyBvZiBjYXRlZ29yaWVzKSB7XG4gICAgICAgIGlmICghdGhpcy5yZXN1bHRUYWJzLmhhcyhjKSlcbiAgICAgICAgICB0aGlzLnJlc3VsdFRhYnMuc2V0KGMsIHVpLmRpdihbXSwgJ3VpLXBhbmVsLCBncm9rLWZ1bmMtcmVzdWx0cywgdWktYm94JykpO1xuICAgICAgICBsZXQgbmFtZSA9IGM7XG4gICAgICAgIGlmICh0aGlzLmlzSW5wdXRQYW5lbFJlcXVpcmVkICYmIGNhdGVnb3JpZXMubGVuZ3RoID09IDIgJiYgYyA9PSAnTWlzYycpXG4gICAgICAgICAgbmFtZSA9ICdPVVRQVVQnO1xuICAgICAgICB0aGlzLnJlc3VsdHNUYWJDb250cm9sLmFkZFBhbmUobmFtZSwgKCkgPT4gdGhpcy5yZXN1bHRUYWJzLmdldChjKSA/PyB1aS5kaXYoKSk7XG4gICAgICB9XG4gICAgICBpZiAoY2F0ZWdvcmllcy5sZW5ndGggPiAxICYmIHRoaXMuaXNJbnB1dFBhbmVsUmVxdWlyZWQgJiYgc3dpdGNoVG9PdXRwdXQpXG4gICAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wuY3VycmVudFBhbmUgPSB0aGlzLnJlc3VsdHNUYWJDb250cm9sLnBhbmVzWzFdO1xuICAgICAgdGhpcy5yZXN1bHRzRGl2ID0gdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5yb290O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3V0cHV0UGFyYW1ldGVyc1RvVmlldyhjYWxsOiBERy5GdW5jQ2FsbCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJSZXN1bHRzKHRydWUpO1xuICAgIGZvciAoY29uc3QgcCBvZiBjYWxsLm91dHB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pIHtcbiAgICAgIHAucHJvY2Vzc091dHB1dCgpO1xuICAgICAgaWYgKHAucHJvcGVydHkucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLnZhbHVlICE9IG51bGwpXG4gICAgICAgIHRoaXMuYXBwZW5kT3V0cHV0RGYocCwge2NhcHRpb246IHAucHJvcGVydHkubmFtZSwgY2F0ZWdvcnk6IHAucHJvcGVydHkuY2F0ZWdvcnl9KTtcbiAgICAgIGVsc2UgdGhpcy5hcHBlbmRSZXN1bHRTY2FsYXIocCwge2NhcHRpb246IHAucHJvcGVydHkubmFtZSwgY2F0ZWdvcnk6IHAucHJvcGVydHkuY2F0ZWdvcnl9KTtcbiAgICB9XG4gICAgdGhpcy5idWlsZE91dHB1dEJsb2NrKCk7XG4gIH1cblxuICAvLyBtYXBwcGluZyBvZiBwYXJhbSB0byB0aGUgc3dpdGNoY2VzIG9mIHRoZWlyIHZpZXdlcnMvZ3JpZHNcbiAgcHJpdmF0ZSBwYXJhbUdyaWRTd2l0Y2hlczogTWFwPHN0cmluZywgSFRNTEVsZW1lbnQ+ID0gbmV3IE1hcCgpO1xuICAvLyBtYXBwcGluZyBvZiBwYXJhbSB0byB0aGVpciB2aWV3ZXJzIHBsYWNlZCBvbiBET01cbiAgcHJpdmF0ZSBleGlzdGluZ1BhcmFtVmlld2VyczogTWFwPHN0cmluZywgREcuVmlld2VyW10+ID0gbmV3IE1hcCgpO1xuICAvLyBtYXBwcGluZyBvZiBwYXJhbSB0byB0aGVpciBodG1sIGVsZW1lbnRzXG4gIHByaXZhdGUgcGFyYW1TcGFuczogTWFwPHN0cmluZywgSFRNTEVsZW1lbnQ+ID0gbmV3IE1hcCgpO1xuICAvLyBtYXBwcGluZyBvZiB0YWIgbmFtZXMgdG8gdGhlaXIgY29udGVudFxuICBwcml2YXRlIHJlc3VsdFRhYnM6IE1hcDxTdHJpbmcsIEhUTUxFbGVtZW50PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSByZXN1bHRzVGFiQ29udHJvbDogREcuVGFiQ29udHJvbCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZXN1bHRzRGl2OiBIVE1MRWxlbWVudCA9IHVpLnBhbmVsKFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMnKTtcblxuICBwcm90ZWN0ZWQgY29udHJvbHNSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLmJveChudWxsLCB7c3R5bGU6IHttYXhXaWR0aDogJzM3MHB4J319KTtcbiAgcHJvdGVjdGVkIHJlc3VsdHNSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLmJveCgpO1xuICBwcm90ZWN0ZWQgaGlzdG9yeVJvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuZGl2VihbXSwge3N0eWxlOiB7J2p1c3RpZnktY29udGVudCc6ICdjZW50ZXInfX0pO1xuICBwcm90ZWN0ZWQgaW5wdXRzUm9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5wYW5lbChbXSwgJ2dyb2stZnVuYy1yZXN1bHRzLCB1aS1ib3gnKTtcblxuICBwcml2YXRlIGFwcGVuZE91dHB1dERmKHBhcmFtOiBERy5GdW5jQ2FsbFBhcmFtLCBvcHRpb25zPzogeyBjYXB0aW9uPzogc3RyaW5nLCBjYXRlZ29yeT86IHN0cmluZywgaGVpZ2h0PzogbnVtYmVyIH0pIHtcbiAgICBjb25zdCBwYXJhbURmID0gcGFyYW0udmFsdWUgYXMgREcuRGF0YUZyYW1lO1xuICAgIGNvbnN0IGhlaWdodCA9IG9wdGlvbnM/LmhlaWdodCA/PyA0MDA7XG4gICAgY29uc3QgcGFyYW1WaWV3ZXJzOiBERy5WaWV3ZXJbXSA9IHBhcmFtLmF1eFsndmlld2VycyddID8/IFtdOyAvLyBzdG9yaW5nIHRoZSB2aWV3ZXJzIG9mIERmXG4gICAgY29uc3QgcGFyYW1DYXB0aW9uID0gb3B0aW9ucz8uY2FwdGlvbiA/PyBwYXJhbS5hdXhbJ3ZpZXdlclRpdGxlJ10gPz8gcGFyYW0ucHJvcGVydHkuY2FwdGlvbiA/PyAnJztcbiAgICBsZXQgZXhpc3RpbmdWaWV3ZXJzID0gdGhpcy5leGlzdGluZ1BhcmFtVmlld2Vycy5nZXQocGFyYW0ubmFtZSk7XG4gICAgaWYgKGV4aXN0aW5nVmlld2VycyAhPSBudWxsKSB7XG4gICAgICBmb3IgKGNvbnN0IHYgb2YgZXhpc3RpbmdWaWV3ZXJzKVxuICAgICAgICB2LmRhdGFGcmFtZSA9IHBhcmFtRGY7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhpc3RpbmdWaWV3ZXJzID8/PSBbXTtcbiAgICB0aGlzLmV4aXN0aW5nUGFyYW1WaWV3ZXJzLnNldChwYXJhbS5uYW1lLCBleGlzdGluZ1ZpZXdlcnMpO1xuICAgIGlmIChwYXJhbVZpZXdlcnMubGVuZ3RoID09IDApXG4gICAgICBwYXJhbVZpZXdlcnMucHVzaChwYXJhbURmLnBsb3QuZ3JpZCgpKTtcblxuICAgIGNvbnN0IHZpZXdlcnNUb0hpZGU6IEhUTUxFbGVtZW50W10gPSBbXTtcbiAgICBsZXQgYmxvY2tzOiBudW1iZXIgPSAwO1xuICAgIGxldCBibG9ja1dpZHRoOiBudW1iZXIgPSAwO1xuICAgIGNvbnN0IGdyaWRXcmFwcGVyID0gdWkuYm94KG51bGwsIHtzdHlsZToge2hlaWdodDogJzEwMCUnfX0pO1xuXG4gICAgY29uc3QgaXNHcmlkU3dpdGNoYWJsZSA9IHd1KHBhcmFtVmlld2VycykuZXZlcnkoKHY6IERHLlZpZXdlcikgPT4gdi50eXBlICE9PSAnR3JpZCcpO1xuICAgICQoZ3JpZFdyYXBwZXIpLmhpZGUoKTtcblxuICAgIGNvbnN0IGdldEhlYWRlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGhlYWRlckxhYmVsID0gcGFyYW1DYXB0aW9uID8/IHBhcmFtRGYubmFtZSA/PyAnJztcbiAgICAgIGNvbnN0IGhlYWRlciA9IHVpLmRpdihbXSwgJ2dyb2stZnVuYy1yZXN1bHRzLWhlYWRlcicpO1xuICAgICAgaWYgKGhlYWRlckxhYmVsICE9ICcnKSB7XG4gICAgICAgIGNvbnN0IGggPSB1aS5oMShoZWFkZXJMYWJlbCk7XG4gICAgICAgIHVpLlRvb2x0aXAuYmluZChoLCAoKSA9PiBoZWFkZXJMYWJlbCk7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChoKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0dyaWRTd2l0Y2hhYmxlKSB7XG4gICAgICAgIGNvbnN0IGljb24gPSB1aS5pY29uU3ZnKCd0YWJsZScsIChlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB1aS5zZXREaXNwbGF5QWxsKHZpZXdlcnNUb0hpZGUsIHZpZXdlcnNUb0hpZGUuc29tZSgodmlld2VyKSA9PiB2aWV3ZXIuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSk7XG4gICAgICAgICAgdWkuc2V0RGlzcGxheShncmlkV3JhcHBlciwgZ3JpZFdyYXBwZXIuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKTtcbiAgICAgICAgfSwgJ1Nob3cgZ3JpZCcpO1xuICAgICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoaWNvbik7XG4gICAgICAgIHRoaXMucGFyYW1HcmlkU3dpdGNoZXMuc2V0KHBhcmFtLm5hbWUsIGljb24pO1xuICAgICAgfVxuICAgICAgaWYgKCFncm9rLnNoZWxsLnRhYmxlcy5pbmNsdWRlcyhwYXJhbURmKSkge1xuICAgICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgdWkuaWNvbnMuYWRkKChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBjb25zdCB2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcocGFyYW1EZik7XG4gICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZpZXdlciBvZiBwYXJhbVZpZXdlcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAodmlld2VyLnR5cGUgIT0gJ0dyaWQnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBuZXdWaWV3ZXIgPSBhd2FpdCBwYXJhbURmLnBsb3QuZnJvbVR5cGUodmlld2VyLnR5cGUpIGFzIERHLlZpZXdlcjtcbiAgICAgICAgICAgICAgICAgIG5ld1ZpZXdlci5zZXRPcHRpb25zKHZpZXdlci5nZXRPcHRpb25zKCkpO1xuICAgICAgICAgICAgICAgICAgdi5hZGRWaWV3ZXIobmV3Vmlld2VyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAnQWRkIHRvIHdvcmtzcGFjZSdcbiAgICAgICAgICApKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoZWFkZXI7XG4gICAgfTtcblxuICAgIGlmIChpc0dyaWRTd2l0Y2hhYmxlKSB7XG4gICAgICBjb25zdCBncmlkID0gcGFyYW1EZi5wbG90LmdyaWQoKTtcbiAgICAgIGdyaWRXcmFwcGVyLmFwcGVuZENoaWxkKGdyaWQucm9vdCk7XG4gICAgICBleGlzdGluZ1ZpZXdlcnMucHVzaChncmlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXIgPSBnZXRIZWFkZXIoKTtcbiAgICBjb25zdCB3cmFwcGVyID0gdWkuZGl2SChbXSwge3N0eWxlOiB7aGVpZ2h0OiAnMTAwJSd9fSk7XG4gICAgcGFyYW1WaWV3ZXJzLmZvckVhY2goKHZpZXdlcikgPT4ge1xuICAgICAgaWYgKHZpZXdlcj8udGFncyA9PSBudWxsKVxuICAgICAgICByZXR1cm47XG4gICAgICBleGlzdGluZ1ZpZXdlcnMhLnB1c2godmlld2VyKTtcbiAgICAgIGNvbnN0IHZpZXdlclNpemUgPSB2aWV3ZXIudGFnc1snLmJsb2NrLXNpemUnXSA/PyAxMDA7IC8vIGdldHRpbmcgYChibG9jazogMjUpYCB2YWx1ZTsgaWYgbm90IGRlZmluZWQsIGl0IGlzIDEwMFxuXG4gICAgICB2aWV3ZXIucm9vdC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICB2aWV3ZXIucm9vdC5jbGFzc0xpc3QuYWRkKGB1aS1ibG9jay0ke3ZpZXdlclNpemV9YCk7XG4gICAgICBpZiAoYmxvY2tzICsgdmlld2VyU2l6ZSA8PSAxMDApIHtcbiAgICAgICAgdmlld2Vyc1RvSGlkZS5wdXNoKHdyYXBwZXIpO1xuICAgICAgICBibG9ja1dpZHRoICs9IHZpZXdlclNpemU7XG4gICAgICB9XG4gICAgICBibG9ja3MgKz0gdmlld2VyU2l6ZTtcbiAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQodmlld2VyLnJvb3QpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYmxvY2sgPSB1aS5kaXZWKFtoZWFkZXIsIHdyYXBwZXIsIGdyaWRXcmFwcGVyXSwge3N0eWxlOiB7aGVpZ2h0OiBgJHtoZWlnaHR9cHhgLCB3aWR0aDogYCR7YmxvY2tXaWR0aH0lYH19KTtcbiAgICBibG9jay5jbGFzc0xpc3QuYWRkKCd1aS1ib3gnKTtcbiAgICB0aGlzLmFwcGVuZFJlc3VsdEVsZW1lbnQoYmxvY2ssIG9wdGlvbnM/LmNhdGVnb3J5KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwZW5kUmVzdWx0U2NhbGFyKHBhcmFtOiBERy5GdW5jQ2FsbFBhcmFtLCBvcHRpb25zOiB7IGNhcHRpb24/OiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGhlaWdodD86IG51bWJlciB9KSB7XG4gICAgY29uc3Qgc3BhbiA9IHVpLnNwYW4oW2Ake29wdGlvbnMuY2FwdGlvbiA/PyBwYXJhbS5uYW1lfTogYCwgYCR7cGFyYW0udmFsdWV9YF0pO1xuICAgIGlmICghdGhpcy5wYXJhbVNwYW5zLmdldChwYXJhbS5uYW1lKSkge1xuICAgICAgaWYgKHRoaXMucmVzdWx0c1RhYkNvbnRyb2wpXG4gICAgICAgIHRoaXMucmVzdWx0VGFicy5nZXQob3B0aW9ucy5jYXRlZ29yeSkhLmFwcGVuZENoaWxkKHNwYW4pO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnJlc3VsdHNEaXYuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyYW1TcGFucy5nZXQocGFyYW0ubmFtZSk/LnJlcGxhY2VXaXRoKHNwYW4pO1xuICAgIH1cbiAgICB0aGlzLnBhcmFtU3BhbnMuc2V0KHBhcmFtLm5hbWUsIHNwYW4pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRSZXN1bHRFbGVtZW50KGQ6IEhUTUxFbGVtZW50LCBjYXRlZ29yeT86IHN0cmluZykge1xuICAgIGlmIChjYXRlZ29yeSAhPSBudWxsICYmIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wgIT0gdW5kZWZpbmVkICYmIHRoaXMucmVzdWx0VGFicy5nZXQoY2F0ZWdvcnkpICE9IG51bGwpXG4gICAgICB0aGlzLnJlc3VsdFRhYnMuZ2V0KGNhdGVnb3J5KSEuYXBwZW5kQ2hpbGQoZCk7XG4gICAgZWxzZVxuICAgICAgdGhpcy5yZXN1bHRzRGl2LmFwcGVuZENoaWxkKGQpO1xuICB9XG59XG5cbmNvbnN0IGdldFNoZWV0TmFtZSA9IChuYW1lOiBzdHJpbmcsIGRpcmVjdGlvbjogRElSRUNUSU9OKSA9PiB7XG4gIGNvbnN0IGlkZWFsTmFtZSA9IGAke2RpcmVjdGlvbn0gLSAke25hbWV9YDtcbiAgcmV0dXJuIChpZGVhbE5hbWUubGVuZ3RoID4gMzEpID8gbmFtZS5zdWJzdHJpbmcoMCwgMzIpIDogaWRlYWxOYW1lO1xufTtcblxuZW51bSBESVJFQ1RJT04ge1xuICBJTlBVVCA9ICdJbnB1dCcsXG4gIE9VVFBVVCA9ICdPdXRwdXQnXG59XG5cbmNvbnN0IHNjYWxhcnNUb1NoZWV0ID0gKHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgc2NhbGFyczogeyBjYXB0aW9uOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHVuaXRzOiBzdHJpbmcgfVtdKSA9PiB7XG4gIHNoZWV0LmFkZFJvdyhbJ1BhcmFtZXRlcicsICdWYWx1ZScsICdVbml0cyddKS5mb250ID0ge2JvbGQ6IHRydWV9O1xuICBzY2FsYXJzLmZvckVhY2goKHNjYWxhcikgPT4ge1xuICAgIHNoZWV0LmFkZFJvdyhbc2NhbGFyLmNhcHRpb24sIHNjYWxhci52YWx1ZSwgc2NhbGFyLnVuaXRzXSk7XG4gIH0pO1xuXG4gIHNoZWV0LmdldENvbHVtbigxKS53aWR0aCA9IE1hdGgubWF4KFxuICAgIC4uLnNjYWxhcnMubWFwKChzY2FsYXIpID0+IHNjYWxhci5jYXB0aW9uLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1BhcmFtZXRlcicubGVuZ3RoXG4gICkgKiAxLjI7XG4gIHNoZWV0LmdldENvbHVtbigyKS53aWR0aCA9IE1hdGgubWF4KC4uLnNjYWxhcnMubWFwKChzY2FsYXIpID0+IHNjYWxhci52YWx1ZS50b1N0cmluZygpLmxlbmd0aCksICdWYWx1ZScubGVuZ3RoKSAqIDEuMjtcbiAgc2hlZXQuZ2V0Q29sdW1uKDMpLndpZHRoID0gTWF0aC5tYXgoLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLnVuaXRzLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1VuaXRzJy5sZW5ndGgpICogMS4yO1xufTtcblxuY29uc3QgZGZUb1NoZWV0ID0gKHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgZGY6IERHLkRhdGFGcmFtZSkgPT4ge1xuICBzaGVldC5hZGRSb3coZGYuY29sdW1ucy5uYW1lcygpKS5mb250ID0ge2JvbGQ6IHRydWV9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRmLnJvd0NvdW50OyBpKyspXG4gICAgc2hlZXQuYWRkUm93KFsuLi5kZi5yb3coaSkuY2VsbHNdLm1hcCgoY2VsbDogREcuQ2VsbCkgPT4gY2VsbC52YWx1ZSkpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGYuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgIHNoZWV0LmdldENvbHVtbihpICsgMSkud2lkdGggPVxuICAgICAgTWF0aC5tYXgoXG4gICAgICAgIC4uLmRmLmNvbHVtbnMuYnlJbmRleChpKS5jYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IGNhdGVnb3J5LnRvU3RyaW5nKCkubGVuZ3RoKSxcbiAgICAgICAgZGYuY29sdW1ucy5ieUluZGV4KGkpLm5hbWUubGVuZ3RoXG4gICAgICApICogMS4yO1xuICB9XG59O1xuXG5jb25zdCBwbG90VG9TaGVldCA9IGFzeW5jIChleHBvcnRXYjogRXhjZWxKUy5Xb3JrYm9vaywgc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBwbG90OiBIVE1MRWxlbWVudCwgY29sdW1uRm9ySW1hZ2U6IG51bWJlciwgcm93Rm9ySW1hZ2U6IG51bWJlciA9IDApID0+IHtcbiAgY29uc3QgY2FudmFzID0gYXdhaXQgaHRtbDJjYW52YXMocGxvdCBhcyBIVE1MRWxlbWVudCwge2xvZ2dpbmc6IGZhbHNlfSk7XG4gIGNvbnN0IGRhdGFVcmwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcblxuICBjb25zdCBpbWFnZUlkID0gZXhwb3J0V2IuYWRkSW1hZ2Uoe1xuICAgIGJhc2U2NDogZGF0YVVybCxcbiAgICBleHRlbnNpb246ICdwbmcnLFxuICB9KTtcbiAgc2hlZXQuYWRkSW1hZ2UoaW1hZ2VJZCwge1xuICAgIHRsOiB7Y29sOiBjb2x1bW5Gb3JJbWFnZSwgcm93OiByb3dGb3JJbWFnZX0sXG4gICAgZXh0OiB7d2lkdGg6IGNhbnZhcy53aWR0aCwgaGVpZ2h0OiBjYW52YXMuaGVpZ2h0fSxcbiAgfSk7XG59O1xuIl19
@@ -26,11 +26,11 @@ export declare namespace historyUtils {
26
26
  * @return Promise on array of FuncCalls corresponding to the passed Func ID
27
27
  * @stability Experimental
28
28
  */
29
- function pullRunsByName(funcName: string, filterOptions?: FilterOptions, listOptions?: {
29
+ function pullRunsByName(funcName: string, filterOptions?: FilterOptions[], listOptions?: {
30
30
  pageSize?: number;
31
31
  pageNumber?: number;
32
32
  filter?: string;
33
33
  order?: string;
34
- }): Promise<DG.FuncCall[]>;
34
+ }, includedFields?: string[]): Promise<DG.FuncCall[]>;
35
35
  }
36
36
  //# sourceMappingURL=history-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"history-utils.d.ts","sourceRoot":"","sources":["history-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAc,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAyB3D,yBAAiB,YAAY,CAAC;IAC5B,SAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,wBAiB/C;IAED,SAAsB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,wBAYpD;IAED,SAAsB,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,iBAExD;IAED;;;;;;;KAOC;IACD,SAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,aAAkB,EACjC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,GAC1F,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAUxB;IAED;;;;;;;KAOC;IACD,SAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,aAAkB,EACjC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,GAC1F,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAcxB;CACF"}
1
+ {"version":3,"file":"history-utils.d.ts","sourceRoot":"","sources":["history-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAc,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAyB3D,yBAAiB,YAAY,CAAC;IAC5B,SAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,wBAkB/C;IAED,SAAsB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,wBAYpD;IAED,SAAsB,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,iBAExD;IAED;;;;;;;KAOC;IACD,SAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,aAAkB,EACjC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,GAC1F,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAUxB;IAED;;;;;;;KAOC;IACD,SAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,aAAa,EAAO,EACnC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,EAC3F,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAsDxB;CACF"}
@@ -14,30 +14,31 @@ import wu from 'wu';
14
14
  const getSearchStringByPattern = (datePattern) => {
15
15
  switch (datePattern) {
16
16
  case 'Today':
17
- return ` and started > -1d`;
17
+ return `started > -1d`;
18
18
  case 'Yesterday':
19
- return ` and started > -2d and started < -1d`;
19
+ return `started > -2d and started < -1d`;
20
20
  case 'Any time':
21
21
  return ``;
22
22
  case 'Last year':
23
- return `and started > -2y and started < -1y`;
23
+ return `started > -2y and started < -1y`;
24
24
  case 'This year':
25
- return ` and started > -1y`;
25
+ return `started > -1y`;
26
26
  case 'Last month':
27
- return ` and started > -2m and started < -1m`;
27
+ return `started > -2m and started < -1m`;
28
28
  case 'This month':
29
- return ` and started > -1m`;
29
+ return `started > -1m`;
30
30
  case 'Last week':
31
- return ` and started > -2w and started < -1w`;
31
+ return `started > -2w and started < -1w`;
32
32
  case 'This week':
33
- return ` and started > -1w`;
33
+ return `started > -1w`;
34
34
  }
35
35
  };
36
36
  export var historyUtils;
37
37
  (function (historyUtils) {
38
38
  function loadRun(funcCallId) {
39
39
  return __awaiter(this, void 0, void 0, function* () {
40
- const pulledRun = yield grok.dapi.functions.calls.allPackageVersions().include('inputs, outputs').find(funcCallId);
40
+ const pulledRun = yield grok.dapi.functions.calls.allPackageVersions()
41
+ .include('inputs, outputs, session.user').find(funcCallId);
41
42
  // FIX ME: manually get script since pulledRun contains empty Func
42
43
  const script = yield grok.dapi.functions.allPackageVersions().find(pulledRun.func.id);
43
44
  pulledRun.func = script;
@@ -104,22 +105,58 @@ export var historyUtils;
104
105
  * @return Promise on array of FuncCalls corresponding to the passed Func ID
105
106
  * @stability Experimental
106
107
  */
107
- function pullRunsByName(funcName, filterOptions = {}, listOptions = {}) {
108
+ function pullRunsByName(funcName, filterOptions = [], listOptions = {}, includedFields = []) {
108
109
  return __awaiter(this, void 0, void 0, function* () {
109
- let filteringString = `func.name="${funcName}"`;
110
- filteringString += filterOptions.author ? ` and session.user.id="${filterOptions.author.id}"` : '';
111
- filteringString += filterOptions.date ? getSearchStringByPattern(filterOptions.date) : '';
112
- filteringString += filterOptions.isShared ? ` and options.isShared="true"` : '';
113
- filteringString += filterOptions.text ?
114
- ` and ((options.title like "${filterOptions.text}") or (options.annotation like "${filterOptions.text}"))` : '';
115
- const result = grok.dapi.functions.calls
110
+ let filteringString = ``;
111
+ for (const filterOption of filterOptions) {
112
+ const filterOptionCriteria = [];
113
+ if (filterOption.author)
114
+ filterOptionCriteria.push(`session.user.id="${filterOption.author.id}"`);
115
+ if (filterOption.date)
116
+ filterOptionCriteria.push(getSearchStringByPattern(filterOption.date));
117
+ if (filterOption.isShared)
118
+ filterOptionCriteria.push(`options.isShared="true"`);
119
+ if (filterOption.text) {
120
+ filterOptionCriteria.push(`((options.title like "${filterOption.text}") or (options.annotation like "${filterOption.text}"))`);
121
+ }
122
+ const filterOptionString = filterOptionCriteria.join(' and ');
123
+ if (filterOptionString !== '') {
124
+ if (filteringString === '')
125
+ filteringString += `(${filterOptionString})`;
126
+ else
127
+ filteringString += ` or (${filterOptionString})`;
128
+ }
129
+ }
130
+ if (filteringString !== '')
131
+ filteringString = ` and (${filteringString})`;
132
+ const result = yield grok.dapi.functions.calls
116
133
  .allPackageVersions()
117
- .filter(`(${filteringString})`)
118
- .include('session.user, options')
134
+ .filter(`func.name="${funcName}"${filteringString}`)
135
+ .include(`${includedFields.join(',')}`)
119
136
  .list(listOptions);
137
+ for (const pulledRun of result) {
138
+ const script = yield grok.dapi.functions.allPackageVersions().find(pulledRun.func.id);
139
+ pulledRun.func = script;
140
+ }
141
+ if (includedFields.includes('inputs') || includedFields.includes('func.params')) {
142
+ for (const pulledRun of result) {
143
+ const dfInputs = wu(pulledRun.inputParams.values())
144
+ .filter((input) => input.property.propertyType === DG.TYPE.DATA_FRAME);
145
+ for (const input of dfInputs)
146
+ pulledRun.inputs[input.name] = yield grok.dapi.tables.getTable(pulledRun.inputs[input.name]);
147
+ }
148
+ }
149
+ if (includedFields.includes('outputs') || includedFields.includes('func.params')) {
150
+ for (const pulledRun of result) {
151
+ const dfOutputs = wu(pulledRun.outputParams.values())
152
+ .filter((output) => output.property.propertyType === DG.TYPE.DATA_FRAME);
153
+ for (const output of dfOutputs)
154
+ pulledRun.outputs[output.name] = yield grok.dapi.tables.getTable(pulledRun.outputs[output.name]);
155
+ }
156
+ }
120
157
  return result;
121
158
  });
122
159
  }
123
160
  historyUtils.pullRunsByName = pullRunsByName;
124
161
  })(historyUtils || (historyUtils = {}));
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFFMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFHcEIsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFdBQXdCLEVBQUUsRUFBRTtJQUM1RCxRQUFRLFdBQVcsRUFBRTtRQUNyQixLQUFLLE9BQU87WUFDVixPQUFPLG9CQUFvQixDQUFDO1FBQzlCLEtBQUssV0FBVztZQUNkLE9BQU8sc0NBQXNDLENBQUM7UUFDaEQsS0FBSyxVQUFVO1lBQ2IsT0FBTyxFQUFFLENBQUM7UUFDWixLQUFLLFdBQVc7WUFDZCxPQUFPLHFDQUFxQyxDQUFDO1FBQy9DLEtBQUssV0FBVztZQUNkLE9BQU8sb0JBQW9CLENBQUM7UUFDOUIsS0FBSyxZQUFZO1lBQ2YsT0FBTyxzQ0FBc0MsQ0FBQztRQUNoRCxLQUFLLFlBQVk7WUFDZixPQUFPLG9CQUFvQixDQUFDO1FBQzlCLEtBQUssV0FBVztZQUNkLE9BQU8sc0NBQXNDLENBQUM7UUFDaEQsS0FBSyxXQUFXO1lBQ2QsT0FBTyxvQkFBb0IsQ0FBQztLQUM3QjtBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sS0FBVyxZQUFZLENBeUY1QjtBQXpGRCxXQUFpQixZQUFZO0lBQzNCLFNBQXNCLE9BQU8sQ0FBQyxVQUFrQjs7WUFDOUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkgsa0VBQWtFO1lBQ2xFLE1BQU0sTUFBTSxH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Q0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekYsZUFBZSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixDQUFBLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0UsZUFBZSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckMsOEJBQThCLGFBQWEsQ0FBQyxJQUFJLG1DQUFtQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqSCxNQUFNLE1BQU0sR0FDVixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO2lCQUN0QixrQkFBa0IsRUFBRTtpQkFDcEIsTUFBTSxDQUFDLElBQUksZUFBZSxHQUFHLENBQUM7aUJBQzlCLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztpQkFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQWxCcUIsMkJBQWMsaUJBa0JuQyxDQUFBO0FBQ0gsQ0FBQyxFQXpGZ0IsWUFBWSxLQUFaLFlBQVksUUF5RjVCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgd3UgZnJvbSAnd3UnO1xuaW1wb3J0IHtEYXRlT3B0aW9ucywgRmlsdGVyT3B0aW9uc30gZnJvbSAnLi9mdW5jdGlvbi12aWV3JztcblxuY29uc3QgZ2V0U2VhcmNoU3RyaW5nQnlQYXR0ZXJuID0gKGRhdGVQYXR0ZXJuOiBEYXRlT3B0aW9ucykgPT4ge1xuICBzd2l0Y2ggKGRhdGVQYXR0ZXJuKSB7XG4gIGNhc2UgJ1RvZGF5JzpcbiAgICByZXR1cm4gYCBhbmQgc3RhcnRlZCA+IC0xZGA7XG4gIGNhc2UgJ1llc3RlcmRheSc6XG4gICAgcmV0dXJuIGAgYW5kIHN0YXJ0ZWQgPiAtMmQgYW5kIHN0YXJ0ZWQgPCAtMWRgO1xuICBjYXNlICdBbnkgdGltZSc6XG4gICAgcmV0dXJuIGBgO1xuICBjYXNlICdMYXN0IHllYXInOlxuICAgIHJldHVybiBgYW5kIHN0YXJ0ZWQgPiAtMnkgYW5kIHN0YXJ0ZWQgPCAtMXlgO1xuICBjYXNlICdUaGlzIHllYXInOlxuICAgIHJldHVybiBgIGFuZCBzdGFydGVkID4gLTF5YDtcbiAgY2FzZSAnTGFzdCBtb250aCc6XG4gICAgcmV0dXJuIGAgYW5kIHN0YXJ0ZWQgPiAtMm0gYW5kIHN0YXJ0ZWQgPCAtMW1gO1xuICBjYXNlICdUaGlzIG1vbnRoJzpcbiAgICByZXR1cm4gYCBhbmQgc3RhcnRlZCA+IC0xbWA7XG4gIGNhc2UgJ0xhc3Qgd2Vlayc6XG4gICAgcmV0dXJuIGAgYW5kIHN0YXJ0ZWQgPiAtMncgYW5kIHN0YXJ0ZWQgPCAtMXdgO1xuICBjYXNlICdUaGlzIHdlZWsnOlxuICAgIHJldHVybiBgIGFuZCBzdGFydGVkID4gLTF3YDtcbiAgfVxufTtcblxuZXhwb3J0IG5hbWVzcGFjZSBoaXN0b3J5VXRpbHMge1xuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFJ1bihmdW5jQ2FsbElkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwdWxsZWRSdW4gPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLmluY2x1ZGUoJ2lucHV0cywgb3V0cHV0cycpLmZpbmQoZnVuY0NhbGxJZCk7XG4gICAgLy8gRklYIE1FOiBtYW51YWxseSBnZXQgc2NyaXB0IHNpbmNlIHB1bGxlZFJ1biBjb250YWlucyBlbXB0eSBGdW5jXG4gICAgY29uc3Qgc2NyaXB0ID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5maW5kKHB1bGxlZFJ1bi5mdW5jLmlkKTtcbiAgICBwdWxsZWRSdW4uZnVuYyA9IHNjcmlwdDtcbiAgICBwdWxsZWRSdW4ub3B0aW9uc1snaXNIaXN0b3JpY2FsJ10gPSB0cnVlO1xuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KHB1bGxlZFJ1bi5vdXRwdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIGRmT3V0cHV0cylcbiAgICAgIHB1bGxlZFJ1bi5vdXRwdXRzW291dHB1dC5uYW1lXSA9IGF3YWl0IGdyb2suZGFwaS50YWJsZXMuZ2V0VGFibGUocHVsbGVkUnVuLm91dHB1dHNbb3V0cHV0Lm5hbWVdKTtcblxuICAgIGNvbnN0IGRmSW5wdXRzID0gd3UocHVsbGVkUnVuLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKGlucHV0KSA9PiBpbnB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBkZklucHV0cylcbiAgICAgIHB1bGxlZFJ1bi5pbnB1dHNbaW5wdXQubmFtZV0gPSBhd2FpdCBncm9rLmRhcGkudGFibGVzLmdldFRhYmxlKHB1bGxlZFJ1bi5pbnB1dHNbaW5wdXQubmFtZV0pO1xuXG4gICAgcmV0dXJuIHB1bGxlZFJ1bjtcbiAgfVxuXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYXZlUnVuKGNhbGxUb1NhdmU6IERHLkZ1bmNDYWxsKSB7XG4gICAgY29uc3QgZGZPdXRwdXRzID0gd3UoY2FsbFRvU2F2ZS5vdXRwdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIGRmT3V0cHV0cylcbiAgICAgIGF3YWl0IGdyb2suZGFwaS50YWJsZXMudXBsb2FkRGF0YUZyYW1lKGNhbGxUb1NhdmUub3V0cHV0c1tvdXRwdXQubmFtZV0pO1xuXG4gICAgY29uc3QgZGZJbnB1dHMgPSB3dShjYWxsVG9TYXZlLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKGlucHV0KSA9PiBpbnB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBkZklucHV0cylcbiAgICAgIGF3YWl0IGdyb2suZGFwaS50YWJsZXMudXBsb2FkRGF0YUZyYW1lKGNhbGxUb1NhdmUuaW5wdXRzW2lucHV0Lm5hbWVdKTtcblxuICAgIHJldHVybiBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvU2F2ZSk7XG4gIH1cblxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlUnVuKGNhbGxUb0RlbGV0ZTogREcuRnVuY0NhbGwpIHtcbiAgICBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmRlbGV0ZShjYWxsVG9EZWxldGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGFsbCB0aGUgZnVuY3Rpb24gY2FsbCBvZiB0aGlzIGZ1bmN0aW9uLlxuICAgKiBEZXNpZ25lZCB0byBwdWxsIGhzdG9yaWNhbCBydW5zIGluIGZhc3QgbWFubmVyIGFuZCB0aGUgY2FsbCB7QGxpbmsgbG9hZFJ1bn0gd2l0aCBzcGVjaWZpZWQgcnVuIElELlxuICAgKiBXQVJOSU5HOiBGdW5jQ2FsbCBpbnB1dHMvb3V0cHV0cyBmaWVsZHMgYXJlIG5vdCBpbmNsdWRlZFxuICAgKiBAcGFyYW0gZnVuY0lkIElEIG9mIEZ1bmMgd2hpY2ggY2FsbHMgd2UgYXJlIGxvb2tpbmcgZm9yLiBHZXQgaXQgdXNpbmcge0BsaW5rIGZ1bmMuaWR9IGZpZWxkXG4gICAqIEByZXR1cm4gUHJvbWlzZSBvbiBhcnJheSBvZiBGdW5jQ2FsbHMgY29ycmVzcG9uZGluZyB0byB0aGUgcGFzc2VkIEZ1bmMgSURcbiAgICogQHN0YWJpbGl0eSBEZXByZWNhdGVkLiBTY3JpcHQgSUQgY2hhbmdlcyB3aXRoIGV2ZXJ5IHBhY2thZ2UgcmVsZWFzZSwgc28gc2VhcmNoaW5nIGJ5IElEIGlzIHVzZWxlc3MgaW4gcHJhY3RpY2UuXG4gKi9cbiAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1bGxSdW5zKFxuICAgIGZ1bmNJZDogc3RyaW5nLFxuICAgIGZpbHRlck9wdGlvbnM6IEZpbHRlck9wdGlvbnMgPSB7fSxcbiAgICBsaXN0T3B0aW9uczoge3BhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBmaWx0ZXI/OiBzdHJpbmcsIG9yZGVyPzogc3RyaW5nfSA9IHt9XG4gICk6IFByb21pc2U8REcuRnVuY0NhbGxbXT4ge1xuICAgIGxldCBmaWx0ZXJpbmdTdHJpbmcgPSBgZnVuYy5pZD1cIiR7ZnVuY0lkfVwiYDtcbiAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gZmlsdGVyT3B0aW9ucy5hdXRob3IgPyBgIGFuZCBzZXNzaW9uLnVzZXIuaWQ9XCIke2ZpbHRlck9wdGlvbnMuYXV0aG9yLmlkfVwiYDonJztcbiAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gZmlsdGVyT3B0aW9ucy5kYXRlID8gZ2V0U2VhcmNoU3RyaW5nQnlQYXR0ZXJuKGZpbHRlck9wdGlvbnMuZGF0ZSk6ICcnO1xuICAgIGNvbnN0IGZpbHRlciA9IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHNcbiAgICAgIC5hbGxQYWNrYWdlVmVyc2lvbnMoKVxuICAgICAgLmZpbHRlcihmaWx0ZXJpbmdTdHJpbmcpXG4gICAgICAuaW5jbHVkZSgnc2Vzc2lvbi51c2VyLCBvcHRpb25zJyk7XG4gICAgY29uc3QgbGlzdCA9IGZpbHRlci5saXN0KGxpc3RPcHRpb25zKTtcbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogRGVzaWduZWQgdG8gcHVsbCBoc3RvcmljYWwgcnVucyBpbiBmYXN0IG1hbm5lciBhbmQgdGhlIGNhbGwge0BsaW5rIGxvYWRSdW59IHdpdGggc3BlY2lmaWVkIHJ1biBJRC5cbiAgICogV0FSTklORzogRnVuY0NhbGwgaW5wdXRzL291dHB1dHMgZmllbGRzIGFyZSBub3QgaW5jbHVkZWRcbiAgICogQHBhcmFtIGZ1bmNOYW1lIE5hbWUgb2YgRnVuYyB3aGljaCBjYWxscyB3ZSBhcmUgbG9va2luZyBmb3IuIEdldCBpdCB1c2luZyB7QGxpbmsgZnVuYy5uYW1lfSBmaWVsZFxuICAgKiBAcmV0dXJuIFByb21pc2Ugb24gYXJyYXkgb2YgRnVuY0NhbGxzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhc3NlZCBGdW5jIElEXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbiAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1bGxSdW5zQnlOYW1lKFxuICAgIGZ1bmNOYW1lOiBzdHJpbmcsXG4gICAgZmlsdGVyT3B0aW9uczogRmlsdGVyT3B0aW9ucyA9IHt9LFxuICAgIGxpc3RPcHRpb25zOiB7cGFnZVNpemU/OiBudW1iZXIsIHBhZ2VOdW1iZXI/OiBudW1iZXIsIGZpbHRlcj86IHN0cmluZywgb3JkZXI/OiBzdHJpbmd9ID0ge31cbiAgKTogUHJvbWlzZTxERy5GdW5jQ2FsbFtdPiB7XG4gICAgbGV0IGZpbHRlcmluZ1N0cmluZyA9IGBmdW5jLm5hbWU9XCIke2Z1bmNOYW1lfVwiYDtcbiAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gZmlsdGVyT3B0aW9ucy5hdXRob3IgPyBgIGFuZCBzZXNzaW9uLnVzZXIuaWQ9XCIke2ZpbHRlck9wdGlvbnMuYXV0aG9yLmlkfVwiYDonJztcbiAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gZmlsdGVyT3B0aW9ucy5kYXRlID8gZ2V0U2VhcmNoU3RyaW5nQnlQYXR0ZXJuKGZpbHRlck9wdGlvbnMuZGF0ZSk6ICcnO1xuICAgIGZpbHRlcmluZ1N0cmluZyArPSBmaWx0ZXJPcHRpb25zLmlzU2hhcmVkID8gYCBhbmQgb3B0aW9ucy5pc1NoYXJlZD1cInRydWVcImA6ICcnO1xuICAgIGZpbHRlcmluZ1N0cmluZyArPSBmaWx0ZXJPcHRpb25zLnRleHQgP1xuICAgICAgYCBhbmQgKChvcHRpb25zLnRpdGxlIGxpa2UgXCIke2ZpbHRlck9wdGlvbnMudGV4dH1cIikgb3IgKG9wdGlvbnMuYW5ub3RhdGlvbiBsaWtlIFwiJHtmaWx0ZXJPcHRpb25zLnRleHR9XCIpKWA6ICcnO1xuICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzXG4gICAgICAgIC5hbGxQYWNrYWdlVmVyc2lvbnMoKVxuICAgICAgICAuZmlsdGVyKGAoJHtmaWx0ZXJpbmdTdHJpbmd9KWApXG4gICAgICAgIC5pbmNsdWRlKCdzZXNzaW9uLnVzZXIsIG9wdGlvbnMnKVxuICAgICAgICAubGlzdChsaXN0T3B0aW9ucyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFFMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFHcEIsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFdBQXdCLEVBQUUsRUFBRTtJQUM1RCxRQUFRLFdBQVcsRUFBRTtRQUNyQixLQUFLLE9BQU87WUFDVixPQUFPLGVBQWUsQ0FBQztRQUN6QixLQUFLLFdBQVc7WUFDZCxPQUFPLGlDQUFpQyxDQUFDO1FBQzNDLEtBQUssVUFBVTtZQUNiLE9BQU8sRUFBRSxDQUFDO1FBQ1osS0FBSyxXQUFXO1lBQ2QsT0FBTyxpQ0FBaUMsQ0FBQztRQUMzQyxLQUFLLFdBQVc7WUFDZCxPQUFPLGVBQWUsQ0FBQztRQUN6QixLQUFLLFlBQVk7WUFDZixPQUFPLGlDQUFpQyxDQUFDO1FBQzNDLEtBQUssWUFBWTtZQUNmLE9BQU8sZUFBZSxDQUFDO1FBQ3pCLEtBQUssV0FBVztZQUNkLE9BQU8saUNBQWlDLENBQUM7UUFDM0MsS0FBSyxXQUFXO1lBQ2QsT0FBTyxlQUFlLENBQUM7S0FDeEI7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLEtBQVcsWUFBWSxDQW1JNUI7QUFuSUQsV0FBaUIsWUFBWTtJQUMzQixTQUFzQixPQUFPLENBQUMsVUFBa0I7O1lBQzlDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFO2lCQUNuRSxPQUFPLENBQUMsK0JBQStCLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0Qsa0VBQWtFO1lBQ2xFLE1BQU0sTUFBTSxHQUFHLE1B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b0JBQzNFLEtBQUssTUFBTSxNQUFNLElBQUksU0FBUzt3QkFDNUIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDcEc7YUFDRjtZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQTNEcUIsMkJBQWMsaUJBMkRuQyxDQUFBO0FBQ0gsQ0FBQyxFQW5JZ0IsWUFBWSxLQUFaLFlBQVksUUFtSTVCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgd3UgZnJvbSAnd3UnO1xuaW1wb3J0IHtEYXRlT3B0aW9ucywgRmlsdGVyT3B0aW9uc30gZnJvbSAnLi9mdW5jdGlvbi12aWV3JztcblxuY29uc3QgZ2V0U2VhcmNoU3RyaW5nQnlQYXR0ZXJuID0gKGRhdGVQYXR0ZXJuOiBEYXRlT3B0aW9ucykgPT4ge1xuICBzd2l0Y2ggKGRhdGVQYXR0ZXJuKSB7XG4gIGNhc2UgJ1RvZGF5JzpcbiAgICByZXR1cm4gYHN0YXJ0ZWQgPiAtMWRgO1xuICBjYXNlICdZZXN0ZXJkYXknOlxuICAgIHJldHVybiBgc3RhcnRlZCA+IC0yZCBhbmQgc3RhcnRlZCA8IC0xZGA7XG4gIGNhc2UgJ0FueSB0aW1lJzpcbiAgICByZXR1cm4gYGA7XG4gIGNhc2UgJ0xhc3QgeWVhcic6XG4gICAgcmV0dXJuIGBzdGFydGVkID4gLTJ5IGFuZCBzdGFydGVkIDwgLTF5YDtcbiAgY2FzZSAnVGhpcyB5ZWFyJzpcbiAgICByZXR1cm4gYHN0YXJ0ZWQgPiAtMXlgO1xuICBjYXNlICdMYXN0IG1vbnRoJzpcbiAgICByZXR1cm4gYHN0YXJ0ZWQgPiAtMm0gYW5kIHN0YXJ0ZWQgPCAtMW1gO1xuICBjYXNlICdUaGlzIG1vbnRoJzpcbiAgICByZXR1cm4gYHN0YXJ0ZWQgPiAtMW1gO1xuICBjYXNlICdMYXN0IHdlZWsnOlxuICAgIHJldHVybiBgc3RhcnRlZCA+IC0ydyBhbmQgc3RhcnRlZCA8IC0xd2A7XG4gIGNhc2UgJ1RoaXMgd2Vlayc6XG4gICAgcmV0dXJuIGBzdGFydGVkID4gLTF3YDtcbiAgfVxufTtcblxuZXhwb3J0IG5hbWVzcGFjZSBoaXN0b3J5VXRpbHMge1xuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFJ1bihmdW5jQ2FsbElkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwdWxsZWRSdW4gPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpXG4gICAgICAuaW5jbHVkZSgnaW5wdXRzLCBvdXRwdXRzLCBzZXNzaW9uLnVzZXInKS5maW5kKGZ1bmNDYWxsSWQpO1xuICAgIC8vIEZJWCBNRTogbWFudWFsbHkgZ2V0IHNjcmlwdCBzaW5jZSBwdWxsZWRSdW4gY29udGFpbnMgZW1wdHkgRnVuY1xuICAgIGNvbnN0IHNjcmlwdCA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuYWxsUGFja2FnZVZlcnNpb25zKCkuZmluZChwdWxsZWRSdW4uZnVuYy5pZCk7XG4gICAgcHVsbGVkUnVuLmZ1bmMgPSBzY3JpcHQ7XG4gICAgcHVsbGVkUnVuLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddID0gdHJ1ZTtcbiAgICBjb25zdCBkZk91dHB1dHMgPSB3dShwdWxsZWRSdW4ub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpXG4gICAgICBwdWxsZWRSdW4ub3V0cHV0c1tvdXRwdXQubmFtZV0gPSBhd2FpdCBncm9rLmRhcGkudGFibGVzLmdldFRhYmxlKHB1bGxlZFJ1bi5vdXRwdXRzW291dHB1dC5uYW1lXSk7XG5cbiAgICBjb25zdCBkZklucHV0cyA9IHd1KHB1bGxlZFJ1bi5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpXG4gICAgICBwdWxsZWRSdW4uaW5wdXRzW2lucHV0Lm5hbWVdID0gYXdhaXQgZ3Jvay5kYXBpLnRhYmxlcy5nZXRUYWJsZShwdWxsZWRSdW4uaW5wdXRzW2lucHV0Lm5hbWVdKTtcblxuICAgIHJldHVybiBwdWxsZWRSdW47XG4gIH1cblxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCkge1xuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KGNhbGxUb1NhdmUub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpXG4gICAgICBhd2FpdCBncm9rLmRhcGkudGFibGVzLnVwbG9hZERhdGFGcmFtZShjYWxsVG9TYXZlLm91dHB1dHNbb3V0cHV0Lm5hbWVdKTtcblxuICAgIGNvbnN0IGRmSW5wdXRzID0gd3UoY2FsbFRvU2F2ZS5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpXG4gICAgICBhd2FpdCBncm9rLmRhcGkudGFibGVzLnVwbG9hZERhdGFGcmFtZShjYWxsVG9TYXZlLmlucHV0c1tpbnB1dC5uYW1lXSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5zYXZlKGNhbGxUb1NhdmUpO1xuICB9XG5cbiAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVJ1bihjYWxsVG9EZWxldGU6IERHLkZ1bmNDYWxsKSB7XG4gICAgYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5kZWxldGUoY2FsbFRvRGVsZXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogRGVzaWduZWQgdG8gcHVsbCBoc3RvcmljYWwgcnVucyBpbiBmYXN0IG1hbm5lciBhbmQgdGhlIGNhbGwge0BsaW5rIGxvYWRSdW59IHdpdGggc3BlY2lmaWVkIHJ1biBJRC5cbiAgICogV0FSTklORzogRnVuY0NhbGwgaW5wdXRzL291dHB1dHMgZmllbGRzIGFyZSBub3QgaW5jbHVkZWRcbiAgICogQHBhcmFtIGZ1bmNJZCBJRCBvZiBGdW5jIHdoaWNoIGNhbGxzIHdlIGFyZSBsb29raW5nIGZvci4gR2V0IGl0IHVzaW5nIHtAbGluayBmdW5jLmlkfSBmaWVsZFxuICAgKiBAcmV0dXJuIFByb21pc2Ugb24gYXJyYXkgb2YgRnVuY0NhbGxzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhc3NlZCBGdW5jIElEXG4gICAqIEBzdGFiaWxpdHkgRGVwcmVjYXRlZC4gU2NyaXB0IElEIGNoYW5nZXMgd2l0aCBldmVyeSBwYWNrYWdlIHJlbGVhc2UsIHNvIHNlYXJjaGluZyBieSBJRCBpcyB1c2VsZXNzIGluIHByYWN0aWNlLlxuICovXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWxsUnVucyhcbiAgICBmdW5jSWQ6IHN0cmluZyxcbiAgICBmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30sXG4gICAgbGlzdE9wdGlvbnM6IHtwYWdlU2l6ZT86IG51bWJlciwgcGFnZU51bWJlcj86IG51bWJlciwgZmlsdGVyPzogc3RyaW5nLCBvcmRlcj86IHN0cmluZ30gPSB7fVxuICApOiBQcm9taXNlPERHLkZ1bmNDYWxsW10+IHtcbiAgICBsZXQgZmlsdGVyaW5nU3RyaW5nID0gYGZ1bmMuaWQ9XCIke2Z1bmNJZH1cImA7XG4gICAgZmlsdGVyaW5nU3RyaW5nICs9IGZpbHRlck9wdGlvbnMuYXV0aG9yID8gYCBhbmQgc2Vzc2lvbi51c2VyLmlkPVwiJHtmaWx0ZXJPcHRpb25zLmF1dGhvci5pZH1cImA6Jyc7XG4gICAgZmlsdGVyaW5nU3RyaW5nICs9IGZpbHRlck9wdGlvbnMuZGF0ZSA/IGdldFNlYXJjaFN0cmluZ0J5UGF0dGVybihmaWx0ZXJPcHRpb25zLmRhdGUpOiAnJztcbiAgICBjb25zdCBmaWx0ZXIgPSBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzXG4gICAgICAuYWxsUGFja2FnZVZlcnNpb25zKClcbiAgICAgIC5maWx0ZXIoZmlsdGVyaW5nU3RyaW5nKVxuICAgICAgLmluY2x1ZGUoJ3Nlc3Npb24udXNlciwgb3B0aW9ucycpO1xuICAgIGNvbnN0IGxpc3QgPSBmaWx0ZXIubGlzdChsaXN0T3B0aW9ucyk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYWxsIHRoZSBmdW5jdGlvbiBjYWxsIG9mIHRoaXMgZnVuY3Rpb24uXG4gICAqIERlc2lnbmVkIHRvIHB1bGwgaHN0b3JpY2FsIHJ1bnMgaW4gZmFzdCBtYW5uZXIgYW5kIHRoZSBjYWxsIHtAbGluayBsb2FkUnVufSB3aXRoIHNwZWNpZmllZCBydW4gSUQuXG4gICAqIFdBUk5JTkc6IEZ1bmNDYWxsIGlucHV0cy9vdXRwdXRzIGZpZWxkcyBhcmUgbm90IGluY2x1ZGVkXG4gICAqIEBwYXJhbSBmdW5jTmFtZSBOYW1lIG9mIEZ1bmMgd2hpY2ggY2FsbHMgd2UgYXJlIGxvb2tpbmcgZm9yLiBHZXQgaXQgdXNpbmcge0BsaW5rIGZ1bmMubmFtZX0gZmllbGRcbiAgICogQHJldHVybiBQcm9taXNlIG9uIGFycmF5IG9mIEZ1bmNDYWxscyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgRnVuYyBJRFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWxsUnVuc0J5TmFtZShcbiAgICBmdW5jTmFtZTogc3RyaW5nLFxuICAgIGZpbHRlck9wdGlvbnM6IEZpbHRlck9wdGlvbnNbXSA9IFtdLFxuICAgIGxpc3RPcHRpb25zOiB7cGFnZVNpemU/OiBudW1iZXIsIHBhZ2VOdW1iZXI/OiBudW1iZXIsIGZpbHRlcj86IHN0cmluZywgb3JkZXI/OiBzdHJpbmd9ID0ge30sXG4gICAgaW5jbHVkZWRGaWVsZHM6IHN0cmluZ1tdID0gW11cbiAgKTogUHJvbWlzZTxERy5GdW5jQ2FsbFtdPiB7XG4gICAgbGV0IGZpbHRlcmluZ1N0cmluZyA9IGBgO1xuICAgIGZvciAoY29uc3QgZmlsdGVyT3B0aW9uIG9mIGZpbHRlck9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlck9wdGlvbkNyaXRlcmlhID0gW10gYXMgc3RyaW5nW107XG4gICAgICBpZiAoZmlsdGVyT3B0aW9uLmF1dGhvcikgZmlsdGVyT3B0aW9uQ3JpdGVyaWEucHVzaChgc2Vzc2lvbi51c2VyLmlkPVwiJHtmaWx0ZXJPcHRpb24uYXV0aG9yLmlkfVwiYCk7XG4gICAgICBpZiAoZmlsdGVyT3B0aW9uLmRhdGUpIGZpbHRlck9wdGlvbkNyaXRlcmlhLnB1c2goZ2V0U2VhcmNoU3RyaW5nQnlQYXR0ZXJuKGZpbHRlck9wdGlvbi5kYXRlKSk7XG4gICAgICBpZiAoZmlsdGVyT3B0aW9uLmlzU2hhcmVkKSBmaWx0ZXJPcHRpb25Dcml0ZXJpYS5wdXNoKGBvcHRpb25zLmlzU2hhcmVkPVwidHJ1ZVwiYCk7XG4gICAgICBpZiAoZmlsdGVyT3B0aW9uLnRleHQpIHtcbiAgICAgICAgZmlsdGVyT3B0aW9uQ3JpdGVyaWEucHVzaChcbiAgICAgICAgICBgKChvcHRpb25zLnRpdGxlIGxpa2UgXCIke2ZpbHRlck9wdGlvbi50ZXh0fVwiKSBvciAob3B0aW9ucy5hbm5vdGF0aW9uIGxpa2UgXCIke2ZpbHRlck9wdGlvbi50ZXh0fVwiKSlgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBmaWx0ZXJPcHRpb25TdHJpbmcgPSBmaWx0ZXJPcHRpb25Dcml0ZXJpYS5qb2luKCcgYW5kICcpO1xuICAgICAgaWYgKGZpbHRlck9wdGlvblN0cmluZyAhPT0gJycpIHtcbiAgICAgICAgaWYgKGZpbHRlcmluZ1N0cmluZyA9PT0gJycpXG4gICAgICAgICAgZmlsdGVyaW5nU3RyaW5nICs9IGAoJHtmaWx0ZXJPcHRpb25TdHJpbmd9KWA7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gYCBvciAoJHtmaWx0ZXJPcHRpb25TdHJpbmd9KWA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmaWx0ZXJpbmdTdHJpbmcgIT09ICcnKVxuICAgICAgZmlsdGVyaW5nU3RyaW5nID0gYCBhbmQgKCR7ZmlsdGVyaW5nU3RyaW5nfSlgO1xuXG4gICAgY29uc3QgcmVzdWx0ID1cbiAgICAgIGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHNcbiAgICAgICAgLmFsbFBhY2thZ2VWZXJzaW9ucygpXG4gICAgICAgIC5maWx0ZXIoYGZ1bmMubmFtZT1cIiR7ZnVuY05hbWV9XCIke2ZpbHRlcmluZ1N0cmluZ31gKVxuICAgICAgICAuaW5jbHVkZShgJHtpbmNsdWRlZEZpZWxkcy5qb2luKCcsJyl9YClcbiAgICAgICAgLmxpc3QobGlzdE9wdGlvbnMpO1xuXG4gICAgZm9yIChjb25zdCBwdWxsZWRSdW4gb2YgcmVzdWx0KSB7XG4gICAgICBjb25zdCBzY3JpcHQgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmFsbFBhY2thZ2VWZXJzaW9ucygpLmZpbmQocHVsbGVkUnVuLmZ1bmMuaWQpO1xuICAgICAgcHVsbGVkUnVuLmZ1bmMgPSBzY3JpcHQ7XG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVkRmllbGRzLmluY2x1ZGVzKCdpbnB1dHMnKSB8fCBpbmNsdWRlZEZpZWxkcy5pbmNsdWRlcygnZnVuYy5wYXJhbXMnKSkge1xuICAgICAgZm9yIChjb25zdCBwdWxsZWRSdW4gb2YgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGRmSW5wdXRzID0gd3UocHVsbGVkUnVuLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGRmSW5wdXRzKVxuICAgICAgICAgIHB1bGxlZFJ1bi5pbnB1dHNbaW5wdXQubmFtZV0gPSBhd2FpdCBncm9rLmRhcGkudGFibGVzLmdldFRhYmxlKHB1bGxlZFJ1bi5pbnB1dHNbaW5wdXQubmFtZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmNsdWRlZEZpZWxkcy5pbmNsdWRlcygnb3V0cHV0cycpIHx8IGluY2x1ZGVkRmllbGRzLmluY2x1ZGVzKCdmdW5jLnBhcmFtcycpKSB7XG4gICAgICBmb3IgKGNvbnN0IHB1bGxlZFJ1biBvZiByZXN1bHQpIHtcbiAgICAgICAgY29uc3QgZGZPdXRwdXRzID0gd3UocHVsbGVkUnVuLm91dHB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAgICAgLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgICAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpXG4gICAgICAgICAgcHVsbGVkUnVuLm91dHB1dHNbb3V0cHV0Lm5hbWVdID0gYXdhaXQgZ3Jvay5kYXBpLnRhYmxlcy5nZXRUYWJsZShwdWxsZWRSdW4ub3V0cHV0c1tvdXRwdXQubmFtZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==