@huntsman-cancer-institute/navigation 15.7.5 → 15.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/components/nav.component.mjs +3 -3
- package/esm2020/components/search-list/search-list-controller.component.mjs +3 -3
- package/fesm2015/huntsman-cancer-institute-navigation.mjs +4 -4
- package/fesm2015/huntsman-cancer-institute-navigation.mjs.map +1 -1
- package/fesm2020/huntsman-cancer-institute-navigation.mjs +4 -4
- package/fesm2020/huntsman-cancer-institute-navigation.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -572,12 +572,12 @@ export class NavComponent {
|
|
|
572
572
|
}
|
|
573
573
|
}
|
|
574
574
|
NavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NavComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: i1.NavigationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
575
|
-
NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", 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
|
+
NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", 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: `
|
|
576
576
|
`, isInline: true });
|
|
577
577
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", 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: "15.2.10", ngImpo
|
|
|
606
606
|
}], isCCR: [{
|
|
607
607
|
type: Input
|
|
608
608
|
}] } });
|
|
609
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25hdmlnYXRpb24vc3JjL2NvbXBvbmVudHMvbmF2LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBU1QsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7OztBQUVqRTs7Ozs7OztHQU9HO0FBU0gsTUFBTSxPQUFPLFlBQVk7SUF1RHZCLFlBQVksVUFBc0IsRUFBRSxRQUFtQixFQUFFLFFBQWtDLEVBQUUsaUJBQW9DLEVBQUUsaUJBQW9DO1FBckQ5SixXQUFNLEdBQVE7WUFDckIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBRU8sV0FBTSxHQUFZLEtBQUssQ0FBQztRQUt4QixxQkFBZ0IsR0FBVyxPQUFPLENBQUM7UUFDbkMsd0JBQW1CLEdBQVcsV0FBVyxDQUFDO1FBQ2hDLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQ3BDLFVBQUssR0FBWSxLQUFLLENBQUM7UUFDaEM7Ozs7V0FJRztRQUNILGFBQVEsR0FBbUIsRUFBRSxDQUFDO1FBVTlCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTdCOzs7V0FHRztRQUNILGlCQUFZLEdBQWdCLElBQUksR0FBRyxFQUFVLENBQUM7UUFFOUM7Ozs7OztXQU1HO1FBQ0ssZUFBVSxHQUF5QixJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQU90RSxrQkFBYSxHQUFpQixJQUFJLFlB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ZCxLQUFLO2dCQUdVLEVBQUU7c0JBQWpCLEtBQUs7dUJBQUMsT0FBTztnQkFDTCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDYSxhQUFhO3NCQUEvQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ1IsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIGlzRGV2TW9kZSxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2UsXG4gIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFZpZXdSZWYsXG4gIE9uSW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIENvbXBvbmVudFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7Um9sZUVudGl0eX0gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL3VzZXJcIjtcbmltcG9ydCB7Q29tcG9uZW50SW5qZWN0b3J9IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS91dGlsc1wiO1xuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSBcIi4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZVwiO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgdGhhdCBhbGwgbmF2aWdhdGlvbiBjb21wb25lbnRzIGV4dGVuZCBmcm9tLiAgVGhpcyBpbmNsdWRlcyBvdGhlciBzdGFuZGFsb25lIG1vZHVsZXMgc3VjaFxuICogYXMgYSBoZWFkZXIgb3Igc2lkZWJhci4gIEl0IGNvbnRhaW5zIGNvbW1vbiBwcm9wZXJ0aWVzLCBjb25maWd1cmF0aW9uIHRvb2xzLCBhbmQgZnVuY3Rpb25zIHRvIGFkZC9pbnNlcnQgb3RoZXJcbiAqIE5hdkNvbXBvbmVudHMuXG4gKiBUaGUgY29uZmlnIHByb3BlcnR5IGlzIGFueSBvYmplY3QgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0aGF0IHNwZWNpZmllcyBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBDb21tb25cbiAqIHByb3BlcnRpZXMgaW5jbHVkZSBpZCwgdGl0bGUsIHJvb3RDbGFzcyBhbmQgcm9sZU5hbWUuICBFeHRlbmRpbmcgY2xhc3NlcyBtYXkgaGF2ZSB0aGVpciBvd24gcHJvcGVydGllcyBzdWNoIGFzIGV4dHJhXG4gKiBjc3MgY2xhc3Nlcy5cbiAqL1xuQENvbXBvbmVudChcbiAge1xuICAgIHRlbXBsYXRlOlxuICAgICAgYFxuICAgICAgYCxcbiAgICBzZWxlY3RvcjogXCJoY2ktbmF2XCJcbiAgfVxuKVxuZXhwb3J0IGNsYXNzIE5hdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGNvbmZpZzogYW55ID0ge1xuICAgIHJlbmRlcmVkOiB0cnVlXG4gIH07XG4gIEBJbnB1dChcIm5hdklkXCIpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0eXBlOiBUeXBlPGFueT4gfCBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJvb3RDbGFzczogc3RyaW5nO1xuICBASW5wdXQoKSByb2xlTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBhdXRoZW50aWNhdGVkS2V5OiBzdHJpbmcgPSBcIkFVVEhDXCI7XG4gIEBJbnB1dCgpIG5vdEF1dGhlbnRpY2F0ZWRLZXk6IHN0cmluZyA9IFwiTk9UX0FVVEhDXCI7XG4gIEBJbnB1dChcImNoaWxkcmVuXCIpIGlucHV0Q2hpbGRyZW46IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGlzQ0NSOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBhbGwgY29tcG9uZW50IGluc3RhbmNlcyBvZiBjaGlsZHJlbi4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgd2UgdHJ5IHRvIHJlbmRlciBldmVyeXRoaW5nIGluIHRoZVxuICAgKiBjaGlsZHJlbiBhcnJheS4gIEhvd2V2ZXIsIGlmIHJvbGVzIGFyZSBub3QgbWV0LCBzb21lIGNoaWxkcmVuIG1heSBub3QgYmUgcmVuZGVyZWQgc28gbm8gY29tcG9uZW50IGluc3RhbmNlIHdpbGxcbiAgICogZXhpc3QgZm9yIHRoZW0uXG4gICAqL1xuICBjaGlsZHJlbjogTmF2Q29tcG9uZW50W10gPSBbXTtcblxuICB0eXBlTmFtZTogc3RyaW5nO1xuXG4gIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIHJlbmRlcmVyOiBSZW5kZXJlcjI7XG4gIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI7XG4gIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZTtcbiAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmO1xuXG4gIGFmdGVyVmlld0luaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBzZXQgb2YgY29udGFpbmVyIG5hbWVzLiAgU29tZSBjb21wb25lbnRzIG1heSBub3QgZGVmaW5lIGEgY29udGFpbmVyIHdoaWxlIG90aGVycyBqdXN0IGhhdmVcbiAgICogb25lIChhIFwiZGVmYXVsdFwiIGNvbnRhaW5lcikuXG4gICAqL1xuICBjb250YWluZXJTZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIElEcyB0byB0aGUgY29ycmVzcG9uZGluZyB2aWV3UmVmLiAgV2hlbiB3ZSBkeW5hbWljYWxseSBpbmplY3QgYSBuZXcgY29tcG9uZW50LCB3ZSBmaXJzdCBwdWxsIHRoZSBjcmVhdGVkXG4gICAqIENvbXBvbmVudFJlZiBhbmQgZnJvbSB0aGVyZSBpdHMgVmlld1JlZi4gIFdlIG5lZWQgdGhlIFZpZXdSZWYgdG8gZGV0ZXJtaW5lIHRoZSBjb21wb25lbnQncyBwb3NpdGlvbiBpbiB0aGVcbiAgICogVmlld0NvbnRhaW5lclJlZi4gIFdpdGggYSBzZXQgb2YgVmlld1JlZnMsIHdlIGNhbiBkZXRhY2ggdGhlbSBmcm9tIHRoZSBjb250YWluZXIgYW5kIHJlLWFkZCB0aGVtIGluIGEgZGlmZmVyZW50IG9yZGVyXG4gICAqIGJhc2VkIG9uIHRoZSBjb21wb25lbnQncyBzb3J0T3JkZXIgKHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBwb3NpdGlvbiBpbiB0aGUgY2hpbGRyZW4gYXJyYXkuICBUaGlzIG1hcCBwcm92aWRlcyB0aGVcbiAgICogY29tcG9uZW50IHRvIHZpZXcgcmVsYXRpb25zaGlwLlxuICAgKi9cbiAgcHJpdmF0ZSB2aWV3UmVmTWFwOiBNYXA8c3RyaW5nLCBWaWV3UmVmPiA9IG5ldyBNYXA8c3RyaW5nLCBWaWV3UmVmPigpO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGNvbXBvbmVudC4gIFdoZW4gYSBjaGlsZCBpcyBhZGRlZCwgYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBpcyBhdXRvbWF0aWNhbGx5IHNldC5cbiAgICovXG4gIHByaXZhdGUgcGFyZW50OiBOYXZDb21wb25lbnQ7XG5cbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSwgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy5yZXNvbHZlciA9IHJlc29sdmVyO1xuICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuYXZpZ2F0aW9uU2VydmljZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmID0gY2hhbmdlRGV0ZWN0b3JSZWY7XG5cbiAgICB0aGlzLmNvbnRhaW5lclNldC5hZGQoXCJkZWZhdWx0XCIpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNSb290KSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0VXNlclJvbGVzKCkuc3Vic2NyaWJlKCh1c2VyUm9sZXM6IFJvbGVFbnRpdHlbXSkgPT4ge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiVXNlciBSb2xlcyBjaGFuZ2VkLiAgUmVmcmVzaCBjaGlsZHJlbi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWZyZXNoQ2hpbGRyZW4oKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50Lm5nQWZ0ZXJWaWV3SW5pdFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmFmdGVyVmlld0luaXQgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tJbml0aWFsaXplZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGNvbmZpZyBpcyBib3VuZCBieSBpbnB1dCwgcmVzZXQgdGhlIGNvbmZpZyB3aGVuIGl0IGNoYW5nZXMuICBBbiBpbXBvcnRhbnQgbm90ZSwgaWYgYW55dGhpbmcgaW4gdGhlIGNvbmZpZyB3YXNcbiAgICogdXBkYXRlZCBieSB1cGRhdGVDb25maWcgb25seSwgdGhlbiB0aG9zZSBvcHRpb25zIHdpbGwgYmUgbG9zdC5cbiAgICpcbiAgICogQHBhcmFtIHt7W3A6IHN0cmluZ106IFNpbXBsZUNoYW5nZX19IGNoYW5nZXNcbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSk6IHZvaWQge1xuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhcIm5nT25DaGFuZ2VzOlwiKTtcbiAgICAgIGNvbnNvbGUuZGVidWcoY2hhbmdlcyk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgY2hhbmdlIG9mIE9iamVjdC5rZXlzKGNoYW5nZXMpKSB7XG4gICAgICBpZiAoY2hhbmdlICE9PSBcImNvbmZpZ1wiKSB7XG4gICAgICAgIHRoaXNbY2hhbmdlXSA9IGNoYW5nZXNbY2hhbmdlXS5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgaWYgKGNoYW5nZSA9PT0gXCJpbnB1dENoaWxkcmVuXCIpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZ1tcImNoaWxkcmVuXCJdID0gY2hhbmdlc1tjaGFuZ2VdLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZ1tjaGFuZ2VdID0gY2hhbmdlc1tjaGFuZ2VdLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzW1wiY29uZmlnXCJdKSB7XG4gICAgICB0aGlzLnNldENvbmZpZyh0aGlzLmNvbmZpZyk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbXCJpZFwiXSkge1xuICAgICAgdGhpcy5zZXRJZCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInJvb3RDbGFzc1wiXSkge1xuICAgICAgdGhpcy5zZXRSb290Q2xhc3MoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbXCJpbnB1dENoaWxkcmVuXCJdKSB7XG4gICAgICB0aGlzLnNldENoaWxkcmVuKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0YWNoKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBjaGVja0luaXRpYWxpemVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5jb25maWcpO1xuICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLnBvc3RJbml0KCk7XG4gICAgfVxuICB9XG5cbiAgcG9zdEluaXQoKTogdm9pZCB7XG4gIH1cblxuICBnZXROYXZpZ2F0aW9uU2VydmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGNoaWxkcmVuLlxuICAgKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50LmNsZWFyXCIpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5yZW1vdmUodGhpcy5jaGlsZHJlbltpXSwgaSk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICBsZXQgaXNSZW5kZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmNvbmZpZy5yZW5kZXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpc1JlbmRlcmVkID0gdGhpcy5jb25maWcucmVuZGVyZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBjaGlsZHJlbiBhbmQgc2VlcyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiByZW5kZXJpbmcgc3RhdHVzLiAgSWYgYSBwZXJtaXNzaW9uIGdvZXMgYXdheSwgYSBjb21wb25lbnQgdGhhdFxuICAgKiBpcyBjdXJyZW50bHkgcmVuZGVyZWQgbWlnaHQgbmVlZCB0byBiZSByZW1vdmVkLiAgUmVjdXJzaXZlbHkgbW92ZSB0aHJvdWdoIHRoZSB0cmVlIG9mIGNoaWxkcmVuLlxuICAgKi9cbiAgcmVmcmVzaENoaWxkcmVuKCkge1xuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5jaGlsZHJlbikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwicmVmcmVzaENoaWxkcmVuOiBcIiArIGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlbmRlciA9IHRoaXMuY2FuUmVuZGVyKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldKTtcblxuICAgICAgICBsZXQgaXNSZW5kZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW5baV0ucmVuZGVyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlzUmVuZGVyZWQgPSB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5yZW5kZXJlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW5kZXIgJiYgIWlzUmVuZGVyZWQpIHtcbiAgICAgICAgICB0aGlzLmFkZCh0aGlzLmNvbmZpZy5jaGlsZHJlbltpXSwgaSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXJlbmRlciAmJiBpc1JlbmRlcmVkKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmUodGhpcy5jb25maWcuY2hpbGRyZW5baV0sIGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVjdXJzaXZlbHkgY2hlY2sgY2hpbGRyZW5cbiAgICBmb3IgKGxldCBjb21wb25lbnQgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgY29tcG9uZW50LnJlZnJlc2hDaGlsZHJlbigpO1xuICAgIH1cblxuICAgIHRoaXMuc29ydENvbnRhaW5lcnMoKTtcblxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzaW5nIHRoZSBzb3J0T3JkZXIgcHJvcGVydHkgb2YgZWFjaCBjb21wb25lbnQsIGRldGFjaCBlYWNoIFZpZXdSZWYgZnJvbSB0aGUgY29udGFpbmVyLCBhbmQgcmUtYXR0YWNoIGJhc2VkXG4gICAqIG9uIHRoZSBzb3J0T3JkZXIuXG4gICAqL1xuICBzb3J0Q29udGFpbmVycygpIHtcbiAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNvcnQgdGhlIGNoaWxkcmVuLiAgSXQgZG9lc24ndCBtYXR0ZXIgdGhhdCB0aGlzIGxpc3QgbWF5IGNvbnRhaW4gY2hpbGRyZW4gaW4gbXVsdGlwbGUgY29udGFpbmVycy5cbiAgICBsZXQgc29ydGVkQ2hpbGRyZW4gPSB0aGlzLmNvbmZpZy5jaGlsZHJlbi5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgaWYgKGEuc29ydE9yZGVyIDwgYi5zb3J0T3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChhLnNvcnRPcmRlciA+IGIuc29ydE9yZGVyKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBjb250YWluZXJOYW1lIG9mIHRoaXMuY29udGFpbmVyU2V0KSB7XG4gICAgICBsZXQgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmID0gdGhpcy5nZXRDb250YWluZXIoY29udGFpbmVyTmFtZSk7XG5cbiAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXNvcnRlZENoaWxkcmVuW2ldLmlkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc29ydGVkQ2hpbGRyZW5baV0uY29udGFpbmVyICE9PSBjb250YWluZXJOYW1lKSB7XG4gICAgICAgICAgLy8gQ2hpbGRyZW4gaXMgYSBsaXN0IHBvc3NpYmx5IHNwYW5uaW5nIG11bHRpcGxlIGNvbnRhaW5lcnMuICBTa2lwIGlmIG5vdCBvbiB0aGUgY3VycmVudCBjb250YWluZXIuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52aWV3UmVmTWFwLmdldChzb3J0ZWRDaGlsZHJlbltpXS5pZCkpIHtcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJzb3J0Q2hpbGRyZW46IGk6IFwiICsgaSArIFwiLCBpZDogXCIgKyBzb3J0ZWRDaGlsZHJlbltpXS5pZCArIFwiLCBkZXN0cm95ZWQ6IFwiICsgdGhpcy52aWV3UmVmTWFwLmdldChzb3J0ZWRDaGlsZHJlbltpXS5pZCkuZGVzdHJveWVkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlld1JlZk1hcC5nZXQoc29ydGVkQ2hpbGRyZW5baV0uaWQpLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgY29udGFpbmVyLmluc2VydCh0aGlzLnZpZXdSZWZNYXAuZ2V0KHNvcnRlZENoaWxkcmVuW2ldLmlkKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmlld1JlZk1hcC5kZWxldGUoc29ydGVkQ2hpbGRyZW5baV0uaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBjb21wb25lbnQgYnkgaWQgZnJvbSBpdHMgcGFyZW50IGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudENvbmZpZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICovXG4gIHJlbW92ZShjb21wb25lbnRDb25maWc6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5jb25maWcuY2hpbGRyZW4gfHwgIXRoaXMuY29uZmlnLmNoaWxkcmVuW2luZGV4XSkge1xuICAgICAgY29uc29sZS53YXJuKFwiTmF2Q29tcG9uZW50OiBDaGlsZCBcIiArIGluZGV4ICsgXCIgZG9lcyBub3QgZXhpc3Qgb24gXCIgKyB0aGlzLmNvbmZpZy5pZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50LnJlbW92ZTogXCIgKyBjb21wb25lbnRDb25maWcuaWQpO1xuICAgIH1cbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBvbmVudENvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgcmVuZGVyZWRDaGlsZDogTmF2Q29tcG9uZW50ID0gdGhpcy5nZXRDaGlsZChjb21wb25lbnRDb25maWcuY2hpbGRyZW5baV0uaWQpO1xuICAgICAgICBpZiAocmVuZGVyZWRDaGlsZCkge1xuICAgICAgICAgIHJlbmRlcmVkQ2hpbGQucmVtb3ZlKGNvbXBvbmVudENvbmZpZy5jaGlsZHJlbltpXSwgaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy5jb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IHRoaXMuZ2V0Q29udGFpbmVyKGNvbXBvbmVudENvbmZpZy5jb250YWluZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIgPSB0aGlzLmdldENvbnRhaW5lcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy52aWV3UmVmTWFwLmdldChjb21wb25lbnRDb25maWcuaWQpKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKGNvbnRhaW5lci5pbmRleE9mKHRoaXMudmlld1JlZk1hcC5nZXQoY29tcG9uZW50Q29uZmlnLmlkKSkpO1xuICAgICAgdGhpcy52aWV3UmVmTWFwLmRlbGV0ZShjb21wb25lbnRDb25maWcuaWQpO1xuICAgIH1cbiAgICBjb21wb25lbnRDb25maWcucmVuZGVyZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpbmRleF0ucmVuZGVyZWQgPSBmYWxzZTtcblxuICAgIHRoaXMucmVtb3ZlQ2hpbGQoY29tcG9uZW50Q29uZmlnLmlkKTtcbiAgfVxuXG4gIHJlbW92ZUJ5SWQoaWQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhcIk5hdkNvbXBvbmVudC5yZW1vdmVCeUlkOiBcIiArIGlkKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09IGlkKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlKHRoaXMuY2hpbGRyZW5baV0sIGkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZW1vdmVCeUlkOiBJRCBcIiArIGlkICsgXCIgbm90IGZvdW5kLlwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBjb21wb25lbnQgY2FuIGJlIHJlbmRlcmVkIGJhc2VkIG9uIHVzZXIgcm9sZXMuICBBIHJvbGUgY2FuIGJlIGFueSBzdHJpbmcsIGJ1dCB0aGVyZSBhcmUgaGFyZGNvZGVkXG4gICAqIHJvbGVzIE5PVF9BVVRIQyBhbmQgQVVUSEMuICBJZiBubyByb2xlTmFtZSBpcyBzcGVjaWZpZWQsIHRoZSBjb21wb25lbnQgaXMgYWx3YXlzIHJlbmRlcmVkLiAgSWYgdGhlIHJvbGVOYW1lIGlzXG4gICAqIE5PVF9BVVRIQywgdGhlIGNvbXBvbmVudCB3aWxsIG9ubHkgYmUgcmVuZGVyZWQgaWYgdGhlcmUgaXMgbm8gYXV0aGVudGljYXRlZCB1c2VyLiAgSWYgdGhlIHJvbGVOYW1lIGlzIEFVVEhDLCB0aGVcbiAgICogY29tcG9uZW50IHdpbGwgYmUgcmVuZGVyZWQgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZC4gIElmIHRoZSByb2xlTmFtZSBpcyBhbnkgc3RyaW5nIGFuZCBtYXRjaGVzIGEgdXNlcidzIHJvbGUsXG4gICAqIHRoZW4gdGhlIGNvbXBvbmVudCB3aWxsIGJlIHJlbmRlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0gY29tcG9uZW50Q29uZmlnXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY2FuUmVuZGVyKGNvbXBvbmVudENvbmZpZzogYW55KTogYm9vbGVhbiB7XG4gICAgbGV0IHJlbmRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLnJvbGVOYW1lKSB7XG4gICAgICByZW5kZXIgPSBmYWxzZTtcbiAgICAgIGxldCB1c2VyUm9sZXM6IFJvbGVFbnRpdHlbXSA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0VXNlclJvbGVzKCkuZ2V0VmFsdWUoKTtcblxuICAgICAgaWYgKGNvbXBvbmVudENvbmZpZy5yb2xlTmFtZSA9PT0gdGhpcy5ub3RBdXRoZW50aWNhdGVkS2V5ICYmICF1c2VyUm9sZXMpIHtcbiAgICAgICAgcmVuZGVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50Q29uZmlnLnJvbGVOYW1lID09PSB0aGlzLmF1dGhlbnRpY2F0ZWRLZXkgJiYgdXNlclJvbGVzKSB7XG4gICAgICAgIHJlbmRlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHVzZXJSb2xlcyAmJiB1c2VyUm9sZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZW5kZXIgPSB1c2VyUm9sZXMuc29tZSgocm9sZTogUm9sZUVudGl0eSkgPT4ge1xuICAgICAgICAgIHJldHVybiByb2xlLlJvbGVOYW1lID09PSBjb21wb25lbnRDb25maWcucm9sZU5hbWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZW5kZXI7XG4gIH1cblxuICBnZXRDaGlsZChpZDogc3RyaW5nKTogTmF2Q29tcG9uZW50IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlbW92ZUNoaWxkKGlkOiBzdHJpbmcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIG5vIGluZGV4IGlzIHNwZWNpZmllZCwgYWRkIHRoZSBjb21wb25lbnQgdG8gdGhlIGNoaWxkcmVuLiAgSW4gYWxsIGNhc2VzLCBzZWUgaWYgdGhlIGNvbXBvbmVudCBjYW4gYmUgcmVuZGVyZWQuXG4gICAqIElmIHNvLCBjYWxsIGFkZENvbXBvbmVudCB0byBoYW5kbGUgdGhlIGluamVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudENvbmZpZ1xuICAgKiBAcGFyYW0gaW5kZXhcbiAgICovXG4gIGFkZChjb21wb25lbnRDb25maWc6IGFueSwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQuYWRkOiBcIiArIGluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbXBvbmVudCBtdXN0IHNwZWNpZnkgYSAndHlwZScgKGUuZy4gVWxOYXZDb21wb25lbnQpLlwiKTtcbiAgICB9XG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5jaGlsZHJlbikge1xuICAgICAgICBpbmRleCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4gPSBbXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4ucHVzaChjb21wb25lbnRDb25maWcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNhblJlbmRlcihjb21wb25lbnRDb25maWcpKSB7XG4gICAgICB0aGlzLmFkZENvbXBvbmVudChjb21wb25lbnRDb25maWcsIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5qZWN0cyB0aGUgY29tcG9uZW50IGRlc2NyaWJlZCBieSB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QgaW4gdG8gdGhlIHZpZXcgYW5kIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSWYgbm8gY29udGFpbmVyIGlzIHNwZWNpZmllZCwgaW5qZWN0IGluIHRvIHRoZSBcImRlZmF1bHRcIiBjb250YWluZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcbiAgICogQHBhcmFtIGluZGV4XG4gICAqL1xuICBhZGRDb21wb25lbnQoY29tcG9uZW50Q29uZmlnOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbXBvbmVudCBtdXN0IHNwZWNpZnkgYSAndHlwZScgKGUuZy4gVWxOYXZDb21wb25lbnQpLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLmNvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb21wb25lbnRDb25maWcuY29udGFpbmVyID0gXCJkZWZhdWx0XCI7XG4gICAgfVxuICAgIGxldCBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYgPSB0aGlzLmdldENvbnRhaW5lcihjb21wb25lbnRDb25maWcuY29udGFpbmVyKTtcblxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhcIk5hdkNvbXBvbmVudC5hZGRDb21wb25lbnQ6IHRvOiBcIiArIGNvbXBvbmVudENvbmZpZy5jb250YWluZXIpO1xuICAgIH1cblxuICAgIGxldCBjb21wb25lbnRSZWYgPSBDb21wb25lbnRJbmplY3Rvci5nZXRDb21wb25lbnRSZWYodGhpcy5yZXNvbHZlciwgY29udGFpbmVyLCBjb21wb25lbnRDb25maWcudHlwZSk7XG4gICAgbGV0IGNvbXBvbmVudEluc3RhbmNlID0gPE5hdkNvbXBvbmVudD5jb21wb25lbnRSZWYuaW5zdGFuY2U7XG5cbiAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpbmRleF0ucmVuZGVyZWQgPSB0cnVlO1xuICAgIGNvbXBvbmVudENvbmZpZy5yZW5kZXJlZCA9IHRydWU7XG5cbiAgICBsZXQgaWQ6IHN0cmluZyA9IGNvbXBvbmVudENvbmZpZy5pZDtcbiAgICBpZiAoIWlkKSB7XG4gICAgICBpZCA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0SWROYXZDb21wb25lbnQoKTtcbiAgICAgIGNvbXBvbmVudENvbmZpZy5pZCA9IGlkO1xuICAgIH1cblxuICAgIGNvbXBvbmVudEluc3RhbmNlLnNldFBhcmVudCh0aGlzKTtcbiAgICAoPE5hdkNvbXBvbmVudD5jb21wb25lbnRJbnN0YW5jZSkuc2V0Q29uZmlnKGNvbXBvbmVudENvbmZpZyk7XG4gICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNvbXBvbmVudEluc3RhbmNlKTtcbiAgICB0aGlzLnZpZXdSZWZNYXAuc2V0KGNvbXBvbmVudENvbmZpZy5pZCwgY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAvL3RoaXMubmF2aWdhdGlvblNlcnZpY2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50Q29uZmlnLmlkLCBjb21wb25lbnRJbnN0YW5jZSk7XG4gIH1cblxuICBpbnNlcnRBZnRlcihpZDogc3RyaW5nLCBjb21wb25lbnRDb25maWc6IGFueSkge1xuICAgIGlmIChjb21wb25lbnRDb25maWcudHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgY29tcG9uZW50IG11c3Qgc3BlY2lmeSBhICd0eXBlJyAoZS5nLiBVbE5hdkNvbXBvbmVudCkuXCIpO1xuICAgIH1cblxuICAgIGxldCBpbmRleDogbnVtYmVyID0gdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5pZCA9PT0gaWQpIHtcbiAgICAgICAgaW5kZXggPSBpICsgMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluZGV4IDw9IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aCAtIDEpIHtcbiAgICAgIGNvbXBvbmVudENvbmZpZy5zb3J0T3JkZXIgPSBpbmRleDtcbiAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5zb3J0T3JkZXIgPSB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5zb3J0T3JkZXIgKyAxO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjb21wb25lbnRDb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgIGNvbXBvbmVudENvbmZpZy5zb3J0T3JkZXIgPSBpbmRleDtcbiAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuLnB1c2goY29tcG9uZW50Q29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jYW5SZW5kZXIoY29tcG9uZW50Q29uZmlnKSkge1xuICAgICAgdGhpcy5hZGRDb21wb25lbnQoY29tcG9uZW50Q29uZmlnLCBpbmRleCk7XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0Q29udGFpbmVycygpO1xuICB9XG5cbiAgaW5zZXJ0QmVmb3JlKGlkOiBzdHJpbmcsIGNvbXBvbmVudENvbmZpZzogYW55KSB7XG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy50eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBjb21wb25lbnQgbXVzdCBzcGVjaWZ5IGEgJ3R5cGUnIChlLmcuIFVsTmF2Q29tcG9uZW50KS5cIik7XG4gICAgfVxuXG4gICAgbGV0IGluZGV4OiBudW1iZXIgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xuICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmRleCA8PSB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGggLSAxKSB7XG4gICAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5zb3J0T3JkZXIgPSB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5zb3J0T3JkZXIgKyAxO1xuICAgICAgfVxuICAgICAgY29tcG9uZW50Q29uZmlnLnNvcnRPcmRlciA9IGluZGV4O1xuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjb21wb25lbnRDb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgIGNvbXBvbmVudENvbmZpZy5zb3J0T3JkZXIgPSBpbmRleDtcbiAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuLnB1c2goY29tcG9uZW50Q29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jYW5SZW5kZXIoY29tcG9uZW50Q29uZmlnKSkge1xuICAgICAgdGhpcy5hZGRDb21wb25lbnQoY29tcG9uZW50Q29uZmlnLCBpbmRleCk7XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0Q29udGFpbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gYmUgZXh0ZW5kZWQgYnkgb3RoZXIgY2xhc3Nlcy4gIFRoaXMgY2xhc3MgYW5kIHNvbWV0aGluZyBsaWtlIGEgTGlOYXZDb21wb25lbnQgZG9uJ3QgaGF2ZSBhbnkgY29udGFpbmVyc1xuICAgKiBzbyBjb21wb25lbnRzIGNhbid0IGJlIGFkZGVkIHRvIHRoZW0uICBJbiBvdGhlciBjYXNlcywgdGhlIFVsTmF2Q29tcG9uZW50IGhhcyBhIHNpbmdsZSBjb250YWluZXIgc28gaXQgY2FuIGFsd2F5c1xuICAgKiByZXR1cm4gdGhhdCBjb250YWluZXIgcmVnYXJkbGVzcyBvZiB0aGUgY29udGFpbmVyTmFtZSByZXF1ZXN0ZWQgKHNob3VsZCBiZSBcImRlZmF1bHRcIikuICBBbnkgY29tcG9uZW50IHNob3VsZCBoYXZlXG4gICAqIGEgY29udGFpbmVyIHRoYXQgaXMgdGhlIFwiZGVmYXVsdFwiLiAgRm9yIGV4YW1wbGUsIGEgaGVhZGVyIGNvbXBvbmVudCBtaWdodCBoYXZlIGEgY29udGFpbmVyIGZvciB0aGUgbGVmdCBjb21wb25lbnRzXG4gICAqIGFuZCBhIGNvbnRhaW5lciBmb3IgdGhlIHJpZ2h0IGNvbXBvbmVudHMuICBUaGUgbGVmdCBjb250YWluZXIgY2FuIGp1c3QgYmUgY2FsbGVkIFwiZGVmYXVsdFwiIGFuZCB0aGUgcmlnaHQgY29udGFpbmVyXG4gICAqIGNvdWxkIGJlIGNhbGxlZCBcInJpZ2h0Q29udGFpbmVyXCIuICBJZiBhIGNoaWxkIGNvbXBvbmVudCBkb2Vzbid0IHNwZWNpZnkgYSBjb250YWluZXIsIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGRlZmF1bHQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICovXG4gIGdldENvbnRhaW5lcihjb250YWluZXI/OiBzdHJpbmcpOiBWaWV3Q29udGFpbmVyUmVmIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50KGlkOiBzdHJpbmcpOiBOYXZDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldENvbXBvbmVudChpZCk7XG4gIH1cblxuICBnZXRDb21wb25lbnRCeVR5cGUodHlwZTogc3RyaW5nKTogTmF2Q29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDb21wb25lbnRCeVR5cGUodHlwZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0UGFyZW50KHBhcmVudDogTmF2Q29tcG9uZW50KSB7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFyZW50KCk6IE5hdkNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgcHVibGljIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRpdGxlID0gdGl0bGU7XG4gIH1cblxuICBzZXRDb25maWcoY29uZmlnKSB7XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKFwic2V0Q29uZmlnOiBcIiArIHRoaXMuaW5pdGlhbGl6ZWQpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGlmIChjb25maWcucmVuZGVyZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25maWcucmVuZGVyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAgIHJlbmRlcmVkOiB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNsYXNzZXMuICBUaGUgY2hpbGRyZW4gc2hvdWxkIGNhbGwgc3VwZXIudXBkYXRlQ29uZmlnKGNvbmZpZykuICBUaGlzIHNldHMgdGhlXG4gICAqIGNvbW1vbiBwcm9wZXJ0aWVzIG9mIHRoZSBOYXZDb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWdcbiAgICovXG4gIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcbiAgICBpZiAoY29uZmlnLnR5cGUpIHtcbiAgICAgIHRoaXMudHlwZSA9IGNvbmZpZy50eXBlO1xuICAgIH1cbiAgICBpZiAodGhpcy50eXBlKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMudHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aGlzLnR5cGVOYW1lID0gdGhpcy50eXBlO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGNvbXBvbmVudFR5cGUgZGVjb3JhdG9yIHdhcyBjcmVhdGVkIGZvciB1Z2xpZmljYXRpb24uIFVzZSBpdCFcbiAgICAgIGVsc2UgaWYgKHRoaXMudHlwZVtcImNvbXBvbmVudFR5cGVcIl0pIHtcbiAgICAgICAgdGhpcy50eXBlTmFtZSA9IHRoaXMudHlwZVtcImNvbXBvbmVudFR5cGVcIl07XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy50eXBlTmFtZSA9ICg8VHlwZTxhbnk+PnRoaXMudHlwZSkubmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmlkKSB7XG4gICAgICB0aGlzLmlkID0gY29uZmlnLmlkO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaWQpIHtcbiAgICAgIHRoaXMuaWQgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkTmF2Q29tcG9uZW50KCk7XG4gICAgfVxuICAgIHRoaXMuc2V0SWQoKTtcblxuICAgIGlmICh0aGlzLmlzUm9vdCkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zZXRSb290Q29tcG9uZW50KHRoaXMuaWQsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhcIk5hdkNvbXBvbmVudC51cGRhdGVDb25maWc6IFwiICsgdGhpcy5pZCArIFwiOiBcIiArIHRoaXMuaW5pdGlhbGl6ZWQpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuYXV0aGVudGljYXRlZEtleSkge1xuICAgICAgdGhpcy5hdXRoZW50aWNhdGVkS2V5ID0gY29uZmlnLmF1dGhlbnRpY2F0ZWRLZXk7XG4gICAgfVxuICAgIGlmIChjb25maWcubm90QXV0aGVudGljYXRlZEtleSkge1xuICAgICAgdGhpcy5ub3RBdXRoZW50aWNhdGVkS2V5ID0gY29uZmlnLm5vdEF1dGhlbnRpY2F0ZWRLZXk7XG4gICAgfVxuICAgIGlmIChjb25maWcucm9sZU5hbWUpIHtcbiAgICAgIHRoaXMucm9sZU5hbWUgPSBjb25maWcucm9sZU5hbWU7XG4gICAgfVxuICAgIGlmIChjb25maWcudGl0bGUpIHtcbiAgICAgIHRoaXMudGl0bGUgPSBjb25maWcudGl0bGU7XG4gICAgfVxuICAgIGlmIChjb25maWcucm9vdENsYXNzKSB7XG4gICAgICB0aGlzLnJvb3RDbGFzcyA9IGNvbmZpZy5yb290Q2xhc3M7XG4gICAgICB0aGlzLnNldFJvb3RDbGFzcygpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmNoaWxkcmVuKSB7XG4gICAgICB0aGlzLmlucHV0Q2hpbGRyZW4gPSBjb25maWcuY2hpbGRyZW47XG4gICAgICB0aGlzLnNldENoaWxkcmVuKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQudXBkYXRlQ29uZmlnOiBcIiArICh0aGlzLmNvbnN0cnVjdG9yLm5hbWUpICsgXCIsIFwiICsgdGhpcy5pZCArIFwiLCBcIiArIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0SWQoKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0SWQoKTogdm9pZCB7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5yZWdpc3RlckNvbXBvbmVudCh0aGlzLmlkLCB0aGlzKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgXCJpZFwiLCB0aGlzLmlkKTtcbiAgfVxuXG4gIHNldFJvb3RDbGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb290Q2xhc3MpIHtcbiAgICAgIGxldCBjbGFzc2VzOiBzdHJpbmdbXSA9IHRoaXMucm9vdENsYXNzLnNwbGl0KFwiIFwiKTtcbiAgICAgIGZvciAobGV0IHJvb3RDbGFzcyBvZiBjbGFzc2VzKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHJvb3RDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0Q2hpbGRyZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW5baV0uc29ydE9yZGVyID0gaTtcbiAgICAgIHRoaXMuYWRkKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLCBpKTtcbiAgICB9XG4gIH1cblxuICBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICghKDxWaWV3UmVmPnRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYpLmRlc3Ryb3llZCkge1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
609
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25hdmlnYXRpb24vc3JjL2NvbXBvbmVudHMvbmF2LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBU1QsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7OztBQUVqRTs7Ozs7OztHQU9HO0FBU0gsTUFBTSxPQUFPLFlBQVk7SUF1RHZCLFlBQVksVUFBc0IsRUFBRSxRQUFtQixFQUFFLFFBQWtDLEVBQUUsaUJBQW9DLEVBQUUsaUJBQW9DO1FBckQ5SixXQUFNLEdBQVE7WUFDckIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBRU8sV0FBTSxHQUFZLEtBQUssQ0FBQztRQUt4QixxQkFBZ0IsR0FBVyxPQUFPLENBQUM7UUFDbkMsd0JBQW1CLEdBQVcsV0FBVyxDQUFDO1FBQ2hDLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQ3BDLFVBQUssR0FBWSxLQUFLLENBQUM7UUFDaEM7Ozs7V0FJRztRQUNILGFBQVEsR0FBbUIsRUFBRSxDQUFDO1FBVTlCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTdCOzs7V0FHRztRQUNILGlCQUFZLEdBQWdCLElBQUksR0FBRyxFQUFVLENBQUM7UUFFOUM7Ozs7OztXQU1HO1FBQ0ssZUFBVSxHQUF5QixJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQU90RSxrQkFBYSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFFM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBdUIsRUFBRSxFQUFFO2dCQUNqRyxJQUFJLFNBQVMsRUFBRSxFQUFFO29CQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztpQkFDekQ7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDTDtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxTQUFTLEVBQUUsRUFBRTtZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztTQUMvQztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxPQUE2QztRQUN2RCxJQUFJLFNBQVMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3hCO1FBRUQsS0FBSyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZDLElBQUksTUFBTSxLQUFLLFFBQVEsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0JBRTVDLElBQUksTUFBTSxLQUFLLGVBQWUsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDO2lCQUN4RDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUM7aUJBQ3BEO2FBQ0Y7U0FDRjtRQUVELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzdCO1FBRUQsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2Q7UUFDRCxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7UUFDRCxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUM1QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNqQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVELFFBQVE7SUFDUixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixPQUFPO1NBQ1I7UUFFRCxJQUFJLFNBQVMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNsQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxVQUFVLEdBQVksS0FBSyxDQUFDO1FBQ2hDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ3RDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwRCxJQUFJLFNBQVMsRUFBRSxFQUFFO29CQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ3hDO2dCQUVELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFckQsSUFBSSxVQUFVLEdBQVksS0FBSyxDQUFDO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7b0JBQ2xELFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7aUJBQy9DO2dCQUVELElBQUksTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN0QztxQkFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLFVBQVUsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDekM7YUFDRjtTQUNGO1FBRUQsNkJBQTZCO1FBQzdCLEtBQUssSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNuQyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDN0I7UUFFRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzNELE9BQU87U0FDUjtRQUVELG9HQUFvRztRQUNwRyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUU7WUFDaEUsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUU7Z0JBQzdCLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDWDtpQkFBTSxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRTtnQkFDcEMsT0FBTyxDQUFDLENBQUM7YUFDVjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsQ0FBQzthQUNWO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDM0MsSUFBSSxTQUFTLEdBQXFCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFbkUsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDZCxPQUFPO2FBQ1I7WUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ3pCLFNBQVM7aUJBQ1Y7cUJBQU0sSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLGFBQWEsRUFBRTtvQkFDeEQsbUdBQW1HO29CQUNuRyxTQUFTO2lCQUNWO2dCQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUM3QyxJQUFJLFNBQVMsRUFBRSxFQUFFO3dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7cUJBQ2xKO29CQUVELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFO3dCQUN4RCxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUM3RDt5QkFBTTt3QkFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQzlDO2lCQUNGO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxlQUFvQixFQUFFLEtBQWE7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekQsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLEdBQUcscUJBQXFCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RixPQUFPO1NBQ1I7UUFFRCxJQUFJLFNBQVMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDN0Q7UUFDRCxJQUFJLGVBQWUsQ0FBQyxRQUFRLEVBQUU7WUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN4RCxJQUFJLGFBQWEsR0FBaUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLGFBQWEsRUFBRTtvQkFDakIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN0RDthQUNGO1NBQ0Y7UUFFRCxJQUFJLFNBQTJCLENBQUM7UUFFaEMsSUFBSSxlQUFlLENBQUMsU0FBUyxFQUFFO1lBQzdCLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMxRDthQUFNO1lBQ0wsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNqQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzNDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM1QztRQUNELGVBQWUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFPO1FBQ2hCLElBQUksU0FBUyxFQUFFLEVBQUU7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRWpDLE9BQU87YUFDUjtTQUNGO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLEdBQUcsYUFBYSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILFNBQVMsQ0FBQyxlQUFvQjtRQUM1QixJQUFJLE1BQU0sR0FBWSxJQUFJLENBQUM7UUFFM0IsSUFBSSxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQzVCLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDZixJQUFJLFNBQVMsR0FBaUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRS9FLElBQUksZUFBZSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3ZFLE1BQU0sR0FBRyxJQUFJLENBQUM7YUFDZjtpQkFBTSxJQUFJLGVBQWUsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLGdCQUFnQixJQUFJLFNBQVMsRUFBRTtnQkFDMUUsTUFBTSxHQUFHLElBQUksQ0FBQzthQUNmO2lCQUFNLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QyxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQWdCLEVBQUUsRUFBRTtvQkFDM0MsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLGVBQWUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BELENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxRQUFRLENBQUMsRUFBVTtRQUNqQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6QjtTQUNGO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVcsQ0FBQyxFQUFVO1FBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzVCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsR0FBRyxDQUFDLGVBQW9CLEVBQUUsS0FBYztRQUN0QyxJQUFJLFNBQVMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsQ0FBQztTQUM3QztRQUVELElBQUksZUFBZSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQ3hCLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDckM7aUJBQU07Z0JBQ0wsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDVixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7YUFDM0I7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDNUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0M7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxDQUFDLGVBQW9CLEVBQUUsS0FBYTtRQUM5QyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztTQUMvRTtRQUVELElBQUksZUFBZSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDM0MsZUFBZSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7U0FDdkM7UUFDRCxJQUFJLFNBQVMsR0FBcUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFL0UsSUFBSSxTQUFTLEVBQUUsRUFBRTtZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzlFO1FBRUQsSUFBSSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRyxJQUFJLGlCQUFpQixHQUFpQixZQUFZLENBQUMsUUFBUSxDQUFDO1FBRTVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDNUMsZUFBZSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFaEMsSUFBSSxFQUFFLEdBQVcsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1AsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2hELGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQ3pCO1FBRUQsaUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLGlCQUFrQixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9ELGtGQUFrRjtJQUNwRixDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQVUsRUFBRSxlQUFvQjtRQUMxQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztTQUMvRTtRQUVELElBQUksS0FBSyxHQUFXLFNBQVMsQ0FBQztRQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDckMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2QsTUFBTTthQUNQO1NBQ0Y7UUFFRCxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQzthQUMzRTtZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1NBQ3hEO2FBQU07WUFDTCxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3BDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUM1QztRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMzQztRQUVELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWSxDQUFDLEVBQVUsRUFBRSxlQUFvQjtRQUMzQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztTQUMvRTtRQUVELElBQUksS0FBSyxHQUFXLFNBQVMsQ0FBQztRQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDckMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDVixNQUFNO2FBQ1A7U0FDRjtRQUVELElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7YUFDM0U7WUFDRCxlQUFlLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztTQUN4RDthQUFNO1lBQ0wsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxlQUFlLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDNUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0M7UUFFRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxZQUFZLENBQUMsU0FBa0I7UUFDN0IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUFVO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBWTtRQUM3QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sU0FBUyxDQUFDLE1BQW9CO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQU07UUFDZCxJQUFJLFNBQVMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO2dCQUNqQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzthQUN4QjtZQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDaEM7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRztnQkFDWixRQUFRLEVBQUUsSUFBSTthQUNmLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVksQ0FBQyxNQUFNO1FBQ2pCLElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtZQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztTQUN6QjtRQUNELElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQzNCO1lBQ0Qsb0VBQW9FO2lCQUMvRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUM1QztpQkFDSTtnQkFDSCxJQUFJLENBQUMsUUFBUSxHQUFlLElBQUksQ0FBQyxJQUFLLENBQUMsSUFBSSxDQUFDO2FBQzdDO1NBQ0Y7UUFFRCxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDYixJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDckI7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEQ7UUFFRCxJQUFJLFNBQVMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbEY7UUFFRCxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtZQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1NBQ2pEO1FBQ0QsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUU7WUFDOUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztTQUN2RDtRQUNELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7U0FDakM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNsQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7UUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjtRQUVELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQixJQUFJLFNBQVMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ2pJO0lBQ0gsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksT0FBTyxHQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELEtBQUssSUFBSSxTQUFTLElBQUksT0FBTyxFQUFFO2dCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUNsRTtTQUNGO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2Q7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFXLElBQUksQ0FBQyxpQkFBa0IsQ0FBQyxTQUFTLEVBQUU7WUFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQzs7MEdBbHBCVSxZQUFZOzhGQUFaLFlBQVkscVdBTG5CO09BQ0M7NEZBSU0sWUFBWTtrQkFSeEIsU0FBUzttQkFDUjtvQkFDRSxRQUFRLEVBQ047T0FDQztvQkFDSCxRQUFRLEVBQUUsU0FBUztpQkFDcEI7Z09BSVEsTUFBTTtzQkFBZCxLQUFLO2dCQUdVLEVBQUU7c0JBQWpCLEtBQUs7dUJBQUMsT0FBTztnQkFDTCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDYSxhQUFhO3NCQUEvQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ1IsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZSxcclxuICBUeXBlLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgVmlld1JlZixcclxuICBPbkluaXQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIENvbXBvbmVudFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtSb2xlRW50aXR5fSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXNlclwiO1xyXG5pbXBvcnQge0NvbXBvbmVudEluamVjdG9yfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXRpbHNcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSBcIi4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgdGhhdCBhbGwgbmF2aWdhdGlvbiBjb21wb25lbnRzIGV4dGVuZCBmcm9tLiAgVGhpcyBpbmNsdWRlcyBvdGhlciBzdGFuZGFsb25lIG1vZHVsZXMgc3VjaFxyXG4gKiBhcyBhIGhlYWRlciBvciBzaWRlYmFyLiAgSXQgY29udGFpbnMgY29tbW9uIHByb3BlcnRpZXMsIGNvbmZpZ3VyYXRpb24gdG9vbHMsIGFuZCBmdW5jdGlvbnMgdG8gYWRkL2luc2VydCBvdGhlclxyXG4gKiBOYXZDb21wb25lbnRzLlxyXG4gKiBUaGUgY29uZmlnIHByb3BlcnR5IGlzIGFueSBvYmplY3QgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0aGF0IHNwZWNpZmllcyBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBDb21tb25cclxuICogcHJvcGVydGllcyBpbmNsdWRlIGlkLCB0aXRsZSwgcm9vdENsYXNzIGFuZCByb2xlTmFtZS4gIEV4dGVuZGluZyBjbGFzc2VzIG1heSBoYXZlIHRoZWlyIG93biBwcm9wZXJ0aWVzIHN1Y2ggYXMgZXh0cmFcclxuICogY3NzIGNsYXNzZXMuXHJcbiAqL1xyXG5AQ29tcG9uZW50KFxyXG4gIHtcclxuICAgIHRlbXBsYXRlOlxyXG4gICAgICBgXHJcbiAgICAgIGAsXHJcbiAgICBzZWxlY3RvcjogXCJoY2ktbmF2XCJcclxuICB9XHJcbilcclxuZXhwb3J0IGNsYXNzIE5hdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBjb25maWc6IGFueSA9IHtcclxuICAgIHJlbmRlcmVkOiB0cnVlXHJcbiAgfTtcclxuICBASW5wdXQoXCJuYXZJZFwiKSBpZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHR5cGU6IFR5cGU8YW55PiB8IHN0cmluZztcclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJvb3RDbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJvbGVOYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXV0aGVudGljYXRlZEtleTogc3RyaW5nID0gXCJBVVRIQ1wiO1xyXG4gIEBJbnB1dCgpIG5vdEF1dGhlbnRpY2F0ZWRLZXk6IHN0cmluZyA9IFwiTk9UX0FVVEhDXCI7XHJcbiAgQElucHV0KFwiY2hpbGRyZW5cIikgaW5wdXRDaGlsZHJlbjogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBpc0NDUjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIGFsbCBjb21wb25lbnQgaW5zdGFuY2VzIG9mIGNoaWxkcmVuLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB3ZSB0cnkgdG8gcmVuZGVyIGV2ZXJ5dGhpbmcgaW4gdGhlXHJcbiAgICogY2hpbGRyZW4gYXJyYXkuICBIb3dldmVyLCBpZiByb2xlcyBhcmUgbm90IG1ldCwgc29tZSBjaGlsZHJlbiBtYXkgbm90IGJlIHJlbmRlcmVkIHNvIG5vIGNvbXBvbmVudCBpbnN0YW5jZSB3aWxsXHJcbiAgICogZXhpc3QgZm9yIHRoZW0uXHJcbiAgICovXHJcbiAgY2hpbGRyZW46IE5hdkNvbXBvbmVudFtdID0gW107XHJcblxyXG4gIHR5cGVOYW1lOiBzdHJpbmc7XHJcblxyXG4gIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XHJcbiAgcmVuZGVyZXI6IFJlbmRlcmVyMjtcclxuICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyO1xyXG4gIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZTtcclxuICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWY7XHJcblxyXG4gIGFmdGVyVmlld0luaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBBIHNldCBvZiBjb250YWluZXIgbmFtZXMuICBTb21lIGNvbXBvbmVudHMgbWF5IG5vdCBkZWZpbmUgYSBjb250YWluZXIgd2hpbGUgb3RoZXJzIGp1c3QgaGF2ZVxyXG4gICAqIG9uZSAoYSBcImRlZmF1bHRcIiBjb250YWluZXIpLlxyXG4gICAqL1xyXG4gIGNvbnRhaW5lclNldDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBtYXAgb2YgSURzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZpZXdSZWYuICBXaGVuIHdlIGR5bmFtaWNhbGx5IGluamVjdCBhIG5ldyBjb21wb25lbnQsIHdlIGZpcnN0IHB1bGwgdGhlIGNyZWF0ZWRcclxuICAgKiBDb21wb25lbnRSZWYgYW5kIGZyb20gdGhlcmUgaXRzIFZpZXdSZWYuICBXZSBuZWVkIHRoZSBWaWV3UmVmIHRvIGRldGVybWluZSB0aGUgY29tcG9uZW50J3MgcG9zaXRpb24gaW4gdGhlXHJcbiAgICogVmlld0NvbnRhaW5lclJlZi4gIFdpdGggYSBzZXQgb2YgVmlld1JlZnMsIHdlIGNhbiBkZXRhY2ggdGhlbSBmcm9tIHRoZSBjb250YWluZXIgYW5kIHJlLWFkZCB0aGVtIGluIGEgZGlmZmVyZW50IG9yZGVyXHJcbiAgICogYmFzZWQgb24gdGhlIGNvbXBvbmVudCdzIHNvcnRPcmRlciAod2hpY2ggaXMgYmFzZWQgb24gdGhlIHBvc2l0aW9uIGluIHRoZSBjaGlsZHJlbiBhcnJheS4gIFRoaXMgbWFwIHByb3ZpZGVzIHRoZVxyXG4gICAqIGNvbXBvbmVudCB0byB2aWV3IHJlbGF0aW9uc2hpcC5cclxuICAgKi9cclxuICBwcml2YXRlIHZpZXdSZWZNYXA6IE1hcDxzdHJpbmcsIFZpZXdSZWY+ID0gbmV3IE1hcDxzdHJpbmcsIFZpZXdSZWY+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50LiAgV2hlbiBhIGNoaWxkIGlzIGFkZGVkLCBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGlzIGF1dG9tYXRpY2FsbHkgc2V0LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyZW50OiBOYXZDb21wb25lbnQ7XHJcblxyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XHJcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XHJcbiAgICB0aGlzLnJlc29sdmVyID0gcmVzb2x2ZXI7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmF2aWdhdGlvblNlcnZpY2U7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmID0gY2hhbmdlRGV0ZWN0b3JSZWY7XHJcblxyXG4gICAgdGhpcy5jb250YWluZXJTZXQuYWRkKFwiZGVmYXVsdFwiKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNSb290KSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRVc2VyUm9sZXMoKS5zdWJzY3JpYmUoKHVzZXJSb2xlczogUm9sZUVudGl0eVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiVXNlciBSb2xlcyBjaGFuZ2VkLiAgUmVmcmVzaCBjaGlsZHJlbi5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVmcmVzaENoaWxkcmVuKCk7XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50Lm5nQWZ0ZXJWaWV3SW5pdFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFmdGVyVmlld0luaXQgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGVja0luaXRpYWxpemVkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiBjb25maWcgaXMgYm91bmQgYnkgaW5wdXQsIHJlc2V0IHRoZSBjb25maWcgd2hlbiBpdCBjaGFuZ2VzLiAgQW4gaW1wb3J0YW50IG5vdGUsIGlmIGFueXRoaW5nIGluIHRoZSBjb25maWcgd2FzXHJcbiAgICogdXBkYXRlZCBieSB1cGRhdGVDb25maWcgb25seSwgdGhlbiB0aG9zZSBvcHRpb25zIHdpbGwgYmUgbG9zdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7e1twOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2V9fSBjaGFuZ2VzXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBbcHJvcE5hbWU6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIm5nT25DaGFuZ2VzOlwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhjaGFuZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBjaGFuZ2Ugb2YgT2JqZWN0LmtleXMoY2hhbmdlcykpIHtcclxuICAgICAgaWYgKGNoYW5nZSAhPT0gXCJjb25maWdcIikge1xyXG4gICAgICAgIHRoaXNbY2hhbmdlXSA9IGNoYW5nZXNbY2hhbmdlXS5jdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2UgPT09IFwiaW5wdXRDaGlsZHJlblwiKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ1tcImNoaWxkcmVuXCJdID0gY2hhbmdlc1tjaGFuZ2VdLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb25maWdbY2hhbmdlXSA9IGNoYW5nZXNbY2hhbmdlXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbXCJjb25maWdcIl0pIHtcclxuICAgICAgdGhpcy5zZXRDb25maWcodGhpcy5jb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzW1wiaWRcIl0pIHtcclxuICAgICAgdGhpcy5zZXRJZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbXCJyb290Q2xhc3NcIl0pIHtcclxuICAgICAgdGhpcy5zZXRSb290Q2xhc3MoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzW1wiaW5wdXRDaGlsZHJlblwiXSkge1xyXG4gICAgICB0aGlzLnNldENoaWxkcmVuKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0YWNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0luaXRpYWxpemVkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYWZ0ZXJWaWV3SW5pdCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5jb25maWcpO1xyXG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5wb3N0SW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9zdEluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBnZXROYXZpZ2F0aW9uU2VydmljZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGFsbCBjaGlsZHJlbi5cclxuICAgKi9cclxuICBjbGVhcigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQuY2xlYXJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlKHRoaXMuY2hpbGRyZW5baV0sIGkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICBsZXQgaXNSZW5kZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLnJlbmRlcmVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaXNSZW5kZXJlZCA9IHRoaXMuY29uZmlnLnJlbmRlcmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGNoaWxkcmVuIGFuZCBzZWVzIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIHJlbmRlcmluZyBzdGF0dXMuICBJZiBhIHBlcm1pc3Npb24gZ29lcyBhd2F5LCBhIGNvbXBvbmVudCB0aGF0XHJcbiAgICogaXMgY3VycmVudGx5IHJlbmRlcmVkIG1pZ2h0IG5lZWQgdG8gYmUgcmVtb3ZlZC4gIFJlY3Vyc2l2ZWx5IG1vdmUgdGhyb3VnaCB0aGUgdHJlZSBvZiBjaGlsZHJlbi5cclxuICAgKi9cclxuICByZWZyZXNoQ2hpbGRyZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5jaGlsZHJlbikge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwicmVmcmVzaENoaWxkcmVuOiBcIiArIGkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJlbmRlciA9IHRoaXMuY2FuUmVuZGVyKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldKTtcclxuXHJcbiAgICAgICAgbGV0IGlzUmVuZGVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW5baV0ucmVuZGVyZWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgaXNSZW5kZXJlZCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLnJlbmRlcmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlbmRlciAmJiAhaXNSZW5kZXJlZCkge1xyXG4gICAgICAgICAgdGhpcy5hZGQodGhpcy5jb25maWcuY2hpbGRyZW5baV0sIGkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXJlbmRlciAmJiBpc1JlbmRlcmVkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZSh0aGlzLmNvbmZpZy5jaGlsZHJlbltpXSwgaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVjdXJzaXZlbHkgY2hlY2sgY2hpbGRyZW5cclxuICAgIGZvciAobGV0IGNvbXBvbmVudCBvZiB0aGlzLmNoaWxkcmVuKSB7XHJcbiAgICAgIGNvbXBvbmVudC5yZWZyZXNoQ2hpbGRyZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvcnRDb250YWluZXJzKCk7XHJcblxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2luZyB0aGUgc29ydE9yZGVyIHByb3BlcnR5IG9mIGVhY2ggY29tcG9uZW50LCBkZXRhY2ggZWFjaCBWaWV3UmVmIGZyb20gdGhlIGNvbnRhaW5lciwgYW5kIHJlLWF0dGFjaCBiYXNlZFxyXG4gICAqIG9uIHRoZSBzb3J0T3JkZXIuXHJcbiAgICovXHJcbiAgc29ydENvbnRhaW5lcnMoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU29ydCB0aGUgY2hpbGRyZW4uICBJdCBkb2Vzbid0IG1hdHRlciB0aGF0IHRoaXMgbGlzdCBtYXkgY29udGFpbiBjaGlsZHJlbiBpbiBtdWx0aXBsZSBjb250YWluZXJzLlxyXG4gICAgbGV0IHNvcnRlZENoaWxkcmVuID0gdGhpcy5jb25maWcuY2hpbGRyZW4uc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGEuc29ydE9yZGVyIDwgYi5zb3J0T3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH0gZWxzZSBpZiAoYS5zb3J0T3JkZXIgPiBiLnNvcnRPcmRlcikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKGxldCBjb250YWluZXJOYW1lIG9mIHRoaXMuY29udGFpbmVyU2V0KSB7XHJcbiAgICAgIGxldCBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYgPSB0aGlzLmdldENvbnRhaW5lcihjb250YWluZXJOYW1lKTtcclxuXHJcbiAgICAgIGlmICghY29udGFpbmVyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKCFzb3J0ZWRDaGlsZHJlbltpXS5pZCkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzb3J0ZWRDaGlsZHJlbltpXS5jb250YWluZXIgIT09IGNvbnRhaW5lck5hbWUpIHtcclxuICAgICAgICAgIC8vIENoaWxkcmVuIGlzIGEgbGlzdCBwb3NzaWJseSBzcGFubmluZyBtdWx0aXBsZSBjb250YWluZXJzLiAgU2tpcCBpZiBub3Qgb24gdGhlIGN1cnJlbnQgY29udGFpbmVyLlxyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWV3UmVmTWFwLmdldChzb3J0ZWRDaGlsZHJlbltpXS5pZCkpIHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwic29ydENoaWxkcmVuOiBpOiBcIiArIGkgKyBcIiwgaWQ6IFwiICsgc29ydGVkQ2hpbGRyZW5baV0uaWQgKyBcIiwgZGVzdHJveWVkOiBcIiArIHRoaXMudmlld1JlZk1hcC5nZXQoc29ydGVkQ2hpbGRyZW5baV0uaWQpLmRlc3Ryb3llZCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLnZpZXdSZWZNYXAuZ2V0KHNvcnRlZENoaWxkcmVuW2ldLmlkKS5kZXN0cm95ZWQpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLmluc2VydCh0aGlzLnZpZXdSZWZNYXAuZ2V0KHNvcnRlZENoaWxkcmVuW2ldLmlkKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdSZWZNYXAuZGVsZXRlKHNvcnRlZENoaWxkcmVuW2ldLmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhIGNvbXBvbmVudCBieSBpZCBmcm9tIGl0cyBwYXJlbnQgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudENvbmZpZ1xyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqL1xyXG4gIHJlbW92ZShjb21wb25lbnRDb25maWc6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5jaGlsZHJlbiB8fCAhdGhpcy5jb25maWcuY2hpbGRyZW5baW5kZXhdKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIk5hdkNvbXBvbmVudDogQ2hpbGQgXCIgKyBpbmRleCArIFwiIGRvZXMgbm90IGV4aXN0IG9uIFwiICsgdGhpcy5jb25maWcuaWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQucmVtb3ZlOiBcIiArIGNvbXBvbmVudENvbmZpZy5pZCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHJlbmRlcmVkQ2hpbGQ6IE5hdkNvbXBvbmVudCA9IHRoaXMuZ2V0Q2hpbGQoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuW2ldLmlkKTtcclxuICAgICAgICBpZiAocmVuZGVyZWRDaGlsZCkge1xyXG4gICAgICAgICAgcmVuZGVyZWRDaGlsZC5yZW1vdmUoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuW2ldLCBpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIGlmIChjb21wb25lbnRDb25maWcuY29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnRhaW5lciA9IHRoaXMuZ2V0Q29udGFpbmVyKGNvbXBvbmVudENvbmZpZy5jb250YWluZXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGFpbmVyID0gdGhpcy5nZXRDb250YWluZXIoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZpZXdSZWZNYXAuZ2V0KGNvbXBvbmVudENvbmZpZy5pZCkpIHtcclxuICAgICAgY29udGFpbmVyLnJlbW92ZShjb250YWluZXIuaW5kZXhPZih0aGlzLnZpZXdSZWZNYXAuZ2V0KGNvbXBvbmVudENvbmZpZy5pZCkpKTtcclxuICAgICAgdGhpcy52aWV3UmVmTWFwLmRlbGV0ZShjb21wb25lbnRDb25maWcuaWQpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50Q29uZmlnLnJlbmRlcmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpbmRleF0ucmVuZGVyZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNoaWxkKGNvbXBvbmVudENvbmZpZy5pZCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVCeUlkKGlkOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50LnJlbW92ZUJ5SWQ6IFwiICsgaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5pZCA9PSBpZCkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlKHRoaXMuY2hpbGRyZW5baV0sIGkpO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZW1vdmVCeUlkOiBJRCBcIiArIGlkICsgXCIgbm90IGZvdW5kLlwiKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGNvbXBvbmVudCBjYW4gYmUgcmVuZGVyZWQgYmFzZWQgb24gdXNlciByb2xlcy4gIEEgcm9sZSBjYW4gYmUgYW55IHN0cmluZywgYnV0IHRoZXJlIGFyZSBoYXJkY29kZWRcclxuICAgKiByb2xlcyBOT1RfQVVUSEMgYW5kIEFVVEhDLiAgSWYgbm8gcm9sZU5hbWUgaXMgc3BlY2lmaWVkLCB0aGUgY29tcG9uZW50IGlzIGFsd2F5cyByZW5kZXJlZC4gIElmIHRoZSByb2xlTmFtZSBpc1xyXG4gICAqIE5PVF9BVVRIQywgdGhlIGNvbXBvbmVudCB3aWxsIG9ubHkgYmUgcmVuZGVyZWQgaWYgdGhlcmUgaXMgbm8gYXV0aGVudGljYXRlZCB1c2VyLiAgSWYgdGhlIHJvbGVOYW1lIGlzIEFVVEhDLCB0aGVcclxuICAgKiBjb21wb25lbnQgd2lsbCBiZSByZW5kZXJlZCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLiAgSWYgdGhlIHJvbGVOYW1lIGlzIGFueSBzdHJpbmcgYW5kIG1hdGNoZXMgYSB1c2VyJ3Mgcm9sZSxcclxuICAgKiB0aGVuIHRoZSBjb21wb25lbnQgd2lsbCBiZSByZW5kZXJlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBjYW5SZW5kZXIoY29tcG9uZW50Q29uZmlnOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGxldCByZW5kZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIGlmIChjb21wb25lbnRDb25maWcucm9sZU5hbWUpIHtcclxuICAgICAgcmVuZGVyID0gZmFsc2U7XHJcbiAgICAgIGxldCB1c2VyUm9sZXM6IFJvbGVFbnRpdHlbXSA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0VXNlclJvbGVzKCkuZ2V0VmFsdWUoKTtcclxuXHJcbiAgICAgIGlmIChjb21wb25lbnRDb25maWcucm9sZU5hbWUgPT09IHRoaXMubm90QXV0aGVudGljYXRlZEtleSAmJiAhdXNlclJvbGVzKSB7XHJcbiAgICAgICAgcmVuZGVyID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChjb21wb25lbnRDb25maWcucm9sZU5hbWUgPT09IHRoaXMuYXV0aGVudGljYXRlZEtleSAmJiB1c2VyUm9sZXMpIHtcclxuICAgICAgICByZW5kZXIgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHVzZXJSb2xlcyAmJiB1c2VyUm9sZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlbmRlciA9IHVzZXJSb2xlcy5zb21lKChyb2xlOiBSb2xlRW50aXR5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcm9sZS5Sb2xlTmFtZSA9PT0gY29tcG9uZW50Q29uZmlnLnJvbGVOYW1lO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlbmRlcjtcclxuICB9XHJcblxyXG4gIGdldENoaWxkKGlkOiBzdHJpbmcpOiBOYXZDb21wb25lbnQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ2hpbGQoaWQ6IHN0cmluZykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiBubyBpbmRleCBpcyBzcGVjaWZpZWQsIGFkZCB0aGUgY29tcG9uZW50IHRvIHRoZSBjaGlsZHJlbi4gIEluIGFsbCBjYXNlcywgc2VlIGlmIHRoZSBjb21wb25lbnQgY2FuIGJlIHJlbmRlcmVkLlxyXG4gICAqIElmIHNvLCBjYWxsIGFkZENvbXBvbmVudCB0byBoYW5kbGUgdGhlIGluamVjdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcclxuICAgKiBAcGFyYW0gaW5kZXhcclxuICAgKi9cclxuICBhZGQoY29tcG9uZW50Q29uZmlnOiBhbnksIGluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIk5hdkNvbXBvbmVudC5hZGQ6IFwiICsgaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb21wb25lbnRDb25maWcudHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBjb21wb25lbnQgbXVzdCBzcGVjaWZ5IGEgJ3R5cGUnIChlLmcuIFVsTmF2Q29tcG9uZW50KS5cIik7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW4pIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbmRleCA9IDA7XHJcbiAgICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4gPSBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4ucHVzaChjb21wb25lbnRDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNhblJlbmRlcihjb21wb25lbnRDb25maWcpKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29tcG9uZW50KGNvbXBvbmVudENvbmZpZywgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5qZWN0cyB0aGUgY29tcG9uZW50IGRlc2NyaWJlZCBieSB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QgaW4gdG8gdGhlIHZpZXcgYW5kIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudC5cclxuICAgKiBJZiBubyBjb250YWluZXIgaXMgc3BlY2lmaWVkLCBpbmplY3QgaW4gdG8gdGhlIFwiZGVmYXVsdFwiIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcclxuICAgKiBAcGFyYW0gaW5kZXhcclxuICAgKi9cclxuICBhZGRDb21wb25lbnQoY29tcG9uZW50Q29uZmlnOiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChjb21wb25lbnRDb25maWcudHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBjb21wb25lbnQgbXVzdCBzcGVjaWZ5IGEgJ3R5cGUnIChlLmcuIFVsTmF2Q29tcG9uZW50KS5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy5jb250YWluZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb21wb25lbnRDb25maWcuY29udGFpbmVyID0gXCJkZWZhdWx0XCI7XHJcbiAgICB9XHJcbiAgICBsZXQgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmID0gdGhpcy5nZXRDb250YWluZXIoY29tcG9uZW50Q29uZmlnLmNvbnRhaW5lcik7XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQuYWRkQ29tcG9uZW50OiB0bzogXCIgKyBjb21wb25lbnRDb25maWcuY29udGFpbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29tcG9uZW50UmVmID0gQ29tcG9uZW50SW5qZWN0b3IuZ2V0Q29tcG9uZW50UmVmKHRoaXMucmVzb2x2ZXIsIGNvbnRhaW5lciwgY29tcG9uZW50Q29uZmlnLnR5cGUpO1xyXG4gICAgbGV0IGNvbXBvbmVudEluc3RhbmNlID0gPE5hdkNvbXBvbmVudD5jb21wb25lbnRSZWYuaW5zdGFuY2U7XHJcblxyXG4gICAgdGhpcy5jb25maWcuY2hpbGRyZW5baW5kZXhdLnJlbmRlcmVkID0gdHJ1ZTtcclxuICAgIGNvbXBvbmVudENvbmZpZy5yZW5kZXJlZCA9IHRydWU7XHJcblxyXG4gICAgbGV0IGlkOiBzdHJpbmcgPSBjb21wb25lbnRDb25maWcuaWQ7XHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIGlkID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZE5hdkNvbXBvbmVudCgpO1xyXG4gICAgICBjb21wb25lbnRDb25maWcuaWQgPSBpZDtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRJbnN0YW5jZS5zZXRQYXJlbnQodGhpcyk7XHJcbiAgICAoPE5hdkNvbXBvbmVudD5jb21wb25lbnRJbnN0YW5jZSkuc2V0Q29uZmlnKGNvbXBvbmVudENvbmZpZyk7XHJcbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY29tcG9uZW50SW5zdGFuY2UpO1xyXG4gICAgdGhpcy52aWV3UmVmTWFwLnNldChjb21wb25lbnRDb25maWcuaWQsIGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XHJcbiAgICAvL3RoaXMubmF2aWdhdGlvblNlcnZpY2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50Q29uZmlnLmlkLCBjb21wb25lbnRJbnN0YW5jZSk7XHJcbiAgfVxyXG5cclxuICBpbnNlcnRBZnRlcihpZDogc3RyaW5nLCBjb21wb25lbnRDb25maWc6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy50eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbXBvbmVudCBtdXN0IHNwZWNpZnkgYSAndHlwZScgKGUuZy4gVWxOYXZDb21wb25lbnQpLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaW5kZXg6IG51bWJlciA9IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIGluZGV4ID0gaSArIDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5kZXggPD0gdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoIC0gMSkge1xyXG4gICAgICBjb21wb25lbnRDb25maWcuc29ydE9yZGVyID0gaW5kZXg7XHJcbiAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLnNvcnRPcmRlciA9IHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLnNvcnRPcmRlciArIDE7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjb21wb25lbnRDb25maWcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5kZXggPSB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgIGNvbXBvbmVudENvbmZpZy5zb3J0T3JkZXIgPSBpbmRleDtcclxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4ucHVzaChjb21wb25lbnRDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNhblJlbmRlcihjb21wb25lbnRDb25maWcpKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29tcG9uZW50KGNvbXBvbmVudENvbmZpZywgaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc29ydENvbnRhaW5lcnMoKTtcclxuICB9XHJcblxyXG4gIGluc2VydEJlZm9yZShpZDogc3RyaW5nLCBjb21wb25lbnRDb25maWc6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy50eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbXBvbmVudCBtdXN0IHNwZWNpZnkgYSAndHlwZScgKGUuZy4gVWxOYXZDb21wb25lbnQpLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaW5kZXg6IG51bWJlciA9IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbmRleCA8PSB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW5baV0uc29ydE9yZGVyID0gdGhpcy5jb25maWcuY2hpbGRyZW5baV0uc29ydE9yZGVyICsgMTtcclxuICAgICAgfVxyXG4gICAgICBjb21wb25lbnRDb25maWcuc29ydE9yZGVyID0gaW5kZXg7XHJcbiAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY29tcG9uZW50Q29uZmlnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZGV4ID0gdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICBjb21wb25lbnRDb25maWcuc29ydE9yZGVyID0gaW5kZXg7XHJcbiAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuLnB1c2goY29tcG9uZW50Q29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jYW5SZW5kZXIoY29tcG9uZW50Q29uZmlnKSkge1xyXG4gICAgICB0aGlzLmFkZENvbXBvbmVudChjb21wb25lbnRDb25maWcsIGluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvcnRDb250YWluZXJzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNsYXNzZXMuICBUaGlzIGNsYXNzIGFuZCBzb21ldGhpbmcgbGlrZSBhIExpTmF2Q29tcG9uZW50IGRvbid0IGhhdmUgYW55IGNvbnRhaW5lcnNcclxuICAgKiBzbyBjb21wb25lbnRzIGNhbid0IGJlIGFkZGVkIHRvIHRoZW0uICBJbiBvdGhlciBjYXNlcywgdGhlIFVsTmF2Q29tcG9uZW50IGhhcyBhIHNpbmdsZSBjb250YWluZXIgc28gaXQgY2FuIGFsd2F5c1xyXG4gICAqIHJldHVybiB0aGF0IGNvbnRhaW5lciByZWdhcmRsZXNzIG9mIHRoZSBjb250YWluZXJOYW1lIHJlcXVlc3RlZCAoc2hvdWxkIGJlIFwiZGVmYXVsdFwiKS4gIEFueSBjb21wb25lbnQgc2hvdWxkIGhhdmVcclxuICAgKiBhIGNvbnRhaW5lciB0aGF0IGlzIHRoZSBcImRlZmF1bHRcIi4gIEZvciBleGFtcGxlLCBhIGhlYWRlciBjb21wb25lbnQgbWlnaHQgaGF2ZSBhIGNvbnRhaW5lciBmb3IgdGhlIGxlZnQgY29tcG9uZW50c1xyXG4gICAqIGFuZCBhIGNvbnRhaW5lciBmb3IgdGhlIHJpZ2h0IGNvbXBvbmVudHMuICBUaGUgbGVmdCBjb250YWluZXIgY2FuIGp1c3QgYmUgY2FsbGVkIFwiZGVmYXVsdFwiIGFuZCB0aGUgcmlnaHQgY29udGFpbmVyXHJcbiAgICogY291bGQgYmUgY2FsbGVkIFwicmlnaHRDb250YWluZXJcIi4gIElmIGEgY2hpbGQgY29tcG9uZW50IGRvZXNuJ3Qgc3BlY2lmeSBhIGNvbnRhaW5lciwgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb250YWluZXJcclxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gICAqL1xyXG4gIGdldENvbnRhaW5lcihjb250YWluZXI/OiBzdHJpbmcpOiBWaWV3Q29udGFpbmVyUmVmIHtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRDb21wb25lbnQoaWQ6IHN0cmluZyk6IE5hdkNvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDb21wb25lbnQoaWQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50QnlUeXBlKHR5cGU6IHN0cmluZyk6IE5hdkNvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDb21wb25lbnRCeVR5cGUodHlwZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UGFyZW50KHBhcmVudDogTmF2Q29tcG9uZW50KSB7XHJcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQYXJlbnQoKTogTmF2Q29tcG9uZW50IHtcclxuICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRpdGxlID0gdGl0bGU7XHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcoY29uZmlnKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInNldENvbmZpZzogXCIgKyB0aGlzLmluaXRpYWxpemVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGlmIChjb25maWcucmVuZGVyZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbmZpZy5yZW5kZXJlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWcgPSB7XHJcbiAgICAgICAgcmVuZGVyZWQ6IHRydWVcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdG8gYmUgZXh0ZW5kZWQgYnkgb3RoZXIgY2xhc3Nlcy4gIFRoZSBjaGlsZHJlbiBzaG91bGQgY2FsbCBzdXBlci51cGRhdGVDb25maWcoY29uZmlnKS4gIFRoaXMgc2V0cyB0aGVcclxuICAgKiBjb21tb24gcHJvcGVydGllcyBvZiB0aGUgTmF2Q29tcG9uZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbmZpZ1xyXG4gICAqL1xyXG4gIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcclxuICAgIGlmIChjb25maWcudHlwZSkge1xyXG4gICAgICB0aGlzLnR5cGUgPSBjb25maWcudHlwZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnR5cGUpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICB0aGlzLnR5cGVOYW1lID0gdGhpcy50eXBlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFRoZSBjb21wb25lbnRUeXBlIGRlY29yYXRvciB3YXMgY3JlYXRlZCBmb3IgdWdsaWZpY2F0aW9uLiBVc2UgaXQhXHJcbiAgICAgIGVsc2UgaWYgKHRoaXMudHlwZVtcImNvbXBvbmVudFR5cGVcIl0pIHtcclxuICAgICAgICB0aGlzLnR5cGVOYW1lID0gdGhpcy50eXBlW1wiY29tcG9uZW50VHlwZVwiXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnR5cGVOYW1lID0gKDxUeXBlPGFueT4+dGhpcy50eXBlKS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5pZCkge1xyXG4gICAgICB0aGlzLmlkID0gY29uZmlnLmlkO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5pZCkge1xyXG4gICAgICB0aGlzLmlkID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZE5hdkNvbXBvbmVudCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRJZCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzUm9vdCkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnNldFJvb3RDb21wb25lbnQodGhpcy5pZCwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQudXBkYXRlQ29uZmlnOiBcIiArIHRoaXMuaWQgKyBcIjogXCIgKyB0aGlzLmluaXRpYWxpemVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLmF1dGhlbnRpY2F0ZWRLZXkpIHtcclxuICAgICAgdGhpcy5hdXRoZW50aWNhdGVkS2V5ID0gY29uZmlnLmF1dGhlbnRpY2F0ZWRLZXk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLm5vdEF1dGhlbnRpY2F0ZWRLZXkpIHtcclxuICAgICAgdGhpcy5ub3RBdXRoZW50aWNhdGVkS2V5ID0gY29uZmlnLm5vdEF1dGhlbnRpY2F0ZWRLZXk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLnJvbGVOYW1lKSB7XHJcbiAgICAgIHRoaXMucm9sZU5hbWUgPSBjb25maWcucm9sZU5hbWU7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLnRpdGxlKSB7XHJcbiAgICAgIHRoaXMudGl0bGUgPSBjb25maWcudGl0bGU7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLnJvb3RDbGFzcykge1xyXG4gICAgICB0aGlzLnJvb3RDbGFzcyA9IGNvbmZpZy5yb290Q2xhc3M7XHJcbiAgICAgIHRoaXMuc2V0Um9vdENsYXNzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLmNoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRDaGlsZHJlbiA9IGNvbmZpZy5jaGlsZHJlbjtcclxuICAgICAgdGhpcy5zZXRDaGlsZHJlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50LnVwZGF0ZUNvbmZpZzogXCIgKyAodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKSArIFwiLCBcIiArIHRoaXMuaWQgKyBcIiwgXCIgKyB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0SWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMuaWQsIHRoaXMpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiaWRcIiwgdGhpcy5pZCk7XHJcbiAgfVxyXG5cclxuICBzZXRSb290Q2xhc3MoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yb290Q2xhc3MpIHtcclxuICAgICAgbGV0IGNsYXNzZXM6IHN0cmluZ1tdID0gdGhpcy5yb290Q2xhc3Muc3BsaXQoXCIgXCIpO1xyXG4gICAgICBmb3IgKGxldCByb290Q2xhc3Mgb2YgY2xhc3Nlcykge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHJvb3RDbGFzcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldENoaWxkcmVuKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5zb3J0T3JkZXIgPSBpO1xyXG4gICAgICB0aGlzLmFkZCh0aGlzLmNvbmZpZy5jaGlsZHJlbltpXSwgaSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgaWYgKCEoPFZpZXdSZWY+dGhpcy5jaGFuZ2VEZXRlY3RvclJlZikuZGVzdHJveWVkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|