@ngrdt/menu 0.0.9 → 0.0.11
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.
|
@@ -46,7 +46,7 @@ export class RdtMenuComponent extends RdtMenuBaseComponent {
|
|
|
46
46
|
provide: RdtMenuBaseComponent,
|
|
47
47
|
useExisting: RdtMenuComponent,
|
|
48
48
|
},
|
|
49
|
-
], usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"menu-button-container\"\r\n (pointerenter)=\"onItemPointerEnter(parsedItem)\"\r\n>\r\n <ng-template\r\n rdtButtonOutlet\r\n [inputs]=\"buttonInputs\"\r\n (click$)=\"toggle()\"\r\n #outlet=\"rdtButtonOutlet\"\r\n />\r\n</div>\r\n\r\n<rdt-menu-overlay\r\n *ngIf=\"parsedItem\"\r\n [anchorElement]=\"outlet.instance?.anchorElement\"\r\n [item]=\"$any(parsedItem)\"\r\n [expanded]=\"expanded === parsedItem\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n/>\r\n", styles: ["rdt-menu{display:block;position:relative}rdt-menu .menu-button-container{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RdtButtonOutletDirective, selector: "[rdtButtonOutlet]", inputs: ["inputs"], outputs: ["click$"], exportAs: ["rdtButtonOutlet"] }, { kind: "component", type: i3.RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
49
|
+
], usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"menu-button-container\"\r\n (pointerenter)=\"onItemPointerEnter(parsedItem)\"\r\n>\r\n <ng-template\r\n rdtButtonOutlet\r\n [inputs]=\"buttonInputs\"\r\n (click$)=\"toggle()\"\r\n #outlet=\"rdtButtonOutlet\"\r\n />\r\n</div>\r\n\r\n<rdt-menu-overlay\r\n *ngIf=\"parsedItem\"\r\n [anchorElement]=\"outlet.instance?.anchorElement\"\r\n [item]=\"$any(parsedItem)\"\r\n [expanded]=\"expanded === parsedItem\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n/>\r\n", styles: ["a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;border:none;text-decoration:none}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}rdt-menu{display:block;position:relative}rdt-menu .menu-button-container{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RdtButtonOutletDirective, selector: "[rdtButtonOutlet]", inputs: ["inputs"], outputs: ["click$"], exportAs: ["rdtButtonOutlet"] }, { kind: "component", type: i3.RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
50
50
|
}
|
|
51
51
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuComponent, decorators: [{
|
|
52
52
|
type: Component,
|
|
@@ -55,7 +55,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
55
55
|
provide: RdtMenuBaseComponent,
|
|
56
56
|
useExisting: RdtMenuComponent,
|
|
57
57
|
},
|
|
58
|
-
], template: "<div\r\n class=\"menu-button-container\"\r\n (pointerenter)=\"onItemPointerEnter(parsedItem)\"\r\n>\r\n <ng-template\r\n rdtButtonOutlet\r\n [inputs]=\"buttonInputs\"\r\n (click$)=\"toggle()\"\r\n #outlet=\"rdtButtonOutlet\"\r\n />\r\n</div>\r\n\r\n<rdt-menu-overlay\r\n *ngIf=\"parsedItem\"\r\n [anchorElement]=\"outlet.instance?.anchorElement\"\r\n [item]=\"$any(parsedItem)\"\r\n [expanded]=\"expanded === parsedItem\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n/>\r\n", styles: ["rdt-menu{display:block;position:relative}rdt-menu .menu-button-container{display:inline-block}\n"] }]
|
|
58
|
+
], template: "<div\r\n class=\"menu-button-container\"\r\n (pointerenter)=\"onItemPointerEnter(parsedItem)\"\r\n>\r\n <ng-template\r\n rdtButtonOutlet\r\n [inputs]=\"buttonInputs\"\r\n (click$)=\"toggle()\"\r\n #outlet=\"rdtButtonOutlet\"\r\n />\r\n</div>\r\n\r\n<rdt-menu-overlay\r\n *ngIf=\"parsedItem\"\r\n [anchorElement]=\"outlet.instance?.anchorElement\"\r\n [item]=\"$any(parsedItem)\"\r\n [expanded]=\"expanded === parsedItem\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n/>\r\n", styles: ["a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;border:none;text-decoration:none}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}rdt-menu{display:block;position:relative}rdt-menu .menu-button-container{display:inline-block}\n"] }]
|
|
59
59
|
}], propDecorators: { dataTestId: [{
|
|
60
60
|
type: Input
|
|
61
61
|
}], item: [{
|
|
@@ -26,7 +26,7 @@ export class RdtMenuBarComponent extends RdtMenuBaseComponent {
|
|
|
26
26
|
provide: RdtMenuBaseComponent,
|
|
27
27
|
useExisting: RdtMenuBarComponent,
|
|
28
28
|
},
|
|
29
|
-
], usesInheritance: true, ngImport: i0, template: "<ul class=\"menu-bar-item-container\" role=\"presentation\">\r\n <li\r\n *ngFor=\"let item of parsedItems; let i = index\"\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n
|
|
29
|
+
], usesInheritance: true, ngImport: i0, template: "<ul class=\"menu-bar-item-container\" role=\"presentation\">\r\n <li\r\n *ngFor=\"let item of parsedItems; let i = index\"\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n (pointerleave)=\"onItemPointerLeave(item)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expanded\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"expand_more\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n -->\r\n <span class=\"menu-bar-item-icon\" *ngIf=\"item.items\">v</span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!--\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [target]=\"item.target!\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expanded\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: ["a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;border:none;text-decoration:none}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--sub-menu-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;padding-left:0}.menu-bar-item{cursor:pointer;pointer-events:all;color:var(--white);margin:0 .5rem;position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{background-color:var(--rdt-menu-bar-item-background-route-active)}.menu-bar-item[aria-expanded=true] .menu-bar-item-content{background-color:var(--rdt-menu-bar-item-background-expanded)}.menu-bar-item:before{content:\"\";display:block;position:absolute;top:calc(-1 * var(--rdt-menu-bar-item-hitbox-y));left:calc(-1 * var(--rdt-menu-bar-item-hitbox-x));width:calc(100% + 2 * var(--rdt-menu-bar-item-hitbox-x));height:calc(100% + 2 * var(--rdt-menu-bar-item-hitbox-y));z-index:-1}.menu-bar-item-content{display:flex;align-items:center;padding:var(--rdt-menu-bar-item-padding);color:inherit!important;border-radius:var(--rdt-menu-bar-item-border-radius);overflow:hidden;background-color:var(--rdt-menu-bar-item-background)}.menu-bar-item-content:hover{background-color:var(--rdt-menu-bar-item-background-hover)}.menu-bar-item-content.focus-visible:focus,.menu-bar-item-content:focus-visible{outline:none;background-color:var(--rdt-menu-bar-item-background-focus)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RdtAnyRouteActiveDirective, selector: "[rdtAnyRouteActive]", inputs: ["anyRouteActive", "watchedRoutes", "anyRouteActiveOptions", "ariaCurrentWhenActive"] }, { kind: "directive", type: i4.RdtKeyListenerDirective, selector: "[rdtKeyListener]", outputs: ["rdtKeyListener"] }, { kind: "component", type: i5.RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
30
30
|
}
|
|
31
31
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuBarComponent, decorators: [{
|
|
32
32
|
type: Component,
|
|
@@ -35,7 +35,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
35
35
|
provide: RdtMenuBaseComponent,
|
|
36
36
|
useExisting: RdtMenuBarComponent,
|
|
37
37
|
},
|
|
38
|
-
], template: "<ul class=\"menu-bar-item-container\" role=\"presentation\">\r\n <li\r\n *ngFor=\"let item of parsedItems; let i = index\"\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n
|
|
38
|
+
], template: "<ul class=\"menu-bar-item-container\" role=\"presentation\">\r\n <li\r\n *ngFor=\"let item of parsedItems; let i = index\"\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n (pointerleave)=\"onItemPointerLeave(item)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expanded\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"expand_more\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n -->\r\n <span class=\"menu-bar-item-icon\" *ngIf=\"item.items\">v</span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!--\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [target]=\"item.target!\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expanded\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: ["a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;border:none;text-decoration:none}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--sub-menu-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;padding-left:0}.menu-bar-item{cursor:pointer;pointer-events:all;color:var(--white);margin:0 .5rem;position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{background-color:var(--rdt-menu-bar-item-background-route-active)}.menu-bar-item[aria-expanded=true] .menu-bar-item-content{background-color:var(--rdt-menu-bar-item-background-expanded)}.menu-bar-item:before{content:\"\";display:block;position:absolute;top:calc(-1 * var(--rdt-menu-bar-item-hitbox-y));left:calc(-1 * var(--rdt-menu-bar-item-hitbox-x));width:calc(100% + 2 * var(--rdt-menu-bar-item-hitbox-x));height:calc(100% + 2 * var(--rdt-menu-bar-item-hitbox-y));z-index:-1}.menu-bar-item-content{display:flex;align-items:center;padding:var(--rdt-menu-bar-item-padding);color:inherit!important;border-radius:var(--rdt-menu-bar-item-border-radius);overflow:hidden;background-color:var(--rdt-menu-bar-item-background)}.menu-bar-item-content:hover{background-color:var(--rdt-menu-bar-item-background-hover)}.menu-bar-item-content.focus-visible:focus,.menu-bar-item-content:focus-visible{outline:none;background-color:var(--rdt-menu-bar-item-background-focus)}\n"] }]
|
|
39
39
|
}], propDecorators: { items: [{
|
|
40
40
|
type: Input
|
|
41
41
|
}], headerHeight: [{
|
|
@@ -48,4 +48,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
48
48
|
type: HostBinding,
|
|
49
49
|
args: ['attr.role']
|
|
50
50
|
}] } });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1iYXIvcmR0LW1lbnUtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1iYXIvcmR0LW1lbnUtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUU1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7QUFlbkQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLG9CQUFvQjtJQUMzRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQW9CO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDTyxNQUFNLENBQWlCO0lBRy9CLFlBQVksR0FBRyxDQUFDLENBQUM7SUFHakIsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUdULFFBQVEsR0FBRyxTQUFTLENBQUM7dUdBbkJsQixtQkFBbUI7MkZBQW5CLG1CQUFtQixxR0FZVixlQUFlLGtEQUdmLGVBQWUsd0VBdEJ4QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxvQkFBb0I7Z0JBQzdCLFdBQVcsRUFBRSxtQkFBbUI7YUFDakM7U0FDRixpREN2QkgsdWdIQStHQTs7MkZEdEZhLG1CQUFtQjtrQkFiL0IsU0FBUzsrQkFDRSxjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksYUFDMUI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLG9CQUFvQjs0QkFDN0IsV0FBVyxxQkFBcUI7eUJBQ2pDO3FCQUNGOzhCQUlHLEtBQUs7c0JBRFIsS0FBSztnQkFZTixZQUFZO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUlyQyxZQUFZO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUk3QixRQUFRO3NCQURmLFdBQVc7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIElucHV0LFxyXG4gIG51bWJlckF0dHJpYnV0ZSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmR0TWVudUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9tZW51LWJhc2UvcmR0LW1lbnUtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZHRNZW51SXRlbSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IHBhcnNlTWVudUl0ZW1zIH0gZnJvbSAnLi4vcHJpdmF0ZS1tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyZHQtbWVudS1iYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZHQtbWVudS1iYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9yZHQtbWVudS1iYXIuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IFJkdE1lbnVCYXNlQ29tcG9uZW50LFxyXG4gICAgICB1c2VFeGlzdGluZzogUmR0TWVudUJhckNvbXBvbmVudCxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdE1lbnVCYXJDb21wb25lbnQgZXh0ZW5kcyBSZHRNZW51QmFzZUNvbXBvbmVudCB7XHJcbiAgQElucHV0KClcclxuICBnZXQgaXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XHJcbiAgfVxyXG4gIHNldCBpdGVtcyh2YWx1ZTogUmR0TWVudUl0ZW1bXSkge1xyXG4gICAgdGhpcy5faXRlbXMgPSB2YWx1ZTtcclxuICAgIHRoaXMuYWxsUGFyc2VkSXRlbXMgPSBwYXJzZU1lbnVJdGVtcyh2YWx1ZSwgdGhpcy5pbmplY3Rvcik7XHJcbiAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2l0ZW1zITogUmR0TWVudUl0ZW1bXTtcclxuXHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcclxuICBoZWFkZXJIZWlnaHQgPSAwO1xyXG5cclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxyXG4gIGZvb3RlckhlaWdodCA9IDA7XHJcblxyXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcclxuICBwcml2YXRlIHJvbGVBdHRyID0gJ21lbnViYXInO1xyXG59XHJcbiIsIjx1bCBjbGFzcz1cIm1lbnUtYmFyLWl0ZW0tY29udGFpbmVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gIDxsaVxyXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcGFyc2VkSXRlbXM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgY2xhc3M9XCJtZW51LWJhci1pdGVtXCJcclxuICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxyXG4gICAgcmR0QW55Um91dGVBY3RpdmU9XCJtZW51LWJhci1pdGVtLXJvdXRlLWFjdGl2ZVwiXHJcbiAgICBbd2F0Y2hlZFJvdXRlc109XCJnZXRDaGlsZFJvdXRlcyhpdGVtKVwiXHJcbiAgICAocmR0S2V5TGlzdGVuZXIpPVwib25LZXlEb3duKGksICRldmVudClcIlxyXG4gICAgKHBvaW50ZXJsZWF2ZSk9XCJvbkl0ZW1Qb2ludGVyTGVhdmUoaXRlbSlcIlxyXG4gICAgI2FuY2hvckVsXHJcbiAgPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLnJvdXRlckxpbmsgJiYgIWl0ZW0uZXh0ZXJuYWxMaW5rXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1jb250ZW50XCJcclxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtKVwiXHJcbiAgICAgICAgKHBvaW50ZXJlbnRlcik9XCJvbkl0ZW1Qb2ludGVyRW50ZXIoaXRlbSlcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5pdGVtcyA/ICdtZW51JyA6IG51bGxcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXRlbSA9PT0gZXhwYW5kZWRcIlxyXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxyXG4gICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIml0ZW0uZGF0YVRlc3RJZFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBpdGVtLmxhYmVsIH19XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWJhci1pdGVtLXJpZ2h0LWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwhLS0gVE9ET1xyXG4gICAgICAgICAgPHJkdC1pY29uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pdGVtc1wiXHJcbiAgICAgICAgICAgIG5hbWU9XCJleHBhbmRfbW9yZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1pY29uXCJcclxuICAgICAgICAgICAgaW52ZXJ0ZWRcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgICBbbmFtZV09XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1lbnUtYmFyLWl0ZW0taWNvblwiXHJcbiAgICAgICAgICAgIGludmVydGVkXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIC0tPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWJhci1pdGVtLWljb25cIiAqbmdJZj1cIml0ZW0uaXRlbXNcIj52PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbGlua0JvZHkgbGV0LWl0ZW0+XHJcbiAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWJhci1pdGVtLXJpZ2h0LWNvbnRlbnRcIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc2hvcnRjdXRcIiBjbGFzcz1cIm1lbnUtaXRlbS1zaG9ydGN1dFwiPlxyXG4gICAgICAgICAge3sgaXRlbS5zaG9ydGN1dC5sYWJlbCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8IS0tXHJcbiAgICAgICAgPHJkdC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICBbbmFtZV09XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWljb25cIlxyXG4gICAgICAgICAgaW52ZXJ0ZWRcclxuICAgICAgICAvPlxyXG4gICAgICAtLT48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ucm91dGVyTGlua1wiPlxyXG4gICAgICA8YVxyXG4gICAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIlxyXG4gICAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXQhXCJcclxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaW5rQm9keTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9hPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uZXh0ZXJuYWxMaW5rXCI+XHJcbiAgICAgIDxhXHJcbiAgICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgICBjbGFzcz1cIm1lbnUtYmFyLWl0ZW0tY29udGVudFwiXHJcbiAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICAgIFtocmVmXT1cIml0ZW0uZXh0ZXJuYWxMaW5rXCJcclxuICAgICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcclxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaW5rQm9keTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9hPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPHJkdC1tZW51LW92ZXJsYXlcclxuICAgICAgKm5nSWY9XCJpdGVtLml0ZW1zXCJcclxuICAgICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXHJcbiAgICAgIFtleHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZFwiXHJcbiAgICAgIFthdXRvZm9jdXNJdGVtXT1cImF1dG9mb2N1c1N1Ym1lbnVJdGVtXCJcclxuICAgICAgW3ByZWZlcnJlZEhvcml6b250YWxEaXJdPVwicHJlZmVycmVkSG9yaXpvbnRhbERpclwiXHJcbiAgICAgIFtwcmVmZXJyZWRWZXJ0aWNhbERpcl09XCJwcmVmZXJyZWRWZXJ0aWNhbERpclwiXHJcbiAgICAgIFtsZXZlbF09XCIwXCJcclxuICAgICAgW2FuY2hvckVsZW1lbnRdPVwiYW5jaG9yRWxcIlxyXG4gICAgLz5cclxuICA8L2xpPlxyXG48L3VsPlxyXG4iXX0=
|
|
@@ -179,15 +179,24 @@ export class RdtMenuOverlayComponent {
|
|
|
179
179
|
this.recalculateChildren();
|
|
180
180
|
}
|
|
181
181
|
onItemPointerEnter(item) {
|
|
182
|
-
if (this.topLevelMenu.openOnHover
|
|
183
|
-
this.expandedChild !== item &&
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
182
|
+
if (this.topLevelMenu.openOnHover) {
|
|
183
|
+
if (this.expandedChild !== item && menuItemHasChildren(item)) {
|
|
184
|
+
this.autofocusSubmenuItem = null;
|
|
185
|
+
this.expandedChild = item;
|
|
186
|
+
}
|
|
187
|
+
let menu = this.parentMenu;
|
|
188
|
+
let item2 = this.item;
|
|
189
|
+
while (menu && !menu.expandedChild) {
|
|
190
|
+
menu.expandedChild = item2;
|
|
191
|
+
menu.expanded = true;
|
|
192
|
+
item2 = menu.item;
|
|
193
|
+
menu = menu.parentMenu;
|
|
194
|
+
}
|
|
187
195
|
}
|
|
188
196
|
}
|
|
189
197
|
onItemPointerLeave(item) {
|
|
190
|
-
if (this.
|
|
198
|
+
if (this.expandedChild &&
|
|
199
|
+
this.topLevelMenu.openOnHover &&
|
|
191
200
|
this.expandedChild === item &&
|
|
192
201
|
menuItemHasChildren(item)) {
|
|
193
202
|
this.autofocusSubmenuItem = null;
|
|
@@ -538,11 +547,11 @@ export class RdtMenuOverlayComponent {
|
|
|
538
547
|
.subscribe((event) => this.onTabKeyPress(event));
|
|
539
548
|
}
|
|
540
549
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
541
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: { item: "item", level: "level", preferredHorizontalDir: "preferredHorizontalDir", preferredVerticalDir: "preferredVerticalDir", expanded: "expanded", autofocusItem: "autofocusItem", anchorElement: "anchorElement" }, host: { listeners: { "window:focusout": "checkActiveElement($event)" }, properties: { "class.expanded": "this.expanded", "attr.role": "this.roleAttr", "attr.tabindex": "this.tabindexAttr", "style.z-index": "this.zIndex" } }, viewQueries: [{ propertyName: "menuItemContainer", first: true, predicate: ["menuItemContainer"], descendants: true }, { propertyName: "children", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: "focusableElements", predicate: ["focusableItem"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ul class=\"menu-item-container\" role=\"presentation\" #menuItemContainer>\r\n <li\r\n *ngFor=\"let item of item.items; let i = index\"\r\n role=\"presentation\"\r\n class=\"menu-item\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n rdtAnyRouteActive=\"menu-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (pointerleave)=\"onItemPointerLeave(item)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"chevron_right\"\r\n class=\"menu-item-icon\"\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n -->\r\n <span class=\"menu-item-icon\" *ngIf=\"item.items\">></span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Child menus exist only if this menu is expanded. -->\r\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items && expanded\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"horizontalDir?.dir!\"\r\n [preferredVerticalDir]=\"verticalDir?.dir!\"\r\n [level]=\"level + 1\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: [":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px));overflow-y:auto}:host.expanded{visibility:visible}.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-item-background)}.menu-item{cursor:pointer;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{background-color:var(--rdt-menu-item-background-route-active)}.menu-item-content{display:flex;align-items:center;padding:var(--rdt-menu-item-padding);width:100%;background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color)}.menu-item-content:hover{background-color:var(--rdt-menu-item-background-hover)}.menu-item-content.focus-visible:focus,.menu-item-content:focus-visible{background-color:var(--rdt-menu-item-background-focus);outline:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RdtAnyRouteActiveDirective, selector: "[rdtAnyRouteActive]", inputs: ["anyRouteActive", "watchedRoutes", "anyRouteActiveOptions", "ariaCurrentWhenActive"] }, { kind: "directive", type: i4.RdtKeyListenerDirective, selector: "[rdtKeyListener]", outputs: ["rdtKeyListener"] }, { kind: "component", type: RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
550
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: { item: "item", level: "level", preferredHorizontalDir: "preferredHorizontalDir", preferredVerticalDir: "preferredVerticalDir", expanded: "expanded", autofocusItem: "autofocusItem", anchorElement: "anchorElement" }, host: { listeners: { "window:focusout": "checkActiveElement($event)" }, properties: { "class.expanded": "this.expanded", "attr.role": "this.roleAttr", "attr.tabindex": "this.tabindexAttr", "style.z-index": "this.zIndex" } }, viewQueries: [{ propertyName: "menuItemContainer", first: true, predicate: ["menuItemContainer"], descendants: true }, { propertyName: "children", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: "focusableElements", predicate: ["focusableItem"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ul class=\"menu-item-container\" role=\"presentation\" #menuItemContainer>\r\n <li\r\n *ngFor=\"let item of item.items; let i = index\"\r\n role=\"presentation\"\r\n class=\"menu-item\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n rdtAnyRouteActive=\"menu-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (pointerleave)=\"onItemPointerLeave(item)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"chevron_right\"\r\n class=\"menu-item-icon\"\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n -->\r\n <span class=\"menu-item-icon\" *ngIf=\"item.items\">></span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Child menus exist only if this menu is expanded. -->\r\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items && expanded\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"horizontalDir?.dir!\"\r\n [preferredVerticalDir]=\"verticalDir?.dir!\"\r\n [level]=\"level + 1\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: [":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px));overflow-y:auto}:host.expanded{visibility:visible}.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-item-background)}.menu-item{cursor:pointer;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{background-color:var(--rdt-menu-item-background-route-active)}.menu-item:before{content:\"\";display:block;position:absolute;top:calc(-1 * var(--rdt-menu-item-hitbox-y));left:calc(-1 * var(--rdt-menu-item-hitbox-x));width:calc(100% + 2 * var(--rdt-menu-item-hitbox-x));height:calc(100% + 2 * var(--rdt-menu-item-hitbox-y));z-index:-1}.menu-item-content{display:flex;align-items:center;padding:var(--rdt-menu-item-padding);width:100%;background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color)}.menu-item-content:hover{background-color:var(--rdt-menu-item-background-hover)}.menu-item-content.focus-visible:focus,.menu-item-content:focus-visible{background-color:var(--rdt-menu-item-background-focus);outline:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RdtAnyRouteActiveDirective, selector: "[rdtAnyRouteActive]", inputs: ["anyRouteActive", "watchedRoutes", "anyRouteActiveOptions", "ariaCurrentWhenActive"] }, { kind: "directive", type: i4.RdtKeyListenerDirective, selector: "[rdtKeyListener]", outputs: ["rdtKeyListener"] }, { kind: "component", type: RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
542
551
|
}
|
|
543
552
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuOverlayComponent, decorators: [{
|
|
544
553
|
type: Component,
|
|
545
|
-
args: [{ selector: 'rdt-menu-overlay', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ul class=\"menu-item-container\" role=\"presentation\" #menuItemContainer>\r\n <li\r\n *ngFor=\"let item of item.items; let i = index\"\r\n role=\"presentation\"\r\n class=\"menu-item\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n rdtAnyRouteActive=\"menu-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (pointerleave)=\"onItemPointerLeave(item)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"chevron_right\"\r\n class=\"menu-item-icon\"\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n -->\r\n <span class=\"menu-item-icon\" *ngIf=\"item.items\">></span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Child menus exist only if this menu is expanded. -->\r\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items && expanded\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"horizontalDir?.dir!\"\r\n [preferredVerticalDir]=\"verticalDir?.dir!\"\r\n [level]=\"level + 1\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: [":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px));overflow-y:auto}:host.expanded{visibility:visible}.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-item-background)}.menu-item{cursor:pointer;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{background-color:var(--rdt-menu-item-background-route-active)}.menu-item-content{display:flex;align-items:center;padding:var(--rdt-menu-item-padding);width:100%;background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color)}.menu-item-content:hover{background-color:var(--rdt-menu-item-background-hover)}.menu-item-content.focus-visible:focus,.menu-item-content:focus-visible{background-color:var(--rdt-menu-item-background-focus);outline:none}\n"] }]
|
|
554
|
+
args: [{ selector: 'rdt-menu-overlay', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ul class=\"menu-item-container\" role=\"presentation\" #menuItemContainer>\r\n <li\r\n *ngFor=\"let item of item.items; let i = index\"\r\n role=\"presentation\"\r\n class=\"menu-item\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n rdtAnyRouteActive=\"menu-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (pointerleave)=\"onItemPointerLeave(item)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"chevron_right\"\r\n class=\"menu-item-icon\"\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n -->\r\n <span class=\"menu-item-icon\" *ngIf=\"item.items\">></span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Child menus exist only if this menu is expanded. -->\r\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items && expanded\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"horizontalDir?.dir!\"\r\n [preferredVerticalDir]=\"verticalDir?.dir!\"\r\n [level]=\"level + 1\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: [":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px));overflow-y:auto}:host.expanded{visibility:visible}.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-item-background)}.menu-item{cursor:pointer;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{background-color:var(--rdt-menu-item-background-route-active)}.menu-item:before{content:\"\";display:block;position:absolute;top:calc(-1 * var(--rdt-menu-item-hitbox-y));left:calc(-1 * var(--rdt-menu-item-hitbox-x));width:calc(100% + 2 * var(--rdt-menu-item-hitbox-x));height:calc(100% + 2 * var(--rdt-menu-item-hitbox-y));z-index:-1}.menu-item-content{display:flex;align-items:center;padding:var(--rdt-menu-item-padding);width:100%;background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color)}.menu-item-content:hover{background-color:var(--rdt-menu-item-background-hover)}.menu-item-content.focus-visible:focus,.menu-item-content:focus-visible{background-color:var(--rdt-menu-item-background-focus);outline:none}\n"] }]
|
|
546
555
|
}], propDecorators: { children: [{
|
|
547
556
|
type: ViewChildren,
|
|
548
557
|
args: [RdtMenuOverlayComponent]
|
|
@@ -582,4 +591,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
582
591
|
type: HostListener,
|
|
583
592
|
args: ['window:focusout', ['$event']]
|
|
584
593
|
}] } });
|
|
585
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1vdmVybGF5L3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxXQUFXLEVBRVgsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLE9BQU8sRUFFUCxjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQix5QkFBeUIsR0FDMUIsTUFBTSxXQUFXLENBQUM7QUFLbkIsT0FBTyxFQUNMLGFBQWEsRUFHYixlQUFlLEVBQ2YsZ0JBQWdC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QyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQzt1R0F2cEJVLHVCQUF1QjsyRkFBdkIsdUJBQXVCLCtuQkFpQnBCLHVCQUF1Qiw2SkMvRXZDLGtwSEErR0EseWhFRGpEYSx1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0Usa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU07OEJBb0J2QyxRQUFRO3NCQURmLFlBQVk7dUJBQUMsdUJBQXVCO2dCQUk3QixpQkFBaUI7c0JBRHhCLFlBQVk7dUJBQUMsZUFBZTtnQkFJckIsaUJBQWlCO3NCQUR4QixTQUFTO3VCQUFDLG1CQUFtQjtnQkFJOUIsSUFBSTtzQkFESCxLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFJTixzQkFBc0I7c0JBRHJCLEtBQUs7Z0JBSU4sb0JBQW9CO3NCQURuQixLQUFLO2dCQUtOLFFBQVE7c0JBRlAsV0FBVzt1QkFBQyxnQkFBZ0I7O3NCQUM1QixLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFPTixhQUFhO3NCQURaLEtBQUs7Z0JBSUUsUUFBUTtzQkFEZixXQUFXO3VCQUFDLFdBQVc7Z0JBSWhCLFlBQVk7c0JBRG5CLFdBQVc7dUJBQUMsZUFBZTtnQkFJeEIsTUFBTTtzQkFEVCxXQUFXO3VCQUFDLGVBQWU7Z0JBMFlwQixrQkFBa0I7c0JBRHpCLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRGVzdHJveVJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIGluamVjdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1xyXG4gIFJkdFNob3J0Y3V0LFxyXG4gIFJkdFNob3J0Y3V0RXZlbnQsXHJcbiAgUmR0U2hvcnRjdXRTZXJ2aWNlLFxyXG59IGZyb20gJ0BuZ3JkdC9zaG9ydGN1dHMnO1xyXG5pbXBvcnQge1xyXG4gIEtCX0NPREUsXHJcbiAgUmR0SG9yaXpvbnRhbERpcmVjdGlvbixcclxuICBSZHRPYmplY3RVdGlscyxcclxuICBSZHRTdHJpbmdVdGlscyxcclxuICBSZHRWZXJ0aWNhbERpcmVjdGlvbixcclxufSBmcm9tICdAbmdyZHQvdXRpbHMnO1xyXG5pbXBvcnQgeyBkZWxheSwgZmlyc3QsIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmR0TWVudUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9tZW51LWJhc2UvcmR0LW1lbnUtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIERFRkFVTFRfTUVOVV9IT1JJWk9OVEFMX0RJUixcclxuICBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSLFxyXG59IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgUGFyc2VkUmR0TWVudUl0ZW0sXHJcbiAgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW4sXHJcbn0gZnJvbSAnLi4vcHJpdmF0ZS1tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIEZPQ1VTX1ZJU0lCTEUsXHJcbiAgSG9yRGlyV2l0aE9mZnNldCxcclxuICBWZXJ0RGlyV2l0aE9mZnNldCxcclxuICBhcmVIb3JEaXJzRXF1YWwsXHJcbiAgYXJlVmVydERpcnNFcXVhbCxcclxuICBmaW5kTmV4dEl0ZW1XaXRoUHJlZml4LFxyXG4gIG1lbnVJdGVtSGFzQ2hpbGRyZW4sXHJcbiAgbWVudUl0ZW1IYXNSb3V0ZSxcclxufSBmcm9tICcuLi91dGlscyc7XHJcblxyXG4vLyBUT0RPOiBTcGxpdCBwb3NpdGlvbmluZyBhbmQgc2hvcnRjdXQvZm9jdXMgbWFuYWdlbWVudCBpbiBzZXBhcmF0ZSBjbGFzc2VzXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmR0LW1lbnUtb3ZlcmxheScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdE1lbnVPdmVybGF5Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdFxyXG57XHJcbiAgcmVhZG9ubHkgZWxSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcclxuICByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB0b3BMZXZlbE1lbnUgPSBpbmplY3QoUmR0TWVudUJhc2VDb21wb25lbnQpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50TWVudSA9IGluamVjdChSZHRNZW51T3ZlcmxheUNvbXBvbmVudCwge1xyXG4gICAgb3B0aW9uYWw6IHRydWUsXHJcbiAgICBza2lwU2VsZjogdHJ1ZSxcclxuICB9KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNkID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvcnRjdXRTZXJ2aWNlID0gaW5qZWN0KFJkdFNob3J0Y3V0U2VydmljZSk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oUmR0TWVudU92ZXJsYXlDb21wb25lbnQpXHJcbiAgcHJpdmF0ZSBjaGlsZHJlbiE6IFF1ZXJ5TGlzdDxSZHRNZW51T3ZlcmxheUNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2ZvY3VzYWJsZUl0ZW0nKVxyXG4gIHByaXZhdGUgZm9jdXNhYmxlRWxlbWVudHMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MTElFbGVtZW50Pj47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21lbnVJdGVtQ29udGFpbmVyJylcclxuICBwcml2YXRlIG1lbnVJdGVtQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MVUxpc3RFbGVtZW50PjtcclxuXHJcbiAgQElucHV0KClcclxuICBpdGVtITogUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgbGV2ZWwhOiBudW1iZXI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHJlZmVycmVkSG9yaXpvbnRhbERpcjogUmR0SG9yaXpvbnRhbERpcmVjdGlvbiA9IERFRkFVTFRfTUVOVV9IT1JJWk9OVEFMX0RJUjtcclxuXHJcbiAgQElucHV0KClcclxuICBwcmVmZXJyZWRWZXJ0aWNhbERpcjogUmR0VmVydGljYWxEaXJlY3Rpb24gPSBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmV4cGFuZGVkJylcclxuICBASW5wdXQoKVxyXG4gIGV4cGFuZGVkID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgYXV0b2ZvY3VzSXRlbTogJ2ZpcnN0JyB8ICdsYXN0JyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvLyBFbGVtZW50IHVzZWQgdG8gcmVsYXRpdmVseSBwb3NpdGlvbiBtZW51LFxyXG4gIC8vIHR5cGljYWxseSBwYXJlbnQgZWxlbWVudC5cclxuICAvLyBJZiBub3Qgc3BlY2lmaWVkLCBwYXJlbnQgZWxlbWVudCBpcyB1c2VkLlxyXG4gIEBJbnB1dCgpXHJcbiAgYW5jaG9yRWxlbWVudD86IEhUTUxFbGVtZW50O1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXHJcbiAgcHJpdmF0ZSByb2xlQXR0ciA9ICdtZW51JztcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcclxuICBwcml2YXRlIHRhYmluZGV4QXR0ciA9ICctMSc7XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUuei1pbmRleCcpXHJcbiAgZ2V0IHpJbmRleCgpIHtcclxuICAgIHJldHVybiB0aGlzLmxldmVsICsgMTA7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNSb290TGV2ZWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sZXZlbCA9PT0gMDtcclxuICB9XHJcblxyXG4gIC8vIEJvdW5kaW5nIGJveCBvZiB0aGlzIGV4Y2x1ZGluZyBhbnkgZXh0cmEgb2Zmc2V0LlxyXG4gIHByaXZhdGUgX2JveCE6IERPTVJlY3Q7XHJcbiAgZ2V0IGJveCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9ib3g7XHJcbiAgfVxyXG5cclxuICAvLyBCb3VuZGluZyBib3ggb2YgcGFyZW50IGVsZW1lbnQuXHJcbiAgcHJpdmF0ZSBfYW5jaG9yQm94ITogRE9NUmVjdDtcclxuICBwcml2YXRlIF9jb250YWluZXJQYWRkaW5nID0geyB0b3A6IDAsIGJvdHRvbTogMCB9O1xyXG5cclxuICAvLyBSZWNhbGN1bGF0ZSBjaGlsZCBjb21wb25lbnRzIG9ubHkgYWZ0ZXIgdGhleSBhcmUgaW5pdGlhbGl6ZWQuXHJcbiAgcHJpdmF0ZSBfdmlld1dhc0luaXQgPSBmYWxzZTtcclxuXHJcbiAgLy8gQ3VycmVudGx5IGFwcGxpZWQgdmVydGljYWwgYW5kIGhvcml6b250YWwgZGlyZWN0aW9ucy5cclxuICBwcm90ZWN0ZWQgdmVydGljYWxEaXI6IFZlcnREaXJXaXRoT2Zmc2V0IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIGhvcml6b250YWxEaXI6IEhvckRpcldpdGhPZmZzZXQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJvdGVjdGVkIGV4cGFuZGVkQ2hpbGQ6IFBhcnNlZFJkdE1lbnVJdGVtIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIGF1dG9mb2N1c1N1Ym1lbnVJdGVtOiAnZmlyc3QnIHwgJ2xhc3QnIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHJlYWRvbmx5IGtleUFjdGlvbnMgPSB7XHJcbiAgICBbS0JfQ09ERS5BUlJPVy5VUF06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmZvY3VzUHJldkl0ZW0oaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuRE9XTl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmZvY3VzTmV4dEl0ZW0oaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuUklHSFRdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5vcGVuU3VibWVudShpbmRleCwgJ2ZpcnN0JyksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5MRUZUXTogKCkgPT4gdGhpcy5jbG9zZVNlbGYoKSxcclxuICAgIFtLQl9DT0RFLkhPTUVdOiAoKSA9PiB0aGlzLmZvY3VzSXRlbSgwKSxcclxuICAgIFtLQl9DT0RFLkVORF06ICgpID0+IHRoaXMuZm9jdXNJdGVtKHRoaXMuaXRlbS5pdGVtcy5sZW5ndGggLSAxKSxcclxuICAgIFtLQl9DT0RFLkVTQ0FQRV06ICgpID0+IHRoaXMuY2xvc2VTZWxmKCksXHJcbiAgICBbS0JfQ09ERS5FTlRFUl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmludm9rZUl0ZW1DbGlja0J5SW5kZXgoaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuU1BBQ0VCQVJdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5pbnZva2VJdGVtQ2xpY2tCeUluZGV4KGluZGV4KSxcclxuICB9O1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0Q2xhc3NlcygpO1xyXG4gICAgdGhpcy5saXN0ZW5UYWJLZXlQcmVzcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgY29uc3QgcmVjYWxjVHJpZ2dlcnMgPSBbXHJcbiAgICAgICdwcmVmZXJyZWRIb3Jpem9udGFsRGlyJyxcclxuICAgICAgJ3ByZWZlcnJlZFZlcnRpY2FsRGlyJyxcclxuICAgICAgJ2V4cGFuZGVkJyxcclxuICAgIF07XHJcbiAgICBpZiAocmVjYWxjVHJpZ2dlcnMuc29tZSgoa2V5KSA9PiBrZXkgaW4gY2hhbmdlcykgJiYgdGhpcy5fdmlld1dhc0luaXQpIHtcclxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZVBvc2l0aW9uKFxyXG4gICAgICAgIHRoaXMucHJlZmVycmVkSG9yaXpvbnRhbERpcixcclxuICAgICAgICB0aGlzLnByZWZlcnJlZFZlcnRpY2FsRGlyXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmV4cGFuZGVkKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCdleHBhbmRlZCcgaW4gY2hhbmdlcyAmJiB0aGlzLmV4cGFuZGVkKSB7XHJcbiAgICAgIC8vIFdhaXQgZm9yIEFuZ3VsYXIgdG8gc2V0IC5leHBhbmRlZCBjbGFzcyxcclxuICAgICAgLy8gYmVjYXVzZSBpbnZpc2libGUgZWxlbWVudHMgY2Fubm90IGJlIGZvY3VzZWQuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5hdXRvZm9jdXNJdGVtKSB7XHJcbiAgICAgICAgICBjYXNlIG51bGw6XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKDAsIGZhbHNlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdmaXJzdCc6XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKDAsIHRydWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ2xhc3QnOlxyXG4gICAgICAgICAgICB0aGlzLmZvY3VzSXRlbSh0aGlzLml0ZW0uaXRlbXMubGVuZ3RoIC0gMSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMubWVhc3VyZUNvbnRhaW5lclBhZGRpbmcoKTtcclxuICAgIHRoaXMucmVjYWxjdWxhdGVQb3NpdGlvbihcclxuICAgICAgdGhpcy5wcmVmZXJyZWRIb3Jpem9udGFsRGlyLFxyXG4gICAgICB0aGlzLnByZWZlcnJlZFZlcnRpY2FsRGlyXHJcbiAgICApO1xyXG4gICAgdGhpcy5fdmlld1dhc0luaXQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW5PZmZzZXRMZWZ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4ubGVmdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWF4T2Zmc2V0TGVmdCgpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLVxyXG4gICAgICB0aGlzLl9ib3gud2lkdGggLVxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnJpZ2h0XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW5PZmZzZXRUb3AoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi50b3A7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1heE9mZnNldFRvcCgpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUuaGVpZ2h0IC1cclxuICAgICAgdGhpcy5fYm94LmhlaWdodCAtXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4uYm90dG9tXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVjYWxjdWxhdGVQb3NpdGlvbihcclxuICAgIHByZWZlcnJlZEhvcml6b250YWxEaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb24sXHJcbiAgICBwcmVmZXJyZWRWZXJ0aWNhbERpcjogUmR0VmVydGljYWxEaXJlY3Rpb25cclxuICApIHtcclxuICAgIC8vIE1ha2UgbWVudSBpbnZpc2libGUgc28gdGhlIG1lbnUgZG9lcyBub3QgbW92ZSBhcm91bmQgaW4gY2FzZSBvZiBzbG93IGNvbXB1dGVyLlxyXG4gICAgdGhpcy5tZWFzdXJlQm91bmRpbmdSZWN0KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9ib3ggfHwgIXRoaXMuX2FuY2hvckJveCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3SG9yRGlyID0gdGhpcy5nZXRSZWFsSG9yaXpvbnRhbERpcihwcmVmZXJyZWRIb3Jpem9udGFsRGlyKTtcclxuICAgIGNvbnN0IG5ld1ZlcnREaXIgPSB0aGlzLmdldFJlYWxWZXJ0aWNhbERpcihwcmVmZXJyZWRWZXJ0aWNhbERpcik7XHJcblxyXG4gICAgLy8gSG9yaXpvbnRhbCBkaXJlY3Rpb25cclxuICAgIGlmIChuZXdIb3JEaXIuZGlyID09PSAncmlnaHQnKSB7XHJcbiAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC5sZWZ0O1xyXG4gICAgICBpZiAoIXRoaXMuaXNSb290TGV2ZWwpIHtcclxuICAgICAgICBuZXdIb3JEaXIubGVmdCArPSB0aGlzLl9hbmNob3JCb3gud2lkdGg7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAobmV3SG9yRGlyLmRpciA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC5sZWZ0IC0gdGhpcy5fYm94LndpZHRoO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNSb290TGV2ZWwpIHtcclxuICAgICAgICBuZXdIb3JEaXIubGVmdCArPSB0aGlzLl9hbmNob3JCb3gud2lkdGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXN0cmljdGlvbnMgZnJvbSBsZWZ0IG1lbnUgYW5kIHJpZ2h0IG1lbnVcclxuICAgIG5ld0hvckRpci5sZWZ0ID0gTWF0aC5taW4oXHJcbiAgICAgIE1hdGgubWF4KHRoaXMuZ2V0TWluT2Zmc2V0TGVmdCgpLCBuZXdIb3JEaXIubGVmdCksXHJcbiAgICAgIHRoaXMuZ2V0TWF4T2Zmc2V0TGVmdCgpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFZlcnRpY2FsIGRpcmVjdGlvblxyXG4gICAgaWYgKG5ld1ZlcnREaXIuZGlyID09PSAnZG93bicpIHtcclxuICAgICAgbmV3VmVydERpci50b3AgPSB0aGlzLl9hbmNob3JCb3gudG9wO1xyXG4gICAgICBpZiAodGhpcy5pc1Jvb3RMZXZlbCkge1xyXG4gICAgICAgIG5ld1ZlcnREaXIudG9wICs9IHRoaXMuX2FuY2hvckJveC5oZWlnaHQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3VmVydERpci50b3AgLT0gdGhpcy5fY29udGFpbmVyUGFkZGluZy50b3A7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAobmV3VmVydERpci5kaXIgPT09ICd1cCcpIHtcclxuICAgICAgbmV3VmVydERpci50b3AgPSB0aGlzLl9hbmNob3JCb3gudG9wIC0gdGhpcy5fYm94LmhlaWdodDtcclxuICAgICAgaWYgKCF0aGlzLmlzUm9vdExldmVsKSB7XHJcbiAgICAgICAgbmV3VmVydERpci50b3AgKz0gdGhpcy5fYW5jaG9yQm94LmhlaWdodCArIHRoaXMuX2NvbnRhaW5lclBhZGRpbmcudG9wO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzdHJpY3Rpb25zIGZyb20gaGVhZGVyIGFuZCBmb290ZXJcclxuICAgIG5ld1ZlcnREaXIudG9wID0gTWF0aC5taW4oXHJcbiAgICAgIE1hdGgubWF4KHRoaXMuZ2V0TWluT2Zmc2V0VG9wKCksIG5ld1ZlcnREaXIudG9wKSxcclxuICAgICAgdGhpcy5nZXRNYXhPZmZzZXRUb3AoKVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFhcmVIb3JEaXJzRXF1YWwodGhpcy5ob3Jpem9udGFsRGlyLCBuZXdIb3JEaXIpIHx8XHJcbiAgICAgICFhcmVWZXJ0RGlyc0VxdWFsKHRoaXMudmVydGljYWxEaXIsIG5ld1ZlcnREaXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5ob3Jpem9udGFsRGlyID0gbmV3SG9yRGlyO1xyXG4gICAgICB0aGlzLnZlcnRpY2FsRGlyID0gbmV3VmVydERpcjtcclxuICAgICAgdGhpcy5zZXRDbGFzc2VzKCk7XHJcbiAgICAgIHRoaXMubWVhc3VyZUJvdW5kaW5nUmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVjYWxjdWxhdGVDaGlsZHJlbigpO1xyXG4gIH1cclxuXHJcbiAgb25JdGVtUG9pbnRlckVudGVyKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51Lm9wZW5PbkhvdmVyICYmXHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCAhPT0gaXRlbSAmJlxyXG4gICAgICBtZW51SXRlbUhhc0NoaWxkcmVuKGl0ZW0pXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IGl0ZW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1Qb2ludGVyTGVhdmUoaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUub3Blbk9uSG92ZXIgJiZcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkID09PSBpdGVtICYmXHJcbiAgICAgIG1lbnVJdGVtSGFzQ2hpbGRyZW4oaXRlbSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gbnVsbDtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSXRlbUNsaWNrKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBjb25zdCBoYXNDaGlsZHJlbiA9IG1lbnVJdGVtSGFzQ2hpbGRyZW4oaXRlbSk7XHJcbiAgICBpZiAoaGFzQ2hpbGRyZW4gJiYgdGhpcy5leHBhbmRlZENoaWxkICE9PSBpdGVtKSB7XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSBudWxsO1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBpdGVtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIENvdWxkIGFsc28gbGlzdGVuIHRvIHJvdXRlciBldmVudHMsIGJ1dCBtaWdodCBiZSB0cmlnZ2VyZWQgYnlcclxuICAgIC8vIGNoaWxkIHJvdXRlciBuYXZpZ2F0aW9uLlxyXG4gICAgaWYgKCFoYXNDaGlsZHJlbikge1xyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbG9zZVN1Ym1lbnVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGl0ZW0uY29tbWFuZCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBpdGVtLmNvbW1hbmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGludm9rZUl0ZW1DbGljayhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgaWYgKG1lbnVJdGVtSGFzUm91dGUoaXRlbSkgJiYgaXRlbS5yb3V0ZXJMaW5rKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKGl0ZW0ucm91dGVyTGluayk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uSXRlbUNsaWNrKGl0ZW0pO1xyXG4gICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9ICdmaXJzdCc7XHJcbiAgfVxyXG5cclxuICBnZXRDaGlsZFJvdXRlcyhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9wTGV2ZWxNZW51LmdldENoaWxkUm91dGVzKGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTdWJtZW51cyhmb2N1c0V4cGFuZGVkID0gZmFsc2UpIHtcclxuICAgIGlmIChmb2N1c0V4cGFuZGVkICYmIHRoaXMuZXhwYW5kZWRDaGlsZCkge1xyXG4gICAgICB0aGlzLmZvY3VzSXRlbSh0aGlzLmV4cGFuZGVkQ2hpbGQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0l0ZW1SZWN1cnNpdmVseShwYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IFsuLi5wYXRoXTtcclxuICAgIGNvbnN0IHRoaXNJdGVtID0gY2hpbGRyZW4uc2hpZnQoKSE7XHJcblxyXG4gICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IG51bGw7XHJcbiAgICB0aGlzLmF1dG9mb2N1c0l0ZW0gPSBudWxsO1xyXG5cclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kQW5kR2V0Q2hpbGQodGhpc0l0ZW0pXHJcbiAgICAgICAgLnBpcGUoZGVsYXkoMSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgob3ZlcmxheSkgPT4ge1xyXG4gICAgICAgICAgb3ZlcmxheS5mb2N1c0l0ZW1SZWN1cnNpdmVseShjaGlsZHJlbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGaXJzdCBmb2N1cyB0aGUgY29ycmVjdCBpdGVtIGJlY2F1c2Ugc3VibWVudSBtaWdodCBoYXZlIGZvY3VzIG9uIGl0LlxyXG4gICAgICAvLyBSZW1vdmluZyBmb2N1c2VkIGVsZW1lbnQgZnJvbSBET00gcmVzdWx0cyBpbiB3aW5kb3c6Zm9jdXNvdXQgZXZlbnRcclxuICAgICAgLy8gYW5kIHRoYXQgY2xvc2VzIGFsbCBtZW51c1xyXG4gICAgICB0aGlzLmZvY3VzSXRlbSh0aGlzSXRlbSk7XHJcbiAgICAgIC8vIE5vdyBjbG9zZSBzdWJtZW51cyBhbmQgdGhlcmVmb3JlIHJlbW92ZSB0aGVtIGZyb20gRE9NXHJcbiAgICAgIHRoaXMuY2xvc2VTdWJtZW51cygpO1xyXG4gICAgICAvLyBXYWl0IHVudGlsIHRoZXkgYXJlIHJlbW92ZWQgYW5kIGZvY3VzIHRoZSBjb3JyZWN0IGl0ZW0gYWdhaW5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzSXRlbSh0aGlzSXRlbSksIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBhbmRBbmRHZXRDaGlsZChpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgaWYgKHRoaXMuaXRlbS5pdGVtcy5pbmRleE9mKGl0ZW0pIDwgMCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ0F0dGVtcHRpbmcgdG8gZXhwYW5kIGl0ZW0gdGhhdCBpcyBub3QgY2hpbGQgaXRlbSBvZiB0aGlzLml0ZW0nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBpdGVtO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICBjb25zdCBjaGlsZCA9IHRoaXMuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLml0ZW0gPT09IGl0ZW0pO1xyXG4gICAgaWYgKGNoaWxkKSB7XHJcbiAgICAgIHJldHVybiBvZihjaGlsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5jaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLml0ZW0gPT09IGl0ZW0pKSxcclxuICAgICAgICBmaXJzdChSZHRPYmplY3RVdGlscy5ub3ROdWxsR3VhcmQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25LZXlEb3duKGl0ZW1JbmRleDogbnVtYmVyLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgY29uc3QgaGFzQWN0aW9uID0gZXZlbnQuY29kZSBpbiB0aGlzLmtleUFjdGlvbnM7XHJcbiAgICBjb25zdCBpc0xldHRlciA9XHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmlzQWxwaGFiZXRDaGFyYWN0ZXIoZXZlbnQua2V5KSB8fFxyXG4gICAgICBSZHRTdHJpbmdVdGlscy5pc051bWVyaWNDaGFyYWN0ZXIoZXZlbnQua2V5KTtcclxuXHJcbiAgICBpZiAoaGFzQWN0aW9uIHx8IGlzTGV0dGVyKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoaGFzQWN0aW9uKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNBY3Rpb24pIHtcclxuICAgICAgdGhpcy5rZXlBY3Rpb25zW2V2ZW50LmNvZGVdKGl0ZW1JbmRleCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzTGV0dGVyKSB7XHJcbiAgICAgIGNvbnN0IG5leHQgPSBmaW5kTmV4dEl0ZW1XaXRoUHJlZml4KFxyXG4gICAgICAgIHRoaXMuaXRlbS5pdGVtcyxcclxuICAgICAgICBpdGVtSW5kZXgsXHJcbiAgICAgICAgZXZlbnQua2V5XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChuZXh0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0obmV4dCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UYWJLZXlQcmVzcyhldmVudDogUmR0U2hvcnRjdXRFdmVudCkge1xyXG4gICAgLy8gRG8gbm90IHByZXZlbnQgZGVmYXVsdCB0byBjb3JyZWN0bHkgc3dpdGNoIHRvIHByZXZpb3VzIGVsZW1lbnRcclxuICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvLyBXYWl0IGZvciBkb2N1bWVudC5hY3RpdmVFbGVtZW50IHRvIHN3aXRjaCB0byBuZXcgZWxlbWVudFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcclxuICAgICAgICB0aGlzLmNsb3NlU2VsZihmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnZva2VJdGVtQ2xpY2tCeUluZGV4KGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtLml0ZW1zW2l0ZW1JbmRleF07XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnZva2VJdGVtQ2xpY2soaXRlbSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzSXRlbShpdGVtOiBudW1iZXIgfCBQYXJzZWRSZHRNZW51SXRlbSwgdmlzaWJsZUZvY3VzID0gdHJ1ZSkge1xyXG4gICAgbGV0IGl0ZW1JbmRleDogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgaXRlbUluZGV4ID0gaXRlbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGl0ZW1JbmRleCA9IHRoaXMuaXRlbS5pdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtSW5kZXggPj0gMCAmJiBpdGVtSW5kZXggPCB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmJsdXJBbGxGb2N1c2FibGUoKTtcclxuICAgICAgdGhpcy5mb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXgsIHZpc2libGVGb2N1cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJsdXJBbGxGb2N1c2FibGUoKSB7XHJcbiAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goKGVsKSA9PlxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLm5hdGl2ZUVsZW1lbnQsIEZPQ1VTX1ZJU0lCTEUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlciwgdmlzaWJsZUZvY3VzOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBlbFJlZiA9IHRoaXMuZm9jdXNhYmxlRWxlbWVudHMuZ2V0KGl0ZW1JbmRleCk7XHJcbiAgICBpZiAoZWxSZWYpIHtcclxuICAgICAgaWYgKHZpc2libGVGb2N1cykge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxSZWYubmF0aXZlRWxlbWVudCwgRk9DVVNfVklTSUJMRSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c05leHRJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBuZXh0ID0gKGl0ZW1JbmRleCArIDEpICUgdGhpcy5pdGVtLml0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZm9jdXNJdGVtKG5leHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c1ByZXZJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBwcmV2ID1cclxuICAgICAgKGl0ZW1JbmRleCAtIDEgKyB0aGlzLml0ZW0uaXRlbXMubGVuZ3RoKSAlIHRoaXMuaXRlbS5pdGVtcy5sZW5ndGg7XHJcbiAgICB0aGlzLmZvY3VzSXRlbShwcmV2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3BlblN1Ym1lbnUoaXRlbUluZGV4OiBudW1iZXIsIHZpc2libGVGb2N1czogJ2ZpcnN0JyB8ICdsYXN0Jykge1xyXG4gICAgaWYgKFxyXG4gICAgICBpdGVtSW5kZXggPCB0aGlzLml0ZW0uaXRlbXMubGVuZ3RoICYmXHJcbiAgICAgIG1lbnVJdGVtSGFzQ2hpbGRyZW4odGhpcy5pdGVtLml0ZW1zW2l0ZW1JbmRleF0pXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gdGhpcy5pdGVtLml0ZW1zW2l0ZW1JbmRleF07XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSB2aXNpYmxlRm9jdXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb3NlU2VsZihmb2N1c0V4cGFuZGVkID0gdHJ1ZSkge1xyXG4gICAgaWYgKHRoaXMucGFyZW50TWVudSkge1xyXG4gICAgICB0aGlzLnBhcmVudE1lbnUuY2xvc2VTdWJtZW51cyhmb2N1c0V4cGFuZGVkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsb3NlU3VibWVudXMoZm9jdXNFeHBhbmRlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6Zm9jdXNvdXQnLCBbJyRldmVudCddKVxyXG4gIHByaXZhdGUgY2hlY2tBY3RpdmVFbGVtZW50KGV2ZW50OiBGb2N1c0V2ZW50KSB7XHJcbiAgICBpZiAodGhpcy50b3BMZXZlbE1lbnUuY2xvc2VPbkZvY3VzT3V0KSB7XHJcbiAgICAgIGNvbnN0IHRoaXNFbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcclxuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHx8ICF0aGlzRWwuY29udGFpbnModGFyZ2V0KSkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENhbGN1bGF0ZXMgZGlyZWN0aW9uIG9mIHRoaXMgbWVudSBhbmQgb2Zmc2V0IGluIGNhc2VcclxuICAvLyBtZW51IHdvbid0IGZpdCBpbiBsZWZ0IG5vciByaWdodCBvZiBwYXJlbnQgbWVudS5cclxuICBwcml2YXRlIGdldFJlYWxIb3Jpem9udGFsRGlyKFxyXG4gICAgcHJlZmVycmVkSG9yaXpvbnRhbERpcjogUmR0SG9yaXpvbnRhbERpcmVjdGlvblxyXG4gICk6IEhvckRpcldpdGhPZmZzZXQge1xyXG4gICAgbGV0IGxlZnQ6IG51bWJlcjtcclxuICAgIGxldCByaWdodDogbnVtYmVyO1xyXG4gICAgLy8gVGhpcyBtZW51IGlzIGRpcmVjdGx5IHVuZGVyIG1lbnViYXJcclxuICAgIGlmICh0aGlzLmxldmVsID09PSAwKSB7XHJcbiAgICAgIGxlZnQgPSB0aGlzLl9hbmNob3JCb3gucmlnaHQgLSB0aGlzLl9ib3gud2lkdGg7XHJcbiAgICAgIHJpZ2h0ID1cclxuICAgICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC1cclxuICAgICAgICAodGhpcy5fYW5jaG9yQm94LmxlZnQgKyB0aGlzLl9ib3gud2lkdGgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gTWVudSBpcyBuZXN0ZWRcclxuICAgICAgcmlnaHQgPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLVxyXG4gICAgICAgICh0aGlzLl9hbmNob3JCb3gucmlnaHQgKyB0aGlzLl9ib3gud2lkdGgpO1xyXG4gICAgICBsZWZ0ID0gdGhpcy5fYW5jaG9yQm94LmxlZnQgLSB0aGlzLl9ib3gud2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgbGVmdCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgICByaWdodCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnJpZ2h0O1xyXG5cclxuICAgIGlmIChwcmVmZXJyZWRIb3Jpem9udGFsRGlyID09PSAncmlnaHQnKSB7XHJcbiAgICAgIC8vIFdlIHVzZSBwcmVmZXJyZWQgaWYgcG9zc2libGUuXHJcbiAgICAgIGlmIChyaWdodCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiAwIH07XHJcbiAgICAgICAgLy8gVGhlbiB0aGUgb3RoZXIgb25lLlxyXG4gICAgICB9IGVsc2UgaWYgKGxlZnQgPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ2xlZnQnLCBsZWZ0OiAwIH07XHJcbiAgICAgICAgLy8gRWRnZSBjYXNlIGlmIG5laXRoZXIgZGlyZWN0aW9uIGNhbiBiZSB1c2VkICh1bHRyYSBuYXJyb3cgc2NyZWVuKS5cclxuICAgICAgICAvLyBDaG9vc2UgZGlyZWN0aW9uIHRoYXQgY292ZXJzIGxlYXN0IG9mIHBhcmVudCBtZW51LlxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE5hcnJvd1NjcmVlbkhvcml6b250YWxEaXIobGVmdCwgcmlnaHQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobGVmdCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnbGVmdCcsIGxlZnQ6IDAgfTtcclxuICAgICAgfSBlbHNlIGlmIChyaWdodCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiAwIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFycm93U2NyZWVuSG9yaXpvbnRhbERpcihsZWZ0LCByaWdodCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEZpbmRzIG91dCB3aGVyZSB0byBwdXQgbWVudSBpbiBjYXNlIHNjcmVlbiBpcyB0b28gbmFycm93IGZvciB0d28gbWVudXNcclxuICAvLyB0byBmaXQgbmV4dCB0byBlYWNoIG90aGVyLiBNaW5pbWl6ZXMgYXJlYSBvZiBwYXJlbnQgbWVudSBjb3ZlcmVkIGJ5IHRoaXMuXHJcbiAgcHJpdmF0ZSBnZXROYXJyb3dTY3JlZW5Ib3Jpem9udGFsRGlyKFxyXG4gICAgbGVmdDogbnVtYmVyLFxyXG4gICAgcmlnaHQ6IG51bWJlclxyXG4gICk6IEhvckRpcldpdGhPZmZzZXQge1xyXG4gICAgY29uc3Qgc2NyZWVuU3RhcnQgPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgICBjb25zdCBzY3JlZW5FbmQgPVxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5yaWdodDtcclxuICAgIGNvbnN0IHNjcmVlbkNlbnRlciA9IChzY3JlZW5TdGFydCAtIHNjcmVlbkVuZCkgLyAyO1xyXG5cclxuICAgIGNvbnN0IGxlZnRTdGFydCA9IE1hdGgubWF4KHRoaXMuX2FuY2hvckJveC5sZWZ0LCBzY3JlZW5TdGFydCk7XHJcbiAgICBjb25zdCBsZWZ0RW5kID0gTWF0aC5taW4oXHJcbiAgICAgIHRoaXMuX2FuY2hvckJveC5sZWZ0ICsgdGhpcy5fYW5jaG9yQm94LndpZHRoLFxyXG4gICAgICBzY3JlZW5DZW50ZXJcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgcmlnaHRTdGFydCA9IE1hdGgubWF4KHNjcmVlbkNlbnRlciwgbGVmdEVuZCk7XHJcbiAgICBjb25zdCByaWdodEVuZCA9IE1hdGgubWluKFxyXG4gICAgICB0aGlzLl9hbmNob3JCb3gubGVmdCArIHRoaXMuX2FuY2hvckJveC53aWR0aCxcclxuICAgICAgc2NyZWVuRW5kXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChsZWZ0RW5kIC0gbGVmdFN0YXJ0ID4gcmlnaHRFbmQgLSByaWdodFN0YXJ0KSB7XHJcbiAgICAgIHJldHVybiB7IGRpcjogJ3JpZ2h0JywgbGVmdDogcmlnaHQgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGRpcjogJ2xlZnQnLCBsZWZ0OiAtbGVmdCB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZWFsVmVydGljYWxEaXIoXHJcbiAgICBwcmVmZXJyZWRWZXJ0aWNhbERpcjogUmR0VmVydGljYWxEaXJlY3Rpb25cclxuICApOiBWZXJ0RGlyV2l0aE9mZnNldCB7XHJcbiAgICBsZXQgYm90dG9tOiBudW1iZXI7XHJcbiAgICBsZXQgdG9wOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHRoaXMubGV2ZWwgPT09IDApIHtcclxuICAgICAgYm90dG9tID1cclxuICAgICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLmhlaWdodCArXHJcbiAgICAgICAgdGhpcy5fYW5jaG9yQm94LmJvdHRvbSAtXHJcbiAgICAgICAgdGhpcy5fYm94LmhlaWdodDtcclxuICAgICAgdG9wID0gdGhpcy5fYW5jaG9yQm94LnRvcCAtIHRoaXMuX2JveC5oZWlnaHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBib3R0b20gPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUuaGVpZ2h0IC1cclxuICAgICAgICB0aGlzLl9hbmNob3JCb3gudG9wIC1cclxuICAgICAgICB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgICB0b3AgPSB0aGlzLl9hbmNob3JCb3guYm90dG9tIC0gdGhpcy5fYm94LmhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICB0b3AgLT0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi50b3A7XHJcbiAgICBib3R0b20gLT0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5ib3R0b207XHJcblxyXG4gICAgaWYgKHByZWZlcnJlZFZlcnRpY2FsRGlyID09PSAnZG93bicpIHtcclxuICAgICAgaWYgKGJvdHRvbSA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnZG93bicsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2UgaWYgKHRvcCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAndXAnLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6IHByZWZlcnJlZFZlcnRpY2FsRGlyLCB0b3A6IDAgfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRvcCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAndXAnLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIGlmIChib3R0b20gPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ2Rvd24nLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6IHByZWZlcnJlZFZlcnRpY2FsRGlyLCB0b3A6IDAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTWVhc3VyZXMgYm91bmRpbmcgcmVjdCBvZiB0aGlzIGFuZCBvZmZzZXQgY29udGFpbmVyXHJcbiAgLy8gU2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgYWZ0ZXIgcGFyZW50IG1lbnUgaGFzIGFscmVhZHkgYmVlbiBtZWFzdXJlZC5cclxuICBwcml2YXRlIG1lYXN1cmVCb3VuZGluZ1JlY3QoKSB7XHJcbiAgICB0aGlzLl9ib3ggPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBhbmNob3IgPVxyXG4gICAgICB0aGlzLmFuY2hvckVsZW1lbnQgPz8gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQhO1xyXG4gICAgdGhpcy5fYW5jaG9yQm94ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZWFzdXJlQ29udGFpbmVyUGFkZGluZygpIHtcclxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShcclxuICAgICAgdGhpcy5tZW51SXRlbUNvbnRhaW5lci5uYXRpdmVFbGVtZW50XHJcbiAgICApO1xyXG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZXMucGFkZGluZ1RvcCk7XHJcbiAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlcy5wYWRkaW5nQm90dG9tKTtcclxuICAgIHRoaXMuX2NvbnRhaW5lclBhZGRpbmcgPSB7IHRvcDogcGFkZGluZ1RvcCwgYm90dG9tOiBwYWRkaW5nQm90dG9tIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY2FsY3VsYXRlQ2hpbGRyZW4oKSB7XHJcbiAgICBpZiAodGhpcy5leHBhbmRlZCAmJiB0aGlzLmhvcml6b250YWxEaXIgJiYgdGhpcy52ZXJ0aWNhbERpcikge1xyXG4gICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PlxyXG4gICAgICAgIGNoaWxkLnJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgICAgICB0aGlzLmhvcml6b250YWxEaXIhLmRpcixcclxuICAgICAgICAgIHRoaXMudmVydGljYWxEaXIhLmRpclxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2xhc3NlcygpIHtcclxuICAgIGlmICh0aGlzLnZlcnRpY2FsRGlyKSB7XHJcbiAgICAgIGlmICh0aGlzLnZlcnRpY2FsRGlyLmRpciA9PT0gJ3VwJykge1xyXG4gICAgICAgIHRoaXMuc2V0Q2xhc3MoJ3JkdC1vdmVybGF5LXVwJyk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktZG93bicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1vdmVybGF5LXVwJyk7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktZG93bicpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0T2Zmc2V0KCd0b3AnLCB0aGlzLnZlcnRpY2FsRGlyLnRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaG9yaXpvbnRhbERpcikge1xyXG4gICAgICBpZiAodGhpcy5ob3Jpem9udGFsRGlyLmRpciA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktbGVmdCcpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1vdmVybGF5LXJpZ2h0Jyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktbGVmdCcpO1xyXG4gICAgICAgIHRoaXMuc2V0Q2xhc3MoJ3JkdC1vdmVybGF5LXJpZ2h0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRPZmZzZXQoJ2xlZnQnLCB0aGlzLmhvcml6b250YWxEaXIubGVmdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNSb290TGV2ZWwpIHtcclxuICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW1lbnUtcm9vdCcpO1xyXG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKCdyZHQtbWVudS1zdWInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1tZW51LXJvb3QnKTtcclxuICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW1lbnUtc3ViJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRPZmZzZXQoZGlyZWN0aW9uOiAndG9wJyB8ICdsZWZ0JywgdmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIGRpcmVjdGlvbiwgYCR7dmFsdWV9cHhgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuVGFiS2V5UHJlc3MoKSB7XHJcbiAgICBjb25zdCBzaGlmdFRhYiA9IFJkdFNob3J0Y3V0LmNyZWF0ZVVuc2FmZSgnc2hpZnQnLCAndGFiJyk7XHJcbiAgICBjb25zdCB0YWIgPSBSZHRTaG9ydGN1dC5jcmVhdGVVbnNhZmUoJ3RhYicpO1xyXG4gICAgdGhpcy5zaG9ydGN1dFNlcnZpY2VcclxuICAgICAgLmxpc3RlbihbdGFiLCBzaGlmdFRhYl0sIHtcclxuICAgICAgICBlbGVtZW50OiB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IGZhbHNlLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMub25UYWJLZXlQcmVzcyhldmVudCkpO1xyXG4gIH1cclxufVxyXG4iLCI8dWwgY2xhc3M9XCJtZW51LWl0ZW0tY29udGFpbmVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiICNtZW51SXRlbUNvbnRhaW5lcj5cclxuICA8bGlcclxuICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW0uaXRlbXM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICBjbGFzcz1cIm1lbnUtaXRlbVwiXHJcbiAgICAocmR0S2V5TGlzdGVuZXIpPVwib25LZXlEb3duKGksICRldmVudClcIlxyXG4gICAgcmR0QW55Um91dGVBY3RpdmU9XCJtZW51LWl0ZW0tcm91dGUtYWN0aXZlXCJcclxuICAgIFt3YXRjaGVkUm91dGVzXT1cImdldENoaWxkUm91dGVzKGl0ZW0pXCJcclxuICAgIChwb2ludGVybGVhdmUpPVwib25JdGVtUG9pbnRlckxlYXZlKGl0ZW0pXCJcclxuICAgICNhbmNob3JFbFxyXG4gID5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5yb3V0ZXJMaW5rICYmICFpdGVtLmV4dGVybmFsTGlua1wiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1jb250ZW50XCJcclxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtKVwiXHJcbiAgICAgICAgKHBvaW50ZXJlbnRlcik9XCJvbkl0ZW1Qb2ludGVyRW50ZXIoaXRlbSlcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5pdGVtcyA/ICdtZW51JyA6IG51bGxcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXRlbSA9PT0gZXhwYW5kZWRDaGlsZFwiXHJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbS1yaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc2hvcnRjdXRcIiBjbGFzcz1cIm1lbnUtaXRlbS1zaG9ydGN1dFwiPlxyXG4gICAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0LmxhYmVsIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8IS0tIFRPRE86XHJcbiAgICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLml0ZW1zXCJcclxuICAgICAgICAgICAgbmFtZT1cImNoZXZyb25fcmlnaHRcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1pY29uXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgICBbbmFtZV09XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1pY29uXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgLS0+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtaXRlbS1pY29uXCIgKm5nSWY9XCJpdGVtLml0ZW1zXCI+Jmd0Ozwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2xpbmtCb2R5IGxldC1pdGVtPlxyXG4gICAgICB7eyBpdGVtLmxhYmVsIH19XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtLXJpZ2h0LWNvbnRlbnRcIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc2hvcnRjdXRcIiBjbGFzcz1cIm1lbnUtaXRlbS1zaG9ydGN1dFwiPlxyXG4gICAgICAgICAge3sgaXRlbS5zaG9ydGN1dC5sYWJlbCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8IS0tIFRPRE86XHJcbiAgICAgICAgPHJkdC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICBbbmFtZV09XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgY2xhc3M9XCJtZW51LWl0ZW0taWNvblwiXHJcbiAgICAgICAgLz5cclxuICAgICAgLS0+PC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnJvdXRlckxpbmtcIj5cclxuICAgICAgPGFcclxuICAgICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIlxyXG4gICAgICAgIFtxdWVyeVBhcmFtc109XCJpdGVtLnF1ZXJ5UGFyYW1zXCJcclxuICAgICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcclxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaW5rQm9keTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9hPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uZXh0ZXJuYWxMaW5rXCI+XHJcbiAgICAgIDxhXHJcbiAgICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1jb250ZW50XCJcclxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtKVwiXHJcbiAgICAgICAgW2hyZWZdPVwiaXRlbS5leHRlcm5hbExpbmtcIlxyXG4gICAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxyXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxyXG4gICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIml0ZW0uZGF0YVRlc3RJZFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtCb2R5OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8IS0tIENoaWxkIG1lbnVzIGV4aXN0IG9ubHkgaWYgdGhpcyBtZW51IGlzIGV4cGFuZGVkLiAtLT5cclxuICAgIDwhLS0gT25seSBvbmUgaW52aXNpYmxlIGxldmVsIGlzIGFsd2F5cyBhdHRhY2hlZCB0byBET00sIHRoZSByZXN0IGRvZXMgbm90IGV4aXN0LiAtLT5cclxuICAgIDxyZHQtbWVudS1vdmVybGF5XHJcbiAgICAgICpuZ0lmPVwiaXRlbS5pdGVtcyAmJiBleHBhbmRlZFwiXHJcbiAgICAgIFtpdGVtXT1cIiRhbnkoaXRlbSlcIlxyXG4gICAgICBbZXhwYW5kZWRdPVwiaXRlbSA9PT0gZXhwYW5kZWRDaGlsZFwiXHJcbiAgICAgIFthdXRvZm9jdXNJdGVtXT1cImF1dG9mb2N1c1N1Ym1lbnVJdGVtXCJcclxuICAgICAgW3ByZWZlcnJlZEhvcml6b250YWxEaXJdPVwiaG9yaXpvbnRhbERpcj8uZGlyIVwiXHJcbiAgICAgIFtwcmVmZXJyZWRWZXJ0aWNhbERpcl09XCJ2ZXJ0aWNhbERpcj8uZGlyIVwiXHJcbiAgICAgIFtsZXZlbF09XCJsZXZlbCArIDFcIlxyXG4gICAgICBbYW5jaG9yRWxlbWVudF09XCJhbmNob3JFbFwiXHJcbiAgICAvPlxyXG4gIDwvbGk+XHJcbjwvdWw+XHJcbiJdfQ==
|
|
594
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1vdmVybGF5L3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxXQUFXLEVBRVgsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLE9BQU8sRUFFUCxjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQix5QkFBeUIsR0FDMUIsTUFBTSxXQUFXLENBQUM7QUFLbkIsT0FBTyxFQUNMLGFBQWEsRUFHYixlQUFlLEVBQ2YsZ0JBQWdC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QUl4QixNQUFNO3NCQURULFdBQVc7dUJBQUMsZUFBZTtnQkFrWnBCLGtCQUFrQjtzQkFEekIsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBEZXN0cm95UmVmLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgaW5qZWN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7XHJcbiAgUmR0U2hvcnRjdXQsXHJcbiAgUmR0U2hvcnRjdXRFdmVudCxcclxuICBSZHRTaG9ydGN1dFNlcnZpY2UsXHJcbn0gZnJvbSAnQG5ncmR0L3Nob3J0Y3V0cyc7XHJcbmltcG9ydCB7XHJcbiAgS0JfQ09ERSxcclxuICBSZHRIb3Jpem9udGFsRGlyZWN0aW9uLFxyXG4gIFJkdE9iamVjdFV0aWxzLFxyXG4gIFJkdFN0cmluZ1V0aWxzLFxyXG4gIFJkdFZlcnRpY2FsRGlyZWN0aW9uLFxyXG59IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IGRlbGF5LCBmaXJzdCwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZHRNZW51QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL21lbnUtYmFzZS9yZHQtbWVudS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgREVGQVVMVF9NRU5VX0hPUklaT05UQUxfRElSLFxyXG4gIERFRkFVTFRfTUVOVV9WRVJUSUNBTF9ESVIsXHJcbn0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBQYXJzZWRSZHRNZW51SXRlbSxcclxuICBQYXJzZWRSZHRNZW51SXRlbVdpdGhDaGlsZHJlbixcclxufSBmcm9tICcuLi9wcml2YXRlLW1vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgRk9DVVNfVklTSUJMRSxcclxuICBIb3JEaXJXaXRoT2Zmc2V0LFxyXG4gIFZlcnREaXJXaXRoT2Zmc2V0LFxyXG4gIGFyZUhvckRpcnNFcXVhbCxcclxuICBhcmVWZXJ0RGlyc0VxdWFsLFxyXG4gIGZpbmROZXh0SXRlbVdpdGhQcmVmaXgsXHJcbiAgbWVudUl0ZW1IYXNDaGlsZHJlbixcclxuICBtZW51SXRlbUhhc1JvdXRlLFxyXG59IGZyb20gJy4uL3V0aWxzJztcclxuXHJcbi8vIFRPRE86IFNwbGl0IHBvc2l0aW9uaW5nIGFuZCBzaG9ydGN1dC9mb2N1cyBtYW5hZ2VtZW50IGluIHNlcGFyYXRlIGNsYXNzZXNcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyZHQtbWVudS1vdmVybGF5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmR0TWVudU92ZXJsYXlDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0XHJcbntcclxuICByZWFkb25seSBlbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xyXG4gIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHRvcExldmVsTWVudSA9IGluamVjdChSZHRNZW51QmFzZUNvbXBvbmVudCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRNZW51ID0gaW5qZWN0KFJkdE1lbnVPdmVybGF5Q29tcG9uZW50LCB7XHJcbiAgICBvcHRpb25hbDogdHJ1ZSxcclxuICAgIHNraXBTZWxmOiB0cnVlLFxyXG4gIH0pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY2QgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzaG9ydGN1dFNlcnZpY2UgPSBpbmplY3QoUmR0U2hvcnRjdXRTZXJ2aWNlKTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihSZHRNZW51T3ZlcmxheUNvbXBvbmVudClcclxuICBwcml2YXRlIGNoaWxkcmVuITogUXVlcnlMaXN0PFJkdE1lbnVPdmVybGF5Q29tcG9uZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZm9jdXNhYmxlSXRlbScpXHJcbiAgcHJpdmF0ZSBmb2N1c2FibGVFbGVtZW50cyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxMSUVsZW1lbnQ+PjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWVudUl0ZW1Db250YWluZXInKVxyXG4gIHByaXZhdGUgbWVudUl0ZW1Db250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxVTGlzdEVsZW1lbnQ+O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGl0ZW0hOiBQYXJzZWRSZHRNZW51SXRlbVdpdGhDaGlsZHJlbjtcclxuXHJcbiAgQElucHV0KClcclxuICBsZXZlbCE6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KClcclxuICBwcmVmZXJyZWRIb3Jpem9udGFsRGlyOiBSZHRIb3Jpem9udGFsRGlyZWN0aW9uID0gREVGQVVMVF9NRU5VX0hPUklaT05UQUxfRElSO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHByZWZlcnJlZFZlcnRpY2FsRGlyOiBSZHRWZXJ0aWNhbERpcmVjdGlvbiA9IERFRkFVTFRfTUVOVV9WRVJUSUNBTF9ESVI7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXhwYW5kZWQnKVxyXG4gIEBJbnB1dCgpXHJcbiAgZXhwYW5kZWQgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBhdXRvZm9jdXNJdGVtOiAnZmlyc3QnIHwgJ2xhc3QnIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8vIEVsZW1lbnQgdXNlZCB0byByZWxhdGl2ZWx5IHBvc2l0aW9uIG1lbnUsXHJcbiAgLy8gdHlwaWNhbGx5IHBhcmVudCBlbGVtZW50LlxyXG4gIC8vIElmIG5vdCBzcGVjaWZpZWQsIHBhcmVudCBlbGVtZW50IGlzIHVzZWQuXHJcbiAgQElucHV0KClcclxuICBhbmNob3JFbGVtZW50PzogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcclxuICBwcml2YXRlIHJvbGVBdHRyID0gJ21lbnUnO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxyXG4gIHByaXZhdGUgdGFiaW5kZXhBdHRyID0gJy0xJztcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS56LWluZGV4JylcclxuICBnZXQgekluZGV4KCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGV2ZWwgKyAxMDtcclxuICB9XHJcblxyXG4gIGdldCBpc1Jvb3RMZXZlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmxldmVsID09PSAwO1xyXG4gIH1cclxuXHJcbiAgLy8gQm91bmRpbmcgYm94IG9mIHRoaXMgZXhjbHVkaW5nIGFueSBleHRyYSBvZmZzZXQuXHJcbiAgcHJpdmF0ZSBfYm94ITogRE9NUmVjdDtcclxuICBnZXQgYm94KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JveDtcclxuICB9XHJcblxyXG4gIC8vIEJvdW5kaW5nIGJveCBvZiBwYXJlbnQgZWxlbWVudC5cclxuICBwcml2YXRlIF9hbmNob3JCb3ghOiBET01SZWN0O1xyXG4gIHByaXZhdGUgX2NvbnRhaW5lclBhZGRpbmcgPSB7IHRvcDogMCwgYm90dG9tOiAwIH07XHJcblxyXG4gIC8vIFJlY2FsY3VsYXRlIGNoaWxkIGNvbXBvbmVudHMgb25seSBhZnRlciB0aGV5IGFyZSBpbml0aWFsaXplZC5cclxuICBwcml2YXRlIF92aWV3V2FzSW5pdCA9IGZhbHNlO1xyXG5cclxuICAvLyBDdXJyZW50bHkgYXBwbGllZCB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBkaXJlY3Rpb25zLlxyXG4gIHByb3RlY3RlZCB2ZXJ0aWNhbERpcjogVmVydERpcldpdGhPZmZzZXQgfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgaG9yaXpvbnRhbERpcjogSG9yRGlyV2l0aE9mZnNldCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgZXhwYW5kZWRDaGlsZDogUGFyc2VkUmR0TWVudUl0ZW0gfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgYXV0b2ZvY3VzU3VibWVudUl0ZW06ICdmaXJzdCcgfCAnbGFzdCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcmVhZG9ubHkga2V5QWN0aW9ucyA9IHtcclxuICAgIFtLQl9DT0RFLkFSUk9XLlVQXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuZm9jdXNQcmV2SXRlbShpbmRleCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5ET1dOXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuZm9jdXNOZXh0SXRlbShpbmRleCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5SSUdIVF06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLm9wZW5TdWJtZW51KGluZGV4LCAnZmlyc3QnKSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLkxFRlRdOiAoKSA9PiB0aGlzLmNsb3NlU2VsZigpLFxyXG4gICAgW0tCX0NPREUuSE9NRV06ICgpID0+IHRoaXMuZm9jdXNJdGVtKDApLFxyXG4gICAgW0tCX0NPREUuRU5EXTogKCkgPT4gdGhpcy5mb2N1c0l0ZW0odGhpcy5pdGVtLml0ZW1zLmxlbmd0aCAtIDEpLFxyXG4gICAgW0tCX0NPREUuRVNDQVBFXTogKCkgPT4gdGhpcy5jbG9zZVNlbGYoKSxcclxuICAgIFtLQl9DT0RFLkVOVEVSXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuaW52b2tlSXRlbUNsaWNrQnlJbmRleChpbmRleCksXHJcbiAgICBbS0JfQ09ERS5TUEFDRUJBUl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmludm9rZUl0ZW1DbGlja0J5SW5kZXgoaW5kZXgpLFxyXG4gIH07XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRDbGFzc2VzKCk7XHJcbiAgICB0aGlzLmxpc3RlblRhYktleVByZXNzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCByZWNhbGNUcmlnZ2VycyA9IFtcclxuICAgICAgJ3ByZWZlcnJlZEhvcml6b250YWxEaXInLFxyXG4gICAgICAncHJlZmVycmVkVmVydGljYWxEaXInLFxyXG4gICAgICAnZXhwYW5kZWQnLFxyXG4gICAgXTtcclxuICAgIGlmIChyZWNhbGNUcmlnZ2Vycy5zb21lKChrZXkpID0+IGtleSBpbiBjaGFuZ2VzKSAmJiB0aGlzLl92aWV3V2FzSW5pdCkge1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRIb3Jpem9udGFsRGlyLFxyXG4gICAgICAgIHRoaXMucHJlZmVycmVkVmVydGljYWxEaXJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZXhwYW5kZWQpIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoJ2V4cGFuZGVkJyBpbiBjaGFuZ2VzICYmIHRoaXMuZXhwYW5kZWQpIHtcclxuICAgICAgLy8gV2FpdCBmb3IgQW5ndWxhciB0byBzZXQgLmV4cGFuZGVkIGNsYXNzLFxyXG4gICAgICAvLyBiZWNhdXNlIGludmlzaWJsZSBlbGVtZW50cyBjYW5ub3QgYmUgZm9jdXNlZC5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmF1dG9mb2N1c0l0ZW0pIHtcclxuICAgICAgICAgIGNhc2UgbnVsbDpcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oMCwgZmFsc2UpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ2ZpcnN0JzpcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oMCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnbGFzdCc6XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXMuaXRlbS5pdGVtcy5sZW5ndGggLSAxLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5tZWFzdXJlQ29udGFpbmVyUGFkZGluZygpO1xyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZVBvc2l0aW9uKFxyXG4gICAgICB0aGlzLnByZWZlcnJlZEhvcml6b250YWxEaXIsXHJcbiAgICAgIHRoaXMucHJlZmVycmVkVmVydGljYWxEaXJcclxuICAgICk7XHJcbiAgICB0aGlzLl92aWV3V2FzSW5pdCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1pbk9mZnNldExlZnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5sZWZ0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXhPZmZzZXRMZWZ0KCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZS53aWR0aCAtXHJcbiAgICAgIHRoaXMuX2JveC53aWR0aCAtXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4ucmlnaHRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1pbk9mZnNldFRvcCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnRvcDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWF4T2Zmc2V0VG9wKCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZS5oZWlnaHQgLVxyXG4gICAgICB0aGlzLl9ib3guaGVpZ2h0IC1cclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5ib3R0b21cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZWNhbGN1bGF0ZVBvc2l0aW9uKFxyXG4gICAgcHJlZmVycmVkSG9yaXpvbnRhbERpcjogUmR0SG9yaXpvbnRhbERpcmVjdGlvbixcclxuICAgIHByZWZlcnJlZFZlcnRpY2FsRGlyOiBSZHRWZXJ0aWNhbERpcmVjdGlvblxyXG4gICkge1xyXG4gICAgLy8gTWFrZSBtZW51IGludmlzaWJsZSBzbyB0aGUgbWVudSBkb2VzIG5vdCBtb3ZlIGFyb3VuZCBpbiBjYXNlIG9mIHNsb3cgY29tcHV0ZXIuXHJcbiAgICB0aGlzLm1lYXN1cmVCb3VuZGluZ1JlY3QoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2JveCB8fCAhdGhpcy5fYW5jaG9yQm94KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdIb3JEaXIgPSB0aGlzLmdldFJlYWxIb3Jpem9udGFsRGlyKHByZWZlcnJlZEhvcml6b250YWxEaXIpO1xyXG4gICAgY29uc3QgbmV3VmVydERpciA9IHRoaXMuZ2V0UmVhbFZlcnRpY2FsRGlyKHByZWZlcnJlZFZlcnRpY2FsRGlyKTtcclxuXHJcbiAgICAvLyBIb3Jpem9udGFsIGRpcmVjdGlvblxyXG4gICAgaWYgKG5ld0hvckRpci5kaXIgPT09ICdyaWdodCcpIHtcclxuICAgICAgbmV3SG9yRGlyLmxlZnQgKz0gdGhpcy5fYW5jaG9yQm94LmxlZnQ7XHJcbiAgICAgIGlmICghdGhpcy5pc1Jvb3RMZXZlbCkge1xyXG4gICAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC53aWR0aDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChuZXdIb3JEaXIuZGlyID09PSAnbGVmdCcpIHtcclxuICAgICAgbmV3SG9yRGlyLmxlZnQgKz0gdGhpcy5fYW5jaG9yQm94LmxlZnQgLSB0aGlzLl9ib3gud2lkdGg7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc1Jvb3RMZXZlbCkge1xyXG4gICAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC53aWR0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc3RyaWN0aW9ucyBmcm9tIGxlZnQgbWVudSBhbmQgcmlnaHQgbWVudVxyXG4gICAgbmV3SG9yRGlyLmxlZnQgPSBNYXRoLm1pbihcclxuICAgICAgTWF0aC5tYXgodGhpcy5nZXRNaW5PZmZzZXRMZWZ0KCksIG5ld0hvckRpci5sZWZ0KSxcclxuICAgICAgdGhpcy5nZXRNYXhPZmZzZXRMZWZ0KClcclxuICAgICk7XHJcblxyXG4gICAgLy8gVmVydGljYWwgZGlyZWN0aW9uXHJcbiAgICBpZiAobmV3VmVydERpci5kaXIgPT09ICdkb3duJykge1xyXG4gICAgICBuZXdWZXJ0RGlyLnRvcCA9IHRoaXMuX2FuY2hvckJveC50b3A7XHJcbiAgICAgIGlmICh0aGlzLmlzUm9vdExldmVsKSB7XHJcbiAgICAgICAgbmV3VmVydERpci50b3AgKz0gdGhpcy5fYW5jaG9yQm94LmhlaWdodDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdWZXJ0RGlyLnRvcCAtPSB0aGlzLl9jb250YWluZXJQYWRkaW5nLnRvcDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChuZXdWZXJ0RGlyLmRpciA9PT0gJ3VwJykge1xyXG4gICAgICBuZXdWZXJ0RGlyLnRvcCA9IHRoaXMuX2FuY2hvckJveC50b3AgLSB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgICBpZiAoIXRoaXMuaXNSb290TGV2ZWwpIHtcclxuICAgICAgICBuZXdWZXJ0RGlyLnRvcCArPSB0aGlzLl9hbmNob3JCb3guaGVpZ2h0ICsgdGhpcy5fY29udGFpbmVyUGFkZGluZy50b3A7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXN0cmljdGlvbnMgZnJvbSBoZWFkZXIgYW5kIGZvb3RlclxyXG4gICAgbmV3VmVydERpci50b3AgPSBNYXRoLm1pbihcclxuICAgICAgTWF0aC5tYXgodGhpcy5nZXRNaW5PZmZzZXRUb3AoKSwgbmV3VmVydERpci50b3ApLFxyXG4gICAgICB0aGlzLmdldE1heE9mZnNldFRvcCgpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIWFyZUhvckRpcnNFcXVhbCh0aGlzLmhvcml6b250YWxEaXIsIG5ld0hvckRpcikgfHxcclxuICAgICAgIWFyZVZlcnREaXJzRXF1YWwodGhpcy52ZXJ0aWNhbERpciwgbmV3VmVydERpcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLmhvcml6b250YWxEaXIgPSBuZXdIb3JEaXI7XHJcbiAgICAgIHRoaXMudmVydGljYWxEaXIgPSBuZXdWZXJ0RGlyO1xyXG4gICAgICB0aGlzLnNldENsYXNzZXMoKTtcclxuICAgICAgdGhpcy5tZWFzdXJlQm91bmRpbmdSZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZUNoaWxkcmVuKCk7XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1Qb2ludGVyRW50ZXIoaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGlmICh0aGlzLnRvcExldmVsTWVudS5vcGVuT25Ib3Zlcikge1xyXG4gICAgICBpZiAodGhpcy5leHBhbmRlZENoaWxkICE9PSBpdGVtICYmIG1lbnVJdGVtSGFzQ2hpbGRyZW4oaXRlbSkpIHtcclxuICAgICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gbnVsbDtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBpdGVtO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbWVudSA9IHRoaXMucGFyZW50TWVudTtcclxuICAgICAgbGV0IGl0ZW0yID0gdGhpcy5pdGVtO1xyXG4gICAgICB3aGlsZSAobWVudSAmJiAhbWVudS5leHBhbmRlZENoaWxkKSB7XHJcbiAgICAgICAgbWVudS5leHBhbmRlZENoaWxkID0gaXRlbTI7XHJcbiAgICAgICAgbWVudS5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgaXRlbTIgPSBtZW51Lml0ZW07XHJcbiAgICAgICAgbWVudSA9IG1lbnUucGFyZW50TWVudTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JdGVtUG9pbnRlckxlYXZlKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCAmJlxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5vcGVuT25Ib3ZlciAmJlxyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPT09IGl0ZW0gJiZcclxuICAgICAgbWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSBudWxsO1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JdGVtQ2xpY2soaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGNvbnN0IGhhc0NoaWxkcmVuID0gbWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKTtcclxuICAgIGlmIChoYXNDaGlsZHJlbiAmJiB0aGlzLmV4cGFuZGVkQ2hpbGQgIT09IGl0ZW0pIHtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IGl0ZW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gQ291bGQgYWxzbyBsaXN0ZW4gdG8gcm91dGVyIGV2ZW50cywgYnV0IG1pZ2h0IGJlIHRyaWdnZXJlZCBieVxyXG4gICAgLy8gY2hpbGQgcm91dGVyIG5hdmlnYXRpb24uXHJcbiAgICBpZiAoIWhhc0NoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsb3NlU3VibWVudXMoKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgaXRlbS5jb21tYW5kID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGl0ZW0uY29tbWFuZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW52b2tlSXRlbUNsaWNrKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAobWVudUl0ZW1IYXNSb3V0ZShpdGVtKSAmJiBpdGVtLnJvdXRlckxpbmspIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoaXRlbS5yb3V0ZXJMaW5rKTtcclxuICAgIH1cclxuICAgIHRoaXMub25JdGVtQ2xpY2soaXRlbSk7XHJcbiAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gJ2ZpcnN0JztcclxuICB9XHJcblxyXG4gIGdldENoaWxkUm91dGVzKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b3BMZXZlbE1lbnUuZ2V0Q2hpbGRSb3V0ZXMoaXRlbSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVN1Ym1lbnVzKGZvY3VzRXhwYW5kZWQgPSBmYWxzZSkge1xyXG4gICAgaWYgKGZvY3VzRXhwYW5kZWQgJiYgdGhpcy5leHBhbmRlZENoaWxkKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXMuZXhwYW5kZWRDaGlsZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBudWxsO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGZvY3VzSXRlbVJlY3Vyc2l2ZWx5KHBhdGg6IFBhcnNlZFJkdE1lbnVJdGVtW10pIHtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gWy4uLnBhdGhdO1xyXG4gICAgY29uc3QgdGhpc0l0ZW0gPSBjaGlsZHJlbi5zaGlmdCgpITtcclxuXHJcbiAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gbnVsbDtcclxuICAgIHRoaXMuYXV0b2ZvY3VzSXRlbSA9IG51bGw7XHJcblxyXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5leHBhbmRBbmRHZXRDaGlsZCh0aGlzSXRlbSlcclxuICAgICAgICAucGlwZShkZWxheSgxKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChvdmVybGF5KSA9PiB7XHJcbiAgICAgICAgICBvdmVybGF5LmZvY3VzSXRlbVJlY3Vyc2l2ZWx5KGNoaWxkcmVuKTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZpcnN0IGZvY3VzIHRoZSBjb3JyZWN0IGl0ZW0gYmVjYXVzZSBzdWJtZW51IG1pZ2h0IGhhdmUgZm9jdXMgb24gaXQuXHJcbiAgICAgIC8vIFJlbW92aW5nIGZvY3VzZWQgZWxlbWVudCBmcm9tIERPTSByZXN1bHRzIGluIHdpbmRvdzpmb2N1c291dCBldmVudFxyXG4gICAgICAvLyBhbmQgdGhhdCBjbG9zZXMgYWxsIG1lbnVzXHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXNJdGVtKTtcclxuICAgICAgLy8gTm93IGNsb3NlIHN1Ym1lbnVzIGFuZCB0aGVyZWZvcmUgcmVtb3ZlIHRoZW0gZnJvbSBET01cclxuICAgICAgdGhpcy5jbG9zZVN1Ym1lbnVzKCk7XHJcbiAgICAgIC8vIFdhaXQgdW50aWwgdGhleSBhcmUgcmVtb3ZlZCBhbmQgZm9jdXMgdGhlIGNvcnJlY3QgaXRlbSBhZ2FpblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9jdXNJdGVtKHRoaXNJdGVtKSwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGFuZEFuZEdldENoaWxkKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAodGhpcy5pdGVtLml0ZW1zLmluZGV4T2YoaXRlbSkgPCAwKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnQXR0ZW1wdGluZyB0byBleHBhbmQgaXRlbSB0aGF0IGlzIG5vdCBjaGlsZCBpdGVtIG9mIHRoaXMuaXRlbSdcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IGl0ZW07XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgIGNvbnN0IGNoaWxkID0gdGhpcy5jaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQuaXRlbSA9PT0gaXRlbSk7XHJcbiAgICBpZiAoY2hpbGQpIHtcclxuICAgICAgcmV0dXJuIG9mKGNoaWxkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmNoYW5nZXMucGlwZShcclxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5jaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQuaXRlbSA9PT0gaXRlbSkpLFxyXG4gICAgICAgIGZpcnN0KFJkdE9iamVjdFV0aWxzLm5vdE51bGxHdWFyZClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbktleURvd24oaXRlbUluZGV4OiBudW1iZXIsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBoYXNBY3Rpb24gPSBldmVudC5jb2RlIGluIHRoaXMua2V5QWN0aW9ucztcclxuICAgIGNvbnN0IGlzTGV0dGVyID1cclxuICAgICAgUmR0U3RyaW5nVXRpbHMuaXNBbHBoYWJldENoYXJhY3RlcihldmVudC5rZXkpIHx8XHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmlzTnVtZXJpY0NoYXJhY3RlcihldmVudC5rZXkpO1xyXG5cclxuICAgIGlmIChoYXNBY3Rpb24gfHwgaXNMZXR0ZXIpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICAgIGlmIChoYXNBY3Rpb24pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc0FjdGlvbikge1xyXG4gICAgICB0aGlzLmtleUFjdGlvbnNbZXZlbnQuY29kZV0oaXRlbUluZGV4KTtcclxuICAgIH0gZWxzZSBpZiAoaXNMZXR0ZXIpIHtcclxuICAgICAgY29uc3QgbmV4dCA9IGZpbmROZXh0SXRlbVdpdGhQcmVmaXgoXHJcbiAgICAgICAgdGhpcy5pdGVtLml0ZW1zLFxyXG4gICAgICAgIGl0ZW1JbmRleCxcclxuICAgICAgICBldmVudC5rZXlcclxuICAgICAgKTtcclxuICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZvY3VzSXRlbShuZXh0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblRhYktleVByZXNzKGV2ZW50OiBSZHRTaG9ydGN1dEV2ZW50KSB7XHJcbiAgICAvLyBEbyBub3QgcHJldmVudCBkZWZhdWx0IHRvIGNvcnJlY3RseSBzd2l0Y2ggdG8gcHJldmlvdXMgZWxlbWVudFxyXG4gICAgZXZlbnQub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vIFdhaXQgZm9yIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgdG8gc3dpdGNoIHRvIG5ldyBlbGVtZW50XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VTZWxmKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfSwgMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGludm9rZUl0ZW1DbGlja0J5SW5kZXgoaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW0uaXRlbXNbaXRlbUluZGV4XTtcclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmludm9rZUl0ZW1DbGljayhpdGVtKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNJdGVtKGl0ZW06IG51bWJlciB8IFBhcnNlZFJkdE1lbnVJdGVtLCB2aXNpYmxlRm9jdXMgPSB0cnVlKSB7XHJcbiAgICBsZXQgaXRlbUluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJykge1xyXG4gICAgICBpdGVtSW5kZXggPSBpdGVtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbUluZGV4ID0gdGhpcy5pdGVtLml0ZW1zLmluZGV4T2YoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGl0ZW1JbmRleCA+PSAwICYmIGl0ZW1JbmRleCA8IHRoaXMuZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuYmx1ckFsbEZvY3VzYWJsZSgpO1xyXG4gICAgICB0aGlzLmZvY3VzRm9jdXNhYmxlKGl0ZW1JbmRleCwgdmlzaWJsZUZvY3VzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmx1ckFsbEZvY3VzYWJsZSgpIHtcclxuICAgIHRoaXMuZm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWwpID0+XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWwubmF0aXZlRWxlbWVudCwgRk9DVVNfVklTSUJMRSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzRm9jdXNhYmxlKGl0ZW1JbmRleDogbnVtYmVyLCB2aXNpYmxlRm9jdXM6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IGVsUmVmID0gdGhpcy5mb2N1c2FibGVFbGVtZW50cy5nZXQoaXRlbUluZGV4KTtcclxuICAgIGlmIChlbFJlZikge1xyXG4gICAgICBpZiAodmlzaWJsZUZvY3VzKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbFJlZi5uYXRpdmVFbGVtZW50LCBGT0NVU19WSVNJQkxFKTtcclxuICAgICAgfVxyXG4gICAgICBlbFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzTmV4dEl0ZW0oaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IG5leHQgPSAoaXRlbUluZGV4ICsgMSkgJSB0aGlzLml0ZW0uaXRlbXMubGVuZ3RoO1xyXG4gICAgdGhpcy5mb2N1c0l0ZW0obmV4dCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzUHJldkl0ZW0oaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHByZXYgPVxyXG4gICAgICAoaXRlbUluZGV4IC0gMSArIHRoaXMuaXRlbS5pdGVtcy5sZW5ndGgpICUgdGhpcy5pdGVtLml0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZm9jdXNJdGVtKHByZXYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuU3VibWVudShpdGVtSW5kZXg6IG51bWJlciwgdmlzaWJsZUZvY3VzOiAnZmlyc3QnIHwgJ2xhc3QnKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGl0ZW1JbmRleCA8IHRoaXMuaXRlbS5pdGVtcy5sZW5ndGggJiZcclxuICAgICAgbWVudUl0ZW1IYXNDaGlsZHJlbih0aGlzLml0ZW0uaXRlbXNbaXRlbUluZGV4XSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSB0aGlzLml0ZW0uaXRlbXNbaXRlbUluZGV4XTtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IHZpc2libGVGb2N1cztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VTZWxmKGZvY3VzRXhwYW5kZWQgPSB0cnVlKSB7XHJcbiAgICBpZiAodGhpcy5wYXJlbnRNZW51KSB7XHJcbiAgICAgIHRoaXMucGFyZW50TWVudS5jbG9zZVN1Ym1lbnVzKGZvY3VzRXhwYW5kZWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xvc2VTdWJtZW51cyhmb2N1c0V4cGFuZGVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1c291dCcsIFsnJGV2ZW50J10pXHJcbiAgcHJpdmF0ZSBjaGVja0FjdGl2ZUVsZW1lbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnRvcExldmVsTWVudS5jbG9zZU9uRm9jdXNPdXQpIHtcclxuICAgICAgY29uc3QgdGhpc0VsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xyXG4gICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHwgIXRoaXNFbC5jb250YWlucyh0YXJnZXQpKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2FsY3VsYXRlcyBkaXJlY3Rpb24gb2YgdGhpcyBtZW51IGFuZCBvZmZzZXQgaW4gY2FzZVxyXG4gIC8vIG1lbnUgd29uJ3QgZml0IGluIGxlZnQgbm9yIHJpZ2h0IG9mIHBhcmVudCBtZW51LlxyXG4gIHByaXZhdGUgZ2V0UmVhbEhvcml6b250YWxEaXIoXHJcbiAgICBwcmVmZXJyZWRIb3Jpem9udGFsRGlyOiBSZHRIb3Jpem9udGFsRGlyZWN0aW9uXHJcbiAgKTogSG9yRGlyV2l0aE9mZnNldCB7XHJcbiAgICBsZXQgbGVmdDogbnVtYmVyO1xyXG4gICAgbGV0IHJpZ2h0OiBudW1iZXI7XHJcbiAgICAvLyBUaGlzIG1lbnUgaXMgZGlyZWN0bHkgdW5kZXIgbWVudWJhclxyXG4gICAgaWYgKHRoaXMubGV2ZWwgPT09IDApIHtcclxuICAgICAgbGVmdCA9IHRoaXMuX2FuY2hvckJveC5yaWdodCAtIHRoaXMuX2JveC53aWR0aDtcclxuICAgICAgcmlnaHQgPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLVxyXG4gICAgICAgICh0aGlzLl9hbmNob3JCb3gubGVmdCArIHRoaXMuX2JveC53aWR0aCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBNZW51IGlzIG5lc3RlZFxyXG4gICAgICByaWdodCA9XHJcbiAgICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZS53aWR0aCAtXHJcbiAgICAgICAgKHRoaXMuX2FuY2hvckJveC5yaWdodCArIHRoaXMuX2JveC53aWR0aCk7XHJcbiAgICAgIGxlZnQgPSB0aGlzLl9hbmNob3JCb3gubGVmdCAtIHRoaXMuX2JveC53aWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBsZWZ0IC09IHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4ubGVmdDtcclxuICAgIHJpZ2h0IC09IHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4ucmlnaHQ7XHJcblxyXG4gICAgaWYgKHByZWZlcnJlZEhvcml6b250YWxEaXIgPT09ICdyaWdodCcpIHtcclxuICAgICAgLy8gV2UgdXNlIHByZWZlcnJlZCBpZiBwb3NzaWJsZS5cclxuICAgICAgaWYgKHJpZ2h0ID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICdyaWdodCcsIGxlZnQ6IDAgfTtcclxuICAgICAgICAvLyBUaGVuIHRoZSBvdGhlciBvbmUuXHJcbiAgICAgIH0gZWxzZSBpZiAobGVmdCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnbGVmdCcsIGxlZnQ6IDAgfTtcclxuICAgICAgICAvLyBFZGdlIGNhc2UgaWYgbmVpdGhlciBkaXJlY3Rpb24gY2FuIGJlIHVzZWQgKHVsdHJhIG5hcnJvdyBzY3JlZW4pLlxyXG4gICAgICAgIC8vIENob29zZSBkaXJlY3Rpb24gdGhhdCBjb3ZlcnMgbGVhc3Qgb2YgcGFyZW50IG1lbnUuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFycm93U2NyZWVuSG9yaXpvbnRhbERpcihsZWZ0LCByaWdodCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChsZWZ0ID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICdsZWZ0JywgbGVmdDogMCB9O1xyXG4gICAgICB9IGVsc2UgaWYgKHJpZ2h0ID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICdyaWdodCcsIGxlZnQ6IDAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXROYXJyb3dTY3JlZW5Ib3Jpem9udGFsRGlyKGxlZnQsIHJpZ2h0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gRmluZHMgb3V0IHdoZXJlIHRvIHB1dCBtZW51IGluIGNhc2Ugc2NyZWVuIGlzIHRvbyBuYXJyb3cgZm9yIHR3byBtZW51c1xyXG4gIC8vIHRvIGZpdCBuZXh0IHRvIGVhY2ggb3RoZXIuIE1pbmltaXplcyBhcmVhIG9mIHBhcmVudCBtZW51IGNvdmVyZWQgYnkgdGhpcy5cclxuICBwcml2YXRlIGdldE5hcnJvd1NjcmVlbkhvcml6b250YWxEaXIoXHJcbiAgICBsZWZ0OiBudW1iZXIsXHJcbiAgICByaWdodDogbnVtYmVyXHJcbiAgKTogSG9yRGlyV2l0aE9mZnNldCB7XHJcbiAgICBjb25zdCBzY3JlZW5TdGFydCA9IHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4ubGVmdDtcclxuICAgIGNvbnN0IHNjcmVlbkVuZCA9XHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnJpZ2h0O1xyXG4gICAgY29uc3Qgc2NyZWVuQ2VudGVyID0gKHNjcmVlblN0YXJ0IC0gc2NyZWVuRW5kKSAvIDI7XHJcblxyXG4gICAgY29uc3QgbGVmdFN0YXJ0ID0gTWF0aC5tYXgodGhpcy5fYW5jaG9yQm94LmxlZnQsIHNjcmVlblN0YXJ0KTtcclxuICAgIGNvbnN0IGxlZnRFbmQgPSBNYXRoLm1pbihcclxuICAgICAgdGhpcy5fYW5jaG9yQm94LmxlZnQgKyB0aGlzLl9hbmNob3JCb3gud2lkdGgsXHJcbiAgICAgIHNjcmVlbkNlbnRlclxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCByaWdodFN0YXJ0ID0gTWF0aC5tYXgoc2NyZWVuQ2VudGVyLCBsZWZ0RW5kKTtcclxuICAgIGNvbnN0IHJpZ2h0RW5kID0gTWF0aC5taW4oXHJcbiAgICAgIHRoaXMuX2FuY2hvckJveC5sZWZ0ICsgdGhpcy5fYW5jaG9yQm94LndpZHRoLFxyXG4gICAgICBzY3JlZW5FbmRcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGxlZnRFbmQgLSBsZWZ0U3RhcnQgPiByaWdodEVuZCAtIHJpZ2h0U3RhcnQpIHtcclxuICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiByaWdodCB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgZGlyOiAnbGVmdCcsIGxlZnQ6IC1sZWZ0IH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlYWxWZXJ0aWNhbERpcihcclxuICAgIHByZWZlcnJlZFZlcnRpY2FsRGlyOiBSZHRWZXJ0aWNhbERpcmVjdGlvblxyXG4gICk6IFZlcnREaXJXaXRoT2Zmc2V0IHtcclxuICAgIGxldCBib3R0b206IG51bWJlcjtcclxuICAgIGxldCB0b3A6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5sZXZlbCA9PT0gMCkge1xyXG4gICAgICBib3R0b20gPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUuaGVpZ2h0ICtcclxuICAgICAgICB0aGlzLl9hbmNob3JCb3guYm90dG9tIC1cclxuICAgICAgICB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgICB0b3AgPSB0aGlzLl9hbmNob3JCb3gudG9wIC0gdGhpcy5fYm94LmhlaWdodDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJvdHRvbSA9XHJcbiAgICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZS5oZWlnaHQgLVxyXG4gICAgICAgIHRoaXMuX2FuY2hvckJveC50b3AgLVxyXG4gICAgICAgIHRoaXMuX2JveC5oZWlnaHQ7XHJcbiAgICAgIHRvcCA9IHRoaXMuX2FuY2hvckJveC5ib3R0b20gLSB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIHRvcCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnRvcDtcclxuICAgIGJvdHRvbSAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmJvdHRvbTtcclxuXHJcbiAgICBpZiAocHJlZmVycmVkVmVydGljYWxEaXIgPT09ICdkb3duJykge1xyXG4gICAgICBpZiAoYm90dG9tID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICdkb3duJywgdG9wOiAwIH07XHJcbiAgICAgIH0gZWxzZSBpZiAodG9wID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICd1cCcsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogcHJlZmVycmVkVmVydGljYWxEaXIsIHRvcDogMCB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodG9wID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICd1cCcsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2UgaWYgKGJvdHRvbSA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnZG93bicsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogcHJlZmVycmVkVmVydGljYWxEaXIsIHRvcDogMCB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBNZWFzdXJlcyBib3VuZGluZyByZWN0IG9mIHRoaXMgYW5kIG9mZnNldCBjb250YWluZXJcclxuICAvLyBTaG91bGQgYWx3YXlzIGJlIGNhbGxlZCBhZnRlciBwYXJlbnQgbWVudSBoYXMgYWxyZWFkeSBiZWVuIG1lYXN1cmVkLlxyXG4gIHByaXZhdGUgbWVhc3VyZUJvdW5kaW5nUmVjdCgpIHtcclxuICAgIHRoaXMuX2JveCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGFuY2hvciA9XHJcbiAgICAgIHRoaXMuYW5jaG9yRWxlbWVudCA/PyB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCE7XHJcbiAgICB0aGlzLl9hbmNob3JCb3ggPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lYXN1cmVDb250YWluZXJQYWRkaW5nKCkge1xyXG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKFxyXG4gICAgICB0aGlzLm1lbnVJdGVtQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnRcclxuICAgICk7XHJcbiAgICBjb25zdCBwYWRkaW5nVG9wID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlcy5wYWRkaW5nVG9wKTtcclxuICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGVzLnBhZGRpbmdCb3R0b20pO1xyXG4gICAgdGhpcy5fY29udGFpbmVyUGFkZGluZyA9IHsgdG9wOiBwYWRkaW5nVG9wLCBib3R0b206IHBhZGRpbmdCb3R0b20gfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVDaGlsZHJlbigpIHtcclxuICAgIGlmICh0aGlzLmV4cGFuZGVkICYmIHRoaXMuaG9yaXpvbnRhbERpciAmJiB0aGlzLnZlcnRpY2FsRGlyKSB7XHJcbiAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+XHJcbiAgICAgICAgY2hpbGQucmVjYWxjdWxhdGVQb3NpdGlvbihcclxuICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbERpciEuZGlyLFxyXG4gICAgICAgICAgdGhpcy52ZXJ0aWNhbERpciEuZGlyXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDbGFzc2VzKCkge1xyXG4gICAgaWYgKHRoaXMudmVydGljYWxEaXIpIHtcclxuICAgICAgaWYgKHRoaXMudmVydGljYWxEaXIuZGlyID09PSAndXAnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktdXAnKTtcclxuICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdyZHQtb3ZlcmxheS1kb3duJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktdXAnKTtcclxuICAgICAgICB0aGlzLnNldENsYXNzKCdyZHQtb3ZlcmxheS1kb3duJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRPZmZzZXQoJ3RvcCcsIHRoaXMudmVydGljYWxEaXIudG9wKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5ob3Jpem9udGFsRGlyKSB7XHJcbiAgICAgIGlmICh0aGlzLmhvcml6b250YWxEaXIuZGlyID09PSAnbGVmdCcpIHtcclxuICAgICAgICB0aGlzLnNldENsYXNzKCdyZHQtb3ZlcmxheS1sZWZ0Jyk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktcmlnaHQnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdyZHQtb3ZlcmxheS1sZWZ0Jyk7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktcmlnaHQnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldE9mZnNldCgnbGVmdCcsIHRoaXMuaG9yaXpvbnRhbERpci5sZWZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1Jvb3RMZXZlbCkge1xyXG4gICAgICB0aGlzLnNldENsYXNzKCdyZHQtbWVudS1yb290Jyk7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1tZW51LXN1YicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW1lbnUtcm9vdCcpO1xyXG4gICAgICB0aGlzLnNldENsYXNzKCdyZHQtbWVudS1zdWInKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVDbGFzcyhjbGFzc05hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIGNsYXNzTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE9mZnNldChkaXJlY3Rpb246ICd0b3AnIHwgJ2xlZnQnLCB2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgZGlyZWN0aW9uLCBgJHt2YWx1ZX1weGApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5UYWJLZXlQcmVzcygpIHtcclxuICAgIGNvbnN0IHNoaWZ0VGFiID0gUmR0U2hvcnRjdXQuY3JlYXRlVW5zYWZlKCdzaGlmdCcsICd0YWInKTtcclxuICAgIGNvbnN0IHRhYiA9IFJkdFNob3J0Y3V0LmNyZWF0ZVVuc2FmZSgndGFiJyk7XHJcbiAgICB0aGlzLnNob3J0Y3V0U2VydmljZVxyXG4gICAgICAubGlzdGVuKFt0YWIsIHNoaWZ0VGFiXSwge1xyXG4gICAgICAgIGVsZW1lbnQ6IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgICBwcmV2ZW50RGVmYXVsdDogZmFsc2UsXHJcbiAgICAgIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5vblRhYktleVByZXNzKGV2ZW50KSk7XHJcbiAgfVxyXG59XHJcbiIsIjx1bCBjbGFzcz1cIm1lbnUtaXRlbS1jb250YWluZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgI21lbnVJdGVtQ29udGFpbmVyPlxyXG4gIDxsaVxyXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbS5pdGVtczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgIChyZHRLZXlMaXN0ZW5lcik9XCJvbktleURvd24oaSwgJGV2ZW50KVwiXHJcbiAgICByZHRBbnlSb3V0ZUFjdGl2ZT1cIm1lbnUtaXRlbS1yb3V0ZS1hY3RpdmVcIlxyXG4gICAgW3dhdGNoZWRSb3V0ZXNdPVwiZ2V0Q2hpbGRSb3V0ZXMoaXRlbSlcIlxyXG4gICAgKHBvaW50ZXJsZWF2ZSk9XCJvbkl0ZW1Qb2ludGVyTGVhdmUoaXRlbSlcIlxyXG4gICAgI2FuY2hvckVsXHJcbiAgPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLnJvdXRlckxpbmsgJiYgIWl0ZW0uZXh0ZXJuYWxMaW5rXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgICAocG9pbnRlcmVudGVyKT1cIm9uSXRlbVBvaW50ZXJFbnRlcihpdGVtKVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLml0ZW1zID8gJ21lbnUnIDogbnVsbFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkXCJcclxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtLXJpZ2h0LWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwhLS0gVE9ETzpcclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaXRlbXNcIlxyXG4gICAgICAgICAgICBuYW1lPVwiY2hldnJvbl9yaWdodFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWljb25cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWljb25cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAtLT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pdGVtLWljb25cIiAqbmdJZj1cIml0ZW0uaXRlbXNcIj4mZ3Q7PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbGlua0JvZHkgbGV0LWl0ZW0+XHJcbiAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0tcmlnaHQtY29udGVudFwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0LmxhYmVsIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwhLS0gVE9ETzpcclxuICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1pY29uXCJcclxuICAgICAgICAvPlxyXG4gICAgICAtLT48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ucm91dGVyTGlua1wiPlxyXG4gICAgICA8YVxyXG4gICAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgICAgY2xhc3M9XCJtZW51LWl0ZW0tY29udGVudFwiXHJcbiAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiXHJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucXVlcnlQYXJhbXNcIlxyXG4gICAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxyXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxyXG4gICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIml0ZW0uZGF0YVRlc3RJZFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtCb2R5OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5leHRlcm5hbExpbmtcIj5cclxuICAgICAgPGFcclxuICAgICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgICBbaHJlZl09XCJpdGVtLmV4dGVybmFsTGlua1wiXHJcbiAgICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXHJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0JvZHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvYT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gQ2hpbGQgbWVudXMgZXhpc3Qgb25seSBpZiB0aGlzIG1lbnUgaXMgZXhwYW5kZWQuIC0tPlxyXG4gICAgPCEtLSBPbmx5IG9uZSBpbnZpc2libGUgbGV2ZWwgaXMgYWx3YXlzIGF0dGFjaGVkIHRvIERPTSwgdGhlIHJlc3QgZG9lcyBub3QgZXhpc3QuIC0tPlxyXG4gICAgPHJkdC1tZW51LW92ZXJsYXlcclxuICAgICAgKm5nSWY9XCJpdGVtLml0ZW1zICYmIGV4cGFuZGVkXCJcclxuICAgICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXHJcbiAgICAgIFtleHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkXCJcclxuICAgICAgW2F1dG9mb2N1c0l0ZW1dPVwiYXV0b2ZvY3VzU3VibWVudUl0ZW1cIlxyXG4gICAgICBbcHJlZmVycmVkSG9yaXpvbnRhbERpcl09XCJob3Jpem9udGFsRGlyPy5kaXIhXCJcclxuICAgICAgW3ByZWZlcnJlZFZlcnRpY2FsRGlyXT1cInZlcnRpY2FsRGlyPy5kaXIhXCJcclxuICAgICAgW2xldmVsXT1cImxldmVsICsgMVwiXHJcbiAgICAgIFthbmNob3JFbGVtZW50XT1cImFuY2hvckVsXCJcclxuICAgIC8+XHJcbiAgPC9saT5cclxuPC91bD5cclxuIl19
|