@huntsman-cancer-institute/navigation 17.9.0 → 17.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/components/nav.component.mjs +3 -3
- package/esm2022/components/search-list/search-list-controller.component.mjs +3 -3
- package/esm2022/components/search-list/search-list.component.mjs +25 -7
- package/esm2022/components/ul-nav.component.mjs +3 -3
- package/esm2022/impl/sidebar.component.mjs +14 -4
- package/fesm2022/huntsman-cancer-institute-navigation.mjs +43 -15
- package/fesm2022/huntsman-cancer-institute-navigation.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -571,13 +571,13 @@ export class NavComponent {
|
|
|
571
571
|
}
|
|
572
572
|
}
|
|
573
573
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: NavComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: i1.NavigationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
574
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: NavComponent, selector: "hci-nav", inputs: { config: "config", id: ["navId", "id"], isRoot: "isRoot", type: "type", title: "title", rootClass: "rootClass", roleName: "roleName", authenticatedKey: "authenticatedKey", notAuthenticatedKey: "notAuthenticatedKey", inputChildren: ["children", "inputChildren"], isCCR: "isCCR" }, usesOnChanges: true, ngImport: i0, template: `
|
|
574
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: NavComponent, selector: "hci-nav", inputs: { config: "config", id: ["navId", "id"], isRoot: "isRoot", type: "type", title: "title", rootClass: "rootClass", roleName: "roleName", authenticatedKey: "authenticatedKey", notAuthenticatedKey: "notAuthenticatedKey", inputChildren: ["children", "inputChildren"], isCCR: "isCCR" }, usesOnChanges: true, ngImport: i0, template: `
|
|
575
575
|
`, isInline: true }); }
|
|
576
576
|
}
|
|
577
577
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: NavComponent, decorators: [{
|
|
578
578
|
type: Component,
|
|
579
579
|
args: [{
|
|
580
|
-
template: `
|
|
580
|
+
template: `
|
|
581
581
|
`,
|
|
582
582
|
selector: "hci-nav"
|
|
583
583
|
}]
|
|
@@ -606,4 +606,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
606
606
|
}], isCCR: [{
|
|
607
607
|
type: Input
|
|
608
608
|
}] } });
|
|
609
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25hdmlnYXRpb24vc3JjL2NvbXBvbmVudHMvbmF2LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBU1QsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7OztBQUVqRTs7Ozs7OztHQU9HO0FBU0gsTUFBTSxPQUFPLFlBQVk7SUF1RHZCLFlBQVksVUFBc0IsRUFBRSxRQUFtQixFQUFFLFFBQWtDLEVBQUUsaUJBQW9DLEVBQUUsaUJBQW9DO1FBckQ5SixXQUFNLEdBQVE7WUFDckIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBRU8sV0FBTSxHQUFZLEtBQUssQ0FBQztRQUt4QixxQkFBZ0IsR0FBVyxPQUFPLENBQUM7UUFDbkMsd0JBQW1CLEdBQVcsV0FBVyxDQUFDO1FBQ2hDLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQ3BDLFVBQUssR0FBWSxLQUFLLENBQUM7UUFDaEM7Ozs7V0FJRztRQUNILGFBQVEsR0FBbUIsRUFBRSxDQUFDO1FBVTlCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTdCOzs7V0FHRztRQUNILGlCQUFZLEdBQWdCLElBQUksR0FBRyxFQUFVLENBQUM7UUFFOUM7Ozs7OztXQU1HO1FBQ0ssZUFBVSxHQUF5QixJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQU90RSxrQkFBYSxHQUFpQixJQUFJLFlB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QUFDO1lBQ2pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQzs4R0FscEJVLFlBQVk7a0dBQVosWUFBWSxxV0FMbkI7T0FDQzs7MkZBSU0sWUFBWTtrQkFSeEIsU0FBUzttQkFDUjtvQkFDRSxRQUFRLEVBQ047T0FDQztvQkFDSCxRQUFRLEVBQUUsU0FBUztpQkFDcEI7OE1BSVEsTUFBTTtzQkFBZCxLQUFLO2dCQUdVLEVBQUU7c0JBQWpCLEtBQUs7dUJBQUMsT0FBTztnQkFDTCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDYSxhQUFhO3NCQUEvQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ1IsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIGlzRGV2TW9kZSxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2UsXG4gIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFZpZXdSZWYsXG4gIE9uSW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIENvbXBvbmVudFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7Um9sZUVudGl0eX0gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL3VzZXJcIjtcbmltcG9ydCB7Q29tcG9uZW50SW5qZWN0b3J9IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS91dGlsc1wiO1xuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSBcIi4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZVwiO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgdGhhdCBhbGwgbmF2aWdhdGlvbiBjb21wb25lbnRzIGV4dGVuZCBmcm9tLiAgVGhpcyBpbmNsdWRlcyBvdGhlciBzdGFuZGFsb25lIG1vZHVsZXMgc3VjaFxuICogYXMgYSBoZWFkZXIgb3Igc2lkZWJhci4gIEl0IGNvbnRhaW5zIGNvbW1vbiBwcm9wZXJ0aWVzLCBjb25maWd1cmF0aW9uIHRvb2xzLCBhbmQgZnVuY3Rpb25zIHRvIGFkZC9pbnNlcnQgb3RoZXJcbiAqIE5hdkNvbXBvbmVudHMuXG4gKiBUaGUgY29uZmlnIHByb3BlcnR5IGlzIGFueSBvYmplY3QgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0aGF0IHNwZWNpZmllcyBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBDb21tb25cbiAqIHByb3BlcnRpZXMgaW5jbHVkZSBpZCwgdGl0bGUsIHJvb3RDbGFzcyBhbmQgcm9sZU5hbWUuICBFeHRlbmRpbmcgY2xhc3NlcyBtYXkgaGF2ZSB0aGVpciBvd24gcHJvcGVydGllcyBzdWNoIGFzIGV4dHJhXG4gKiBjc3MgY2xhc3Nlcy5cbiAqL1xuQENvbXBvbmVudChcbiAge1xuICAgIHRlbXBsYXRlOlxuICAgICAgYFxuICAgICAgYCxcbiAgICBzZWxlY3RvcjogXCJoY2ktbmF2XCJcbiAgfVxuKVxuZXhwb3J0IGNsYXNzIE5hdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGNvbmZpZzogYW55ID0ge1xuICAgIHJlbmRlcmVkOiB0cnVlXG4gIH07XG4gIEBJbnB1dChcIm5hdklkXCIpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0eXBlOiBUeXBlPGFueT4gfCBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJvb3RDbGFzczogc3RyaW5nO1xuICBASW5wdXQoKSByb2xlTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBhdXRoZW50aWNhdGVkS2V5OiBzdHJpbmcgPSBcIkFVVEhDXCI7XG4gIEBJbnB1dCgpIG5vdEF1dGhlbnRpY2F0ZWRLZXk6IHN0cmluZyA9IFwiTk9UX0FVVEhDXCI7XG4gIEBJbnB1dChcImNoaWxkcmVuXCIpIGlucHV0Q2hpbGRyZW46IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGlzQ0NSOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBhbGwgY29tcG9uZW50IGluc3RhbmNlcyBvZiBjaGlsZHJlbi4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgd2UgdHJ5IHRvIHJlbmRlciBldmVyeXRoaW5nIGluIHRoZVxuICAgKiBjaGlsZHJlbiBhcnJheS4gIEhvd2V2ZXIsIGlmIHJvbGVzIGFyZSBub3QgbWV0LCBzb21lIGNoaWxkcmVuIG1heSBub3QgYmUgcmVuZGVyZWQgc28gbm8gY29tcG9uZW50IGluc3RhbmNlIHdpbGxcbiAgICogZXhpc3QgZm9yIHRoZW0uXG4gICAqL1xuICBjaGlsZHJlbjogTmF2Q29tcG9uZW50W10gPSBbXTtcblxuICB0eXBlTmFtZTogc3RyaW5nO1xuXG4gIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIHJlbmRlcmVyOiBSZW5kZXJlcjI7XG4gIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI7XG4gIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZTtcbiAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmO1xuXG4gIGFmdGVyVmlld0luaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBzZXQgb2YgY29udGFpbmVyIG5hbWVzLiAgU29tZSBjb21wb25lbnRzIG1heSBub3QgZGVmaW5lIGEgY29udGFpbmVyIHdoaWxlIG90aGVycyBqdXN0IGhhdmVcbiAgICogb25lIChhIFwiZGVmYXVsdFwiIGNvbnRhaW5lcikuXG4gICAqL1xuICBjb250YWluZXJTZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIElEcyB0byB0aGUgY29ycmVzcG9uZGluZyB2aWV3UmVmLiAgV2hlbiB3ZSBkeW5hbWljYWxseSBpbmplY3QgYSBuZXcgY29tcG9uZW50LCB3ZSBmaXJzdCBwdWxsIHRoZSBjcmVhdGVkXG4gICAqIENvbXBvbmVudFJlZiBhbmQgZnJvbSB0aGVyZSBpdHMgVmlld1JlZi4gIFdlIG5lZWQgdGhlIFZpZXdSZWYgdG8gZGV0ZXJtaW5lIHRoZSBjb21wb25lbnQncyBwb3NpdGlvbiBpbiB0aGVcbiAgICogVmlld0NvbnRhaW5lclJlZi4gIFdpdGggYSBzZXQgb2YgVmlld1JlZnMsIHdlIGNhbiBkZXRhY2ggdGhlbSBmcm9tIHRoZSBjb250YWluZXIgYW5kIHJlLWFkZCB0aGVtIGluIGEgZGlmZmVyZW50IG9yZGVyXG4gICAqIGJhc2VkIG9uIHRoZSBjb21wb25lbnQncyBzb3J0T3JkZXIgKHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBwb3NpdGlvbiBpbiB0aGUgY2hpbGRyZW4gYXJyYXkuICBUaGlzIG1hcCBwcm92aWRlcyB0aGVcbiAgICogY29tcG9uZW50IHRvIHZpZXcgcmVsYXRpb25zaGlwLlxuICAgKi9cbiAgcHJpdmF0ZSB2aWV3UmVmTWFwOiBNYXA8c3RyaW5nLCBWaWV3UmVmPiA9IG5ldyBNYXA8c3RyaW5nLCBWaWV3UmVmPigpO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGNvbXBvbmVudC4gIFdoZW4gYSBjaGlsZCBpcyBhZGRlZCwgYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBpcyBhdXRvbWF0aWNhbGx5IHNldC5cbiAgICovXG4gIHByaXZhdGUgcGFyZW50OiBOYXZDb21wb25lbnQ7XG5cbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSwgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy5yZXNvbHZlciA9IHJlc29sdmVyO1xuICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuYXZpZ2F0aW9uU2VydmljZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmID0gY2hhbmdlRGV0ZWN0b3JSZWY7XG5cbiAgICB0aGlzLmNvbnRhaW5lclNldC5hZGQoXCJkZWZhdWx0XCIpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNSb290KSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0VXNlclJvbGVzKCkuc3Vic2NyaWJlKCh1c2VyUm9sZXM6IFJvbGVFbnRpdHlbXSkgPT4ge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiVXNlciBSb2xlcyBjaGFuZ2VkLiAgUmVmcmVzaCBjaGlsZHJlbi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWZyZXNoQ2hpbGRyZW4oKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50Lm5nQWZ0ZXJWaWV3SW5pdFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmFmdGVyVmlld0luaXQgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tJbml0aWFsaXplZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGNvbmZpZyBpcyBib3VuZCBieSBpbnB1dCwgcmVzZXQgdGhlIGNvbmZpZyB3aGVuIGl0IGNoYW5nZXMuICBBbiBpbXBvcnRhbnQgbm90ZSwgaWYgYW55dGhpbmcgaW4gdGhlIGNvbmZpZyB3YXNcbiAgICogdXBkYXRlZCBieSB1cGRhdGVDb25maWcgb25seSwgdGhlbiB0aG9zZSBvcHRpb25zIHdpbGwgYmUgbG9zdC5cbiAgICpcbiAgICogQHBhcmFtIHt7W3A6IHN0cmluZ106IFNpbXBsZUNoYW5nZX19IGNoYW5nZXNcbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSk6IHZvaWQge1xuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhcIm5nT25DaGFuZ2VzOlwiKTtcbiAgICAgIGNvbnNvbGUuZGVidWcoY2hhbmdlcyk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgY2hhbmdlIG9mIE9iamVjdC5rZXlzKGNoYW5nZXMpKSB7XG4gICAgICBpZiAoY2hhbmdlICE9PSBcImNvbmZpZ1wiKSB7XG4gICAgICAgIHRoaXNbY2hhbmdlXSA9IGNoYW5nZXNbY2hhbmdlXS5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgaWYgKGNoYW5nZSA9PT0gXCJpbnB1dENoaWxkcmVuXCIpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZ1tcImNoaWxkcmVuXCJdID0gY2hhbmdlc1tjaGFuZ2VdLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZ1tjaGFuZ2VdID0gY2hhbmdlc1tjaGFuZ2VdLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzW1wiY29uZmlnXCJdKSB7XG4gICAgICB0aGlzLnNldENvbmZpZyh0aGlzLmNvbmZpZyk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbXCJpZFwiXSkge1xuICAgICAgdGhpcy5zZXRJZCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInJvb3RDbGFzc1wiXSkge1xuICAgICAgdGhpcy5zZXRSb290Q2xhc3MoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbXCJpbnB1dENoaWxkcmVuXCJdKSB7XG4gICAgICB0aGlzLnNldENoaWxkcmVuKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0YWNoKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBjaGVja0luaXRpYWxpemVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5jb25maWcpO1xuICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLnBvc3RJbml0KCk7XG4gICAgfVxuICB9XG5cbiAgcG9zdEluaXQoKTogdm9pZCB7XG4gIH1cblxuICBnZXROYXZpZ2F0aW9uU2VydmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGNoaWxkcmVuLlxuICAgKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50LmNsZWFyXCIpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5yZW1vdmUodGhpcy5jaGlsZHJlbltpXSwgaSk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICBsZXQgaXNSZW5kZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmNvbmZpZy5yZW5kZXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpc1JlbmRlcmVkID0gdGhpcy5jb25maWcucmVuZGVyZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBjaGlsZHJlbiBhbmQgc2VlcyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiByZW5kZXJpbmcgc3RhdHVzLiAgSWYgYSBwZXJtaXNzaW9uIGdvZXMgYXdheSwgYSBjb21wb25lbnQgdGhhdFxuICAgKiBpcyBjdXJyZW50bHkgcmVuZGVyZWQgbWlnaHQgbmVlZCB0byBiZSByZW1vdmVkLiAgUmVjdXJzaXZlbHkgbW92ZSB0aHJvdWdoIHRoZSB0cmVlIG9mIGNoaWxkcmVuLlxuICAgKi9cbiAgcmVmcmVzaENoaWxkcmVuKCkge1xuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5jaGlsZHJlbikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwicmVmcmVzaENoaWxkcmVuOiBcIiArIGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlbmRlciA9IHRoaXMuY2FuUmVuZGVyKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldKTtcblxuICAgICAgICBsZXQgaXNSZW5kZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW5baV0ucmVuZGVyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlzUmVuZGVyZWQgPSB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5yZW5kZXJlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW5kZXIgJiYgIWlzUmVuZGVyZWQpIHtcbiAgICAgICAgICB0aGlzLmFkZCh0aGlzLmNvbmZpZy5jaGlsZHJlbltpXSwgaSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXJlbmRlciAmJiBpc1JlbmRlcmVkKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmUodGhpcy5jb25maWcuY2hpbGRyZW5baV0sIGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVjdXJzaXZlbHkgY2hlY2sgY2hpbGRyZW5cbiAgICBmb3IgKGxldCBjb21wb25lbnQgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgY29tcG9uZW50LnJlZnJlc2hDaGlsZHJlbigpO1xuICAgIH1cblxuICAgIHRoaXMuc29ydENvbnRhaW5lcnMoKTtcblxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzaW5nIHRoZSBzb3J0T3JkZXIgcHJvcGVydHkgb2YgZWFjaCBjb21wb25lbnQsIGRldGFjaCBlYWNoIFZpZXdSZWYgZnJvbSB0aGUgY29udGFpbmVyLCBhbmQgcmUtYXR0YWNoIGJhc2VkXG4gICAqIG9uIHRoZSBzb3J0T3JkZXIuXG4gICAqL1xuICBzb3J0Q29udGFpbmVycygpIHtcbiAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNvcnQgdGhlIGNoaWxkcmVuLiAgSXQgZG9lc24ndCBtYXR0ZXIgdGhhdCB0aGlzIGxpc3QgbWF5IGNvbnRhaW4gY2hpbGRyZW4gaW4gbXVsdGlwbGUgY29udGFpbmVycy5cbiAgICBsZXQgc29ydGVkQ2hpbGRyZW4gPSB0aGlzLmNvbmZpZy5jaGlsZHJlbi5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgaWYgKGEuc29ydE9yZGVyIDwgYi5zb3J0T3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChhLnNvcnRPcmRlciA+IGIuc29ydE9yZGVyKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBjb250YWluZXJOYW1lIG9mIHRoaXMuY29udGFpbmVyU2V0KSB7XG4gICAgICBsZXQgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmID0gdGhpcy5nZXRDb250YWluZXIoY29udGFpbmVyTmFtZSk7XG5cbiAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXNvcnRlZENoaWxkcmVuW2ldLmlkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc29ydGVkQ2hpbGRyZW5baV0uY29udGFpbmVyICE9PSBjb250YWluZXJOYW1lKSB7XG4gICAgICAgICAgLy8gQ2hpbGRyZW4gaXMgYSBsaXN0IHBvc3NpYmx5IHNwYW5uaW5nIG11bHRpcGxlIGNvbnRhaW5lcnMuICBTa2lwIGlmIG5vdCBvbiB0aGUgY3VycmVudCBjb250YWluZXIuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52aWV3UmVmTWFwLmdldChzb3J0ZWRDaGlsZHJlbltpXS5pZCkpIHtcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJzb3J0Q2hpbGRyZW46IGk6IFwiICsgaSArIFwiLCBpZDogXCIgKyBzb3J0ZWRDaGlsZHJlbltpXS5pZCArIFwiLCBkZXN0cm95ZWQ6IFwiICsgdGhpcy52aWV3UmVmTWFwLmdldChzb3J0ZWRDaGlsZHJlbltpXS5pZCkuZGVzdHJveWVkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlld1JlZk1hcC5nZXQoc29ydGVkQ2hpbGRyZW5baV0uaWQpLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgY29udGFpbmVyLmluc2VydCh0aGlzLnZpZXdSZWZNYXAuZ2V0KHNvcnRlZENoaWxkcmVuW2ldLmlkKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmlld1JlZk1hcC5kZWxldGUoc29ydGVkQ2hpbGRyZW5baV0uaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBjb21wb25lbnQgYnkgaWQgZnJvbSBpdHMgcGFyZW50IGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudENvbmZpZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICovXG4gIHJlbW92ZShjb21wb25lbnRDb25maWc6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5jb25maWcuY2hpbGRyZW4gfHwgIXRoaXMuY29uZmlnLmNoaWxkcmVuW2luZGV4XSkge1xuICAgICAgY29uc29sZS53YXJuKFwiTmF2Q29tcG9uZW50OiBDaGlsZCBcIiArIGluZGV4ICsgXCIgZG9lcyBub3QgZXhpc3Qgb24gXCIgKyB0aGlzLmNvbmZpZy5pZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50LnJlbW92ZTogXCIgKyBjb21wb25lbnRDb25maWcuaWQpO1xuICAgIH1cbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBvbmVudENvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgcmVuZGVyZWRDaGlsZDogTmF2Q29tcG9uZW50ID0gdGhpcy5nZXRDaGlsZChjb21wb25lbnRDb25maWcuY2hpbGRyZW5baV0uaWQpO1xuICAgICAgICBpZiAocmVuZGVyZWRDaGlsZCkge1xuICAgICAgICAgIHJlbmRlcmVkQ2hpbGQucmVtb3ZlKGNvbXBvbmVudENvbmZpZy5jaGlsZHJlbltpXSwgaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy5jb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IHRoaXMuZ2V0Q29udGFpbmVyKGNvbXBvbmVudENvbmZpZy5jb250YWluZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIgPSB0aGlzLmdldENvbnRhaW5lcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy52aWV3UmVmTWFwLmdldChjb21wb25lbnRDb25maWcuaWQpKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKGNvbnRhaW5lci5pbmRleE9mKHRoaXMudmlld1JlZk1hcC5nZXQoY29tcG9uZW50Q29uZmlnLmlkKSkpO1xuICAgICAgdGhpcy52aWV3UmVmTWFwLmRlbGV0ZShjb21wb25lbnRDb25maWcuaWQpO1xuICAgIH1cbiAgICBjb21wb25lbnRDb25maWcucmVuZGVyZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpbmRleF0ucmVuZGVyZWQgPSBmYWxzZTtcblxuICAgIHRoaXMucmVtb3ZlQ2hpbGQoY29tcG9uZW50Q29uZmlnLmlkKTtcbiAgfVxuXG4gIHJlbW92ZUJ5SWQoaWQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhcIk5hdkNvbXBvbmVudC5yZW1vdmVCeUlkOiBcIiArIGlkKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09IGlkKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlKHRoaXMuY2hpbGRyZW5baV0sIGkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZW1vdmVCeUlkOiBJRCBcIiArIGlkICsgXCIgbm90IGZvdW5kLlwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBjb21wb25lbnQgY2FuIGJlIHJlbmRlcmVkIGJhc2VkIG9uIHVzZXIgcm9sZXMuICBBIHJvbGUgY2FuIGJlIGFueSBzdHJpbmcsIGJ1dCB0aGVyZSBhcmUgaGFyZGNvZGVkXG4gICAqIHJvbGVzIE5PVF9BVVRIQyBhbmQgQVVUSEMuICBJZiBubyByb2xlTmFtZSBpcyBzcGVjaWZpZWQsIHRoZSBjb21wb25lbnQgaXMgYWx3YXlzIHJlbmRlcmVkLiAgSWYgdGhlIHJvbGVOYW1lIGlzXG4gICAqIE5PVF9BVVRIQywgdGhlIGNvbXBvbmVudCB3aWxsIG9ubHkgYmUgcmVuZGVyZWQgaWYgdGhlcmUgaXMgbm8gYXV0aGVudGljYXRlZCB1c2VyLiAgSWYgdGhlIHJvbGVOYW1lIGlzIEFVVEhDLCB0aGVcbiAgICogY29tcG9uZW50IHdpbGwgYmUgcmVuZGVyZWQgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZC4gIElmIHRoZSByb2xlTmFtZSBpcyBhbnkgc3RyaW5nIGFuZCBtYXRjaGVzIGEgdXNlcidzIHJvbGUsXG4gICAqIHRoZW4gdGhlIGNvbXBvbmVudCB3aWxsIGJlIHJlbmRlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0gY29tcG9uZW50Q29uZmlnXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY2FuUmVuZGVyKGNvbXBvbmVudENvbmZpZzogYW55KTogYm9vbGVhbiB7XG4gICAgbGV0IHJlbmRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLnJvbGVOYW1lKSB7XG4gICAgICByZW5kZXIgPSBmYWxzZTtcbiAgICAgIGxldCB1c2VyUm9sZXM6IFJvbGVFbnRpdHlbXSA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0VXNlclJvbGVzKCkuZ2V0VmFsdWUoKTtcblxuICAgICAgaWYgKGNvbXBvbmVudENvbmZpZy5yb2xlTmFtZSA9PT0gdGhpcy5ub3RBdXRoZW50aWNhdGVkS2V5ICYmICF1c2VyUm9sZXMpIHtcbiAgICAgICAgcmVuZGVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50Q29uZmlnLnJvbGVOYW1lID09PSB0aGlzLmF1dGhlbnRpY2F0ZWRLZXkgJiYgdXNlclJvbGVzKSB7XG4gICAgICAgIHJlbmRlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHVzZXJSb2xlcyAmJiB1c2VyUm9sZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZW5kZXIgPSB1c2VyUm9sZXMuc29tZSgocm9sZTogUm9sZUVudGl0eSkgPT4ge1xuICAgICAgICAgIHJldHVybiByb2xlLlJvbGVOYW1lID09PSBjb21wb25lbnRDb25maWcucm9sZU5hbWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZW5kZXI7XG4gIH1cblxuICBnZXRDaGlsZChpZDogc3RyaW5nKTogTmF2Q29tcG9uZW50IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlbW92ZUNoaWxkKGlkOiBzdHJpbmcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIG5vIGluZGV4IGlzIHNwZWNpZmllZCwgYWRkIHRoZSBjb21wb25lbnQgdG8gdGhlIGNoaWxkcmVuLiAgSW4gYWxsIGNhc2VzLCBzZWUgaWYgdGhlIGNvbXBvbmVudCBjYW4gYmUgcmVuZGVyZWQuXG4gICAqIElmIHNvLCBjYWxsIGFkZENvbXBvbmVudCB0byBoYW5kbGUgdGhlIGluamVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudENvbmZpZ1xuICAgKiBAcGFyYW0gaW5kZXhcbiAgICovXG4gIGFkZChjb21wb25lbnRDb25maWc6IGFueSwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQuYWRkOiBcIiArIGluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbXBvbmVudCBtdXN0IHNwZWNpZnkgYSAndHlwZScgKGUuZy4gVWxOYXZDb21wb25lbnQpLlwiKTtcbiAgICB9XG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5jaGlsZHJlbikge1xuICAgICAgICBpbmRleCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4gPSBbXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4ucHVzaChjb21wb25lbnRDb25maWcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNhblJlbmRlcihjb21wb25lbnRDb25maWcpKSB7XG4gICAgICB0aGlzLmFkZENvbXBvbmVudChjb21wb25lbnRDb25maWcsIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5qZWN0cyB0aGUgY29tcG9uZW50IGRlc2NyaWJlZCBieSB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QgaW4gdG8gdGhlIHZpZXcgYW5kIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSWYgbm8gY29udGFpbmVyIGlzIHNwZWNpZmllZCwgaW5qZWN0IGluIHRvIHRoZSBcImRlZmF1bHRcIiBjb250YWluZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcbiAgICogQHBhcmFtIGluZGV4XG4gICAqL1xuICBhZGRDb21wb25lbnQoY29tcG9uZW50Q29uZmlnOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbXBvbmVudCBtdXN0IHNwZWNpZnkgYSAndHlwZScgKGUuZy4gVWxOYXZDb21wb25lbnQpLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLmNvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb21wb25lbnRDb25maWcuY29udGFpbmVyID0gXCJkZWZhdWx0XCI7XG4gICAgfVxuICAgIGxldCBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYgPSB0aGlzLmdldENvbnRhaW5lcihjb21wb25lbnRDb25maWcuY29udGFpbmVyKTtcblxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhcIk5hdkNvbXBvbmVudC5hZGRDb21wb25lbnQ6IHRvOiBcIiArIGNvbXBvbmVudENvbmZpZy5jb250YWluZXIpO1xuICAgIH1cblxuICAgIGxldCBjb21wb25lbnRSZWYgPSBDb21wb25lbnRJbmplY3Rvci5nZXRDb21wb25lbnRSZWYodGhpcy5yZXNvbHZlciwgY29udGFpbmVyLCBjb21wb25lbnRDb25maWcudHlwZSk7XG4gICAgbGV0IGNvbXBvbmVudEluc3RhbmNlID0gPE5hdkNvbXBvbmVudD5jb21wb25lbnRSZWYuaW5zdGFuY2U7XG5cbiAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpbmRleF0ucmVuZGVyZWQgPSB0cnVlO1xuICAgIGNvbXBvbmVudENvbmZpZy5yZW5kZXJlZCA9IHRydWU7XG5cbiAgICBsZXQgaWQ6IHN0cmluZyA9IGNvbXBvbmVudENvbmZpZy5pZDtcbiAgICBpZiAoIWlkKSB7XG4gICAgICBpZCA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0SWROYXZDb21wb25lbnQoKTtcbiAgICAgIGNvbXBvbmVudENvbmZpZy5pZCA9IGlkO1xuICAgIH1cblxuICAgIGNvbXBvbmVudEluc3RhbmNlLnNldFBhcmVudCh0aGlzKTtcbiAgICAoPE5hdkNvbXBvbmVudD5jb21wb25lbnRJbnN0YW5jZSkuc2V0Q29uZmlnKGNvbXBvbmVudENvbmZpZyk7XG4gICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNvbXBvbmVudEluc3RhbmNlKTtcbiAgICB0aGlzLnZpZXdSZWZNYXAuc2V0KGNvbXBvbmVudENvbmZpZy5pZCwgY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAvL3RoaXMubmF2aWdhdGlvblNlcnZpY2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50Q29uZmlnLmlkLCBjb21wb25lbnRJbnN0YW5jZSk7XG4gIH1cblxuICBpbnNlcnRBZnRlcihpZDogc3RyaW5nLCBjb21wb25lbnRDb25maWc6IGFueSkge1xuICAgIGlmIChjb21wb25lbnRDb25maWcudHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgY29tcG9uZW50IG11c3Qgc3BlY2lmeSBhICd0eXBlJyAoZS5nLiBVbE5hdkNvbXBvbmVudCkuXCIpO1xuICAgIH1cblxuICAgIGxldCBpbmRleDogbnVtYmVyID0gdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5pZCA9PT0gaWQpIHtcbiAgICAgICAgaW5kZXggPSBpICsgMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluZGV4IDw9IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aCAtIDEpIHtcbiAgICAgIGNvbXBvbmVudENvbmZpZy5zb3J0T3JkZXIgPSBpbmRleDtcbiAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5zb3J0T3JkZXIgPSB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5zb3J0T3JkZXIgKyAxO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjb21wb25lbnRDb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgIGNvbXBvbmVudENvbmZpZy5zb3J0T3JkZXIgPSBpbmRleDtcbiAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuLnB1c2goY29tcG9uZW50Q29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jYW5SZW5kZXIoY29tcG9uZW50Q29uZmlnKSkge1xuICAgICAgdGhpcy5hZGRDb21wb25lbnQoY29tcG9uZW50Q29uZmlnLCBpbmRleCk7XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0Q29udGFpbmVycygpO1xuICB9XG5cbiAgaW5zZXJ0QmVmb3JlKGlkOiBzdHJpbmcsIGNvbXBvbmVudENvbmZpZzogYW55KSB7XG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy50eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBjb21wb25lbnQgbXVzdCBzcGVjaWZ5IGEgJ3R5cGUnIChlLmcuIFVsTmF2Q29tcG9uZW50KS5cIik7XG4gICAgfVxuXG4gICAgbGV0IGluZGV4OiBudW1iZXIgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xuICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmRleCA8PSB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGggLSAxKSB7XG4gICAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5zb3J0T3JkZXIgPSB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5zb3J0T3JkZXIgKyAxO1xuICAgICAgfVxuICAgICAgY29tcG9uZW50Q29uZmlnLnNvcnRPcmRlciA9IGluZGV4O1xuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjb21wb25lbnRDb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgIGNvbXBvbmVudENvbmZpZy5zb3J0T3JkZXIgPSBpbmRleDtcbiAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuLnB1c2goY29tcG9uZW50Q29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jYW5SZW5kZXIoY29tcG9uZW50Q29uZmlnKSkge1xuICAgICAgdGhpcy5hZGRDb21wb25lbnQoY29tcG9uZW50Q29uZmlnLCBpbmRleCk7XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0Q29udGFpbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gYmUgZXh0ZW5kZWQgYnkgb3RoZXIgY2xhc3Nlcy4gIFRoaXMgY2xhc3MgYW5kIHNvbWV0aGluZyBsaWtlIGEgTGlOYXZDb21wb25lbnQgZG9uJ3QgaGF2ZSBhbnkgY29udGFpbmVyc1xuICAgKiBzbyBjb21wb25lbnRzIGNhbid0IGJlIGFkZGVkIHRvIHRoZW0uICBJbiBvdGhlciBjYXNlcywgdGhlIFVsTmF2Q29tcG9uZW50IGhhcyBhIHNpbmdsZSBjb250YWluZXIgc28gaXQgY2FuIGFsd2F5c1xuICAgKiByZXR1cm4gdGhhdCBjb250YWluZXIgcmVnYXJkbGVzcyBvZiB0aGUgY29udGFpbmVyTmFtZSByZXF1ZXN0ZWQgKHNob3VsZCBiZSBcImRlZmF1bHRcIikuICBBbnkgY29tcG9uZW50IHNob3VsZCBoYXZlXG4gICAqIGEgY29udGFpbmVyIHRoYXQgaXMgdGhlIFwiZGVmYXVsdFwiLiAgRm9yIGV4YW1wbGUsIGEgaGVhZGVyIGNvbXBvbmVudCBtaWdodCBoYXZlIGEgY29udGFpbmVyIGZvciB0aGUgbGVmdCBjb21wb25lbnRzXG4gICAqIGFuZCBhIGNvbnRhaW5lciBmb3IgdGhlIHJpZ2h0IGNvbXBvbmVudHMuICBUaGUgbGVmdCBjb250YWluZXIgY2FuIGp1c3QgYmUgY2FsbGVkIFwiZGVmYXVsdFwiIGFuZCB0aGUgcmlnaHQgY29udGFpbmVyXG4gICAqIGNvdWxkIGJlIGNhbGxlZCBcInJpZ2h0Q29udGFpbmVyXCIuICBJZiBhIGNoaWxkIGNvbXBvbmVudCBkb2Vzbid0IHNwZWNpZnkgYSBjb250YWluZXIsIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGRlZmF1bHQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICovXG4gIGdldENvbnRhaW5lcihjb250YWluZXI/OiBzdHJpbmcpOiBWaWV3Q29udGFpbmVyUmVmIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50KGlkOiBzdHJpbmcpOiBOYXZDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldENvbXBvbmVudChpZCk7XG4gIH1cblxuICBnZXRDb21wb25lbnRCeVR5cGUodHlwZTogc3RyaW5nKTogTmF2Q29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDb21wb25lbnRCeVR5cGUodHlwZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0UGFyZW50KHBhcmVudDogTmF2Q29tcG9uZW50KSB7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFyZW50KCk6IE5hdkNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgcHVibGljIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRpdGxlID0gdGl0bGU7XG4gIH1cblxuICBzZXRDb25maWcoY29uZmlnKSB7XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKFwic2V0Q29uZmlnOiBcIiArIHRoaXMuaW5pdGlhbGl6ZWQpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGlmIChjb25maWcucmVuZGVyZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25maWcucmVuZGVyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAgIHJlbmRlcmVkOiB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNsYXNzZXMuICBUaGUgY2hpbGRyZW4gc2hvdWxkIGNhbGwgc3VwZXIudXBkYXRlQ29uZmlnKGNvbmZpZykuICBUaGlzIHNldHMgdGhlXG4gICAqIGNvbW1vbiBwcm9wZXJ0aWVzIG9mIHRoZSBOYXZDb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWdcbiAgICovXG4gIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcbiAgICBpZiAoY29uZmlnLnR5cGUpIHtcbiAgICAgIHRoaXMudHlwZSA9IGNvbmZpZy50eXBlO1xuICAgIH1cbiAgICBpZiAodGhpcy50eXBlKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMudHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aGlzLnR5cGVOYW1lID0gdGhpcy50eXBlO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGNvbXBvbmVudFR5cGUgZGVjb3JhdG9yIHdhcyBjcmVhdGVkIGZvciB1Z2xpZmljYXRpb24uIFVzZSBpdCFcbiAgICAgIGVsc2UgaWYgKHRoaXMudHlwZVtcImNvbXBvbmVudFR5cGVcIl0pIHtcbiAgICAgICAgdGhpcy50eXBlTmFtZSA9IHRoaXMudHlwZVtcImNvbXBvbmVudFR5cGVcIl07XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy50eXBlTmFtZSA9ICg8VHlwZTxhbnk+PnRoaXMudHlwZSkubmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmlkKSB7XG4gICAgICB0aGlzLmlkID0gY29uZmlnLmlkO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaWQpIHtcbiAgICAgIHRoaXMuaWQgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkTmF2Q29tcG9uZW50KCk7XG4gICAgfVxuICAgIHRoaXMuc2V0SWQoKTtcblxuICAgIGlmICh0aGlzLmlzUm9vdCkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zZXRSb290Q29tcG9uZW50KHRoaXMuaWQsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhcIk5hdkNvbXBvbmVudC51cGRhdGVDb25maWc6IFwiICsgdGhpcy5pZCArIFwiOiBcIiArIHRoaXMuaW5pdGlhbGl6ZWQpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuYXV0aGVudGljYXRlZEtleSkge1xuICAgICAgdGhpcy5hdXRoZW50aWNhdGVkS2V5ID0gY29uZmlnLmF1dGhlbnRpY2F0ZWRLZXk7XG4gICAgfVxuICAgIGlmIChjb25maWcubm90QXV0aGVudGljYXRlZEtleSkge1xuICAgICAgdGhpcy5ub3RBdXRoZW50aWNhdGVkS2V5ID0gY29uZmlnLm5vdEF1dGhlbnRpY2F0ZWRLZXk7XG4gICAgfVxuICAgIGlmIChjb25maWcucm9sZU5hbWUpIHtcbiAgICAgIHRoaXMucm9sZU5hbWUgPSBjb25maWcucm9sZU5hbWU7XG4gICAgfVxuICAgIGlmIChjb25maWcudGl0bGUpIHtcbiAgICAgIHRoaXMudGl0bGUgPSBjb25maWcudGl0bGU7XG4gICAgfVxuICAgIGlmIChjb25maWcucm9vdENsYXNzKSB7XG4gICAgICB0aGlzLnJvb3RDbGFzcyA9IGNvbmZpZy5yb290Q2xhc3M7XG4gICAgICB0aGlzLnNldFJvb3RDbGFzcygpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmNoaWxkcmVuKSB7XG4gICAgICB0aGlzLmlucHV0Q2hpbGRyZW4gPSBjb25maWcuY2hpbGRyZW47XG4gICAgICB0aGlzLnNldENoaWxkcmVuKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQudXBkYXRlQ29uZmlnOiBcIiArICh0aGlzLmNvbnN0cnVjdG9yLm5hbWUpICsgXCIsIFwiICsgdGhpcy5pZCArIFwiLCBcIiArIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0SWQoKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0SWQoKTogdm9pZCB7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5yZWdpc3RlckNvbXBvbmVudCh0aGlzLmlkLCB0aGlzKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgXCJpZFwiLCB0aGlzLmlkKTtcbiAgfVxuXG4gIHNldFJvb3RDbGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb290Q2xhc3MpIHtcbiAgICAgIGxldCBjbGFzc2VzOiBzdHJpbmdbXSA9IHRoaXMucm9vdENsYXNzLnNwbGl0KFwiIFwiKTtcbiAgICAgIGZvciAobGV0IHJvb3RDbGFzcyBvZiBjbGFzc2VzKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHJvb3RDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0Q2hpbGRyZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW5baV0uc29ydE9yZGVyID0gaTtcbiAgICAgIHRoaXMuYWRkKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLCBpKTtcbiAgICB9XG4gIH1cblxuICBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICghKDxWaWV3UmVmPnRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYpLmRlc3Ryb3llZCkge1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
609
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25hdmlnYXRpb24vc3JjL2NvbXBvbmVudHMvbmF2LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBU1QsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7OztBQUVqRTs7Ozs7OztHQU9HO0FBU0gsTUFBTSxPQUFPLFlBQVk7SUF1RHZCLFlBQVksVUFBc0IsRUFBRSxRQUFtQixFQUFFLFFBQWtDLEVBQUUsaUJBQW9DLEVBQUUsaUJBQW9DO1FBckQ5SixXQUFNLEdBQVE7WUFDckIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBRU8sV0FBTSxHQUFZLEtBQUssQ0FBQztRQUt4QixxQkFBZ0IsR0FBVyxPQUFPLENBQUM7UUFDbkMsd0JBQW1CLEdBQVcsV0FBVyxDQUFDO1FBQ2hDLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQ3BDLFVBQUssR0FBWSxLQUFLLENBQUM7UUFDaEM7Ozs7V0FJRztRQUNILGFBQVEsR0FBbUIsRUFBRSxDQUFDO1FBVTlCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTdCOzs7V0FHRztRQUNILGlCQUFZLEdBQWdCLElBQUksR0FBRyxFQUFVLENBQUM7UUFFOUM7Ozs7OztXQU1HO1FBQ0ssZUFBVSxHQUF5QixJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQU90RSxrQkFBYSxHQUFpQixJQUFJLFlB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QUFDO1lBQ2pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQzs4R0FscEJVLFlBQVk7a0dBQVosWUFBWSxxV0FMbkI7T0FDQzs7MkZBSU0sWUFBWTtrQkFSeEIsU0FBUzttQkFDUjtvQkFDRSxRQUFRLEVBQ047T0FDQztvQkFDSCxRQUFRLEVBQUUsU0FBUztpQkFDcEI7OE1BSVEsTUFBTTtzQkFBZCxLQUFLO2dCQUdVLEVBQUU7c0JBQWpCLEtBQUs7dUJBQUMsT0FBTztnQkFDTCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDYSxhQUFhO3NCQUEvQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ1IsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZSxcclxuICBUeXBlLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgVmlld1JlZixcclxuICBPbkluaXQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIENvbXBvbmVudFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtSb2xlRW50aXR5fSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXNlclwiO1xyXG5pbXBvcnQge0NvbXBvbmVudEluamVjdG9yfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXRpbHNcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSBcIi4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgdGhhdCBhbGwgbmF2aWdhdGlvbiBjb21wb25lbnRzIGV4dGVuZCBmcm9tLiAgVGhpcyBpbmNsdWRlcyBvdGhlciBzdGFuZGFsb25lIG1vZHVsZXMgc3VjaFxyXG4gKiBhcyBhIGhlYWRlciBvciBzaWRlYmFyLiAgSXQgY29udGFpbnMgY29tbW9uIHByb3BlcnRpZXMsIGNvbmZpZ3VyYXRpb24gdG9vbHMsIGFuZCBmdW5jdGlvbnMgdG8gYWRkL2luc2VydCBvdGhlclxyXG4gKiBOYXZDb21wb25lbnRzLlxyXG4gKiBUaGUgY29uZmlnIHByb3BlcnR5IGlzIGFueSBvYmplY3QgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0aGF0IHNwZWNpZmllcyBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBDb21tb25cclxuICogcHJvcGVydGllcyBpbmNsdWRlIGlkLCB0aXRsZSwgcm9vdENsYXNzIGFuZCByb2xlTmFtZS4gIEV4dGVuZGluZyBjbGFzc2VzIG1heSBoYXZlIHRoZWlyIG93biBwcm9wZXJ0aWVzIHN1Y2ggYXMgZXh0cmFcclxuICogY3NzIGNsYXNzZXMuXHJcbiAqL1xyXG5AQ29tcG9uZW50KFxyXG4gIHtcclxuICAgIHRlbXBsYXRlOlxyXG4gICAgICBgXHJcbiAgICAgIGAsXHJcbiAgICBzZWxlY3RvcjogXCJoY2ktbmF2XCJcclxuICB9XHJcbilcclxuZXhwb3J0IGNsYXNzIE5hdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBjb25maWc6IGFueSA9IHtcclxuICAgIHJlbmRlcmVkOiB0cnVlXHJcbiAgfTtcclxuICBASW5wdXQoXCJuYXZJZFwiKSBpZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHR5cGU6IFR5cGU8YW55PiB8IHN0cmluZztcclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJvb3RDbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJvbGVOYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXV0aGVudGljYXRlZEtleTogc3RyaW5nID0gXCJBVVRIQ1wiO1xyXG4gIEBJbnB1dCgpIG5vdEF1dGhlbnRpY2F0ZWRLZXk6IHN0cmluZyA9IFwiTk9UX0FVVEhDXCI7XHJcbiAgQElucHV0KFwiY2hpbGRyZW5cIikgaW5wdXRDaGlsZHJlbjogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBpc0NDUjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIGFsbCBjb21wb25lbnQgaW5zdGFuY2VzIG9mIGNoaWxkcmVuLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB3ZSB0cnkgdG8gcmVuZGVyIGV2ZXJ5dGhpbmcgaW4gdGhlXHJcbiAgICogY2hpbGRyZW4gYXJyYXkuICBIb3dldmVyLCBpZiByb2xlcyBhcmUgbm90IG1ldCwgc29tZSBjaGlsZHJlbiBtYXkgbm90IGJlIHJlbmRlcmVkIHNvIG5vIGNvbXBvbmVudCBpbnN0YW5jZSB3aWxsXHJcbiAgICogZXhpc3QgZm9yIHRoZW0uXHJcbiAgICovXHJcbiAgY2hpbGRyZW46IE5hdkNvbXBvbmVudFtdID0gW107XHJcblxyXG4gIHR5cGVOYW1lOiBzdHJpbmc7XHJcblxyXG4gIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XHJcbiAgcmVuZGVyZXI6IFJlbmRlcmVyMjtcclxuICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyO1xyXG4gIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZTtcclxuICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWY7XHJcblxyXG4gIGFmdGVyVmlld0luaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBBIHNldCBvZiBjb250YWluZXIgbmFtZXMuICBTb21lIGNvbXBvbmVudHMgbWF5IG5vdCBkZWZpbmUgYSBjb250YWluZXIgd2hpbGUgb3RoZXJzIGp1c3QgaGF2ZVxyXG4gICAqIG9uZSAoYSBcImRlZmF1bHRcIiBjb250YWluZXIpLlxyXG4gICAqL1xyXG4gIGNvbnRhaW5lclNldDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBtYXAgb2YgSURzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZpZXdSZWYuICBXaGVuIHdlIGR5bmFtaWNhbGx5IGluamVjdCBhIG5ldyBjb21wb25lbnQsIHdlIGZpcnN0IHB1bGwgdGhlIGNyZWF0ZWRcclxuICAgKiBDb21wb25lbnRSZWYgYW5kIGZyb20gdGhlcmUgaXRzIFZpZXdSZWYuICBXZSBuZWVkIHRoZSBWaWV3UmVmIHRvIGRldGVybWluZSB0aGUgY29tcG9uZW50J3MgcG9zaXRpb24gaW4gdGhlXHJcbiAgICogVmlld0NvbnRhaW5lclJlZi4gIFdpdGggYSBzZXQgb2YgVmlld1JlZnMsIHdlIGNhbiBkZXRhY2ggdGhlbSBmcm9tIHRoZSBjb250YWluZXIgYW5kIHJlLWFkZCB0aGVtIGluIGEgZGlmZmVyZW50IG9yZGVyXHJcbiAgICogYmFzZWQgb24gdGhlIGNvbXBvbmVudCdzIHNvcnRPcmRlciAod2hpY2ggaXMgYmFzZWQgb24gdGhlIHBvc2l0aW9uIGluIHRoZSBjaGlsZHJlbiBhcnJheS4gIFRoaXMgbWFwIHByb3ZpZGVzIHRoZVxyXG4gICAqIGNvbXBvbmVudCB0byB2aWV3IHJlbGF0aW9uc2hpcC5cclxuICAgKi9cclxuICBwcml2YXRlIHZpZXdSZWZNYXA6IE1hcDxzdHJpbmcsIFZpZXdSZWY+ID0gbmV3IE1hcDxzdHJpbmcsIFZpZXdSZWY+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50LiAgV2hlbiBhIGNoaWxkIGlzIGFkZGVkLCBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGlzIGF1dG9tYXRpY2FsbHkgc2V0LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyZW50OiBOYXZDb21wb25lbnQ7XHJcblxyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XHJcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XHJcbiAgICB0aGlzLnJlc29sdmVyID0gcmVzb2x2ZXI7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmF2aWdhdGlvblNlcnZpY2U7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmID0gY2hhbmdlRGV0ZWN0b3JSZWY7XHJcblxyXG4gICAgdGhpcy5jb250YWluZXJTZXQuYWRkKFwiZGVmYXVsdFwiKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNSb290KSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRVc2VyUm9sZXMoKS5zdWJzY3JpYmUoKHVzZXJSb2xlczogUm9sZUVudGl0eVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiVXNlciBSb2xlcyBjaGFuZ2VkLiAgUmVmcmVzaCBjaGlsZHJlbi5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVmcmVzaENoaWxkcmVuKCk7XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50Lm5nQWZ0ZXJWaWV3SW5pdFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFmdGVyVmlld0luaXQgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGVja0luaXRpYWxpemVkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiBjb25maWcgaXMgYm91bmQgYnkgaW5wdXQsIHJlc2V0IHRoZSBjb25maWcgd2hlbiBpdCBjaGFuZ2VzLiAgQW4gaW1wb3J0YW50IG5vdGUsIGlmIGFueXRoaW5nIGluIHRoZSBjb25maWcgd2FzXHJcbiAgICogdXBkYXRlZCBieSB1cGRhdGVDb25maWcgb25seSwgdGhlbiB0aG9zZSBvcHRpb25zIHdpbGwgYmUgbG9zdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7e1twOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2V9fSBjaGFuZ2VzXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBbcHJvcE5hbWU6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIm5nT25DaGFuZ2VzOlwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhjaGFuZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBjaGFuZ2Ugb2YgT2JqZWN0LmtleXMoY2hhbmdlcykpIHtcclxuICAgICAgaWYgKGNoYW5nZSAhPT0gXCJjb25maWdcIikge1xyXG4gICAgICAgIHRoaXNbY2hhbmdlXSA9IGNoYW5nZXNbY2hhbmdlXS5jdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2UgPT09IFwiaW5wdXRDaGlsZHJlblwiKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ1tcImNoaWxkcmVuXCJdID0gY2hhbmdlc1tjaGFuZ2VdLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb25maWdbY2hhbmdlXSA9IGNoYW5nZXNbY2hhbmdlXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbXCJjb25maWdcIl0pIHtcclxuICAgICAgdGhpcy5zZXRDb25maWcodGhpcy5jb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzW1wiaWRcIl0pIHtcclxuICAgICAgdGhpcy5zZXRJZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbXCJyb290Q2xhc3NcIl0pIHtcclxuICAgICAgdGhpcy5zZXRSb290Q2xhc3MoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzW1wiaW5wdXRDaGlsZHJlblwiXSkge1xyXG4gICAgICB0aGlzLnNldENoaWxkcmVuKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0YWNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0luaXRpYWxpemVkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYWZ0ZXJWaWV3SW5pdCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5jb25maWcpO1xyXG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5wb3N0SW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9zdEluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBnZXROYXZpZ2F0aW9uU2VydmljZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGFsbCBjaGlsZHJlbi5cclxuICAgKi9cclxuICBjbGVhcigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQuY2xlYXJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlKHRoaXMuY2hpbGRyZW5baV0sIGkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICBsZXQgaXNSZW5kZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLnJlbmRlcmVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaXNSZW5kZXJlZCA9IHRoaXMuY29uZmlnLnJlbmRlcmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGNoaWxkcmVuIGFuZCBzZWVzIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIHJlbmRlcmluZyBzdGF0dXMuICBJZiBhIHBlcm1pc3Npb24gZ29lcyBhd2F5LCBhIGNvbXBvbmVudCB0aGF0XHJcbiAgICogaXMgY3VycmVudGx5IHJlbmRlcmVkIG1pZ2h0IG5lZWQgdG8gYmUgcmVtb3ZlZC4gIFJlY3Vyc2l2ZWx5IG1vdmUgdGhyb3VnaCB0aGUgdHJlZSBvZiBjaGlsZHJlbi5cclxuICAgKi9cclxuICByZWZyZXNoQ2hpbGRyZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5jaGlsZHJlbikge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwicmVmcmVzaENoaWxkcmVuOiBcIiArIGkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJlbmRlciA9IHRoaXMuY2FuUmVuZGVyKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldKTtcclxuXHJcbiAgICAgICAgbGV0IGlzUmVuZGVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW5baV0ucmVuZGVyZWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgaXNSZW5kZXJlZCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLnJlbmRlcmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlbmRlciAmJiAhaXNSZW5kZXJlZCkge1xyXG4gICAgICAgICAgdGhpcy5hZGQodGhpcy5jb25maWcuY2hpbGRyZW5baV0sIGkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXJlbmRlciAmJiBpc1JlbmRlcmVkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZSh0aGlzLmNvbmZpZy5jaGlsZHJlbltpXSwgaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVjdXJzaXZlbHkgY2hlY2sgY2hpbGRyZW5cclxuICAgIGZvciAobGV0IGNvbXBvbmVudCBvZiB0aGlzLmNoaWxkcmVuKSB7XHJcbiAgICAgIGNvbXBvbmVudC5yZWZyZXNoQ2hpbGRyZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvcnRDb250YWluZXJzKCk7XHJcblxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2luZyB0aGUgc29ydE9yZGVyIHByb3BlcnR5IG9mIGVhY2ggY29tcG9uZW50LCBkZXRhY2ggZWFjaCBWaWV3UmVmIGZyb20gdGhlIGNvbnRhaW5lciwgYW5kIHJlLWF0dGFjaCBiYXNlZFxyXG4gICAqIG9uIHRoZSBzb3J0T3JkZXIuXHJcbiAgICovXHJcbiAgc29ydENvbnRhaW5lcnMoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU29ydCB0aGUgY2hpbGRyZW4uICBJdCBkb2Vzbid0IG1hdHRlciB0aGF0IHRoaXMgbGlzdCBtYXkgY29udGFpbiBjaGlsZHJlbiBpbiBtdWx0aXBsZSBjb250YWluZXJzLlxyXG4gICAgbGV0IHNvcnRlZENoaWxkcmVuID0gdGhpcy5jb25maWcuY2hpbGRyZW4uc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGEuc29ydE9yZGVyIDwgYi5zb3J0T3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH0gZWxzZSBpZiAoYS5zb3J0T3JkZXIgPiBiLnNvcnRPcmRlcikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKGxldCBjb250YWluZXJOYW1lIG9mIHRoaXMuY29udGFpbmVyU2V0KSB7XHJcbiAgICAgIGxldCBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYgPSB0aGlzLmdldENvbnRhaW5lcihjb250YWluZXJOYW1lKTtcclxuXHJcbiAgICAgIGlmICghY29udGFpbmVyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKCFzb3J0ZWRDaGlsZHJlbltpXS5pZCkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzb3J0ZWRDaGlsZHJlbltpXS5jb250YWluZXIgIT09IGNvbnRhaW5lck5hbWUpIHtcclxuICAgICAgICAgIC8vIENoaWxkcmVuIGlzIGEgbGlzdCBwb3NzaWJseSBzcGFubmluZyBtdWx0aXBsZSBjb250YWluZXJzLiAgU2tpcCBpZiBub3Qgb24gdGhlIGN1cnJlbnQgY29udGFpbmVyLlxyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWV3UmVmTWFwLmdldChzb3J0ZWRDaGlsZHJlbltpXS5pZCkpIHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwic29ydENoaWxkcmVuOiBpOiBcIiArIGkgKyBcIiwgaWQ6IFwiICsgc29ydGVkQ2hpbGRyZW5baV0uaWQgKyBcIiwgZGVzdHJveWVkOiBcIiArIHRoaXMudmlld1JlZk1hcC5nZXQoc29ydGVkQ2hpbGRyZW5baV0uaWQpLmRlc3Ryb3llZCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLnZpZXdSZWZNYXAuZ2V0KHNvcnRlZENoaWxkcmVuW2ldLmlkKS5kZXN0cm95ZWQpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLmluc2VydCh0aGlzLnZpZXdSZWZNYXAuZ2V0KHNvcnRlZENoaWxkcmVuW2ldLmlkKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdSZWZNYXAuZGVsZXRlKHNvcnRlZENoaWxkcmVuW2ldLmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhIGNvbXBvbmVudCBieSBpZCBmcm9tIGl0cyBwYXJlbnQgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudENvbmZpZ1xyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqL1xyXG4gIHJlbW92ZShjb21wb25lbnRDb25maWc6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5jaGlsZHJlbiB8fCAhdGhpcy5jb25maWcuY2hpbGRyZW5baW5kZXhdKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIk5hdkNvbXBvbmVudDogQ2hpbGQgXCIgKyBpbmRleCArIFwiIGRvZXMgbm90IGV4aXN0IG9uIFwiICsgdGhpcy5jb25maWcuaWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQucmVtb3ZlOiBcIiArIGNvbXBvbmVudENvbmZpZy5pZCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHJlbmRlcmVkQ2hpbGQ6IE5hdkNvbXBvbmVudCA9IHRoaXMuZ2V0Q2hpbGQoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuW2ldLmlkKTtcclxuICAgICAgICBpZiAocmVuZGVyZWRDaGlsZCkge1xyXG4gICAgICAgICAgcmVuZGVyZWRDaGlsZC5yZW1vdmUoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuW2ldLCBpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIGlmIChjb21wb25lbnRDb25maWcuY29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnRhaW5lciA9IHRoaXMuZ2V0Q29udGFpbmVyKGNvbXBvbmVudENvbmZpZy5jb250YWluZXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGFpbmVyID0gdGhpcy5nZXRDb250YWluZXIoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZpZXdSZWZNYXAuZ2V0KGNvbXBvbmVudENvbmZpZy5pZCkpIHtcclxuICAgICAgY29udGFpbmVyLnJlbW92ZShjb250YWluZXIuaW5kZXhPZih0aGlzLnZpZXdSZWZNYXAuZ2V0KGNvbXBvbmVudENvbmZpZy5pZCkpKTtcclxuICAgICAgdGhpcy52aWV3UmVmTWFwLmRlbGV0ZShjb21wb25lbnRDb25maWcuaWQpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50Q29uZmlnLnJlbmRlcmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpbmRleF0ucmVuZGVyZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNoaWxkKGNvbXBvbmVudENvbmZpZy5pZCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVCeUlkKGlkOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50LnJlbW92ZUJ5SWQ6IFwiICsgaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5pZCA9PSBpZCkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlKHRoaXMuY2hpbGRyZW5baV0sIGkpO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZW1vdmVCeUlkOiBJRCBcIiArIGlkICsgXCIgbm90IGZvdW5kLlwiKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGNvbXBvbmVudCBjYW4gYmUgcmVuZGVyZWQgYmFzZWQgb24gdXNlciByb2xlcy4gIEEgcm9sZSBjYW4gYmUgYW55IHN0cmluZywgYnV0IHRoZXJlIGFyZSBoYXJkY29kZWRcclxuICAgKiByb2xlcyBOT1RfQVVUSEMgYW5kIEFVVEhDLiAgSWYgbm8gcm9sZU5hbWUgaXMgc3BlY2lmaWVkLCB0aGUgY29tcG9uZW50IGlzIGFsd2F5cyByZW5kZXJlZC4gIElmIHRoZSByb2xlTmFtZSBpc1xyXG4gICAqIE5PVF9BVVRIQywgdGhlIGNvbXBvbmVudCB3aWxsIG9ubHkgYmUgcmVuZGVyZWQgaWYgdGhlcmUgaXMgbm8gYXV0aGVudGljYXRlZCB1c2VyLiAgSWYgdGhlIHJvbGVOYW1lIGlzIEFVVEhDLCB0aGVcclxuICAgKiBjb21wb25lbnQgd2lsbCBiZSByZW5kZXJlZCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLiAgSWYgdGhlIHJvbGVOYW1lIGlzIGFueSBzdHJpbmcgYW5kIG1hdGNoZXMgYSB1c2VyJ3Mgcm9sZSxcclxuICAgKiB0aGVuIHRoZSBjb21wb25lbnQgd2lsbCBiZSByZW5kZXJlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBjYW5SZW5kZXIoY29tcG9uZW50Q29uZmlnOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGxldCByZW5kZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIGlmIChjb21wb25lbnRDb25maWcucm9sZU5hbWUpIHtcclxuICAgICAgcmVuZGVyID0gZmFsc2U7XHJcbiAgICAgIGxldCB1c2VyUm9sZXM6IFJvbGVFbnRpdHlbXSA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0VXNlclJvbGVzKCkuZ2V0VmFsdWUoKTtcclxuXHJcbiAgICAgIGlmIChjb21wb25lbnRDb25maWcucm9sZU5hbWUgPT09IHRoaXMubm90QXV0aGVudGljYXRlZEtleSAmJiAhdXNlclJvbGVzKSB7XHJcbiAgICAgICAgcmVuZGVyID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChjb21wb25lbnRDb25maWcucm9sZU5hbWUgPT09IHRoaXMuYXV0aGVudGljYXRlZEtleSAmJiB1c2VyUm9sZXMpIHtcclxuICAgICAgICByZW5kZXIgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHVzZXJSb2xlcyAmJiB1c2VyUm9sZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlbmRlciA9IHVzZXJSb2xlcy5zb21lKChyb2xlOiBSb2xlRW50aXR5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcm9sZS5Sb2xlTmFtZSA9PT0gY29tcG9uZW50Q29uZmlnLnJvbGVOYW1lO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlbmRlcjtcclxuICB9XHJcblxyXG4gIGdldENoaWxkKGlkOiBzdHJpbmcpOiBOYXZDb21wb25lbnQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ2hpbGQoaWQ6IHN0cmluZykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiBubyBpbmRleCBpcyBzcGVjaWZpZWQsIGFkZCB0aGUgY29tcG9uZW50IHRvIHRoZSBjaGlsZHJlbi4gIEluIGFsbCBjYXNlcywgc2VlIGlmIHRoZSBjb21wb25lbnQgY2FuIGJlIHJlbmRlcmVkLlxyXG4gICAqIElmIHNvLCBjYWxsIGFkZENvbXBvbmVudCB0byBoYW5kbGUgdGhlIGluamVjdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcclxuICAgKiBAcGFyYW0gaW5kZXhcclxuICAgKi9cclxuICBhZGQoY29tcG9uZW50Q29uZmlnOiBhbnksIGluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIk5hdkNvbXBvbmVudC5hZGQ6IFwiICsgaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb21wb25lbnRDb25maWcudHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBjb21wb25lbnQgbXVzdCBzcGVjaWZ5IGEgJ3R5cGUnIChlLmcuIFVsTmF2Q29tcG9uZW50KS5cIik7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW4pIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbmRleCA9IDA7XHJcbiAgICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4gPSBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4ucHVzaChjb21wb25lbnRDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNhblJlbmRlcihjb21wb25lbnRDb25maWcpKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29tcG9uZW50KGNvbXBvbmVudENvbmZpZywgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5qZWN0cyB0aGUgY29tcG9uZW50IGRlc2NyaWJlZCBieSB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QgaW4gdG8gdGhlIHZpZXcgYW5kIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudC5cclxuICAgKiBJZiBubyBjb250YWluZXIgaXMgc3BlY2lmaWVkLCBpbmplY3QgaW4gdG8gdGhlIFwiZGVmYXVsdFwiIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcclxuICAgKiBAcGFyYW0gaW5kZXhcclxuICAgKi9cclxuICBhZGRDb21wb25lbnQoY29tcG9uZW50Q29uZmlnOiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChjb21wb25lbnRDb25maWcudHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBjb21wb25lbnQgbXVzdCBzcGVjaWZ5IGEgJ3R5cGUnIChlLmcuIFVsTmF2Q29tcG9uZW50KS5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy5jb250YWluZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb21wb25lbnRDb25maWcuY29udGFpbmVyID0gXCJkZWZhdWx0XCI7XHJcbiAgICB9XHJcbiAgICBsZXQgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmID0gdGhpcy5nZXRDb250YWluZXIoY29tcG9uZW50Q29uZmlnLmNvbnRhaW5lcik7XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQuYWRkQ29tcG9uZW50OiB0bzogXCIgKyBjb21wb25lbnRDb25maWcuY29udGFpbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29tcG9uZW50UmVmID0gQ29tcG9uZW50SW5qZWN0b3IuZ2V0Q29tcG9uZW50UmVmKHRoaXMucmVzb2x2ZXIsIGNvbnRhaW5lciwgY29tcG9uZW50Q29uZmlnLnR5cGUpO1xyXG4gICAgbGV0IGNvbXBvbmVudEluc3RhbmNlID0gPE5hdkNvbXBvbmVudD5jb21wb25lbnRSZWYuaW5zdGFuY2U7XHJcblxyXG4gICAgdGhpcy5jb25maWcuY2hpbGRyZW5baW5kZXhdLnJlbmRlcmVkID0gdHJ1ZTtcclxuICAgIGNvbXBvbmVudENvbmZpZy5yZW5kZXJlZCA9IHRydWU7XHJcblxyXG4gICAgbGV0IGlkOiBzdHJpbmcgPSBjb21wb25lbnRDb25maWcuaWQ7XHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIGlkID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZE5hdkNvbXBvbmVudCgpO1xyXG4gICAgICBjb21wb25lbnRDb25maWcuaWQgPSBpZDtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRJbnN0YW5jZS5zZXRQYXJlbnQodGhpcyk7XHJcbiAgICAoPE5hdkNvbXBvbmVudD5jb21wb25lbnRJbnN0YW5jZSkuc2V0Q29uZmlnKGNvbXBvbmVudENvbmZpZyk7XHJcbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY29tcG9uZW50SW5zdGFuY2UpO1xyXG4gICAgdGhpcy52aWV3UmVmTWFwLnNldChjb21wb25lbnRDb25maWcuaWQsIGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XHJcbiAgICAvL3RoaXMubmF2aWdhdGlvblNlcnZpY2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50Q29uZmlnLmlkLCBjb21wb25lbnRJbnN0YW5jZSk7XHJcbiAgfVxyXG5cclxuICBpbnNlcnRBZnRlcihpZDogc3RyaW5nLCBjb21wb25lbnRDb25maWc6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy50eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbXBvbmVudCBtdXN0IHNwZWNpZnkgYSAndHlwZScgKGUuZy4gVWxOYXZDb21wb25lbnQpLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaW5kZXg6IG51bWJlciA9IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIGluZGV4ID0gaSArIDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5kZXggPD0gdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoIC0gMSkge1xyXG4gICAgICBjb21wb25lbnRDb25maWcuc29ydE9yZGVyID0gaW5kZXg7XHJcbiAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLnNvcnRPcmRlciA9IHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLnNvcnRPcmRlciArIDE7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjb21wb25lbnRDb25maWcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5kZXggPSB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgIGNvbXBvbmVudENvbmZpZy5zb3J0T3JkZXIgPSBpbmRleDtcclxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4ucHVzaChjb21wb25lbnRDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNhblJlbmRlcihjb21wb25lbnRDb25maWcpKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29tcG9uZW50KGNvbXBvbmVudENvbmZpZywgaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc29ydENvbnRhaW5lcnMoKTtcclxuICB9XHJcblxyXG4gIGluc2VydEJlZm9yZShpZDogc3RyaW5nLCBjb21wb25lbnRDb25maWc6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy50eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbXBvbmVudCBtdXN0IHNwZWNpZnkgYSAndHlwZScgKGUuZy4gVWxOYXZDb21wb25lbnQpLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaW5kZXg6IG51bWJlciA9IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbmRleCA8PSB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW5baV0uc29ydE9yZGVyID0gdGhpcy5jb25maWcuY2hpbGRyZW5baV0uc29ydE9yZGVyICsgMTtcclxuICAgICAgfVxyXG4gICAgICBjb21wb25lbnRDb25maWcuc29ydE9yZGVyID0gaW5kZXg7XHJcbiAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY29tcG9uZW50Q29uZmlnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZGV4ID0gdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICBjb21wb25lbnRDb25maWcuc29ydE9yZGVyID0gaW5kZXg7XHJcbiAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuLnB1c2goY29tcG9uZW50Q29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jYW5SZW5kZXIoY29tcG9uZW50Q29uZmlnKSkge1xyXG4gICAgICB0aGlzLmFkZENvbXBvbmVudChjb21wb25lbnRDb25maWcsIGluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvcnRDb250YWluZXJzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNsYXNzZXMuICBUaGlzIGNsYXNzIGFuZCBzb21ldGhpbmcgbGlrZSBhIExpTmF2Q29tcG9uZW50IGRvbid0IGhhdmUgYW55IGNvbnRhaW5lcnNcclxuICAgKiBzbyBjb21wb25lbnRzIGNhbid0IGJlIGFkZGVkIHRvIHRoZW0uICBJbiBvdGhlciBjYXNlcywgdGhlIFVsTmF2Q29tcG9uZW50IGhhcyBhIHNpbmdsZSBjb250YWluZXIgc28gaXQgY2FuIGFsd2F5c1xyXG4gICAqIHJldHVybiB0aGF0IGNvbnRhaW5lciByZWdhcmRsZXNzIG9mIHRoZSBjb250YWluZXJOYW1lIHJlcXVlc3RlZCAoc2hvdWxkIGJlIFwiZGVmYXVsdFwiKS4gIEFueSBjb21wb25lbnQgc2hvdWxkIGhhdmVcclxuICAgKiBhIGNvbnRhaW5lciB0aGF0IGlzIHRoZSBcImRlZmF1bHRcIi4gIEZvciBleGFtcGxlLCBhIGhlYWRlciBjb21wb25lbnQgbWlnaHQgaGF2ZSBhIGNvbnRhaW5lciBmb3IgdGhlIGxlZnQgY29tcG9uZW50c1xyXG4gICAqIGFuZCBhIGNvbnRhaW5lciBmb3IgdGhlIHJpZ2h0IGNvbXBvbmVudHMuICBUaGUgbGVmdCBjb250YWluZXIgY2FuIGp1c3QgYmUgY2FsbGVkIFwiZGVmYXVsdFwiIGFuZCB0aGUgcmlnaHQgY29udGFpbmVyXHJcbiAgICogY291bGQgYmUgY2FsbGVkIFwicmlnaHRDb250YWluZXJcIi4gIElmIGEgY2hpbGQgY29tcG9uZW50IGRvZXNuJ3Qgc3BlY2lmeSBhIGNvbnRhaW5lciwgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb250YWluZXJcclxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gICAqL1xyXG4gIGdldENvbnRhaW5lcihjb250YWluZXI/OiBzdHJpbmcpOiBWaWV3Q29udGFpbmVyUmVmIHtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRDb21wb25lbnQoaWQ6IHN0cmluZyk6IE5hdkNvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDb21wb25lbnQoaWQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50QnlUeXBlKHR5cGU6IHN0cmluZyk6IE5hdkNvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDb21wb25lbnRCeVR5cGUodHlwZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UGFyZW50KHBhcmVudDogTmF2Q29tcG9uZW50KSB7XHJcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQYXJlbnQoKTogTmF2Q29tcG9uZW50IHtcclxuICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRpdGxlID0gdGl0bGU7XHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcoY29uZmlnKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInNldENvbmZpZzogXCIgKyB0aGlzLmluaXRpYWxpemVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGlmIChjb25maWcucmVuZGVyZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbmZpZy5yZW5kZXJlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWcgPSB7XHJcbiAgICAgICAgcmVuZGVyZWQ6IHRydWVcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdG8gYmUgZXh0ZW5kZWQgYnkgb3RoZXIgY2xhc3Nlcy4gIFRoZSBjaGlsZHJlbiBzaG91bGQgY2FsbCBzdXBlci51cGRhdGVDb25maWcoY29uZmlnKS4gIFRoaXMgc2V0cyB0aGVcclxuICAgKiBjb21tb24gcHJvcGVydGllcyBvZiB0aGUgTmF2Q29tcG9uZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbmZpZ1xyXG4gICAqL1xyXG4gIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcclxuICAgIGlmIChjb25maWcudHlwZSkge1xyXG4gICAgICB0aGlzLnR5cGUgPSBjb25maWcudHlwZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnR5cGUpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICB0aGlzLnR5cGVOYW1lID0gdGhpcy50eXBlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFRoZSBjb21wb25lbnRUeXBlIGRlY29yYXRvciB3YXMgY3JlYXRlZCBmb3IgdWdsaWZpY2F0aW9uLiBVc2UgaXQhXHJcbiAgICAgIGVsc2UgaWYgKHRoaXMudHlwZVtcImNvbXBvbmVudFR5cGVcIl0pIHtcclxuICAgICAgICB0aGlzLnR5cGVOYW1lID0gdGhpcy50eXBlW1wiY29tcG9uZW50VHlwZVwiXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnR5cGVOYW1lID0gKDxUeXBlPGFueT4+dGhpcy50eXBlKS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5pZCkge1xyXG4gICAgICB0aGlzLmlkID0gY29uZmlnLmlkO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5pZCkge1xyXG4gICAgICB0aGlzLmlkID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZE5hdkNvbXBvbmVudCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRJZCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzUm9vdCkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnNldFJvb3RDb21wb25lbnQodGhpcy5pZCwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQudXBkYXRlQ29uZmlnOiBcIiArIHRoaXMuaWQgKyBcIjogXCIgKyB0aGlzLmluaXRpYWxpemVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLmF1dGhlbnRpY2F0ZWRLZXkpIHtcclxuICAgICAgdGhpcy5hdXRoZW50aWNhdGVkS2V5ID0gY29uZmlnLmF1dGhlbnRpY2F0ZWRLZXk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLm5vdEF1dGhlbnRpY2F0ZWRLZXkpIHtcclxuICAgICAgdGhpcy5ub3RBdXRoZW50aWNhdGVkS2V5ID0gY29uZmlnLm5vdEF1dGhlbnRpY2F0ZWRLZXk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLnJvbGVOYW1lKSB7XHJcbiAgICAgIHRoaXMucm9sZU5hbWUgPSBjb25maWcucm9sZU5hbWU7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLnRpdGxlKSB7XHJcbiAgICAgIHRoaXMudGl0bGUgPSBjb25maWcudGl0bGU7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLnJvb3RDbGFzcykge1xyXG4gICAgICB0aGlzLnJvb3RDbGFzcyA9IGNvbmZpZy5yb290Q2xhc3M7XHJcbiAgICAgIHRoaXMuc2V0Um9vdENsYXNzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLmNoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRDaGlsZHJlbiA9IGNvbmZpZy5jaGlsZHJlbjtcclxuICAgICAgdGhpcy5zZXRDaGlsZHJlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50LnVwZGF0ZUNvbmZpZzogXCIgKyAodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKSArIFwiLCBcIiArIHRoaXMuaWQgKyBcIiwgXCIgKyB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0SWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMuaWQsIHRoaXMpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiaWRcIiwgdGhpcy5pZCk7XHJcbiAgfVxyXG5cclxuICBzZXRSb290Q2xhc3MoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yb290Q2xhc3MpIHtcclxuICAgICAgbGV0IGNsYXNzZXM6IHN0cmluZ1tdID0gdGhpcy5yb290Q2xhc3Muc3BsaXQoXCIgXCIpO1xyXG4gICAgICBmb3IgKGxldCByb290Q2xhc3Mgb2YgY2xhc3Nlcykge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHJvb3RDbGFzcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldENoaWxkcmVuKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5zb3J0T3JkZXIgPSBpO1xyXG4gICAgICB0aGlzLmFkZCh0aGlzLmNvbmZpZy5jaGlsZHJlbltpXSwgaSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgaWYgKCEoPFZpZXdSZWY+dGhpcy5jaGFuZ2VEZXRlY3RvclJlZikuZGVzdHJveWVkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|