ng-virtual-list 16.7.14 → 16.7.16

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
@@ -15,7 +15,9 @@ Flexible, and actively maintained Angular library that excels with high-performa
15
15
  [Live Demo](https://ng-virtual-list-chat-demo.eugene-grebennikov.pro/)
16
16
  [(Code)](https://github.com/DjonnyX/ng-virtual-list-demo)
17
17
 
18
- [Live Examples](https://ng-virtual-list.eugene-grebennikov.pro/)
18
+ [Live Examples (Storybook)](https://ng-virtual-list-examples.eugene-grebennikov.pro/)
19
+
20
+ [Examples](https://ng-virtual-list.eugene-grebennikov.pro/)
19
21
  [(Code)](https://github.com/DjonnyX/ng-virtual-list-demo/tree/main/src/app)
20
22
 
21
23
  <br/>
@@ -808,7 +808,7 @@ export class TrackBox extends CacheMap {
808
808
  continue;
809
809
  }
810
810
  const bounds = component.instance.getBounds();
811
- this.set(itemId, { ...(this.get(itemId) || {}), ...bounds });
811
+ this.set(itemId, bounds);
812
812
  }
813
813
  }
814
814
  dispose() {
@@ -819,4 +819,4 @@ export class TrackBox extends CacheMap {
819
819
  }
820
820
  }
821
821
  }
822
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tCb3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy90cmFja0JveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsUUFBUSxFQUFRLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRS9HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzdELE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDdEIsbUNBQWlCLENBQUE7SUFDakIsaUNBQWUsQ0FBQTtBQUNuQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFrRUQsTUFBTSxDQUFOLElBQVksa0JBS1g7QUFMRCxXQUFZLGtCQUFrQjtJQUMxQiwrREFBTSxDQUFBO0lBQ04sK0RBQU0sQ0FBQTtJQUNOLCtEQUFNLENBQUE7SUFDTix5RUFBVyxDQUFBO0FBQ2YsQ0FBQyxFQUxXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFLN0I7QUFTRCxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsRUFDeEMsa0NBQWtDLEdBQUcsRUFBRSxFQUN2QyxpQ0FBaUMsR0FBRyxLQUFLLEVBQ3pDLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFJckI7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sUUFDVCxTQUFRLFFBQXNEO0lBRXBELFFBQVEsQ0FBYztJQUV0QixNQUFNLENBQWtEO0lBRWxFLElBQUksS0FBSyxDQUFDLENBQWtEO1FBQ3hELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbkIsT0FBTztTQUNWO1FBRUQsSUFBSSxD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QztJQUVRLE9BQU87UUFDWixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFaEIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFFbkMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMzQjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24sIH0gZnJvbSBcIi4uL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSBcIi4uL21vZGVscy9yZW5kZXItaXRlbS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJZCB9IGZyb20gXCIuLi90eXBlcy9pZFwiO1xyXG5pbXBvcnQgeyBDYWNoZU1hcCwgQ01hcCB9IGZyb20gXCIuL2NhY2hlTWFwXCI7XHJcbmltcG9ydCB7IFRyYWNrZXIgfSBmcm9tIFwiLi90cmFja2VyXCI7XHJcbmltcG9ydCB7IElTaXplIH0gZnJvbSBcIi4uL3R5cGVzXCI7XHJcbmltcG9ydCB7IEhFSUdIVF9QUk9QX05BTUUsIFRSQUNLX0JZX1BST1BFUlRZX05BTUUsIFdJRFRIX1BST1BfTkFNRSwgWF9QUk9QX05BTUUsIFlfUFJPUF9OQU1FIH0gZnJvbSBcIi4uL2NvbnN0XCI7XHJcbmltcG9ydCB7IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XHJcbmltcG9ydCB7IGJ1ZmZlckludGVycG9sYXRpb24gfSBmcm9tIFwiLi9idWZmZXItaW50ZXJwb2xhdGlvblwiO1xyXG5pbXBvcnQgeyBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSBcIi4uL21vZGVscy9iYXNlLXZpcnR1YWwtbGlzdC1pdGVtLWNvbXBvbmVudFwiO1xyXG5cclxuZXhwb3J0IGVudW0gVHJhY2tCb3hFdmVudHMge1xyXG4gICAgQ0hBTkdFID0gJ2NoYW5nZScsXHJcbiAgICBSRVNFVCA9ICdyZXNldCcsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1ldHJpY3Mge1xyXG4gICAgZGVsdGE6IG51bWJlcjtcclxuICAgIG5vcm1hbGl6ZWRJdGVtV2lkdGg6IG51bWJlcjtcclxuICAgIG5vcm1hbGl6ZWRJdGVtSGVpZ2h0OiBudW1iZXI7XHJcbiAgICB3aWR0aDogbnVtYmVyO1xyXG4gICAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgICBkeW5hbWljU2l6ZTogYm9vbGVhbjtcclxuICAgIGl0ZW1TaXplOiBudW1iZXI7XHJcbiAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kOiBudW1iZXI7XHJcbiAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZDogbnVtYmVyO1xyXG4gICAgaXRlbXNPbkRpc3BsYXlXZWlnaHQ6IG51bWJlcjtcclxuICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoOiBudW1iZXI7XHJcbiAgICBpc1ZlcnRpY2FsOiBib29sZWFuO1xyXG4gICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0OiBudW1iZXI7XHJcbiAgICBsZWZ0SXRlbUxlbmd0aDogbnVtYmVyO1xyXG4gICAgbGVmdEl0ZW1zV2VpZ2h0OiBudW1iZXI7XHJcbiAgICByZW5kZXJJdGVtczogbnVtYmVyO1xyXG4gICAgcmlnaHRJdGVtTGVuZ3RoOiBudW1iZXI7XHJcbiAgICByaWdodEl0ZW1zV2VpZ2h0OiBudW1iZXI7XHJcbiAgICBzY3JvbGxTaXplOiBudW1iZXI7XHJcbiAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtczogbnVtYmVyO1xyXG4gICAgc2l6ZVByb3BlcnR5OiB0eXBlb2YgSEVJR0hUX1BST1BfTkFNRSB8IHR5cGVvZiBXSURUSF9QUk9QX05BTUU7XHJcbiAgICBzbmFwOiBib29sZWFuO1xyXG4gICAgc25pcHBlZFBvczogbnVtYmVyO1xyXG4gICAgc3RhcnRJbmRleDogbnVtYmVyO1xyXG4gICAgc3RhcnRQb3NpdGlvbjogbnVtYmVyO1xyXG4gICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodDogbnVtYmVyO1xyXG4gICAgdG90YWxMZW5ndGg6IG51bWJlcjtcclxuICAgIHRvdGFsU2l6ZTogbnVtYmVyO1xyXG4gICAgdHlwaWNhbEl0ZW1TaXplOiBudW1iZXI7XHJcbiAgICBpc0Zyb21JdGVtSWRGb3VuZDogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PiB7XHJcbiAgICBib3VuZHM6IElTaXplO1xyXG4gICAgY29sbGVjdGlvbjogQztcclxuICAgIGlzVmVydGljYWw6IGJvb2xlYW47XHJcbiAgICBpdGVtU2l6ZTogbnVtYmVyO1xyXG4gICAgYnVmZmVyU2l6ZTogbnVtYmVyO1xyXG4gICAgbWF4QnVmZmVyU2l6ZTogbnVtYmVyO1xyXG4gICAgZHluYW1pY1NpemU6IGJvb2xlYW47XHJcbiAgICBzY3JvbGxTaXplOiBudW1iZXI7XHJcbiAgICBzbmFwOiBib29sZWFuO1xyXG4gICAgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbjogYm9vbGVhbjtcclxuICAgIGZyb21JdGVtSWQ/OiBJZDtcclxuICAgIHByZXZpb3VzVG90YWxTaXplOiBudW1iZXI7XHJcbiAgICBjcnVkRGV0ZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBkZWxldGVkSXRlbXNNYXA6IHsgW2luZGV4OiBudW1iZXJdOiBJU2l6ZTsgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR2V0SXRlbVBvc2l0aW9uT3B0aW9uczxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PlxyXG4gICAgZXh0ZW5kcyBPbWl0PElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEksIEM+LCAncHJldmlvdXNUb3RhbFNpemUnIHwgJ2NydWREZXRlY3RlZCcgfCAnZGVsZXRlZEl0ZW1zTWFwJz4geyB9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9uczxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PlxyXG4gICAgZXh0ZW5kcyBPbWl0PElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEksIEM+LCAnY29sbGVjdGlvbicgfCAncHJldmlvdXNUb3RhbFNpemUnIHwgJ2NydWREZXRlY3RlZCcgfCAnZGVsZXRlZEl0ZW1zTWFwJz4geyB9XHJcblxyXG5leHBvcnQgdHlwZSBDYWNoZU1hcEV2ZW50cyA9IFRyYWNrQm94RXZlbnRzLkNIQU5HRSB8IFRyYWNrQm94RXZlbnRzLlJFU0VUO1xyXG5cclxuZXhwb3J0IHR5cGUgT25DaGFuZ2VFdmVudExpc3RlbmVyID0gKHZlcnNpb246IG51bWJlcikgPT4gdm9pZDtcclxuXHJcbmV4cG9ydCB0eXBlIE9uUmVzZXRFdmVudExpc3RlbmVyID0gKHJlc2V0ZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XHJcblxyXG5leHBvcnQgdHlwZSBDYWNoZU1hcExpc3RlbmVycyA9IE9uQ2hhbmdlRXZlbnRMaXN0ZW5lciB8IE9uUmVzZXRFdmVudExpc3RlbmVyO1xyXG5cclxuZXhwb3J0IGVudW0gSXRlbURpc3BsYXlNZXRob2RzIHtcclxuICAgIENSRUFURSxcclxuICAgIFVQREFURSxcclxuICAgIERFTEVURSxcclxuICAgIE5PVF9DSEFOR0VELFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVcGRhdGVDb2xsZWN0aW9uUmV0dXJucyB7XHJcbiAgICBkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb247XHJcbiAgICB0b3RhbFNpemU6IG51bWJlcjtcclxuICAgIGRlbHRhOiBudW1iZXI7XHJcbiAgICBjcnVkRGV0ZWN0ZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRfQlVGRkVSX0VYVFJFTVVNX1RIUkVTSE9MRCA9IDE1LFxyXG4gICAgREVGQVVMVF9NQVhfQlVGRkVSX1NFUVVFTkNFX0xFTkdUSCA9IDMwLFxyXG4gICAgREVGQVVMVF9SRVNFVF9CVUZGRVJfU0laRV9USU1FT1VUID0gMTAwMDAsXHJcbiAgICBJU19ORVcgPSAnaXNOZXcnO1xyXG5cclxudHlwZSBDYWNoZSA9IElTaXplICYgeyBtZXRob2Q/OiBJdGVtRGlzcGxheU1ldGhvZHMgfSAmIHsgW3Byb3A6IHN0cmluZ106IGFueSB9O1xyXG5cclxuLyoqXHJcbiAqIEFuIG9iamVjdCB0aGF0IHBlcmZvcm1zIHRyYWNraW5nLCBjYWxjdWxhdGlvbnMgYW5kIGNhY2hpbmcuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvdHJhY2tCb3gudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRyYWNrQm94PEMgZXh0ZW5kcyBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50ID0gYW55PlxyXG4gICAgZXh0ZW5kcyBDYWNoZU1hcDxJZCwgQ2FjaGUsIENhY2hlTWFwRXZlbnRzLCBDYWNoZU1hcExpc3RlbmVycz4ge1xyXG5cclxuICAgIHByb3RlY3RlZCBfdHJhY2tlciE6IFRyYWNrZXI8Qz47XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pdGVtczogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgc2V0IGl0ZW1zKHY6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1zID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8Qz4+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBzZXQgZGlzcGxheUNvbXBvbmVudHModjogQXJyYXk8Q29tcG9uZW50UmVmPEM+PiB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGlzcGxheUNvbXBvbmVudHMgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGlzcGxheUNvbXBvbmVudHMgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc25hcGVkRGlzcGxheUNvbXBvbmVudDogQ29tcG9uZW50UmVmPEM+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBzZXQgc25hcGVkRGlzcGxheUNvbXBvbmVudCh2OiBDb21wb25lbnRSZWY8Qz4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBzZXQgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKHY6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc0xhenk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBzZXQgaXNMYXp5KHY6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5faXNMYXp5ID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2lzTGF6eSA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHRyYWNrQnkgcHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgc2V0IHRyYWNraW5nUHJvcGVydHlOYW1lKHY6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lID0gdGhpcy5fdHJhY2tlci50cmFja2luZ1Byb3BlcnR5TmFtZSA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF90cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nID0gVFJBQ0tfQllfUFJPUEVSVFlfTkFNRTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB0cmFja2luZ1Byb3BlcnR5TmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlciA9IG5ldyBUcmFja2VyKHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBzZXQoaWQ6IElkLCBib3VuZHM6IElTaXplKTogQ01hcDxJZCwgSVNpemU+IHtcclxuICAgICAgICBpZiAodGhpcy5fbWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgY29uc3QgYiA9IHRoaXMuX21hcC5nZXQoaWQpO1xyXG4gICAgICAgICAgICBpZiAoYj8ud2lkdGggPT09IGJvdW5kcy53aWR0aCAmJiBiLmhlaWdodCA9PT0gYm91bmRzLmhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuX21hcC5zZXQoaWQsIGJvdW5kcyk7XHJcblxyXG4gICAgICAgIHRoaXMuYnVtcFZlcnNpb24oKTtcclxuICAgICAgICByZXR1cm4gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3ByZXZpb3VzQ29sbGVjdGlvbjogQXJyYXk8eyBpZDogSWQ7IH0+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2RlbGV0ZWRJdGVtc01hcDogeyBbaW5kZXg6IG51bWJlcl06IElTaXplIH0gPSB7fTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NydWREZXRlY3RlZCA9IGZhbHNlO1xyXG4gICAgZ2V0IGNydWREZXRlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX2NydWREZXRlY3RlZDsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBmaXJlQ2hhbmdlSWZOZWVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZXNEZXRlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goVHJhY2tCb3hFdmVudHMuQ0hBTkdFLCB0aGlzLl92ZXJzaW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9wcmV2aW91c1RvdGFsU2l6ZSA9IDA7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9zY3JvbGxEZWx0YTogbnVtYmVyID0gMDtcclxuICAgIGdldCBzY3JvbGxEZWx0YSgpIHsgcmV0dXJuIHRoaXMuX3Njcm9sbERlbHRhOyB9XHJcblxyXG4gICAgaXNBZGFwdGl2ZUJ1ZmZlciA9IHRydWU7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTZXF1ZW5jZUV4dHJhVGhyZXNob2xkID0gREVGQVVMVF9CVUZGRVJfRVhUUkVNVU1fVEhSRVNIT0xEO1xyXG5cclxuICAgIHByb3RlY3RlZCBfbWF4QnVmZmVyU2VxdWVuY2VMZW5ndGggPSBERUZBVUxUX01BWF9CVUZGRVJfU0VRVUVOQ0VfTEVOR1RIO1xyXG5cclxuICAgIHByb3RlY3RlZCBfYnVmZmVyU2l6ZVNlcXVlbmNlOiBBcnJheTxudW1iZXI+ID0gW107XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl9idWZmZXJTaXplOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0QnVmZmVyU2l6ZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX21heEJ1ZmZlclNpemU6IG51bWJlciA9IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZW91dDogbnVtYmVyID0gREVGQVVMVF9SRVNFVF9CVUZGRVJfU0laRV9USU1FT1VUO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgaXNSZXNldGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbGlmZUNpcmNsZSgpIHtcclxuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VJZk5lZWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saWZlQ2lyY2xlRG8oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBjb2xsZWN0aW9uIGZvciBkZWxldGVkIGl0ZW1zIGFuZCBmbHVzaGVzIHRoZSBkZWxldGVkIGl0ZW0gY2FjaGUuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0Q29sbGVjdGlvbjxJIGV4dGVuZHMgeyBpZDogSWQ7IH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oY3VycmVudENvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLCBpdGVtU2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRDb2xsZWN0aW9uICE9PSB1bmRlZmluZWQgJiYgY3VycmVudENvbGxlY3Rpb24gIT09IG51bGwgJiYgY3VycmVudENvbGxlY3Rpb24gPT09IHRoaXMuX3ByZXZpb3VzQ29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0F0dGVudGlvbiEgVGhlIGNvbGxlY3Rpb24gbXVzdCBiZSBpbW11dGFibGUuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByZXNldGVkID0gdGhpcy5pc1Jlc2V0ZWQ7XHJcbiAgICAgICAgaWYgKHJlc2V0ZWQpIHtcclxuICAgICAgICAgICAgaWYgKCEoIXRoaXMuX3ByZXZpb3VzQ29sbGVjdGlvbiB8fCB0aGlzLl9wcmV2aW91c0NvbGxlY3Rpb24ubGVuZ3RoID09PSAwKSkge1xyXG4gICAgICAgICAgICAgICAgcmVzZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlc2V0ZWQgJiYgKCFjdXJyZW50Q29sbGVjdGlvbiB8fCBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGggPT09IDApKSB7XHJcbiAgICAgICAgICAgIHJlc2V0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1Jlc2V0ZWQgPSByZXNldGVkO1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2goVHJhY2tCb3hFdmVudHMuUkVTRVQsIHJlc2V0ZWQpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKHRoaXMuX3ByZXZpb3VzQ29sbGVjdGlvbiwgY3VycmVudENvbGxlY3Rpb24sIGl0ZW1TaXplKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNDb2xsZWN0aW9uID0gWy4uLihjdXJyZW50Q29sbGVjdGlvbiB8fCBbXSldO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSBjYWNoZSBvZiBpdGVtcyBmcm9tIHRoZSBsaXN0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVDYWNoZTxJIGV4dGVuZHMgeyBpZDogSWQ7IH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4ocHJldmlvdXNDb2xsZWN0aW9uOiBDIHwgbnVsbCB8IHVuZGVmaW5lZCwgY3VycmVudENvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIGl0ZW1TaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBsZXQgY3J1ZERldGVjdGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghY3VycmVudENvbGxlY3Rpb24gfHwgY3VycmVudENvbGxlY3Rpb24ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0NvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIGRlbGV0ZWRcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gcHJldmlvdXNDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwcmV2aW91c0NvbGxlY3Rpb25baV0sIGlkID0gaXRlbS5pZDtcclxuICAgICAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZGVsZXRlKGlkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZpb3VzQ29sbGVjdGlvbiB8fCBwcmV2aW91c0NvbGxlY3Rpb24ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50Q29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkZWRcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY3VycmVudENvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3J1ZERldGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3VycmVudENvbGxlY3Rpb25baV0sIGlkID0gaXRlbS5pZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSwgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbkRpY3Q6IHsgW2lkOiBJZF06IEkgfSA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY3VycmVudENvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdXJyZW50Q29sbGVjdGlvbltpXTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25EaWN0W2l0ZW0uaWRdID0gaXRlbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBub3RDaGFuZ2VkTWFwOiB7IFtpZDogSWRdOiBJIH0gPSB7fSwgZGVsZXRlZE1hcDogeyBbaWQ6IElkXTogSSB9ID0ge30sIGRlbGV0ZWRJdGVtc01hcDogeyBbaW5kZXg6IG51bWJlcl06IElTaXplIH0gPSB7fSwgdXBkYXRlZE1hcDogeyBbaWQ6IElkXTogSSB9ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwcmV2aW91c0NvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwcmV2aW91c0NvbGxlY3Rpb25baV0sIGlkID0gaXRlbS5pZDtcclxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uRGljdC5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gY29sbGVjdGlvbkRpY3RbaWRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdENoYW5nZWRNYXBbaXRlbS5pZF0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7IC4uLih0aGlzLl9tYXAuZ2V0KGlkKSB8fCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSB9KSwgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZERldGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZE1hcFtpdGVtLmlkXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoaWQsIHsgLi4uKHRoaXMuX21hcC5nZXQoaWQpIHx8IHsgd2lkdGg6IGl0ZW1TaXplLCBoZWlnaHQ6IGl0ZW1TaXplIH0pLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBkZWxldGVkXHJcbiAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZE1hcFtpdGVtLmlkXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkSXRlbXNNYXBbaV0gPSB0aGlzLl9tYXAuZ2V0KGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY3VycmVudENvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdXJyZW50Q29sbGVjdGlvbltpXSwgaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSAmJiAhZGVsZXRlZE1hcC5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgIXVwZGF0ZWRNYXAuaGFzT3duUHJvcGVydHkoaWQpICYmICFub3RDaGFuZ2VkTWFwLmhhc093blByb3BlcnR5KGlkKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkZWRcclxuICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSwgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NydWREZXRlY3RlZCA9IGNydWREZXRlY3RlZDtcclxuICAgICAgICB0aGlzLl9kZWxldGVkSXRlbXNNYXAgPSBkZWxldGVkSXRlbXNNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyB0aGUgcG9zaXRpb24gb2YgYSBjb2xsZWN0aW9uIGVsZW1lbnQgYnkgdGhlIGdpdmVuIElkXHJcbiAgICAgKi9cclxuICAgIGdldEl0ZW1Qb3NpdGlvbjxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PihpZDogSWQsIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgb3B0aW9uczogSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnM8SSwgQz4pOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IG9wdCA9IHsgZnJvbUl0ZW1JZDogaWQsIGl0ZW1Db25maWdNYXAsIC4uLm9wdGlvbnMgfTtcclxuICAgICAgICB0aGlzLl9kZWZhdWx0QnVmZmVyU2l6ZSA9IG9wdC5idWZmZXJTaXplO1xyXG4gICAgICAgIHRoaXMuX21heEJ1ZmZlclNpemUgPSBvcHQubWF4QnVmZmVyU2l6ZTtcclxuXHJcbiAgICAgICAgY29uc3QgeyBzY3JvbGxTaXplLCBpc0Zyb21JdGVtSWRGb3VuZCB9ID0gdGhpcy5yZWNhbGN1bGF0ZU1ldHJpY3Moe1xyXG4gICAgICAgICAgICAuLi5vcHQsXHJcbiAgICAgICAgICAgIGR5bmFtaWNTaXplOiB0aGlzLl9jcnVkRGV0ZWN0ZWQgfHwgb3B0LmR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICBwcmV2aW91c1RvdGFsU2l6ZTogdGhpcy5fcHJldmlvdXNUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGNydWREZXRlY3RlZDogdGhpcy5fY3J1ZERldGVjdGVkLFxyXG4gICAgICAgICAgICBkZWxldGVkSXRlbXNNYXA6IHRoaXMuX2RlbGV0ZWRJdGVtc01hcCxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaXNGcm9tSXRlbUlkRm91bmQgPyBzY3JvbGxTaXplIDogLTE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0c1xyXG4gICAgICovXHJcbiAgICB1cGRhdGVDb2xsZWN0aW9uPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KGl0ZW1zOiBDLCBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwLFxyXG4gICAgICAgIG9wdGlvbnM6IElVcGRhdGVDb2xsZWN0aW9uT3B0aW9uczxJLCBDPik6IElVcGRhdGVDb2xsZWN0aW9uUmV0dXJucyB7XHJcbiAgICAgICAgY29uc3Qgb3B0ID0geyBpdGVtQ29uZmlnTWFwLCAuLi5vcHRpb25zIH0sIGNydWREZXRlY3RlZCA9IHRoaXMuX2NydWREZXRlY3RlZCwgZGVsZXRlZEl0ZW1zTWFwID0gdGhpcy5fZGVsZXRlZEl0ZW1zTWFwO1xyXG4gICAgICAgIGlmIChvcHQuZHluYW1pY1NpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplID0gb3B0LmJ1ZmZlclNpemU7XHJcbiAgICAgICAgdGhpcy5fbWF4QnVmZmVyU2l6ZSA9IG9wdC5tYXhCdWZmZXJTaXplO1xyXG5cclxuICAgICAgICBjb25zdCBtZXRyaWNzID0gdGhpcy5yZWNhbGN1bGF0ZU1ldHJpY3Moe1xyXG4gICAgICAgICAgICAuLi5vcHQsXHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGl0ZW1zLFxyXG4gICAgICAgICAgICBwcmV2aW91c1RvdGFsU2l6ZTogdGhpcy5fcHJldmlvdXNUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGNydWREZXRlY3RlZDogdGhpcy5fY3J1ZERldGVjdGVkLFxyXG4gICAgICAgICAgICBkZWxldGVkSXRlbXNNYXAsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlbHRhICs9IG1ldHJpY3MuZGVsdGE7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQWRhcHRpdmVCdWZmZXJQYXJhbXMobWV0cmljcywgaXRlbXMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNUb3RhbFNpemUgPSBtZXRyaWNzLnRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGVsZXRlZEl0ZW1zTWFwID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuX2NydWREZXRlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAob3B0LmR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRpc3BsYXlJdGVtcyA9IHRoaXMuZ2VuZXJhdGVEaXNwbGF5Q29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwgeyAuLi5tZXRyaWNzLCB9KTtcclxuICAgICAgICByZXR1cm4geyBkaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZTogbWV0cmljcy50b3RhbFNpemUsIGRlbHRhOiBtZXRyaWNzLmRlbHRhLCBjcnVkRGV0ZWN0ZWQgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIHRoZSBjbG9zZXN0IGVsZW1lbnQgaW4gdGhlIGNvbGxlY3Rpb24gYnkgc2Nyb2xsU2l6ZVxyXG4gICAgICovXHJcbiAgICBnZXROZWFyZXN0SXRlbTxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PihzY3JvbGxTaXplOiBudW1iZXIsIGl0ZW1zOiBDLCBpdGVtU2l6ZTogbnVtYmVyLCBpc1ZlcnRpY2FsOiBib29sZWFuKTogSSB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudEZyb21TdGFydChzY3JvbGxTaXplLCBpdGVtcywgdGhpcy5fbWFwLCBpdGVtU2l6ZSwgaXNWZXJ0aWNhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9wcmV2aW91c1Njcm9sbFNpemUgPSAwO1xyXG5cclxuICAgIHByb3RlY3RlZCB1cGRhdGVBZGFwdGl2ZUJ1ZmZlclBhcmFtcyhtZXRyaWNzOiBJTWV0cmljcywgdG90YWxJdGVtc0xlbmd0aDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwb3NlQ2xlYXJCdWZmZXJTaXplVGltZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IG1ldHJpY3Muc2Nyb2xsU2l6ZSArIHRoaXMuX2RlbHRhLCBkZWx0YSA9IE1hdGguYWJzKHRoaXMuX3ByZXZpb3VzU2Nyb2xsU2l6ZSAtIHNjcm9sbFNpemUpO1xyXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemU7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyUmF3U2l6ZSA9IE1hdGgubWluKE1hdGguZmxvb3IoZGVsdGEgLyBtZXRyaWNzLnR5cGljYWxJdGVtU2l6ZSkgKiA1LCB0b3RhbEl0ZW1zTGVuZ3RoKSxcclxuICAgICAgICAgICAgbWluQnVmZmVyU2l6ZSA9IGJ1ZmZlclJhd1NpemUgPCB0aGlzLl9kZWZhdWx0QnVmZmVyU2l6ZSA/IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplIDogYnVmZmVyUmF3U2l6ZSxcclxuICAgICAgICAgICAgYnVmZmVyVmFsdWUgPSBtaW5CdWZmZXJTaXplID4gdGhpcy5fbWF4QnVmZmVyU2l6ZSA/IHRoaXMuX21heEJ1ZmZlclNpemUgOiBtaW5CdWZmZXJTaXplO1xyXG5cclxuICAgICAgICB0aGlzLl9idWZmZXJTaXplID0gYnVmZmVySW50ZXJwb2xhdGlvbih0aGlzLl9idWZmZXJTaXplLCB0aGlzLl9idWZmZXJTaXplU2VxdWVuY2UsIGJ1ZmZlclZhbHVlLCB7XHJcbiAgICAgICAgICAgIGV4dHJlbXVtVGhyZXNob2xkOiB0aGlzLl9idWZmZXJTZXF1ZW5jZUV4dHJhVGhyZXNob2xkLFxyXG4gICAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLl9tYXhCdWZmZXJTZXF1ZW5jZUxlbmd0aCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydFJlc2V0QnVmZmVyU2l6ZVRpbWVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHN0YXJ0UmVzZXRCdWZmZXJTaXplVGltZXIoKSB7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRCdWZmZXJTaXplVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fYnVmZmVyU2l6ZSA9IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplO1xyXG4gICAgICAgICAgICB0aGlzLl9idWZmZXJTaXplU2VxdWVuY2UgPSBbXTtcclxuICAgICAgICB9LCB0aGlzLl9yZXNldEJ1ZmZlclNpemVUaW1lb3V0KSBhcyB1bmtub3duIGFzIG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZGlzcG9zZUNsZWFyQnVmZmVyU2l6ZVRpbWVyKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNldEJ1ZmZlclNpemVUaW1lcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IGJhc2VkIG9uIHRoZSBnaXZlbiBzY3JvbGxTaXplXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRFbGVtZW50RnJvbVN0YXJ0PEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KHNjcm9sbFNpemU6IG51bWJlciwgY29sbGVjdGlvbjogQywgbWFwOiBDTWFwPElkLCBJU2l6ZT4sIHR5cGljYWxJdGVtU2l6ZTogbnVtYmVyLFxyXG4gICAgICAgIGlzVmVydGljYWw6IGJvb2xlYW4pOiBJIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBjb25zdCBzaXplUHJvcGVydHkgPSBpc1ZlcnRpY2FsID8gSEVJR0hUX1BST1BfTkFNRSA6IFdJRFRIX1BST1BfTkFNRTtcclxuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0uaWQ7XHJcbiAgICAgICAgICAgIGxldCBpdGVtU2l6ZSA9IDA7XHJcbiAgICAgICAgICAgIGlmIChtYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm91bmRzID0gbWFwLmdldChpZCk7XHJcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZSA9IGJvdW5kcyA/IGJvdW5kc1tzaXplUHJvcGVydHldIDogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaXRlbVNpemUgPSB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9mZnNldCA+IHNjcm9sbFNpemUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBpdGVtU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGVudHJ5IGludG8gdGhlIG92ZXJzY3JvbGwgYXJlYSBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG92ZXJzY3JvbGwgZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldEVsZW1lbnROdW1Ub0VuZDxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PihpOiBudW1iZXIsIGNvbGxlY3Rpb246IEMsIG1hcDogQ01hcDxJZCwgSVNpemU+LCB0eXBpY2FsSXRlbVNpemU6IG51bWJlcixcclxuICAgICAgICBzaXplOiBudW1iZXIsIGlzVmVydGljYWw6IGJvb2xlYW4sIGluZGV4T2Zmc2V0OiBudW1iZXIgPSAwKTogeyBudW06IG51bWJlciwgb2Zmc2V0OiBudW1iZXIgfSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZVByb3BlcnR5ID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUU7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IDAsIG51bSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbGxlY3Rpb24ubGVuZ3RoIC0gaW5kZXhPZmZzZXQgLSAxOyBqID49IGk7IGotLSkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gY29sbGVjdGlvbltqXSwgaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgICAgICBsZXQgaXRlbVNpemUgPSAwO1xyXG4gICAgICAgICAgICBpZiAobWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IG1hcC5nZXQoaWQpO1xyXG4gICAgICAgICAgICAgICAgaXRlbVNpemUgPSBib3VuZHMgPyBib3VuZHNbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1TaXplID0gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBpdGVtU2l6ZTtcclxuICAgICAgICAgICAgbnVtKys7XHJcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPiBzaXplKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBudW06IDAsIG9mZnNldCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IG51bSwgb2Zmc2V0IH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGxpc3QgbWV0cmljc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVjYWxjdWxhdGVNZXRyaWNzPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KG9wdGlvbnM6IElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEksIEM+KTogSU1ldHJpY3Mge1xyXG4gICAgICAgIGNvbnN0IHsgZnJvbUl0ZW1JZCwgYm91bmRzLCBjb2xsZWN0aW9uLCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbCwgaXRlbVNpemUsXHJcbiAgICAgICAgICAgIGJ1ZmZlclNpemU6IG1pbkJ1ZmZlclNpemUsIHNjcm9sbFNpemUsIHNuYXAsIGl0ZW1Db25maWdNYXAsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgICAgIHByZXZpb3VzVG90YWxTaXplLCBjcnVkRGV0ZWN0ZWQsIGRlbGV0ZWRJdGVtc01hcCB9ID0gb3B0aW9ucyBhcyBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJLCBDPiAmIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGJ1ZmZlclNpemUgPSBNYXRoLm1heChtaW5CdWZmZXJTaXplLCB0aGlzLl9idWZmZXJTaXplKSxcclxuICAgICAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSBib3VuZHMsIHNpemVQcm9wZXJ0eSA9IGlzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FLFxyXG4gICAgICAgICAgICBzaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLCB0b3RhbExlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCB0eXBpY2FsSXRlbVNpemUgPSBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgdyA9IGlzVmVydGljYWwgPyB3aWR0aCA6IHR5cGljYWxJdGVtU2l6ZSwgaCA9IGlzVmVydGljYWwgPyB0eXBpY2FsSXRlbVNpemUgOiBoZWlnaHQsXHJcbiAgICAgICAgICAgIG1hcCA9IHRoaXMuX21hcCwgc25hcHNob3QgPSB0aGlzLl9zbmFwc2hvdCwgY2hlY2tPdmVyc2Nyb2xsSXRlbXNMaW1pdCA9IE1hdGguY2VpbChzaXplIC8gdHlwaWNhbEl0ZW1TaXplKSxcclxuICAgICAgICAgICAgc25pcHBlZFBvcyA9IE1hdGguZmxvb3Ioc2Nyb2xsU2l6ZSksIGxlZnRJdGVtc1dlaWdodHM6IEFycmF5PG51bWJlcj4gPSBbXSxcclxuICAgICAgICAgICAgaXNGcm9tSWQgPSBmcm9tSXRlbUlkICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBmcm9tSXRlbUlkID09PSAnbnVtYmVyJyAmJiBmcm9tSXRlbUlkID4gLTEpXHJcbiAgICAgICAgICAgICAgICB8fCAodHlwZW9mIGZyb21JdGVtSWQgPT09ICdzdHJpbmcnICYmIGZyb21JdGVtSWQgPiAnLTEnKTtcclxuXHJcbiAgICAgICAgbGV0IGxlZnRJdGVtc09mZnNldCA9IDAsIHJpZ2h0SXRlbXNPZmZzZXQgPSAwO1xyXG4gICAgICAgIGlmIChlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5zY3JvbGxEaXJlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMToge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc09mZnNldCA9IGJ1ZmZlclNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXNlIC0xOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zT2Zmc2V0ID0gYnVmZmVyU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPZmZzZXQgPSByaWdodEl0ZW1zT2Zmc2V0ID0gYnVmZmVyU2l6ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IHJpZ2h0SXRlbXNPZmZzZXQgPSBidWZmZXJTaXplO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQ6IG51bWJlciA9IC0xLCBpdGVtc0Zyb21EaXNwbGF5RW5kVG9PZmZzZXRFbmQgPSAwLCBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IC0xLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbUxlbmd0aCA9IDAsIHJpZ2h0SXRlbUxlbmd0aCA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodCA9IDAsIHJpZ2h0SXRlbXNXZWlnaHQgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgPSAwLFxyXG4gICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ID0gMCxcclxuICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXMgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zID0gMCxcclxuICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyA9IDAsXHJcbiAgICAgICAgICAgIGl0ZW1CeUlkOiBJIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBpdGVtQnlJZFBvczogbnVtYmVyID0gMCxcclxuICAgICAgICAgICAgdGFyZ2V0RGlzcGxheUl0ZW1JbmRleDogbnVtYmVyID0gLTEsXHJcbiAgICAgICAgICAgIGlzVGFyZ2V0SW5PdmVyc2Nyb2xsOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBpdGVtQnlJZFBvcyxcclxuICAgICAgICAgICAgdG90YWxTaXplID0gMCxcclxuICAgICAgICAgICAgc3RhcnRJbmRleDogbnVtYmVyLFxyXG4gICAgICAgICAgICBpc0Zyb21JdGVtSWRGb3VuZCA9IGZhbHNlLFxyXG4gICAgICAgICAgICBkZWx0YUZyb21TdGFydENyZWF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgbGV0IGlzTmV3ID0gIXRoaXMuaXNSZXNldGVkICYmIChzY3JvbGxTaXplID09PSAwKTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGxpc3QgaXMgZHluYW1pYyBvciB0aGVyZSBhcmUgbmV3IGVsZW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uLCB0aGVuIGl0IHN3aXRjaGVzIHRvIHRoZSBsb25nIGFsZ29yaXRobS5cclxuICAgICAgICBpZiAoZHluYW1pY1NpemUpIHtcclxuICAgICAgICAgICAgbGV0IHkgPSAwLCBzdGlja3lDb2xsZWN0aW9uSXRlbTogSSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCwgc3RpY2t5Q29tcG9uZW50U2l6ZSA9IDA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlpID0gaSArIDEsIGNvbGxlY3Rpb25JdGVtID0gY29sbGVjdGlvbltpXSwgaWQgPSBjb2xsZWN0aW9uSXRlbS5pZDtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29tcG9uZW50U2l6ZSA9IDAsIGNvbXBvbmVudFNpemVEZWx0YSA9IDAsIGl0ZW1EaXNwbGF5TWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMgPSBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQ7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZHMgPSBtYXAuZ2V0KGlkKSB8fCB7IHdpZHRoOiB0eXBpY2FsSXRlbVNpemUsIGhlaWdodDogdHlwaWNhbEl0ZW1TaXplIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2l6ZSA9IGJvdW5kc1tzaXplUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1EaXNwbGF5TWV0aG9kID0gYm91bmRzPy5tZXRob2QgPz8gSXRlbURpc3BsYXlNZXRob2RzLlVQREFURTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0l0ZW1OZXcgPSAoYm91bmRzIGFzIENhY2hlKT8uW0lTX05FV10gPz8gdGhpcy5faXNMYXp5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNJdGVtTmV3ICYmICghdGhpcy5faXNMYXp5IHx8ICFpdGVtQ29uZmlnTWFwW2NvbGxlY3Rpb25bMF0uaWRdPy5zdGlja3kpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTmV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaXRlbURpc3BsYXlNZXRob2QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuVVBEQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzbmFwc2hvdEJvdW5kcyA9IHNuYXBzaG90LmdldChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRTbmFwc2hvdFNpemUgPSBjb21wb25lbnRTaXplIC0gKHNuYXBzaG90Qm91bmRzID8gc25hcHNob3RCb3VuZHNbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRTaXplRGVsdGEgPSBpc0l0ZW1OZXcgPyAwIDogY29tcG9uZW50U25hcHNob3RTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwLnNldChpZCwgeyAuLi5ib3VuZHMsIG1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VELCBpc05ldzogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNJdGVtTmV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFGcm9tU3RhcnRDcmVhdGlvbiArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRTaXplRGVsdGEgPSBpc05ldyA/IDAgOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuc2V0KGlkLCB7IC4uLmJvdW5kcywgbWV0aG9kOiBpc05ldyA/IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEUgOiBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQsIGlzTmV3IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRlbGV0ZWRJdGVtc01hcC5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGRlbGV0ZWRJdGVtc01hcFtpXSwgc2l6ZSA9IGJvdW5kcz8uW3NpemVQcm9wZXJ0eV0gPz8gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh5IDwgc2Nyb2xsU2l6ZSAtIHNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyArPSBzaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0b3RhbFNpemUgKz0gY29tcG9uZW50U2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGcm9tSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUJ5SWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgIT09IGZyb21JdGVtSWQgJiYgaXRlbUNvbmZpZ01hcCAmJiBpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3lDb21wb25lbnRTaXplID0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUNvbGxlY3Rpb25JdGVtID0gY29sbGVjdGlvbkl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gZnJvbUl0ZW1JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGcm9tSXRlbUlkRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RGlzcGxheUl0ZW1JbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RpY2t5Q29sbGVjdGlvbkl0ZW0gJiYgaXRlbUNvbmZpZ01hcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbnVtIH0gPSB0aGlzLmdldEVsZW1lbnROdW1Ub0VuZChpLCBjb2xsZWN0aW9uLCBtYXAsIHR5cGljYWxJdGVtU2l6ZSwgc2l6ZSwgaXNWZXJ0aWNhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUYXJnZXRJbk92ZXJzY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IC09IHNpemUgLSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQ29uZmlnTWFwICYmICFpdGVtQ29uZmlnTWFwW2NvbGxlY3Rpb25JdGVtLmlkXSAmJiB5ID49IHNjcm9sbFNpemUgJiYgeSA8IHNjcm9sbFNpemUgKyBzdGlja3lDb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzbmFwcGVkWSA9IHNjcm9sbFNpemUgLSBzdGlja3lDb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0IC09IChzbmFwcGVkWSAtIHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHNuYXBwZWRZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtPSBzdGlja3lDb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0IC09IHN0aWNreUNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQnlJZCA9IGNvbGxlY3Rpb25JdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUJ5SWRQb3MgPSB5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0cy5wdXNoKGNvbXBvbmVudFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID0gaWk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHkgPD0gc2Nyb2xsU2l6ZSAtIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHRzLnB1c2goY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IGlpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc0Zyb21JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQnlJZCA9PT0gdW5kZWZpbmVkIHx8IHkgPCBpdGVtQnlJZFBvcyArIHNpemUgKyBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gaWk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeSA8PSBzY3JvbGxTaXplICsgc2l6ZSArIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IGlpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21EaXNwbGF5RW5kVG9PZmZzZXRFbmQgPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIHJpZ2h0SXRlbXNPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh5IDw9IHNjcm9sbFNpemUgLSBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaXRlbURpc3BsYXlNZXRob2QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLkNSRUFURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZBZGRlZEl0ZW1zICs9IGNvbXBvbmVudFNpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLlVQREFURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgKz0gY29tcG9uZW50U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuREVMRVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyArPSBjb21wb25lbnRTaXplRGVsdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgeSArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNUYXJnZXRJbk92ZXJzY3JvbGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25MZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCwgeyBudW0gfSA9IHRoaXMuZ2V0RWxlbWVudE51bVRvRW5kKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25MZW5ndGggLSAoY2hlY2tPdmVyc2Nyb2xsSXRlbXNMaW1pdCA8IDAgPyAwIDogY29sbGVjdGlvbkxlbmd0aCAtIGNoZWNrT3ZlcnNjcm9sbEl0ZW1zTGltaXQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24sIG1hcCwgdHlwaWNhbEl0ZW1TaXplLCBzaXplLCBpc1ZlcnRpY2FsLCBjb2xsZWN0aW9uTGVuZ3RoIC0gKGNvbGxlY3Rpb25MZW5ndGggLSAodGFyZ2V0RGlzcGxheUl0ZW1JbmRleCArIDEpKSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAobnVtID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgLT0gbnVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA8PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kIDw9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IGlzRnJvbUlkID8gaXRlbUJ5SWRQb3MgOiBzY3JvbGxTaXplO1xyXG5cclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0cy5zcGxpY2UoMCwgbGVmdEl0ZW1zV2VpZ2h0cy5sZW5ndGggLSBsZWZ0SXRlbXNPZmZzZXQpO1xyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHRzLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQgKz0gdjtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZWZ0SXRlbUxlbmd0aCA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsIGxlZnRJdGVtc09mZnNldCk7XHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbUxlbmd0aCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICsgcmlnaHRJdGVtc09mZnNldCA+IHRvdGFsTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRvdGFsTGVuZ3RoIC0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgOiByaWdodEl0ZW1zT2Zmc2V0O1xyXG5cclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAvLyBCdWZmZXIgb3B0aW1pemF0aW9uIGRvZXMgbm90IHdvcmsgb24gZmFzdCBsaW5lYXIgYWxnb3JpdGhtXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY3J1ZERldGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkl0ZW0gPSBjb2xsZWN0aW9uW2ldLCBpZCA9IGNvbGxlY3Rpb25JdGVtLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb21wb25lbnRTaXplID0gdHlwaWNhbEl0ZW1TaXplLCBpdGVtRGlzcGxheU1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzID0gSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VEO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZHMgPSBtYXAuZ2V0KGlkKSE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EaXNwbGF5TWV0aG9kID0gYm91bmRzPy5tZXRob2QgPz8gSXRlbURpc3BsYXlNZXRob2RzLlVQREFURTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNJdGVtTmV3ID0gKGJvdW5kcyBhcyBDYWNoZSk/LltJU19ORVddID8/IHRoaXMuX2lzTGF6eTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0l0ZW1OZXcgJiYgKCF0aGlzLl9pc0xhenkgfHwgIWl0ZW1Db25maWdNYXBbY29sbGVjdGlvblswXS5pZF0/LnN0aWNreSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTmV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1EaXNwbGF5TWV0aG9kID09PSBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YUZyb21TdGFydENyZWF0aW9uICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuc2V0KGlkLCB7IC4uLmJvdW5kcywgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQsIGlzTmV3IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZXRlZEl0ZW1zTWFwLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGRlbGV0ZWRJdGVtc01hcFtpXSwgc2l6ZSA9IGJvdW5kcz8uW3NpemVQcm9wZXJ0eV0gPz8gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IHNjcm9sbFNpemUgLSBzaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zICs9IHNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh5IDwgc2Nyb2xsU2l6ZSAtIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtRGlzcGxheU1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05ldykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuVVBEQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZlVwZGF0ZWRJdGVtcyArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuREVMRVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHkgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID0gTWF0aC5mbG9vcihzY3JvbGxTaXplIC8gdHlwaWNhbEl0ZW1TaXplKTtcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSBNYXRoLmNlaWwoKHNjcm9sbFNpemUgKyBzaXplKSAvIHR5cGljYWxJdGVtU2l6ZSk7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoID0gTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCwgYnVmZmVyU2l6ZSk7XHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbUxlbmd0aCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICsgYnVmZmVyU2l6ZSA+IHRvdGFsTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRvdGFsTGVuZ3RoIC0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgOiBidWZmZXJTaXplO1xyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQgPSBsZWZ0SXRlbUxlbmd0aCAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodCA9IHJpZ2h0SXRlbUxlbmd0aCAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ID0gaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0b3RhbExlbmd0aCAqIHR5cGljYWxJdGVtU2l6ZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGsgPSB0b3RhbFNpemUgIT09IDAgPyBwcmV2aW91c1RvdGFsU2l6ZSAvIHRvdGFsU2l6ZSA6IDA7XHJcbiAgICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBzY3JvbGxTaXplICogaztcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhcnRJbmRleCA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgLSBsZWZ0SXRlbUxlbmd0aCwgdG90YWxMZW5ndGggPiAwID8gdG90YWxMZW5ndGggLSAxIDogMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGl0ZW1zT25EaXNwbGF5V2VpZ2h0ID0gdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCAtIGxlZnRJdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgaXRlbXNPbkRpc3BsYXlMZW5ndGggPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCAtIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgLSBsZWZ0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHJlbmRlckl0ZW1zID0gaXRlbXNPbkRpc3BsYXlMZW5ndGggKyBsZWZ0SXRlbUxlbmd0aCArIHJpZ2h0SXRlbUxlbmd0aCxcclxuICAgICAgICAgICAgZGVsdGEgPSBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zICsgbGVmdFNpemVPZkFkZGVkSXRlbXMgLSBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zICsgZGVsdGFGcm9tU3RhcnRDcmVhdGlvbjtcclxuXHJcbiAgICAgICAgY29uc3QgbWV0cmljczogSU1ldHJpY3MgPSB7XHJcbiAgICAgICAgICAgIGRlbHRhLFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbVdpZHRoOiB3LFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbUhlaWdodDogaCxcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIGl0ZW1TaXplLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCxcclxuICAgICAgICAgICAgaXRlbXNPbkRpc3BsYXlXZWlnaHQsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHJlbmRlckl0ZW1zLFxyXG4gICAgICAgICAgICByaWdodEl0ZW1MZW5ndGgsXHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIGxlZnRTaXplT2ZBZGRlZEl0ZW1zLFxyXG4gICAgICAgICAgICBzaXplUHJvcGVydHksXHJcbiAgICAgICAgICAgIHNuYXAsXHJcbiAgICAgICAgICAgIHNuaXBwZWRQb3MsXHJcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQsXHJcbiAgICAgICAgICAgIHRvdGFsTGVuZ3RoLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUsXHJcbiAgICAgICAgICAgIHR5cGljYWxJdGVtU2l6ZSxcclxuICAgICAgICAgICAgaXNGcm9tSXRlbUlkRm91bmQsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1ldHJpY3M7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJEZWx0YURpcmVjdGlvbigpIHtcclxuICAgICAgICB0aGlzLmNsZWFyU2Nyb2xsRGlyZWN0aW9uQ2FjaGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckRlbHRhKGNsZWFyRGlyZWN0aW9uRGV0ZWN0b3IgPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2RlbHRhID0gMDtcclxuXHJcbiAgICAgICAgaWYgKGNsZWFyRGlyZWN0aW9uRGV0ZWN0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclNjcm9sbERpcmVjdGlvbkNhY2hlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5idW1wVmVyc2lvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZURpc3BsYXlDb2xsZWN0aW9uPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KGl0ZW1zOiBDLCBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwLFxyXG4gICAgICAgIG1ldHJpY3M6IElNZXRyaWNzKTogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB7XHJcbiAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbVdpZHRoLFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICByZW5kZXJJdGVtczogcmVuZGVySXRlbXNMZW5ndGgsXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIHNpemVQcm9wZXJ0eSxcclxuICAgICAgICAgICAgc25hcCxcclxuICAgICAgICAgICAgc25pcHBlZFBvcyxcclxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgdG90YWxMZW5ndGgsXHJcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgsXHJcbiAgICAgICAgICAgIHR5cGljYWxJdGVtU2l6ZSxcclxuICAgICAgICB9ID0gbWV0cmljcyxcclxuICAgICAgICAgICAgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBhY3R1YWxTbmlwcGVkUG9zaXRpb24gPSBzbmlwcGVkUG9zLCBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB0aGlzLmlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCxcclxuICAgICAgICAgICAgICAgIGJvdW5kc1NpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgsIGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiA9IGJvdW5kc1NpemU7XHJcbiAgICAgICAgICAgIGxldCBwb3MgPSBzdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySXRlbXMgPSByZW5kZXJJdGVtc0xlbmd0aCxcclxuICAgICAgICAgICAgICAgIHN0aWNreUl0ZW06IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQsIG5leHRTdGlja3k6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQsIHN0aWNreUl0ZW1JbmRleCA9IC0xLFxyXG4gICAgICAgICAgICAgICAgc3RpY2t5SXRlbVNpemUgPSAwLCBlbmRTdGlja3lJdGVtOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBuZXh0RW5kU3RpY2t5OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbUluZGV4ID0gLTEsIGVuZFN0aWNreUl0ZW1TaXplID0gMCwgY291bnQgPSAxO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNuYXApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID4gMCA/IGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgOiAwLCB0b3RhbExlbmd0aCAtIDEpOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXRlbXNbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbXNbaV0uaWQsIGNhY2hlID0gdGhpcy5nZXQoaWQpISwgc3RpY2t5ID0gaXRlbUNvbmZpZ01hcFtpZF0/LnN0aWNreSA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LnNlbGVjdGFibGUgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2FibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uY29sbGFwc2FibGUgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBkeW5hbWljU2l6ZSA/IGNhY2hlPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemUgOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0aWNreSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09kZCA9IGkgJSAyICE9IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBpc1ZlcnRpY2FsID8gMCA6IGFjdHVhbFNuaXBwZWRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBpc1ZlcnRpY2FsID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogaXNWZXJ0aWNhbCA/IG5vcm1hbGl6ZWRJdGVtV2lkdGggOiBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXNWZXJ0aWNhbCA/IHNpemUgOiBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXc6IChjYWNoZSBhcyBDYWNoZSk/LltJU19ORVddID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9kZDogaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbjogIWlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2FibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWRPdXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogY291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbURhdGE6IEkgPSBpdGVtc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0gPSB7IGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBjb25maWcgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbUluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbVNpemUgPSBzaXplO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zLnB1c2goc3RpY2t5SXRlbSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzbmFwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCArIGl0ZW1zT25EaXNwbGF5TGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1pbihzdGFydEluZGV4LCB0b3RhbExlbmd0aCA+IDAgPyB0b3RhbExlbmd0aCAtIDEgOiAwKSwgbCA9IHRvdGFsTGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtc1tpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtc1tpXS5pZCwgY2FjaGUgPSB0aGlzLmdldChpZCkhLCBzdGlja3kgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc2VsZWN0YWJsZSA/PyB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSA9IGl0ZW1Db25maWdNYXBbaWRdPy5jb2xsYXBzYWJsZSA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGR5bmFtaWNTaXplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNhY2hlPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGlja3kgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNPZGQgPSBpICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGlzVmVydGljYWwgPyBub3JtYWxpemVkSXRlbVdpZHRoIDogc2l6ZSwgaCA9IGlzVmVydGljYWwgPyBzaXplIDogbm9ybWFsaXplZEl0ZW1IZWlnaHQsIG1lYXN1cmVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGlzVmVydGljYWwgPyAwIDogYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gdyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBpc1ZlcnRpY2FsID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gaCA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldzogKGNhY2hlIGFzIENhY2hlKT8uW0lTX05FV10gPT09IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiBpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuOiAhaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZE91dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4OiBpdGVtcy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbURhdGE6IEkgPSBpdGVtc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0gPSB7IGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBjb25maWcgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbUluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbVNpemUgPSBzaXplO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zLnB1c2goZW5kU3RpY2t5SXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGkgPSBzdGFydEluZGV4O1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHJlbmRlckl0ZW1zID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgPj0gdG90YWxMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghaXRlbXNbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1zW2ldLmlkLCBjYWNoZSA9IHRoaXMuZ2V0KGlkKSEsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGR5bmFtaWNTaXplID8gY2FjaGU/LltzaXplUHJvcGVydHldIHx8IHR5cGljYWxJdGVtU2l6ZSA6IHR5cGljYWxJdGVtU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaWQgIT09IHN0aWNreUl0ZW0/LmlkICYmIGlkICE9PSBlbmRTdGlja3lJdGVtPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzT2RkID0gaSAlIDIgIT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5ID0gaXRlbUNvbmZpZ01hcFtpZF0/LnN0aWNreSA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LnNlbGVjdGFibGUgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2FibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uY29sbGFwc2FibGUgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWQgPSBzbmFwICYmIChzdGlja3kgPT09IDEgJiYgcG9zIDw9IHNjcm9sbFNpemUgfHwgc3RpY2t5ID09PSAyICYmIHBvcyA+PSBzY3JvbGxTaXplICsgYm91bmRzU2l6ZSAtIHNpemUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGlzVmVydGljYWwgPyBzdGlja3kgPT09IDEgPyAwIDogYm91bmRzU2l6ZSAtIHNpemUgOiBwb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBpc1ZlcnRpY2FsID8gcG9zIDogc3RpY2t5ID09PSAyID8gYm91bmRzU2l6ZSAtIHNpemUgOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGlzVmVydGljYWwgPyBub3JtYWxpemVkSXRlbVdpZHRoIDogc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXNWZXJ0aWNhbCA/IHNpemUgOiBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBjb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXc6IChjYWNoZSBhcyBDYWNoZSk/LltJU19ORVddID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiBpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW46ICFpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3k6IHN0aWNreSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWRPdXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogY291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6ICcwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNuYXBwZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnpJbmRleCA9ICcyJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1EYXRhOiBJID0gaXRlbXNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW06IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gPSB7IGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBjb25maWcgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRTdGlja3kgJiYgc3RpY2t5SXRlbUluZGV4IDwgaSAmJiBzdGlja3kgPT09IDEgJiYgKHBvcyA8PSBzY3JvbGxTaXplICsgc2l6ZSArIHN0aWNreUl0ZW1TaXplKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnggPSBpc1ZlcnRpY2FsID8gMCA6IHNuYXBwZWQgPyBhY3R1YWxTbmlwcGVkUG9zaXRpb24gOiBwb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueSA9IGlzVmVydGljYWwgPyBzbmFwcGVkID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogcG9zIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBzbmFwcGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gaXNWZXJ0aWNhbCA/IChpdGVtLm1lYXN1cmVzLnkgLSBzY3JvbGxTaXplKSA6IChpdGVtLm1lYXN1cmVzLnggLSBzY3JvbGxTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5jb25maWcuekluZGV4ID0gJzMnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW5leHRFbmRTdGlja3kgJiYgZW5kU3RpY2t5SXRlbUluZGV4ID4gaSAmJiBzdGlja3kgPT09IDIgJiYgKHBvcyA+PSBzY3JvbGxTaXplICsgYm91bmRzU2l6ZSAtIHNpemUgLSBlbmRTdGlja3lJdGVtU2l6ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy54ID0gaXNWZXJ0aWNhbCA/IDAgOiBzbmFwcGVkID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gc2l6ZSA6IHBvcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy55ID0gaXNWZXJ0aWNhbCA/IHNuYXBwZWQgPyBhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gLSBzaXplIDogcG9zIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kuY29uZmlnLnpJbmRleCA9ICczJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreS5jb25maWcuc25hcHBlZCA9IHNuYXBwZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kubWVhc3VyZXMuZGVsdGEgPSBpc1ZlcnRpY2FsID8gKGl0ZW0ubWVhc3VyZXMueSAtIHNjcm9sbFNpemUpIDogKGl0ZW0ubWVhc3VyZXMueCAtIHNjcm9sbFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVySXRlbXMgLT0gMTtcclxuICAgICAgICAgICAgICAgIHBvcyArPSBzaXplO1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBheGlzID0gaXNWZXJ0aWNhbCA/IFlfUFJPUF9OQU1FIDogWF9QUk9QX05BTUU7XHJcblxyXG4gICAgICAgICAgICBpZiAobmV4dFN0aWNreSAmJiBzdGlja3lJdGVtICYmIG5leHRTdGlja3kubWVhc3VyZXNbYXhpc10gPD0gc2Nyb2xsU2l6ZSArIHN0aWNreUl0ZW1TaXplKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSA+IHNjcm9sbFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLm1lYXN1cmVzW2F4aXNdID0gbmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSAtIHN0aWNreUl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWQgPSBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc25hcHBlZE91dCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc3RpY2t5ID0gMTtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLm1lYXN1cmVzLmRlbHRhID0gaXNWZXJ0aWNhbCA/IHN0aWNreUl0ZW0ubWVhc3VyZXMueSAtIHNjcm9sbFNpemUgOiBzdGlja3lJdGVtLm1lYXN1cmVzLnggLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gaXNWZXJ0aWNhbCA/IG5leHRTdGlja3kubWVhc3VyZXMueSAtIHNjcm9sbFNpemUgOiBuZXh0U3RpY2t5Lm1lYXN1cmVzLnggLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobmV4dEVuZFN0aWNreSAmJiBlbmRTdGlja3lJdGVtICYmIG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gPj0gc2Nyb2xsU2l6ZSArIGJvdW5kc1NpemUgLSBlbmRTdGlja3lJdGVtU2l6ZSAtIG5leHRFbmRTdGlja3kubWVhc3VyZXNbc2l6ZVByb3BlcnR5XSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gPCBzY3JvbGxTaXplICsgYm91bmRzU2l6ZSAtIGVuZFN0aWNreUl0ZW1TaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5tZWFzdXJlc1theGlzXSA9IG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gKyBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW3NpemVQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5jb25maWcuc25hcHBlZCA9IG5leHRFbmRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLmNvbmZpZy5zbmFwcGVkT3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLmNvbmZpZy5zdGlja3kgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0ubWVhc3VyZXMuZGVsdGEgPSBpc1ZlcnRpY2FsID8gZW5kU3RpY2t5SXRlbS5tZWFzdXJlcy55IC0gc2Nyb2xsU2l6ZSA6IGVuZFN0aWNreUl0ZW0ubWVhc3VyZXMueCAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kubWVhc3VyZXMuZGVsdGEgPSBpc1ZlcnRpY2FsID8gbmV4dEVuZFN0aWNreS5tZWFzdXJlcy55IC0gc2Nyb2xsU2l6ZSA6IG5leHRFbmRTdGlja3kubWVhc3VyZXMueCAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRpc3BsYXlJdGVtcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHRyYWNraW5nIGJ5IHByb3BOYW1lXHJcbiAgICAgKi9cclxuICAgIHRyYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5faXRlbXMgfHwgIXRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIudHJhY2sodGhpcy5faXRlbXMsIHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLCB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50LCB0aGlzLnNjcm9sbERpcmVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCh2OiB7IFtpZDogbnVtYmVyXTogbnVtYmVyIH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90cmFja2VyLmRpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHVudHJhY2tDb21wb25lbnRCeUlkUHJvcGVydHkoY29tcG9uZW50PzogQyB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIudW50cmFja0NvbXBvbmVudEJ5SWRQcm9wZXJ0eShjb21wb25lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEl0ZW1Cb3VuZHMoaWQ6IElkKTogSVNpemUgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY2FjaGVFbGVtZW50cygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzW2ldLCBpdGVtSWQgPSBjb21wb25lbnQuaW5zdGFuY2UuaXRlbUlkO1xyXG4gICAgICAgICAgICBpZiAoaXRlbUlkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGNvbXBvbmVudC5pbnN0YW5jZS5nZXRCb3VuZHMoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXQoaXRlbUlkLCB7IC4uLih0aGlzLmdldChpdGVtSWQpIHx8IHt9KSwgLi4uYm91bmRzIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBkaXNwb3NlKCkge1xyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXNwb3NlQ2xlYXJCdWZmZXJTaXplVGltZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJhY2tlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
822
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tCb3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy90cmFja0JveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsUUFBUSxFQUFRLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRS9HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzdELE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDdEIsbUNBQWlCLENBQUE7SUFDakIsaUNBQWUsQ0FBQTtBQUNuQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFrRUQsTUFBTSxDQUFOLElBQVksa0JBS1g7QUFMRCxXQUFZLGtCQUFrQjtJQUMxQiwrREFBTSxDQUFBO0lBQ04sK0RBQU0sQ0FBQTtJQUNOLCtEQUFNLENBQUE7SUFDTix5RUFBVyxDQUFBO0FBQ2YsQ0FBQyxFQUxXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFLN0I7QUFTRCxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsRUFDeEMsa0NBQWtDLEdBQUcsRUFBRSxFQUN2QyxpQ0FBaUMsR0FBRyxLQUFLLEVBQ3pDLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFJckI7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sUUFDVCxTQUFRLFFBQXNEO0lBRXBELFFBQVEsQ0FBYztJQUV0QixNQUFNLENBQWtEO0lBRWxFLElBQUksS0FBSyxDQUFDLENBQWtEO1FBQ3hELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbkIsT0FBTztTQUNWO1FBRUQsSUFBSSxD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UUFFbkMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMzQjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24sIH0gZnJvbSBcIi4uL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSBcIi4uL21vZGVscy9yZW5kZXItaXRlbS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJZCB9IGZyb20gXCIuLi90eXBlcy9pZFwiO1xyXG5pbXBvcnQgeyBDYWNoZU1hcCwgQ01hcCB9IGZyb20gXCIuL2NhY2hlTWFwXCI7XHJcbmltcG9ydCB7IFRyYWNrZXIgfSBmcm9tIFwiLi90cmFja2VyXCI7XHJcbmltcG9ydCB7IElTaXplIH0gZnJvbSBcIi4uL3R5cGVzXCI7XHJcbmltcG9ydCB7IEhFSUdIVF9QUk9QX05BTUUsIFRSQUNLX0JZX1BST1BFUlRZX05BTUUsIFdJRFRIX1BST1BfTkFNRSwgWF9QUk9QX05BTUUsIFlfUFJPUF9OQU1FIH0gZnJvbSBcIi4uL2NvbnN0XCI7XHJcbmltcG9ydCB7IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XHJcbmltcG9ydCB7IGJ1ZmZlckludGVycG9sYXRpb24gfSBmcm9tIFwiLi9idWZmZXItaW50ZXJwb2xhdGlvblwiO1xyXG5pbXBvcnQgeyBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSBcIi4uL21vZGVscy9iYXNlLXZpcnR1YWwtbGlzdC1pdGVtLWNvbXBvbmVudFwiO1xyXG5cclxuZXhwb3J0IGVudW0gVHJhY2tCb3hFdmVudHMge1xyXG4gICAgQ0hBTkdFID0gJ2NoYW5nZScsXHJcbiAgICBSRVNFVCA9ICdyZXNldCcsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1ldHJpY3Mge1xyXG4gICAgZGVsdGE6IG51bWJlcjtcclxuICAgIG5vcm1hbGl6ZWRJdGVtV2lkdGg6IG51bWJlcjtcclxuICAgIG5vcm1hbGl6ZWRJdGVtSGVpZ2h0OiBudW1iZXI7XHJcbiAgICB3aWR0aDogbnVtYmVyO1xyXG4gICAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgICBkeW5hbWljU2l6ZTogYm9vbGVhbjtcclxuICAgIGl0ZW1TaXplOiBudW1iZXI7XHJcbiAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kOiBudW1iZXI7XHJcbiAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZDogbnVtYmVyO1xyXG4gICAgaXRlbXNPbkRpc3BsYXlXZWlnaHQ6IG51bWJlcjtcclxuICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoOiBudW1iZXI7XHJcbiAgICBpc1ZlcnRpY2FsOiBib29sZWFuO1xyXG4gICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0OiBudW1iZXI7XHJcbiAgICBsZWZ0SXRlbUxlbmd0aDogbnVtYmVyO1xyXG4gICAgbGVmdEl0ZW1zV2VpZ2h0OiBudW1iZXI7XHJcbiAgICByZW5kZXJJdGVtczogbnVtYmVyO1xyXG4gICAgcmlnaHRJdGVtTGVuZ3RoOiBudW1iZXI7XHJcbiAgICByaWdodEl0ZW1zV2VpZ2h0OiBudW1iZXI7XHJcbiAgICBzY3JvbGxTaXplOiBudW1iZXI7XHJcbiAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtczogbnVtYmVyO1xyXG4gICAgc2l6ZVByb3BlcnR5OiB0eXBlb2YgSEVJR0hUX1BST1BfTkFNRSB8IHR5cGVvZiBXSURUSF9QUk9QX05BTUU7XHJcbiAgICBzbmFwOiBib29sZWFuO1xyXG4gICAgc25pcHBlZFBvczogbnVtYmVyO1xyXG4gICAgc3RhcnRJbmRleDogbnVtYmVyO1xyXG4gICAgc3RhcnRQb3NpdGlvbjogbnVtYmVyO1xyXG4gICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodDogbnVtYmVyO1xyXG4gICAgdG90YWxMZW5ndGg6IG51bWJlcjtcclxuICAgIHRvdGFsU2l6ZTogbnVtYmVyO1xyXG4gICAgdHlwaWNhbEl0ZW1TaXplOiBudW1iZXI7XHJcbiAgICBpc0Zyb21JdGVtSWRGb3VuZDogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PiB7XHJcbiAgICBib3VuZHM6IElTaXplO1xyXG4gICAgY29sbGVjdGlvbjogQztcclxuICAgIGlzVmVydGljYWw6IGJvb2xlYW47XHJcbiAgICBpdGVtU2l6ZTogbnVtYmVyO1xyXG4gICAgYnVmZmVyU2l6ZTogbnVtYmVyO1xyXG4gICAgbWF4QnVmZmVyU2l6ZTogbnVtYmVyO1xyXG4gICAgZHluYW1pY1NpemU6IGJvb2xlYW47XHJcbiAgICBzY3JvbGxTaXplOiBudW1iZXI7XHJcbiAgICBzbmFwOiBib29sZWFuO1xyXG4gICAgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbjogYm9vbGVhbjtcclxuICAgIGZyb21JdGVtSWQ/OiBJZDtcclxuICAgIHByZXZpb3VzVG90YWxTaXplOiBudW1iZXI7XHJcbiAgICBjcnVkRGV0ZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBkZWxldGVkSXRlbXNNYXA6IHsgW2luZGV4OiBudW1iZXJdOiBJU2l6ZTsgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR2V0SXRlbVBvc2l0aW9uT3B0aW9uczxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PlxyXG4gICAgZXh0ZW5kcyBPbWl0PElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEksIEM+LCAncHJldmlvdXNUb3RhbFNpemUnIHwgJ2NydWREZXRlY3RlZCcgfCAnZGVsZXRlZEl0ZW1zTWFwJz4geyB9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9uczxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PlxyXG4gICAgZXh0ZW5kcyBPbWl0PElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEksIEM+LCAnY29sbGVjdGlvbicgfCAncHJldmlvdXNUb3RhbFNpemUnIHwgJ2NydWREZXRlY3RlZCcgfCAnZGVsZXRlZEl0ZW1zTWFwJz4geyB9XHJcblxyXG5leHBvcnQgdHlwZSBDYWNoZU1hcEV2ZW50cyA9IFRyYWNrQm94RXZlbnRzLkNIQU5HRSB8IFRyYWNrQm94RXZlbnRzLlJFU0VUO1xyXG5cclxuZXhwb3J0IHR5cGUgT25DaGFuZ2VFdmVudExpc3RlbmVyID0gKHZlcnNpb246IG51bWJlcikgPT4gdm9pZDtcclxuXHJcbmV4cG9ydCB0eXBlIE9uUmVzZXRFdmVudExpc3RlbmVyID0gKHJlc2V0ZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XHJcblxyXG5leHBvcnQgdHlwZSBDYWNoZU1hcExpc3RlbmVycyA9IE9uQ2hhbmdlRXZlbnRMaXN0ZW5lciB8IE9uUmVzZXRFdmVudExpc3RlbmVyO1xyXG5cclxuZXhwb3J0IGVudW0gSXRlbURpc3BsYXlNZXRob2RzIHtcclxuICAgIENSRUFURSxcclxuICAgIFVQREFURSxcclxuICAgIERFTEVURSxcclxuICAgIE5PVF9DSEFOR0VELFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVcGRhdGVDb2xsZWN0aW9uUmV0dXJucyB7XHJcbiAgICBkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb247XHJcbiAgICB0b3RhbFNpemU6IG51bWJlcjtcclxuICAgIGRlbHRhOiBudW1iZXI7XHJcbiAgICBjcnVkRGV0ZWN0ZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRfQlVGRkVSX0VYVFJFTVVNX1RIUkVTSE9MRCA9IDE1LFxyXG4gICAgREVGQVVMVF9NQVhfQlVGRkVSX1NFUVVFTkNFX0xFTkdUSCA9IDMwLFxyXG4gICAgREVGQVVMVF9SRVNFVF9CVUZGRVJfU0laRV9USU1FT1VUID0gMTAwMDAsXHJcbiAgICBJU19ORVcgPSAnaXNOZXcnO1xyXG5cclxudHlwZSBDYWNoZSA9IElTaXplICYgeyBtZXRob2Q/OiBJdGVtRGlzcGxheU1ldGhvZHMgfSAmIHsgW3Byb3A6IHN0cmluZ106IGFueSB9O1xyXG5cclxuLyoqXHJcbiAqIEFuIG9iamVjdCB0aGF0IHBlcmZvcm1zIHRyYWNraW5nLCBjYWxjdWxhdGlvbnMgYW5kIGNhY2hpbmcuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvdHJhY2tCb3gudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRyYWNrQm94PEMgZXh0ZW5kcyBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50ID0gYW55PlxyXG4gICAgZXh0ZW5kcyBDYWNoZU1hcDxJZCwgQ2FjaGUsIENhY2hlTWFwRXZlbnRzLCBDYWNoZU1hcExpc3RlbmVycz4ge1xyXG5cclxuICAgIHByb3RlY3RlZCBfdHJhY2tlciE6IFRyYWNrZXI8Qz47XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pdGVtczogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgc2V0IGl0ZW1zKHY6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1zID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8Qz4+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBzZXQgZGlzcGxheUNvbXBvbmVudHModjogQXJyYXk8Q29tcG9uZW50UmVmPEM+PiB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGlzcGxheUNvbXBvbmVudHMgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGlzcGxheUNvbXBvbmVudHMgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc25hcGVkRGlzcGxheUNvbXBvbmVudDogQ29tcG9uZW50UmVmPEM+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBzZXQgc25hcGVkRGlzcGxheUNvbXBvbmVudCh2OiBDb21wb25lbnRSZWY8Qz4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBzZXQgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKHY6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc0xhenk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBzZXQgaXNMYXp5KHY6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5faXNMYXp5ID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2lzTGF6eSA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHRyYWNrQnkgcHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgc2V0IHRyYWNraW5nUHJvcGVydHlOYW1lKHY6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lID0gdGhpcy5fdHJhY2tlci50cmFja2luZ1Byb3BlcnR5TmFtZSA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF90cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nID0gVFJBQ0tfQllfUFJPUEVSVFlfTkFNRTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB0cmFja2luZ1Byb3BlcnR5TmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlciA9IG5ldyBUcmFja2VyKHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBzZXQoaWQ6IElkLCBib3VuZHM6IElTaXplKTogQ01hcDxJZCwgSVNpemU+IHtcclxuICAgICAgICBpZiAodGhpcy5fbWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgY29uc3QgYiA9IHRoaXMuX21hcC5nZXQoaWQpO1xyXG4gICAgICAgICAgICBpZiAoYj8ud2lkdGggPT09IGJvdW5kcy53aWR0aCAmJiBiLmhlaWdodCA9PT0gYm91bmRzLmhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuX21hcC5zZXQoaWQsIGJvdW5kcyk7XHJcblxyXG4gICAgICAgIHRoaXMuYnVtcFZlcnNpb24oKTtcclxuICAgICAgICByZXR1cm4gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3ByZXZpb3VzQ29sbGVjdGlvbjogQXJyYXk8eyBpZDogSWQ7IH0+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2RlbGV0ZWRJdGVtc01hcDogeyBbaW5kZXg6IG51bWJlcl06IElTaXplIH0gPSB7fTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NydWREZXRlY3RlZCA9IGZhbHNlO1xyXG4gICAgZ2V0IGNydWREZXRlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX2NydWREZXRlY3RlZDsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBmaXJlQ2hhbmdlSWZOZWVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZXNEZXRlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goVHJhY2tCb3hFdmVudHMuQ0hBTkdFLCB0aGlzLl92ZXJzaW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9wcmV2aW91c1RvdGFsU2l6ZSA9IDA7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9zY3JvbGxEZWx0YTogbnVtYmVyID0gMDtcclxuICAgIGdldCBzY3JvbGxEZWx0YSgpIHsgcmV0dXJuIHRoaXMuX3Njcm9sbERlbHRhOyB9XHJcblxyXG4gICAgaXNBZGFwdGl2ZUJ1ZmZlciA9IHRydWU7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTZXF1ZW5jZUV4dHJhVGhyZXNob2xkID0gREVGQVVMVF9CVUZGRVJfRVhUUkVNVU1fVEhSRVNIT0xEO1xyXG5cclxuICAgIHByb3RlY3RlZCBfbWF4QnVmZmVyU2VxdWVuY2VMZW5ndGggPSBERUZBVUxUX01BWF9CVUZGRVJfU0VRVUVOQ0VfTEVOR1RIO1xyXG5cclxuICAgIHByb3RlY3RlZCBfYnVmZmVyU2l6ZVNlcXVlbmNlOiBBcnJheTxudW1iZXI+ID0gW107XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl9idWZmZXJTaXplOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0QnVmZmVyU2l6ZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX21heEJ1ZmZlclNpemU6IG51bWJlciA9IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZW91dDogbnVtYmVyID0gREVGQVVMVF9SRVNFVF9CVUZGRVJfU0laRV9USU1FT1VUO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgaXNSZXNldGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbGlmZUNpcmNsZSgpIHtcclxuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VJZk5lZWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saWZlQ2lyY2xlRG8oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBjb2xsZWN0aW9uIGZvciBkZWxldGVkIGl0ZW1zIGFuZCBmbHVzaGVzIHRoZSBkZWxldGVkIGl0ZW0gY2FjaGUuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0Q29sbGVjdGlvbjxJIGV4dGVuZHMgeyBpZDogSWQ7IH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oY3VycmVudENvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLCBpdGVtU2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRDb2xsZWN0aW9uICE9PSB1bmRlZmluZWQgJiYgY3VycmVudENvbGxlY3Rpb24gIT09IG51bGwgJiYgY3VycmVudENvbGxlY3Rpb24gPT09IHRoaXMuX3ByZXZpb3VzQ29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0F0dGVudGlvbiEgVGhlIGNvbGxlY3Rpb24gbXVzdCBiZSBpbW11dGFibGUuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByZXNldGVkID0gdGhpcy5pc1Jlc2V0ZWQ7XHJcbiAgICAgICAgaWYgKHJlc2V0ZWQpIHtcclxuICAgICAgICAgICAgaWYgKCEoIXRoaXMuX3ByZXZpb3VzQ29sbGVjdGlvbiB8fCB0aGlzLl9wcmV2aW91c0NvbGxlY3Rpb24ubGVuZ3RoID09PSAwKSkge1xyXG4gICAgICAgICAgICAgICAgcmVzZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlc2V0ZWQgJiYgKCFjdXJyZW50Q29sbGVjdGlvbiB8fCBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGggPT09IDApKSB7XHJcbiAgICAgICAgICAgIHJlc2V0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1Jlc2V0ZWQgPSByZXNldGVkO1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2goVHJhY2tCb3hFdmVudHMuUkVTRVQsIHJlc2V0ZWQpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKHRoaXMuX3ByZXZpb3VzQ29sbGVjdGlvbiwgY3VycmVudENvbGxlY3Rpb24sIGl0ZW1TaXplKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNDb2xsZWN0aW9uID0gWy4uLihjdXJyZW50Q29sbGVjdGlvbiB8fCBbXSldO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSBjYWNoZSBvZiBpdGVtcyBmcm9tIHRoZSBsaXN0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVDYWNoZTxJIGV4dGVuZHMgeyBpZDogSWQ7IH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4ocHJldmlvdXNDb2xsZWN0aW9uOiBDIHwgbnVsbCB8IHVuZGVmaW5lZCwgY3VycmVudENvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIGl0ZW1TaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBsZXQgY3J1ZERldGVjdGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghY3VycmVudENvbGxlY3Rpb24gfHwgY3VycmVudENvbGxlY3Rpb24ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0NvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIGRlbGV0ZWRcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gcHJldmlvdXNDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwcmV2aW91c0NvbGxlY3Rpb25baV0sIGlkID0gaXRlbS5pZDtcclxuICAgICAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZGVsZXRlKGlkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZpb3VzQ29sbGVjdGlvbiB8fCBwcmV2aW91c0NvbGxlY3Rpb24ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50Q29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkZWRcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY3VycmVudENvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3J1ZERldGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3VycmVudENvbGxlY3Rpb25baV0sIGlkID0gaXRlbS5pZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSwgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbkRpY3Q6IHsgW2lkOiBJZF06IEkgfSA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY3VycmVudENvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdXJyZW50Q29sbGVjdGlvbltpXTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25EaWN0W2l0ZW0uaWRdID0gaXRlbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBub3RDaGFuZ2VkTWFwOiB7IFtpZDogSWRdOiBJIH0gPSB7fSwgZGVsZXRlZE1hcDogeyBbaWQ6IElkXTogSSB9ID0ge30sIGRlbGV0ZWRJdGVtc01hcDogeyBbaW5kZXg6IG51bWJlcl06IElTaXplIH0gPSB7fSwgdXBkYXRlZE1hcDogeyBbaWQ6IElkXTogSSB9ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwcmV2aW91c0NvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwcmV2aW91c0NvbGxlY3Rpb25baV0sIGlkID0gaXRlbS5pZDtcclxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uRGljdC5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gY29sbGVjdGlvbkRpY3RbaWRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdENoYW5nZWRNYXBbaXRlbS5pZF0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7IC4uLih0aGlzLl9tYXAuZ2V0KGlkKSB8fCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSB9KSwgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZERldGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZE1hcFtpdGVtLmlkXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoaWQsIHsgLi4uKHRoaXMuX21hcC5nZXQoaWQpIHx8IHsgd2lkdGg6IGl0ZW1TaXplLCBoZWlnaHQ6IGl0ZW1TaXplIH0pLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBkZWxldGVkXHJcbiAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZE1hcFtpdGVtLmlkXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkSXRlbXNNYXBbaV0gPSB0aGlzLl9tYXAuZ2V0KGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY3VycmVudENvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdXJyZW50Q29sbGVjdGlvbltpXSwgaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSAmJiAhZGVsZXRlZE1hcC5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgIXVwZGF0ZWRNYXAuaGFzT3duUHJvcGVydHkoaWQpICYmICFub3RDaGFuZ2VkTWFwLmhhc093blByb3BlcnR5KGlkKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkZWRcclxuICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSwgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NydWREZXRlY3RlZCA9IGNydWREZXRlY3RlZDtcclxuICAgICAgICB0aGlzLl9kZWxldGVkSXRlbXNNYXAgPSBkZWxldGVkSXRlbXNNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyB0aGUgcG9zaXRpb24gb2YgYSBjb2xsZWN0aW9uIGVsZW1lbnQgYnkgdGhlIGdpdmVuIElkXHJcbiAgICAgKi9cclxuICAgIGdldEl0ZW1Qb3NpdGlvbjxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PihpZDogSWQsIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgb3B0aW9uczogSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnM8SSwgQz4pOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IG9wdCA9IHsgZnJvbUl0ZW1JZDogaWQsIGl0ZW1Db25maWdNYXAsIC4uLm9wdGlvbnMgfTtcclxuICAgICAgICB0aGlzLl9kZWZhdWx0QnVmZmVyU2l6ZSA9IG9wdC5idWZmZXJTaXplO1xyXG4gICAgICAgIHRoaXMuX21heEJ1ZmZlclNpemUgPSBvcHQubWF4QnVmZmVyU2l6ZTtcclxuXHJcbiAgICAgICAgY29uc3QgeyBzY3JvbGxTaXplLCBpc0Zyb21JdGVtSWRGb3VuZCB9ID0gdGhpcy5yZWNhbGN1bGF0ZU1ldHJpY3Moe1xyXG4gICAgICAgICAgICAuLi5vcHQsXHJcbiAgICAgICAgICAgIGR5bmFtaWNTaXplOiB0aGlzLl9jcnVkRGV0ZWN0ZWQgfHwgb3B0LmR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICBwcmV2aW91c1RvdGFsU2l6ZTogdGhpcy5fcHJldmlvdXNUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGNydWREZXRlY3RlZDogdGhpcy5fY3J1ZERldGVjdGVkLFxyXG4gICAgICAgICAgICBkZWxldGVkSXRlbXNNYXA6IHRoaXMuX2RlbGV0ZWRJdGVtc01hcCxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaXNGcm9tSXRlbUlkRm91bmQgPyBzY3JvbGxTaXplIDogLTE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0c1xyXG4gICAgICovXHJcbiAgICB1cGRhdGVDb2xsZWN0aW9uPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KGl0ZW1zOiBDLCBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwLFxyXG4gICAgICAgIG9wdGlvbnM6IElVcGRhdGVDb2xsZWN0aW9uT3B0aW9uczxJLCBDPik6IElVcGRhdGVDb2xsZWN0aW9uUmV0dXJucyB7XHJcbiAgICAgICAgY29uc3Qgb3B0ID0geyBpdGVtQ29uZmlnTWFwLCAuLi5vcHRpb25zIH0sIGNydWREZXRlY3RlZCA9IHRoaXMuX2NydWREZXRlY3RlZCwgZGVsZXRlZEl0ZW1zTWFwID0gdGhpcy5fZGVsZXRlZEl0ZW1zTWFwO1xyXG4gICAgICAgIGlmIChvcHQuZHluYW1pY1NpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplID0gb3B0LmJ1ZmZlclNpemU7XHJcbiAgICAgICAgdGhpcy5fbWF4QnVmZmVyU2l6ZSA9IG9wdC5tYXhCdWZmZXJTaXplO1xyXG5cclxuICAgICAgICBjb25zdCBtZXRyaWNzID0gdGhpcy5yZWNhbGN1bGF0ZU1ldHJpY3Moe1xyXG4gICAgICAgICAgICAuLi5vcHQsXHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGl0ZW1zLFxyXG4gICAgICAgICAgICBwcmV2aW91c1RvdGFsU2l6ZTogdGhpcy5fcHJldmlvdXNUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGNydWREZXRlY3RlZDogdGhpcy5fY3J1ZERldGVjdGVkLFxyXG4gICAgICAgICAgICBkZWxldGVkSXRlbXNNYXAsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlbHRhICs9IG1ldHJpY3MuZGVsdGE7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQWRhcHRpdmVCdWZmZXJQYXJhbXMobWV0cmljcywgaXRlbXMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNUb3RhbFNpemUgPSBtZXRyaWNzLnRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGVsZXRlZEl0ZW1zTWFwID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuX2NydWREZXRlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAob3B0LmR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRpc3BsYXlJdGVtcyA9IHRoaXMuZ2VuZXJhdGVEaXNwbGF5Q29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwgeyAuLi5tZXRyaWNzLCB9KTtcclxuICAgICAgICByZXR1cm4geyBkaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZTogbWV0cmljcy50b3RhbFNpemUsIGRlbHRhOiBtZXRyaWNzLmRlbHRhLCBjcnVkRGV0ZWN0ZWQgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIHRoZSBjbG9zZXN0IGVsZW1lbnQgaW4gdGhlIGNvbGxlY3Rpb24gYnkgc2Nyb2xsU2l6ZVxyXG4gICAgICovXHJcbiAgICBnZXROZWFyZXN0SXRlbTxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PihzY3JvbGxTaXplOiBudW1iZXIsIGl0ZW1zOiBDLCBpdGVtU2l6ZTogbnVtYmVyLCBpc1ZlcnRpY2FsOiBib29sZWFuKTogSSB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudEZyb21TdGFydChzY3JvbGxTaXplLCBpdGVtcywgdGhpcy5fbWFwLCBpdGVtU2l6ZSwgaXNWZXJ0aWNhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9wcmV2aW91c1Njcm9sbFNpemUgPSAwO1xyXG5cclxuICAgIHByb3RlY3RlZCB1cGRhdGVBZGFwdGl2ZUJ1ZmZlclBhcmFtcyhtZXRyaWNzOiBJTWV0cmljcywgdG90YWxJdGVtc0xlbmd0aDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwb3NlQ2xlYXJCdWZmZXJTaXplVGltZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IG1ldHJpY3Muc2Nyb2xsU2l6ZSArIHRoaXMuX2RlbHRhLCBkZWx0YSA9IE1hdGguYWJzKHRoaXMuX3ByZXZpb3VzU2Nyb2xsU2l6ZSAtIHNjcm9sbFNpemUpO1xyXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemU7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyUmF3U2l6ZSA9IE1hdGgubWluKE1hdGguZmxvb3IoZGVsdGEgLyBtZXRyaWNzLnR5cGljYWxJdGVtU2l6ZSkgKiA1LCB0b3RhbEl0ZW1zTGVuZ3RoKSxcclxuICAgICAgICAgICAgbWluQnVmZmVyU2l6ZSA9IGJ1ZmZlclJhd1NpemUgPCB0aGlzLl9kZWZhdWx0QnVmZmVyU2l6ZSA/IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplIDogYnVmZmVyUmF3U2l6ZSxcclxuICAgICAgICAgICAgYnVmZmVyVmFsdWUgPSBtaW5CdWZmZXJTaXplID4gdGhpcy5fbWF4QnVmZmVyU2l6ZSA/IHRoaXMuX21heEJ1ZmZlclNpemUgOiBtaW5CdWZmZXJTaXplO1xyXG5cclxuICAgICAgICB0aGlzLl9idWZmZXJTaXplID0gYnVmZmVySW50ZXJwb2xhdGlvbih0aGlzLl9idWZmZXJTaXplLCB0aGlzLl9idWZmZXJTaXplU2VxdWVuY2UsIGJ1ZmZlclZhbHVlLCB7XHJcbiAgICAgICAgICAgIGV4dHJlbXVtVGhyZXNob2xkOiB0aGlzLl9idWZmZXJTZXF1ZW5jZUV4dHJhVGhyZXNob2xkLFxyXG4gICAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLl9tYXhCdWZmZXJTZXF1ZW5jZUxlbmd0aCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydFJlc2V0QnVmZmVyU2l6ZVRpbWVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHN0YXJ0UmVzZXRCdWZmZXJTaXplVGltZXIoKSB7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRCdWZmZXJTaXplVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fYnVmZmVyU2l6ZSA9IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplO1xyXG4gICAgICAgICAgICB0aGlzLl9idWZmZXJTaXplU2VxdWVuY2UgPSBbXTtcclxuICAgICAgICB9LCB0aGlzLl9yZXNldEJ1ZmZlclNpemVUaW1lb3V0KSBhcyB1bmtub3duIGFzIG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZGlzcG9zZUNsZWFyQnVmZmVyU2l6ZVRpbWVyKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNldEJ1ZmZlclNpemVUaW1lcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IGJhc2VkIG9uIHRoZSBnaXZlbiBzY3JvbGxTaXplXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRFbGVtZW50RnJvbVN0YXJ0PEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KHNjcm9sbFNpemU6IG51bWJlciwgY29sbGVjdGlvbjogQywgbWFwOiBDTWFwPElkLCBJU2l6ZT4sIHR5cGljYWxJdGVtU2l6ZTogbnVtYmVyLFxyXG4gICAgICAgIGlzVmVydGljYWw6IGJvb2xlYW4pOiBJIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBjb25zdCBzaXplUHJvcGVydHkgPSBpc1ZlcnRpY2FsID8gSEVJR0hUX1BST1BfTkFNRSA6IFdJRFRIX1BST1BfTkFNRTtcclxuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0uaWQ7XHJcbiAgICAgICAgICAgIGxldCBpdGVtU2l6ZSA9IDA7XHJcbiAgICAgICAgICAgIGlmIChtYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm91bmRzID0gbWFwLmdldChpZCk7XHJcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZSA9IGJvdW5kcyA/IGJvdW5kc1tzaXplUHJvcGVydHldIDogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaXRlbVNpemUgPSB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9mZnNldCA+IHNjcm9sbFNpemUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBpdGVtU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGVudHJ5IGludG8gdGhlIG92ZXJzY3JvbGwgYXJlYSBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG92ZXJzY3JvbGwgZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldEVsZW1lbnROdW1Ub0VuZDxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PihpOiBudW1iZXIsIGNvbGxlY3Rpb246IEMsIG1hcDogQ01hcDxJZCwgSVNpemU+LCB0eXBpY2FsSXRlbVNpemU6IG51bWJlcixcclxuICAgICAgICBzaXplOiBudW1iZXIsIGlzVmVydGljYWw6IGJvb2xlYW4sIGluZGV4T2Zmc2V0OiBudW1iZXIgPSAwKTogeyBudW06IG51bWJlciwgb2Zmc2V0OiBudW1iZXIgfSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZVByb3BlcnR5ID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUU7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IDAsIG51bSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbGxlY3Rpb24ubGVuZ3RoIC0gaW5kZXhPZmZzZXQgLSAxOyBqID49IGk7IGotLSkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gY29sbGVjdGlvbltqXSwgaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgICAgICBsZXQgaXRlbVNpemUgPSAwO1xyXG4gICAgICAgICAgICBpZiAobWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IG1hcC5nZXQoaWQpO1xyXG4gICAgICAgICAgICAgICAgaXRlbVNpemUgPSBib3VuZHMgPyBib3VuZHNbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1TaXplID0gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBpdGVtU2l6ZTtcclxuICAgICAgICAgICAgbnVtKys7XHJcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPiBzaXplKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBudW06IDAsIG9mZnNldCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IG51bSwgb2Zmc2V0IH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGxpc3QgbWV0cmljc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVjYWxjdWxhdGVNZXRyaWNzPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KG9wdGlvbnM6IElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEksIEM+KTogSU1ldHJpY3Mge1xyXG4gICAgICAgIGNvbnN0IHsgZnJvbUl0ZW1JZCwgYm91bmRzLCBjb2xsZWN0aW9uLCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbCwgaXRlbVNpemUsXHJcbiAgICAgICAgICAgIGJ1ZmZlclNpemU6IG1pbkJ1ZmZlclNpemUsIHNjcm9sbFNpemUsIHNuYXAsIGl0ZW1Db25maWdNYXAsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgICAgIHByZXZpb3VzVG90YWxTaXplLCBjcnVkRGV0ZWN0ZWQsIGRlbGV0ZWRJdGVtc01hcCB9ID0gb3B0aW9ucyBhcyBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJLCBDPiAmIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGJ1ZmZlclNpemUgPSBNYXRoLm1heChtaW5CdWZmZXJTaXplLCB0aGlzLl9idWZmZXJTaXplKSxcclxuICAgICAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSBib3VuZHMsIHNpemVQcm9wZXJ0eSA9IGlzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FLFxyXG4gICAgICAgICAgICBzaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLCB0b3RhbExlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCB0eXBpY2FsSXRlbVNpemUgPSBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgdyA9IGlzVmVydGljYWwgPyB3aWR0aCA6IHR5cGljYWxJdGVtU2l6ZSwgaCA9IGlzVmVydGljYWwgPyB0eXBpY2FsSXRlbVNpemUgOiBoZWlnaHQsXHJcbiAgICAgICAgICAgIG1hcCA9IHRoaXMuX21hcCwgc25hcHNob3QgPSB0aGlzLl9zbmFwc2hvdCwgY2hlY2tPdmVyc2Nyb2xsSXRlbXNMaW1pdCA9IE1hdGguY2VpbChzaXplIC8gdHlwaWNhbEl0ZW1TaXplKSxcclxuICAgICAgICAgICAgc25pcHBlZFBvcyA9IE1hdGguZmxvb3Ioc2Nyb2xsU2l6ZSksIGxlZnRJdGVtc1dlaWdodHM6IEFycmF5PG51bWJlcj4gPSBbXSxcclxuICAgICAgICAgICAgaXNGcm9tSWQgPSBmcm9tSXRlbUlkICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBmcm9tSXRlbUlkID09PSAnbnVtYmVyJyAmJiBmcm9tSXRlbUlkID4gLTEpXHJcbiAgICAgICAgICAgICAgICB8fCAodHlwZW9mIGZyb21JdGVtSWQgPT09ICdzdHJpbmcnICYmIGZyb21JdGVtSWQgPiAnLTEnKTtcclxuXHJcbiAgICAgICAgbGV0IGxlZnRJdGVtc09mZnNldCA9IDAsIHJpZ2h0SXRlbXNPZmZzZXQgPSAwO1xyXG4gICAgICAgIGlmIChlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5zY3JvbGxEaXJlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMToge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc09mZnNldCA9IGJ1ZmZlclNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXNlIC0xOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zT2Zmc2V0ID0gYnVmZmVyU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPZmZzZXQgPSByaWdodEl0ZW1zT2Zmc2V0ID0gYnVmZmVyU2l6ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IHJpZ2h0SXRlbXNPZmZzZXQgPSBidWZmZXJTaXplO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQ6IG51bWJlciA9IC0xLCBpdGVtc0Zyb21EaXNwbGF5RW5kVG9PZmZzZXRFbmQgPSAwLCBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IC0xLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbUxlbmd0aCA9IDAsIHJpZ2h0SXRlbUxlbmd0aCA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodCA9IDAsIHJpZ2h0SXRlbXNXZWlnaHQgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgPSAwLFxyXG4gICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ID0gMCxcclxuICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXMgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zID0gMCxcclxuICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyA9IDAsXHJcbiAgICAgICAgICAgIGl0ZW1CeUlkOiBJIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBpdGVtQnlJZFBvczogbnVtYmVyID0gMCxcclxuICAgICAgICAgICAgdGFyZ2V0RGlzcGxheUl0ZW1JbmRleDogbnVtYmVyID0gLTEsXHJcbiAgICAgICAgICAgIGlzVGFyZ2V0SW5PdmVyc2Nyb2xsOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBpdGVtQnlJZFBvcyxcclxuICAgICAgICAgICAgdG90YWxTaXplID0gMCxcclxuICAgICAgICAgICAgc3RhcnRJbmRleDogbnVtYmVyLFxyXG4gICAgICAgICAgICBpc0Zyb21JdGVtSWRGb3VuZCA9IGZhbHNlLFxyXG4gICAgICAgICAgICBkZWx0YUZyb21TdGFydENyZWF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgbGV0IGlzTmV3ID0gIXRoaXMuaXNSZXNldGVkICYmIChzY3JvbGxTaXplID09PSAwKTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGxpc3QgaXMgZHluYW1pYyBvciB0aGVyZSBhcmUgbmV3IGVsZW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uLCB0aGVuIGl0IHN3aXRjaGVzIHRvIHRoZSBsb25nIGFsZ29yaXRobS5cclxuICAgICAgICBpZiAoZHluYW1pY1NpemUpIHtcclxuICAgICAgICAgICAgbGV0IHkgPSAwLCBzdGlja3lDb2xsZWN0aW9uSXRlbTogSSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCwgc3RpY2t5Q29tcG9uZW50U2l6ZSA9IDA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlpID0gaSArIDEsIGNvbGxlY3Rpb25JdGVtID0gY29sbGVjdGlvbltpXSwgaWQgPSBjb2xsZWN0aW9uSXRlbS5pZDtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29tcG9uZW50U2l6ZSA9IDAsIGNvbXBvbmVudFNpemVEZWx0YSA9IDAsIGl0ZW1EaXNwbGF5TWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMgPSBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQ7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZHMgPSBtYXAuZ2V0KGlkKSB8fCB7IHdpZHRoOiB0eXBpY2FsSXRlbVNpemUsIGhlaWdodDogdHlwaWNhbEl0ZW1TaXplIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2l6ZSA9IGJvdW5kc1tzaXplUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1EaXNwbGF5TWV0aG9kID0gYm91bmRzPy5tZXRob2QgPz8gSXRlbURpc3BsYXlNZXRob2RzLlVQREFURTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0l0ZW1OZXcgPSAoYm91bmRzIGFzIENhY2hlKT8uW0lTX05FV10gPz8gdGhpcy5faXNMYXp5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNJdGVtTmV3ICYmICghdGhpcy5faXNMYXp5IHx8ICFpdGVtQ29uZmlnTWFwW2NvbGxlY3Rpb25bMF0uaWRdPy5zdGlja3kpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTmV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaXRlbURpc3BsYXlNZXRob2QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuVVBEQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzbmFwc2hvdEJvdW5kcyA9IHNuYXBzaG90LmdldChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRTbmFwc2hvdFNpemUgPSBjb21wb25lbnRTaXplIC0gKHNuYXBzaG90Qm91bmRzID8gc25hcHNob3RCb3VuZHNbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRTaXplRGVsdGEgPSBpc0l0ZW1OZXcgPyAwIDogY29tcG9uZW50U25hcHNob3RTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwLnNldChpZCwgeyAuLi5ib3VuZHMsIG1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VELCBpc05ldzogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNJdGVtTmV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFGcm9tU3RhcnRDcmVhdGlvbiArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRTaXplRGVsdGEgPSBpc05ldyA/IDAgOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuc2V0KGlkLCB7IC4uLmJvdW5kcywgbWV0aG9kOiBpc05ldyA/IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEUgOiBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQsIGlzTmV3IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRlbGV0ZWRJdGVtc01hcC5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGRlbGV0ZWRJdGVtc01hcFtpXSwgc2l6ZSA9IGJvdW5kcz8uW3NpemVQcm9wZXJ0eV0gPz8gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh5IDwgc2Nyb2xsU2l6ZSAtIHNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyArPSBzaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0b3RhbFNpemUgKz0gY29tcG9uZW50U2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGcm9tSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUJ5SWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgIT09IGZyb21JdGVtSWQgJiYgaXRlbUNvbmZpZ01hcCAmJiBpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3lDb21wb25lbnRTaXplID0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUNvbGxlY3Rpb25JdGVtID0gY29sbGVjdGlvbkl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gZnJvbUl0ZW1JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGcm9tSXRlbUlkRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RGlzcGxheUl0ZW1JbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RpY2t5Q29sbGVjdGlvbkl0ZW0gJiYgaXRlbUNvbmZpZ01hcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbnVtIH0gPSB0aGlzLmdldEVsZW1lbnROdW1Ub0VuZChpLCBjb2xsZWN0aW9uLCBtYXAsIHR5cGljYWxJdGVtU2l6ZSwgc2l6ZSwgaXNWZXJ0aWNhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUYXJnZXRJbk92ZXJzY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IC09IHNpemUgLSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQ29uZmlnTWFwICYmICFpdGVtQ29uZmlnTWFwW2NvbGxlY3Rpb25JdGVtLmlkXSAmJiB5ID49IHNjcm9sbFNpemUgJiYgeSA8IHNjcm9sbFNpemUgKyBzdGlja3lDb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzbmFwcGVkWSA9IHNjcm9sbFNpemUgLSBzdGlja3lDb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0IC09IChzbmFwcGVkWSAtIHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHNuYXBwZWRZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtPSBzdGlja3lDb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0IC09IHN0aWNreUNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQnlJZCA9IGNvbGxlY3Rpb25JdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUJ5SWRQb3MgPSB5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0cy5wdXNoKGNvbXBvbmVudFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID0gaWk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHkgPD0gc2Nyb2xsU2l6ZSAtIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHRzLnB1c2goY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IGlpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc0Zyb21JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQnlJZCA9PT0gdW5kZWZpbmVkIHx8IHkgPCBpdGVtQnlJZFBvcyArIHNpemUgKyBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gaWk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeSA8PSBzY3JvbGxTaXplICsgc2l6ZSArIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IGlpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21EaXNwbGF5RW5kVG9PZmZzZXRFbmQgPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIHJpZ2h0SXRlbXNPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh5IDw9IHNjcm9sbFNpemUgLSBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaXRlbURpc3BsYXlNZXRob2QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLkNSRUFURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZBZGRlZEl0ZW1zICs9IGNvbXBvbmVudFNpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLlVQREFURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgKz0gY29tcG9uZW50U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuREVMRVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyArPSBjb21wb25lbnRTaXplRGVsdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgeSArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNUYXJnZXRJbk92ZXJzY3JvbGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25MZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCwgeyBudW0gfSA9IHRoaXMuZ2V0RWxlbWVudE51bVRvRW5kKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25MZW5ndGggLSAoY2hlY2tPdmVyc2Nyb2xsSXRlbXNMaW1pdCA8IDAgPyAwIDogY29sbGVjdGlvbkxlbmd0aCAtIGNoZWNrT3ZlcnNjcm9sbEl0ZW1zTGltaXQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24sIG1hcCwgdHlwaWNhbEl0ZW1TaXplLCBzaXplLCBpc1ZlcnRpY2FsLCBjb2xsZWN0aW9uTGVuZ3RoIC0gKGNvbGxlY3Rpb25MZW5ndGggLSAodGFyZ2V0RGlzcGxheUl0ZW1JbmRleCArIDEpKSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAobnVtID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgLT0gbnVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA8PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kIDw9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IGlzRnJvbUlkID8gaXRlbUJ5SWRQb3MgOiBzY3JvbGxTaXplO1xyXG5cclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0cy5zcGxpY2UoMCwgbGVmdEl0ZW1zV2VpZ2h0cy5sZW5ndGggLSBsZWZ0SXRlbXNPZmZzZXQpO1xyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHRzLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQgKz0gdjtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZWZ0SXRlbUxlbmd0aCA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsIGxlZnRJdGVtc09mZnNldCk7XHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbUxlbmd0aCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICsgcmlnaHRJdGVtc09mZnNldCA+IHRvdGFsTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRvdGFsTGVuZ3RoIC0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgOiByaWdodEl0ZW1zT2Zmc2V0O1xyXG5cclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAvLyBCdWZmZXIgb3B0aW1pemF0aW9uIGRvZXMgbm90IHdvcmsgb24gZmFzdCBsaW5lYXIgYWxnb3JpdGhtXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY3J1ZERldGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkl0ZW0gPSBjb2xsZWN0aW9uW2ldLCBpZCA9IGNvbGxlY3Rpb25JdGVtLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb21wb25lbnRTaXplID0gdHlwaWNhbEl0ZW1TaXplLCBpdGVtRGlzcGxheU1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzID0gSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VEO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZHMgPSBtYXAuZ2V0KGlkKSE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EaXNwbGF5TWV0aG9kID0gYm91bmRzPy5tZXRob2QgPz8gSXRlbURpc3BsYXlNZXRob2RzLlVQREFURTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNJdGVtTmV3ID0gKGJvdW5kcyBhcyBDYWNoZSk/LltJU19ORVddID8/IHRoaXMuX2lzTGF6eTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0l0ZW1OZXcgJiYgKCF0aGlzLl9pc0xhenkgfHwgIWl0ZW1Db25maWdNYXBbY29sbGVjdGlvblswXS5pZF0/LnN0aWNreSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTmV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1EaXNwbGF5TWV0aG9kID09PSBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YUZyb21TdGFydENyZWF0aW9uICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuc2V0KGlkLCB7IC4uLmJvdW5kcywgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQsIGlzTmV3IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZXRlZEl0ZW1zTWFwLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGRlbGV0ZWRJdGVtc01hcFtpXSwgc2l6ZSA9IGJvdW5kcz8uW3NpemVQcm9wZXJ0eV0gPz8gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IHNjcm9sbFNpemUgLSBzaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zICs9IHNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh5IDwgc2Nyb2xsU2l6ZSAtIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtRGlzcGxheU1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05ldykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuVVBEQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZlVwZGF0ZWRJdGVtcyArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuREVMRVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHkgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID0gTWF0aC5mbG9vcihzY3JvbGxTaXplIC8gdHlwaWNhbEl0ZW1TaXplKTtcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSBNYXRoLmNlaWwoKHNjcm9sbFNpemUgKyBzaXplKSAvIHR5cGljYWxJdGVtU2l6ZSk7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoID0gTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCwgYnVmZmVyU2l6ZSk7XHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbUxlbmd0aCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICsgYnVmZmVyU2l6ZSA+IHRvdGFsTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRvdGFsTGVuZ3RoIC0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgOiBidWZmZXJTaXplO1xyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQgPSBsZWZ0SXRlbUxlbmd0aCAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodCA9IHJpZ2h0SXRlbUxlbmd0aCAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ID0gaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0b3RhbExlbmd0aCAqIHR5cGljYWxJdGVtU2l6ZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGsgPSB0b3RhbFNpemUgIT09IDAgPyBwcmV2aW91c1RvdGFsU2l6ZSAvIHRvdGFsU2l6ZSA6IDA7XHJcbiAgICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBzY3JvbGxTaXplICogaztcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhcnRJbmRleCA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgLSBsZWZ0SXRlbUxlbmd0aCwgdG90YWxMZW5ndGggPiAwID8gdG90YWxMZW5ndGggLSAxIDogMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGl0ZW1zT25EaXNwbGF5V2VpZ2h0ID0gdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCAtIGxlZnRJdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgaXRlbXNPbkRpc3BsYXlMZW5ndGggPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCAtIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgLSBsZWZ0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHJlbmRlckl0ZW1zID0gaXRlbXNPbkRpc3BsYXlMZW5ndGggKyBsZWZ0SXRlbUxlbmd0aCArIHJpZ2h0SXRlbUxlbmd0aCxcclxuICAgICAgICAgICAgZGVsdGEgPSBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zICsgbGVmdFNpemVPZkFkZGVkSXRlbXMgLSBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zICsgZGVsdGFGcm9tU3RhcnRDcmVhdGlvbjtcclxuXHJcbiAgICAgICAgY29uc3QgbWV0cmljczogSU1ldHJpY3MgPSB7XHJcbiAgICAgICAgICAgIGRlbHRhLFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbVdpZHRoOiB3LFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbUhlaWdodDogaCxcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIGl0ZW1TaXplLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCxcclxuICAgICAgICAgICAgaXRlbXNPbkRpc3BsYXlXZWlnaHQsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHJlbmRlckl0ZW1zLFxyXG4gICAgICAgICAgICByaWdodEl0ZW1MZW5ndGgsXHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIGxlZnRTaXplT2ZBZGRlZEl0ZW1zLFxyXG4gICAgICAgICAgICBzaXplUHJvcGVydHksXHJcbiAgICAgICAgICAgIHNuYXAsXHJcbiAgICAgICAgICAgIHNuaXBwZWRQb3MsXHJcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQsXHJcbiAgICAgICAgICAgIHRvdGFsTGVuZ3RoLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUsXHJcbiAgICAgICAgICAgIHR5cGljYWxJdGVtU2l6ZSxcclxuICAgICAgICAgICAgaXNGcm9tSXRlbUlkRm91bmQsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1ldHJpY3M7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJEZWx0YURpcmVjdGlvbigpIHtcclxuICAgICAgICB0aGlzLmNsZWFyU2Nyb2xsRGlyZWN0aW9uQ2FjaGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckRlbHRhKGNsZWFyRGlyZWN0aW9uRGV0ZWN0b3IgPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2RlbHRhID0gMDtcclxuXHJcbiAgICAgICAgaWYgKGNsZWFyRGlyZWN0aW9uRGV0ZWN0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclNjcm9sbERpcmVjdGlvbkNhY2hlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5idW1wVmVyc2lvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZURpc3BsYXlDb2xsZWN0aW9uPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KGl0ZW1zOiBDLCBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwLFxyXG4gICAgICAgIG1ldHJpY3M6IElNZXRyaWNzKTogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB7XHJcbiAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbVdpZHRoLFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICByZW5kZXJJdGVtczogcmVuZGVySXRlbXNMZW5ndGgsXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIHNpemVQcm9wZXJ0eSxcclxuICAgICAgICAgICAgc25hcCxcclxuICAgICAgICAgICAgc25pcHBlZFBvcyxcclxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgdG90YWxMZW5ndGgsXHJcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgsXHJcbiAgICAgICAgICAgIHR5cGljYWxJdGVtU2l6ZSxcclxuICAgICAgICB9ID0gbWV0cmljcyxcclxuICAgICAgICAgICAgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBhY3R1YWxTbmlwcGVkUG9zaXRpb24gPSBzbmlwcGVkUG9zLCBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB0aGlzLmlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCxcclxuICAgICAgICAgICAgICAgIGJvdW5kc1NpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgsIGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiA9IGJvdW5kc1NpemU7XHJcbiAgICAgICAgICAgIGxldCBwb3MgPSBzdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySXRlbXMgPSByZW5kZXJJdGVtc0xlbmd0aCxcclxuICAgICAgICAgICAgICAgIHN0aWNreUl0ZW06IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQsIG5leHRTdGlja3k6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQsIHN0aWNreUl0ZW1JbmRleCA9IC0xLFxyXG4gICAgICAgICAgICAgICAgc3RpY2t5SXRlbVNpemUgPSAwLCBlbmRTdGlja3lJdGVtOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBuZXh0RW5kU3RpY2t5OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbUluZGV4ID0gLTEsIGVuZFN0aWNreUl0ZW1TaXplID0gMCwgY291bnQgPSAxO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNuYXApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID4gMCA/IGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgOiAwLCB0b3RhbExlbmd0aCAtIDEpOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXRlbXNbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbXNbaV0uaWQsIGNhY2hlID0gdGhpcy5nZXQoaWQpISwgc3RpY2t5ID0gaXRlbUNvbmZpZ01hcFtpZF0/LnN0aWNreSA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LnNlbGVjdGFibGUgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2FibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uY29sbGFwc2FibGUgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBkeW5hbWljU2l6ZSA/IGNhY2hlPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemUgOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0aWNreSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09kZCA9IGkgJSAyICE9IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBpc1ZlcnRpY2FsID8gMCA6IGFjdHVhbFNuaXBwZWRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBpc1ZlcnRpY2FsID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogaXNWZXJ0aWNhbCA/IG5vcm1hbGl6ZWRJdGVtV2lkdGggOiBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXNWZXJ0aWNhbCA/IHNpemUgOiBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXc6IChjYWNoZSBhcyBDYWNoZSk/LltJU19ORVddID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9kZDogaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbjogIWlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2FibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWRPdXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogY291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbURhdGE6IEkgPSBpdGVtc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0gPSB7IGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBjb25maWcgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbUluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbVNpemUgPSBzaXplO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zLnB1c2goc3RpY2t5SXRlbSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzbmFwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCArIGl0ZW1zT25EaXNwbGF5TGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1pbihzdGFydEluZGV4LCB0b3RhbExlbmd0aCA+IDAgPyB0b3RhbExlbmd0aCAtIDEgOiAwKSwgbCA9IHRvdGFsTGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtc1tpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtc1tpXS5pZCwgY2FjaGUgPSB0aGlzLmdldChpZCkhLCBzdGlja3kgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc2VsZWN0YWJsZSA/PyB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSA9IGl0ZW1Db25maWdNYXBbaWRdPy5jb2xsYXBzYWJsZSA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGR5bmFtaWNTaXplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNhY2hlPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGlja3kgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNPZGQgPSBpICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGlzVmVydGljYWwgPyBub3JtYWxpemVkSXRlbVdpZHRoIDogc2l6ZSwgaCA9IGlzVmVydGljYWwgPyBzaXplIDogbm9ybWFsaXplZEl0ZW1IZWlnaHQsIG1lYXN1cmVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGlzVmVydGljYWwgPyAwIDogYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gdyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBpc1ZlcnRpY2FsID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gaCA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldzogKGNhY2hlIGFzIENhY2hlKT8uW0lTX05FV10gPT09IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiBpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuOiAhaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZE91dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4OiBpdGVtcy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbURhdGE6IEkgPSBpdGVtc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0gPSB7IGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBjb25maWcgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbUluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbVNpemUgPSBzaXplO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zLnB1c2goZW5kU3RpY2t5SXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGkgPSBzdGFydEluZGV4O1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHJlbmRlckl0ZW1zID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgPj0gdG90YWxMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghaXRlbXNbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1zW2ldLmlkLCBjYWNoZSA9IHRoaXMuZ2V0KGlkKSEsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGR5bmFtaWNTaXplID8gY2FjaGU/LltzaXplUHJvcGVydHldIHx8IHR5cGljYWxJdGVtU2l6ZSA6IHR5cGljYWxJdGVtU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaWQgIT09IHN0aWNreUl0ZW0/LmlkICYmIGlkICE9PSBlbmRTdGlja3lJdGVtPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzT2RkID0gaSAlIDIgIT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5ID0gaXRlbUNvbmZpZ01hcFtpZF0/LnN0aWNreSA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LnNlbGVjdGFibGUgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2FibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uY29sbGFwc2FibGUgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWQgPSBzbmFwICYmIChzdGlja3kgPT09IDEgJiYgcG9zIDw9IHNjcm9sbFNpemUgfHwgc3RpY2t5ID09PSAyICYmIHBvcyA+PSBzY3JvbGxTaXplICsgYm91bmRzU2l6ZSAtIHNpemUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGlzVmVydGljYWwgPyBzdGlja3kgPT09IDEgPyAwIDogYm91bmRzU2l6ZSAtIHNpemUgOiBwb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBpc1ZlcnRpY2FsID8gcG9zIDogc3RpY2t5ID09PSAyID8gYm91bmRzU2l6ZSAtIHNpemUgOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGlzVmVydGljYWwgPyBub3JtYWxpemVkSXRlbVdpZHRoIDogc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXNWZXJ0aWNhbCA/IHNpemUgOiBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBjb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXc6IChjYWNoZSBhcyBDYWNoZSk/LltJU19ORVddID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiBpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW46ICFpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3k6IHN0aWNreSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWRPdXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogY291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6ICcwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNuYXBwZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnpJbmRleCA9ICcyJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1EYXRhOiBJID0gaXRlbXNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW06IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gPSB7IGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBjb25maWcgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRTdGlja3kgJiYgc3RpY2t5SXRlbUluZGV4IDwgaSAmJiBzdGlja3kgPT09IDEgJiYgKHBvcyA8PSBzY3JvbGxTaXplICsgc2l6ZSArIHN0aWNreUl0ZW1TaXplKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnggPSBpc1ZlcnRpY2FsID8gMCA6IHNuYXBwZWQgPyBhY3R1YWxTbmlwcGVkUG9zaXRpb24gOiBwb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueSA9IGlzVmVydGljYWwgPyBzbmFwcGVkID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogcG9zIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBzbmFwcGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gaXNWZXJ0aWNhbCA/IChpdGVtLm1lYXN1cmVzLnkgLSBzY3JvbGxTaXplKSA6IChpdGVtLm1lYXN1cmVzLnggLSBzY3JvbGxTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5jb25maWcuekluZGV4ID0gJzMnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW5leHRFbmRTdGlja3kgJiYgZW5kU3RpY2t5SXRlbUluZGV4ID4gaSAmJiBzdGlja3kgPT09IDIgJiYgKHBvcyA+PSBzY3JvbGxTaXplICsgYm91bmRzU2l6ZSAtIHNpemUgLSBlbmRTdGlja3lJdGVtU2l6ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy54ID0gaXNWZXJ0aWNhbCA/IDAgOiBzbmFwcGVkID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gc2l6ZSA6IHBvcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy55ID0gaXNWZXJ0aWNhbCA/IHNuYXBwZWQgPyBhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gLSBzaXplIDogcG9zIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kuY29uZmlnLnpJbmRleCA9ICczJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreS5jb25maWcuc25hcHBlZCA9IHNuYXBwZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kubWVhc3VyZXMuZGVsdGEgPSBpc1ZlcnRpY2FsID8gKGl0ZW0ubWVhc3VyZXMueSAtIHNjcm9sbFNpemUpIDogKGl0ZW0ubWVhc3VyZXMueCAtIHNjcm9sbFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVySXRlbXMgLT0gMTtcclxuICAgICAgICAgICAgICAgIHBvcyArPSBzaXplO1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBheGlzID0gaXNWZXJ0aWNhbCA/IFlfUFJPUF9OQU1FIDogWF9QUk9QX05BTUU7XHJcblxyXG4gICAgICAgICAgICBpZiAobmV4dFN0aWNreSAmJiBzdGlja3lJdGVtICYmIG5leHRTdGlja3kubWVhc3VyZXNbYXhpc10gPD0gc2Nyb2xsU2l6ZSArIHN0aWNreUl0ZW1TaXplKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSA+IHNjcm9sbFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLm1lYXN1cmVzW2F4aXNdID0gbmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSAtIHN0aWNreUl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWQgPSBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc25hcHBlZE91dCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc3RpY2t5ID0gMTtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLm1lYXN1cmVzLmRlbHRhID0gaXNWZXJ0aWNhbCA/IHN0aWNreUl0ZW0ubWVhc3VyZXMueSAtIHNjcm9sbFNpemUgOiBzdGlja3lJdGVtLm1lYXN1cmVzLnggLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gaXNWZXJ0aWNhbCA/IG5leHRTdGlja3kubWVhc3VyZXMueSAtIHNjcm9sbFNpemUgOiBuZXh0U3RpY2t5Lm1lYXN1cmVzLnggLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobmV4dEVuZFN0aWNreSAmJiBlbmRTdGlja3lJdGVtICYmIG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gPj0gc2Nyb2xsU2l6ZSArIGJvdW5kc1NpemUgLSBlbmRTdGlja3lJdGVtU2l6ZSAtIG5leHRFbmRTdGlja3kubWVhc3VyZXNbc2l6ZVByb3BlcnR5XSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gPCBzY3JvbGxTaXplICsgYm91bmRzU2l6ZSAtIGVuZFN0aWNreUl0ZW1TaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5tZWFzdXJlc1theGlzXSA9IG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gKyBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW3NpemVQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5jb25maWcuc25hcHBlZCA9IG5leHRFbmRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLmNvbmZpZy5zbmFwcGVkT3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLmNvbmZpZy5zdGlja3kgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0ubWVhc3VyZXMuZGVsdGEgPSBpc1ZlcnRpY2FsID8gZW5kU3RpY2t5SXRlbS5tZWFzdXJlcy55IC0gc2Nyb2xsU2l6ZSA6IGVuZFN0aWNreUl0ZW0ubWVhc3VyZXMueCAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kubWVhc3VyZXMuZGVsdGEgPSBpc1ZlcnRpY2FsID8gbmV4dEVuZFN0aWNreS5tZWFzdXJlcy55IC0gc2Nyb2xsU2l6ZSA6IG5leHRFbmRTdGlja3kubWVhc3VyZXMueCAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRpc3BsYXlJdGVtcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHRyYWNraW5nIGJ5IHByb3BOYW1lXHJcbiAgICAgKi9cclxuICAgIHRyYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5faXRlbXMgfHwgIXRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIudHJhY2sodGhpcy5faXRlbXMsIHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLCB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50LCB0aGlzLnNjcm9sbERpcmVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCh2OiB7IFtpZDogbnVtYmVyXTogbnVtYmVyIH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90cmFja2VyLmRpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHVudHJhY2tDb21wb25lbnRCeUlkUHJvcGVydHkoY29tcG9uZW50PzogQyB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIudW50cmFja0NvbXBvbmVudEJ5SWRQcm9wZXJ0eShjb21wb25lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEl0ZW1Cb3VuZHMoaWQ6IElkKTogSVNpemUgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY2FjaGVFbGVtZW50cygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzW2ldLCBpdGVtSWQgPSBjb21wb25lbnQuaW5zdGFuY2UuaXRlbUlkO1xyXG4gICAgICAgICAgICBpZiAoaXRlbUlkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGNvbXBvbmVudC5pbnN0YW5jZS5nZXRCb3VuZHMoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXQoaXRlbUlkLCBib3VuZHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBkaXNwb3NlKCkge1xyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXNwb3NlQ2xlYXJCdWZmZXJTaXplVGltZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJhY2tlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -2128,7 +2128,7 @@ class TrackBox extends CacheMap {
2128
2128
  continue;
2129
2129
  }
2130
2130
  const bounds = component.instance.getBounds();
2131
- this.set(itemId, { ...(this.get(itemId) || {}), ...bounds });
2131
+ this.set(itemId, bounds);
2132
2132
  }
2133
2133
  }
2134
2134
  dispose() {