mmhglobal-dynamicform 2.15.0 → 2.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,6 +3,11 @@
3
3
  This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.2.13.
4
4
 
5
5
  ## Changelog
6
+ `2.15.2`<br/>
7
+ [ztree] - Fix setValues not able to update scope variable.
8
+
9
+ `2.15.1`<br/>
10
+ [ztree] - Fix isChecked not able to retrieve field data scope.
6
11
 
7
12
  `2.15.0`<br/>
8
13
  [ztree] - Modify checkOnClick to default false and configurable by setting ToggleCheckboxOnNodeClick property using boolean. <br/>
@@ -88,6 +88,18 @@ export class ZtreeComponent extends DataListingFieldBase {
88
88
  this.collapseAll = () => {
89
89
  this.state.expandedkeys = [];
90
90
  };
91
+ // Custom logic handling Indeterminate state when custom data item property is persisted
92
+ this.isChecked = (dataItem, index) => {
93
+ if (this.data.TreeViewCheckboxConfiguration) {
94
+ if (this.containsItem(dataItem)) {
95
+ return "checked";
96
+ }
97
+ if (this.isIndeterminate(dataItem.Value)) {
98
+ return "indeterminate";
99
+ }
100
+ return "none";
101
+ }
102
+ };
91
103
  }
92
104
  ngOnInit() {
93
105
  super.initComponent().subscribe(() => {
@@ -442,14 +454,14 @@ export class ZtreeComponent extends DataListingFieldBase {
442
454
  }
443
455
  return checkboxConfiguration;
444
456
  }
445
- setValues(data, targetArray, defaultValue = []) {
446
- targetArray = data ? (Array.isArray(data) ? data : [data]) : defaultValue;
457
+ setValues(data, targetVariable, defaultValue = []) {
458
+ this[targetVariable] = data ? (Array.isArray(data) ? data : [data]) : defaultValue;
447
459
  }
448
460
  setCheckedValues(data) {
449
- this.setValues(data, this.checkedKeys);
461
+ this.setValues(data, 'checkedKeys');
450
462
  }
451
463
  setDisabledCheckBox(data) {
452
- this.setValues(data, this.disabledCheckBoxKeys);
464
+ this.setValues(data, 'disabledCheckBoxKeys');
453
465
  }
454
466
  get checkableSettings() {
455
467
  if (!!this.data.TreeViewCheckboxConfiguration) {
@@ -488,17 +500,6 @@ export class ZtreeComponent extends DataListingFieldBase {
488
500
  }
489
501
  return [];
490
502
  }
491
- isChecked(dataItem, index) {
492
- if (this.data.TreeViewCheckboxConfiguration) {
493
- if (this.containsItem(dataItem)) {
494
- return "checked";
495
- }
496
- if (this.isIndeterminate(dataItem.Value)) {
497
- return "indeterminate";
498
- }
499
- return "none";
500
- }
501
- }
502
503
  containsItem(item) {
503
504
  return this.checkedKeys.indexOf(item[this.data.SelectOptions]) > -1;
504
505
  }
@@ -523,4 +524,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
523
524
  type: ViewChild,
524
525
  args: ["nodetemplate", { static: true }]
525
526
  }] } });
526
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQU94RiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFcEYsT0FBTyxFQUE2QyxnQkFBZ0IsRUFBOEQsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7O0FBUzFKLE1BQU0sT0FBTyxjQUFlLFNBQVEsb0JBQW9CO0lBZ0J0RCxZQUNTLGdCQUFtQztRQUUxQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUZoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBZDVDLFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsa0JBQWEsR0FBZSxFQUFFLENBQUM7UUFDL0IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNaLFVBQUssR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM3QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIseUJBQW9CLEdBQVUsRUFBRSxDQUFDO1FBQ2pDLGNBQVMsR0FBdUIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDbkQsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNWLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUM1QixpQkFBWSxHQUFHLElBQUksQ0FBQztRQTRLNUIsb0RBQW9EO1FBQ3BELGtFQUFrRTtRQUNsRSxzQ0FBc0M7UUFDdEMsR0FBRztRQUVILDJCQUEyQjtRQUNwQixlQUFVLEdBQUcsQ0FBQyxRQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDbkQsc0JBQXNCO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25ELGVBQWU7UUFDakIsQ0FBQyxDQUFBO1FBRU0sZUFBVSxHQUFHLENBQUMsS0FBYSxFQUFFLEtBQWEsRUFBRSxhQUFzQixFQUFFLEVBQUU7WUFDM0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRWhCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRW5ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDN0IsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2FBQzNCO1lBQ0QsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQ3JCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFBO1FBRU0saUJBQVksR0FBRyxDQUFDLEtBQWEsRUFBRSxLQUFhLEVBQUUsY0FBdUIsRUFBRSxFQUFFO1lBQzlFLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVoQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVuRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQzdCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLGNBQWMsRUFBRTtnQkFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO29CQUN2QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN6QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7b0JBQ2hCLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTt3QkFDckIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN0QyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckMsQ0FBQyxDQUFDLENBQUE7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxRQUFRLEdBQUcsS0FBSyxDQUFDO2FBQ2xCO1lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMzRCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQWlCTSxjQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ3BDO1FBQ0gsQ0FBQyxDQUFBO1FBRU0sZ0JBQVcsR0FBRyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQTtJQTFQRCxDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ25DLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDO1lBQzFELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUVqRSxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUF3QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RyxJQUFJLGdCQUFnQixFQUFFO2dCQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDbEI7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQXVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBMEIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFbEosSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNiLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVPLDhCQUE4QixDQUFDLEtBQVU7UUFDL0MsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDM0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDN0IsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDakQ7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNuQyxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFO2dCQUM3QixJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pEO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7U0FDakI7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFhLEVBQUUsSUFBWSxFQUFFLEtBQWE7UUFDcEQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDN0QsSUFBSSxFQUNKLElBQUksQ0FBQyxZQUFZLENBQ2xCLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLDhDQUE4QyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUM1RyxPQUFPO2FBQ1I7WUFFRCxPQUFPLGVBQWUsQ0FBQztnQkFDckIsUUFBUTtnQkFDUixJQUFJO2dCQUNKLEtBQUs7YUFDaUIsQ0FBQyxDQUFDO1NBQzNCO2FBQU07WUFDTCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2lCQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUM7aUJBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLE9BQWM7UUFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDO1FBRWxHLE1BQU0sV0FBVyxHQUFVLEVBQUUsQ0FBQztRQUM5QixNQUFNLFNBQVMsR0FBUSxFQUFFLENBQUM7UUFDMUIsTUFBTSxZQUFZLEdBQVUsRUFBRSxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDZixXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNyQjtpQkFBTTtnQkFDTCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3pCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO3dCQUNyQixVQUFVLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztxQkFDdkI7b0JBQ0QsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNyQjtxQkFBTTtvQkFDTCxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN0QjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUN6QixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN6QyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3JCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFVO1FBQzFCLElBQUksVUFBNEIsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN6QixLQUFLLFNBQVM7b0JBQ1osVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNqQyxNQUFNO2dCQUNSLEtBQUssWUFBWTtvQkFDZixVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQ3BDLE1BQU07YUFDVDtTQUNGO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUNwQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUN0QixJQUFJLEVBQUUseUJBQXlCO1lBQy9CLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUTtZQUNwQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5SCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEc7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFTO1FBQ2hDLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekQ7YUFDSTtZQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzVCLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBOERNLGVBQWUsQ0FBQyxJQUFTLEVBQUUsS0FBYSxFQUFFLEdBQVcsRUFBRSxLQUFhO1FBQ3pFLElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7U0FDakI7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQVMsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxFQUFFO2dCQUNwRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMxQixNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDaEQ7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFhTyxhQUFhLENBQUMsSUFBUyxFQUFFLEdBQVc7UUFDMUMsSUFBSSxHQUFHLEVBQUU7WUFDUCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztTQUNqQjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBUyxFQUFFLEVBQUU7WUFDakMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ2hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sY0FBYyxDQUFDLElBQUk7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRU0sWUFBWSxDQUFDLElBQUk7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU0sb0JBQW9CO1FBQ3pCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUM7UUFFbkUsSUFBSSxlQUFlLEVBQUU7WUFDbkIsTUFBTSxNQUFNLEdBQUcsT0FBTyxlQUFlLEtBQUssUUFBUTtnQkFDaEQsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDN0QsQ0FBQyxDQUFDLGVBQWUsQ0FBQztZQUVwQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQzthQUNsQztTQUNGO0lBQ0gsQ0FBQztJQUNELFlBQVk7SUFFWix1QkFBdUI7SUFDdkIsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4QixNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakYsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVLEVBQUU7Z0JBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakQsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pCO1lBQ0QsT0FBTztTQUNSO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFVLEVBQUUsUUFBYSxFQUFFLElBQVksRUFBRSxLQUFhO1FBQzlELElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzlCLDJCQUEyQjtRQUMzQiw2QkFBNkI7UUFDN0IscUZBQXFGO1FBQ3JGLHNDQUFzQztRQUN0Qyx3REFBd0Q7UUFDeEQsb0RBQW9EO1FBQ3BELE1BQU07UUFDTixZQUFZO1FBQ1osSUFBSTtJQUNOLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVSxFQUFFLFFBQWEsRUFBRSxJQUFZLEVBQUUsS0FBYTtRQUNqRSxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQXdCO1FBQ3JDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO1lBQ2pDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUN6RCxJQUFJLEVBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQ2pCLENBQUM7UUFDRixJQUFJLE9BQU8sV0FBVyxLQUFLLFVBQVUsRUFBRTtZQUNyQyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQjtRQUVELDRDQUE0QztRQUM1QyxzR0FBc0c7UUFDdEcsNkJBQTZCO1FBQzdCLElBQUk7SUFDTixDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBd0I7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLHNDQUFzQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0MseUJBQXlCO1FBQ3pCLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUN0QixJQUFJLEVBQUUseUJBQXlCO1lBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDMUIsSUFBSSxFQUFFLE1BQU07U0FDWSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLE1BQWtCLEVBQUUsTUFBa0I7UUFDbEUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNqQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMxQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDOUM7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFDdkIsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO2dCQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO0lBQ3hDLENBQUM7SUFFTSxjQUFjLENBQUMsUUFBUSxHQUFHLElBQUk7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUM7SUFDM0MsQ0FBQztJQUNELFlBQVk7SUFFWiwyQ0FBMkM7SUFDcEMsV0FBVztRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQWE7UUFDL0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0U7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdEOztnQkFFQyxJQUFJLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDL0Q7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdkQsSUFBSSxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLFNBQWM7UUFDakMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xDLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQjtRQUNELElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN4QyxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUI7UUFDRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEMsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxTQUFTLEVBQUU7WUFDYixPQUFPLFNBQVMsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFTyxNQUFNLENBQUMsS0FBWSxFQUFFLElBQVk7UUFDdkMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2hDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNsQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2hCO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFL0MsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDdkIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUN0QixVQUFVLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztvQkFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDdEI7YUFDRjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVPLFFBQVEsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUN6QyxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELFlBQVk7SUFFWixrQkFBa0I7SUFDVixnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRTtZQUM3QyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBRTlELElBQUkscUJBQXFCLENBQUMsY0FBYyxFQUFFO2dCQUN4QyxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN6RyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDckM7WUFFRCxJQUFJLHFCQUFxQixDQUFDLGNBQWMsRUFBRTtnQkFDeEMsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDMUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLElBQUkscUJBQW9ELENBQUM7UUFFekQsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEtBQUssUUFBUSxFQUFFO1lBQy9ELCtFQUErRTtZQUMvRSxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0c7YUFDSTtZQUNILHlEQUF5RDtZQUN6RCxxQkFBcUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDO1NBQ2pFO1FBRUQsT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDO0lBRU0sU0FBUyxDQUFDLElBQVMsRUFBRSxXQUFrQixFQUFFLGVBQXNCLEVBQUU7UUFDdEUsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQzVFLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxJQUFTO1FBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sbUJBQW1CLENBQUMsSUFBUztRQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDMUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRTtZQUM3QyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQzlELE1BQU0saUJBQWlCLEdBQUc7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDLG9DQUFvQztnQkFDekUsYUFBYSxFQUFFLENBQUMscUJBQXFCLENBQUMsK0JBQStCO2dCQUNyRSxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQywrQkFBK0I7Z0JBQzVFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUTtnQkFDbEUsWUFBWSxFQUFFLHFCQUFxQixDQUFDLHlCQUF5QjthQUN6QyxDQUFDO1lBRXZCLE9BQU8saUJBQWlCLENBQUM7U0FDMUI7UUFDRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVNLGVBQWUsQ0FBQyxLQUFVO1FBQy9CLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7WUFDN0MsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUU5RCxNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7WUFDbEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFeEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUN0QixJQUFJLEVBQUUsd0JBQXdCO2dCQUM5QixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsS0FBSztnQkFDTCxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2FBQzFFLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDNUgsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEc7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTSxTQUFTLENBQUMsUUFBYSxFQUFFLEtBQWE7UUFDM0MsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFO1lBQzNDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDL0IsT0FBTyxTQUFTLENBQUM7YUFDbEI7WUFFRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN4QyxPQUFPLGVBQWUsQ0FBQzthQUN4QjtZQUVELE9BQU8sTUFBTSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLElBQVM7UUFDNUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxlQUFlLENBQUMsUUFBZSxFQUFFO1FBQ3ZDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLElBQUksSUFBSSxDQUFDO1FBRVQsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUMxQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9ELE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ1Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzJHQXhrQlUsY0FBYzsrRkFBZCxjQUFjLG9NQ3BCM0IsNHdIQWtFQTsyRkQ5Q2EsY0FBYztrQkFOMUIsU0FBUzsrQkFDRSxXQUFXO3dHQU13QixZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBUcmVlSXRlbURyb3BFdmVudCwgVHJlZUl0ZW1EcmFnRXZlbnQsIFNlbGVjdGFibGVTZXR0aW5ncywgQ2hlY2thYmxlU2V0dGluZ3MsIENoZWNrZWRTdGF0ZSB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10cmVldmlld1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2RhdGFsaXN0aW5nZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24sIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkZpZWxkLCBaR3JvdXAsIFpUcmVlVGVtcGxhdGVQYXJhbXMgfSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXp0cmVlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96dHJlZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96dHJlZS5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFp0cmVlQ29tcG9uZW50IGV4dGVuZHMgRGF0YUxpc3RpbmdGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIEBWaWV3Q2hpbGQoXCJub2RldGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSkgbm9kZXRlbXBsYXRlOiBFbGVtZW50UmVmO1xyXG5cclxuICBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIG9yaWdpbmFsSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBpc05vZGVEcm9wID0gZmFsc2U7XHJcbiAgcHVibGljIHN0YXRlID0geyBleHBhbmRlZGtleXM6IFtdIH07XHJcbiAgcHVibGljIGl0ZW1JbmRleCA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEtleXM6IGFueVtdID0gW107XHJcbiAgcHVibGljIGNoZWNrZWRLZXlzOiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBkaXNhYmxlZENoZWNrQm94S2V5czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgc2VsZWN0aW9uOiBTZWxlY3RhYmxlU2V0dGluZ3MgPSB7IG1vZGU6IFwic2luZ2xlXCIgfTtcclxuICBwdWJsaWMgbm9kZXMgPSBbXTtcclxuICBwcml2YXRlIGFsbE5vZGVzV2l0b3V0SGllcmFjaHkgPSBbXTtcclxuICBwcml2YXRlIGNsaWNrQWN0TmFtZSA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5pbml0Q29tcG9uZW50KCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5ID0gW107XHJcbiAgICAgIHRoaXMuZ2V0SXRlbXMoKTtcclxuICAgICAgdGhpcy5wb3B1bGF0ZUFsbE5vZGVzV2l0b3V0SGllcmFjaHkodGhpcy5ub2Rlcyk7XHJcbiAgICAgIHRoaXMuaW5pdFNldFNlbGVjdGVkVmFsdWVzKCk7XHJcbiAgICAgIHRoaXMuaW5pdE5vZGVDaGVja2JveCgpO1xyXG4gICAgICB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyA9IHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zIHx8ICdJZCc7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uLm1vZGUgPSB0aGlzLmRhdGEuTXVsdGlwbGUgPyBcIm11bHRpcGxlXCIgOiBcInNpbmdsZVwiO1xyXG5cclxuICAgICAgY29uc3QgaXNFeHBhbmRBbGxOb2RlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuVHJlZXZpZXdFeHBhbmRBbGwgYXMgYW55LCB0aGlzLmdyb3VwKTtcclxuICAgICAgaWYgKGlzRXhwYW5kQWxsTm9kZXMpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSA9IHRoaXMuZGF0YS5pc0hpZGVBbGxBZGROb2RlID8/IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLmRhdGEuaXNIaWRlQWxsUmVtb3ZlTm9kZSA9IHRoaXMuZGF0YS5pc0hpZGVBbGxSZW1vdmVOb2RlID8/IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuaXNIaWRlQWxsUmVtb3ZlTm9kZSBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG5cclxuICAgICAgdGhpcy5zZXREZWZhdWx0RXhwYW5kYWJsZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb3B1bGF0ZUFsbE5vZGVzV2l0b3V0SGllcmFjaHkobm9kZXM6IGFueSkge1xyXG4gICAgaWYgKG5vZGVzICYmIEFycmF5LmlzQXJyYXkobm9kZXMpKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICAgIGlmICghdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5LnNvbWUoeCA9PiB4LklkID09IG5vZGUuSWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsbE5vZGVzV2l0b3V0SGllcmFjaHkucHVzaChub2RlKTtcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUuVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVBbGxOb2Rlc1dpdG91dEhpZXJhY2h5KG5vZGUuVmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbXMoKSB7XHJcbiAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5kYXRhLlZhbHVlO1xyXG4gICAgaWYgKGZpZWxkVmFsdWUpIHtcclxuICAgICAgdGhpcy5ub2RlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuVmFsdWUpO1xyXG4gICAgICBpZiAodGhpcy5kYXRhLlR5cGUgPT0gXCJ6dHJlZVwiKSB7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUFsbE5vZGVzV2l0b3V0SGllcmFjaHkodGhpcy5ub2Rlcyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignenRyZWUgZmllbGQgVmFsdWUgaXMgbm90IHNldCBjb3JyZWN0bHkuICcsIGZpZWxkVmFsdWUpO1xyXG4gICAgICB0aGlzLm5vZGVzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubm9kZXM7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZShkYXRhSXRlbTogYW55LCBkYXRhOiBaRmllbGQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmIChkYXRhLkl0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICBjb25zdCBnZXRUZW1wbGF0ZUZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBkYXRhLkl0ZW1UZW1wbGF0ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWdldFRlbXBsYXRlRnVuYykge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIlRoZSAoXCIgKyBkYXRhLkl0ZW1UZW1wbGF0ZSArIFwiKSBpcyBub3QgZGVmaW5lZCBjb3JyZWN0bHkuIFZhbHVlIGNvbnRhaW5zOiBcIiwgZ2V0VGVtcGxhdGVGdW5jKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBnZXRUZW1wbGF0ZUZ1bmMoe1xyXG4gICAgICAgIGRhdGFJdGVtLFxyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgZ3JvdXBcclxuICAgICAgfSBhcyBaVHJlZVRlbXBsYXRlUGFyYW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGRhdGFJdGVtKVxyXG4gICAgICAgIC5maWx0ZXIoZGF0YSA9PiB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIilcclxuICAgICAgICAuam9pbihcIiwgXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydFRvVHJlZUl0ZW1zKGRhdGFTZXQ6IGFueVtdKSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJUaGlzIG1ldGhvZCBpcyB0byBiZSBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFpDb21wb25lbnRIZWxwZXIuY29udmVydFRvVHJlZUl0ZW1zKClcIik7XHJcblxyXG4gICAgY29uc3QgdG9UcmVlSXRlbXM6IGFueVtdID0gW107XHJcbiAgICBjb25zdCB0cmVlSW5kZXg6IGFueSA9IHt9O1xyXG4gICAgY29uc3QgcGVuZGluZ0l0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgZGF0YVNldC5mb3JFYWNoKChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFkLlBhcmVudElkKSB7XHJcbiAgICAgICAgdG9UcmVlSXRlbXMucHVzaChkKTtcclxuICAgICAgICB0cmVlSW5kZXhbZC5JZF0gPSBkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0cmVlSW5kZXhbZC5QYXJlbnRJZF0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSB0cmVlSW5kZXhbZC5QYXJlbnRJZF07XHJcbiAgICAgICAgICBpZiAoIXBhcmVudEl0ZW0uVmFsdWUpIHtcclxuICAgICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZS5wdXNoKGQpO1xyXG4gICAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGVuZGluZ0l0ZW1zLnB1c2goZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocGVuZGluZ0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgcGVuZGluZ0l0ZW1zLmZvckVhY2goKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0cmVlSW5kZXhbZC5QYXJlbnRJZF0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSB0cmVlSW5kZXhbZC5QYXJlbnRJZF07XHJcbiAgICAgICAgICBwYXJlbnRJdGVtLlZhbHVlLnB1c2goZCk7XHJcbiAgICAgICAgICB0cmVlSW5kZXhbZC5JZF0gPSBkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvVHJlZUl0ZW1zO1xyXG4gIH1cclxuICAgXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHRhcmdldE5hbWU6IGJvb2xlYW4gfCBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5jbGlja0FjdE5hbWUpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLmNsaWNrQWN0TmFtZSkge1xyXG4gICAgICAgIGNhc2UgJ0FkZE5vZGUnOlxyXG4gICAgICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMuZGF0YS5PbkFkZE5vZGU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdSZW1vdmVOb2RlJzpcclxuICAgICAgICAgIHRhcmdldE5hbWUgPSB0aGlzLmRhdGEuT25SZW1vdmVOb2RlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRhcmdldE5hbWUpIHtcclxuICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMuZGF0YS5Pbkl0ZW1DbGljaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrQWN0TmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6IFwienRyZWVfb25TZWxlY3Rpb25DaGFuZ2VcIixcclxuICAgICAgdGFyZ2V0OiB0YXJnZXROYW1lLFxyXG4gICAgICBkYXRhOiBldmVudC5kYXRhSXRlbSxcclxuICAgICAgZXZlbnQ6IGV2ZW50LmluZGV4XHJcbiAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRWYWx1ZXMoKTogQXJyYXk8YW55PiB7XHJcbiAgICBpZiAodGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5ICYmIHRoaXMuc2VsZWN0ZWRLZXlzICYmIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5maWx0ZXIoeCA9PiB0aGlzLnNlbGVjdGVkS2V5cy5pbmNsdWRlcyh4W3RoaXMuZGF0YS5TZWxlY3RPcHRpb25zXSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFNlbGVjdGVkVmFsdWVzKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtkYXRhXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0U2V0U2VsZWN0ZWRWYWx1ZXMoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLlNlbGVjdGVkVmFsdWVzKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyhzZWxlY3RlZE5vZGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vcHVibGljIHNldFJvd0hlaWdodERvdWJsZSh2YWx1ZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAvLyAgY29uc29sZS53YXJuKCdEZXByZWNhdGVkIC0gbm8gbG9uZGVyIG5lZWQgdG8gc2V0IHRoZSBoZWlnaHQnKTtcclxuICAvLyAgLy8gdGhpcy5kYXRhLmRvdWJsZUhlaWdodCA9IHZhbHVlO1xyXG4gIC8vfVxyXG5cclxuICAvLyNyZWdpb24gRXhwYW5kICYgQ29sbGFwc2VcclxuICBwdWJsaWMgaXNFeHBhbmRlZCA9IChkYXRhSXRlbTogYW55LCBpbmRleDogc3RyaW5nKSA9PiB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhpbmRleCk7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuaW5kZXhPZihpbmRleCkgPiAtMTtcclxuICAgIC8vIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4cGFuZE5vZGUgPSAoZmllbGQ6IHN0cmluZywgdmFsdWU6IHN0cmluZywgc2V0QXNTZWxlY3RlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5pdGVtSW5kZXggPSBbXTtcclxuICAgIHRoaXMuZ2V0SXRlbXMoKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaE5vZGVJbmRleCh0aGlzLm5vZGVzLCB2YWx1ZSwgJycsIGZpZWxkKTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbUluZGV4O1xyXG4gICAgaWYgKHNldEFzU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBpbmRleDtcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4QXJyID0gW107XHJcbiAgICBpbmRleC5mb3JFYWNoKChpOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgYXJyID0gaS5zcGxpdCgnXycpO1xyXG4gICAgICBsZXQgaW5kZXhzID0gXCJcIjtcclxuICAgICAgYXJyLmZvckVhY2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgIGluZGV4cyA9IGluZGV4cy5jb25jYXQoXCJfXCIpLmNvbmNhdCh4KTtcclxuICAgICAgICBpbmRleEFyci5wdXNoKGluZGV4cy5zdWJzdHJpbmcoMSkpO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmNvbmNhdChpbmRleEFycik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sbGFwc2VOb2RlID0gKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGNvbGxhcHNlUGFyZW50OiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLml0ZW1JbmRleCA9IFtdO1xyXG4gICAgdGhpcy5nZXRJdGVtcygpO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoTm9kZUluZGV4KHRoaXMubm9kZXMsIHZhbHVlLCAnJywgZmllbGQpO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtSW5kZXg7XHJcbiAgICBsZXQgaW5kZXhBcnIgPSBbXTtcclxuICAgIGlmIChjb2xsYXBzZVBhcmVudCkge1xyXG4gICAgICBpbmRleC5mb3JFYWNoKChpOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBhcnIgPSBpLnNwbGl0KCdfJyk7XHJcbiAgICAgICAgbGV0IGluZGV4cyA9IFwiXCI7XHJcbiAgICAgICAgYXJyLmZvckVhY2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaW5kZXhzID0gaW5kZXhzLmNvbmNhdChcIl9cIikuY29uY2F0KHgpO1xyXG4gICAgICAgICAgaW5kZXhBcnIucHVzaChpbmRleHMuc3Vic3RyaW5nKDEpKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZGV4QXJyID0gaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5maWx0ZXIodiA9PiB7XHJcbiAgICAgIHJldHVybiAhaW5kZXhBcnIuaW5jbHVkZXModik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hOb2RlSW5kZXgobm9kZTogYW55LCB2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgZmllbGQ6IHN0cmluZykge1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBrZXkgPSBrZXkgKyAnXyc7XHJcbiAgICB9XHJcbiAgICBub2RlLmZvckVhY2goKGQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChkW2ZpZWxkXSA9PT0gTnVtYmVyKHZhbHVlKSB8fCBkW2ZpZWxkXSA9PT0gdmFsdWUpIHtcclxuICAgICAgICB0aGlzLml0ZW1JbmRleCA9IHRoaXMuaXRlbUluZGV4LmNvbmNhdChrZXkgKyAnJyArIGkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGQuVmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGtleSArICcnICsgaTtcclxuICAgICAgICB0aGlzLnNlYXJjaE5vZGVJbmRleChkLlZhbHVlLCB2YWx1ZSwgaywgZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmRBbGwgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmdldEl0ZW1zKCk7XHJcbiAgICBpZiAodGhpcy5ub2Rlcykge1xyXG4gICAgICB0aGlzLmV4cGFuZEFsbE5vZGUodGhpcy5ub2RlcywgJycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxhcHNlQWxsID0gKCkgPT4ge1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwYW5kQWxsTm9kZShub2RlOiBhbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICBpZiAoa2V5KSB7XHJcbiAgICAgIGtleSA9IGtleSArICdfJztcclxuICAgIH1cclxuICAgIG5vZGUuZm9yRWFjaCgoZDogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZC5WYWx1ZSkpIHtcclxuICAgICAgICBjb25zdCBrID0ga2V5ICsgJycgKyBpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuY29uY2F0KGspO1xyXG4gICAgICAgIHRoaXMuZXhwYW5kQWxsTm9kZShkLlZhbHVlLCBrKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ29sbGFwc2Uobm9kZSkge1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5maWx0ZXIoayA9PiBrICE9PSBub2RlLmluZGV4KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVFeHBhbmQobm9kZSkge1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5jb25jYXQobm9kZS5pbmRleCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVmYXVsdEV4cGFuZGFibGUoKSB7XHJcbiAgICBjb25zdCBleHBhbmRlZERhdGFJZHMgPSB0aGlzLmRhdGEuVHJlZUxpc3RJbml0aWFsbHlFeHBhbmRlZERhdGFJZHM7XHJcblxyXG4gICAgaWYgKGV4cGFuZGVkRGF0YUlkcykge1xyXG4gICAgICBjb25zdCBpZExpc3QgPSB0eXBlb2YgZXhwYW5kZWREYXRhSWRzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGV4cGFuZGVkRGF0YUlkcywgdGhpcy5ncm91cClcclxuICAgICAgICA6IGV4cGFuZGVkRGF0YUlkcztcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGlkTGlzdCkpIHtcclxuICAgICAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IGlkTGlzdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE5vZGUgSGFuZGxpbmdcclxuICBvbkVkaXROb2RlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuT25FZGl0Tm9kZSkge1xyXG4gICAgICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5PbkVkaXROb2RlKTtcclxuICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkFkZE5vZGUoZXZlbnQ6IGFueSwgZGF0YUl0ZW06IGFueSwgZGF0YTogWkZpZWxkLCBncm91cDogWkdyb3VwKSB7XHJcbiAgICB0aGlzLmNsaWNrQWN0TmFtZSA9ICdBZGROb2RlJztcclxuICAgIC8vIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy8gaWYgKHRoaXMuZGF0YS5PbkFkZE5vZGUpIHtcclxuICAgIC8vICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuT25BZGROb2RlKTtcclxuICAgIC8vICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAvLyAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgLy8gICAgIGNhbGxGdW5jKGRhdGFJdGVtLCBkYXRhLCBncm91cCwgZXZlbnQuaW5kZXgpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlTm9kZShldmVudDogYW55LCBkYXRhSXRlbTogYW55LCBkYXRhOiBaRmllbGQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIHRoaXMuY2xpY2tBY3ROYW1lID0gJ1JlbW92ZU5vZGUnO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlTm9kZURyb3AoZXZlbnQ6IFRyZWVJdGVtRHJvcEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkRyYWdnYWJsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgZXZlbnQuc2V0VmFsaWQoZmFsc2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc05vZGVEcm9wID0gdHJ1ZTtcclxuICAgIGNvbnN0IGRyb3BIYW5kbGVyID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICB0aGlzLFxyXG4gICAgICB0aGlzLmRhdGEuT25Ecm9wXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiBkcm9wSGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZHJvcEhhbmRsZXIuYmluZCh0aGlzKTtcclxuICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByZXZlbnQgZHJvcCBpZiBhdHRlbXB0aW5nIHRvIGFkZCB0byBmaWxlXHJcbiAgICAvLyBpZiAoaXNGaWxlKGV2ZW50LmRlc3RpbmF0aW9uSXRlbS5pdGVtLmRhdGFJdGVtLnRleHQpICYmIGV2ZW50LmRyb3BQb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk92ZXIpIHtcclxuICAgIC8vICAgICBldmVudC5zZXRWYWxpZChmYWxzZSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVOb2RlRHJhZ0VuZChldmVudDogVHJlZUl0ZW1EcmFnRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc05vZGVEcm9wKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaXNOb2RlRHJvcCA9IGZhbHNlO1xyXG4gICAgdGhpcy5nZXRJdGVtcygpO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ0l0ZW1zOiAnLCB0aGlzLml0ZW1zKTtcclxuICAgIGNvbnN0IHRhcmdldCA9IFtdO1xyXG4gICAgdGhpcy51cGRhdGVDaGFuZ2VUb0RhdGFTZXQodGhpcy5ub2RlcywgdGFyZ2V0KTtcclxuICAgIC8vIHRoaXMuZGF0YVNldCA9IHRhcmdldDtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZSh0aGlzLmRhdGEuVmFsdWUsIHRhcmdldCwgdGhpcy5ncm91cCk7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6IFwienRyZWUtb25UcmVlTm9kZURyYWdFbmRcIixcclxuICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuT25DaGFuZ2UsXHJcbiAgICAgIGRhdGE6IHRhcmdldFxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDaGFuZ2VUb0RhdGFTZXQoc291cmNlOiBBcnJheTxhbnk+LCB0YXJnZXQ6IEFycmF5PGFueT4pIHtcclxuICAgIHNvdXJjZS5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkLlZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQpKTtcclxuICAgICAgICB0LlZhbHVlID0gW107XHJcbiAgICAgICAgdGFyZ2V0LnB1c2godCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDaGFuZ2VUb0RhdGFTZXQoZC5WYWx1ZSwgdC5WYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgdCA9IE9iamVjdC5hc3NpZ24oe30sIGQpO1xyXG4gICAgICAgIHQuVmFsdWUgPSB0Ll9EYXRhVmFsdWU7XHJcbiAgICAgICAgZGVsZXRlIHQuX0RhdGFWYWx1ZTtcclxuICAgICAgICB0YXJnZXQucHVzaCh0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlkZUFkZE5vZGUoaXNIaWRkZW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSA9IGlzSGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVSZW1vdmVOb2RlKGlzSGlkZGVuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5kYXRhLmlzSGlkZUFsbFJlbW92ZU5vZGUgPSBpc0hpZGRlbjtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBTZWFyY2ggZmVhdHVyZSAtIGZpbHRlcmFibGU6IHRydWVcclxuICBwdWJsaWMgY2xlYXJGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSBbXTtcclxuICB9XHJcbiAgIFxyXG4gIHB1YmxpYyBoYW5kbGVGaWx0ZXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgaWYgKHRoaXMub3JpZ2luYWxJdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSBaQ29tcG9uZW50SGVscGVyLmRlZXBDbG9uZSh0aGlzLml0ZW1zKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFpDb21wb25lbnRIZWxwZXIuZGVlcENsb25lKHRoaXMub3JpZ2luYWxJdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JpZFZhbHVlID0gdGhpcy5maWx0ZXJQcmVmaXgodGhpcy5kYXRhLlZhbHVlKTtcclxuICAgIHRoaXMuZ3JvdXBbZ3JpZFZhbHVlXSA9IHRoaXMuc2VhcmNoKHRoaXMuaXRlbXMsIHZhbHVlKTtcclxuXHJcbiAgICBpZiAoWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eSh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJQcmVmaXgodmFsdWVOYW1lOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZU5hbWUuc3RhcnRzV2l0aCgnekRhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZS5zbGljZSg2KTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZU5hbWUuc3RhcnRzV2l0aCgnZ3JvdXAuekRhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZS5zbGljZSgxMik7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVOYW1lLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWUuc2xpY2UoNik7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVOYW1lKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlYXJjaChpdGVtczogYW55W10sIHRlcm06IHN0cmluZyk6IGFueVtdIHtcclxuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jb250YWlucyhpdGVtLk5hbWUsIHRlcm0pKSB7XHJcbiAgICAgICAgYWNjLnB1c2goaXRlbSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS5WYWx1ZSAmJiBpdGVtLlZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IHRoaXMuc2VhcmNoKGl0ZW0uVmFsdWUsIHRlcm0pO1xyXG5cclxuICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdmFyIGZpbHRlckl0ZW0gPSBpdGVtO1xyXG4gICAgICAgICAgZmlsdGVySXRlbS5WYWx1ZSA9IG5ld0l0ZW1zO1xyXG4gICAgICAgICAgYWNjLnB1c2goZmlsdGVySXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnRhaW5zKHRleHQ6IHN0cmluZywgdGVybTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoKHRlcm0gfHwgXCJcIikudG9Mb3dlckNhc2UoKSkgPj0gMDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBDaGVja2JveFxyXG4gIHByaXZhdGUgaW5pdE5vZGVDaGVja2JveCgpIHtcclxuICAgIGlmICghIXRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbikge1xyXG4gICAgICBjb25zdCBjaGVja2JveENvbmZpZ3VyYXRpb24gPSB0aGlzLmdldENoZWNrYm94Q29uZmlndXJhdGlvbigpO1xyXG5cclxuICAgICAgaWYgKGNoZWNrYm94Q29uZmlndXJhdGlvbi5TZWxlY3RlZFZhbHVlcykge1xyXG4gICAgICAgIGNvbnN0IGNoZWNrZWROb2RlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBjaGVja2JveENvbmZpZ3VyYXRpb24uU2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMuc2V0Q2hlY2tlZFZhbHVlcyhjaGVja2VkTm9kZXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2hlY2tib3hDb25maWd1cmF0aW9uLkRpc2FibGVkVmFsdWVzKSB7XHJcbiAgICAgICAgY29uc3QgZGlzYWJsZWROb2RlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBjaGVja2JveENvbmZpZ3VyYXRpb24uRGlzYWJsZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMuc2V0RGlzYWJsZWRDaGVja0JveChkaXNhYmxlZE5vZGVzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDaGVja2JveENvbmZpZ3VyYXRpb24oKTogVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24ge1xyXG4gICAgbGV0IGNoZWNrYm94Q29uZmlndXJhdGlvbjogVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb247XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEuVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIC8vIElmIENoZWNrYm94Q29uZmlndXJhdGlvbiBpcyBhIHN0cmluZywgcmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSBncm91cCBcclxuICAgICAgY2hlY2tib3hDb25maWd1cmF0aW9uID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbiwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gSWYgQ2hlY2tib3hDb25maWd1cmF0aW9uIGlzIGFuIG9iamVjdCwgdXNlIGl0IGRpcmVjdGx5XHJcbiAgICAgIGNoZWNrYm94Q29uZmlndXJhdGlvbiA9IHRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2hlY2tib3hDb25maWd1cmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZhbHVlcyhkYXRhOiBhbnksIHRhcmdldEFycmF5OiBhbnlbXSwgZGVmYXVsdFZhbHVlOiBhbnlbXSA9IFtdKSB7XHJcbiAgICB0YXJnZXRBcnJheSA9IGRhdGEgPyAoQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV0pIDogZGVmYXVsdFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENoZWNrZWRWYWx1ZXMoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnNldFZhbHVlcyhkYXRhLCB0aGlzLmNoZWNrZWRLZXlzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREaXNhYmxlZENoZWNrQm94KGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5zZXRWYWx1ZXMoZGF0YSwgdGhpcy5kaXNhYmxlZENoZWNrQm94S2V5cyk7XHJcbiAgfVxyXG4gICBcclxuICBwdWJsaWMgZ2V0IGNoZWNrYWJsZVNldHRpbmdzKCk6IENoZWNrYWJsZVNldHRpbmdzIHtcclxuICAgIGlmICghIXRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbikge1xyXG4gICAgICBjb25zdCBjaGVja2JveENvbmZpZ3VyYXRpb24gPSB0aGlzLmdldENoZWNrYm94Q29uZmlndXJhdGlvbigpO1xyXG4gICAgICBjb25zdCBjaGVja2FibGVTZXR0aW5ncyA9IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGNoZWNrUGFyZW50czogIWNoZWNrYm94Q29uZmlndXJhdGlvbi5EaXNhYmxlUGFyZW50QXV0b1NlbGVjdE9uQWxsQ2hpbGRyZW4sXHJcbiAgICAgICAgY2hlY2tDaGlsZHJlbjogIWNoZWNrYm94Q29uZmlndXJhdGlvbi5EaXNhYmxlUGFyZW50U2VsZWN0c0FsbENoaWxkcmVuLFxyXG4gICAgICAgIGNoZWNrRGlzYWJsZWRDaGlsZHJlbjogY2hlY2tib3hDb25maWd1cmF0aW9uLkVuYWJsZURpc2FibGVkQ2hpbGRyZW5TZWxlY3Rpb24sXHJcbiAgICAgICAgbW9kZTogY2hlY2tib3hDb25maWd1cmF0aW9uLlNlbGVjdE11bHRpcGxlID8gJ211bHRpcGxlJyA6ICdzaW5nbGUnLFxyXG4gICAgICAgIGNoZWNrT25DbGljazogY2hlY2tib3hDb25maWd1cmF0aW9uLlRvZ2dsZUNoZWNrYm94T25Ob2RlQ2xpY2ssXHJcbiAgICAgIH0gYXMgQ2hlY2thYmxlU2V0dGluZ3M7XHJcblxyXG4gICAgICByZXR1cm4gY2hlY2thYmxlU2V0dGluZ3M7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGVja2VkQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICghIXRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbikge1xyXG4gICAgICBjb25zdCBjaGVja2JveENvbmZpZ3VyYXRpb24gPSB0aGlzLmdldENoZWNrYm94Q29uZmlndXJhdGlvbigpO1xyXG5cclxuICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IGNoZWNrYm94Q29uZmlndXJhdGlvbi5PbkNoYW5nZTtcclxuICAgICAgY29uc3QgaXNDaGVja2VkID0gdGhpcy5jaGVja2VkS2V5cy5pbmRleE9mKGV2ZW50Lml0ZW0uZGF0YUl0ZW0uSWQpID4gLTE7XHJcblxyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6dHJlZV9PbkNoZWNrYm94Q2hhbmdlXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXROYW1lLFxyXG4gICAgICAgIGV2ZW50LFxyXG4gICAgICAgIGRhdGE6IHsgY2hlY2tlZFZhbHVlOiBpc0NoZWNrZWQsIHNlbGVjdGVkSXRlbTogZXZlbnQuaXRlbS5kYXRhSXRlbSwgZmllbGQ6IHRoaXMuZGF0YSwgY29tcDogdGhpcyB9XHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDaGVja2VkVmFsdWVzKCk6IEFycmF5PGFueT4ge1xyXG4gICAgaWYgKHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeSAmJiB0aGlzLmNoZWNrZWRLZXlzICYmIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5sZW5ndGggPiAwICYmIHRoaXMuY2hlY2tlZEtleXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RPcHRpb25zS2V5ID0gdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnM7XHJcbiAgICAgIHJldHVybiB0aGlzLmFsbE5vZGVzV2l0b3V0SGllcmFjaHkuZmlsdGVyKG5vZGUgPT4gdGhpcy5jaGVja2VkS2V5cy5pbmNsdWRlcyhub2RlW3NlbGVjdE9wdGlvbnNLZXldKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNDaGVja2VkKGRhdGFJdGVtOiBhbnksIGluZGV4OiBzdHJpbmcpOiBDaGVja2VkU3RhdGUge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbikge1xyXG4gICAgICBpZiAodGhpcy5jb250YWluc0l0ZW0oZGF0YUl0ZW0pKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiY2hlY2tlZFwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0luZGV0ZXJtaW5hdGUoZGF0YUl0ZW0uVmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaW5kZXRlcm1pbmF0ZVwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gXCJub25lXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnRhaW5zSXRlbShpdGVtOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrZWRLZXlzLmluZGV4T2YoaXRlbVt0aGlzLmRhdGEuU2VsZWN0T3B0aW9uc10pID4gLTE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzSW5kZXRlcm1pbmF0ZShpdGVtczogYW55W10gPSBbXSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlkeCA9IDA7XHJcbiAgICBsZXQgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoKGl0ZW0gPSBpdGVtc1tpZHhdKSkge1xyXG4gICAgICBpZiAodGhpcy5pc0luZGV0ZXJtaW5hdGUoaXRlbS5WYWx1ZSkgfHwgdGhpcy5jb250YWluc0l0ZW0oaXRlbSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWR4ICs9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8ZGl2IHN0eWxlPVwid2lkdGg6MTAwJVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCIgY2xhc3M9XCJlMXRhZy1zdHlsZVwiXHJcbiAgICAgKm5nSWY9XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIj5cclxuICA8a2VuZG8tdHJlZXZpZXcgW25vZGVzXT1cImdldEl0ZW1zKClcIlxyXG4gICAgICAgICAgICAgICAgICBrZW5kb1RyZWVWaWV3RXhwYW5kYWJsZVxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9UcmVlVmlld1NlbGVjdGFibGVdPVwic2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0RyYWdBbmREcm9wXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZVZpZXdEcmFnQW5kRHJvcEVkaXRpbmdcclxuICAgICAgICAgICAgICAgICAgW2lzRXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiXHJcbiAgICAgICAgICAgICAgICAgIChjb2xsYXBzZSk9XCJoYW5kbGVDb2xsYXBzZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGV4cGFuZCk9XCJoYW5kbGVFeHBhbmQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChub2RlRHJvcCk9XCJoYW5kbGVOb2RlRHJvcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKG5vZGVEcmFnRW5kKT1cImhhbmRsZU5vZGVEcmFnRW5kKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkS2V5cyldPVwic2VsZWN0ZWRLZXlzXCJcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0hpZXJhcmNoeUJpbmRpbmdcclxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW5GaWVsZD1cIlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkPVwiTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzZWxlY3RCeV09XCJkYXRhLlNlbGVjdE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJkYXRhLkZpbHRlcmFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAoZmlsdGVyQ2hhbmdlKT1cImhhbmRsZUZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgW2tlbmRvVHJlZVZpZXdDaGVja2FibGVdPVwiY2hlY2thYmxlU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICBbY2hlY2tCeV09XCJkYXRhLlNlbGVjdE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbKGNoZWNrZWRLZXlzKV09XCJjaGVja2VkS2V5c1wiXHJcbiAgICAgICAgICAgICAgICAgIChjaGVja2VkQ2hhbmdlKT1cIm9uQ2hlY2tlZENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW2tlbmRvVHJlZVZpZXdEaXNhYmxlXT1cImRhdGEuU2VsZWN0T3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtpc0NoZWNrZWRdPVwiaXNDaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgWyhkaXNhYmxlZEtleXMpXT1cImRpc2FibGVkQ2hlY2tCb3hLZXlzXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVQYXJlbnROb2Rlc09ubHldPVwiZGF0YS5EaXNhYmxlUGFyZW50Tm9kZXNPbmx5XCI+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9UcmVlVmlld05vZGVUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0gI25vZGV0ZW1wbGF0ZT5cclxuICAgICAgPGRpdiBjbGFzcz1cInRyZWUtY29udGVudC1jb250YWluZXJcIj5cclxuICAgICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cIiEhZGF0YS5PbkFkZE5vZGUgJiYgIWRhdGEuaXNIaWRlQWxsQWRkTm9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWRkTm9kZSgkZXZlbnQsIGRhdGFJdGVtLCBkYXRhLCBncm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiem9vbTogMC42OyBtYXJnaW46IDAgMCAwIDJweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIiEhZGF0YUl0ZW0uT25BZGROb2RlVmlzaWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImUxdGFnLXN0eWxlMlwiPlxyXG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ3BsdXMnXCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cIiEhZGF0YS5PblJlbW92ZU5vZGUgJiYgIWRhdGEuaXNIaWRlQWxsUmVtb3ZlTm9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlTm9kZSgkZXZlbnQsIGRhdGFJdGVtLCBkYXRhLCBncm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiem9vbTogMC42OyBtYXJnaW46IDAgMCAwIDEwcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIiEhZGF0YUl0ZW0uT25SZW1vdmVOb2RlVmlzaWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUzXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImUxdGFnLXN0eWxlM1wiPlxyXG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ21pbnVzJ1wiPjwvZmEtaWNvbj5cclxuICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tc2VwZXJhdG9yIGUxdGFnLXN0eWxlN1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlN1wiPjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgaWNvbiBvZiBkYXRhSXRlbS5JY29uTGlzdFwiPlxyXG4gICAgICAgICAgPGZhLWljb24gY2xhc3M9XCJlMXRhZy1zdHlsZTUgbGVmdC1pY29uXCIgW2ljb25dPVwiaWNvblwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiPjwvZmEtaWNvbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPGlvbi1sYWJlbCBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTRcIiBjbGFzcz1cImUxdGFnLXN0eWxlNFwiIFtuZ0NsYXNzXT1cImRhdGFJdGVtLmNsYXNzXCI+XHJcbiAgICAgICAgICA8ZGl2IFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNlwiIGNsYXNzPVwiZTF0YWctc3R5bGU2XCIgW2lubmVySFRNTF09XCJnZXRUZW1wbGF0ZShkYXRhSXRlbSwgZGF0YSwgZ3JvdXApIHwgaHRtbFNhbml0aXplXCI+PC9kaXY+XHJcbiAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2tlbmRvLXRyZWV2aWV3PlxyXG48L2Rpdj5cclxuIl19
527
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQU94RiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFcEYsT0FBTyxFQUE2QyxnQkFBZ0IsRUFBOEQsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7O0FBUzFKLE1BQU0sT0FBTyxjQUFlLFNBQVEsb0JBQW9CO0lBZ0J0RCxZQUNTLGdCQUFtQztRQUUxQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUZoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBZDVDLFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsa0JBQWEsR0FBZSxFQUFFLENBQUM7UUFDL0IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNaLFVBQUssR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM3QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIseUJBQW9CLEdBQVUsRUFBRSxDQUFDO1FBQ2pDLGNBQVMsR0FBdUIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDbkQsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNWLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUM1QixpQkFBWSxHQUFHLElBQUksQ0FBQztRQTRLNUIsb0RBQW9EO1FBQ3BELGtFQUFrRTtRQUNsRSxzQ0FBc0M7UUFDdEMsR0FBRztRQUVILDJCQUEyQjtRQUNwQixlQUFVLEdBQUcsQ0FBQyxRQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDbkQsc0JBQXNCO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25ELGVBQWU7UUFDakIsQ0FBQyxDQUFBO1FBRU0sZUFBVSxHQUFHLENBQUMsS0FBYSxFQUFFLEtBQWEsRUFBRSxhQUFzQixFQUFFLEVBQUU7WUFDM0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRWhCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRW5ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDN0IsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2FBQzNCO1lBQ0QsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQ3JCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFBO1FBRU0saUJBQVksR0FBRyxDQUFDLEtBQWEsRUFBRSxLQUFhLEVBQUUsY0FBdUIsRUFBRSxFQUFFO1lBQzlFLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVoQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVuRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQzdCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLGNBQWMsRUFBRTtnQkFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO29CQUN2QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN6QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7b0JBQ2hCLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTt3QkFDckIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN0QyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckMsQ0FBQyxDQUFDLENBQUE7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxRQUFRLEdBQUcsS0FBSyxDQUFDO2FBQ2xCO1lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMzRCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQWlCTSxjQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ3BDO1FBQ0gsQ0FBQyxDQUFBO1FBRU0sZ0JBQVcsR0FBRyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQTtRQTJSRCx3RkFBd0Y7UUFDakYsY0FBUyxHQUFHLENBQUMsUUFBYSxFQUFFLEtBQWEsRUFBZ0IsRUFBRTtZQUNoRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7Z0JBQzNDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDL0IsT0FBTyxTQUFTLENBQUM7aUJBQ2xCO2dCQUVELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3hDLE9BQU8sZUFBZSxDQUFDO2lCQUN4QjtnQkFFRCxPQUFPLE1BQU0sQ0FBQzthQUNmO1FBQ0gsQ0FBQyxDQUFBO0lBbGlCRCxDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ25DLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDO1lBQzFELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUVqRSxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUF3QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RyxJQUFJLGdCQUFnQixFQUFFO2dCQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDbEI7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQXVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBMEIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFbEosSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNiLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVPLDhCQUE4QixDQUFDLEtBQVU7UUFDL0MsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDM0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDN0IsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDakQ7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNuQyxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFO2dCQUM3QixJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pEO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7U0FDakI7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFhLEVBQUUsSUFBWSxFQUFFLEtBQWE7UUFDcEQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDN0QsSUFBSSxFQUNKLElBQUksQ0FBQyxZQUFZLENBQ2xCLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLDhDQUE4QyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUM1RyxPQUFPO2FBQ1I7WUFFRCxPQUFPLGVBQWUsQ0FBQztnQkFDckIsUUFBUTtnQkFDUixJQUFJO2dCQUNKLEtBQUs7YUFDaUIsQ0FBQyxDQUFDO1NBQzNCO2FBQU07WUFDTCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2lCQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUM7aUJBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLE9BQWM7UUFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDO1FBRWxHLE1BQU0sV0FBVyxHQUFVLEVBQUUsQ0FBQztRQUM5QixNQUFNLFNBQVMsR0FBUSxFQUFFLENBQUM7UUFDMUIsTUFBTSxZQUFZLEdBQVUsRUFBRSxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDZixXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNyQjtpQkFBTTtnQkFDTCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3pCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO3dCQUNyQixVQUFVLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztxQkFDdkI7b0JBQ0QsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNyQjtxQkFBTTtvQkFDTCxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN0QjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUN6QixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN6QyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3JCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFVO1FBQzFCLElBQUksVUFBNEIsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN6QixLQUFLLFNBQVM7b0JBQ1osVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNqQyxNQUFNO2dCQUNSLEtBQUssWUFBWTtvQkFDZixVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQ3BDLE1BQU07YUFDVDtTQUNGO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUNwQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUN0QixJQUFJLEVBQUUseUJBQXlCO1lBQy9CLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUTtZQUNwQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5SCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEc7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFTO1FBQ2hDLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekQ7YUFDSTtZQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzVCLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBOERNLGVBQWUsQ0FBQyxJQUFTLEVBQUUsS0FBYSxFQUFFLEdBQVcsRUFBRSxLQUFhO1FBQ3pFLElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7U0FDakI7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQVMsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxFQUFFO2dCQUNwRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMxQixNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDaEQ7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFhTyxhQUFhLENBQUMsSUFBUyxFQUFFLEdBQVc7UUFDMUMsSUFBSSxHQUFHLEVBQUU7WUFDUCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztTQUNqQjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBUyxFQUFFLEVBQUU7WUFDakMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ2hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sY0FBYyxDQUFDLElBQUk7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRU0sWUFBWSxDQUFDLElBQUk7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU0sb0JBQW9CO1FBQ3pCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUM7UUFFbkUsSUFBSSxlQUFlLEVBQUU7WUFDbkIsTUFBTSxNQUFNLEdBQUcsT0FBTyxlQUFlLEtBQUssUUFBUTtnQkFDaEQsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDN0QsQ0FBQyxDQUFDLGVBQWUsQ0FBQztZQUVwQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQzthQUNsQztTQUNGO0lBQ0gsQ0FBQztJQUNELFlBQVk7SUFFWix1QkFBdUI7SUFDdkIsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4QixNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakYsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVLEVBQUU7Z0JBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakQsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pCO1lBQ0QsT0FBTztTQUNSO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFVLEVBQUUsUUFBYSxFQUFFLElBQVksRUFBRSxLQUFhO1FBQzlELElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzlCLDJCQUEyQjtRQUMzQiw2QkFBNkI7UUFDN0IscUZBQXFGO1FBQ3JGLHNDQUFzQztRQUN0Qyx3REFBd0Q7UUFDeEQsb0RBQW9EO1FBQ3BELE1BQU07UUFDTixZQUFZO1FBQ1osSUFBSTtJQUNOLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVSxFQUFFLFFBQWEsRUFBRSxJQUFZLEVBQUUsS0FBYTtRQUNqRSxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQXdCO1FBQ3JDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO1lBQ2pDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUN6RCxJQUFJLEVBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQ2pCLENBQUM7UUFDRixJQUFJLE9BQU8sV0FBVyxLQUFLLFVBQVUsRUFBRTtZQUNyQyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQjtRQUVELDRDQUE0QztRQUM1QyxzR0FBc0c7UUFDdEcsNkJBQTZCO1FBQzdCLElBQUk7SUFDTixDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBd0I7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLHNDQUFzQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0MseUJBQXlCO1FBQ3pCLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUN0QixJQUFJLEVBQUUseUJBQXlCO1lBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDMUIsSUFBSSxFQUFFLE1BQU07U0FDWSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLE1BQWtCLEVBQUUsTUFBa0I7UUFDbEUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNqQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMxQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDOUM7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFDdkIsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO2dCQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO0lBQ3hDLENBQUM7SUFFTSxjQUFjLENBQUMsUUFBUSxHQUFHLElBQUk7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUM7SUFDM0MsQ0FBQztJQUNELFlBQVk7SUFFWiwyQ0FBMkM7SUFDcEMsV0FBVztRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQWE7UUFDL0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0U7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdEOztnQkFFQyxJQUFJLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDL0Q7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdkQsSUFBSSxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLFNBQWM7UUFDakMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xDLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQjtRQUNELElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN4QyxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUI7UUFDRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEMsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxTQUFTLEVBQUU7WUFDYixPQUFPLFNBQVMsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFTyxNQUFNLENBQUMsS0FBWSxFQUFFLElBQVk7UUFDdkMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2hDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNsQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2hCO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFL0MsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDdkIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUN0QixVQUFVLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztvQkFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDdEI7YUFDRjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVPLFFBQVEsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUN6QyxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELFlBQVk7SUFFWixrQkFBa0I7SUFDVixnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRTtZQUM3QyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBRTlELElBQUkscUJBQXFCLENBQUMsY0FBYyxFQUFFO2dCQUN4QyxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN6RyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDckM7WUFFRCxJQUFJLHFCQUFxQixDQUFDLGNBQWMsRUFBRTtnQkFDeEMsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDMUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLElBQUkscUJBQW9ELENBQUM7UUFFekQsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEtBQUssUUFBUSxFQUFFO1lBQy9ELCtFQUErRTtZQUMvRSxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0c7YUFDSTtZQUNILHlEQUF5RDtZQUN6RCxxQkFBcUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDO1NBQ2pFO1FBRUQsT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVMsRUFBRSxjQUFzQixFQUFFLGVBQXNCLEVBQUU7UUFDM0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3JGLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxJQUFTO1FBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxJQUFTO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7WUFDN0MsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUM5RCxNQUFNLGlCQUFpQixHQUFHO2dCQUN4QixPQUFPLEVBQUUsSUFBSTtnQkFDYixZQUFZLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxvQ0FBb0M7Z0JBQ3pFLGFBQWEsRUFBRSxDQUFDLHFCQUFxQixDQUFDLCtCQUErQjtnQkFDckUscUJBQXFCLEVBQUUscUJBQXFCLENBQUMsK0JBQStCO2dCQUM1RSxJQUFJLEVBQUUscUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVE7Z0JBQ2xFLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyx5QkFBeUI7YUFDekMsQ0FBQztZQUV2QixPQUFPLGlCQUFpQixDQUFDO1NBQzFCO1FBQ0QsT0FBTztZQUNMLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQztJQUNKLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBVTtRQUMvQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFO1lBQzdDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFFOUQsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDO1lBQ2xELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXhFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDdEIsSUFBSSxFQUFFLHdCQUF3QjtnQkFDOUIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLEtBQUs7Z0JBQ0wsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTthQUMxRSxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLElBQUksSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDakQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RHO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBaUJPLFlBQVksQ0FBQyxJQUFTO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU8sZUFBZSxDQUFDLFFBQWUsRUFBRTtRQUN2QyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixJQUFJLElBQUksQ0FBQztRQUVULE9BQU8sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMvRCxPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUNWO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzsyR0F6a0JVLGNBQWM7K0ZBQWQsY0FBYyxvTUNwQjNCLDR3SEFrRUE7MkZEOUNhLGNBQWM7a0JBTjFCLFNBQVM7K0JBQ0UsV0FBVzt3R0FNd0IsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgVHJlZUl0ZW1Ecm9wRXZlbnQsIFRyZWVJdGVtRHJhZ0V2ZW50LCBTZWxlY3RhYmxlU2V0dGluZ3MsIENoZWNrYWJsZVNldHRpbmdzLCBDaGVja2VkU3RhdGUgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItdHJlZXZpZXdcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgRGF0YUxpc3RpbmdGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kYXRhbGlzdGluZ2ZpZWxkYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRyZWVWaWV3Q2hlY2tib3hDb25maWd1cmF0aW9uLCBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIFpGaWVsZCwgWkdyb3VwLCBaVHJlZVRlbXBsYXRlUGFyYW1zIH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC16dHJlZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4venRyZWUuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4venRyZWUuY29tcG9uZW50LnNjc3NcIl1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBadHJlZUNvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0aW5nRmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKFwibm9kZXRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pIG5vZGV0ZW1wbGF0ZTogRWxlbWVudFJlZjtcclxuXHJcbiAgaXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBvcmlnaW5hbEl0ZW1zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgaXNOb2RlRHJvcCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzdGF0ZSA9IHsgZXhwYW5kZWRrZXlzOiBbXSB9O1xyXG4gIHB1YmxpYyBpdGVtSW5kZXggPSBbXTtcclxuICBwdWJsaWMgc2VsZWN0ZWRLZXlzOiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBjaGVja2VkS2V5czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgZGlzYWJsZWRDaGVja0JveEtleXM6IGFueVtdID0gW107XHJcbiAgcHVibGljIHNlbGVjdGlvbjogU2VsZWN0YWJsZVNldHRpbmdzID0geyBtb2RlOiBcInNpbmdsZVwiIH07XHJcbiAgcHVibGljIG5vZGVzID0gW107XHJcbiAgcHJpdmF0ZSBhbGxOb2Rlc1dpdG91dEhpZXJhY2h5ID0gW107XHJcbiAgcHJpdmF0ZSBjbGlja0FjdE5hbWUgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjb21wb25lbnRTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoY29tcG9uZW50U2VydmljZSlcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIuaW5pdENvbXBvbmVudCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeSA9IFtdO1xyXG4gICAgICB0aGlzLmdldEl0ZW1zKCk7XHJcbiAgICAgIHRoaXMucG9wdWxhdGVBbGxOb2Rlc1dpdG91dEhpZXJhY2h5KHRoaXMubm9kZXMpO1xyXG4gICAgICB0aGlzLmluaXRTZXRTZWxlY3RlZFZhbHVlcygpO1xyXG4gICAgICB0aGlzLmluaXROb2RlQ2hlY2tib3goKTtcclxuICAgICAgdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMgPSB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyB8fCAnSWQnO1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5tb2RlID0gdGhpcy5kYXRhLk11bHRpcGxlID8gXCJtdWx0aXBsZVwiIDogXCJzaW5nbGVcIjtcclxuXHJcbiAgICAgIGNvbnN0IGlzRXhwYW5kQWxsTm9kZXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLlRyZWV2aWV3RXhwYW5kQWxsIGFzIGFueSwgdGhpcy5ncm91cCk7XHJcbiAgICAgIGlmIChpc0V4cGFuZEFsbE5vZGVzKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5kYXRhLmlzSGlkZUFsbEFkZE5vZGUgPSB0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSA/PyBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLmlzSGlkZUFsbEFkZE5vZGUgYXMgYW55LCB0aGlzLmdyb3VwKTtcclxuICAgICAgdGhpcy5kYXRhLmlzSGlkZUFsbFJlbW92ZU5vZGUgPSB0aGlzLmRhdGEuaXNIaWRlQWxsUmVtb3ZlTm9kZSA/PyBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLmlzSGlkZUFsbFJlbW92ZU5vZGUgYXMgYW55LCB0aGlzLmdyb3VwKTtcclxuXHJcbiAgICAgIHRoaXMuc2V0RGVmYXVsdEV4cGFuZGFibGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZWdpc3RlckNvbXBvbmVudCh0aGlzKTtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcG9wdWxhdGVBbGxOb2Rlc1dpdG91dEhpZXJhY2h5KG5vZGVzOiBhbnkpIHtcclxuICAgIGlmIChub2RlcyAmJiBBcnJheS5pc0FycmF5KG5vZGVzKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5zb21lKHggPT4geC5JZCA9PSBub2RlLklkKSkge1xyXG4gICAgICAgICAgdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5LnB1c2gobm9kZSk7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlLlZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlQWxsTm9kZXNXaXRvdXRIaWVyYWNoeShub2RlLlZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEl0ZW1zKCkge1xyXG4gICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuZGF0YS5WYWx1ZTtcclxuICAgIGlmIChmaWVsZFZhbHVlKSB7XHJcbiAgICAgIHRoaXMubm9kZXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlZhbHVlKTtcclxuICAgICAgaWYgKHRoaXMuZGF0YS5UeXBlID09IFwienRyZWVcIikge1xyXG4gICAgICAgIHRoaXMucG9wdWxhdGVBbGxOb2Rlc1dpdG91dEhpZXJhY2h5KHRoaXMubm9kZXMpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3p0cmVlIGZpZWxkIFZhbHVlIGlzIG5vdCBzZXQgY29ycmVjdGx5LiAnLCBmaWVsZFZhbHVlKTtcclxuICAgICAgdGhpcy5ub2RlcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLm5vZGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGUoZGF0YUl0ZW06IGFueSwgZGF0YTogWkZpZWxkLCBncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoZGF0YS5JdGVtVGVtcGxhdGUpIHtcclxuICAgICAgY29uc3QgZ2V0VGVtcGxhdGVGdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgZGF0YS5JdGVtVGVtcGxhdGVcclxuICAgICAgKTtcclxuICAgICAgaWYgKCFnZXRUZW1wbGF0ZUZ1bmMpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXCJUaGUgKFwiICsgZGF0YS5JdGVtVGVtcGxhdGUgKyBcIikgaXMgbm90IGRlZmluZWQgY29ycmVjdGx5LiBWYWx1ZSBjb250YWluczogXCIsIGdldFRlbXBsYXRlRnVuYyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZ2V0VGVtcGxhdGVGdW5jKHtcclxuICAgICAgICBkYXRhSXRlbSxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIGdyb3VwXHJcbiAgICAgIH0gYXMgWlRyZWVUZW1wbGF0ZVBhcmFtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhkYXRhSXRlbSlcclxuICAgICAgICAuZmlsdGVyKGRhdGEgPT4gdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpXHJcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb1RyZWVJdGVtcyhkYXRhU2V0OiBhbnlbXSkge1xyXG4gICAgY29uc29sZS53YXJuKFwiVGhpcyBtZXRob2QgaXMgdG8gYmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBaQ29tcG9uZW50SGVscGVyLmNvbnZlcnRUb1RyZWVJdGVtcygpXCIpO1xyXG5cclxuICAgIGNvbnN0IHRvVHJlZUl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3QgdHJlZUluZGV4OiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IHBlbmRpbmdJdGVtczogYW55W10gPSBbXTtcclxuICAgIGRhdGFTZXQuZm9yRWFjaCgoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghZC5QYXJlbnRJZCkge1xyXG4gICAgICAgIHRvVHJlZUl0ZW1zLnB1c2goZCk7XHJcbiAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodHJlZUluZGV4W2QuUGFyZW50SWRdKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRJdGVtID0gdHJlZUluZGV4W2QuUGFyZW50SWRdO1xyXG4gICAgICAgICAgaWYgKCFwYXJlbnRJdGVtLlZhbHVlKSB7XHJcbiAgICAgICAgICAgIHBhcmVudEl0ZW0uVmFsdWUgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHBhcmVudEl0ZW0uVmFsdWUucHVzaChkKTtcclxuICAgICAgICAgIHRyZWVJbmRleFtkLklkXSA9IGQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBlbmRpbmdJdGVtcy5wdXNoKGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHBlbmRpbmdJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHBlbmRpbmdJdGVtcy5mb3JFYWNoKChkOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodHJlZUluZGV4W2QuUGFyZW50SWRdKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRJdGVtID0gdHJlZUluZGV4W2QuUGFyZW50SWRdO1xyXG4gICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZS5wdXNoKGQpO1xyXG4gICAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b1RyZWVJdGVtcztcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCB0YXJnZXROYW1lOiBib29sZWFuIHwgc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMuY2xpY2tBY3ROYW1lKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5jbGlja0FjdE5hbWUpIHtcclxuICAgICAgICBjYXNlICdBZGROb2RlJzpcclxuICAgICAgICAgIHRhcmdldE5hbWUgPSB0aGlzLmRhdGEuT25BZGROb2RlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnUmVtb3ZlTm9kZSc6XHJcbiAgICAgICAgICB0YXJnZXROYW1lID0gdGhpcy5kYXRhLk9uUmVtb3ZlTm9kZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0YXJnZXROYW1lKSB7XHJcbiAgICAgIHRhcmdldE5hbWUgPSB0aGlzLmRhdGEuT25JdGVtQ2xpY2s7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja0FjdE5hbWUgPSBudWxsO1xyXG4gICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICB0eXBlOiBcInp0cmVlX29uU2VsZWN0aW9uQ2hhbmdlXCIsXHJcbiAgICAgIHRhcmdldDogdGFyZ2V0TmFtZSxcclxuICAgICAgZGF0YTogZXZlbnQuZGF0YUl0ZW0sXHJcbiAgICAgIGV2ZW50OiBldmVudC5pbmRleFxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNlbGVjdGVkVmFsdWVzKCk6IEFycmF5PGFueT4ge1xyXG4gICAgaWYgKHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeSAmJiB0aGlzLnNlbGVjdGVkS2V5cyAmJiB0aGlzLmFsbE5vZGVzV2l0b3V0SGllcmFjaHkubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkS2V5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFsbE5vZGVzV2l0b3V0SGllcmFjaHkuZmlsdGVyKHggPT4gdGhpcy5zZWxlY3RlZEtleXMuaW5jbHVkZXMoeFt0aGlzLmRhdGEuU2VsZWN0T3B0aW9uc10pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTZWxlY3RlZFZhbHVlcyhkYXRhOiBhbnkpIHtcclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFNldFNlbGVjdGVkVmFsdWVzKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5TZWxlY3RlZFZhbHVlcykge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE5vZGVzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5TZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXMoc2VsZWN0ZWROb2Rlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3B1YmxpYyBzZXRSb3dIZWlnaHREb3VibGUodmFsdWU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgLy8gIGNvbnNvbGUud2FybignRGVwcmVjYXRlZCAtIG5vIGxvbmRlciBuZWVkIHRvIHNldCB0aGUgaGVpZ2h0Jyk7XHJcbiAgLy8gIC8vIHRoaXMuZGF0YS5kb3VibGVIZWlnaHQgPSB2YWx1ZTtcclxuICAvL31cclxuXHJcbiAgLy8jcmVnaW9uIEV4cGFuZCAmIENvbGxhcHNlXHJcbiAgcHVibGljIGlzRXhwYW5kZWQgPSAoZGF0YUl0ZW06IGFueSwgaW5kZXg6IHN0cmluZykgPT4ge1xyXG4gICAgLy8gY29uc29sZS5sb2coaW5kZXgpO1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmluZGV4T2YoaW5kZXgpID4gLTE7XHJcbiAgICAvLyByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmROb2RlID0gKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHNldEFzU2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuaXRlbUluZGV4ID0gW107XHJcbiAgICB0aGlzLmdldEl0ZW1zKCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hOb2RlSW5kZXgodGhpcy5ub2RlcywgdmFsdWUsICcnLCBmaWVsZCk7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1JbmRleDtcclxuICAgIGlmIChzZXRBc1NlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gaW5kZXg7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleEFyciA9IFtdO1xyXG4gICAgaW5kZXguZm9yRWFjaCgoaTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFyciA9IGkuc3BsaXQoJ18nKTtcclxuICAgICAgbGV0IGluZGV4cyA9IFwiXCI7XHJcbiAgICAgIGFyci5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICBpbmRleHMgPSBpbmRleHMuY29uY2F0KFwiX1wiKS5jb25jYXQoeCk7XHJcbiAgICAgICAgaW5kZXhBcnIucHVzaChpbmRleHMuc3Vic3RyaW5nKDEpKTtcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5jb25jYXQoaW5kZXhBcnIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxhcHNlTm9kZSA9IChmaWVsZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBjb2xsYXBzZVBhcmVudDogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5pdGVtSW5kZXggPSBbXTtcclxuICAgIHRoaXMuZ2V0SXRlbXMoKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaE5vZGVJbmRleCh0aGlzLm5vZGVzLCB2YWx1ZSwgJycsIGZpZWxkKTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbUluZGV4O1xyXG4gICAgbGV0IGluZGV4QXJyID0gW107XHJcbiAgICBpZiAoY29sbGFwc2VQYXJlbnQpIHtcclxuICAgICAgaW5kZXguZm9yRWFjaCgoaTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXJyID0gaS5zcGxpdCgnXycpO1xyXG4gICAgICAgIGxldCBpbmRleHMgPSBcIlwiO1xyXG4gICAgICAgIGFyci5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGluZGV4cyA9IGluZGV4cy5jb25jYXQoXCJfXCIpLmNvbmNhdCh4KTtcclxuICAgICAgICAgIGluZGV4QXJyLnB1c2goaW5kZXhzLnN1YnN0cmluZygxKSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbmRleEFyciA9IGluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuZmlsdGVyKHYgPT4ge1xyXG4gICAgICByZXR1cm4gIWluZGV4QXJyLmluY2x1ZGVzKHYpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VhcmNoTm9kZUluZGV4KG5vZGU6IGFueSwgdmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGlmIChrZXkpIHtcclxuICAgICAga2V5ID0ga2V5ICsgJ18nO1xyXG4gICAgfVxyXG4gICAgbm9kZS5mb3JFYWNoKChkOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAoZFtmaWVsZF0gPT09IE51bWJlcih2YWx1ZSkgfHwgZFtmaWVsZF0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtSW5kZXggPSB0aGlzLml0ZW1JbmRleC5jb25jYXQoa2V5ICsgJycgKyBpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkLlZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IGsgPSBrZXkgKyAnJyArIGk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hOb2RlSW5kZXgoZC5WYWx1ZSwgdmFsdWUsIGssIGZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kQWxsID0gKCkgPT4ge1xyXG4gICAgdGhpcy5nZXRJdGVtcygpO1xyXG4gICAgaWYgKHRoaXMubm9kZXMpIHtcclxuICAgICAgdGhpcy5leHBhbmRBbGxOb2RlKHRoaXMubm9kZXMsICcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2xsYXBzZUFsbCA9ICgpID0+IHtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGFuZEFsbE5vZGUobm9kZTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBrZXkgPSBrZXkgKyAnXyc7XHJcbiAgICB9XHJcbiAgICBub2RlLmZvckVhY2goKGQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGQuVmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGtleSArICcnICsgaTtcclxuICAgICAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmNvbmNhdChrKTtcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbE5vZGUoZC5WYWx1ZSwgayk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNvbGxhcHNlKG5vZGUpIHtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuZmlsdGVyKGsgPT4gayAhPT0gbm9kZS5pbmRleCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRXhwYW5kKG5vZGUpIHtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuY29uY2F0KG5vZGUuaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERlZmF1bHRFeHBhbmRhYmxlKCkge1xyXG4gICAgY29uc3QgZXhwYW5kZWREYXRhSWRzID0gdGhpcy5kYXRhLlRyZWVMaXN0SW5pdGlhbGx5RXhwYW5kZWREYXRhSWRzO1xyXG5cclxuICAgIGlmIChleHBhbmRlZERhdGFJZHMpIHtcclxuICAgICAgY29uc3QgaWRMaXN0ID0gdHlwZW9mIGV4cGFuZGVkRGF0YUlkcyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShleHBhbmRlZERhdGFJZHMsIHRoaXMuZ3JvdXApXHJcbiAgICAgICAgOiBleHBhbmRlZERhdGFJZHM7XHJcblxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpZExpc3QpKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSBpZExpc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBOb2RlIEhhbmRsaW5nXHJcbiAgb25FZGl0Tm9kZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLk9uRWRpdE5vZGUpIHtcclxuICAgICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuT25FZGl0Tm9kZSk7XHJcbiAgICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgICBjYWxsRnVuYyhldmVudCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25BZGROb2RlKGV2ZW50OiBhbnksIGRhdGFJdGVtOiBhbnksIGRhdGE6IFpGaWVsZCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgdGhpcy5jbGlja0FjdE5hbWUgPSAnQWRkTm9kZSc7XHJcbiAgICAvLyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vIGlmICh0aGlzLmRhdGEuT25BZGROb2RlKSB7XHJcbiAgICAvLyAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uQWRkTm9kZSk7XHJcbiAgICAvLyAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgLy8gICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgIC8vICAgICBjYWxsRnVuYyhkYXRhSXRlbSwgZGF0YSwgZ3JvdXAsIGV2ZW50LmluZGV4KTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZU5vZGUoZXZlbnQ6IGFueSwgZGF0YUl0ZW06IGFueSwgZGF0YTogWkZpZWxkLCBncm91cDogWkdyb3VwKSB7XHJcbiAgICB0aGlzLmNsaWNrQWN0TmFtZSA9ICdSZW1vdmVOb2RlJztcclxuICB9XHJcblxyXG4gIGhhbmRsZU5vZGVEcm9wKGV2ZW50OiBUcmVlSXRlbURyb3BFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5EcmFnZ2FibGUgPT09IGZhbHNlKSB7XHJcbiAgICAgIGV2ZW50LnNldFZhbGlkKGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNOb2RlRHJvcCA9IHRydWU7XHJcbiAgICBjb25zdCBkcm9wSGFuZGxlciA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgdGhpcyxcclxuICAgICAgdGhpcy5kYXRhLk9uRHJvcFxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgZHJvcEhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBjb25zdCBjYWxsRnVuYyA9IGRyb3BIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBwcmV2ZW50IGRyb3AgaWYgYXR0ZW1wdGluZyB0byBhZGQgdG8gZmlsZVxyXG4gICAgLy8gaWYgKGlzRmlsZShldmVudC5kZXN0aW5hdGlvbkl0ZW0uaXRlbS5kYXRhSXRlbS50ZXh0KSAmJiBldmVudC5kcm9wUG9zaXRpb24gPT09IERyb3BQb3NpdGlvbi5PdmVyKSB7XHJcbiAgICAvLyAgICAgZXZlbnQuc2V0VmFsaWQoZmFsc2UpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlTm9kZURyYWdFbmQoZXZlbnQ6IFRyZWVJdGVtRHJhZ0V2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNOb2RlRHJvcCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzTm9kZURyb3AgPSBmYWxzZTtcclxuICAgIHRoaXMuZ2V0SXRlbXMoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdJdGVtczogJywgdGhpcy5pdGVtcyk7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBbXTtcclxuICAgIHRoaXMudXBkYXRlQ2hhbmdlVG9EYXRhU2V0KHRoaXMubm9kZXMsIHRhcmdldCk7XHJcbiAgICAvLyB0aGlzLmRhdGFTZXQgPSB0YXJnZXQ7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUodGhpcy5kYXRhLlZhbHVlLCB0YXJnZXQsIHRoaXMuZ3JvdXApO1xyXG4gICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICB0eXBlOiBcInp0cmVlLW9uVHJlZU5vZGVEcmFnRW5kXCIsXHJcbiAgICAgIHRhcmdldDogdGhpcy5kYXRhLk9uQ2hhbmdlLFxyXG4gICAgICBkYXRhOiB0YXJnZXRcclxuICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQ2hhbmdlVG9EYXRhU2V0KHNvdXJjZTogQXJyYXk8YW55PiwgdGFyZ2V0OiBBcnJheTxhbnk+KSB7XHJcbiAgICBzb3VyY2UuZm9yRWFjaChkID0+IHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZC5WYWx1ZSkpIHtcclxuICAgICAgICBjb25zdCB0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkKSk7XHJcbiAgICAgICAgdC5WYWx1ZSA9IFtdO1xyXG4gICAgICAgIHRhcmdldC5wdXNoKHQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2hhbmdlVG9EYXRhU2V0KGQuVmFsdWUsIHQuVmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHQgPSBPYmplY3QuYXNzaWduKHt9LCBkKTtcclxuICAgICAgICB0LlZhbHVlID0gdC5fRGF0YVZhbHVlO1xyXG4gICAgICAgIGRlbGV0ZSB0Ll9EYXRhVmFsdWU7XHJcbiAgICAgICAgdGFyZ2V0LnB1c2godCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVBZGROb2RlKGlzSGlkZGVuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5kYXRhLmlzSGlkZUFsbEFkZE5vZGUgPSBpc0hpZGRlbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoaWRlUmVtb3ZlTm9kZShpc0hpZGRlbiA9IHRydWUpIHtcclxuICAgIHRoaXMuZGF0YS5pc0hpZGVBbGxSZW1vdmVOb2RlID0gaXNIaWRkZW47XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gU2VhcmNoIGZlYXR1cmUgLSBmaWx0ZXJhYmxlOiB0cnVlXHJcbiAgcHVibGljIGNsZWFyRmlsdGVyKCkge1xyXG4gICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgdGhpcy5vcmlnaW5hbEl0ZW1zID0gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLml0ZW1zID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIGlmICh0aGlzLm9yaWdpbmFsSXRlbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1zID0gWkNvbXBvbmVudEhlbHBlci5kZWVwQ2xvbmUodGhpcy5pdGVtcyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBaQ29tcG9uZW50SGVscGVyLmRlZXBDbG9uZSh0aGlzLm9yaWdpbmFsSXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdyaWRWYWx1ZSA9IHRoaXMuZmlsdGVyUHJlZml4KHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICB0aGlzLmdyb3VwW2dyaWRWYWx1ZV0gPSB0aGlzLnNlYXJjaCh0aGlzLml0ZW1zLCB2YWx1ZSk7XHJcblxyXG4gICAgaWYgKFpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJGaWx0ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVyUHJlZml4KHZhbHVlTmFtZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWVOYW1lLnN0YXJ0c1dpdGgoJ3pEYXRhLicpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWUuc2xpY2UoNik7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVOYW1lLnN0YXJ0c1dpdGgoJ2dyb3VwLnpEYXRhLicpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWUuc2xpY2UoMTIpO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlTmFtZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVOYW1lLnNsaWNlKDYpO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlTmFtZSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVOYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWFyY2goaXRlbXM6IGFueVtdLCB0ZXJtOiBzdHJpbmcpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29udGFpbnMoaXRlbS5OYW1lLCB0ZXJtKSkge1xyXG4gICAgICAgIGFjYy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uVmFsdWUgJiYgaXRlbS5WYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgbmV3SXRlbXMgPSB0aGlzLnNlYXJjaChpdGVtLlZhbHVlLCB0ZXJtKTtcclxuXHJcbiAgICAgICAgaWYgKG5ld0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHZhciBmaWx0ZXJJdGVtID0gaXRlbTtcclxuICAgICAgICAgIGZpbHRlckl0ZW0uVmFsdWUgPSBuZXdJdGVtcztcclxuICAgICAgICAgIGFjYy5wdXNoKGZpbHRlckl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb250YWlucyh0ZXh0OiBzdHJpbmcsIHRlcm06IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRleHQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCh0ZXJtIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCkpID49IDA7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gQ2hlY2tib3hcclxuICBwcml2YXRlIGluaXROb2RlQ2hlY2tib3goKSB7XHJcbiAgICBpZiAoISF0aGlzLmRhdGEuVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgY29uc3QgY2hlY2tib3hDb25maWd1cmF0aW9uID0gdGhpcy5nZXRDaGVja2JveENvbmZpZ3VyYXRpb24oKTtcclxuXHJcbiAgICAgIGlmIChjaGVja2JveENvbmZpZ3VyYXRpb24uU2VsZWN0ZWRWYWx1ZXMpIHtcclxuICAgICAgICBjb25zdCBjaGVja2VkTm9kZXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgY2hlY2tib3hDb25maWd1cmF0aW9uLlNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgICB0aGlzLnNldENoZWNrZWRWYWx1ZXMoY2hlY2tlZE5vZGVzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNoZWNrYm94Q29uZmlndXJhdGlvbi5EaXNhYmxlZFZhbHVlcykge1xyXG4gICAgICAgIGNvbnN0IGRpc2FibGVkTm9kZXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgY2hlY2tib3hDb25maWd1cmF0aW9uLkRpc2FibGVkVmFsdWVzKTtcclxuICAgICAgICB0aGlzLnNldERpc2FibGVkQ2hlY2tCb3goZGlzYWJsZWROb2Rlcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2hlY2tib3hDb25maWd1cmF0aW9uKCk6IFRyZWVWaWV3Q2hlY2tib3hDb25maWd1cmF0aW9uIHtcclxuICAgIGxldCBjaGVja2JveENvbmZpZ3VyYXRpb246IFRyZWVWaWV3Q2hlY2tib3hDb25maWd1cmF0aW9uO1xyXG5cclxuICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhLlRyZWVWaWV3Q2hlY2tib3hDb25maWd1cmF0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICAvLyBJZiBDaGVja2JveENvbmZpZ3VyYXRpb24gaXMgYSBzdHJpbmcsIHJldHJpZXZlIHRoZSBjb25maWd1cmF0aW9uIGZyb20gZ3JvdXAgXHJcbiAgICAgIGNoZWNrYm94Q29uZmlndXJhdGlvbiA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24sIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIElmIENoZWNrYm94Q29uZmlndXJhdGlvbiBpcyBhbiBvYmplY3QsIHVzZSBpdCBkaXJlY3RseVxyXG4gICAgICBjaGVja2JveENvbmZpZ3VyYXRpb24gPSB0aGlzLmRhdGEuVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNoZWNrYm94Q29uZmlndXJhdGlvbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VmFsdWVzKGRhdGE6IGFueSwgdGFyZ2V0VmFyaWFibGU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBhbnlbXSA9IFtdKSB7XHJcbiAgICB0aGlzW3RhcmdldFZhcmlhYmxlXSA9IGRhdGEgPyAoQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV0pIDogZGVmYXVsdFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENoZWNrZWRWYWx1ZXMoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnNldFZhbHVlcyhkYXRhLCAnY2hlY2tlZEtleXMnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREaXNhYmxlZENoZWNrQm94KGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5zZXRWYWx1ZXMoZGF0YSwgJ2Rpc2FibGVkQ2hlY2tCb3hLZXlzJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNoZWNrYWJsZVNldHRpbmdzKCk6IENoZWNrYWJsZVNldHRpbmdzIHtcclxuICAgIGlmICghIXRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbikge1xyXG4gICAgICBjb25zdCBjaGVja2JveENvbmZpZ3VyYXRpb24gPSB0aGlzLmdldENoZWNrYm94Q29uZmlndXJhdGlvbigpO1xyXG4gICAgICBjb25zdCBjaGVja2FibGVTZXR0aW5ncyA9IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGNoZWNrUGFyZW50czogIWNoZWNrYm94Q29uZmlndXJhdGlvbi5EaXNhYmxlUGFyZW50QXV0b1NlbGVjdE9uQWxsQ2hpbGRyZW4sXHJcbiAgICAgICAgY2hlY2tDaGlsZHJlbjogIWNoZWNrYm94Q29uZmlndXJhdGlvbi5EaXNhYmxlUGFyZW50U2VsZWN0c0FsbENoaWxkcmVuLFxyXG4gICAgICAgIGNoZWNrRGlzYWJsZWRDaGlsZHJlbjogY2hlY2tib3hDb25maWd1cmF0aW9uLkVuYWJsZURpc2FibGVkQ2hpbGRyZW5TZWxlY3Rpb24sXHJcbiAgICAgICAgbW9kZTogY2hlY2tib3hDb25maWd1cmF0aW9uLlNlbGVjdE11bHRpcGxlID8gJ211bHRpcGxlJyA6ICdzaW5nbGUnLFxyXG4gICAgICAgIGNoZWNrT25DbGljazogY2hlY2tib3hDb25maWd1cmF0aW9uLlRvZ2dsZUNoZWNrYm94T25Ob2RlQ2xpY2ssXHJcbiAgICAgIH0gYXMgQ2hlY2thYmxlU2V0dGluZ3M7XHJcblxyXG4gICAgICByZXR1cm4gY2hlY2thYmxlU2V0dGluZ3M7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGVja2VkQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICghIXRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbikge1xyXG4gICAgICBjb25zdCBjaGVja2JveENvbmZpZ3VyYXRpb24gPSB0aGlzLmdldENoZWNrYm94Q29uZmlndXJhdGlvbigpO1xyXG5cclxuICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IGNoZWNrYm94Q29uZmlndXJhdGlvbi5PbkNoYW5nZTtcclxuICAgICAgY29uc3QgaXNDaGVja2VkID0gdGhpcy5jaGVja2VkS2V5cy5pbmRleE9mKGV2ZW50Lml0ZW0uZGF0YUl0ZW0uSWQpID4gLTE7XHJcblxyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6dHJlZV9PbkNoZWNrYm94Q2hhbmdlXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXROYW1lLFxyXG4gICAgICAgIGV2ZW50LFxyXG4gICAgICAgIGRhdGE6IHsgY2hlY2tlZFZhbHVlOiBpc0NoZWNrZWQsIHNlbGVjdGVkSXRlbTogZXZlbnQuaXRlbS5kYXRhSXRlbSwgZmllbGQ6IHRoaXMuZGF0YSwgY29tcDogdGhpcyB9XHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDaGVja2VkVmFsdWVzKCk6IEFycmF5PGFueT4ge1xyXG4gICAgaWYgKHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeSAmJiB0aGlzLmNoZWNrZWRLZXlzICYmIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5sZW5ndGggPiAwICYmIHRoaXMuY2hlY2tlZEtleXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RPcHRpb25zS2V5ID0gdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnM7XHJcbiAgICAgIHJldHVybiB0aGlzLmFsbE5vZGVzV2l0b3V0SGllcmFjaHkuZmlsdGVyKG5vZGUgPT4gdGhpcy5jaGVja2VkS2V5cy5pbmNsdWRlcyhub2RlW3NlbGVjdE9wdGlvbnNLZXldKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICAvLyBDdXN0b20gbG9naWMgaGFuZGxpbmcgSW5kZXRlcm1pbmF0ZSBzdGF0ZSB3aGVuIGN1c3RvbSBkYXRhIGl0ZW0gcHJvcGVydHkgaXMgcGVyc2lzdGVkXHJcbiAgcHVibGljIGlzQ2hlY2tlZCA9IChkYXRhSXRlbTogYW55LCBpbmRleDogc3RyaW5nKTogQ2hlY2tlZFN0YXRlID0+IHtcclxuICAgIGlmICh0aGlzLmRhdGEuVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgaWYgKHRoaXMuY29udGFpbnNJdGVtKGRhdGFJdGVtKSkge1xyXG4gICAgICAgIHJldHVybiBcImNoZWNrZWRcIjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuaXNJbmRldGVybWluYXRlKGRhdGFJdGVtLlZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBcImluZGV0ZXJtaW5hdGVcIjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIFwibm9uZVwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb250YWluc0l0ZW0oaXRlbTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja2VkS2V5cy5pbmRleE9mKGl0ZW1bdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnNdKSA+IC0xO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0luZGV0ZXJtaW5hdGUoaXRlbXM6IGFueVtdID0gW10pOiBib29sZWFuIHtcclxuICAgIGxldCBpZHggPSAwO1xyXG4gICAgbGV0IGl0ZW07XHJcblxyXG4gICAgd2hpbGUgKChpdGVtID0gaXRlbXNbaWR4XSkpIHtcclxuICAgICAgaWYgKHRoaXMuaXNJbmRldGVybWluYXRlKGl0ZW0uVmFsdWUpIHx8IHRoaXMuY29udGFpbnNJdGVtKGl0ZW0pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlkeCArPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cIndpZHRoOjEwMCVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZVwiIGNsYXNzPVwiZTF0YWctc3R5bGVcIlxyXG4gICAgICpuZ0lmPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCI+XHJcbiAgPGtlbmRvLXRyZWV2aWV3IFtub2Rlc109XCJnZXRJdGVtcygpXCJcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0V4cGFuZGFibGVcclxuICAgICAgICAgICAgICAgICAgW2tlbmRvVHJlZVZpZXdTZWxlY3RhYmxlXT1cInNlbGVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZVZpZXdEcmFnQW5kRHJvcFxyXG4gICAgICAgICAgICAgICAgICBrZW5kb1RyZWVWaWV3RHJhZ0FuZERyb3BFZGl0aW5nXHJcbiAgICAgICAgICAgICAgICAgIFtpc0V4cGFuZGVkXT1cImlzRXhwYW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgICAoY29sbGFwc2UpPVwiaGFuZGxlQ29sbGFwc2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChleHBhbmQpPVwiaGFuZGxlRXhwYW5kKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAobm9kZURyb3ApPVwiaGFuZGxlTm9kZURyb3AoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChub2RlRHJhZ0VuZCk9XCJoYW5kbGVOb2RlRHJhZ0VuZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZEtleXMpXT1cInNlbGVjdGVkS2V5c1wiXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZVZpZXdIaWVyYXJjaHlCaW5kaW5nXHJcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuRmllbGQ9XCJWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIHRleHRGaWVsZD1cIk5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0QnldPVwiZGF0YS5TZWxlY3RPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZGF0YS5GaWx0ZXJhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJoYW5kbGVGaWx0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZTF0YWctc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtrZW5kb1RyZWVWaWV3Q2hlY2thYmxlXT1cImNoZWNrYWJsZVNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgW2NoZWNrQnldPVwiZGF0YS5TZWxlY3RPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgWyhjaGVja2VkS2V5cyldPVwiY2hlY2tlZEtleXNcIlxyXG4gICAgICAgICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJvbkNoZWNrZWRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtrZW5kb1RyZWVWaWV3RGlzYWJsZV09XCJkYXRhLlNlbGVjdE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbaXNDaGVja2VkXT1cImlzQ2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgIFsoZGlzYWJsZWRLZXlzKV09XCJkaXNhYmxlZENoZWNrQm94S2V5c1wiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlUGFyZW50Tm9kZXNPbmx5XT1cImRhdGEuRGlzYWJsZVBhcmVudE5vZGVzT25seVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvVHJlZVZpZXdOb2RlVGVtcGxhdGUgbGV0LWRhdGFJdGVtICNub2RldGVtcGxhdGU+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWNvbnRlbnQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCIhIWRhdGEuT25BZGROb2RlICYmICFkYXRhLmlzSGlkZUFsbEFkZE5vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFkZE5vZGUoJGV2ZW50LCBkYXRhSXRlbSwgZGF0YSwgZ3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInpvb206IDAuNjsgbWFyZ2luOiAwIDAgMCAycHg7XCJcclxuICAgICAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIhIWRhdGFJdGVtLk9uQWRkTm9kZVZpc2libGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlMXRhZy1zdHlsZTJcIj5cclxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cIidwbHVzJ1wiPjwvZmEtaWNvbj5cclxuICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCIhIWRhdGEuT25SZW1vdmVOb2RlICYmICFkYXRhLmlzSGlkZUFsbFJlbW92ZU5vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZU5vZGUoJGV2ZW50LCBkYXRhSXRlbSwgZGF0YSwgZ3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInpvb206IDAuNjsgbWFyZ2luOiAwIDAgMCAxMHB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIhIWRhdGFJdGVtLk9uUmVtb3ZlTm9kZVZpc2libGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlMXRhZy1zdHlsZTNcIj5cclxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cIidtaW51cydcIj48L2ZhLWljb24+XHJcbiAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLXNlcGVyYXRvciBlMXRhZy1zdHlsZTdcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTdcIj48L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGljb24gb2YgZGF0YUl0ZW0uSWNvbkxpc3RcIj5cclxuICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwiZTF0YWctc3R5bGU1IGxlZnQtaWNvblwiIFtpY29uXT1cImljb25cIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTVcIj48L2ZhLWljb24+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxpb24tbGFiZWwgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU0XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTRcIiBbbmdDbGFzc109XCJkYXRhSXRlbS5jbGFzc1wiPlxyXG4gICAgICAgICAgPGRpdiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTZcIiBjbGFzcz1cImUxdGFnLXN0eWxlNlwiIFtpbm5lckhUTUxdPVwiZ2V0VGVtcGxhdGUoZGF0YUl0ZW0sIGRhdGEsIGdyb3VwKSB8IGh0bWxTYW5pdGl6ZVwiPjwvZGl2PlxyXG4gICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby10cmVldmlldz5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -11038,6 +11038,18 @@ class ZtreeComponent extends DataListingFieldBase {
11038
11038
  this.collapseAll = () => {
11039
11039
  this.state.expandedkeys = [];
11040
11040
  };
11041
+ // Custom logic handling Indeterminate state when custom data item property is persisted
11042
+ this.isChecked = (dataItem, index) => {
11043
+ if (this.data.TreeViewCheckboxConfiguration) {
11044
+ if (this.containsItem(dataItem)) {
11045
+ return "checked";
11046
+ }
11047
+ if (this.isIndeterminate(dataItem.Value)) {
11048
+ return "indeterminate";
11049
+ }
11050
+ return "none";
11051
+ }
11052
+ };
11041
11053
  }
11042
11054
  ngOnInit() {
11043
11055
  super.initComponent().subscribe(() => {
@@ -11393,14 +11405,14 @@ class ZtreeComponent extends DataListingFieldBase {
11393
11405
  }
11394
11406
  return checkboxConfiguration;
11395
11407
  }
11396
- setValues(data, targetArray, defaultValue = []) {
11397
- targetArray = data ? (Array.isArray(data) ? data : [data]) : defaultValue;
11408
+ setValues(data, targetVariable, defaultValue = []) {
11409
+ this[targetVariable] = data ? (Array.isArray(data) ? data : [data]) : defaultValue;
11398
11410
  }
11399
11411
  setCheckedValues(data) {
11400
- this.setValues(data, this.checkedKeys);
11412
+ this.setValues(data, 'checkedKeys');
11401
11413
  }
11402
11414
  setDisabledCheckBox(data) {
11403
- this.setValues(data, this.disabledCheckBoxKeys);
11415
+ this.setValues(data, 'disabledCheckBoxKeys');
11404
11416
  }
11405
11417
  get checkableSettings() {
11406
11418
  if (!!this.data.TreeViewCheckboxConfiguration) {
@@ -11439,17 +11451,6 @@ class ZtreeComponent extends DataListingFieldBase {
11439
11451
  }
11440
11452
  return [];
11441
11453
  }
11442
- isChecked(dataItem, index) {
11443
- if (this.data.TreeViewCheckboxConfiguration) {
11444
- if (this.containsItem(dataItem)) {
11445
- return "checked";
11446
- }
11447
- if (this.isIndeterminate(dataItem.Value)) {
11448
- return "indeterminate";
11449
- }
11450
- return "none";
11451
- }
11452
- }
11453
11454
  containsItem(item) {
11454
11455
  return this.checkedKeys.indexOf(item[this.data.SelectOptions]) > -1;
11455
11456
  }