@datagrok-libraries/utils 4.7.4 → 4.7.6

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
@@ -8,7 +8,7 @@
8
8
  "email": "aparamonov@datagrok.ai"
9
9
  },
10
10
  "fullName": "Utils",
11
- "version": "4.7.4",
11
+ "version": "4.7.6",
12
12
  "description": "Common utilities",
13
13
  "dependencies": {
14
14
  "cash-dom": "^8.1.1",
@@ -17,10 +17,12 @@
17
17
  "fast-sha256": "^1.3.0",
18
18
  "js-base64": "^3.7.5",
19
19
  "rxjs": "^6.5.5",
20
+ "semver": "^7.7.4",
20
21
  "wu": "^2.1.0"
21
22
  },
22
23
  "devDependencies": {
23
24
  "@types/node": "^22.9.0",
25
+ "@types/semver": "^7.7.0",
24
26
  "@types/wu": "^2.1.44",
25
27
  "@typescript-eslint/eslint-plugin": "^5.11.0",
26
28
  "@typescript-eslint/parser": "^5.11.0",
@@ -41,4 +43,4 @@
41
43
  "lint-fix": "eslint \"./src/**/*.ts\" --fix",
42
44
  "build-all": "npm --prefix ./../../js-api run build && npm run build"
43
45
  }
44
- }
46
+ }
@@ -0,0 +1,7 @@
1
+ export declare const DEFAULT_FLOAT_FORMAT = "#0.###";
2
+ export declare const G7_FLOAT_FORMAT = "G7";
3
+ /** Resolves the default float format used across compute inputs, outputs and exports.
4
+ * Gated on the runtime js-api version: `G7` on platforms >= 1.27.7, `#0.###` otherwise.
5
+ * Cached per session (the platform version does not change at runtime). */
6
+ export declare function getDefaultFloatFormat(): string;
7
+ //# sourceMappingURL=format-version-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-version-utils.d.ts","sourceRoot":"","sources":["format-version-utils.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAC7C,eAAO,MAAM,eAAe,OAAO,CAAC;AAMpC;;2EAE2E;AAC3E,wBAAgB,qBAAqB,IAAI,MAAM,CAO9C"}
@@ -0,0 +1,19 @@
1
+ import * as grok from 'datagrok-api/grok';
2
+ import * as semver from 'semver';
3
+ export const DEFAULT_FLOAT_FORMAT = '#0.###';
4
+ export const G7_FLOAT_FORMAT = 'G7';
5
+ // The platform's G7 number format is supported by js-api starting from 1.27.7.
6
+ const G7_MIN_API_VERSION = '1.27.7';
7
+ let defaultFloatFormat;
8
+ /** Resolves the default float format used across compute inputs, outputs and exports.
9
+ * Gated on the runtime js-api version: `G7` on platforms >= 1.27.7, `#0.###` otherwise.
10
+ * Cached per session (the platform version does not change at runtime). */
11
+ export function getDefaultFloatFormat() {
12
+ if (defaultFloatFormat === undefined) {
13
+ const apiVersion = semver.coerce(grok.shell.build.client.version);
14
+ defaultFloatFormat = apiVersion && semver.gte(apiVersion, G7_MIN_API_VERSION) ?
15
+ G7_FLOAT_FORMAT : DEFAULT_FLOAT_FORMAT;
16
+ }
17
+ return defaultFloatFormat;
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LXZlcnNpb24tdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmb3JtYXQtdmVyc2lvbi11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBRXBDLCtFQUErRTtBQUMvRSxNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQztBQUNwQyxJQUFJLGtCQUFzQyxDQUFDO0FBRTNDOzsyRUFFMkU7QUFDM0UsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxJQUFJLGtCQUFrQixLQUFLLFNBQVMsRUFBRTtRQUNwQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRSxrQkFBa0IsR0FBRyxVQUFVLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQzdFLGVBQWUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUM7S0FDMUM7SUFDRCxPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tICdzZW12ZXInO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9GTE9BVF9GT1JNQVQgPSAnIzAuIyMjJztcbmV4cG9ydCBjb25zdCBHN19GTE9BVF9GT1JNQVQgPSAnRzcnO1xuXG4vLyBUaGUgcGxhdGZvcm0ncyBHNyBudW1iZXIgZm9ybWF0IGlzIHN1cHBvcnRlZCBieSBqcy1hcGkgc3RhcnRpbmcgZnJvbSAxLjI3LjcuXG5jb25zdCBHN19NSU5fQVBJX1ZFUlNJT04gPSAnMS4yNy43JztcbmxldCBkZWZhdWx0RmxvYXRGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuLyoqIFJlc29sdmVzIHRoZSBkZWZhdWx0IGZsb2F0IGZvcm1hdCB1c2VkIGFjcm9zcyBjb21wdXRlIGlucHV0cywgb3V0cHV0cyBhbmQgZXhwb3J0cy5cbiAqIEdhdGVkIG9uIHRoZSBydW50aW1lIGpzLWFwaSB2ZXJzaW9uOiBgRzdgIG9uIHBsYXRmb3JtcyA+PSAxLjI3LjcsIGAjMC4jIyNgIG90aGVyd2lzZS5cbiAqIENhY2hlZCBwZXIgc2Vzc2lvbiAodGhlIHBsYXRmb3JtIHZlcnNpb24gZG9lcyBub3QgY2hhbmdlIGF0IHJ1bnRpbWUpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRGbG9hdEZvcm1hdCgpOiBzdHJpbmcge1xuICBpZiAoZGVmYXVsdEZsb2F0Rm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBhcGlWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShncm9rLnNoZWxsLmJ1aWxkLmNsaWVudC52ZXJzaW9uKTtcbiAgICBkZWZhdWx0RmxvYXRGb3JtYXQgPSBhcGlWZXJzaW9uICYmIHNlbXZlci5ndGUoYXBpVmVyc2lvbiwgRzdfTUlOX0FQSV9WRVJTSU9OKSA/XG4gICAgICBHN19GTE9BVF9GT1JNQVQgOiBERUZBVUxUX0ZMT0FUX0ZPUk1BVDtcbiAgfVxuICByZXR1cm4gZGVmYXVsdEZsb2F0Rm9ybWF0O1xufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import * as DG from 'datagrok-api/dg';
2
- import { Observable, Subject } from "rxjs";
2
+ import { Observable, Subject } from 'rxjs';
3
3
  export declare class SchemaEditor extends DG.Widget {
4
4
  get type(): string;
5
5
  table: PropertyTable<DG.IProperty>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema-editor.d.ts","sourceRoot":"","sources":["schema-editor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAQ,UAAU,EAAE,OAAO,EAAC,MAAM,MAAM,CAAC;AAOhD,qBAAa,YAAa,SAAQ,EAAE,CAAC,MAAM;IACzC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IACnC,YAAY,EAAE,MAAM,EAAE,CAAiF;IACvG,UAAU,EAAE,EAAE,CAAC,SAAS,EAAE,CAAM;IAChC,kBAAkB,EAAE,cAAc,CAAC;IACnC,eAAe,EAAE,MAAM,EAAE,CAAM;gBAG7B,OAAO,EAAE;QACP,UAAU,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;QAAC,kBAAkB,CAAC,EAAE,cAAc,CAAC;QAChE,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;KAClD;CAwCJ;AAED,MAAM,MAAM,0BAA0B,CAAC,CAAC,GAAG,GAAG,IAAI;IAChD,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,cAAc,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC,CAAA;CACpB,CAAA;AAED,qBAAa,aAAa,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,EAAE,CAAC,MAAM;IAiBhC,IAAI,EAAE,0BAA0B;IAhBnD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAEzB,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAiB;IACvC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAiB;IAC1C,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAiB;IACxC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAiB;IAE1C,uDAAuD;IACvD,IAAI,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,CAE7B;gBAEkB,IAAI,EAAE,0BAA0B;IAKnD,OAAO;CAgCR;AAGD,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,SAAS,SAAe;IAE/B,MAAM,CAAC,UAAU,EAAE;QAAC,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,CAAA;KAAC,CAEjE;IAED,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC;IAUtG,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC;CAG9E"}
1
+ {"version":3,"file":"schema-editor.d.ts","sourceRoot":"","sources":["schema-editor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAQ,UAAU,EAAE,OAAO,EAAC,MAAM,MAAM,CAAC;AAOhD,qBAAa,YAAa,SAAQ,EAAE,CAAC,MAAM;IACzC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IACnC,YAAY,EAAE,MAAM,EAAE,CAAiF;IACvG,UAAU,EAAE,EAAE,CAAC,SAAS,EAAE,CAAM;IAChC,kBAAkB,EAAE,cAAc,CAAC;IACnC,eAAe,EAAE,MAAM,EAAE,CAAM;gBAG7B,OAAO,EAAE;QACP,UAAU,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;QAAC,kBAAkB,CAAC,EAAE,cAAc,CAAC;QAChE,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;KAClD;CAwCJ;AAED,MAAM,MAAM,0BAA0B,CAAC,CAAC,GAAG,GAAG,IAAI;IAChD,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,cAAc,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC,CAAA;CACpB,CAAA;AAED,qBAAa,aAAa,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,EAAE,CAAC,MAAM;IAiBhC,IAAI,EAAE,0BAA0B;IAhBnD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAEzB,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAiB;IACvC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAiB;IAC1C,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAiB;IACxC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAiB;IAE1C,uDAAuD;IACvD,IAAI,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,CAE7B;gBAEkB,IAAI,EAAE,0BAA0B;IAKnD,OAAO;CAkCR;AAGD,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,SAAS,SAAe;IAE/B,MAAM,CAAC,UAAU,EAAE;QAAC,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,CAAA;KAAC,CAEhE;IAEF,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC;IAUtG,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC;CAG9E"}
@@ -1,7 +1,7 @@
1
1
  import * as DG from 'datagrok-api/dg';
2
2
  import * as ui from 'datagrok-api/ui';
3
- import { merge, Subject } from "rxjs";
4
- import { ValueMatcher } from "datagrok-api/dg";
3
+ import { merge, Subject } from 'rxjs';
4
+ import { ValueMatcher } from 'datagrok-api/dg';
5
5
  function isNumeric(type) {
6
6
  return type == DG.TYPE.INT || type == DG.TYPE.FLOAT || type == DG.TYPE.BIG_INT || type == DG.TYPE.QNUM;
7
7
  }
@@ -28,13 +28,13 @@ export class SchemaEditor extends DG.Widget {
28
28
  this.table.onSelected.subscribe((item) => {
29
29
  ui.empty(this.extraPropertiesDiv);
30
30
  const excludedKeys = ['type', 'name', 'defaultValue', 'valueValidators'];
31
- const propKeys = this.extraProperties.length > 0
32
- ? this.extraProperties
33
- : Object.keys(DG.Property.propertyOptions).filter(key => !excludedKeys.includes(key));
31
+ const propKeys = this.extraProperties.length > 0 ?
32
+ this.extraProperties :
33
+ Object.keys(DG.Property.propertyOptions).filter((key) => !excludedKeys.includes(key));
34
34
  const extraProperties = propKeys
35
- .map(k => DG.Property.propertyOptions[k])
36
- .filter(p => p.applicableTo == null || (p.applicableTo == DG.TYPE.NUMERICAL && (isNumeric(p.type))))
37
- .map(p => DG.Property.fromOptions(p));
35
+ .map((k) => DG.Property.propertyOptions[k])
36
+ .filter((p) => p.applicableTo == null || (p.applicableTo == DG.TYPE.NUMERICAL && (isNumeric(p.type))))
37
+ .map((p) => DG.Property.fromOptions(p));
38
38
  const form = ui.input.form(item, extraProperties);
39
39
  this.extraPropertiesDiv.appendChild(ui.divV([
40
40
  ui.h2(item.name),
@@ -74,19 +74,21 @@ export class PropertyTable extends DG.Widget {
74
74
  input.input.onclick = () => this.onSelected.next(item);
75
75
  return input.input;
76
76
  });
77
- if ((_a = this.data.allowAdd) !== null && _a !== void 0 ? _a : false)
77
+ if ((_a = this.data.allowAdd) !== null && _a !== void 0 ? _a : false) {
78
78
  elements.push(ui.iconFAB('plus', () => {
79
79
  const newItem = this.data.createNew ? this.data.createNew() : {};
80
80
  this.data.items.splice(this.data.items.indexOf(item) + 1, 0, newItem);
81
81
  this.refresh();
82
82
  this.onItemAdded.next(newItem);
83
83
  }, 'Add'));
84
- if ((_b = this.data.allowRemove) !== null && _b !== void 0 ? _b : false)
84
+ }
85
+ if ((_b = this.data.allowRemove) !== null && _b !== void 0 ? _b : false) {
85
86
  elements.push(ui.iconFAB('times', () => {
86
87
  this.data.items.splice(this.data.items.indexOf(item), 1);
87
88
  this.refresh();
88
89
  this.onItemRemoved.next(item);
89
90
  }, 'Remove'));
91
+ }
90
92
  return elements;
91
93
  };
92
94
  this.table = ui.table(this.data.items, createRow);
@@ -108,6 +110,6 @@ export class PropertyValidator {
108
110
  }
109
111
  PropertyValidator.NOT_EMPTY = 'not empty';
110
112
  PropertyValidator.validators = {
111
- NOT_EMPTY: (s) => s == null || s === '' ? "Can't be empty" : null
113
+ NOT_EMPTY: (s) => s == null || s === '' ? 'Can\'t be empty' : null
112
114
  };
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNjaGVtYS1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxLQUFLLEVBQWMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBWSxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxTQUFTLFNBQVMsQ0FBQyxJQUFZO0lBQzdCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pHLENBQUM7QUFFRCxNQUFNLE9BQU8sWUFBYSxTQUFRLEVBQUUsQ0FBQyxNQUFNO0lBQ3pDLElBQUksSUFBSTtRQUNOLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFRRCxZQUNFLE9BR0M7O1FBRUQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQVhwQixpQkFBWSxHQUFhLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RyxlQUFVLEdBQW1CLEVBQUUsQ0FBQztRQUVoQyxvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQVM3QixJQUFJLENBQUMsVUFBVSxHQUFH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QUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJO0NBQ3ZFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0IHttZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7SVByb3BlcnR5LCBWYWx1ZU1hdGNoZXJ9IGZyb20gXCJkYXRhZ3Jvay1hcGkvZGdcIjtcblxuZnVuY3Rpb24gaXNOdW1lcmljKHR5cGU6IHN0cmluZykge1xuICByZXR1cm4gdHlwZSA9PSBERy5UWVBFLklOVCB8fCB0eXBlID09IERHLlRZUEUuRkxPQVQgfHwgdHlwZSA9PSBERy5UWVBFLkJJR19JTlQgfHwgdHlwZSA9PSBERy5UWVBFLlFOVU07XG59XG5cbmV4cG9ydCBjbGFzcyBTY2hlbWFFZGl0b3IgZXh0ZW5kcyBERy5XaWRnZXQge1xuICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnU2NoZW1hRWRpdG9yJztcbiAgfVxuXG4gIHRhYmxlOiBQcm9wZXJ0eVRhYmxlPERHLklQcm9wZXJ0eT47XG4gIGFsbG93ZWRUeXBlczogc3RyaW5nW10gPSBbREcuVFlQRS5TVFJJTkcsIERHLlRZUEUuSU5ULCBERy5UWVBFLkZMT0FULCBERy5UWVBFLkJPT0wsIERHLlRZUEUuREFURV9USU1FXTtcbiAgcHJvcGVydGllczogREcuSVByb3BlcnR5W10gPSBbXTtcbiAgZXh0cmFQcm9wZXJ0aWVzRGl2OiBIVE1MRGl2RWxlbWVudDtcbiAgZXh0cmFQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHByb3BlcnRpZXM6IERHLklQcm9wZXJ0eVtdLCBleHRyYVByb3BlcnRpZXNEaXY/OiBIVE1MRGl2RWxlbWVudCxcbiAgICAgIGFsbG93UmVtb3ZlPzogYm9vbGVhbiwgZXh0cmFQcm9wZXJ0aWVzPzogc3RyaW5nW11cbiAgICB9XG4gICkge1xuICAgIHN1cGVyKHVpLmRpdihbXSkpO1xuICAgIHRoaXMucHJvcGVydGllcyA9IG9wdGlvbnMucHJvcGVydGllcztcbiAgICB0aGlzLmV4dHJhUHJvcGVydGllc0RpdiA9IG9wdGlvbnMuZXh0cmFQcm9wZXJ0aWVzRGl2ID8/IHVpLmRpdihbXSk7XG4gICAgdGhpcy5leHRyYVByb3BlcnRpZXMgPSBvcHRpb25zLmV4dHJhUHJvcGVydGllcyA/PyBbXTtcblxuICAgIGNvbnN0IHR5cGVQcm9wOiBJUHJvcGVydHkgPSB7XG4gICAgICAuLi5ERy5Qcm9wZXJ0eS5wcm9wZXJ0eU9wdGlvbnNbJ3R5cGUnXSxcbiAgICAgIGNob2ljZXM6IHRoaXMuYWxsb3dlZFR5cGVzXG4gICAgfTtcblxuICAgIHRoaXMudGFibGUgPSBuZXcgUHJvcGVydHlUYWJsZSh7XG4gICAgICBpdGVtczogb3B0aW9ucy5wcm9wZXJ0aWVzLFxuICAgICAgbWFpblByb3BlcnRpZXM6IFtERy5Qcm9wZXJ0eS5wcm9wZXJ0eU9wdGlvbnNbJ25hbWUnXSEsIHR5cGVQcm9wXSxcbiAgICAgIGFsbG93QWRkOiB0cnVlLFxuICAgICAgYWxsb3dSZW1vdmU6IG9wdGlvbnMuYWxsb3dSZW1vdmUgPz8gdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMudGFibGUub25TZWxlY3RlZC5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgIHVpLmVtcHR5KHRoaXMuZXh0cmFQcm9wZXJ0aWVzRGl2KTtcbiAgICAgIGNvbnN0IGV4Y2x1ZGVkS2V5cyA9IFsndHlwZScsICduYW1lJywgJ2RlZmF1bHRWYWx1ZScsICd2YWx1ZVZhbGlkYXRvcnMnXTtcbiAgICAgIGNvbnN0IHByb3BLZXlzID0gdGhpcy5leHRyYVByb3BlcnRpZXMubGVuZ3RoID4gMCBcbiAgICAgICAgPyB0aGlzLmV4dHJhUHJvcGVydGllc1xuICAgICAgICA6IE9iamVjdC5rZXlzKERHLlByb3BlcnR5LnByb3BlcnR5T3B0aW9ucykuZmlsdGVyKGtleSA9PiAhZXhjbHVkZWRLZXlzLmluY2x1ZGVzKGtleSkpO1xuXG4gICAgICBjb25zdCBleHRyYVByb3BlcnRpZXMgPSBwcm9wS2V5c1xuICAgICAgICAubWFwKGsgPT4gREcuUHJvcGVydHkucHJvcGVydHlPcHRpb25zW2sgYXMga2V5b2YgdHlwZW9mIERHLlByb3BlcnR5LnByb3BlcnR5T3B0aW9uc10hKVxuICAgICAgICAuZmlsdGVyKHAgPT4gcC5hcHBsaWNhYmxlVG8gPT0gbnVsbCB8fCAocC5hcHBsaWNhYmxlVG8gPT0gREcuVFlQRS5OVU1FUklDQUwgJiYgKGlzTnVtZXJpYyhwLnR5cGUhKSkpKVxuICAgICAgICAubWFwKHAgPT4gREcuUHJvcGVydHkuZnJvbU9wdGlvbnMocCkpO1xuICAgICAgY29uc3QgZm9ybSA9IHVpLmlucHV0LmZvcm0oaXRlbSwgZXh0cmFQcm9wZXJ0aWVzKTtcblxuICAgICAgdGhpcy5leHRyYVByb3BlcnRpZXNEaXYuYXBwZW5kQ2hpbGQodWkuZGl2VihbXG4gICAgICAgIHVpLmgyKGl0ZW0ubmFtZSEpLFxuICAgICAgICBmb3JtXG4gICAgICBdKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290KTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBUYWJsZUZyb21Qcm9wZXJ0aWVzT3B0aW9uczxUID0gYW55PiA9IHtcbiAgaXRlbXM6IFRbXSxcbiAgbWFpblByb3BlcnRpZXM6IERHLklQcm9wZXJ0eVtdLFxuICBleHRyYVByb3BlcnRpZXM/OiBERy5JUHJvcGVydHlbXSxcbiAgYWxsb3dBZGQ/OiBib29sZWFuLFxuICBhbGxvd1JlbW92ZT86IGJvb2xlYW4sXG4gIGNyZWF0ZU5ldz86ICgpID0+IFRcbn1cblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5VGFibGU8VCA9IGFueT4gZXh0ZW5kcyBERy5XaWRnZXQge1xuICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnUHJvcGVydHlUYWJsZSc7XG4gIH1cblxuICB0YWJsZT86IEhUTUxUYWJsZUVsZW1lbnQ7XG5cbiAgb25TZWxlY3RlZDogU3ViamVjdDxUPiA9IG5ldyBTdWJqZWN0KCk7XG4gIG9uSXRlbUNoYW5nZWQ6IFN1YmplY3Q8VD4gPSBuZXcgU3ViamVjdCgpO1xuICBvbkl0ZW1BZGRlZDogU3ViamVjdDxUPiA9IG5ldyBTdWJqZWN0KCk7XG4gIG9uSXRlbVJlbW92ZWQ6IFN1YmplY3Q8VD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8qKiBBbnkgY2hhbmdlIChJdGVtQ2hhbmdlZCwgSXRlbUFkZGVkLCBJdGVtUmVtb3ZlZCkgKi9cbiAgZ2V0IG9uQ2hhbmdlZCgpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gbWVyZ2UodGhpcy5vbkl0ZW1DaGFuZ2VkLCB0aGlzLm9uSXRlbUFkZGVkLCB0aGlzLm9uSXRlbVJlbW92ZWQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IFRhYmxlRnJvbVByb3BlcnRpZXNPcHRpb25zKSB7XG4gICAgc3VwZXIodWkuZGl2KFtdKSk7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIGNvbnN0IGNyZWF0ZVJvdyA9IChpdGVtOiBULCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5kYXRhLm1haW5Qcm9wZXJ0aWVzXG4gICAgICAgIC5tYXAoKHApID0+IHtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IERHLklucHV0QmFzZS5mb3JQcm9wZXJ0eShERy5Qcm9wZXJ0eS5mcm9tT3B0aW9ucyhwKSwgaXRlbSk7XG4gICAgICAgICAgZm9yIChjb25zdCB2IG9mIHAudmFsaWRhdG9ycyA/PyBbXSlcbiAgICAgICAgICAgIGlucHV0LmFkZFZhbGlkYXRvcigocykgPT4gVmFsdWVNYXRjaGVyLmZvclR5cGUocC50eXBlISwgdikudmFsaWRhdGUocykpO1xuICAgICAgICAgIGlucHV0Lm9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkl0ZW1DaGFuZ2VkLm5leHQoaXRlbSkpO1xuICAgICAgICAgIGlucHV0LmlucHV0Lm9uY2xpY2sgPSAoKSA9PiB0aGlzLm9uU2VsZWN0ZWQubmV4dChpdGVtKTtcbiAgICAgICAgICByZXR1cm4gaW5wdXQuaW5wdXQ7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5kYXRhLmFsbG93QWRkID8/IGZhbHNlKVxuICAgICAgICBlbGVtZW50cy5wdXNoKHVpLmljb25GQUIoJ3BsdXMnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHRoaXMuZGF0YS5jcmVhdGVOZXcgPyB0aGlzLmRhdGEuY3JlYXRlTmV3KCkgOiB7fTtcbiAgICAgICAgICB0aGlzLmRhdGEuaXRlbXMuc3BsaWNlKHRoaXMuZGF0YS5pdGVtcy5pbmRleE9mKGl0ZW0pICsgMSwgMCwgbmV3SXRlbSk7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgICAgdGhpcy5vbkl0ZW1BZGRlZC5uZXh0KG5ld0l0ZW0pO1xuICAgICAgICB9LCAnQWRkJykpO1xuICAgICAgaWYgKHRoaXMuZGF0YS5hbGxvd1JlbW92ZSA/PyBmYWxzZSlcbiAgICAgICAgZWxlbWVudHMucHVzaCh1aS5pY29uRkFCKCd0aW1lcycsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGEuaXRlbXMuc3BsaWNlKHRoaXMuZGF0YS5pdGVtcy5pbmRleE9mKGl0ZW0pLCAxKTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICB0aGlzLm9uSXRlbVJlbW92ZWQubmV4dChpdGVtKTtcbiAgICAgICAgfSwgJ1JlbW92ZScpKTtcbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9XG5cbiAgICB0aGlzLnRhYmxlID0gdWkudGFibGUodGhpcy5kYXRhLml0ZW1zLCBjcmVhdGVSb3cpO1xuICAgIHVpLmVtcHR5KHRoaXMucm9vdCk7XG4gICAgdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMudGFibGUpO1xuICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5VmFsaWRhdG9yIHtcbiAgc3RhdGljIE5PVF9FTVBUWSA9ICdub3QgZW1wdHknO1xuXG4gIHN0YXRpYyB2YWxpZGF0b3JzOiB7W25hbWU6IHN0cmluZ106ICh2YWx1ZTogYW55KSA9PiBzdHJpbmcgfCBudWxsfSA9IHtcbiAgICBOT1RfRU1QVFk6IChzOiBhbnkpID0+IHMgPT0gbnVsbCB8fCBzID09PSAnJyA/IFwiQ2FuJ3QgYmUgZW1wdHlcIiA6IG51bGxcbiAgfVxuXG4gIHN0YXRpYyBnZXRWYWxpZGF0b3Iob2JqOiBhbnksIHByb3A6IERHLklQcm9wZXJ0eSwgZXhwcmVzc2lvbjogc3RyaW5nKTogKCh2YWx1ZTogYW55KSA9PiBzdHJpbmcgfCBudWxsKSB7XG4gICAgaWYgKHRoaXMudmFsaWRhdG9yc1tleHByZXNzaW9uXSAhPT0gbnVsbClcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRvcnNbZXhwcmVzc2lvbl07XG5cbiAgICBpZiAoVmFsdWVNYXRjaGVyLnN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKHByb3AudHlwZSEpKVxuICAgICAgcmV0dXJuIFZhbHVlTWF0Y2hlci5mb3JUeXBlKHByb3AudHlwZSEsIGV4cHJlc3Npb24pLnZhbGlkYXRlO1xuXG4gICAgcmV0dXJuIChfKSA9PiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHJlZ2lzdGVyVmFsaWRhdG9yKG5hbWU6IHN0cmluZywgdmFsaWRhdG9yOiAoKHg6IGFueSkgPT4gc3RyaW5nIHwgbnVsbCkpIHtcbiAgICB0aGlzLnZhbGlkYXRvcnNbbmFtZV0gPSB2YWxpZGF0b3I7XG4gIH1cbn1cbiJdfQ==
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNjaGVtYS1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxLQUFLLEVBQWMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBWSxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxTQUFTLFNBQVMsQ0FBQyxJQUFZO0lBQzdCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pHLENBQUM7QUFFRCxNQUFNLE9BQU8sWUFBYSxTQUFRLEVBQUUsQ0FBQyxNQUFNO0lBQ3pDLElBQUksSUFBSTtRQUNOLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFRRCxZQUNFLE9BR0M7O1FBRUQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQVhwQixpQkFBWSxHQUFhLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RyxlQUFVLEdBQW1CLEVBQUUsQ0FBQztRQUVoQyxvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQVM3QixJQUFJLENBQUMsVUFBVSxHQUFH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QUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJO0NBQ3hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0IHttZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0lQcm9wZXJ0eSwgVmFsdWVNYXRjaGVyfSBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5mdW5jdGlvbiBpc051bWVyaWModHlwZTogc3RyaW5nKSB7XG4gIHJldHVybiB0eXBlID09IERHLlRZUEUuSU5UIHx8IHR5cGUgPT0gREcuVFlQRS5GTE9BVCB8fCB0eXBlID09IERHLlRZUEUuQklHX0lOVCB8fCB0eXBlID09IERHLlRZUEUuUU5VTTtcbn1cblxuZXhwb3J0IGNsYXNzIFNjaGVtYUVkaXRvciBleHRlbmRzIERHLldpZGdldCB7XG4gIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdTY2hlbWFFZGl0b3InO1xuICB9XG5cbiAgdGFibGU6IFByb3BlcnR5VGFibGU8REcuSVByb3BlcnR5PjtcbiAgYWxsb3dlZFR5cGVzOiBzdHJpbmdbXSA9IFtERy5UWVBFLlNUUklORywgREcuVFlQRS5JTlQsIERHLlRZUEUuRkxPQVQsIERHLlRZUEUuQk9PTCwgREcuVFlQRS5EQVRFX1RJTUVdO1xuICBwcm9wZXJ0aWVzOiBERy5JUHJvcGVydHlbXSA9IFtdO1xuICBleHRyYVByb3BlcnRpZXNEaXY6IEhUTUxEaXZFbGVtZW50O1xuICBleHRyYVByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9uczoge1xuICAgICAgcHJvcGVydGllczogREcuSVByb3BlcnR5W10sIGV4dHJhUHJvcGVydGllc0Rpdj86IEhUTUxEaXZFbGVtZW50LFxuICAgICAgYWxsb3dSZW1vdmU/OiBib29sZWFuLCBleHRyYVByb3BlcnRpZXM/OiBzdHJpbmdbXVxuICAgIH1cbiAgKSB7XG4gICAgc3VwZXIodWkuZGl2KFtdKSk7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gb3B0aW9ucy5wcm9wZXJ0aWVzO1xuICAgIHRoaXMuZXh0cmFQcm9wZXJ0aWVzRGl2ID0gb3B0aW9ucy5leHRyYVByb3BlcnRpZXNEaXYgPz8gdWkuZGl2KFtdKTtcbiAgICB0aGlzLmV4dHJhUHJvcGVydGllcyA9IG9wdGlvbnMuZXh0cmFQcm9wZXJ0aWVzID8/IFtdO1xuXG4gICAgY29uc3QgdHlwZVByb3A6IElQcm9wZXJ0eSA9IHtcbiAgICAgIC4uLkRHLlByb3BlcnR5LnByb3BlcnR5T3B0aW9uc1sndHlwZSddLFxuICAgICAgY2hvaWNlczogdGhpcy5hbGxvd2VkVHlwZXNcbiAgICB9O1xuXG4gICAgdGhpcy50YWJsZSA9IG5ldyBQcm9wZXJ0eVRhYmxlKHtcbiAgICAgIGl0ZW1zOiBvcHRpb25zLnByb3BlcnRpZXMsXG4gICAgICBtYWluUHJvcGVydGllczogW0RHLlByb3BlcnR5LnByb3BlcnR5T3B0aW9uc1snbmFtZSddISwgdHlwZVByb3BdLFxuICAgICAgYWxsb3dBZGQ6IHRydWUsXG4gICAgICBhbGxvd1JlbW92ZTogb3B0aW9ucy5hbGxvd1JlbW92ZSA/PyB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy50YWJsZS5vblNlbGVjdGVkLnN1YnNjcmliZSgoaXRlbSkgPT4ge1xuICAgICAgdWkuZW1wdHkodGhpcy5leHRyYVByb3BlcnRpZXNEaXYpO1xuICAgICAgY29uc3QgZXhjbHVkZWRLZXlzID0gWyd0eXBlJywgJ25hbWUnLCAnZGVmYXVsdFZhbHVlJywgJ3ZhbHVlVmFsaWRhdG9ycyddO1xuICAgICAgY29uc3QgcHJvcEtleXMgPSB0aGlzLmV4dHJhUHJvcGVydGllcy5sZW5ndGggPiAwID9cbiAgICAgICAgdGhpcy5leHRyYVByb3BlcnRpZXMgOlxuICAgICAgICBPYmplY3Qua2V5cyhERy5Qcm9wZXJ0eS5wcm9wZXJ0eU9wdGlvbnMpLmZpbHRlcigoa2V5KSA9PiAhZXhjbHVkZWRLZXlzLmluY2x1ZGVzKGtleSkpO1xuXG4gICAgICBjb25zdCBleHRyYVByb3BlcnRpZXMgPSBwcm9wS2V5c1xuICAgICAgICAubWFwKChrKSA9PiBERy5Qcm9wZXJ0eS5wcm9wZXJ0eU9wdGlvbnNbayBhcyBrZXlvZiB0eXBlb2YgREcuUHJvcGVydHkucHJvcGVydHlPcHRpb25zXSEpXG4gICAgICAgIC5maWx0ZXIoKHApID0+IHAuYXBwbGljYWJsZVRvID09IG51bGwgfHwgKHAuYXBwbGljYWJsZVRvID09IERHLlRZUEUuTlVNRVJJQ0FMICYmIChpc051bWVyaWMocC50eXBlISkpKSlcbiAgICAgICAgLm1hcCgocCkgPT4gREcuUHJvcGVydHkuZnJvbU9wdGlvbnMocCkpO1xuICAgICAgY29uc3QgZm9ybSA9IHVpLmlucHV0LmZvcm0oaXRlbSwgZXh0cmFQcm9wZXJ0aWVzKTtcblxuICAgICAgdGhpcy5leHRyYVByb3BlcnRpZXNEaXYuYXBwZW5kQ2hpbGQodWkuZGl2VihbXG4gICAgICAgIHVpLmgyKGl0ZW0ubmFtZSEpLFxuICAgICAgICBmb3JtXG4gICAgICBdKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290KTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBUYWJsZUZyb21Qcm9wZXJ0aWVzT3B0aW9uczxUID0gYW55PiA9IHtcbiAgaXRlbXM6IFRbXSxcbiAgbWFpblByb3BlcnRpZXM6IERHLklQcm9wZXJ0eVtdLFxuICBleHRyYVByb3BlcnRpZXM/OiBERy5JUHJvcGVydHlbXSxcbiAgYWxsb3dBZGQ/OiBib29sZWFuLFxuICBhbGxvd1JlbW92ZT86IGJvb2xlYW4sXG4gIGNyZWF0ZU5ldz86ICgpID0+IFRcbn1cblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5VGFibGU8VCA9IGFueT4gZXh0ZW5kcyBERy5XaWRnZXQge1xuICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnUHJvcGVydHlUYWJsZSc7XG4gIH1cblxuICB0YWJsZT86IEhUTUxUYWJsZUVsZW1lbnQ7XG5cbiAgb25TZWxlY3RlZDogU3ViamVjdDxUPiA9IG5ldyBTdWJqZWN0KCk7XG4gIG9uSXRlbUNoYW5nZWQ6IFN1YmplY3Q8VD4gPSBuZXcgU3ViamVjdCgpO1xuICBvbkl0ZW1BZGRlZDogU3ViamVjdDxUPiA9IG5ldyBTdWJqZWN0KCk7XG4gIG9uSXRlbVJlbW92ZWQ6IFN1YmplY3Q8VD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8qKiBBbnkgY2hhbmdlIChJdGVtQ2hhbmdlZCwgSXRlbUFkZGVkLCBJdGVtUmVtb3ZlZCkgKi9cbiAgZ2V0IG9uQ2hhbmdlZCgpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gbWVyZ2UodGhpcy5vbkl0ZW1DaGFuZ2VkLCB0aGlzLm9uSXRlbUFkZGVkLCB0aGlzLm9uSXRlbVJlbW92ZWQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IFRhYmxlRnJvbVByb3BlcnRpZXNPcHRpb25zKSB7XG4gICAgc3VwZXIodWkuZGl2KFtdKSk7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIGNvbnN0IGNyZWF0ZVJvdyA9IChpdGVtOiBULCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5kYXRhLm1haW5Qcm9wZXJ0aWVzXG4gICAgICAgIC5tYXAoKHApID0+IHtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IERHLklucHV0QmFzZS5mb3JQcm9wZXJ0eShERy5Qcm9wZXJ0eS5mcm9tT3B0aW9ucyhwKSwgaXRlbSk7XG4gICAgICAgICAgZm9yIChjb25zdCB2IG9mIHAudmFsaWRhdG9ycyA/PyBbXSlcbiAgICAgICAgICAgIGlucHV0LmFkZFZhbGlkYXRvcigocykgPT4gVmFsdWVNYXRjaGVyLmZvclR5cGUocC50eXBlISwgdikudmFsaWRhdGUocykpO1xuICAgICAgICAgIGlucHV0Lm9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkl0ZW1DaGFuZ2VkLm5leHQoaXRlbSkpO1xuICAgICAgICAgIGlucHV0LmlucHV0Lm9uY2xpY2sgPSAoKSA9PiB0aGlzLm9uU2VsZWN0ZWQubmV4dChpdGVtKTtcbiAgICAgICAgICByZXR1cm4gaW5wdXQuaW5wdXQ7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5kYXRhLmFsbG93QWRkID8/IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2godWkuaWNvbkZBQigncGx1cycsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdJdGVtID0gdGhpcy5kYXRhLmNyZWF0ZU5ldyA/IHRoaXMuZGF0YS5jcmVhdGVOZXcoKSA6IHt9O1xuICAgICAgICAgIHRoaXMuZGF0YS5pdGVtcy5zcGxpY2UodGhpcy5kYXRhLml0ZW1zLmluZGV4T2YoaXRlbSkgKyAxLCAwLCBuZXdJdGVtKTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICB0aGlzLm9uSXRlbUFkZGVkLm5leHQobmV3SXRlbSk7XG4gICAgICAgIH0sICdBZGQnKSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhLmFsbG93UmVtb3ZlID8/IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2godWkuaWNvbkZBQigndGltZXMnLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhLml0ZW1zLnNwbGljZSh0aGlzLmRhdGEuaXRlbXMuaW5kZXhPZihpdGVtKSwgMSk7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgICAgdGhpcy5vbkl0ZW1SZW1vdmVkLm5leHQoaXRlbSk7XG4gICAgICAgIH0sICdSZW1vdmUnKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgfTtcblxuICAgIHRoaXMudGFibGUgPSB1aS50YWJsZSh0aGlzLmRhdGEuaXRlbXMsIGNyZWF0ZVJvdyk7XG4gICAgdWkuZW1wdHkodGhpcy5yb290KTtcbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy50YWJsZSk7XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgUHJvcGVydHlWYWxpZGF0b3Ige1xuICBzdGF0aWMgTk9UX0VNUFRZID0gJ25vdCBlbXB0eSc7XG5cbiAgc3RhdGljIHZhbGlkYXRvcnM6IHtbbmFtZTogc3RyaW5nXTogKHZhbHVlOiBhbnkpID0+IHN0cmluZyB8IG51bGx9ID0ge1xuICAgIE5PVF9FTVBUWTogKHM6IGFueSkgPT4gcyA9PSBudWxsIHx8IHMgPT09ICcnID8gJ0NhblxcJ3QgYmUgZW1wdHknIDogbnVsbFxuICB9O1xuXG4gIHN0YXRpYyBnZXRWYWxpZGF0b3Iob2JqOiBhbnksIHByb3A6IERHLklQcm9wZXJ0eSwgZXhwcmVzc2lvbjogc3RyaW5nKTogKCh2YWx1ZTogYW55KSA9PiBzdHJpbmcgfCBudWxsKSB7XG4gICAgaWYgKHRoaXMudmFsaWRhdG9yc1tleHByZXNzaW9uXSAhPT0gbnVsbClcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRvcnNbZXhwcmVzc2lvbl07XG5cbiAgICBpZiAoVmFsdWVNYXRjaGVyLnN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKHByb3AudHlwZSEpKVxuICAgICAgcmV0dXJuIFZhbHVlTWF0Y2hlci5mb3JUeXBlKHByb3AudHlwZSEsIGV4cHJlc3Npb24pLnZhbGlkYXRlO1xuXG4gICAgcmV0dXJuIChfKSA9PiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHJlZ2lzdGVyVmFsaWRhdG9yKG5hbWU6IHN0cmluZywgdmFsaWRhdG9yOiAoKHg6IGFueSkgPT4gc3RyaW5nIHwgbnVsbCkpIHtcbiAgICB0aGlzLnZhbGlkYXRvcnNbbmFtZV0gPSB2YWxpZGF0b3I7XG4gIH1cbn1cbiJdfQ==
@@ -5,6 +5,7 @@ export declare class FormsViewer extends DG.JsViewer {
5
5
  get type(): string;
6
6
  rendererSize: 'small' | 'normal' | 'large';
7
7
  font: string;
8
+ numberFormat: string;
8
9
  fieldsColumnNames: string[];
9
10
  colorCode: boolean;
10
11
  showCurrentRow: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"forms-viewer.d.ts","sourceRoot":"","sources":["forms-viewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EAAa,OAAO,EAAC,MAAM,MAAM,CAAC;AAGzC,OAAO,qBAAqB,CAAC;AAK7B,qBAAa,WAAY,SAAQ,EAAE,CAAC,QAAQ;IAC1C,IAAI,IAAI,IAAI,MAAM,CAA0B;IAE5C,YAAY,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,UAAS;IACtB,WAAW,UAAQ;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IAEvB,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC/B,gBAAgB,EAAE,cAAc,CAAC;IACjC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,mBAAmB,iBAAuF;IAC1G,qBAAqB,iBAA0F;IAC/G,YAAY,EAAE,WAAW,CAAC;IAC1B,aAAa,EAAE,WAAW,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAiB;IAE9C,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,EAG7B;IAED,IAAI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAOjC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAG7B;IAED,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,KAAK;IAelE,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK;;IA0E7B,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM;IAOpC,cAAc,CAAC,EAAE,EAAC,WAAW;IAI7B,eAAe;IAoCf,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE;IAIxC,uBAAuB;IAavB,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI;IAO9C,YAAY;IAoDZ,IAAI,aAAa,aAA6C;IAC9D,IAAI,YAAY,iBAA2E;IAE3F,OAAO;IAWP,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAoIxC,gBAAgB,IAAI,MAAM,EAAE;IAU5B,cAAc,IAAI,OAAO,EAAE;IAU3B,MAAM;CAwBP"}
1
+ {"version":3,"file":"forms-viewer.d.ts","sourceRoot":"","sources":["forms-viewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EAAa,OAAO,EAAC,MAAM,MAAM,CAAC;AAGzC,OAAO,qBAAqB,CAAC;AAe7B,qBAAa,WAAY,SAAQ,EAAE,CAAC,QAAQ;IAC1C,IAAI,IAAI,IAAI,MAAM,CAA0B;IAE5C,YAAY,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,UAAS;IACtB,WAAW,UAAQ;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IAEvB,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC/B,gBAAgB,EAAE,cAAc,CAAC;IACjC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,mBAAmB,iBAAuF;IAC1G,qBAAqB,iBAA0F;IAC/G,YAAY,EAAE,WAAW,CAAC;IAC1B,aAAa,EAAE,WAAW,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAiB;IAE9C,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,EAG7B;IAED,IAAI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAOjC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAG7B;IAED,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,KAAK;IAelE,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK;;IA2E7B,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM;IAOpC,cAAc,CAAC,EAAE,EAAC,WAAW;IAI7B,eAAe;IA6Cf,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE;IAKxC,uBAAuB;IAavB,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI;IAO9C,YAAY;IAmDZ,IAAI,aAAa,aAA6C;IAC9D,IAAI,YAAY,iBAA2E;IAE3F,OAAO;IAWP,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAkIxC,gBAAgB,IAAI,MAAM,EAAE;IAU5B,cAAc,IAAI,OAAO,EAAE;IAU3B,MAAM;CAwBP"}
@@ -7,6 +7,14 @@ import { filter } from 'rxjs/operators';
7
7
  import '../../css/forms.css';
8
8
  const COLS_LIMIT_EXCEEDED_WARNING = `Number of columns is more than 20. First 20 columns are shown`;
9
9
  const BOOLEAN_INPUT_TOP_MARGIN = 15;
10
+ const SAME_AS_GRID = 'Same as grid';
11
+ const numberFormats = {
12
+ '3 significant digits': '3 significant digits',
13
+ 'Scientific': 'scientific',
14
+ '2 digits after comma': '0.00',
15
+ '4 significant digits': '4 significant digits',
16
+ '3 digits after comma': '0.000',
17
+ };
10
18
  export class FormsViewer extends DG.JsViewer {
11
19
  get type() { return 'FormsViewer'; }
12
20
  set dataframe(df) {
@@ -26,8 +34,8 @@ export class FormsViewer extends DG.JsViewer {
26
34
  this.render();
27
35
  }
28
36
  getRendererSize(renderer) {
29
- let width = renderer.defaultWidth;
30
- let height = renderer.defaultHeight;
37
+ const width = renderer.defaultWidth;
38
+ const height = renderer.defaultHeight;
31
39
  if (!width || !height)
32
40
  return this.getSize();
33
41
  switch (this.rendererSize) {
@@ -65,6 +73,7 @@ export class FormsViewer extends DG.JsViewer {
65
73
  this.sortAscending = false;
66
74
  this.rendererSize = this.string('rendererSize', 'small', { choices: ['small', 'normal', 'large'], description: 'Sets the display size of rendered content' });
67
75
  this.font = this.string('font', 'normal normal 13px "Roboto"', { editor: 'font', description: 'Font for labels and values' });
76
+ this.numberFormat = this.string('numberFormat', SAME_AS_GRID, { choices: [SAME_AS_GRID, ...Object.keys(numberFormats)], description: 'Number format applied to numeric fields' });
68
77
  //fields
69
78
  this.indexes = [];
70
79
  // init
@@ -127,21 +136,30 @@ export class FormsViewer extends DG.JsViewer {
127
136
  sub(this.dataFrame.onMetadataChanged, () => this.render());
128
137
  setTimeout(() => {
129
138
  const grid = this.getGrid();
130
- if (grid)
139
+ if (grid) {
131
140
  sub(grid.onRowsSorted, () => {
132
141
  setTimeout(() => this.render());
133
142
  });
143
+ }
134
144
  });
135
145
  sub(this.dataFrame.onColumnsRemoved, () => {
136
146
  this.updateFieldsColumnNames();
137
147
  this.render();
138
148
  });
149
+ sub(this.dataFrame.onColumnNameChanged, () => {
150
+ const filtered = this.fieldsColumnNames.filter((n) => !n.startsWith('~'));
151
+ if (filtered.length !== this.fieldsColumnNames.length) {
152
+ this.fieldsColumnNames = filtered;
153
+ this.render();
154
+ }
155
+ });
139
156
  sub(this.dataFrame.onCurrentRowChanged.pipe(filter((_) => this.showCurrentRow)), () => this.virtualView.refreshItem(this.currentRowPos));
140
157
  sub(this.dataFrame.onMouseOverRowChanged.pipe(filter((_) => this.showMouseOverRow)), () => this.virtualView.refreshItem(this.mouseOverPos));
141
158
  this.render();
142
159
  }
143
160
  setFieldsColumnNames(dfColumns) {
144
- this.fieldsColumnNames = dfColumns.length > 20 ? dfColumns.slice(0, 20) : dfColumns;
161
+ const visible = dfColumns.filter((n) => !n.startsWith('~'));
162
+ this.fieldsColumnNames = visible.length > 20 ? visible.slice(0, 20) : visible;
145
163
  }
146
164
  updateFieldsColumnNames() {
147
165
  const newColumns = this.dataFrame.columns.names();
@@ -266,6 +284,9 @@ export class FormsViewer extends DG.JsViewer {
266
284
  input.input.classList.add(`d4-multi-form-molecule-input-${this.rendererSize}`);
267
285
  input.input.setAttribute('column', name);
268
286
  input.input.style.font = this.font;
287
+ const fmt = numberFormats[this.numberFormat];
288
+ if (fmt && col.type === DG.TYPE.FLOAT)
289
+ input.format = fmt;
269
290
  input.value = ((_b = this.dataFrame.col(name)) === null || _b === void 0 ? void 0 : _b.isNone(row)) ? null : this.dataFrame.get(name, row);
270
291
  input.readOnly = true;
271
292
  if (this.colorCode) {
@@ -286,7 +307,7 @@ export class FormsViewer extends DG.JsViewer {
286
307
  if ((_e = gc === null || gc === void 0 ? void 0 : gc.contentCellStyle) === null || _e === void 0 ? void 0 : _e.backColor)
287
308
  input.input.style.backgroundColor = DG.Color.toHtml(gc.contentCellStyle.backColor);
288
309
  }
289
- if (((_f = gc === null || gc === void 0 ? void 0 : gc.contentCellStyle) === null || _f === void 0 ? void 0 : _f.horzAlign) == "center" || ((_g = gc === null || gc === void 0 ? void 0 : gc.contentCellStyle) === null || _g === void 0 ? void 0 : _g.horzAlign) == "right")
310
+ if (((_f = gc === null || gc === void 0 ? void 0 : gc.contentCellStyle) === null || _f === void 0 ? void 0 : _f.horzAlign) == 'center' || ((_g = gc === null || gc === void 0 ? void 0 : gc.contentCellStyle) === null || _g === void 0 ? void 0 : _g.horzAlign) == 'right')
290
311
  input.input.style.textAlign = gc.contentCellStyle.horzAlign;
291
312
  if ((_h = gc.contentCellStyle) === null || _h === void 0 ? void 0 : _h.font)
292
313
  input.input.style.font = gc.contentCellStyle.font;
@@ -376,4 +397,4 @@ export class FormsViewer extends DG.JsViewer {
376
397
  this.virtualView.setData(this.indexes.length + (this.showCurrentRow ? 1 : 0) + (this.showMouseOverRow ? 1 : 0), (i) => this.renderForm(i));
377
398
  }
378
399
  }
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMtdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybXMtdmlld2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLGFBQWE7QUFDYixPQUFPLHFCQUFxQixDQUFDO0FBRTdCLE1BQU0sMkJBQTJCLEdBQUcsK0RBQStELENBQUM7QUFDcEcsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFFcEMsTUFBTSxPQUFPLFdBQVksU0FBUSxFQUFFLENBQUMsUUFBUTtJQUMxQyxJQUFJLElBQUksS0FBYSxPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUF3QjVDLElBQUksU0FBUyxDQUFDLEVBQWdCO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsSUFBYztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFrQjtRQUM1QixJQUFJLENBQUMsaUJBQWlCLEdB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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNyRixDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCAnLi4vLi4vY3NzL2Zvcm1zLmNzcyc7XG5cbmNvbnN0IENPTFNfTElNSVRfRVhDRUVERURfV0FSTklORyA9IGBOdW1iZXIgb2YgY29sdW1ucyBpcyBtb3JlIHRoYW4gMjAuIEZpcnN0IDIwIGNvbHVtbnMgYXJlIHNob3duYDtcbmNvbnN0IEJPT0xFQU5fSU5QVVRfVE9QX01BUkdJTiA9IDE1O1xuXG5leHBvcnQgY2xhc3MgRm9ybXNWaWV3ZXIgZXh0ZW5kcyBERy5Kc1ZpZXdlciB7XG4gIGdldCB0eXBlKCk6IHN0cmluZyB7IHJldHVybiAnRm9ybXNWaWV3ZXInOyB9XG5cbiAgcmVuZGVyZXJTaXplOiAnc21hbGwnIHwgJ25vcm1hbCcgfCAnbGFyZ2UnO1xuICBmb250OiBzdHJpbmc7XG4gIGZpZWxkc0NvbHVtbk5hbWVzOiBzdHJpbmdbXTtcbiAgY29sb3JDb2RlOiBib29sZWFuO1xuICBzaG93Q3VycmVudFJvdzogYm9vbGVhbjtcbiAgc2hvd01vdXNlT3ZlclJvdzogYm9vbGVhbjtcbiAgc2hvd1NlbGVjdGVkUm93czogYm9vbGVhbjtcbiAgc2hvd0ZpeGVkUm93cyA9IGZhbHNlO1xuICB1c2VHcmlkU29ydCA9IHRydWU7XG4gIHNvcnRCeUNvbHVtbk5hbWU/OiBzdHJpbmc7XG4gIHNvcnRBc2NlbmRpbmc6IGJvb2xlYW47XG5cbiAgaW5kZXhlczogbnVtYmVyW10gfCBJbnQzMkFycmF5O1xuICBjb2x1bW5IZWFkZXJzRGl2OiBIVE1MRGl2RWxlbWVudDtcbiAgdmlydHVhbFZpZXc6IERHLlZpcnR1YWxWaWV3O1xuICBjb2x1bW5MYWJlbFdpZHRoOiBudW1iZXIgPSAwO1xuICBjdXJyZW50Um93SW5kaWNhdG9yID0gdWkuZGl2KCcnLCAnZDQtbXVsdGktZm9ybS1mb3JtLWluZGljYXRvciBkNC1tdWx0aS1mb3JtLWZvcm0taW5kaWNhdG9yLWN1cnJlbnQtcm93Jyk7XG4gIG1vdXNlT3ZlclJvd0luZGljYXRvciA9IHVpLmRpdignJywgJ2Q0LW11bHRpLWZvcm0tZm9ybS1pbmRpY2F0b3IgZDQtbXVsdGktZm9ybS1mb3JtLWluZGljYXRvci1tb3VzZS1vdmVyLXJvdycpO1xuICBzcGxpdENvbExlZnQ6IEhUTUxFbGVtZW50O1xuICBzcGxpdENvbFJpZ2h0OiBIVE1MRWxlbWVudDtcbiAgaW5wdXRDbGlja2VkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHNldCBkYXRhZnJhbWUoZGY6IERHLkRhdGFGcmFtZSkge1xuICAgIHRoaXMuZGF0YUZyYW1lID0gZGY7XG4gICAgdGhpcy5vblRhYmxlQXR0YWNoZWQoKTtcbiAgfVxuXG4gIHNldCBmaXhlZFJvd051bWJlcnMoaWR4czogbnVtYmVyW10pIHtcbiAgICB0aGlzLmluZGV4ZXMgPSBpZHhzO1xuICAgIHRoaXMuc2hvd0N1cnJlbnRSb3cgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dNb3VzZU92ZXJSb3cgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dTZWxlY3RlZFJvd3MgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dGaXhlZFJvd3MgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgY29sdW1ucyhjb2xOYW1lczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzID0gY29sTmFtZXM7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlclNpemUocmVuZGVyZXI6IERHLkdyaWRDZWxsUmVuZGVyZXIpOiBERy5Qb2ludCB7XG4gICAgbGV0IHdpZHRoID0gcmVuZGVyZXIuZGVmYXVsdFdpZHRoO1xuICAgIGxldCBoZWlnaHQgPSByZW5kZXJlci5kZWZhdWx0SGVpZ2h0O1xuXG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2l6ZSgpO1xuXG4gICAgc3dpdGNoICh0aGlzLnJlbmRlcmVyU2l6ZSkge1xuICAgICAgY2FzZSAnbm9ybWFsJzogcmV0dXJuIG5ldyBERy5Qb2ludCh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNhc2UgJ2xhcmdlJzogcmV0dXJuIG5ldyBERy5Qb2ludChNYXRoLmZsb29yKHdpZHRoICogMS41KSwgTWF0aC5mbG9vcihoZWlnaHQgKiAxLjUpKTtcbiAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBuZXcgREcuUG9pbnQoTWF0aC5mbG9vcih3aWR0aCAqIDAuNjYpLCBNYXRoLmZsb29yKGhlaWdodCAqIDAuNjYpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2l6ZSgpOiBERy5Qb2ludCB7XG4gICAgc3dpdGNoICh0aGlzLnJlbmRlcmVyU2l6ZSkge1xuICAgICAgY2FzZSAnbm9ybWFsJzogcmV0dXJuIG5ldyBERy5Qb2ludCgyMDAsIDEwMCk7XG4gICAgICBjYXNlICdsYXJnZSc6IHJldHVybiBuZXcgREcuUG9pbnQoMzAwLCAxNTApO1xuICAgICAgY2FzZSAnc21hbGwnOlxuICAgICAgZGVmYXVsdDogcmV0dXJuIG5ldyBERy5Qb2ludCgxMjAsIDYwKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5oZWxwVXJsID0gJ2h0dHBzOi8vZGF0YWdyb2suYWkvaGVscC92aXN1YWxpemUvdmlld2Vycy9mb3Jtcyc7XG5cbiAgICAvLyBwcm9wZXJ0aWVzXG4gICAgdGhpcy5maWVsZHNDb2x1bW5OYW1lcyA9IHRoaXMuYWRkUHJvcGVydHkoJ2ZpZWxkc0NvbHVtbk5hbWVzJywgREcuVFlQRS5DT0xVTU5fTElTVCk7XG4gICAgdGhpcy5jb2xvckNvZGUgPSB0aGlzLmJvb2woJ2NvbG9yQ29kZScsIHRydWUpO1xuICAgIHRoaXMuc2hvd0N1cnJlbnRSb3cgPSB0aGlzLmJvb2woJ3Nob3dDdXJyZW50Um93JywgdHJ1ZSk7XG4gICAgdGhpcy5zaG93TW91c2VPdmVyUm93ID0gdGhpcy5ib29sKCdzaG93TW91c2VPdmVyUm93JywgdHJ1ZSk7XG4gICAgdGhpcy5zaG93U2VsZWN0ZWRSb3dzID0gdGhpcy5ib29sKCdzaG93U2VsZWN0ZWRSb3dzJywgdHJ1ZSk7XG4gICAgdGhpcy51c2VHcmlkU29ydCA9IHRoaXMuYm9vbCgndXNlR3JpZFNvcnQnLCB0cnVlLCB7ZGVzY3JpcHRpb246ICdTb3J0IHZhbHVlcyB0aGUgc2FtZSB3YXkgYXMgaW4gdGhlIHNwcmVhZHNoZWV0J30pO1xuICAgIHRoaXMuc29ydEJ5Q29sdW1uTmFtZSA9IHRoaXMuY29sdW1uKCdzb3J0QnknKTtcbiAgICB0aGlzLnNvcnRBc2NlbmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlcmVyU2l6ZSA9IHRoaXMuc3RyaW5nKCdyZW5kZXJlclNpemUnLCAnc21hbGwnLCB7Y2hvaWNlczogWydzbWFsbCcsICdub3JtYWwnLCAnbGFyZ2UnXSwgZGVzY3JpcHRpb246ICdTZXRzIHRoZSBkaXNwbGF5IHNpemUgb2YgcmVuZGVyZWQgY29udGVudCd9KSBhcyAnc21hbGwnIHwgJ25vcm1hbCcgfCAnbGFyZ2UnO1xuICAgIHRoaXMuZm9udCA9IHRoaXMuc3RyaW5nKCdmb250JywgJ25vcm1hbCBub3JtYWwgMTNweCBcIlJvYm90b1wiJywge2VkaXRvcjogJ2ZvbnQnLCBkZXNjcmlwdGlvbjogJ0ZvbnQgZm9yIGxhYmVscyBhbmQgdmFsdWVzJ30pO1xuXG4gICAgLy9maWVsZHNcbiAgICB0aGlzLmluZGV4ZXMgPSBbXTtcblxuICAgIC8vIGluaXRcbiAgICB0aGlzLnJvb3QuY2xhc3NMaXN0LmFkZCgnZDQtbXVsdGktZm9ybScpO1xuICAgIHRoaXMuY29sdW1uSGVhZGVyc0RpdiA9IHVpLmRpdihbXSwgJ2Q0LW11bHRpLWZvcm0taGVhZGVyJyk7XG4gICAgdGhpcy52aXJ0dWFsVmlldyA9IHVpLnZpcnR1YWxWaWV3KDAsIChpOiBudW1iZXIpID0+IHRoaXMucmVuZGVyRm9ybShpKSwgZmFsc2UsIDEpO1xuICAgIGNvbnN0IGNvbHVtbkhlYWRlcnNCb3ggPSB1aS5kaXYodGhpcy5jb2x1bW5IZWFkZXJzRGl2KTtcbiAgICBjb25zdCBmb3JtV2l0aEhlYWRlckRpdiA9IHVpLnNwbGl0SChbY29sdW1uSGVhZGVyc0JveCwgdGhpcy52aXJ0dWFsVmlldy5yb290XSwgbnVsbCwgdHJ1ZSk7XG4gICAgdGhpcy5yb290LmFwcGVuZENoaWxkKGZvcm1XaXRoSGVhZGVyRGl2KTtcblxuICAgIHRoaXMuc3BsaXRDb2xMZWZ0ID0gZm9ybVdpdGhIZWFkZXJEaXYuZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5zcGxpdENvbFJpZ2h0ID0gZm9ybVdpdGhIZWFkZXJEaXYubGFzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcblxuICAgIHVpLnRvb2x0aXAuYmluZCh0aGlzLmN1cnJlbnRSb3dJbmRpY2F0b3IsICdDdXJyZW50IHJvdycpO1xuICAgIHVpLnRvb2x0aXAuYmluZCh0aGlzLm1vdXNlT3ZlclJvd0luZGljYXRvciwgJ01vdXNlIG92ZXIgcm93Jyk7XG5cbiAgICB1aS50b29scy53YWl0Rm9yRWxlbWVudEluRG9tKHRoaXMucm9vdCkudGhlbigoXykgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5IZWFkZXJzRGl2LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdycsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29sdW1uSGVhZGVyc0Rpdi5zdHlsZSwge1xuICAgICAgICAvLyBvdmVmbG93OidoaWRkZW4gIWltcG9ydGFudCcsXG4gICAgICAgIG1pbldpZHRoOiAnMTUwcHgnLFxuICAgICAgICBmbGV4U2hyaW5rOiAnMCdcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNwbGl0Q29sTGVmdC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cnLCAnaGlkZGVuJywgJ2ltcG9ydGFudCcpO1xuICAgICAgY29sdW1uSGVhZGVyc0JveC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cnLCAnc2Nyb2xsJywgJ2ltcG9ydGFudCcpO1xuICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5IZWFkZXJzQm94LnN0eWxlLCB7XG4gICAgICAgIGJveFNpemluZzogJ2NvbnRlbnQtYm94JyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgcGFkZGluZ1JpZ2h0OiAnMTdweCd9KTtcblxuICAgICAgY29sdW1uSGVhZGVyc0JveC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy52aXJ0dWFsVmlldy5yb290LnNjcm9sbFRvcCA9IGNvbHVtbkhlYWRlcnNCb3guc2Nyb2xsVG9wO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudmlydHVhbFZpZXcucm9vdC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29sdW1uSGVhZGVyc0JveC5zY3JvbGxUb3AgPSB0aGlzLnZpcnR1YWxWaWV3LnJvb3Quc2Nyb2xsVG9wO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB1aS50b29scy53YWl0Rm9yRWxlbWVudEluRG9tKHRoaXMudmlydHVhbFZpZXcucm9vdCkudGhlbigoXykgPT4ge1xuICAgICAgdGhpcy5maXRIZWFkZXJUb0xhYmVsV2lkdGgoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpdEhlYWRlclRvTGFiZWxXaWR0aCh3aWR0aD86IG51bWJlcikge1xuICAgIGNvbnN0IHcgPSB3aWR0aCA/PyB0aGlzLmNvbHVtbkxhYmVsV2lkdGg7XG4gICAgY29uc3Qgcm9vdFdpZHRoID0gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIHRoaXMuc3BsaXRDb2xMZWZ0LnN0eWxlLndpZHRoID0gYCR7dyArIDMwfXB4YDtcbiAgICB0aGlzLnNwbGl0Q29sUmlnaHQuc3R5bGUud2lkdGggPSBgJHtyb290V2lkdGggLSB3IC0gMzAgLSA0fXB4YDtcbiAgfVxuXG4gIGdldENvbHVtbldpZHRoKGVsOkhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KGVsLnN0eWxlLndpZHRoKTtcbiAgfVxuXG4gIG9uVGFibGVBdHRhY2hlZCgpIHtcbiAgICBpZiAodGhpcy5maWVsZHNDb2x1bW5OYW1lcyA9PT0gbnVsbClcbiAgICAgIHRoaXMuc2V0RmllbGRzQ29sdW1uTmFtZXModGhpcy5kYXRhRnJhbWUuY29sdW1ucy5uYW1lcygpKTtcbiAgICBpZiAodGhpcy5kYXRhRnJhbWUuY29sdW1ucy5ieVNlbVR5cGUoJ2ZpdCcpICE9IG51bGwgJiYgdGhpcy5yZW5kZXJlclNpemUgPT09ICdzbWFsbCcpXG4gICAgICB0aGlzLnJlbmRlcmVyU2l6ZSA9ICdub3JtYWwnO1xuXG4gICAgY29uc3Qgc3ViID0gKHN0cmVhbTogT2JzZXJ2YWJsZTx1bmtub3duPiwgYWN0aW9uOiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5zdWJzLnB1c2goREcuZGVib3VuY2Uoc3RyZWFtLCA1MCkuc3Vic2NyaWJlKChfKSA9PiBhY3Rpb24oKSkpO1xuICAgIH07XG5cbiAgICBzdWIodGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLm9uQ2hhbmdlZCwgKCkgPT4gdGhpcy5yZW5kZXIoKSk7XG4gICAgc3ViKHRoaXMuZGF0YUZyYW1lLmZpbHRlci5vbkNoYW5nZWQsICgpID0+IHRoaXMucmVuZGVyKCkpO1xuICAgIHN1Yih0aGlzLmRhdGFGcmFtZS5vbk1ldGFkYXRhQ2hhbmdlZCwgKCkgPT4gdGhpcy5yZW5kZXIoKSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdldEdyaWQoKTtcbiAgICAgIGlmIChncmlkKVxuICAgICAgICBzdWIoZ3JpZC5vblJvd3NTb3J0ZWQsICgpID0+IHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVuZGVyKCkpO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgc3ViKHRoaXMuZGF0YUZyYW1lLm9uQ29sdW1uc1JlbW92ZWQsICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlRmllbGRzQ29sdW1uTmFtZXMoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfSk7XG5cbiAgICBzdWIodGhpcy5kYXRhRnJhbWUub25DdXJyZW50Um93Q2hhbmdlZC5waXBlKGZpbHRlcigoXykgPT4gdGhpcy5zaG93Q3VycmVudFJvdykpLFxuICAgICAgKCkgPT4gdGhpcy52aXJ0dWFsVmlldy5yZWZyZXNoSXRlbSh0aGlzLmN1cnJlbnRSb3dQb3MhKSk7XG5cbiAgICBzdWIodGhpcy5kYXRhRnJhbWUub25Nb3VzZU92ZXJSb3dDaGFuZ2VkLnBpcGUoZmlsdGVyKChfKSA9PiB0aGlzLnNob3dNb3VzZU92ZXJSb3cpKSxcbiAgICAgICgpID0+IHRoaXMudmlydHVhbFZpZXcucmVmcmVzaEl0ZW0odGhpcy5tb3VzZU92ZXJQb3MhKSk7XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgc2V0RmllbGRzQ29sdW1uTmFtZXMoZGZDb2x1bW5zOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMgPSBkZkNvbHVtbnMubGVuZ3RoID4gMjAgPyBkZkNvbHVtbnMuc2xpY2UoMCwgMjApIDogZGZDb2x1bW5zO1xuICB9XG5cbiAgdXBkYXRlRmllbGRzQ29sdW1uTmFtZXMoKSB7XG4gICAgY29uc3QgbmV3Q29sdW1ucyA9IHRoaXMuZGF0YUZyYW1lLmNvbHVtbnMubmFtZXMoKTtcbiAgICBsZXQgY291bnRlciA9IHRoaXMuZmllbGRzQ29sdW1uTmFtZXMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnRlcjsgaSsrKSB7XG4gICAgICBjb25zdCBjb2xJZHggPSBuZXdDb2x1bW5zLmluZGV4T2YodGhpcy5maWVsZHNDb2x1bW5OYW1lc1tpXSk7XG4gICAgICBpZiAoY29sSWR4ID09PSAtMSkge1xuICAgICAgICB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgY291bnRlci0tO1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Qcm9wZXJ0eUNoYW5nZWQocHJvcGVydHk6IERHLlByb3BlcnR5KTogdm9pZCB7XG4gICAgaWYgKChwcm9wZXJ0eS5uYW1lID09PSAnc2hvd0N1cnJlbnRSb3cnIHx8IHByb3BlcnR5Lm5hbWUgPT09ICdzaG93TW91c2VPdmVyUm93JyB8fFxuICAgICAgcHJvcGVydHkubmFtZSA9PT0gJ3Nob3dTZWxlY3RlZFJvd3MnICYmIHByb3BlcnR5LmdldCh0aGlzKSA9PT0gdHJ1ZSkgJiYgdGhpcy5zaG93Rml4ZWRSb3dzKVxuICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKGBDYW5ub3Qgc2V0ICR7cHJvcGVydHkubmFtZX0gdG8gdHJ1ZSBzaW5jZSBmaXhlZCByb3dzIGFyZSBzZXRgKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVuZGVySGVhZGVyKCkge1xuICAgIHVpLmVtcHR5KHRoaXMuY29sdW1uSGVhZGVyc0Rpdik7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMucmVuZGVyRm9ybSgwLCB0cnVlKTtcbiAgICBmb3JtLmNsYXNzTGlzdC5hZGQoJ3RlbXAnKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMpIHtcbiAgICAgIGNvbnN0IGZvcm1GaWVsZCA9IGZvcm0ucXVlcnlTZWxlY3RvcignW2NvbHVtbj1cIicgKyBuYW1lICsgJ1wiXScpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkxhYmVsID0gdWkuYmluZCh0aGlzLmRhdGFGcmFtZS5jb2wobmFtZSksIHVpLmRpdlRleHQobmFtZSkpO1xuICAgICAgICBjb25zdCBjbG9zZUljb24gPSB1aS5pY29uRkEoJ3RpbWVzJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMgPSB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSBuYW1lKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9LCAnUmVtb3ZlJyk7XG4gICAgICAgIGNvbnN0IGNvbHVtbkxhYmVsQ29udGFpbmVyID0gdWkuZGl2KFtjb2x1bW5MYWJlbCwgY2xvc2VJY29uXSwgJ2Q0LW11bHRpLWZvcm0tY29sdW1uLW5hbWUgZDQtZmxleC1yb3cnKTtcbiAgICAgICAgY29sdW1uTGFiZWxDb250YWluZXIuc3R5bGUuZm9udCA9IHRoaXMuZm9udDtcbiAgICAgICAgY29sdW1uTGFiZWxDb250YWluZXIuc3R5bGUuZm9udFdlaWdodCA9ICdib2xkJztcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5nZXRTb3J0QnlDb2x1bW5zKCkuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgaWYgKGlkeCA+IC0xKVxuICAgICAgICAgIGNvbHVtbkxhYmVsQ29udGFpbmVyLmFwcGVuZCh1aS5kaXZUZXh0KHRoaXMuZ2V0U29ydEJ5VHlwZXMoKVtpZHhdID8gJ+KGkScgOiAn4oaTJywgJ2Q0LW11bHRpLWZvcm0tY29sdW1uLXNvcnQtaW5kaWNhdG9yJykpO1xuXG4gICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IGZvcm1GaWVsZC50eXBlID09PSAnY2hlY2tib3gnID9cbiAgICAgICAgICBmb3JtRmllbGQub2Zmc2V0VG9wIC0gQk9PTEVBTl9JTlBVVF9UT1BfTUFSR0lOIDogZm9ybUZpZWxkLm9mZnNldFRvcDtcbiAgICAgICAgY29sdW1uTGFiZWxDb250YWluZXIuc3R5bGUudG9wID0gYCR7b2Zmc2V0VG9wICsgMTB9cHhgO1xuICAgICAgICB0aGlzLmNvbHVtbkhlYWRlcnNEaXYuYXBwZW5kQ2hpbGQoY29sdW1uTGFiZWxDb250YWluZXIpO1xuXG4gICAgICAgIGNvbHVtbkxhYmVsLm9uY2xpY2sgPSAoXzogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YUZyYW1lLmN1cnJlbnRDb2wgPSB0aGlzLmRhdGFGcmFtZS5jb2wobmFtZSkhO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbHVtbkxhYmVsLm9uZGJsY2xpY2sgPSAoXzogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5zb3J0QnlDb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnNvcnRCeUNvbHVtbk5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5zb3J0QXNjZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc29ydEFzY2VuZGluZylcbiAgICAgICAgICAgIHRoaXMuc29ydEJ5Q29sdW1uTmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnNvcnRBc2NlbmRpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNvbHVtbkxhYmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoID4gdGhpcy5jb2x1bW5MYWJlbFdpZHRoKVxuICAgICAgICAgIHRoaXMuY29sdW1uTGFiZWxXaWR0aCA9IGNvbHVtbkxhYmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICBjb2x1bW5MYWJlbENvbnRhaW5lci5vbm1vdXNlZW50ZXIgPSAoZTogTW91c2VFdmVudCkgPT4gY2xvc2VJY29uLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgIGNvbHVtbkxhYmVsQ29udGFpbmVyLm9ubW91c2VsZWF2ZSA9IChlOiBNb3VzZUV2ZW50KSA9PiBjbG9zZUljb24uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvcm0ucmVtb3ZlKCk7XG4gIH1cblxuICBnZXQgY3VycmVudFJvd1BvcygpIHsgcmV0dXJuIHRoaXMuc2hvd0N1cnJlbnRSb3cgPyAwIDogbnVsbDsgfVxuICBnZXQgbW91c2VPdmVyUG9zKCkgeyByZXR1cm4gdGhpcy5zaG93TW91c2VPdmVyUm93ID8gKHRoaXMuc2hvd0N1cnJlbnRSb3cgPyAxIDogMCkgOiBudWxsOyB9XG5cbiAgZ2V0R3JpZCgpIHtcbiAgICBpZiAodGhpcy52aWV3ICYmICh0aGlzLnZpZXcgYXMgREcuVGFibGVWaWV3KS5ncmlkKVxuICAgICAgcmV0dXJuICh0aGlzLnZpZXcgYXMgREcuVGFibGVWaWV3KS5ncmlkO1xuICAgIGlmICh0aGlzLmRhdGFGcmFtZSAmJiBncm9rLnNoZWxsLnR2ICYmIGdyb2suc2hlbGwudHYuZGF0YUZyYW1lID09PSB0aGlzLmRhdGFGcmFtZSAmJiBncm9rLnNoZWxsLnR2LmdyaWQpXG4gICAgICByZXR1cm4gZ3Jvay5zaGVsbC50di5ncmlkO1xuICAgIGNvbnN0IHR2ID0gQXJyYXkuZnJvbShncm9rLnNoZWxsLnRhYmxlVmlld3MpLmZpbmQoKHR2KSA9PiB0di5kYXRhRnJhbWUgPT09IHRoaXMuZGF0YUZyYW1lKTtcbiAgICBpZiAodHYgJiYgdHYuZ3JpZClcbiAgICAgIHJldHVybiB0di5ncmlkO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVuZGVyRm9ybShyb3c6IG51bWJlciwgaGVhZGVyPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdldEdyaWQoKTtcbiAgICBjb25zdCBzYXZlZElkeCA9IHJvdztcblxuICAgIGlmIChoZWFkZXIpXG4gICAgICByb3cgPSAwO1xuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc2hvd0N1cnJlbnRSb3cgJiYgcm93ID09PSB0aGlzLmN1cnJlbnRSb3dQb3MpXG4gICAgICAgIHJvdyA9IHRoaXMuZGF0YUZyYW1lLmN1cnJlbnRSb3dJZHg7XG4gICAgICBlbHNlIGlmICh0aGlzLnNob3dNb3VzZU92ZXJSb3cgJiYgcm93ID09PSB0aGlzLm1vdXNlT3ZlclBvcylcbiAgICAgICAgcm93ID0gdGhpcy5kYXRhRnJhbWUubW91c2VPdmVyUm93SWR4O1xuICAgICAgZWxzZVxuICAgICAgICByb3cgPSB0aGlzLmluZGV4ZXNbcm93IC0gKHRoaXMuc2hvd0N1cnJlbnRSb3cgPyAxIDogMCkgLSAodGhpcy5zaG93TW91c2VPdmVyUm93ID8gMSA6IDApXTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtID0gdWkuZGl2VihcbiAgICAgIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgIGxldCByZXNEaXY6IEhUTUxFbGVtZW50ID0gdWkuZGl2KCk7XG4gICAgICAgIGlmIChyb3cgPT09IC0xKVxuICAgICAgICAgIHJldHVybiByZXNEaXY7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBmb3IgbW9sZWN1bGVzLCB1c2UgdGhlIGdyaWRDb2wgcmVuZGVyZXIgaW5zdGVhZCBvZiBpbnB1dEJhc2VcbiAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmRhdGFGcmFtZS5jb2wobmFtZSkhO1xuICAgICAgICAgIGlmIChjb2wuc2VtVHlwZSAmJiBjb2wubWV0YS5jZWxsUmVuZGVyZXIgJiYgZ3JpZD8uY29sKG5hbWUpPy5yZW5kZXJlcikge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBncmlkIS5jb2wobmFtZSkhLnJlbmRlcmVyITtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyU2l6ZSA9IHRoaXMuZ2V0UmVuZGVyZXJTaXplKHJlbmRlcmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGdyaWRDZWxsID0gREcuR3JpZENlbGwuZnJvbUNvbHVtblJvdyhncmlkISwgbmFtZSwgZ3JpZCEudGFibGVSb3dUb0dyaWQocm93KSk7XG4gICAgICAgICAgICBjb25zdCBjYW52YXMgPSB1aS5jYW52YXMocmVuZGVyZXJTaXplLngsIHJlbmRlcmVyU2l6ZS55KTtcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHJlbmRlcmVyU2l6ZS54ICogd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gcmVuZGVyZXJTaXplLnkgKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpITtcbiAgICAgICAgICAgIC8vIGN0eC5maWxsUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICAgICAgY3R4LnNjYWxlKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbnZhcy5zZXRBdHRyaWJ1dGUoJ2NvbHVtbicsIG5hbWUpO1xuXG4gICAgICAgICAgICBncmlkQ2VsbC5yZW5kZXIoe2NvbnRleHQ6IGN0eCwgYm91bmRzOiBuZXcgREcuUmVjdCgwLCAwLCByZW5kZXJlclNpemUueCwgcmVuZGVyZXJTaXplLnkpfSk7XG4gICAgICAgICAgICByZXNEaXYgPSBjYW52YXM7XG4gICAgICAgICAgICByZXNEaXYuc3R5bGUuYmFja2dyb3VuZCA9ICd3aGl0ZSc7IC8vIGZpeGVzIGJlZm9yZSBjaGFuZ2VzIG9mIHZpZXJ0dWFsIHZpZXcgbm90IHJlbW92aW5nIG9sZCBpdGVtc1xuICAgICAgICAgICAgcmVzRGl2Lm9uY2xpY2sgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmRhdGFGcmFtZS5jdXJyZW50Q2VsbCA9IHRoaXMuZGF0YUZyYW1lLmNlbGwocm93LCBuYW1lKTtcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dENsaWNrZWQubmV4dChuYW1lKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB1aS50b29sdGlwLmJpbmQocmVzRGl2LCBuYW1lKTtcblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IERHLklucHV0QmFzZS5mb3JDb2x1bW4oY29sKTtcbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhRnJhbWUuY29sKG5hbWUpIS5zZW1UeXBlID09PSBERy5TRU1UWVBFLk1PTEVDVUxFKVxuICAgICAgICAgICAgICAgIGlucHV0LmlucHV0LmNsYXNzTGlzdC5hZGQoYGQ0LW11bHRpLWZvcm0tbW9sZWN1bGUtaW5wdXQtJHt0aGlzLnJlbmRlcmVyU2l6ZX1gKTtcbiAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc2V0QXR0cmlidXRlKCdjb2x1bW4nLCBuYW1lKTtcbiAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUuZm9udCA9IHRoaXMuZm9udDtcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmRhdGFGcmFtZS5jb2wobmFtZSk/LmlzTm9uZShyb3cpID8gbnVsbCA6IHRoaXMuZGF0YUZyYW1lLmdldChuYW1lLCByb3cpO1xuICAgICAgICAgICAgICBpbnB1dC5yZWFkT25seSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuY29sb3JDb2RlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdyaWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGdjID0gZ3JpZC5jb2wobmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5kYXRhRnJhbWUuY29sKG5hbWUpPy5tZXRhLmNvbG9ycy5nZXRDb2xvcihyb3cpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yICYmIGNvbG9yICE9IDQyOTQ5NjcyOTUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdjPy5pc1RleHRDb2xvckNvZGVkKVxuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmlucHV0LnN0eWxlLmNvbG9yID0gYCR7REcuQ29sb3IudG9IdG1sKGNvbG9yKX0haW1wb3J0YW50O2A7XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmlucHV0LnN0eWxlLmNvbG9yID0gYCR7REcuQ29sb3IudG9IdG1sKERHLkNvbG9yLmdldENvbnRyYXN0Q29sb3IoY29sb3IpKX0haW1wb3J0YW50O2A7XG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gREcuQ29sb3IudG9IdG1sKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnYz8uY29udGVudENlbGxTdHlsZT8udGV4dENvbG9yKVxuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmlucHV0LnN0eWxlLmNvbG9yID0gREcuQ29sb3IudG9IdG1sKGdjIS5jb250ZW50Q2VsbFN0eWxlIS50ZXh0Q29sb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChnYz8uY29udGVudENlbGxTdHlsZT8uYmFja0NvbG9yKVxuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmlucHV0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IERHLkNvbG9yLnRvSHRtbChnYyEuY29udGVudENlbGxTdHlsZSEuYmFja0NvbG9yKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGdjPy5jb250ZW50Q2VsbFN0eWxlPy5ob3J6QWxpZ24gPT0gXCJjZW50ZXJcIiB8fCBnYz8uY29udGVudENlbGxTdHlsZT8uaG9yekFsaWduID09IFwicmlnaHRcIilcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUudGV4dEFsaWduID0gZ2MhLmNvbnRlbnRDZWxsU3R5bGUuaG9yekFsaWduITtcblxuICAgICAgICAgICAgICAgICAgaWYgKGdjIS5jb250ZW50Q2VsbFN0eWxlPy5mb250KVxuICAgICAgICAgICAgICAgICAgICBpbnB1dC5pbnB1dC5zdHlsZS5mb250ID0gZ2MhLmNvbnRlbnRDZWxsU3R5bGUuZm9udDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaW5wdXQuaW5wdXQub25jbGljayA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhRnJhbWUuY3VycmVudENlbGwgPSB0aGlzLmRhdGFGcmFtZS5jZWxsKHJvdywgbmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENsaWNrZWQubmV4dChuYW1lKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgdWkudG9vbHRpcC5iaW5kKGlucHV0LmlucHV0LCBuYW1lKTtcblxuICAgICAgICAgICAgICByZXNEaXYgPSBpbnB1dC5pbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzRGl2O1xuICAgICAgfVxuICAgICAgKSwgJ2Q0LW11bHRpLWZvcm0tZm9ybScpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01vdXNlT3ZlclJvdyAmJiBzYXZlZElkeCA9PSB0aGlzLm1vdXNlT3ZlclBvcylcbiAgICAgIGZvcm0uYXBwZW5kKHRoaXMubW91c2VPdmVyUm93SW5kaWNhdG9yKTtcbiAgICBpZiAodGhpcy5zaG93Q3VycmVudFJvdyAmJiBzYXZlZElkeCA9PT0gdGhpcy5jdXJyZW50Um93UG9zKVxuICAgICAgZm9ybS5hcHBlbmQodGhpcy5jdXJyZW50Um93SW5kaWNhdG9yKTtcblxuICAgIGZvcm0ub25jbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcm93OyBpKyspXG4gICAgICAgICAgdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLnNldChpLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLmdldChyb3cpO1xuICAgICAgICAgIHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi5zZXQocm93LCAhY3VycmVudFNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSB0aGlzLmRhdGFGcmFtZS5yb3dDb3VudDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLnNldChpLCBpIDw9IHJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnNob3dDdXJyZW50Um93IHx8IHNhdmVkSWR4ICE9PSB0aGlzLmN1cnJlbnRSb3dQb3MpXG4gICAgICAgICAgICB0aGlzLmRhdGFGcmFtZS5jdXJyZW50Um93SWR4ID0gcm93O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoIXRoaXMuc2hvd01vdXNlT3ZlclJvdyB8fCBzYXZlZElkeCAhPT0gdGhpcy5tb3VzZU92ZXJQb3MpIHtcbiAgICAgIGZvcm0ub25tb3VzZWVudGVyID0gKCkgPT4gdGhpcy5kYXRhRnJhbWUubW91c2VPdmVyUm93SWR4ID0gcm93O1xuICAgICAgZm9ybS5vbm1vdXNlbGVhdmUgPSAoKSA9PiB0aGlzLmRhdGFGcmFtZS5tb3VzZU92ZXJSb3dJZHggPSAtMTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm07XG4gIH1cblxuICBnZXRTb3J0QnlDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBncmlkID0gdGhpcy5nZXRHcmlkKCk7XG4gICAgaWYgKHRoaXMuc29ydEJ5Q29sdW1uTmFtZSAmJiB0aGlzLmRhdGFGcmFtZS5jb2x1bW5zLmNvbnRhaW5zKHRoaXMuc29ydEJ5Q29sdW1uTmFtZSkpXG4gICAgICByZXR1cm4gW3RoaXMuc29ydEJ5Q29sdW1uTmFtZV07XG4gICAgZWxzZSBpZiAoZ3JpZCAmJiBncmlkPy5zb3J0QnlDb2x1bW5zPy5sZW5ndGggPiAwKVxuICAgICAgcmV0dXJuIGdyaWQuc29ydEJ5Q29sdW1ucy5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0U29ydEJ5VHlwZXMoKTogYm9vbGVhbltdIHtcbiAgICBjb25zdCBncmlkID0gdGhpcy5nZXRHcmlkKCk7XG4gICAgaWYgKHRoaXMuc29ydEJ5Q29sdW1uTmFtZSAmJiB0aGlzLmRhdGFGcmFtZS5jb2x1bW5zLmNvbnRhaW5zKHRoaXMuc29ydEJ5Q29sdW1uTmFtZSkpXG4gICAgICByZXR1cm4gW3RoaXMuc29ydEFzY2VuZGluZ107XG4gICAgZWxzZSBpZiAoZ3JpZCAmJiBncmlkPy5zb3J0QnlDb2x1bW5zPy5sZW5ndGggPiAwKVxuICAgICAgcmV0dXJuIGdyaWQuc29ydFR5cGVzO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBncmlkID0gdGhpcy5nZXRHcmlkKCk7XG5cbiAgICBpZiAoIXRoaXMuc2hvd0ZpeGVkUm93cykge1xuICAgICAgdGhpcy5pbmRleGVzID0gW107XG4gICAgICBpZiAodGhpcy5zaG93U2VsZWN0ZWRSb3dzICYmIHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi50cnVlQ291bnQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbkFuZEZpbHRlciA9IHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi5jbG9uZSgpLmFuZCh0aGlzLmRhdGFGcmFtZS5maWx0ZXIpO1xuICAgICAgICBpZiAodGhpcy5zb3J0QnlDb2x1bW5OYW1lICYmIHRoaXMuZGF0YUZyYW1lLmNvbHVtbnMuY29udGFpbnModGhpcy5zb3J0QnlDb2x1bW5OYW1lKSlcbiAgICAgICAgICB0aGlzLmluZGV4ZXMgPSB0aGlzLmRhdGFGcmFtZS5nZXRTb3J0ZWRPcmRlcihbdGhpcy5zb3J0QnlDb2x1bW5OYW1lXSwgW3RoaXMuc29ydEFzY2VuZGluZ10sIHNlbGVjdGlvbkFuZEZpbHRlcik7XG4gICAgICAgIGVsc2UgaWYgKGdyaWQgJiYgZ3JpZD8uc29ydEJ5Q29sdW1ucz8ubGVuZ3RoID4gMClcbiAgICAgICAgICB0aGlzLmluZGV4ZXMgPSB0aGlzLmRhdGFGcmFtZS5nZXRTb3J0ZWRPcmRlcihncmlkLnNvcnRCeUNvbHVtbnMsIGdyaWQuc29ydFR5cGVzLCBzZWxlY3Rpb25BbmRGaWx0ZXIpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhpcy5pbmRleGVzID0gc2VsZWN0aW9uQW5kRmlsdGVyLmdldFNlbGVjdGVkSW5kZXhlcygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHVpLmVtcHR5KHRoaXMuY29sdW1uSGVhZGVyc0Rpdik7XG5cbiAgICB0aGlzLnJlbmRlckhlYWRlcigpO1xuXG4gICAgdGhpcy52aXJ0dWFsVmlldy5zZXREYXRhKFxuICAgICAgdGhpcy5pbmRleGVzLmxlbmd0aCArICh0aGlzLnNob3dDdXJyZW50Um93ID8gMSA6IDApICsgKHRoaXMuc2hvd01vdXNlT3ZlclJvdyA/IDEgOiAwKSxcbiAgICAgIChpOiBudW1iZXIpID0+IHRoaXMucmVuZGVyRm9ybShpKSk7XG4gIH1cbn1cbiJdfQ==
400
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMtdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybXMtdmlld2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLGFBQWE7QUFDYixPQUFPLHFCQUFxQixDQUFDO0FBRTdCLE1BQU0sMkJBQTJCLEdBQUcsK0RBQStELENBQUM7QUFDcEcsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFFcEMsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDO0FBRXBDLE1BQU0sYUFBYSxHQUE4QjtJQUMvQyxzQkFBc0IsRUFBRSxzQkFBc0I7SUFDOUMsWUFBWSxFQUFFLFlBQVk7SUFDMUIsc0JBQXNCLEVBQUUsTUFBTTtJQUM5QixzQkFBc0IsRUFBRSxzQkFBc0I7SUFDOUMsc0JBQXNCLEVBQUUsT0FBTztDQUNoQyxDQUFDO0FBRUYsTUFBTSxPQUFPLFdBQVksU0FBUSxFQUFFLENBQUMsUUFBUTtJQUMxQyxJQUFJLElBQUksS0FBYSxPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUF5QjVDLElBQUksU0FBUyxDQUFDLEVBQWdCO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsSUFBYztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdB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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3JGLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0ICcuLi8uLi9jc3MvZm9ybXMuY3NzJztcblxuY29uc3QgQ09MU19MSU1JVF9FWENFRURFRF9XQVJOSU5HID0gYE51bWJlciBvZiBjb2x1bW5zIGlzIG1vcmUgdGhhbiAyMC4gRmlyc3QgMjAgY29sdW1ucyBhcmUgc2hvd25gO1xuY29uc3QgQk9PTEVBTl9JTlBVVF9UT1BfTUFSR0lOID0gMTU7XG5cbmNvbnN0IFNBTUVfQVNfR1JJRCA9ICdTYW1lIGFzIGdyaWQnO1xuXG5jb25zdCBudW1iZXJGb3JtYXRzOiB7W2xhYmVsOiBzdHJpbmddOiBzdHJpbmd9ID0ge1xuICAnMyBzaWduaWZpY2FudCBkaWdpdHMnOiAnMyBzaWduaWZpY2FudCBkaWdpdHMnLFxuICAnU2NpZW50aWZpYyc6ICdzY2llbnRpZmljJyxcbiAgJzIgZGlnaXRzIGFmdGVyIGNvbW1hJzogJzAuMDAnLFxuICAnNCBzaWduaWZpY2FudCBkaWdpdHMnOiAnNCBzaWduaWZpY2FudCBkaWdpdHMnLFxuICAnMyBkaWdpdHMgYWZ0ZXIgY29tbWEnOiAnMC4wMDAnLFxufTtcblxuZXhwb3J0IGNsYXNzIEZvcm1zVmlld2VyIGV4dGVuZHMgREcuSnNWaWV3ZXIge1xuICBnZXQgdHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gJ0Zvcm1zVmlld2VyJzsgfVxuXG4gIHJlbmRlcmVyU2l6ZTogJ3NtYWxsJyB8ICdub3JtYWwnIHwgJ2xhcmdlJztcbiAgZm9udDogc3RyaW5nO1xuICBudW1iZXJGb3JtYXQ6IHN0cmluZztcbiAgZmllbGRzQ29sdW1uTmFtZXM6IHN0cmluZ1tdO1xuICBjb2xvckNvZGU6IGJvb2xlYW47XG4gIHNob3dDdXJyZW50Um93OiBib29sZWFuO1xuICBzaG93TW91c2VPdmVyUm93OiBib29sZWFuO1xuICBzaG93U2VsZWN0ZWRSb3dzOiBib29sZWFuO1xuICBzaG93Rml4ZWRSb3dzID0gZmFsc2U7XG4gIHVzZUdyaWRTb3J0ID0gdHJ1ZTtcbiAgc29ydEJ5Q29sdW1uTmFtZT86IHN0cmluZztcbiAgc29ydEFzY2VuZGluZzogYm9vbGVhbjtcblxuICBpbmRleGVzOiBudW1iZXJbXSB8IEludDMyQXJyYXk7XG4gIGNvbHVtbkhlYWRlcnNEaXY6IEhUTUxEaXZFbGVtZW50O1xuICB2aXJ0dWFsVmlldzogREcuVmlydHVhbFZpZXc7XG4gIGNvbHVtbkxhYmVsV2lkdGg6IG51bWJlciA9IDA7XG4gIGN1cnJlbnRSb3dJbmRpY2F0b3IgPSB1aS5kaXYoJycsICdkNC1tdWx0aS1mb3JtLWZvcm0taW5kaWNhdG9yIGQ0LW11bHRpLWZvcm0tZm9ybS1pbmRpY2F0b3ItY3VycmVudC1yb3cnKTtcbiAgbW91c2VPdmVyUm93SW5kaWNhdG9yID0gdWkuZGl2KCcnLCAnZDQtbXVsdGktZm9ybS1mb3JtLWluZGljYXRvciBkNC1tdWx0aS1mb3JtLWZvcm0taW5kaWNhdG9yLW1vdXNlLW92ZXItcm93Jyk7XG4gIHNwbGl0Q29sTGVmdDogSFRNTEVsZW1lbnQ7XG4gIHNwbGl0Q29sUmlnaHQ6IEhUTUxFbGVtZW50O1xuICBpbnB1dENsaWNrZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgc2V0IGRhdGFmcmFtZShkZjogREcuRGF0YUZyYW1lKSB7XG4gICAgdGhpcy5kYXRhRnJhbWUgPSBkZjtcbiAgICB0aGlzLm9uVGFibGVBdHRhY2hlZCgpO1xuICB9XG5cbiAgc2V0IGZpeGVkUm93TnVtYmVycyhpZHhzOiBudW1iZXJbXSkge1xuICAgIHRoaXMuaW5kZXhlcyA9IGlkeHM7XG4gICAgdGhpcy5zaG93Q3VycmVudFJvdyA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd01vdXNlT3ZlclJvdyA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd1NlbGVjdGVkUm93cyA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0ZpeGVkUm93cyA9IHRydWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNldCBjb2x1bW5zKGNvbE5hbWVzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMgPSBjb2xOYW1lcztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVyU2l6ZShyZW5kZXJlcjogREcuR3JpZENlbGxSZW5kZXJlcik6IERHLlBvaW50IHtcbiAgICBjb25zdCB3aWR0aCA9IHJlbmRlcmVyLmRlZmF1bHRXaWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSByZW5kZXJlci5kZWZhdWx0SGVpZ2h0O1xuXG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2l6ZSgpO1xuXG4gICAgc3dpdGNoICh0aGlzLnJlbmRlcmVyU2l6ZSkge1xuICAgICAgY2FzZSAnbm9ybWFsJzogcmV0dXJuIG5ldyBERy5Qb2ludCh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNhc2UgJ2xhcmdlJzogcmV0dXJuIG5ldyBERy5Qb2ludChNYXRoLmZsb29yKHdpZHRoICogMS41KSwgTWF0aC5mbG9vcihoZWlnaHQgKiAxLjUpKTtcbiAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBuZXcgREcuUG9pbnQoTWF0aC5mbG9vcih3aWR0aCAqIDAuNjYpLCBNYXRoLmZsb29yKGhlaWdodCAqIDAuNjYpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2l6ZSgpOiBERy5Qb2ludCB7XG4gICAgc3dpdGNoICh0aGlzLnJlbmRlcmVyU2l6ZSkge1xuICAgICAgY2FzZSAnbm9ybWFsJzogcmV0dXJuIG5ldyBERy5Qb2ludCgyMDAsIDEwMCk7XG4gICAgICBjYXNlICdsYXJnZSc6IHJldHVybiBuZXcgREcuUG9pbnQoMzAwLCAxNTApO1xuICAgICAgY2FzZSAnc21hbGwnOlxuICAgICAgZGVmYXVsdDogcmV0dXJuIG5ldyBERy5Qb2ludCgxMjAsIDYwKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5oZWxwVXJsID0gJ2h0dHBzOi8vZGF0YWdyb2suYWkvaGVscC92aXN1YWxpemUvdmlld2Vycy9mb3Jtcyc7XG5cbiAgICAvLyBwcm9wZXJ0aWVzXG4gICAgdGhpcy5maWVsZHNDb2x1bW5OYW1lcyA9IHRoaXMuYWRkUHJvcGVydHkoJ2ZpZWxkc0NvbHVtbk5hbWVzJywgREcuVFlQRS5DT0xVTU5fTElTVCk7XG4gICAgdGhpcy5jb2xvckNvZGUgPSB0aGlzLmJvb2woJ2NvbG9yQ29kZScsIHRydWUpO1xuICAgIHRoaXMuc2hvd0N1cnJlbnRSb3cgPSB0aGlzLmJvb2woJ3Nob3dDdXJyZW50Um93JywgdHJ1ZSk7XG4gICAgdGhpcy5zaG93TW91c2VPdmVyUm93ID0gdGhpcy5ib29sKCdzaG93TW91c2VPdmVyUm93JywgdHJ1ZSk7XG4gICAgdGhpcy5zaG93U2VsZWN0ZWRSb3dzID0gdGhpcy5ib29sKCdzaG93U2VsZWN0ZWRSb3dzJywgdHJ1ZSk7XG4gICAgdGhpcy51c2VHcmlkU29ydCA9IHRoaXMuYm9vbCgndXNlR3JpZFNvcnQnLCB0cnVlLCB7ZGVzY3JpcHRpb246ICdTb3J0IHZhbHVlcyB0aGUgc2FtZSB3YXkgYXMgaW4gdGhlIHNwcmVhZHNoZWV0J30pO1xuICAgIHRoaXMuc29ydEJ5Q29sdW1uTmFtZSA9IHRoaXMuY29sdW1uKCdzb3J0QnknKTtcbiAgICB0aGlzLnNvcnRBc2NlbmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlcmVyU2l6ZSA9IHRoaXMuc3RyaW5nKCdyZW5kZXJlclNpemUnLCAnc21hbGwnLCB7Y2hvaWNlczogWydzbWFsbCcsICdub3JtYWwnLCAnbGFyZ2UnXSwgZGVzY3JpcHRpb246ICdTZXRzIHRoZSBkaXNwbGF5IHNpemUgb2YgcmVuZGVyZWQgY29udGVudCd9KSBhcyAnc21hbGwnIHwgJ25vcm1hbCcgfCAnbGFyZ2UnO1xuICAgIHRoaXMuZm9udCA9IHRoaXMuc3RyaW5nKCdmb250JywgJ25vcm1hbCBub3JtYWwgMTNweCBcIlJvYm90b1wiJywge2VkaXRvcjogJ2ZvbnQnLCBkZXNjcmlwdGlvbjogJ0ZvbnQgZm9yIGxhYmVscyBhbmQgdmFsdWVzJ30pO1xuICAgIHRoaXMubnVtYmVyRm9ybWF0ID0gdGhpcy5zdHJpbmcoJ251bWJlckZvcm1hdCcsIFNBTUVfQVNfR1JJRCwge2Nob2ljZXM6IFtTQU1FX0FTX0dSSUQsIC4uLk9iamVjdC5rZXlzKG51bWJlckZvcm1hdHMpXSwgZGVzY3JpcHRpb246ICdOdW1iZXIgZm9ybWF0IGFwcGxpZWQgdG8gbnVtZXJpYyBmaWVsZHMnfSk7XG5cbiAgICAvL2ZpZWxkc1xuICAgIHRoaXMuaW5kZXhlcyA9IFtdO1xuXG4gICAgLy8gaW5pdFxuICAgIHRoaXMucm9vdC5jbGFzc0xpc3QuYWRkKCdkNC1tdWx0aS1mb3JtJyk7XG4gICAgdGhpcy5jb2x1bW5IZWFkZXJzRGl2ID0gdWkuZGl2KFtdLCAnZDQtbXVsdGktZm9ybS1oZWFkZXInKTtcbiAgICB0aGlzLnZpcnR1YWxWaWV3ID0gdWkudmlydHVhbFZpZXcoMCwgKGk6IG51bWJlcikgPT4gdGhpcy5yZW5kZXJGb3JtKGkpLCBmYWxzZSwgMSk7XG4gICAgY29uc3QgY29sdW1uSGVhZGVyc0JveCA9IHVpLmRpdih0aGlzLmNvbHVtbkhlYWRlcnNEaXYpO1xuICAgIGNvbnN0IGZvcm1XaXRoSGVhZGVyRGl2ID0gdWkuc3BsaXRIKFtjb2x1bW5IZWFkZXJzQm94LCB0aGlzLnZpcnR1YWxWaWV3LnJvb3RdLCBudWxsLCB0cnVlKTtcbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQoZm9ybVdpdGhIZWFkZXJEaXYpO1xuXG4gICAgdGhpcy5zcGxpdENvbExlZnQgPSBmb3JtV2l0aEhlYWRlckRpdi5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcbiAgICB0aGlzLnNwbGl0Q29sUmlnaHQgPSBmb3JtV2l0aEhlYWRlckRpdi5sYXN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgdWkudG9vbHRpcC5iaW5kKHRoaXMuY3VycmVudFJvd0luZGljYXRvciwgJ0N1cnJlbnQgcm93Jyk7XG4gICAgdWkudG9vbHRpcC5iaW5kKHRoaXMubW91c2VPdmVyUm93SW5kaWNhdG9yLCAnTW91c2Ugb3ZlciByb3cnKTtcblxuICAgIHVpLnRvb2xzLndhaXRGb3JFbGVtZW50SW5Eb20odGhpcy5yb290KS50aGVuKChfKSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbkhlYWRlcnNEaXYuc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93JywgJ2hpZGRlbicsICdpbXBvcnRhbnQnKTtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb2x1bW5IZWFkZXJzRGl2LnN0eWxlLCB7XG4gICAgICAgIC8vIG92ZWZsb3c6J2hpZGRlbiAhaW1wb3J0YW50JyxcbiAgICAgICAgbWluV2lkdGg6ICcxNTBweCcsXG4gICAgICAgIGZsZXhTaHJpbms6ICcwJ1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3BsaXRDb2xMZWZ0LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdycsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG4gICAgICBjb2x1bW5IZWFkZXJzQm94LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdycsICdzY3JvbGwnLCAnaW1wb3J0YW50Jyk7XG4gICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkhlYWRlcnNCb3guc3R5bGUsIHtcbiAgICAgICAgYm94U2l6aW5nOiAnY29udGVudC1ib3gnLFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBwYWRkaW5nUmlnaHQ6ICcxN3B4J30pO1xuXG4gICAgICBjb2x1bW5IZWFkZXJzQm94LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIChlOiBFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLnZpcnR1YWxWaWV3LnJvb3Quc2Nyb2xsVG9wID0gY29sdW1uSGVhZGVyc0JveC5zY3JvbGxUb3A7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy52aXJ0dWFsVmlldy5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIChlOiBFdmVudCkgPT4ge1xuICAgICAgICBjb2x1bW5IZWFkZXJzQm94LnNjcm9sbFRvcCA9IHRoaXMudmlydHVhbFZpZXcucm9vdC5zY3JvbGxUb3A7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHVpLnRvb2xzLndhaXRGb3JFbGVtZW50SW5Eb20odGhpcy52aXJ0dWFsVmlldy5yb290KS50aGVuKChfKSA9PiB7XG4gICAgICB0aGlzLmZpdEhlYWRlclRvTGFiZWxXaWR0aCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZml0SGVhZGVyVG9MYWJlbFdpZHRoKHdpZHRoPzogbnVtYmVyKSB7XG4gICAgY29uc3QgdyA9IHdpZHRoID8/IHRoaXMuY29sdW1uTGFiZWxXaWR0aDtcbiAgICBjb25zdCByb290V2lkdGggPSB0aGlzLnJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgdGhpcy5zcGxpdENvbExlZnQuc3R5bGUud2lkdGggPSBgJHt3ICsgMzB9cHhgO1xuICAgIHRoaXMuc3BsaXRDb2xSaWdodC5zdHlsZS53aWR0aCA9IGAke3Jvb3RXaWR0aCAtIHcgLSAzMCAtIDR9cHhgO1xuICB9XG5cbiAgZ2V0Q29sdW1uV2lkdGgoZWw6SFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoZWwuc3R5bGUud2lkdGgpO1xuICB9XG5cbiAgb25UYWJsZUF0dGFjaGVkKCkge1xuICAgIGlmICh0aGlzLmZpZWxkc0NvbHVtbk5hbWVzID09PSBudWxsKVxuICAgICAgdGhpcy5zZXRGaWVsZHNDb2x1bW5OYW1lcyh0aGlzLmRhdGFGcmFtZS5jb2x1bW5zLm5hbWVzKCkpO1xuICAgIGlmICh0aGlzLmRhdGFGcmFtZS5jb2x1bW5zLmJ5U2VtVHlwZSgnZml0JykgIT0gbnVsbCAmJiB0aGlzLnJlbmRlcmVyU2l6ZSA9PT0gJ3NtYWxsJylcbiAgICAgIHRoaXMucmVuZGVyZXJTaXplID0gJ25vcm1hbCc7XG5cbiAgICBjb25zdCBzdWIgPSAoc3RyZWFtOiBPYnNlcnZhYmxlPHVua25vd24+LCBhY3Rpb246IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLnN1YnMucHVzaChERy5kZWJvdW5jZShzdHJlYW0sIDUwKS5zdWJzY3JpYmUoKF8pID0+IGFjdGlvbigpKSk7XG4gICAgfTtcblxuICAgIHN1Yih0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24ub25DaGFuZ2VkLCAoKSA9PiB0aGlzLnJlbmRlcigpKTtcbiAgICBzdWIodGhpcy5kYXRhRnJhbWUuZmlsdGVyLm9uQ2hhbmdlZCwgKCkgPT4gdGhpcy5yZW5kZXIoKSk7XG4gICAgc3ViKHRoaXMuZGF0YUZyYW1lLm9uTWV0YWRhdGFDaGFuZ2VkLCAoKSA9PiB0aGlzLnJlbmRlcigpKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ2V0R3JpZCgpO1xuICAgICAgaWYgKGdyaWQpIHtcbiAgICAgICAgc3ViKGdyaWQub25Sb3dzU29ydGVkLCAoKSA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlbmRlcigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdWIodGhpcy5kYXRhRnJhbWUub25Db2x1bW5zUmVtb3ZlZCwgKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVGaWVsZHNDb2x1bW5OYW1lcygpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9KTtcblxuICAgIHN1Yih0aGlzLmRhdGFGcmFtZS5vbkNvbHVtbk5hbWVDaGFuZ2VkLCAoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZmllbGRzQ29sdW1uTmFtZXMuZmlsdGVyKChuKSA9PiAhbi5zdGFydHNXaXRoKCd+JykpO1xuICAgICAgaWYgKGZpbHRlcmVkLmxlbmd0aCAhPT0gdGhpcy5maWVsZHNDb2x1bW5OYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5maWVsZHNDb2x1bW5OYW1lcyA9IGZpbHRlcmVkO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3ViKHRoaXMuZGF0YUZyYW1lLm9uQ3VycmVudFJvd0NoYW5nZWQucGlwZShmaWx0ZXIoKF8pID0+IHRoaXMuc2hvd0N1cnJlbnRSb3cpKSxcbiAgICAgICgpID0+IHRoaXMudmlydHVhbFZpZXcucmVmcmVzaEl0ZW0odGhpcy5jdXJyZW50Um93UG9zISkpO1xuXG4gICAgc3ViKHRoaXMuZGF0YUZyYW1lLm9uTW91c2VPdmVyUm93Q2hhbmdlZC5waXBlKGZpbHRlcigoXykgPT4gdGhpcy5zaG93TW91c2VPdmVyUm93KSksXG4gICAgICAoKSA9PiB0aGlzLnZpcnR1YWxWaWV3LnJlZnJlc2hJdGVtKHRoaXMubW91c2VPdmVyUG9zISkpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNldEZpZWxkc0NvbHVtbk5hbWVzKGRmQ29sdW1uczogc3RyaW5nW10pIHtcbiAgICBjb25zdCB2aXNpYmxlID0gZGZDb2x1bW5zLmZpbHRlcigobikgPT4gIW4uc3RhcnRzV2l0aCgnficpKTtcbiAgICB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzID0gdmlzaWJsZS5sZW5ndGggPiAyMCA/IHZpc2libGUuc2xpY2UoMCwgMjApIDogdmlzaWJsZTtcbiAgfVxuXG4gIHVwZGF0ZUZpZWxkc0NvbHVtbk5hbWVzKCkge1xuICAgIGNvbnN0IG5ld0NvbHVtbnMgPSB0aGlzLmRhdGFGcmFtZS5jb2x1bW5zLm5hbWVzKCk7XG4gICAgbGV0IGNvdW50ZXIgPSB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50ZXI7IGkrKykge1xuICAgICAgY29uc3QgY29sSWR4ID0gbmV3Q29sdW1ucy5pbmRleE9mKHRoaXMuZmllbGRzQ29sdW1uTmFtZXNbaV0pO1xuICAgICAgaWYgKGNvbElkeCA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5maWVsZHNDb2x1bW5OYW1lcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGNvdW50ZXItLTtcbiAgICAgICAgaS0tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUHJvcGVydHlDaGFuZ2VkKHByb3BlcnR5OiBERy5Qcm9wZXJ0eSk6IHZvaWQge1xuICAgIGlmICgocHJvcGVydHkubmFtZSA9PT0gJ3Nob3dDdXJyZW50Um93JyB8fCBwcm9wZXJ0eS5uYW1lID09PSAnc2hvd01vdXNlT3ZlclJvdycgfHxcbiAgICAgIHByb3BlcnR5Lm5hbWUgPT09ICdzaG93U2VsZWN0ZWRSb3dzJyAmJiBwcm9wZXJ0eS5nZXQodGhpcykgPT09IHRydWUpICYmIHRoaXMuc2hvd0ZpeGVkUm93cylcbiAgICAgIGdyb2suc2hlbGwud2FybmluZyhgQ2Fubm90IHNldCAke3Byb3BlcnR5Lm5hbWV9IHRvIHRydWUgc2luY2UgZml4ZWQgcm93cyBhcmUgc2V0YCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlckhlYWRlcigpIHtcbiAgICB1aS5lbXB0eSh0aGlzLmNvbHVtbkhlYWRlcnNEaXYpO1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLnJlbmRlckZvcm0oMCwgdHJ1ZSk7XG4gICAgZm9ybS5jbGFzc0xpc3QuYWRkKCd0ZW1wJyk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTtcblxuICAgIGZvciAoY29uc3QgbmFtZSBvZiB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzKSB7XG4gICAgICBjb25zdCBmb3JtRmllbGQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ1tjb2x1bW49XCInICsgbmFtZSArICdcIl0nKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgICBjb25zdCBjb2x1bW5MYWJlbCA9IHVpLmJpbmQodGhpcy5kYXRhRnJhbWUuY29sKG5hbWUpLCB1aS5kaXZUZXh0KG5hbWUpKTtcbiAgICAgICAgY29uc3QgY2xvc2VJY29uID0gdWkuaWNvbkZBKCd0aW1lcycsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzID0gdGhpcy5maWVsZHNDb2x1bW5OYW1lcy5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gbmFtZSk7XG4gICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfSwgJ1JlbW92ZScpO1xuICAgICAgICBjb25zdCBjb2x1bW5MYWJlbENvbnRhaW5lciA9IHVpLmRpdihbY29sdW1uTGFiZWwsIGNsb3NlSWNvbl0sICdkNC1tdWx0aS1mb3JtLWNvbHVtbi1uYW1lIGQ0LWZsZXgtcm93Jyk7XG4gICAgICAgIGNvbHVtbkxhYmVsQ29udGFpbmVyLnN0eWxlLmZvbnQgPSB0aGlzLmZvbnQ7XG4gICAgICAgIGNvbHVtbkxhYmVsQ29udGFpbmVyLnN0eWxlLmZvbnRXZWlnaHQgPSAnYm9sZCc7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuZ2V0U29ydEJ5Q29sdW1ucygpLmluZGV4T2YobmFtZSk7XG4gICAgICAgIGlmIChpZHggPiAtMSlcbiAgICAgICAgICBjb2x1bW5MYWJlbENvbnRhaW5lci5hcHBlbmQodWkuZGl2VGV4dCh0aGlzLmdldFNvcnRCeVR5cGVzKClbaWR4XSA/ICfihpEnIDogJ+KGkycsICdkNC1tdWx0aS1mb3JtLWNvbHVtbi1zb3J0LWluZGljYXRvcicpKTtcblxuICAgICAgICBjb25zdCBvZmZzZXRUb3AgPSBmb3JtRmllbGQudHlwZSA9PT0gJ2NoZWNrYm94JyA/XG4gICAgICAgICAgZm9ybUZpZWxkLm9mZnNldFRvcCAtIEJPT0xFQU5fSU5QVVRfVE9QX01BUkdJTiA6IGZvcm1GaWVsZC5vZmZzZXRUb3A7XG4gICAgICAgIGNvbHVtbkxhYmVsQ29udGFpbmVyLnN0eWxlLnRvcCA9IGAke29mZnNldFRvcCArIDEwfXB4YDtcbiAgICAgICAgdGhpcy5jb2x1bW5IZWFkZXJzRGl2LmFwcGVuZENoaWxkKGNvbHVtbkxhYmVsQ29udGFpbmVyKTtcblxuICAgICAgICBjb2x1bW5MYWJlbC5vbmNsaWNrID0gKF86IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFGcmFtZS5jdXJyZW50Q29sID0gdGhpcy5kYXRhRnJhbWUuY29sKG5hbWUpITtcbiAgICAgICAgfTtcblxuICAgICAgICBjb2x1bW5MYWJlbC5vbmRibGNsaWNrID0gKF86IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuc29ydEJ5Q29sdW1uTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5zb3J0QnlDb2x1bW5OYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuc29ydEFzY2VuZGluZyA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3J0QXNjZW5kaW5nKVxuICAgICAgICAgICAgdGhpcy5zb3J0QnlDb2x1bW5OYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuc29ydEFzY2VuZGluZyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY29sdW1uTGFiZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPiB0aGlzLmNvbHVtbkxhYmVsV2lkdGgpXG4gICAgICAgICAgdGhpcy5jb2x1bW5MYWJlbFdpZHRoID0gY29sdW1uTGFiZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGNvbHVtbkxhYmVsQ29udGFpbmVyLm9ubW91c2VlbnRlciA9IChlOiBNb3VzZUV2ZW50KSA9PiBjbG9zZUljb24uc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgY29sdW1uTGFiZWxDb250YWluZXIub25tb3VzZWxlYXZlID0gKGU6IE1vdXNlRXZlbnQpID0+IGNsb3NlSWNvbi5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9ybS5yZW1vdmUoKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50Um93UG9zKCkgeyByZXR1cm4gdGhpcy5zaG93Q3VycmVudFJvdyA/IDAgOiBudWxsOyB9XG4gIGdldCBtb3VzZU92ZXJQb3MoKSB7IHJldHVybiB0aGlzLnNob3dNb3VzZU92ZXJSb3cgPyAodGhpcy5zaG93Q3VycmVudFJvdyA/IDEgOiAwKSA6IG51bGw7IH1cblxuICBnZXRHcmlkKCkge1xuICAgIGlmICh0aGlzLnZpZXcgJiYgKHRoaXMudmlldyBhcyBERy5UYWJsZVZpZXcpLmdyaWQpXG4gICAgICByZXR1cm4gKHRoaXMudmlldyBhcyBERy5UYWJsZVZpZXcpLmdyaWQ7XG4gICAgaWYgKHRoaXMuZGF0YUZyYW1lICYmIGdyb2suc2hlbGwudHYgJiYgZ3Jvay5zaGVsbC50di5kYXRhRnJhbWUgPT09IHRoaXMuZGF0YUZyYW1lICYmIGdyb2suc2hlbGwudHYuZ3JpZClcbiAgICAgIHJldHVybiBncm9rLnNoZWxsLnR2LmdyaWQ7XG4gICAgY29uc3QgdHYgPSBBcnJheS5mcm9tKGdyb2suc2hlbGwudGFibGVWaWV3cykuZmluZCgodHYpID0+IHR2LmRhdGFGcmFtZSA9PT0gdGhpcy5kYXRhRnJhbWUpO1xuICAgIGlmICh0diAmJiB0di5ncmlkKVxuICAgICAgcmV0dXJuIHR2LmdyaWQ7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZW5kZXJGb3JtKHJvdzogbnVtYmVyLCBoZWFkZXI/OiBib29sZWFuKSB7XG4gICAgY29uc3QgZ3JpZCA9IHRoaXMuZ2V0R3JpZCgpO1xuICAgIGNvbnN0IHNhdmVkSWR4ID0gcm93O1xuXG4gICAgaWYgKGhlYWRlcilcbiAgICAgIHJvdyA9IDA7XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5zaG93Q3VycmVudFJvdyAmJiByb3cgPT09IHRoaXMuY3VycmVudFJvd1BvcylcbiAgICAgICAgcm93ID0gdGhpcy5kYXRhRnJhbWUuY3VycmVudFJvd0lkeDtcbiAgICAgIGVsc2UgaWYgKHRoaXMuc2hvd01vdXNlT3ZlclJvdyAmJiByb3cgPT09IHRoaXMubW91c2VPdmVyUG9zKVxuICAgICAgICByb3cgPSB0aGlzLmRhdGFGcmFtZS5tb3VzZU92ZXJSb3dJZHg7XG4gICAgICBlbHNlXG4gICAgICAgIHJvdyA9IHRoaXMuaW5kZXhlc1tyb3cgLSAodGhpcy5zaG93Q3VycmVudFJvdyA/IDEgOiAwKSAtICh0aGlzLnNob3dNb3VzZU92ZXJSb3cgPyAxIDogMCldO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm0gPSB1aS5kaXZWKFxuICAgICAgdGhpcy5maWVsZHNDb2x1bW5OYW1lcy5tYXAoKG5hbWUpID0+IHtcbiAgICAgICAgbGV0IHJlc0RpdjogSFRNTEVsZW1lbnQgPSB1aS5kaXYoKTtcbiAgICAgICAgaWYgKHJvdyA9PT0gLTEpXG4gICAgICAgICAgcmV0dXJuIHJlc0RpdjtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIGZvciBtb2xlY3VsZXMsIHVzZSB0aGUgZ3JpZENvbCByZW5kZXJlciBpbnN0ZWFkIG9mIGlucHV0QmFzZVxuICAgICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuZGF0YUZyYW1lLmNvbChuYW1lKSE7XG4gICAgICAgICAgaWYgKGNvbC5zZW1UeXBlICYmIGNvbC5tZXRhLmNlbGxSZW5kZXJlciAmJiBncmlkPy5jb2wobmFtZSk/LnJlbmRlcmVyKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJlciA9IGdyaWQhLmNvbChuYW1lKSEucmVuZGVyZXIhO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXJTaXplID0gdGhpcy5nZXRSZW5kZXJlclNpemUocmVuZGVyZXIpO1xuICAgICAgICAgICAgY29uc3QgZ3JpZENlbGwgPSBERy5HcmlkQ2VsbC5mcm9tQ29sdW1uUm93KGdyaWQhLCBuYW1lLCBncmlkIS50YWJsZVJvd1RvR3JpZChyb3cpKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IHVpLmNhbnZhcyhyZW5kZXJlclNpemUueCwgcmVuZGVyZXJTaXplLnkpO1xuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gcmVuZGVyZXJTaXplLnggKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSByZW5kZXJlclNpemUueSAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJykhO1xuICAgICAgICAgICAgLy8gY3R4LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgICAgICBjdHguc2NhbGUod2luZG93LmRldmljZVBpeGVsUmF0aW8sIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTtcblxuICAgICAgICAgICAgY2FudmFzLnNldEF0dHJpYnV0ZSgnY29sdW1uJywgbmFtZSk7XG5cbiAgICAgICAgICAgIGdyaWRDZWxsLnJlbmRlcih7Y29udGV4dDogY3R4LCBib3VuZHM6IG5ldyBERy5SZWN0KDAsIDAsIHJlbmRlcmVyU2l6ZS54LCByZW5kZXJlclNpemUueSl9KTtcbiAgICAgICAgICAgIHJlc0RpdiA9IGNhbnZhcztcbiAgICAgICAgICAgIHJlc0Rpdi5zdHlsZS5iYWNrZ3JvdW5kID0gJ3doaXRlJzsgLy8gZml4ZXMgYmVmb3JlIGNoYW5nZXMgb2YgdmllcnR1YWwgdmlldyBub3QgcmVtb3Zpbmcgb2xkIGl0ZW1zXG4gICAgICAgICAgICByZXNEaXYub25jbGljayA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YUZyYW1lLmN1cnJlbnRDZWxsID0gdGhpcy5kYXRhRnJhbWUuY2VsbChyb3csIG5hbWUpO1xuICAgICAgICAgICAgICB0aGlzLmlucHV0Q2xpY2tlZC5uZXh0KG5hbWUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHVpLnRvb2x0aXAuYmluZChyZXNEaXYsIG5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IERHLklucHV0QmFzZS5mb3JDb2x1bW4oY29sKTtcbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhRnJhbWUuY29sKG5hbWUpIS5zZW1UeXBlID09PSBERy5TRU1UWVBFLk1PTEVDVUxFKVxuICAgICAgICAgICAgICAgIGlucHV0LmlucHV0LmNsYXNzTGlzdC5hZGQoYGQ0LW11bHRpLWZvcm0tbW9sZWN1bGUtaW5wdXQtJHt0aGlzLnJlbmRlcmVyU2l6ZX1gKTtcbiAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc2V0QXR0cmlidXRlKCdjb2x1bW4nLCBuYW1lKTtcbiAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUuZm9udCA9IHRoaXMuZm9udDtcbiAgICAgICAgICAgICAgY29uc3QgZm10ID0gbnVtYmVyRm9ybWF0c1t0aGlzLm51bWJlckZvcm1hdF07XG4gICAgICAgICAgICAgIGlmIChmbXQgJiYgY29sLnR5cGUgPT09IERHLlRZUEUuRkxPQVQpXG4gICAgICAgICAgICAgICAgaW5wdXQuZm9ybWF0ID0gZm10O1xuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHRoaXMuZGF0YUZyYW1lLmNvbChuYW1lKT8uaXNOb25lKHJvdykgPyBudWxsIDogdGhpcy5kYXRhRnJhbWUuZ2V0KG5hbWUsIHJvdyk7XG4gICAgICAgICAgICAgIGlucHV0LnJlYWRPbmx5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBpZiAodGhpcy5jb2xvckNvZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZ2MgPSBncmlkLmNvbChuYW1lKTtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLmRhdGFGcmFtZS5jb2wobmFtZSk/Lm1ldGEuY29sb3JzLmdldENvbG9yKHJvdyk7XG4gICAgICAgICAgICAgICAgICBpZiAoY29sb3IgJiYgY29sb3IgIT0gNDI5NDk2NzI5NSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2M/LmlzVGV4dENvbG9yQ29kZWQpXG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUuY29sb3IgPSBgJHtERy5Db2xvci50b0h0bWwoY29sb3IpfSFpbXBvcnRhbnQ7YDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUuY29sb3IgPSBgJHtERy5Db2xvci50b0h0bWwoREcuQ29sb3IuZ2V0Q29udHJhc3RDb2xvcihjb2xvcikpfSFpbXBvcnRhbnQ7YDtcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5pbnB1dC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBERy5Db2xvci50b0h0bWwoY29sb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2M/LmNvbnRlbnRDZWxsU3R5bGU/LnRleHRDb2xvcilcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5pbnB1dC5zdHlsZS5jb2xvciA9IERHLkNvbG9yLnRvSHRtbChnYyEuY29udGVudENlbGxTdHlsZSEudGV4dENvbG9yKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZ2M/LmNvbnRlbnRDZWxsU3R5bGU/LmJhY2tDb2xvcilcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5pbnB1dC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBERy5Db2xvci50b0h0bWwoZ2MhLmNvbnRlbnRDZWxsU3R5bGUhLmJhY2tDb2xvcik7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChnYz8uY29udGVudENlbGxTdHlsZT8uaG9yekFsaWduID09ICdjZW50ZXInIHx8IGdjPy5jb250ZW50Q2VsbFN0eWxlPy5ob3J6QWxpZ24gPT0gJ3JpZ2h0JylcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUudGV4dEFsaWduID0gZ2MhLmNvbnRlbnRDZWxsU3R5bGUuaG9yekFsaWduITtcblxuICAgICAgICAgICAgICAgICAgaWYgKGdjIS5jb250ZW50Q2VsbFN0eWxlPy5mb250KVxuICAgICAgICAgICAgICAgICAgICBpbnB1dC5pbnB1dC5zdHlsZS5mb250ID0gZ2MhLmNvbnRlbnRDZWxsU3R5bGUuZm9udDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaW5wdXQuaW5wdXQub25jbGljayA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhRnJhbWUuY3VycmVudENlbGwgPSB0aGlzLmRhdGFGcmFtZS5jZWxsKHJvdywgbmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENsaWNrZWQubmV4dChuYW1lKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgdWkudG9vbHRpcC5iaW5kKGlucHV0LmlucHV0LCBuYW1lKTtcblxuICAgICAgICAgICAgICByZXNEaXYgPSBpbnB1dC5pbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNEaXY7XG4gICAgICB9XG4gICAgICApLCAnZDQtbXVsdGktZm9ybS1mb3JtJyk7XG5cbiAgICBpZiAodGhpcy5zaG93TW91c2VPdmVyUm93ICYmIHNhdmVkSWR4ID09IHRoaXMubW91c2VPdmVyUG9zKVxuICAgICAgZm9ybS5hcHBlbmQodGhpcy5tb3VzZU92ZXJSb3dJbmRpY2F0b3IpO1xuICAgIGlmICh0aGlzLnNob3dDdXJyZW50Um93ICYmIHNhdmVkSWR4ID09PSB0aGlzLmN1cnJlbnRSb3dQb3MpXG4gICAgICBmb3JtLmFwcGVuZCh0aGlzLmN1cnJlbnRSb3dJbmRpY2F0b3IpO1xuXG4gICAgZm9ybS5vbmNsaWNrID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQuY3RybEtleSAmJiBldmVudC5zaGlmdEtleSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSByb3c7IGkrKylcbiAgICAgICAgICB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uc2V0KGksIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi5nZXQocm93KTtcbiAgICAgICAgICB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uc2V0KHJvdywgIWN1cnJlbnRTZWxlY3Rpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gdGhpcy5kYXRhRnJhbWUucm93Q291bnQ7IGkrKylcbiAgICAgICAgICAgIHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi5zZXQoaSwgaSA8PSByb3cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghdGhpcy5zaG93Q3VycmVudFJvdyB8fCBzYXZlZElkeCAhPT0gdGhpcy5jdXJyZW50Um93UG9zKVxuICAgICAgICAgICAgdGhpcy5kYXRhRnJhbWUuY3VycmVudFJvd0lkeCA9IHJvdztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKCF0aGlzLnNob3dNb3VzZU92ZXJSb3cgfHwgc2F2ZWRJZHggIT09IHRoaXMubW91c2VPdmVyUG9zKSB7XG4gICAgICBmb3JtLm9ubW91c2VlbnRlciA9ICgpID0+IHRoaXMuZGF0YUZyYW1lLm1vdXNlT3ZlclJvd0lkeCA9IHJvdztcbiAgICAgIGZvcm0ub25tb3VzZWxlYXZlID0gKCkgPT4gdGhpcy5kYXRhRnJhbWUubW91c2VPdmVyUm93SWR4ID0gLTE7XG4gICAgfVxuICAgIHJldHVybiBmb3JtO1xuICB9XG5cbiAgZ2V0U29ydEJ5Q29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZ3JpZCA9IHRoaXMuZ2V0R3JpZCgpO1xuICAgIGlmICh0aGlzLnNvcnRCeUNvbHVtbk5hbWUgJiYgdGhpcy5kYXRhRnJhbWUuY29sdW1ucy5jb250YWlucyh0aGlzLnNvcnRCeUNvbHVtbk5hbWUpKVxuICAgICAgcmV0dXJuIFt0aGlzLnNvcnRCeUNvbHVtbk5hbWVdO1xuICAgIGVsc2UgaWYgKGdyaWQgJiYgZ3JpZD8uc29ydEJ5Q29sdW1ucz8ubGVuZ3RoID4gMClcbiAgICAgIHJldHVybiBncmlkLnNvcnRCeUNvbHVtbnMubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldFNvcnRCeVR5cGVzKCk6IGJvb2xlYW5bXSB7XG4gICAgY29uc3QgZ3JpZCA9IHRoaXMuZ2V0R3JpZCgpO1xuICAgIGlmICh0aGlzLnNvcnRCeUNvbHVtbk5hbWUgJiYgdGhpcy5kYXRhRnJhbWUuY29sdW1ucy5jb250YWlucyh0aGlzLnNvcnRCeUNvbHVtbk5hbWUpKVxuICAgICAgcmV0dXJuIFt0aGlzLnNvcnRBc2NlbmRpbmddO1xuICAgIGVsc2UgaWYgKGdyaWQgJiYgZ3JpZD8uc29ydEJ5Q29sdW1ucz8ubGVuZ3RoID4gMClcbiAgICAgIHJldHVybiBncmlkLnNvcnRUeXBlcztcbiAgICBlbHNlXG4gICAgICByZXR1cm4gW107XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgZ3JpZCA9IHRoaXMuZ2V0R3JpZCgpO1xuXG4gICAgaWYgKCF0aGlzLnNob3dGaXhlZFJvd3MpIHtcbiAgICAgIHRoaXMuaW5kZXhlcyA9IFtdO1xuICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdGVkUm93cyAmJiB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24udHJ1ZUNvdW50ID4gMCkge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25BbmRGaWx0ZXIgPSB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uY2xvbmUoKS5hbmQodGhpcy5kYXRhRnJhbWUuZmlsdGVyKTtcbiAgICAgICAgaWYgKHRoaXMuc29ydEJ5Q29sdW1uTmFtZSAmJiB0aGlzLmRhdGFGcmFtZS5jb2x1bW5zLmNvbnRhaW5zKHRoaXMuc29ydEJ5Q29sdW1uTmFtZSkpXG4gICAgICAgICAgdGhpcy5pbmRleGVzID0gdGhpcy5kYXRhRnJhbWUuZ2V0U29ydGVkT3JkZXIoW3RoaXMuc29ydEJ5Q29sdW1uTmFtZV0sIFt0aGlzLnNvcnRBc2NlbmRpbmddLCBzZWxlY3Rpb25BbmRGaWx0ZXIpO1xuICAgICAgICBlbHNlIGlmIChncmlkICYmIGdyaWQ/LnNvcnRCeUNvbHVtbnM/Lmxlbmd0aCA+IDApXG4gICAgICAgICAgdGhpcy5pbmRleGVzID0gdGhpcy5kYXRhRnJhbWUuZ2V0U29ydGVkT3JkZXIoZ3JpZC5zb3J0QnlDb2x1bW5zLCBncmlkLnNvcnRUeXBlcywgc2VsZWN0aW9uQW5kRmlsdGVyKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMuaW5kZXhlcyA9IHNlbGVjdGlvbkFuZEZpbHRlci5nZXRTZWxlY3RlZEluZGV4ZXMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1aS5lbXB0eSh0aGlzLmNvbHVtbkhlYWRlcnNEaXYpO1xuXG4gICAgdGhpcy5yZW5kZXJIZWFkZXIoKTtcblxuICAgIHRoaXMudmlydHVhbFZpZXcuc2V0RGF0YShcbiAgICAgIHRoaXMuaW5kZXhlcy5sZW5ndGggKyAodGhpcy5zaG93Q3VycmVudFJvdyA/IDEgOiAwKSArICh0aGlzLnNob3dNb3VzZU92ZXJSb3cgPyAxIDogMCksXG4gICAgICAoaTogbnVtYmVyKSA9PiB0aGlzLnJlbmRlckZvcm0oaSkpO1xuICB9XG59XG4iXX0=