@recursyve/nice-ui-kit.v2 14.0.0-beta.126 → 14.0.0-beta.128

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.
Files changed (25) hide show
  1. package/esm2020/lib/components/alert/alert.component.mjs +3 -3
  2. package/esm2020/lib/components/navigation/horizontal/components/basic/basic.component.mjs +11 -4
  3. package/esm2020/lib/components/navigation/horizontal/components/branch/branch.component.mjs +9 -3
  4. package/esm2020/lib/components/navigation/horizontal/horizontal.component.mjs +9 -3
  5. package/esm2020/lib/components/navigation/navigation.types.mjs +1 -1
  6. package/esm2020/lib/components/navigation/vertical/components/aside/aside.component.mjs +9 -3
  7. package/esm2020/lib/components/navigation/vertical/components/basic/basic.component.mjs +13 -6
  8. package/esm2020/lib/components/navigation/vertical/components/collapsable/collapsable.component.mjs +9 -3
  9. package/esm2020/lib/components/navigation/vertical/components/group/group.component.mjs +9 -3
  10. package/esm2020/lib/components/navigation/vertical/vertical.component.mjs +9 -3
  11. package/fesm2015/recursyve-nice-ui-kit.v2.mjs +68 -19
  12. package/fesm2015/recursyve-nice-ui-kit.v2.mjs.map +1 -1
  13. package/fesm2020/recursyve-nice-ui-kit.v2.mjs +68 -19
  14. package/fesm2020/recursyve-nice-ui-kit.v2.mjs.map +1 -1
  15. package/lib/components/navigation/horizontal/components/basic/basic.component.d.ts +4 -1
  16. package/lib/components/navigation/horizontal/components/branch/branch.component.d.ts +4 -1
  17. package/lib/components/navigation/horizontal/horizontal.component.d.ts +4 -1
  18. package/lib/components/navigation/navigation.types.d.ts +1 -0
  19. package/lib/components/navigation/vertical/components/aside/aside.component.d.ts +4 -1
  20. package/lib/components/navigation/vertical/components/basic/basic.component.d.ts +4 -1
  21. package/lib/components/navigation/vertical/components/collapsable/collapsable.component.d.ts +4 -1
  22. package/lib/components/navigation/vertical/components/group/group.component.d.ts +4 -1
  23. package/lib/components/navigation/vertical/vertical.component.d.ts +4 -1
  24. package/package.json +1 -1
  25. package/src/lib/components/navigation/vertical/vertical.theme.scss +11 -0
@@ -20,6 +20,8 @@ export class NiceVerticalNavigationGroupItemComponent {
20
20
  this._changeDetectorRef = _changeDetectorRef;
21
21
  this._niceNavigationService = _niceNavigationService;
22
22
  this._unsubscribeAll = new Subject();
23
+ this.showTooltips = false;
24
+ this.tooltipPosition = "after";
23
25
  }
24
26
  // -----------------------------------------------------------------------------------------------------
25
27
  // @ Lifecycle hooks
@@ -55,15 +57,19 @@ export class NiceVerticalNavigationGroupItemComponent {
55
57
  }
56
58
  }
57
59
  NiceVerticalNavigationGroupItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceVerticalNavigationGroupItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NiceNavigationService }], target: i0.ɵɵFactoryTarget.Component });
58
- NiceVerticalNavigationGroupItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", type: NiceVerticalNavigationGroupItemComponent, selector: "nice-vertical-navigation-group-item", inputs: { autoCollapse: "autoCollapse", item: "item", name: "name" }, ngImport: i0, template: "<!-- Item wrapper -->\n<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [class.nice-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n <div class=\"nice-vertical-navigation-item\">\n <!-- Icon -->\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <span class=\"nice-vertical-navigation-item-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></span>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType === 'svg'\"\n ></mat-icon>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-vertical-navigation-item-title-wrapper\" *ngIf=\"item.title || item.subtitle\">\n <div class=\"nice-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n </div>\n <div\n class=\"nice-vertical-navigation-item-subtitle\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-vertical-navigation-item-badge\"\n *ngIf=\"item.badge\"\n >\n <div\n class=\"nice-vertical-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngFor=\"let item of item.children; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.NiceVerticalNavigationBasicItemComponent, selector: "nice-vertical-navigation-basic-item", inputs: ["item", "name"] }, { kind: "component", type: i5.NiceVerticalNavigationCollapsableItemComponent, selector: "nice-vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item", "name"] }, { kind: "component", type: i6.NiceVerticalNavigationDividerItemComponent, selector: "nice-vertical-navigation-divider-item", inputs: ["item", "name"] }, { kind: "component", type: NiceVerticalNavigationGroupItemComponent, selector: "nice-vertical-navigation-group-item", inputs: ["autoCollapse", "item", "name"] }, { kind: "component", type: i7.NiceVerticalNavigationSpacerItemComponent, selector: "nice-vertical-navigation-spacer-item", inputs: ["item", "name"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.NiceShouldHidePipe, name: "niceShouldHide" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
60
+ NiceVerticalNavigationGroupItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", type: NiceVerticalNavigationGroupItemComponent, selector: "nice-vertical-navigation-group-item", inputs: { autoCollapse: "autoCollapse", item: "item", name: "name", showTooltips: "showTooltips", tooltipPosition: "tooltipPosition" }, ngImport: i0, template: "<!-- Item wrapper -->\n<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [class.nice-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n <div class=\"nice-vertical-navigation-item\">\n <!-- Icon -->\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <span class=\"nice-vertical-navigation-item-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></span>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType === 'svg'\"\n ></mat-icon>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-vertical-navigation-item-title-wrapper\" *ngIf=\"item.title || item.subtitle\">\n <div class=\"nice-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n </div>\n <div\n class=\"nice-vertical-navigation-item-subtitle\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-vertical-navigation-item-badge\"\n *ngIf=\"item.badge\"\n >\n <div\n class=\"nice-vertical-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngFor=\"let item of item.children; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.NiceVerticalNavigationBasicItemComponent, selector: "nice-vertical-navigation-basic-item", inputs: ["item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i5.NiceVerticalNavigationCollapsableItemComponent, selector: "nice-vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i6.NiceVerticalNavigationDividerItemComponent, selector: "nice-vertical-navigation-divider-item", inputs: ["item", "name"] }, { kind: "component", type: NiceVerticalNavigationGroupItemComponent, selector: "nice-vertical-navigation-group-item", inputs: ["autoCollapse", "item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i7.NiceVerticalNavigationSpacerItemComponent, selector: "nice-vertical-navigation-spacer-item", inputs: ["item", "name"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.NiceShouldHidePipe, name: "niceShouldHide" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
59
61
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceVerticalNavigationGroupItemComponent, decorators: [{
60
62
  type: Component,
61
- args: [{ selector: "nice-vertical-navigation-group-item", changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Item wrapper -->\n<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [class.nice-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n <div class=\"nice-vertical-navigation-item\">\n <!-- Icon -->\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <span class=\"nice-vertical-navigation-item-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></span>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType === 'svg'\"\n ></mat-icon>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-vertical-navigation-item-title-wrapper\" *ngIf=\"item.title || item.subtitle\">\n <div class=\"nice-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n </div>\n <div\n class=\"nice-vertical-navigation-item-subtitle\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-vertical-navigation-item-badge\"\n *ngIf=\"item.badge\"\n >\n <div\n class=\"nice-vertical-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngFor=\"let item of item.children; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n</ng-container>\n" }]
63
+ args: [{ selector: "nice-vertical-navigation-group-item", changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Item wrapper -->\n<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [class.nice-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n <div class=\"nice-vertical-navigation-item\">\n <!-- Icon -->\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <span class=\"nice-vertical-navigation-item-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></span>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType === 'svg'\"\n ></mat-icon>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-vertical-navigation-item-title-wrapper\" *ngIf=\"item.title || item.subtitle\">\n <div class=\"nice-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n </div>\n <div\n class=\"nice-vertical-navigation-item-subtitle\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-vertical-navigation-item-badge\"\n *ngIf=\"item.badge\"\n >\n <div\n class=\"nice-vertical-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngFor=\"let item of item.children; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n</ng-container>\n" }]
62
64
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NiceNavigationService }]; }, propDecorators: { autoCollapse: [{
63
65
  type: Input
64
66
  }], item: [{
65
67
  type: Input
66
68
  }], name: [{
67
69
  type: Input
70
+ }], showTooltips: [{
71
+ type: Input
72
+ }], tooltipPosition: [{
73
+ type: Input
68
74
  }] } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvY29tcG9uZW50cy9ncm91cC9ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uaWNlLXVpLWtpdC12Mi9zcmMvbGliL2NvbXBvbmVudHMvbmF2aWdhdGlvbi92ZXJ0aWNhbC9jb21wb25lbnRzL2dyb3VwL2dyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7QUFTcEUsTUFBTSxPQUFPLHdDQUF3QztJQWdCakQ7O09BRUc7SUFDSCxZQUNZLGtCQUFxQyxFQUNyQyxzQkFBNkM7UUFEN0MsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNyQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBaEJqRCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7SUFrQjdDLENBQUM7SUFFRCx3R0FBd0c7SUFDeEcsb0JBQW9CO0lBQ3BCLHdHQUF3RztJQUV4Rzs7T0FFRztJQUNJLFFBQVE7UUFDWCxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVGLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsZ0NBQWdDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDbEQsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FDbEMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsaUJBQWlCO1lBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDZCxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsd0dBQXdHO0lBQ3hHLG1CQUFtQjtJQUNuQix3R0FBd0c7SUFFeEc7O09BRUc7SUFDSSxTQUFTLENBQUMsS0FBYSxFQUFFLElBQVM7UUFDckMsT0FBTyxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQztJQUM1QixDQUFDOztxSUEvRFEsd0NBQXdDO3lIQUF4Qyx3Q0FBd0MsaUpDYnJELHExR0FpR0EsKzlCRHBGYSx3Q0FBd0M7MkZBQXhDLHdDQUF3QztrQkFOcEQsU0FBUzsrQkFDSSxxQ0FBcUMsbUJBRzlCLHVCQUF1QixDQUFDLE1BQU07NElBVXhDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsSUFBSTtzQkFEVixLQUFLO2dCQUlDLElBQUk7c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29lcmNpb25cIjtcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IE5pY2VOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IE5pY2VOYXZpZ2F0aW9uSXRlbSB9IGZyb20gXCIuLi8uLi8uLi9uYXZpZ2F0aW9uLnR5cGVzXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1ncm91cC1pdGVtXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9ncm91cC5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlczogW10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTmljZVZlcnRpY2FsTmF2aWdhdGlvbkdyb3VwSXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIHB1YmxpYyBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfYXV0b0NvbGxhcHNlOiBCb29sZWFuSW5wdXQ7XG5cbiAgICBwcml2YXRlIF9uaWNlVmVydGljYWxOYXZpZ2F0aW9uQ29tcG9uZW50O1xuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXV0b0NvbGxhcHNlOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXRlbTogTmljZU5hdmlnYXRpb25JdGVtO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9uaWNlTmF2aWdhdGlvblNlcnZpY2U6IE5pY2VOYXZpZ2F0aW9uU2VydmljZVxuICAgICkge1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBMaWZlY3ljbGUgaG9va3NcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogT24gaW5pdFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gR2V0IHRoZSBwYXJlbnQgbmF2aWdhdGlvbiBjb21wb25lbnRcbiAgICAgICAgdGhpcy5fbmljZVZlcnRpY2FsTmF2aWdhdGlvbkNvbXBvbmVudCA9IHRoaXMuX25pY2VOYXZpZ2F0aW9uU2VydmljZS5nZXRDb21wb25lbnQodGhpcy5uYW1lKTtcblxuICAgICAgICAvLyBTdWJzY3JpYmUgdG8gb25SZWZyZXNoZWQgb24gdGhlIG5hdmlnYXRpb24gY29tcG9uZW50XG4gICAgICAgIHRoaXMuX25pY2VWZXJ0aWNhbE5hdmlnYXRpb25Db21wb25lbnQub25SZWZyZXNoZWQucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbClcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgLy8gTWFyayBmb3IgY2hlY2tcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBkZXN0cm95XG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIGFsbCBzdWJzY3JpcHRpb25zXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBAIFB1YmxpYyBtZXRob2RzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIFRyYWNrIGJ5IGZ1bmN0aW9uIGZvciBuZ0ZvciBsb29wc1xuICAgICAqL1xuICAgIHB1YmxpYyB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogYW55IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQgfHwgaW5kZXg7XG4gICAgfVxufVxuIiwiPCEtLSBJdGVtIHdyYXBwZXIgLS0+XG48ZGl2XG4gICAgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS13cmFwcGVyXCJcbiAgICBbY2xhc3MubmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0taGFzLXN1YnRpdGxlXT1cIiEhaXRlbS5zdWJ0aXRsZVwiXG4gICAgW25nQ2xhc3NdPVwiaXRlbS5jbGFzc2VzPy53cmFwcGVyXCJcbj5cbiAgICA8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW1cIj5cbiAgICAgICAgPCEtLSBJY29uIC0tPlxuICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgIGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0taWNvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLmNsYXNzZXM/Lmljb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmljb24gJiYgaXRlbS5pY29uVHlwZSA9PT0gJ21hdGVyaWFsJ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IGl0ZW0uaWNvbiB9fVxuICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0taWNvblwiIFtuZ0NsYXNzXT1cIml0ZW0uaWNvblwiICpuZ0lmPVwiaXRlbS5pY29uICYmIGl0ZW0uaWNvblR5cGUgPT0gJ2ZvbnRhd2Vzb21lJ1wiPjwvc3Bhbj5cblxuICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgIGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0taWNvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLmNsYXNzZXM/Lmljb25cIlxuICAgICAgICAgICAgW3N2Z0ljb25dPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uICYmIGl0ZW0uaWNvblR5cGUgPT09ICdzdmcnXCJcbiAgICAgICAgPjwvbWF0LWljb24+XG5cbiAgICAgICAgPCEtLSBUaXRsZSAmIFN1YnRpdGxlIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0tdGl0bGUtd3JhcHBlclwiICpuZ0lmPVwiaXRlbS50aXRsZSB8fCBpdGVtLnN1YnRpdGxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJpdGVtLmNsYXNzZXM/LnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLXN1YnRpdGxlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uc3VidGl0bGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3Nlcz8uc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5zdWJ0aXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEJhZGdlIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWJhZGdlXCJcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5iYWRnZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWJhZGdlLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uYmFkZ2UuY2xhc3Nlc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgaXRlbS5iYWRnZS50aXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbS5jaGlsZHJlbjsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgPCEtLSBTa2lwIHRoZSBoaWRkZW4gaXRlbXMgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoaXRlbSB8IG5pY2VTaG91bGRIaWRlIHwgYXN5bmMpXCI+XG4gICAgICAgIDwhLS0gQmFzaWMgLS0+XG4gICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYmFzaWMtaXRlbVxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdiYXNpYydcIlxuICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWJhc2ljLWl0ZW0+XG5cbiAgICAgICAgPCEtLSBDb2xsYXBzYWJsZSAtLT5cbiAgICAgICAgPG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1jb2xsYXBzYWJsZS1pdGVtXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2NvbGxhcHNhYmxlJ1wiXG4gICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgW2F1dG9Db2xsYXBzZV09XCJhdXRvQ29sbGFwc2VcIlxuICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tY29sbGFwc2FibGUtaXRlbT5cblxuICAgICAgICA8IS0tIERpdmlkZXIgLS0+XG4gICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZGl2aWRlci1pdGVtXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2RpdmlkZXInXCJcbiAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1kaXZpZGVyLWl0ZW0+XG5cbiAgICAgICAgPCEtLSBHcm91cCAtLT5cbiAgICAgICAgPG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1ncm91cC1pdGVtXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2dyb3VwJ1wiXG4gICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZ3JvdXAtaXRlbT5cblxuICAgICAgICA8IS0tIFNwYWNlciAtLT5cbiAgICAgICAgPG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1zcGFjZXItaXRlbVxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdzcGFjZXInXCJcbiAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1zcGFjZXItaXRlbT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvY29tcG9uZW50cy9ncm91cC9ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uaWNlLXVpLWtpdC12Mi9zcmMvbGliL2NvbXBvbmVudHMvbmF2aWdhdGlvbi92ZXJ0aWNhbC9jb21wb25lbnRzL2dyb3VwL2dyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVoSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7QUFTcEUsTUFBTSxPQUFPLHdDQUF3QztJQXNCakQ7O09BRUc7SUFDSCxZQUNZLGtCQUFxQyxFQUNyQyxzQkFBNkM7UUFEN0MsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNyQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBdEJqRCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFZdEMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFHckIsb0JBQWUsR0FBb0IsT0FBTyxDQUFDO0lBU2xELENBQUM7SUFFRCx3R0FBd0c7SUFDeEcsb0JBQW9CO0lBQ3BCLHdHQUF3RztJQUV4Rzs7T0FFRztJQUNJLFFBQVE7UUFDWCxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVGLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsZ0NBQWdDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDbEQsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FDbEMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsaUJBQWlCO1lBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDZCxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsd0dBQXdHO0lBQ3hHLG1CQUFtQjtJQUNuQix3R0FBd0c7SUFFeEc7O09BRUc7SUFDSSxTQUFTLENBQUMsS0FBYSxFQUFFLElBQVM7UUFDckMsT0FBTyxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQztJQUM1QixDQUFDOztxSUFyRVEsd0NBQXdDO3lIQUF4Qyx3Q0FBd0MsbU5DZHJELHFuSEF1R0EscWlDRHpGYSx3Q0FBd0M7MkZBQXhDLHdDQUF3QztrQkFOcEQsU0FBUzsrQkFDSSxxQ0FBcUMsbUJBRzlCLHVCQUF1QixDQUFDLE1BQU07NElBVXhDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsSUFBSTtzQkFEVixLQUFLO2dCQUlDLElBQUk7c0JBRFYsS0FBSztnQkFJQyxZQUFZO3NCQURsQixLQUFLO2dCQUlDLGVBQWU7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgTmljZU5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL25hdmlnYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgTmljZU5hdmlnYXRpb25JdGVtIH0gZnJvbSBcIi4uLy4uLy4uL25hdmlnYXRpb24udHlwZXNcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWdyb3VwLWl0ZW1cIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2dyb3VwLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVzOiBbXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOaWNlVmVydGljYWxOYXZpZ2F0aW9uR3JvdXBJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgcHVibGljIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9hdXRvQ29sbGFwc2U6IEJvb2xlYW5JbnB1dDtcblxuICAgIHByaXZhdGUgX25pY2VWZXJ0aWNhbE5hdmlnYXRpb25Db21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBbGwgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhdXRvQ29sbGFwc2U6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpdGVtOiBOaWNlTmF2aWdhdGlvbkl0ZW07XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gICAgXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd1Rvb2x0aXBzID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0b29sdGlwUG9zaXRpb246IFRvb2x0aXBQb3NpdGlvbiA9IFwiYWZ0ZXJcIjtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfbmljZU5hdmlnYXRpb25TZXJ2aWNlOiBOaWNlTmF2aWdhdGlvblNlcnZpY2VcbiAgICApIHtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEAgTGlmZWN5Y2xlIGhvb2tzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIE9uIGluaXRcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIEdldCB0aGUgcGFyZW50IG5hdmlnYXRpb24gY29tcG9uZW50XG4gICAgICAgIHRoaXMuX25pY2VWZXJ0aWNhbE5hdmlnYXRpb25Db21wb25lbnQgPSB0aGlzLl9uaWNlTmF2aWdhdGlvblNlcnZpY2UuZ2V0Q29tcG9uZW50KHRoaXMubmFtZSk7XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIG9uUmVmcmVzaGVkIG9uIHRoZSBuYXZpZ2F0aW9uIGNvbXBvbmVudFxuICAgICAgICB0aGlzLl9uaWNlVmVydGljYWxOYXZpZ2F0aW9uQ29tcG9uZW50Lm9uUmVmcmVzaGVkLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpXG4gICAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vIE1hcmsgZm9yIGNoZWNrXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gZGVzdHJveVxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBQdWJsaWMgbWV0aG9kc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiBUcmFjayBieSBmdW5jdGlvbiBmb3IgbmdGb3IgbG9vcHNcbiAgICAgKi9cbiAgICBwdWJsaWMgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSk6IGFueSB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkIHx8IGluZGV4O1xuICAgIH1cbn1cbiIsIjwhLS0gSXRlbSB3cmFwcGVyIC0tPlxuPGRpdlxuICAgIGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0td3JhcHBlclwiXG4gICAgW2NsYXNzLm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWhhcy1zdWJ0aXRsZV09XCIhIWl0ZW0uc3VidGl0bGVcIlxuICAgIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3Nlcz8ud3JhcHBlclwiXG4+XG4gICAgPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtXCI+XG4gICAgICAgIDwhLS0gSWNvbiAtLT5cbiAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWljb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jbGFzc2VzPy5pY29uXCJcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uICYmIGl0ZW0uaWNvblR5cGUgPT09ICdtYXRlcmlhbCdcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBpdGVtLmljb24gfX1cbiAgICAgICAgPC9tYXQtaWNvbj5cblxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWljb25cIiBbbmdDbGFzc109XCJpdGVtLmljb25cIiAqbmdJZj1cIml0ZW0uaWNvbiAmJiBpdGVtLmljb25UeXBlID09ICdmb250YXdlc29tZSdcIj48L3NwYW4+XG5cbiAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWljb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jbGFzc2VzPy5pY29uXCJcbiAgICAgICAgICAgIFtzdmdJY29uXT1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvbiAmJiBpdGVtLmljb25UeXBlID09PSAnc3ZnJ1wiXG4gICAgICAgID48L21hdC1pY29uPlxuXG4gICAgICAgIDwhLS0gVGl0bGUgJiBTdWJ0aXRsZSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLXRpdGxlLXdyYXBwZXJcIiAqbmdJZj1cIml0ZW0udGl0bGUgfHwgaXRlbS5zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiaXRlbS5jbGFzc2VzPy50aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS1zdWJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnN1YnRpdGxlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJpdGVtLmNsYXNzZXM/LnN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uc3VidGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBCYWRnZSAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS1iYWRnZVwiXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uYmFkZ2VcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS1iYWRnZS1jb250ZW50XCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLmJhZGdlLmNsYXNzZXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0uYmFkZ2UudGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW0uY2hpbGRyZW47IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgIDwhLS0gU2tpcCB0aGUgaGlkZGVuIGl0ZW1zIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGl0ZW0gfCBuaWNlU2hvdWxkSGlkZSB8IGFzeW5jKVwiPlxuICAgICAgICA8IS0tIEJhc2ljIC0tPlxuICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWJhc2ljLWl0ZW1cbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnYmFzaWMnXCJcbiAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICBbc2hvd1Rvb2x0aXBzXT1cInNob3dUb29sdGlwc1wiXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1iYXNpYy1pdGVtPlxuXG4gICAgICAgIDwhLS0gQ29sbGFwc2FibGUgLS0+XG4gICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tY29sbGFwc2FibGUtaXRlbVxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdjb2xsYXBzYWJsZSdcIlxuICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgIFthdXRvQ29sbGFwc2VdPVwiYXV0b0NvbGxhcHNlXCJcbiAgICAgICAgICAgIFtzaG93VG9vbHRpcHNdPVwic2hvd1Rvb2x0aXBzXCJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbGxhcHNhYmxlLWl0ZW0+XG5cbiAgICAgICAgPCEtLSBEaXZpZGVyIC0tPlxuICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWRpdmlkZXItaXRlbVxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdkaXZpZGVyJ1wiXG4gICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZGl2aWRlci1pdGVtPlxuXG4gICAgICAgIDwhLS0gR3JvdXAgLS0+XG4gICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZ3JvdXAtaXRlbVxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdncm91cCdcIlxuICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgIFtzaG93VG9vbHRpcHNdPVwic2hvd1Rvb2x0aXBzXCJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWdyb3VwLWl0ZW0+XG5cbiAgICAgICAgPCEtLSBTcGFjZXIgLS0+XG4gICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tc3BhY2VyLWl0ZW1cbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnc3BhY2VyJ1wiXG4gICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tc3BhY2VyLWl0ZW0+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -51,7 +51,9 @@ export class NiceVerticalNavigationComponent extends NiceNavigationComponent {
51
51
  this.hovered = false;
52
52
  this.hasHint = false;
53
53
  this.position = "left";
54
+ this.showTooltips = false;
54
55
  this.transparentOverlay = false;
56
+ this.tooltipPosition = "after";
55
57
  this.appearanceChanged = new EventEmitter();
56
58
  this.modeChanged = new EventEmitter();
57
59
  this.openedChanged = new EventEmitter();
@@ -531,10 +533,10 @@ export class NiceVerticalNavigationComponent extends NiceNavigationComponent {
531
533
  }
532
534
  }
533
535
  NiceVerticalNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceVerticalNavigationComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NiceNavigationService }, { token: i2.NiceUtilsService }, { token: i3.AnimationBuilder }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i4.Router }, { token: i5.ScrollStrategyOptions }, { token: i6.NiceNavigationHintService }], target: i0.ɵɵFactoryTarget.Component });
534
- NiceVerticalNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", type: NiceVerticalNavigationComponent, selector: "nice-vertical-navigation", inputs: { name: "name", appearance: "appearance", autoCollapse: "autoCollapse", inner: "inner", mode: "mode", opened: "opened", hovered: "hovered", hasHint: "hasHint", position: "position", transparentOverlay: "transparentOverlay", navigation: "navigation" }, outputs: { appearanceChanged: "appearanceChanged", modeChanged: "modeChanged", openedChanged: "openedChanged", hoveredChanged: "hoveredChanged", positionChanged: "positionChanged" }, host: { listeners: { "mouseenter": "_onMouseenter()", "mouseleave": "_onMouseleave()" }, properties: { "class": "this.classList", "style": "this.styleList" } }, viewQueries: [{ propertyName: "_navigationContentEl", first: true, predicate: ["navigationContent"], descendants: true }, { propertyName: "niceScrollbarDirectives", predicate: NiceScrollbarDirective, descendants: true }], exportAs: ["niceVerticalNavigation"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"nice-vertical-navigation-wrapper\">\n <!-- Header -->\n <div class=\"nice-vertical-navigation-header\">\n <ng-content select=\"[niceVerticalNavigationHeader]\"></ng-content>\n </div>\n\n <!-- Content -->\n <div\n class=\"nice-vertical-navigation-content\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: inner, suppressScrollX: true }\"\n #navigationContent\n >\n <!-- Content header -->\n <div class=\"nice-vertical-navigation-content-header\">\n <ng-content select=\"[niceVerticalNavigationContentHeader]\"></ng-content>\n </div>\n\n <!-- Items -->\n <div *ngFor=\"let item of navigation; trackBy: trackByFn\" [@.disabled]=\"!animateNextNavChange\" @slideInRight>\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside'\"\n [item]=\"item\"\n [name]=\"name\"\n [activeItemId]=\"activeAsideItemId\"\n [autoCollapse]=\"autoCollapse\"\n [skipChildren]=\"true\"\n (click)=\"toggleAside(item)\"\n ></nice-vertical-navigation-aside-item>\n\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n </div>\n\n <!-- Content footer -->\n <div class=\"nice-vertical-navigation-content-footer\">\n <ng-content select=\"[niceVerticalNavigationContentFooter]\"></ng-content>\n </div>\n\n </div>\n\n <!-- Footer -->\n <div class=\"nice-vertical-navigation-footer\">\n <ng-content select=\"[niceVerticalNavigationFooter]\"></ng-content>\n </div>\n</div>\n\n<!-- Aside -->\n<div\n class=\"nice-vertical-navigation-aside-wrapper\"\n *ngIf=\"activeAsideItemId\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: false, suppressScrollX: true }\"\n [@fadeInLeft]=\"position === 'left'\"\n [@fadeInRight]=\"position === 'right'\"\n [@fadeOutLeft]=\"position === 'left'\"\n [@fadeOutRight]=\"position === 'right'\"\n>\n\n <!-- Items -->\n <ng-container *ngFor=\"let item of navigation; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"(item.hidden && !item.hidden(item)) || !item.hidden\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside' && item.id === activeAsideItemId\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n ></nice-vertical-navigation-aside-item>\n </ng-container>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NiceScrollbarDirective, selector: "[niceScrollbar]", inputs: ["niceScrollbar", "niceScrollbarOptions"], exportAs: ["niceScrollbar"] }, { kind: "component", type: i9.NiceVerticalNavigationAsideItemComponent, selector: "nice-vertical-navigation-aside-item", inputs: ["activeItemId", "autoCollapse", "item", "name", "skipChildren"] }, { kind: "component", type: i10.NiceVerticalNavigationBasicItemComponent, selector: "nice-vertical-navigation-basic-item", inputs: ["item", "name"] }, { kind: "component", type: i11.NiceVerticalNavigationCollapsableItemComponent, selector: "nice-vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item", "name"] }, { kind: "component", type: i12.NiceVerticalNavigationDividerItemComponent, selector: "nice-vertical-navigation-divider-item", inputs: ["item", "name"] }, { kind: "component", type: i13.NiceVerticalNavigationGroupItemComponent, selector: "nice-vertical-navigation-group-item", inputs: ["autoCollapse", "item", "name"] }, { kind: "component", type: i14.NiceVerticalNavigationSpacerItemComponent, selector: "nice-vertical-navigation-spacer-item", inputs: ["item", "name"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i15.NiceShouldHidePipe, name: "niceShouldHide" }], animations: niceAnimations, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
536
+ NiceVerticalNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.3", type: NiceVerticalNavigationComponent, selector: "nice-vertical-navigation", inputs: { name: "name", appearance: "appearance", autoCollapse: "autoCollapse", inner: "inner", mode: "mode", opened: "opened", hovered: "hovered", hasHint: "hasHint", position: "position", showTooltips: "showTooltips", transparentOverlay: "transparentOverlay", tooltipPosition: "tooltipPosition", navigation: "navigation" }, outputs: { appearanceChanged: "appearanceChanged", modeChanged: "modeChanged", openedChanged: "openedChanged", hoveredChanged: "hoveredChanged", positionChanged: "positionChanged" }, host: { listeners: { "mouseenter": "_onMouseenter()", "mouseleave": "_onMouseleave()" }, properties: { "class": "this.classList", "style": "this.styleList" } }, viewQueries: [{ propertyName: "_navigationContentEl", first: true, predicate: ["navigationContent"], descendants: true }, { propertyName: "niceScrollbarDirectives", predicate: NiceScrollbarDirective, descendants: true }], exportAs: ["niceVerticalNavigation"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"nice-vertical-navigation-wrapper\">\n <!-- Header -->\n <div class=\"nice-vertical-navigation-header\">\n <ng-content select=\"[niceVerticalNavigationHeader]\"></ng-content>\n </div>\n\n <!-- Content -->\n <div\n class=\"nice-vertical-navigation-content\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: inner, suppressScrollX: true }\"\n #navigationContent\n >\n <!-- Content header -->\n <div class=\"nice-vertical-navigation-content-header\">\n <ng-content select=\"[niceVerticalNavigationContentHeader]\"></ng-content>\n </div>\n\n <!-- Items -->\n <div *ngFor=\"let item of navigation; trackBy: trackByFn\" [@.disabled]=\"!animateNextNavChange\" @slideInRight>\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside'\"\n [item]=\"item\"\n [name]=\"name\"\n [activeItemId]=\"activeAsideItemId\"\n [autoCollapse]=\"autoCollapse\"\n [skipChildren]=\"true\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n (click)=\"toggleAside(item)\"\n ></nice-vertical-navigation-aside-item>\n\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n </div>\n\n <!-- Content footer -->\n <div class=\"nice-vertical-navigation-content-footer\">\n <ng-content select=\"[niceVerticalNavigationContentFooter]\"></ng-content>\n </div>\n\n </div>\n\n <!-- Footer -->\n <div class=\"nice-vertical-navigation-footer\">\n <ng-content select=\"[niceVerticalNavigationFooter]\"></ng-content>\n </div>\n</div>\n\n<!-- Aside -->\n<div\n class=\"nice-vertical-navigation-aside-wrapper\"\n *ngIf=\"activeAsideItemId\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: false, suppressScrollX: true }\"\n [@fadeInLeft]=\"position === 'left'\"\n [@fadeInRight]=\"position === 'right'\"\n [@fadeOutLeft]=\"position === 'left'\"\n [@fadeOutRight]=\"position === 'right'\"\n>\n\n <!-- Items -->\n <ng-container *ngFor=\"let item of navigation; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"(item.hidden && !item.hidden(item)) || !item.hidden\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside' && item.id === activeAsideItemId\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-aside-item>\n </ng-container>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NiceScrollbarDirective, selector: "[niceScrollbar]", inputs: ["niceScrollbar", "niceScrollbarOptions"], exportAs: ["niceScrollbar"] }, { kind: "component", type: i9.NiceVerticalNavigationAsideItemComponent, selector: "nice-vertical-navigation-aside-item", inputs: ["activeItemId", "autoCollapse", "item", "name", "showTooltips", "skipChildren", "tooltipPosition"] }, { kind: "component", type: i10.NiceVerticalNavigationBasicItemComponent, selector: "nice-vertical-navigation-basic-item", inputs: ["item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i11.NiceVerticalNavigationCollapsableItemComponent, selector: "nice-vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i12.NiceVerticalNavigationDividerItemComponent, selector: "nice-vertical-navigation-divider-item", inputs: ["item", "name"] }, { kind: "component", type: i13.NiceVerticalNavigationGroupItemComponent, selector: "nice-vertical-navigation-group-item", inputs: ["autoCollapse", "item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i14.NiceVerticalNavigationSpacerItemComponent, selector: "nice-vertical-navigation-spacer-item", inputs: ["item", "name"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i15.NiceShouldHidePipe, name: "niceShouldHide" }], animations: niceAnimations, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
535
537
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImport: i0, type: NiceVerticalNavigationComponent, decorators: [{
536
538
  type: Component,
537
- args: [{ selector: "nice-vertical-navigation", animations: niceAnimations, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: "niceVerticalNavigation", template: "<div class=\"nice-vertical-navigation-wrapper\">\n <!-- Header -->\n <div class=\"nice-vertical-navigation-header\">\n <ng-content select=\"[niceVerticalNavigationHeader]\"></ng-content>\n </div>\n\n <!-- Content -->\n <div\n class=\"nice-vertical-navigation-content\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: inner, suppressScrollX: true }\"\n #navigationContent\n >\n <!-- Content header -->\n <div class=\"nice-vertical-navigation-content-header\">\n <ng-content select=\"[niceVerticalNavigationContentHeader]\"></ng-content>\n </div>\n\n <!-- Items -->\n <div *ngFor=\"let item of navigation; trackBy: trackByFn\" [@.disabled]=\"!animateNextNavChange\" @slideInRight>\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside'\"\n [item]=\"item\"\n [name]=\"name\"\n [activeItemId]=\"activeAsideItemId\"\n [autoCollapse]=\"autoCollapse\"\n [skipChildren]=\"true\"\n (click)=\"toggleAside(item)\"\n ></nice-vertical-navigation-aside-item>\n\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n </div>\n\n <!-- Content footer -->\n <div class=\"nice-vertical-navigation-content-footer\">\n <ng-content select=\"[niceVerticalNavigationContentFooter]\"></ng-content>\n </div>\n\n </div>\n\n <!-- Footer -->\n <div class=\"nice-vertical-navigation-footer\">\n <ng-content select=\"[niceVerticalNavigationFooter]\"></ng-content>\n </div>\n</div>\n\n<!-- Aside -->\n<div\n class=\"nice-vertical-navigation-aside-wrapper\"\n *ngIf=\"activeAsideItemId\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: false, suppressScrollX: true }\"\n [@fadeInLeft]=\"position === 'left'\"\n [@fadeInRight]=\"position === 'right'\"\n [@fadeOutLeft]=\"position === 'left'\"\n [@fadeOutRight]=\"position === 'right'\"\n>\n\n <!-- Items -->\n <ng-container *ngFor=\"let item of navigation; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"(item.hidden && !item.hidden(item)) || !item.hidden\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside' && item.id === activeAsideItemId\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n ></nice-vertical-navigation-aside-item>\n </ng-container>\n </ng-container>\n</div>\n" }]
539
+ args: [{ selector: "nice-vertical-navigation", animations: niceAnimations, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: "niceVerticalNavigation", template: "<div class=\"nice-vertical-navigation-wrapper\">\n <!-- Header -->\n <div class=\"nice-vertical-navigation-header\">\n <ng-content select=\"[niceVerticalNavigationHeader]\"></ng-content>\n </div>\n\n <!-- Content -->\n <div\n class=\"nice-vertical-navigation-content\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: inner, suppressScrollX: true }\"\n #navigationContent\n >\n <!-- Content header -->\n <div class=\"nice-vertical-navigation-content-header\">\n <ng-content select=\"[niceVerticalNavigationContentHeader]\"></ng-content>\n </div>\n\n <!-- Items -->\n <div *ngFor=\"let item of navigation; trackBy: trackByFn\" [@.disabled]=\"!animateNextNavChange\" @slideInRight>\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside'\"\n [item]=\"item\"\n [name]=\"name\"\n [activeItemId]=\"activeAsideItemId\"\n [autoCollapse]=\"autoCollapse\"\n [skipChildren]=\"true\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n (click)=\"toggleAside(item)\"\n ></nice-vertical-navigation-aside-item>\n\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n </div>\n\n <!-- Content footer -->\n <div class=\"nice-vertical-navigation-content-footer\">\n <ng-content select=\"[niceVerticalNavigationContentFooter]\"></ng-content>\n </div>\n\n </div>\n\n <!-- Footer -->\n <div class=\"nice-vertical-navigation-footer\">\n <ng-content select=\"[niceVerticalNavigationFooter]\"></ng-content>\n </div>\n</div>\n\n<!-- Aside -->\n<div\n class=\"nice-vertical-navigation-aside-wrapper\"\n *ngIf=\"activeAsideItemId\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: false, suppressScrollX: true }\"\n [@fadeInLeft]=\"position === 'left'\"\n [@fadeInRight]=\"position === 'right'\"\n [@fadeOutLeft]=\"position === 'left'\"\n [@fadeOutRight]=\"position === 'right'\"\n>\n\n <!-- Items -->\n <ng-container *ngFor=\"let item of navigation; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"(item.hidden && !item.hidden(item)) || !item.hidden\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside' && item.id === activeAsideItemId\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-aside-item>\n </ng-container>\n </ng-container>\n</div>\n" }]
538
540
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NiceNavigationService }, { type: i2.NiceUtilsService }, { type: i3.AnimationBuilder }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i4.Router }, { type: i5.ScrollStrategyOptions }, { type: i6.NiceNavigationHintService }]; }, propDecorators: { name: [{
539
541
  type: Input
540
542
  }], appearance: [{
@@ -553,8 +555,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImpor
553
555
  type: Input
554
556
  }], position: [{
555
557
  type: Input
558
+ }], showTooltips: [{
559
+ type: Input
556
560
  }], transparentOverlay: [{
557
561
  type: Input
562
+ }], tooltipPosition: [{
563
+ type: Input
558
564
  }], appearanceChanged: [{
559
565
  type: Output
560
566
  }], modeChanged: [{
@@ -586,4 +592,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.3", ngImpor
586
592
  type: HostListener,
587
593
  args: ["mouseleave"]
588
594
  }] } });
589
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVydGljYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvdmVydGljYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvdmVydGljYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUIsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEYsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBa0IscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStC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QkFBc0Isa0lDak14QyxvdUlBK0dBLHNnRERyRWdCLGNBQWM7MkZBS2pCLCtCQUErQjtrQkFSM0MsU0FBUzsrQkFDSSwwQkFBMEIsY0FFeEIsY0FBYyxpQkFDWCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDLHdCQUF3Qjs0VkFzQjNCLElBQUk7c0JBRFYsS0FBSztnQkFJQyxVQUFVO3NCQURoQixLQUFLO2dCQUlDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsS0FBSztzQkFEWCxLQUFLO2dCQUlDLElBQUk7c0JBRFYsS0FBSztnQkFJQyxNQUFNO3NCQURaLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQUlDLE9BQU87c0JBRGIsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQUlVLGlCQUFpQjtzQkFEaEMsTUFBTTtnQkFJUyxXQUFXO3NCQUQxQixNQUFNO2dCQUlTLGFBQWE7c0JBRDVCLE1BQU07Z0JBSVMsY0FBYztzQkFEN0IsTUFBTTtnQkFJUyxlQUFlO3NCQUQ5QixNQUFNO2dCQUlDLG9CQUFvQjtzQkFEM0IsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBSW5CLFVBQVU7c0JBRHBCLEtBQUs7Z0JBbURLLFNBQVM7c0JBRG5CLFdBQVc7dUJBQUMsT0FBTztnQkFvQlQsU0FBUztzQkFEbkIsV0FBVzt1QkFBQyxPQUFPO2dCQVdULHVCQUF1QjtzQkFEakMsWUFBWTt1QkFBQyxzQkFBc0I7Z0JBbWQ3QixhQUFhO3NCQURuQixZQUFZO3VCQUFDLFlBQVk7Z0JBY25CLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIEFuaW1hdGlvbkJ1aWxkZXIsIEFuaW1hdGlvblBsYXllciwgc3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQgeyBTY3JvbGxTdHJhdGVneSwgU2Nyb2xsU3RyYXRlZ3lPcHRpb25zIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9vdmVybGF5XCI7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgbWVyZ2UsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IG5pY2VBbmltYXRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL2FuaW1hdGlvbnNcIjtcbmltcG9ydCB7IE5pY2VTY3JvbGxiYXJEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vLi4vZGlyZWN0aXZlcy9zY3JvbGxiYXJcIjtcbmltcG9ydCB7IE5pY2VVdGlsc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vcHJvdmlkZXJzL3V0aWxzXCI7XG5pbXBvcnQgeyBOaWNlTmF2aWdhdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9uYXZpZ2F0aW9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTmljZU5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL25hdmlnYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgICBOaWNlTmF2aWdhdGlvbkl0ZW0sXG4gICAgTmljZVZlcnRpY2FsTmF2aWdhdGlvbkFwcGVhcmFuY2UsXG4gICAgTmljZVZlcnRpY2FsTmF2aWdhdGlvbk1vZGUsXG4gICAgTmljZVZlcnRpY2FsTmF2aWdhdGlvblBvc2l0aW9uXG59IGZyb20gXCIuLi9uYXZpZ2F0aW9uLnR5cGVzXCI7XG5pbXBvcnQgeyBOaWNlTmF2aWdhdGlvbkhpbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3Byb3ZpZGVycy9oaW50LnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi92ZXJ0aWNhbC5jb21wb25lbnQuaHRtbFwiLFxuICAgIGFuaW1hdGlvbnM6IG5pY2VBbmltYXRpb25zLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZXhwb3J0QXM6IFwibmljZVZlcnRpY2FsTmF2aWdhdGlvblwiXG59KVxuZXhwb3J0IGNsYXNzIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Db21wb25lbnQgZXh0ZW5kcyBOaWNlTmF2aWdhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIHB1YmxpYyBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaW5uZXI6IEJvb2xlYW5JbnB1dDtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIHB1YmxpYyBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfb3BlbmVkOiBCb29sZWFuSW5wdXQ7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgICBwdWJsaWMgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3RyYW5zcGFyZW50T3ZlcmxheTogQm9vbGVhbklucHV0O1xuXG4gICAgcHJpdmF0ZSBfZm9yY2VIb3ZlcmVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfYW5pbWF0aW9uc0VuYWJsZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9hc2lkZU92ZXJsYXk6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZUFzaWRlT3ZlcmxheUNsaWNrOiBhbnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlT3ZlcmxheUNsaWNrOiBhbnk7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheTogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBfcGxheWVyOiBBbmltYXRpb25QbGF5ZXI7XG4gICAgcHJpdmF0ZSBfc2Nyb2xsU3RyYXRlZ3k6IFNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5fc2Nyb2xsU3RyYXRlZ3lPcHRpb25zLmJsb2NrKCk7XG4gICAgcHJpdmF0ZSBfbmljZVNjcm9sbGJhckRpcmVjdGl2ZXMhOiBRdWVyeUxpc3Q8TmljZVNjcm9sbGJhckRpcmVjdGl2ZT47XG4gICAgcHJpdmF0ZSBfbmljZVNjcm9sbGJhckRpcmVjdGl2ZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyA9IHRoaXMuX25pY2VVdGlsc1NlcnZpY2UucmFuZG9tSWQoKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFwcGVhcmFuY2U6IE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25BcHBlYXJhbmNlID0gXCJkZWZhdWx0XCI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhdXRvQ29sbGFwc2UgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaW5uZXIgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1vZGU6IE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Nb2RlID0gXCJzaWRlXCI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvcGVuZWQgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaG92ZXJlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGFzSGludCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcG9zaXRpb246IE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Qb3NpdGlvbiA9IFwibGVmdFwiO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdHJhbnNwYXJlbnRPdmVybGF5ID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXBwZWFyYW5jZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25BcHBlYXJhbmNlPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxOaWNlVmVydGljYWxOYXZpZ2F0aW9uTW9kZT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBvcGVuZWRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGhvdmVyZWRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IHBvc2l0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TmljZVZlcnRpY2FsTmF2aWdhdGlvblBvc2l0aW9uPigpO1xuXG4gICAgQFZpZXdDaGlsZChcIm5hdmlnYXRpb25Db250ZW50XCIpXG4gICAgcHJpdmF0ZSBfbmF2aWdhdGlvbkNvbnRlbnRFbDogRWxlbWVudFJlZjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBuYXZpZ2F0aW9uKG5hdmlnYXRpb246IE5pY2VOYXZpZ2F0aW9uSXRlbVtdKSB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb24gPSBuYXZpZ2F0aW9uO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBuYXZpZ2F0aW9uKCk6IE5pY2VOYXZpZ2F0aW9uSXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb247XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBmb3JjZUhvdmVyZWQoZm9yY2VIb3ZlcmVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2ZvcmNlSG92ZXJlZCA9IGZvcmNlSG92ZXJlZDtcbiAgICAgICAgdGhpcy5ob3ZlcmVkQ2hhbmdlZC5uZXh0KCh0aGlzLmhvdmVyZWQgfHwgdGhpcy5fZm9yY2VIb3ZlcmVkKSB8fCB0aGlzLmhhc0hpbnQpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aXZlQXNpZGVJdGVtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBvbkNvbGxhcHNhYmxlSXRlbUNvbGxhcHNlZCA9IG5ldyBSZXBsYXlTdWJqZWN0PE5pY2VOYXZpZ2F0aW9uSXRlbT4oMSk7XG4gICAgcHVibGljIG9uQ29sbGFwc2FibGVJdGVtRXhwYW5kZWQgPSBuZXcgUmVwbGF5U3ViamVjdDxOaWNlTmF2aWdhdGlvbkl0ZW0+KDEpO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgX25pY2VOYXZpZ2F0aW9uU2VydmljZTogTmljZU5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBfbmljZVV0aWxzU2VydmljZTogTmljZVV0aWxzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfYW5pbWF0aW9uQnVpbGRlcjogQW5pbWF0aW9uQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXIyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIF9zY3JvbGxTdHJhdGVneU9wdGlvbnM6IFNjcm9sbFN0cmF0ZWd5T3B0aW9ucyxcbiAgICAgICAgcHJpdmF0ZSBfaGludFNlcnZpY2U6IE5pY2VOYXZpZ2F0aW9uSGludFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2NoYW5nZURldGVjdG9yUmVmLCBfbmljZU5hdmlnYXRpb25TZXJ2aWNlLCBfbmljZVV0aWxzU2VydmljZSk7XG5cbiAgICAgICAgdGhpcy5faGFuZGxlQXNpZGVPdmVybGF5Q2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQXNpZGUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5faGFuZGxlT3ZlcmxheUNsaWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBBY2Nlc3NvcnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogSG9zdCBiaW5kaW5nIGZvciBjb21wb25lbnQgY2xhc3Nlc1xuICAgICAqL1xuICAgIEBIb3N0QmluZGluZyhcImNsYXNzXCIpXG4gICAgcHVibGljIGdldCBjbGFzc0xpc3QoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFuaW1hdGlvbnMtZW5hYmxlZFwiOiB0aGlzLl9hbmltYXRpb25zRW5hYmxlZCxcbiAgICAgICAgICAgIFtgbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFwcGVhcmFuY2UtJHt0aGlzLmFwcGVhcmFuY2V9YF06IHRydWUsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1ob3ZlclwiOiB0aGlzLmhvdmVyZWQgfHwgdGhpcy5fZm9yY2VIb3ZlcmVkLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taW5uZXJcIjogdGhpcy5pbm5lcixcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLW1vZGUtb3ZlclwiOiB0aGlzLm1vZGUgPT09IFwib3ZlclwiLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tbW9kZS1zaWRlXCI6IHRoaXMubW9kZSA9PT0gXCJzaWRlXCIsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1vcGVuZWRcIjogdGhpcy5vcGVuZWQsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1wb3NpdGlvbi1sZWZ0XCI6IHRoaXMucG9zaXRpb24gPT09IFwibGVmdFwiLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tcG9zaXRpb24tcmlnaHRcIjogdGhpcy5wb3NpdGlvbiA9PT0gXCJyaWdodFwiLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taGFzLWhpbnRcIjogdGhpcy5oYXNIaW50XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSG9zdCBiaW5kaW5nIGZvciBjb21wb25lbnQgaW5saW5lIHN0eWxlc1xuICAgICAqL1xuICAgIEBIb3N0QmluZGluZyhcInN0eWxlXCIpXG4gICAgcHVibGljIGdldCBzdHlsZUxpc3QoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFwidmlzaWJpbGl0eVwiOiB0aGlzLm9wZW5lZCA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIlxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHRlciBmb3IgbmljZVNjcm9sbGJhckRpcmVjdGl2ZXNcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKE5pY2VTY3JvbGxiYXJEaXJlY3RpdmUpXG4gICAgcHVibGljIHNldCBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcyhuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlczogUXVlcnlMaXN0PE5pY2VTY3JvbGxiYXJEaXJlY3RpdmU+KSB7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBkaXJlY3RpdmVzXG4gICAgICAgIHRoaXMuX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzID0gbmljZVNjcm9sbGJhckRpcmVjdGl2ZXM7XG5cbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZXJlIGFyZSBubyBkaXJlY3RpdmVzXG4gICAgICAgIGlmIChuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVuc3Vic2NyaWJlIHRoZSBwcmV2aW91cyBzdWJzY3JpcHRpb25zXG4gICAgICAgIGlmICh0aGlzLl9uaWNlU2Nyb2xsYmFyRGlyZWN0aXZlc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fbmljZVNjcm9sbGJhckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc2Nyb2xsYmFycyBvbiBjb2xsYXBzYWJsZSBpdGVtcycgY29sbGFwc2UvZXhwYW5kXG4gICAgICAgIHRoaXMuX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzU3Vic2NyaXB0aW9uID1cbiAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgIHRoaXMub25Db2xsYXBzYWJsZUl0ZW1Db2xsYXBzZWQsXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbGxhcHNhYmxlSXRlbUV4cGFuZGVkXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgICAgICAgICAgICAgIGRlbGF5KDI1MClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBzY3JvbGxiYXJzIGFuZCB1cGRhdGUgdGhlbVxuICAgICAgICAgICAgICAgICAgICBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcy5mb3JFYWNoKChuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEAgTGlmZWN5Y2xlIGhvb2tzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIE9uIGNoYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGFuZ2VzXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG5cbiAgICAgICAgLy8gQXBwZWFyYW5jZVxuICAgICAgICBpZiAoXCJhcHBlYXJhbmNlXCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgb2JzZXJ2YWJsZVxuICAgICAgICAgICAgdGhpcy5hcHBlYXJhbmNlQ2hhbmdlZC5uZXh0KGNoYW5nZXMuYXBwZWFyYW5jZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5uZXJcbiAgICAgICAgaWYgKFwiaW5uZXJcIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBDb2VyY2UgdGhlIHZhbHVlIHRvIGEgYm9vbGVhblxuICAgICAgICAgICAgdGhpcy5pbm5lciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShjaGFuZ2VzLmlubmVyLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNb2RlXG4gICAgICAgIGlmIChcIm1vZGVcIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IHZhbHVlc1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE1vZGUgPSBjaGFuZ2VzLm1vZGUuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNNb2RlID0gY2hhbmdlcy5tb2RlLnByZXZpb3VzVmFsdWU7XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVBbmltYXRpb25zKCk7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBtb2RlIGNoYW5nZXM6ICdvdmVyIC0+IHNpZGUnXG4gICAgICAgICAgICBpZiAocHJldmlvdXNNb2RlID09PSBcIm92ZXJcIiAmJiBjdXJyZW50TW9kZSA9PT0gXCJzaWRlXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBIaWRlIHRoZSBvdmVybGF5XG4gICAgICAgICAgICAgICAgdGhpcy5faGlkZU92ZXJsYXkoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdGhlIG1vZGUgY2hhbmdlczogJ3NpZGUgLT4gb3ZlcidcbiAgICAgICAgICAgIGlmIChwcmV2aW91c01vZGUgPT09IFwic2lkZVwiICYmIGN1cnJlbnRNb2RlID09PSBcIm92ZXJcIikge1xuICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBhc2lkZVxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VBc2lkZSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5hdmlnYXRpb24gaXMgb3BlbmVkXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNob3cgdGhlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hvd092ZXJsYXkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIG9ic2VydmFibGVcbiAgICAgICAgICAgIHRoaXMubW9kZUNoYW5nZWQubmV4dChjdXJyZW50TW9kZSk7XG5cbiAgICAgICAgICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9ucyBhZnRlciBhIGRlbGF5XG4gICAgICAgICAgICAvLyBUaGUgZGVsYXkgbXVzdCBiZSBiaWdnZXIgdGhhbiB0aGUgY3VycmVudCB0cmFuc2l0aW9uLWR1cmF0aW9uXG4gICAgICAgICAgICAvLyB0byBtYWtlIHN1cmUgbm90aGluZyB3aWxsIGJlIGFuaW1hdGVkIHdoaWxlIHRoZSBtb2RlIGNoYW5naW5nXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbmFibGVBbmltYXRpb25zKCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3BlbmVkXG4gICAgICAgIGlmIChcIm9wZW5lZFwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIENvZXJjZSB0aGUgdmFsdWUgdG8gYSBib29sZWFuXG4gICAgICAgICAgICB0aGlzLm9wZW5lZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShjaGFuZ2VzLm9wZW5lZC5jdXJyZW50VmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBPcGVuL2Nsb3NlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICAgICAgICB0aGlzLl90b2dnbGVPcGVuZWQodGhpcy5vcGVuZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUG9zaXRpb25cbiAgICAgICAgaWYgKFwicG9zaXRpb25cIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBvYnNlcnZhYmxlXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uQ2hhbmdlZC5uZXh0KGNoYW5nZXMucG9zaXRpb24uY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYW5zcGFyZW50IG92ZXJsYXlcbiAgICAgICAgaWYgKFwidHJhbnNwYXJlbnRPdmVybGF5XCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgLy8gQ29lcmNlIHRoZSB2YWx1ZSB0byBhIGJvb2xlYW5cbiAgICAgICAgICAgIHRoaXMudHJhbnNwYXJlbnRPdmVybGF5ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGNoYW5nZXMudHJhbnNwYXJlbnRPdmVybGF5LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBpbml0XG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpbnB1dCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIGlmICh0aGlzLm5hbWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMuX25pY2VVdGlsc1NlcnZpY2UucmFuZG9tSWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgJ05hdmlnYXRpb25FbmQnIGV2ZW50XG4gICAgICAgIHRoaXMuX3JvdXRlci5ldmVudHNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBtb2RlIGlzICdvdmVyJyBhbmQgdGhlIG5hdmlnYXRpb24gaXMgb3BlbmVkLi4uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJvdmVyXCIgJiYgdGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBtb2RlIGlzICdzaWRlJyBhbmQgdGhlIGFzaWRlIGlzIGFjdGl2ZS4uLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwic2lkZVwiICYmIHRoaXMuYWN0aXZlQXNpZGVJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGFzaWRlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VBc2lkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2hpbnRTZXJ2aWNlLmhhc0FjdGl2ZUhpbnQkLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSkuc3Vic2NyaWJlKGhhc0hpbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYXNIaW50ID0gaGFzSGludDtcbiAgICAgICAgICAgIHRoaXMuaG92ZXJlZENoYW5nZWQubmV4dCgodGhpcy5ob3ZlcmVkIHx8IHRoaXMuX2ZvcmNlSG92ZXJlZCkgfHwgdGhpcy5oYXNIaW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWZ0ZXIgdmlldyBpbml0XG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgIC8vIFJldHVybiBpZiAnbmF2aWdhdGlvbiBjb250ZW50JyBlbGVtZW50IGRvZXMgbm90IGV4aXN0XG4gICAgICAgICAgICBpZiAoIXRoaXMuX25hdmlnYXRpb25Db250ZW50RWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmICduYXZpZ2F0aW9uIGNvbnRlbnQnIGVsZW1lbnQgZG9lc24ndCBoYXZlXG4gICAgICAgICAgICAvLyBwZXJmZWN0IHNjcm9sbGJhciBhY3RpdmF0ZWQgb24gaXQuLi5cbiAgICAgICAgICAgIGlmICghdGhpcy5fbmF2aWdhdGlvbkNvbnRlbnRFbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcInBzXCIpKSB7XG4gICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgYWN0aXZlIGl0ZW1cbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVJdGVtID0gdGhpcy5fbmF2aWdhdGlvbkNvbnRlbnRFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0tYWN0aXZlXCIpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGFjdGl2ZSBpdGVtIGV4aXN0cywgc2Nyb2xsIGl0IGludG8gdmlld1xuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0ZW0uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBPdGhlcndpc2VcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEdvIHRocm91Z2ggYWxsIHRoZSBzY3JvbGxiYXIgZGlyZWN0aXZlc1xuICAgICAgICAgICAgICAgIHRoaXMuX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzLmZvckVhY2goKG5pY2VTY3JvbGxiYXJEaXJlY3RpdmUpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIGlmIG5vdCBlbmFibGVkXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmljZVNjcm9sbGJhckRpcmVjdGl2ZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU2Nyb2xsIHRvIHRoZSBhY3RpdmUgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlLnNjcm9sbFRvRWxlbWVudChcIi5uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS1hY3RpdmVcIiwgLTEyMCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBQdWJsaWMgbWV0aG9kc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiBPcGVuIHRoZSBuYXZpZ2F0aW9uXG4gICAgICovXG4gICAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGUgbmF2aWdhdGlvbiBpcyBhbHJlYWR5IG9wZW5cbiAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdGhlIG9wZW5lZFxuICAgICAgICB0aGlzLl90b2dnbGVPcGVuZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgdGhlIG5hdmlnYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGUgbmF2aWdhdGlvbiBpcyBhbHJlYWR5IGNsb3NlZFxuICAgICAgICBpZiAoIXRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbG9zZSB0aGUgYXNpZGVcbiAgICAgICAgdGhpcy5jbG9zZUFzaWRlKCk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSBvcGVuZWRcbiAgICAgICAgdGhpcy5fdG9nZ2xlT3BlbmVkKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgdGhlIG5hdmlnYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICAvLyBUb2dnbGVcbiAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW4gdGhlIGFzaWRlXG4gICAgICovXG4gICAgcHVibGljIG9wZW5Bc2lkZShpdGVtOiBOaWNlTmF2aWdhdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSBpdGVtIGlzIGRpc2FibGVkXG4gICAgICAgIGlmIChpdGVtLmRpc2FibGVkIHx8ICFpdGVtLmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPcGVuXG4gICAgICAgIHRoaXMuYWN0aXZlQXNpZGVJdGVtSWQgPSBpdGVtLmlkO1xuXG4gICAgICAgIC8vIFNob3cgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgICAgdGhpcy5fc2hvd0FzaWRlT3ZlcmxheSgpO1xuXG4gICAgICAgIC8vIE1hcmsgZm9yIGNoZWNrXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlIHRoZSBhc2lkZVxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZUFzaWRlKCk6IHZvaWQge1xuICAgICAgICAvLyBDbG9zZVxuICAgICAgICB0aGlzLmFjdGl2ZUFzaWRlSXRlbUlkID0gbnVsbDtcblxuICAgICAgICAvLyBIaWRlIHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICAgIHRoaXMuX2hpZGVBc2lkZU92ZXJsYXkoKTtcblxuICAgICAgICAvLyBNYXJrIGZvciBjaGVja1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgdGhlIGFzaWRlXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZUFzaWRlKGl0ZW06IE5pY2VOYXZpZ2F0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICAvLyBUb2dnbGVcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQXNpZGVJdGVtSWQgPT09IGl0ZW0uaWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VBc2lkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuQXNpZGUoaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEAgUHJpdmF0ZSBtZXRob2RzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9lbmFibGVBbmltYXRpb25zKCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIGFuaW1hdGlvbnMgYXJlIGFscmVhZHkgZW5hYmxlZFxuICAgICAgICBpZiAodGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICB0aGlzLl9hbmltYXRpb25zRW5hYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kaXNhYmxlQW5pbWF0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSBhbmltYXRpb25zIGFyZSBhbHJlYWR5IGRpc2FibGVkXG4gICAgICAgIGlmICghdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERpc2FibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRoZSBvdmVybGF5XG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3Nob3dPdmVybGF5KCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBvdmVybGF5XG4gICAgICAgIGlmICh0aGlzLl9hc2lkZU92ZXJsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgb3ZlcmxheSBlbGVtZW50XG4gICAgICAgIHRoaXMuX292ZXJsYXkgPSB0aGlzLl9yZW5kZXJlcjIuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgICAvLyBBZGQgYSBjbGFzcyB0byB0aGUgb3ZlcmxheSBlbGVtZW50XG4gICAgICAgIHRoaXMuX292ZXJsYXkuY2xhc3NMaXN0LmFkZChcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1vdmVybGF5XCIpO1xuXG4gICAgICAgIC8vIEFkZCBhIGNsYXNzIGRlcGVuZGluZyBvbiB0aGUgdHJhbnNwYXJlbnRPdmVybGF5IG9wdGlvblxuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudE92ZXJsYXkpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXkuY2xhc3NMaXN0LmFkZChcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1vdmVybGF5LXRyYW5zcGFyZW50XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXBwZW5kIHRoZSBvdmVybGF5IHRvIHRoZSBwYXJlbnQgb2YgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LCB0aGlzLl9vdmVybGF5KTtcblxuICAgICAgICAvLyBFbmFibGUgYmxvY2sgc2Nyb2xsIHN0cmF0ZWd5XG4gICAgICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmVuYWJsZSgpO1xuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgZW50ZXIgYW5pbWF0aW9uIGFuZCBhdHRhY2ggaXQgdG8gdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9wbGF5ZXIgPSB0aGlzLl9hbmltYXRpb25CdWlsZGVyLmJ1aWxkKFtcbiAgICAgICAgICAgIGFuaW1hdGUoXCIzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKVwiLCBzdHlsZSh7b3BhY2l0eTogMX0pKVxuICAgICAgICBdKS5jcmVhdGUodGhpcy5fb3ZlcmxheSk7XG5cbiAgICAgICAgLy8gUGxheSB0aGUgYW5pbWF0aW9uXG4gICAgICAgIHRoaXMuX3BsYXllci5wbGF5KCk7XG5cbiAgICAgICAgLy8gQWRkIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBvdmVybGF5XG4gICAgICAgIHRoaXMuX292ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZU92ZXJsYXlDbGljayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZSB0aGUgb3ZlcmxheVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9oaWRlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9vdmVybGF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGxlYXZlIGFuaW1hdGlvbiBhbmQgYXR0YWNoIGl0IHRvIHRoZSBwbGF5ZXJcbiAgICAgICAgdGhpcy5fcGxheWVyID0gdGhpcy5fYW5pbWF0aW9uQnVpbGRlci5idWlsZChbXG4gICAgICAgICAgICBhbmltYXRlKFwiMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSlcIiwgc3R5bGUoe29wYWNpdHk6IDB9KSlcbiAgICAgICAgXSkuY3JlYXRlKHRoaXMuX292ZXJsYXkpO1xuXG4gICAgICAgIC8vIFBsYXkgdGhlIGFuaW1hdGlvblxuICAgICAgICB0aGlzLl9wbGF5ZXIucGxheSgpO1xuXG4gICAgICAgIC8vIE9uY2UgdGhlIGFuaW1hdGlvbiBpcyBkb25lLi4uXG4gICAgICAgIHRoaXMuX3BsYXllci5vbkRvbmUoKCkgPT4ge1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgb3ZlcmxheSBzdGlsbCBleGlzdHMuLi5cbiAgICAgICAgICAgIGlmICh0aGlzLl9vdmVybGF5KSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lclxuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZU92ZXJsYXlDbGljayk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fb3ZlcmxheSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheSA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgYmxvY2sgc2Nyb2xsIHN0cmF0ZWd5XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxTdHJhdGVneS5kaXNhYmxlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2hvd0FzaWRlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZXJlIGlzIGFscmVhZHkgYW4gb3ZlcmxheVxuICAgICAgICBpZiAodGhpcy5fYXNpZGVPdmVybGF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGFzaWRlIG92ZXJsYXkgZWxlbWVudFxuICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkgPSB0aGlzLl9yZW5kZXJlcjIuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgICAvLyBBZGQgYSBjbGFzcyB0byB0aGUgYXNpZGUgb3ZlcmxheSBlbGVtZW50XG4gICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLW92ZXJsYXlcIik7XG5cbiAgICAgICAgLy8gQXBwZW5kIHRoZSBhc2lkZSBvdmVybGF5IHRvIHRoZSBwYXJlbnQgb2YgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LCB0aGlzLl9hc2lkZU92ZXJsYXkpO1xuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgZW50ZXIgYW5pbWF0aW9uIGFuZCBhdHRhY2ggaXQgdG8gdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9wbGF5ZXIgPVxuICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uQnVpbGRlclxuICAgICAgICAgICAgICAgIC5idWlsZChbXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGUoXCIzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKVwiLCBzdHlsZSh7b3BhY2l0eTogMX0pKVxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSh0aGlzLl9hc2lkZU92ZXJsYXkpO1xuXG4gICAgICAgIC8vIFBsYXkgdGhlIGFuaW1hdGlvblxuICAgICAgICB0aGlzLl9wbGF5ZXIucGxheSgpO1xuXG4gICAgICAgIC8vIEFkZCBhbiBldmVudCBsaXN0ZW5lciB0byB0aGUgYXNpZGUgb3ZlcmxheVxuICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZUFzaWRlT3ZlcmxheUNsaWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hpZGVBc2lkZU92ZXJsYXkoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fYXNpZGVPdmVybGF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGxlYXZlIGFuaW1hdGlvbiBhbmQgYXR0YWNoIGl0IHRvIHRoZSBwbGF5ZXJcbiAgICAgICAgdGhpcy5fcGxheWVyID1cbiAgICAgICAgICAgIHRoaXMuX2FuaW1hdGlvbkJ1aWxkZXJcbiAgICAgICAgICAgICAgICAuYnVpbGQoW1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRlKFwiMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSlcIiwgc3R5bGUoe29wYWNpdHk6IDB9KSlcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUodGhpcy5fYXNpZGVPdmVybGF5KTtcblxuICAgICAgICAvLyBQbGF5IHRoZSBhbmltYXRpb25cbiAgICAgICAgdGhpcy5fcGxheWVyLnBsYXkoKTtcblxuICAgICAgICAvLyBPbmNlIHRoZSBhbmltYXRpb24gaXMgZG9uZS4uLlxuICAgICAgICB0aGlzLl9wbGF5ZXIub25Eb25lKCgpID0+IHtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIGFzaWRlIG92ZXJsYXkgc3RpbGwgZXhpc3RzLi4uXG4gICAgICAgICAgICBpZiAodGhpcy5fYXNpZGVPdmVybGF5KSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lclxuICAgICAgICAgICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlQXNpZGVPdmVybGF5Q2xpY2spO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICAgICAgICAgICAgdGhpcy5fYXNpZGVPdmVybGF5LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fYXNpZGVPdmVybGF5KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBtb3VzZWVudGVyXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIilcbiAgICBwdWJsaWMgX29uTW91c2VlbnRlcigpOiB2b2lkIHtcbiAgICAgICAgLy8gRW5hYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMoKTtcblxuICAgICAgICAvLyBTZXQgdGhlIGhvdmVyZWRcbiAgICAgICAgdGhpcy5ob3ZlcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ob3ZlcmVkQ2hhbmdlZC5uZXh0KHRoaXMuaG92ZXJlZCB8fCB0aGlzLl9mb3JjZUhvdmVyZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIG1vdXNlbGVhdmVcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKFwibW91c2VsZWF2ZVwiKVxuICAgIHB1YmxpYyBfb25Nb3VzZWxlYXZlKCk6IHZvaWQge1xuICAgICAgICAvLyBFbmFibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgdGhpcy5fZW5hYmxlQW5pbWF0aW9ucygpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgaG92ZXJlZFxuICAgICAgICB0aGlzLmhvdmVyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ob3ZlcmVkQ2hhbmdlZC5uZXh0KHRoaXMuaG92ZXJlZCB8fCB0aGlzLl9mb3JjZUhvdmVyZWQgfHwgdGhpcy5oYXNIaW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVuL2Nsb3NlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BlblxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdG9nZ2xlT3BlbmVkKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgLy8gU2V0IHRoZSBvcGVuZWRcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBvcGVuO1xuXG4gICAgICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICB0aGlzLl9lbmFibGVBbmltYXRpb25zKCk7XG5cbiAgICAgICAgLy8gSWYgdGhlIG5hdmlnYXRpb24gb3BlbmVkLCBhbmQgdGhlIG1vZGVcbiAgICAgICAgLy8gaXMgJ292ZXInLCBzaG93IHRoZSBvdmVybGF5XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwib3ZlclwiKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93T3ZlcmxheSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRlT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXhlY3V0ZSB0aGUgb2JzZXJ2YWJsZVxuICAgICAgICB0aGlzLm9wZW5lZENoYW5nZWQubmV4dChvcGVuKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLXdyYXBwZXJcIj5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWhlYWRlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmljZVZlcnRpY2FsTmF2aWdhdGlvbkhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENvbnRlbnQgLS0+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1jb250ZW50XCJcbiAgICAgICAgbmljZVNjcm9sbGJhclxuICAgICAgICBbbmljZVNjcm9sbGJhck9wdGlvbnNdPVwieyB3aGVlbFByb3BhZ2F0aW9uOiBpbm5lciwgc3VwcHJlc3NTY3JvbGxYOiB0cnVlIH1cIlxuICAgICAgICAjbmF2aWdhdGlvbkNvbnRlbnRcbiAgICA+XG4gICAgICAgIDwhLS0gQ29udGVudCBoZWFkZXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tY29udGVudC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltuaWNlVmVydGljYWxOYXZpZ2F0aW9uQ29udGVudEhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gSXRlbXMgLS0+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbmF2aWdhdGlvbjsgdHJhY2tCeTogdHJhY2tCeUZuXCIgW0AuZGlzYWJsZWRdPVwiIWFuaW1hdGVOZXh0TmF2Q2hhbmdlXCIgQHNsaWRlSW5SaWdodD5cbiAgICAgICAgICAgIDwhLS0gU2tpcCB0aGUgaGlkZGVuIGl0ZW1zIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoaXRlbSB8IG5pY2VTaG91bGRIaWRlIHwgYXN5bmMpXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBBc2lkZSAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdhc2lkZSdcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtSWRdPVwiYWN0aXZlQXNpZGVJdGVtSWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXV0b0NvbGxhcHNlXT1cImF1dG9Db2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtza2lwQ2hpbGRyZW5dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBc2lkZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEJhc2ljIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYmFzaWMtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2Jhc2ljJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYmFzaWMtaXRlbT5cblxuICAgICAgICAgICAgICAgIDwhLS0gQ29sbGFwc2FibGUgLS0+XG4gICAgICAgICAgICAgICAgPG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1jb2xsYXBzYWJsZS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnY29sbGFwc2FibGUnXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXV0b0NvbGxhcHNlXT1cImF1dG9Db2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbGxhcHNhYmxlLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIERpdmlkZXIgLS0+XG4gICAgICAgICAgICAgICAgPG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1kaXZpZGVyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdkaXZpZGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZGl2aWRlci1pdGVtPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBHcm91cCAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWdyb3VwLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdncm91cCdcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvQ29sbGFwc2VdPVwiYXV0b0NvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZ3JvdXAtaXRlbT5cblxuICAgICAgICAgICAgICAgIDwhLS0gU3BhY2VyIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tc3BhY2VyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdzcGFjZXInXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1zcGFjZXItaXRlbT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIENvbnRlbnQgZm9vdGVyIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbnRlbnQtZm9vdGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmljZVZlcnRpY2FsTmF2aWdhdGlvbkNvbnRlbnRGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb290ZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1mb290ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25pY2VWZXJ0aWNhbE5hdmlnYXRpb25Gb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gQXNpZGUgLS0+XG48ZGl2XG4gICAgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtd3JhcHBlclwiXG4gICAgKm5nSWY9XCJhY3RpdmVBc2lkZUl0ZW1JZFwiXG4gICAgbmljZVNjcm9sbGJhclxuICAgIFtuaWNlU2Nyb2xsYmFyT3B0aW9uc109XCJ7IHdoZWVsUHJvcGFnYXRpb246IGZhbHNlLCBzdXBwcmVzc1Njcm9sbFg6IHRydWUgfVwiXG4gICAgW0BmYWRlSW5MZWZ0XT1cInBvc2l0aW9uID09PSAnbGVmdCdcIlxuICAgIFtAZmFkZUluUmlnaHRdPVwicG9zaXRpb24gPT09ICdyaWdodCdcIlxuICAgIFtAZmFkZU91dExlZnRdPVwicG9zaXRpb24gPT09ICdsZWZ0J1wiXG4gICAgW0BmYWRlT3V0UmlnaHRdPVwicG9zaXRpb24gPT09ICdyaWdodCdcIlxuPlxuXG4gICAgPCEtLSBJdGVtcyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG5hdmlnYXRpb247IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICA8IS0tIFNraXAgdGhlIGhpZGRlbiBpdGVtcyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihpdGVtLmhpZGRlbiAmJiAhaXRlbS5oaWRkZW4oaXRlbSkpIHx8ICFpdGVtLmhpZGRlblwiPlxuICAgICAgICAgICAgPCEtLSBBc2lkZSAtLT5cbiAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnYXNpZGUnICYmIGl0ZW0uaWQgPT09IGFjdGl2ZUFzaWRlSXRlbUlkXCJcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBbYXV0b0NvbGxhcHNlXT1cImF1dG9Db2xsYXBzZVwiXG4gICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtaXRlbT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
595
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVydGljYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvdmVydGljYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvdmVydGljYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUIsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEYsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBa0IscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStC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eWVyLCBzdHlsZSB9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29lcmNpb25cIjtcbmltcG9ydCB7IFNjcm9sbFN0cmF0ZWd5LCBTY3JvbGxTdHJhdGVneU9wdGlvbnMgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcFwiO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgbWVyZ2UsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IG5pY2VBbmltYXRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL2FuaW1hdGlvbnNcIjtcbmltcG9ydCB7IE5pY2VTY3JvbGxiYXJEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vLi4vZGlyZWN0aXZlcy9zY3JvbGxiYXJcIjtcbmltcG9ydCB7IE5pY2VVdGlsc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vcHJvdmlkZXJzL3V0aWxzXCI7XG5pbXBvcnQgeyBOaWNlTmF2aWdhdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9uYXZpZ2F0aW9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTmljZU5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL25hdmlnYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgICBOaWNlTmF2aWdhdGlvbkl0ZW0sXG4gICAgTmljZVZlcnRpY2FsTmF2aWdhdGlvbkFwcGVhcmFuY2UsXG4gICAgTmljZVZlcnRpY2FsTmF2aWdhdGlvbk1vZGUsXG4gICAgTmljZVZlcnRpY2FsTmF2aWdhdGlvblBvc2l0aW9uXG59IGZyb20gXCIuLi9uYXZpZ2F0aW9uLnR5cGVzXCI7XG5pbXBvcnQgeyBOaWNlTmF2aWdhdGlvbkhpbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3Byb3ZpZGVycy9oaW50LnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi92ZXJ0aWNhbC5jb21wb25lbnQuaHRtbFwiLFxuICAgIGFuaW1hdGlvbnM6IG5pY2VBbmltYXRpb25zLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZXhwb3J0QXM6IFwibmljZVZlcnRpY2FsTmF2aWdhdGlvblwiXG59KVxuZXhwb3J0IGNsYXNzIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Db21wb25lbnQgZXh0ZW5kcyBOaWNlTmF2aWdhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIHB1YmxpYyBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaW5uZXI6IEJvb2xlYW5JbnB1dDtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIHB1YmxpYyBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfb3BlbmVkOiBCb29sZWFuSW5wdXQ7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgICBwdWJsaWMgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3RyYW5zcGFyZW50T3ZlcmxheTogQm9vbGVhbklucHV0O1xuXG4gICAgcHJpdmF0ZSBfZm9yY2VIb3ZlcmVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfYW5pbWF0aW9uc0VuYWJsZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9hc2lkZU92ZXJsYXk6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZUFzaWRlT3ZlcmxheUNsaWNrOiBhbnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlT3ZlcmxheUNsaWNrOiBhbnk7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheTogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBfcGxheWVyOiBBbmltYXRpb25QbGF5ZXI7XG4gICAgcHJpdmF0ZSBfc2Nyb2xsU3RyYXRlZ3k6IFNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5fc2Nyb2xsU3RyYXRlZ3lPcHRpb25zLmJsb2NrKCk7XG4gICAgcHJpdmF0ZSBfbmljZVNjcm9sbGJhckRpcmVjdGl2ZXMhOiBRdWVyeUxpc3Q8TmljZVNjcm9sbGJhckRpcmVjdGl2ZT47XG4gICAgcHJpdmF0ZSBfbmljZVNjcm9sbGJhckRpcmVjdGl2ZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyA9IHRoaXMuX25pY2VVdGlsc1NlcnZpY2UucmFuZG9tSWQoKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFwcGVhcmFuY2U6IE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25BcHBlYXJhbmNlID0gXCJkZWZhdWx0XCI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhdXRvQ29sbGFwc2UgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaW5uZXIgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1vZGU6IE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Nb2RlID0gXCJzaWRlXCI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvcGVuZWQgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaG92ZXJlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGFzSGludCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcG9zaXRpb246IE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Qb3NpdGlvbiA9IFwibGVmdFwiO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd1Rvb2x0aXBzID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0cmFuc3BhcmVudE92ZXJsYXkgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRvb2x0aXBQb3NpdGlvbjogVG9vbHRpcFBvc2l0aW9uID0gXCJhZnRlclwiO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGFwcGVhcmFuY2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxOaWNlVmVydGljYWxOYXZpZ2F0aW9uQXBwZWFyYW5jZT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TmljZVZlcnRpY2FsTmF2aWdhdGlvbk1vZGU+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgb3BlbmVkQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBob3ZlcmVkQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBwb3NpdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Qb3NpdGlvbj4oKTtcblxuICAgIEBWaWV3Q2hpbGQoXCJuYXZpZ2F0aW9uQ29udGVudFwiKVxuICAgIHByaXZhdGUgX25hdmlnYXRpb25Db250ZW50RWw6IEVsZW1lbnRSZWY7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbmF2aWdhdGlvbihuYXZpZ2F0aW9uOiBOaWNlTmF2aWdhdGlvbkl0ZW1bXSkge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uID0gbmF2aWdhdGlvbjtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgbmF2aWdhdGlvbigpOiBOaWNlTmF2aWdhdGlvbkl0ZW1bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZm9yY2VIb3ZlcmVkKGZvcmNlSG92ZXJlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9mb3JjZUhvdmVyZWQgPSBmb3JjZUhvdmVyZWQ7XG4gICAgICAgIHRoaXMuaG92ZXJlZENoYW5nZWQubmV4dCgodGhpcy5ob3ZlcmVkIHx8IHRoaXMuX2ZvcmNlSG92ZXJlZCkgfHwgdGhpcy5oYXNIaW50KTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjdGl2ZUFzaWRlSXRlbUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgb25Db2xsYXBzYWJsZUl0ZW1Db2xsYXBzZWQgPSBuZXcgUmVwbGF5U3ViamVjdDxOaWNlTmF2aWdhdGlvbkl0ZW0+KDEpO1xuICAgIHB1YmxpYyBvbkNvbGxhcHNhYmxlSXRlbUV4cGFuZGVkID0gbmV3IFJlcGxheVN1YmplY3Q8TmljZU5hdmlnYXRpb25JdGVtPigxKTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIF9uaWNlTmF2aWdhdGlvblNlcnZpY2U6IE5pY2VOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgX25pY2VVdGlsc1NlcnZpY2U6IE5pY2VVdGlsc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2FuaW1hdGlvbkJ1aWxkZXI6IEFuaW1hdGlvbkJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBfc2Nyb2xsU3RyYXRlZ3lPcHRpb25zOiBTY3JvbGxTdHJhdGVneU9wdGlvbnMsXG4gICAgICAgIHByaXZhdGUgX2hpbnRTZXJ2aWNlOiBOaWNlTmF2aWdhdGlvbkhpbnRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9jaGFuZ2VEZXRlY3RvclJlZiwgX25pY2VOYXZpZ2F0aW9uU2VydmljZSwgX25pY2VVdGlsc1NlcnZpY2UpO1xuXG4gICAgICAgIHRoaXMuX2hhbmRsZUFzaWRlT3ZlcmxheUNsaWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUFzaWRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2hhbmRsZU92ZXJsYXlDbGljayA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEAgQWNjZXNzb3JzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIEhvc3QgYmluZGluZyBmb3IgY29tcG9uZW50IGNsYXNzZXNcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoXCJjbGFzc1wiKVxuICAgIHB1YmxpYyBnZXQgY2xhc3NMaXN0KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1hbmltYXRpb25zLWVuYWJsZWRcIjogdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQsXG4gICAgICAgICAgICBbYG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1hcHBlYXJhbmNlLSR7dGhpcy5hcHBlYXJhbmNlfWBdOiB0cnVlLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taG92ZXJcIjogdGhpcy5ob3ZlcmVkIHx8IHRoaXMuX2ZvcmNlSG92ZXJlZCxcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWlubmVyXCI6IHRoaXMuaW5uZXIsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1tb2RlLW92ZXJcIjogdGhpcy5tb2RlID09PSBcIm92ZXJcIixcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLW1vZGUtc2lkZVwiOiB0aGlzLm1vZGUgPT09IFwic2lkZVwiLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tb3BlbmVkXCI6IHRoaXMub3BlbmVkLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tcG9zaXRpb24tbGVmdFwiOiB0aGlzLnBvc2l0aW9uID09PSBcImxlZnRcIixcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLXBvc2l0aW9uLXJpZ2h0XCI6IHRoaXMucG9zaXRpb24gPT09IFwicmlnaHRcIixcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWhhcy1oaW50XCI6IHRoaXMuaGFzSGludFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhvc3QgYmluZGluZyBmb3IgY29tcG9uZW50IGlubGluZSBzdHlsZXNcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoXCJzdHlsZVwiKVxuICAgIHB1YmxpYyBnZXQgc3R5bGVMaXN0KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBcInZpc2liaWxpdHlcIjogdGhpcy5vcGVuZWQgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXR0ZXIgZm9yIG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihOaWNlU2Nyb2xsYmFyRGlyZWN0aXZlKVxuICAgIHB1YmxpYyBzZXQgbmljZVNjcm9sbGJhckRpcmVjdGl2ZXMobmljZVNjcm9sbGJhckRpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxOaWNlU2Nyb2xsYmFyRGlyZWN0aXZlPikge1xuICAgICAgICAvLyBTdG9yZSB0aGUgZGlyZWN0aXZlc1xuICAgICAgICB0aGlzLl9uaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcyA9IG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzO1xuXG4gICAgICAgIC8vIFJldHVybiBpZiB0aGVyZSBhcmUgbm8gZGlyZWN0aXZlc1xuICAgICAgICBpZiAobmljZVNjcm9sbGJhckRpcmVjdGl2ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVbnN1YnNjcmliZSB0aGUgcHJldmlvdXMgc3Vic2NyaXB0aW9uc1xuICAgICAgICBpZiAodGhpcy5fbmljZVNjcm9sbGJhckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHNjcm9sbGJhcnMgb24gY29sbGFwc2FibGUgaXRlbXMnIGNvbGxhcHNlL2V4cGFuZFxuICAgICAgICB0aGlzLl9uaWNlU2Nyb2xsYmFyRGlyZWN0aXZlc1N1YnNjcmlwdGlvbiA9XG4gICAgICAgICAgICBtZXJnZShcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ29sbGFwc2FibGVJdGVtQ29sbGFwc2VkLFxuICAgICAgICAgICAgICAgIHRoaXMub25Db2xsYXBzYWJsZUl0ZW1FeHBhbmRlZFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpLFxuICAgICAgICAgICAgICAgICAgICBkZWxheSgyNTApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgc2Nyb2xsYmFycyBhbmQgdXBkYXRlIHRoZW1cbiAgICAgICAgICAgICAgICAgICAgbmljZVNjcm9sbGJhckRpcmVjdGl2ZXMuZm9yRWFjaCgobmljZVNjcm9sbGJhckRpcmVjdGl2ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmljZVNjcm9sbGJhckRpcmVjdGl2ZS51cGRhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBAIExpZmVjeWNsZSBob29rc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiBPbiBjaGFuZ2VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hhbmdlc1xuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuXG4gICAgICAgIC8vIEFwcGVhcmFuY2VcbiAgICAgICAgaWYgKFwiYXBwZWFyYW5jZVwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIG9ic2VydmFibGVcbiAgICAgICAgICAgIHRoaXMuYXBwZWFyYW5jZUNoYW5nZWQubmV4dChjaGFuZ2VzLmFwcGVhcmFuY2UuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElubmVyXG4gICAgICAgIGlmIChcImlubmVyXCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgLy8gQ29lcmNlIHRoZSB2YWx1ZSB0byBhIGJvb2xlYW5cbiAgICAgICAgICAgIHRoaXMuaW5uZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkoY2hhbmdlcy5pbm5lci5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTW9kZVxuICAgICAgICBpZiAoXCJtb2RlXCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBwcmV2aW91cyBhbmQgY3VycmVudCB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gY2hhbmdlcy5tb2RlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzTW9kZSA9IGNoYW5nZXMubW9kZS5wcmV2aW91c1ZhbHVlO1xuXG4gICAgICAgICAgICAvLyBEaXNhYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlQW5pbWF0aW9ucygpO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgbW9kZSBjaGFuZ2VzOiAnb3ZlciAtPiBzaWRlJ1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzTW9kZSA9PT0gXCJvdmVyXCIgJiYgY3VycmVudE1vZGUgPT09IFwic2lkZVwiKSB7XG4gICAgICAgICAgICAgICAgLy8gSGlkZSB0aGUgb3ZlcmxheVxuICAgICAgICAgICAgICAgIHRoaXMuX2hpZGVPdmVybGF5KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBtb2RlIGNoYW5nZXM6ICdzaWRlIC0+IG92ZXInXG4gICAgICAgICAgICBpZiAocHJldmlvdXNNb2RlID09PSBcInNpZGVcIiAmJiBjdXJyZW50TW9kZSA9PT0gXCJvdmVyXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgYXNpZGVcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQXNpZGUoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuYXZpZ2F0aW9uIGlzIG9wZW5lZFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTaG93IHRoZSBvdmVybGF5XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dPdmVybGF5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBvYnNlcnZhYmxlXG4gICAgICAgICAgICB0aGlzLm1vZGVDaGFuZ2VkLm5leHQoY3VycmVudE1vZGUpO1xuXG4gICAgICAgICAgICAvLyBFbmFibGUgdGhlIGFuaW1hdGlvbnMgYWZ0ZXIgYSBkZWxheVxuICAgICAgICAgICAgLy8gVGhlIGRlbGF5IG11c3QgYmUgYmlnZ2VyIHRoYW4gdGhlIGN1cnJlbnQgdHJhbnNpdGlvbi1kdXJhdGlvblxuICAgICAgICAgICAgLy8gdG8gbWFrZSBzdXJlIG5vdGhpbmcgd2lsbCBiZSBhbmltYXRlZCB3aGlsZSB0aGUgbW9kZSBjaGFuZ2luZ1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5hYmxlQW5pbWF0aW9ucygpO1xuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9wZW5lZFxuICAgICAgICBpZiAoXCJvcGVuZWRcIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBDb2VyY2UgdGhlIHZhbHVlIHRvIGEgYm9vbGVhblxuICAgICAgICAgICAgdGhpcy5vcGVuZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkoY2hhbmdlcy5vcGVuZWQuY3VycmVudFZhbHVlKTtcblxuICAgICAgICAgICAgLy8gT3Blbi9jbG9zZSB0aGUgbmF2aWdhdGlvblxuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlT3BlbmVkKHRoaXMub3BlbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBvc2l0aW9uXG4gICAgICAgIGlmIChcInBvc2l0aW9uXCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgb2JzZXJ2YWJsZVxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkNoYW5nZWQubmV4dChjaGFuZ2VzLnBvc2l0aW9uLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcmFuc3BhcmVudCBvdmVybGF5XG4gICAgICAgIGlmIChcInRyYW5zcGFyZW50T3ZlcmxheVwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIENvZXJjZSB0aGUgdmFsdWUgdG8gYSBib29sZWFuXG4gICAgICAgICAgICB0aGlzLnRyYW5zcGFyZW50T3ZlcmxheSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShjaGFuZ2VzLnRyYW5zcGFyZW50T3ZlcmxheS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gaW5pdFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaW5wdXQgaXMgbm90IGFuIGVtcHR5IHN0cmluZ1xuICAgICAgICBpZiAodGhpcy5uYW1lID09PSBcIlwiKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLl9uaWNlVXRpbHNTZXJ2aWNlLnJhbmRvbUlkKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdWJzY3JpYmUgdG8gdGhlICdOYXZpZ2F0aW9uRW5kJyBldmVudFxuICAgICAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbW9kZSBpcyAnb3ZlcicgYW5kIHRoZSBuYXZpZ2F0aW9uIGlzIG9wZW5lZC4uLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwib3ZlclwiICYmIHRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbW9kZSBpcyAnc2lkZScgYW5kIHRoZSBhc2lkZSBpcyBhY3RpdmUuLi5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSBcInNpZGVcIiAmJiB0aGlzLmFjdGl2ZUFzaWRlSXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBhc2lkZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQXNpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9oaW50U2VydmljZS5oYXNBY3RpdmVIaW50JC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCkpLnN1YnNjcmliZShoYXNIaW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFzSGludCA9IGhhc0hpbnQ7XG4gICAgICAgICAgICB0aGlzLmhvdmVyZWRDaGFuZ2VkLm5leHQoKHRoaXMuaG92ZXJlZCB8fCB0aGlzLl9mb3JjZUhvdmVyZWQpIHx8IHRoaXMuaGFzSGludCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFmdGVyIHZpZXcgaW5pdFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAvLyBSZXR1cm4gaWYgJ25hdmlnYXRpb24gY29udGVudCcgZWxlbWVudCBkb2VzIG5vdCBleGlzdFxuICAgICAgICAgICAgaWYgKCF0aGlzLl9uYXZpZ2F0aW9uQ29udGVudEVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiAnbmF2aWdhdGlvbiBjb250ZW50JyBlbGVtZW50IGRvZXNuJ3QgaGF2ZVxuICAgICAgICAgICAgLy8gcGVyZmVjdCBzY3JvbGxiYXIgYWN0aXZhdGVkIG9uIGl0Li4uXG4gICAgICAgICAgICBpZiAoIXRoaXMuX25hdmlnYXRpb25Db250ZW50RWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJwc1wiKSkge1xuICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGFjdGl2ZSBpdGVtXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuX25hdmlnYXRpb25Db250ZW50RWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWFjdGl2ZVwiKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBhY3RpdmUgaXRlbSBleGlzdHMsIHNjcm9sbCBpdCBpbnRvIHZpZXdcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdGVtLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBHbyB0aHJvdWdoIGFsbCB0aGUgc2Nyb2xsYmFyIGRpcmVjdGl2ZXNcbiAgICAgICAgICAgICAgICB0aGlzLl9uaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcy5mb3JFYWNoKChuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBpZiBub3QgZW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5pY2VTY3JvbGxiYXJEaXJlY3RpdmUuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFNjcm9sbCB0byB0aGUgYWN0aXZlIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgbmljZVNjcm9sbGJhckRpcmVjdGl2ZS5zY3JvbGxUb0VsZW1lbnQoXCIubmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0tYWN0aXZlXCIsIC0xMjAsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEAgUHVibGljIG1ldGhvZHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogT3BlbiB0aGUgbmF2aWdhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIG5hdmlnYXRpb24gaXMgYWxyZWFkeSBvcGVuXG4gICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHRoZSBvcGVuZWRcbiAgICAgICAgdGhpcy5fdG9nZ2xlT3BlbmVkKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIG5hdmlnYXRpb24gaXMgYWxyZWFkeSBjbG9zZWRcbiAgICAgICAgaWYgKCF0aGlzLm9wZW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xvc2UgdGhlIGFzaWRlXG4gICAgICAgIHRoaXMuY2xvc2VBc2lkZSgpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgb3BlbmVkXG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wZW5lZChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gVG9nZ2xlXG4gICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVuIHRoZSBhc2lkZVxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuQXNpZGUoaXRlbTogTmljZU5hdmlnYXRpb25JdGVtKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGUgaXRlbSBpcyBkaXNhYmxlZFxuICAgICAgICBpZiAoaXRlbS5kaXNhYmxlZCB8fCAhaXRlbS5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3BlblxuICAgICAgICB0aGlzLmFjdGl2ZUFzaWRlSXRlbUlkID0gaXRlbS5pZDtcblxuICAgICAgICAvLyBTaG93IHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICAgIHRoaXMuX3Nob3dBc2lkZU92ZXJsYXkoKTtcblxuICAgICAgICAvLyBNYXJrIGZvciBjaGVja1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZSB0aGUgYXNpZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2VBc2lkZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gQ2xvc2VcbiAgICAgICAgdGhpcy5hY3RpdmVBc2lkZUl0ZW1JZCA9IG51bGw7XG5cbiAgICAgICAgLy8gSGlkZSB0aGUgYXNpZGUgb3ZlcmxheVxuICAgICAgICB0aGlzLl9oaWRlQXNpZGVPdmVybGF5KCk7XG5cbiAgICAgICAgLy8gTWFyayBmb3IgY2hlY2tcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlIHRoZSBhc2lkZVxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVBc2lkZShpdGVtOiBOaWNlTmF2aWdhdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgLy8gVG9nZ2xlXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUFzaWRlSXRlbUlkID09PSBpdGVtLmlkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQXNpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkFzaWRlKGl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBAIFByaXZhdGUgbWV0aG9kc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiBFbmFibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZW5hYmxlQW5pbWF0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSBhbmltYXRpb25zIGFyZSBhbHJlYWR5IGVuYWJsZWRcbiAgICAgICAgaWYgKHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbmFibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZGlzYWJsZUFuaW1hdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGUgYW5pbWF0aW9ucyBhcmUgYWxyZWFkeSBkaXNhYmxlZFxuICAgICAgICBpZiAoIXRoaXMuX2FuaW1hdGlvbnNFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEaXNhYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvdyB0aGUgb3ZlcmxheVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaG93T3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZXJlIGlzIGFscmVhZHkgYW4gb3ZlcmxheVxuICAgICAgICBpZiAodGhpcy5fYXNpZGVPdmVybGF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgdGhlIG92ZXJsYXkgZWxlbWVudFxuICAgICAgICB0aGlzLl9vdmVybGF5ID0gdGhpcy5fcmVuZGVyZXIyLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgICAgLy8gQWRkIGEgY2xhc3MgdG8gdGhlIG92ZXJsYXkgZWxlbWVudFxuICAgICAgICB0aGlzLl9vdmVybGF5LmNsYXNzTGlzdC5hZGQoXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tb3ZlcmxheVwiKTtcblxuICAgICAgICAvLyBBZGQgYSBjbGFzcyBkZXBlbmRpbmcgb24gdGhlIHRyYW5zcGFyZW50T3ZlcmxheSBvcHRpb25cbiAgICAgICAgaWYgKHRoaXMudHJhbnNwYXJlbnRPdmVybGF5KSB7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5LmNsYXNzTGlzdC5hZGQoXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tb3ZlcmxheS10cmFuc3BhcmVudFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFwcGVuZCB0aGUgb3ZlcmxheSB0byB0aGUgcGFyZW50IG9mIHRoZSBuYXZpZ2F0aW9uXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCwgdGhpcy5fb3ZlcmxheSk7XG5cbiAgICAgICAgLy8gRW5hYmxlIGJsb2NrIHNjcm9sbCBzdHJhdGVneVxuICAgICAgICB0aGlzLl9zY3JvbGxTdHJhdGVneS5lbmFibGUoKTtcblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGVudGVyIGFuaW1hdGlvbiBhbmQgYXR0YWNoIGl0IHRvIHRoZSBwbGF5ZXJcbiAgICAgICAgdGhpcy5fcGxheWVyID0gdGhpcy5fYW5pbWF0aW9uQnVpbGRlci5idWlsZChbXG4gICAgICAgICAgICBhbmltYXRlKFwiMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSlcIiwgc3R5bGUoe29wYWNpdHk6IDF9KSlcbiAgICAgICAgXSkuY3JlYXRlKHRoaXMuX292ZXJsYXkpO1xuXG4gICAgICAgIC8vIFBsYXkgdGhlIGFuaW1hdGlvblxuICAgICAgICB0aGlzLl9wbGF5ZXIucGxheSgpO1xuXG4gICAgICAgIC8vIEFkZCBhbiBldmVudCBsaXN0ZW5lciB0byB0aGUgb3ZlcmxheVxuICAgICAgICB0aGlzLl9vdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVPdmVybGF5Q2xpY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGUgdGhlIG92ZXJsYXlcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGlkZU92ZXJsYXkoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fb3ZlcmxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBsZWF2ZSBhbmltYXRpb24gYW5kIGF0dGFjaCBpdCB0byB0aGUgcGxheWVyXG4gICAgICAgIHRoaXMuX3BsYXllciA9IHRoaXMuX2FuaW1hdGlvbkJ1aWxkZXIuYnVpbGQoW1xuICAgICAgICAgICAgYW5pbWF0ZShcIjMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpXCIsIHN0eWxlKHtvcGFjaXR5OiAwfSkpXG4gICAgICAgIF0pLmNyZWF0ZSh0aGlzLl9vdmVybGF5KTtcblxuICAgICAgICAvLyBQbGF5IHRoZSBhbmltYXRpb25cbiAgICAgICAgdGhpcy5fcGxheWVyLnBsYXkoKTtcblxuICAgICAgICAvLyBPbmNlIHRoZSBhbmltYXRpb24gaXMgZG9uZS4uLlxuICAgICAgICB0aGlzLl9wbGF5ZXIub25Eb25lKCgpID0+IHtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIG92ZXJsYXkgc3RpbGwgZXhpc3RzLi4uXG4gICAgICAgICAgICBpZiAodGhpcy5fb3ZlcmxheSkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVPdmVybGF5Q2xpY2spO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvdmVybGF5XG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX292ZXJsYXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXkgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEaXNhYmxlIGJsb2NrIHNjcm9sbCBzdHJhdGVneVxuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZGlzYWJsZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3Nob3dBc2lkZU92ZXJsYXkoKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIG92ZXJsYXlcbiAgICAgICAgaWYgKHRoaXMuX2FzaWRlT3ZlcmxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBhc2lkZSBvdmVybGF5IGVsZW1lbnRcbiAgICAgICAgdGhpcy5fYXNpZGVPdmVybGF5ID0gdGhpcy5fcmVuZGVyZXIyLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgICAgLy8gQWRkIGEgY2xhc3MgdG8gdGhlIGFzaWRlIG92ZXJsYXkgZWxlbWVudFxuICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkuY2xhc3NMaXN0LmFkZChcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1hc2lkZS1vdmVybGF5XCIpO1xuXG4gICAgICAgIC8vIEFwcGVuZCB0aGUgYXNpZGUgb3ZlcmxheSB0byB0aGUgcGFyZW50IG9mIHRoZSBuYXZpZ2F0aW9uXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCwgdGhpcy5fYXNpZGVPdmVybGF5KTtcblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGVudGVyIGFuaW1hdGlvbiBhbmQgYXR0YWNoIGl0IHRvIHRoZSBwbGF5ZXJcbiAgICAgICAgdGhpcy5fcGxheWVyID1cbiAgICAgICAgICAgIHRoaXMuX2FuaW1hdGlvbkJ1aWxkZXJcbiAgICAgICAgICAgICAgICAuYnVpbGQoW1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRlKFwiMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSlcIiwgc3R5bGUoe29wYWNpdHk6IDF9KSlcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUodGhpcy5fYXNpZGVPdmVybGF5KTtcblxuICAgICAgICAvLyBQbGF5IHRoZSBhbmltYXRpb25cbiAgICAgICAgdGhpcy5fcGxheWVyLnBsYXkoKTtcblxuICAgICAgICAvLyBBZGQgYW4gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgICAgdGhpcy5fYXNpZGVPdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVBc2lkZU92ZXJsYXlDbGljayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZSB0aGUgYXNpZGUgb3ZlcmxheVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9oaWRlQXNpZGVPdmVybGF5KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2FzaWRlT3ZlcmxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBsZWF2ZSBhbmltYXRpb24gYW5kIGF0dGFjaCBpdCB0byB0aGUgcGxheWVyXG4gICAgICAgIHRoaXMuX3BsYXllciA9XG4gICAgICAgICAgICB0aGlzLl9hbmltYXRpb25CdWlsZGVyXG4gICAgICAgICAgICAgICAgLmJ1aWxkKFtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZShcIjMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpXCIsIHN0eWxlKHtvcGFjaXR5OiAwfSkpXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKHRoaXMuX2FzaWRlT3ZlcmxheSk7XG5cbiAgICAgICAgLy8gUGxheSB0aGUgYW5pbWF0aW9uXG4gICAgICAgIHRoaXMuX3BsYXllci5wbGF5KCk7XG5cbiAgICAgICAgLy8gT25jZSB0aGUgYW5pbWF0aW9uIGlzIGRvbmUuLi5cbiAgICAgICAgdGhpcy5fcGxheWVyLm9uRG9uZSgoKSA9PiB7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBhc2lkZSBvdmVybGF5IHN0aWxsIGV4aXN0cy4uLlxuICAgICAgICAgICAgaWYgKHRoaXMuX2FzaWRlT3ZlcmxheSkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZUFzaWRlT3ZlcmxheUNsaWNrKTtcblxuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgYXNpZGUgb3ZlcmxheVxuICAgICAgICAgICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2FzaWRlT3ZlcmxheSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXNpZGVPdmVybGF5ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gbW91c2VlbnRlclxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIpXG4gICAgcHVibGljIF9vbk1vdXNlZW50ZXIoKTogdm9pZCB7XG4gICAgICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICB0aGlzLl9lbmFibGVBbmltYXRpb25zKCk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSBob3ZlcmVkXG4gICAgICAgIHRoaXMuaG92ZXJlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaG92ZXJlZENoYW5nZWQubmV4dCh0aGlzLmhvdmVyZWQgfHwgdGhpcy5fZm9yY2VIb3ZlcmVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBtb3VzZWxlYXZlXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIilcbiAgICBwdWJsaWMgX29uTW91c2VsZWF2ZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gRW5hYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMoKTtcblxuICAgICAgICAvLyBTZXQgdGhlIGhvdmVyZWRcbiAgICAgICAgdGhpcy5ob3ZlcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaG92ZXJlZENoYW5nZWQubmV4dCh0aGlzLmhvdmVyZWQgfHwgdGhpcy5fZm9yY2VIb3ZlcmVkIHx8IHRoaXMuaGFzSGludCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3Blbi9jbG9zZSB0aGUgbmF2aWdhdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIG9wZW5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3RvZ2dsZU9wZW5lZChvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIC8vIFNldCB0aGUgb3BlbmVkXG4gICAgICAgIHRoaXMub3BlbmVkID0gb3BlbjtcblxuICAgICAgICAvLyBFbmFibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgdGhpcy5fZW5hYmxlQW5pbWF0aW9ucygpO1xuXG4gICAgICAgIC8vIElmIHRoZSBuYXZpZ2F0aW9uIG9wZW5lZCwgYW5kIHRoZSBtb2RlXG4gICAgICAgIC8vIGlzICdvdmVyJywgc2hvdyB0aGUgb3ZlcmxheVxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSBcIm92ZXJcIikge1xuICAgICAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd092ZXJsYXkoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGlkZU92ZXJsYXkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4ZWN1dGUgdGhlIG9ic2VydmFibGVcbiAgICAgICAgdGhpcy5vcGVuZWRDaGFuZ2VkLm5leHQob3Blbik7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi13cmFwcGVyXCI+XG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25pY2VWZXJ0aWNhbE5hdmlnYXRpb25IZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDb250ZW50IC0tPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tY29udGVudFwiXG4gICAgICAgIG5pY2VTY3JvbGxiYXJcbiAgICAgICAgW25pY2VTY3JvbGxiYXJPcHRpb25zXT1cInsgd2hlZWxQcm9wYWdhdGlvbjogaW5uZXIsIHN1cHByZXNzU2Nyb2xsWDogdHJ1ZSB9XCJcbiAgICAgICAgI25hdmlnYXRpb25Db250ZW50XG4gICAgPlxuICAgICAgICA8IS0tIENvbnRlbnQgaGVhZGVyIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbnRlbnQtaGVhZGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmljZVZlcnRpY2FsTmF2aWdhdGlvbkNvbnRlbnRIZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEl0ZW1zIC0tPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIG5hdmlnYXRpb247IHRyYWNrQnk6IHRyYWNrQnlGblwiIFtALmRpc2FibGVkXT1cIiFhbmltYXRlTmV4dE5hdkNoYW5nZVwiIEBzbGlkZUluUmlnaHQ+XG4gICAgICAgICAgICA8IS0tIFNraXAgdGhlIGhpZGRlbiBpdGVtcyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGl0ZW0gfCBuaWNlU2hvdWxkSGlkZSB8IGFzeW5jKVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gQXNpZGUgLS0+XG4gICAgICAgICAgICAgICAgPG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1hc2lkZS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnYXNpZGUnXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbUlkXT1cImFjdGl2ZUFzaWRlSXRlbUlkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9Db2xsYXBzZV09XCJhdXRvQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2tpcENoaWxkcmVuXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBzXT1cInNob3dUb29sdGlwc1wiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFzaWRlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtaXRlbT5cblxuICAgICAgICAgICAgICAgIDwhLS0gQmFzaWMgLS0+XG4gICAgICAgICAgICAgICAgPG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1iYXNpYy1pdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnYmFzaWMnXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBzXT1cInNob3dUb29sdGlwc1wiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYmFzaWMtaXRlbT5cblxuICAgICAgICAgICAgICAgIDwhLS0gQ29sbGFwc2FibGUgLS0+XG4gICAgICAgICAgICAgICAgPG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1jb2xsYXBzYWJsZS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnY29sbGFwc2FibGUnXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXV0b0NvbGxhcHNlXT1cImF1dG9Db2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcHNdPVwic2hvd1Rvb2x0aXBzXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICAgICAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1jb2xsYXBzYWJsZS1pdGVtPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBEaXZpZGVyIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZGl2aWRlci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnZGl2aWRlcidcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWRpdmlkZXItaXRlbT5cblxuICAgICAgICAgICAgICAgIDwhLS0gR3JvdXAgLS0+XG4gICAgICAgICAgICAgICAgPG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1ncm91cC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnZ3JvdXAnXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXV0b0NvbGxhcHNlXT1cImF1dG9Db2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcHNdPVwic2hvd1Rvb2x0aXBzXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICAgICAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1ncm91cC1pdGVtPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBTcGFjZXIgLS0+XG4gICAgICAgICAgICAgICAgPG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1zcGFjZXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ3NwYWNlcidcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLXNwYWNlci1pdGVtPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQ29udGVudCBmb290ZXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tY29udGVudC1mb290ZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltuaWNlVmVydGljYWxOYXZpZ2F0aW9uQ29udGVudEZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEZvb3RlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWZvb3RlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmljZVZlcnRpY2FsTmF2aWdhdGlvbkZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBBc2lkZSAtLT5cbjxkaXZcbiAgICBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1hc2lkZS13cmFwcGVyXCJcbiAgICAqbmdJZj1cImFjdGl2ZUFzaWRlSXRlbUlkXCJcbiAgICBuaWNlU2Nyb2xsYmFyXG4gICAgW25pY2VTY3JvbGxiYXJPcHRpb25zXT1cInsgd2hlZWxQcm9wYWdhdGlvbjogZmFsc2UsIHN1cHByZXNzU2Nyb2xsWDogdHJ1ZSB9XCJcbiAgICBbQGZhZGVJbkxlZnRdPVwicG9zaXRpb24gPT09ICdsZWZ0J1wiXG4gICAgW0BmYWRlSW5SaWdodF09XCJwb3NpdGlvbiA9PT0gJ3JpZ2h0J1wiXG4gICAgW0BmYWRlT3V0TGVmdF09XCJwb3NpdGlvbiA9PT0gJ2xlZnQnXCJcbiAgICBbQGZhZGVPdXRSaWdodF09XCJwb3NpdGlvbiA9PT0gJ3JpZ2h0J1wiXG4+XG5cbiAgICA8IS0tIEl0ZW1zIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbmF2aWdhdGlvbjsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICAgIDwhLS0gU2tpcCB0aGUgaGlkZGVuIGl0ZW1zIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGl0ZW0uaGlkZGVuICYmICFpdGVtLmhpZGRlbihpdGVtKSkgfHwgIWl0ZW0uaGlkZGVuXCI+XG4gICAgICAgICAgICA8IS0tIEFzaWRlIC0tPlxuICAgICAgICAgICAgPG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1hc2lkZS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdhc2lkZScgJiYgaXRlbS5pZCA9PT0gYWN0aXZlQXNpZGVJdGVtSWRcIlxuICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIFthdXRvQ29sbGFwc2VdPVwiYXV0b0NvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBzXT1cInNob3dUb29sdGlwc1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLWl0ZW0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=