@theseam/ui-common 0.4.8 → 0.4.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/datatable/datatable-action-menu/datatable-action-menu.component.d.ts +7 -2
  2. package/datatable/datatable-action-menu-item/datatable-action-menu-item.component.d.ts +3 -1
  3. package/esm2020/datatable/datatable-action-menu/datatable-action-menu.component.mjs +17 -5
  4. package/esm2020/datatable/datatable-action-menu-item/datatable-action-menu-item.component.mjs +4 -2
  5. package/esm2020/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.mjs +1 -1
  6. package/esm2020/datatable/datatable-export-button/datatable-export-button.component.mjs +1 -1
  7. package/esm2020/datatable-dynamic/datatable-dynamic-action-menu/datatable-dynamic-action-menu.component.mjs +1 -1
  8. package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widgets.component.mjs +2 -1
  9. package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widgets.service.mjs +9 -6
  10. package/esm2020/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.mjs +1 -1
  11. package/esm2020/framework/top-bar/top-bar.component.mjs +1 -1
  12. package/esm2020/menu/menu-toggle.directive.mjs +16 -4
  13. package/esm2020/services/preferences/preferences-record.mjs +5 -7
  14. package/esm2020/story-helpers/story-preferences-accessor.service.mjs +2 -2
  15. package/fesm2015/theseam-ui-common-datatable-dynamic.mjs +1 -1
  16. package/fesm2015/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
  17. package/fesm2015/theseam-ui-common-datatable.mjs +21 -10
  18. package/fesm2015/theseam-ui-common-datatable.mjs.map +1 -1
  19. package/fesm2015/theseam-ui-common-framework.mjs +11 -7
  20. package/fesm2015/theseam-ui-common-framework.mjs.map +1 -1
  21. package/fesm2015/theseam-ui-common-menu.mjs +15 -4
  22. package/fesm2015/theseam-ui-common-menu.mjs.map +1 -1
  23. package/fesm2015/theseam-ui-common-services.mjs +4 -6
  24. package/fesm2015/theseam-ui-common-services.mjs.map +1 -1
  25. package/fesm2015/theseam-ui-common-story-helpers.mjs +1 -1
  26. package/fesm2015/theseam-ui-common-story-helpers.mjs.map +1 -1
  27. package/fesm2020/theseam-ui-common-datatable-dynamic.mjs +1 -1
  28. package/fesm2020/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
  29. package/fesm2020/theseam-ui-common-datatable.mjs +20 -9
  30. package/fesm2020/theseam-ui-common-datatable.mjs.map +1 -1
  31. package/fesm2020/theseam-ui-common-framework.mjs +11 -7
  32. package/fesm2020/theseam-ui-common-framework.mjs.map +1 -1
  33. package/fesm2020/theseam-ui-common-menu.mjs +15 -4
  34. package/fesm2020/theseam-ui-common-menu.mjs.map +1 -1
  35. package/fesm2020/theseam-ui-common-services.mjs +4 -6
  36. package/fesm2020/theseam-ui-common-services.mjs.map +1 -1
  37. package/fesm2020/theseam-ui-common-story-helpers.mjs +1 -1
  38. package/fesm2020/theseam-ui-common-story-helpers.mjs.map +1 -1
  39. package/menu/menu-toggle.directive.d.ts +4 -1
  40. package/package.json +1 -1
  41. package/story-helpers/story-preferences-accessor.service.d.ts +1 -1
@@ -1,18 +1,23 @@
1
+ import { BooleanInput } from '@angular/cdk/coercion';
1
2
  import { ConnectionPositionPair } from '@angular/cdk/overlay';
2
3
  import { QueryList } from '@angular/core';
3
4
  import { Router } from '@angular/router';
4
5
  import { SeamConfirmDialogService } from '@theseam/ui-common/confirm-dialog';
6
+ import { MenuComponent } from '@theseam/ui-common/menu';
5
7
  import { DatatableActionMenuItemComponent } from '../datatable-action-menu-item/datatable-action-menu-item.component';
6
8
  import * as i0 from "@angular/core";
7
9
  export declare class DatatableActionMenuComponent {
8
10
  private _confirmDialog;
9
11
  private _router;
10
- faEllipsisH: import("@fortawesome/fontawesome-common-types").IconDefinition;
12
+ static ngAcceptInputType_isSubMenu: BooleanInput;
13
+ readonly faEllipsisH: import("@fortawesome/fontawesome-common-types").IconDefinition;
14
+ menu?: MenuComponent;
11
15
  items?: QueryList<DatatableActionMenuItemComponent>;
12
16
  /** @ignore */
13
17
  _actionMenuPositions: ConnectionPositionPair[];
18
+ isSubMenu: boolean;
14
19
  constructor(_confirmDialog: SeamConfirmDialogService, _router: Router);
15
20
  activateItem(event: any, item: DatatableActionMenuItemComponent): void;
16
21
  static ɵfac: i0.ɵɵFactoryDeclaration<DatatableActionMenuComponent, never>;
17
- static ɵcmp: i0.ɵɵComponentDeclaration<DatatableActionMenuComponent, "seam-datatable-action-menu", never, {}, {}, ["items"], never, false, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<DatatableActionMenuComponent, "seam-datatable-action-menu", ["seamDatatableActionMenu"], { "isSubMenu": "isSubMenu"; }, {}, ["items"], never, false, never>;
18
23
  }
@@ -1,5 +1,6 @@
1
1
  import { EventEmitter } from '@angular/core';
2
2
  import { ThemeTypes } from '@theseam/ui-common/models';
3
+ import { DatatableActionMenuComponent } from '../datatable-action-menu/datatable-action-menu.component';
3
4
  import * as i0 from "@angular/core";
4
5
  export declare class DatatableActionMenuItemComponent {
5
6
  label: string | undefined | null;
@@ -25,7 +26,8 @@ export declare class DatatableActionMenuItemComponent {
25
26
  };
26
27
  } | undefined | null;
27
28
  disabled: boolean | undefined | null;
29
+ subMenu: DatatableActionMenuComponent | undefined | null;
28
30
  readonly click: EventEmitter<any>;
29
31
  static ɵfac: i0.ɵɵFactoryDeclaration<DatatableActionMenuItemComponent, never>;
30
- static ɵcmp: i0.ɵɵComponentDeclaration<DatatableActionMenuItemComponent, "seam-datatable-action-menu-item", never, { "label": "label"; "href": "attr.href"; "target": "target"; "queryParams": "queryParams"; "fragment": "fragment"; "queryParamsHandling": "queryParamsHandling"; "preserveFragment": "preserveFragment"; "skipLocationChange": "skipLocationChange"; "replaceUrl": "replaceUrl"; "state": "state"; "routerLink": "routerLink"; "confirmDialog": "confirmDialog"; "disabled": "disabled"; }, { "click": "click"; }, never, never, false, never>;
32
+ static ɵcmp: i0.ɵɵComponentDeclaration<DatatableActionMenuItemComponent, "seam-datatable-action-menu-item", never, { "label": "label"; "href": "attr.href"; "target": "target"; "queryParams": "queryParams"; "fragment": "fragment"; "queryParamsHandling": "queryParamsHandling"; "preserveFragment": "preserveFragment"; "skipLocationChange": "skipLocationChange"; "replaceUrl": "replaceUrl"; "state": "state"; "routerLink": "routerLink"; "confirmDialog": "confirmDialog"; "disabled": "disabled"; "subMenu": "subMenu"; }, { "click": "click"; }, never, never, false, never>;
31
33
  }
@@ -1,5 +1,8 @@
1
- import { Component, ContentChildren } from '@angular/core';
1
+ import { __decorate } from "tslib";
2
+ import { Component, ContentChildren, Input, ViewChild } from '@angular/core';
2
3
  import { faEllipsisH } from '@fortawesome/free-solid-svg-icons';
4
+ import { InputBoolean } from '@theseam/ui-common/core';
5
+ import { MenuComponent } from '@theseam/ui-common/menu';
3
6
  import { DatatableActionMenuItemComponent } from '../datatable-action-menu-item/datatable-action-menu-item.component';
4
7
  import * as i0 from "@angular/core";
5
8
  import * as i1 from "@theseam/ui-common/confirm-dialog";
@@ -39,6 +42,7 @@ export class DatatableActionMenuComponent {
39
42
  overlayY: 'bottom',
40
43
  },
41
44
  ];
45
+ this.isSubMenu = false;
42
46
  }
43
47
  activateItem(event, item) {
44
48
  if (item.confirmDialog) {
@@ -89,12 +93,20 @@ export class DatatableActionMenuComponent {
89
93
  }
90
94
  }
91
95
  DatatableActionMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableActionMenuComponent, deps: [{ token: i1.SeamConfirmDialogService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
92
- DatatableActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableActionMenuComponent, selector: "seam-datatable-action-menu", queries: [{ propertyName: "items", predicate: DatatableActionMenuItemComponent }], ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i4.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i4.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i5.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }] });
96
+ DatatableActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableActionMenuComponent, selector: "seam-datatable-action-menu", inputs: { isSubMenu: "isSubMenu" }, queries: [{ propertyName: "items", predicate: DatatableActionMenuItemComponent }], viewQueries: [{ propertyName: "menu", first: true, predicate: MenuComponent, descendants: true, static: true }], exportAs: ["seamDatatableActionMenu"], ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <ng-container *ngIf=\"!!item.subMenu; else noSubMenu\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [seamMenuToggle]=\"item.subMenu.menu\"\n [seamMenuTogglePositionsOffsetY]=\"-3\">\n {{ item.label }}\n </button>\n </ng-container>\n <ng-template #noSubMenu>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<ng-container *ngIf=\"!isSubMenu\">\n <button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n </button>\n</ng-container>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i4.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions", "seamMenuTogglePositionsOffsetY"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i4.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i5.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }] });
97
+ __decorate([
98
+ InputBoolean()
99
+ ], DatatableActionMenuComponent.prototype, "isSubMenu", void 0);
93
100
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableActionMenuComponent, decorators: [{
94
101
  type: Component,
95
- args: [{ selector: 'seam-datatable-action-menu', template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"] }]
96
- }], ctorParameters: function () { return [{ type: i1.SeamConfirmDialogService }, { type: i2.Router }]; }, propDecorators: { items: [{
102
+ args: [{ selector: 'seam-datatable-action-menu', exportAs: 'seamDatatableActionMenu', template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <ng-container *ngIf=\"!!item.subMenu; else noSubMenu\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [seamMenuToggle]=\"item.subMenu.menu\"\n [seamMenuTogglePositionsOffsetY]=\"-3\">\n {{ item.label }}\n </button>\n </ng-container>\n <ng-template #noSubMenu>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<ng-container *ngIf=\"!isSubMenu\">\n <button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n </button>\n</ng-container>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"] }]
103
+ }], ctorParameters: function () { return [{ type: i1.SeamConfirmDialogService }, { type: i2.Router }]; }, propDecorators: { menu: [{
104
+ type: ViewChild,
105
+ args: [MenuComponent, { static: true }]
106
+ }], items: [{
97
107
  type: ContentChildren,
98
108
  args: [DatatableActionMenuItemComponent]
109
+ }], isSubMenu: [{
110
+ type: Input
99
111
  }] } });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLWFjdGlvbi1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlLWFjdGlvbi1tZW51L2RhdGF0YWJsZS1hY3Rpb24tbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL2RhdGF0YWJsZS1hY3Rpb24tbWVudS9kYXRhdGFibGUtYWN0aW9uLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQWEsTUFBTSxlQUFlLENBQUE7QUFHckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBSS9ELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLG9FQUFvRSxDQUFBOzs7Ozs7O0FBT3JILE1BQU0sT0FBTyw0QkFBNEI7SUFrQ3ZDLFlBQ1UsY0FBd0MsRUFDeEMsT0FBZTtRQURmLG1CQUFjLEdBQWQsY0FBYyxDQUEwQjtRQUN4QyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBbEN6QixnQkFBVyxHQUFHLFdBQVcsQ0FBQTtRQUl6QixjQUFjO1FBQ2QseUJBQW9CLEdBQTZCO1lBQy9DO2dCQUNFLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixPQUFPLEVBQUUsUUFBUTtnQkFDakIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLEtBQUs7YUFDaEI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsT0FBTztnQkFDaEIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLFFBQVE7YUFDbkI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUUsUUFBUTtnQkFDakIsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLFFBQVEsRUFBRSxLQUFLO2FBQ2hCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLFFBQVEsRUFBRSxRQUFRO2FBQ25CO1NBQ0YsQ0FBQTtJQUtHLENBQUM7SUFFTCxZQUFZLENBQUMsS0FBVSxFQUFFLElBQXNDO1FBQzdELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztpQkFDM0UsV0FBVyxFQUFFO2lCQUNiLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDYixJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7d0JBQ2IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLENBQUE7d0JBQzVELG9FQUFvRTt3QkFDcEUsc0VBQXNFO3dCQUN0RSxzQkFBc0I7d0JBQ3RCLElBQUk7cUJBQ0w7eUJBQU07d0JBQ0wsTUFBTSxNQUFNLEdBQXFCLEVBQUUsQ0FBQTt3QkFDbkMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFOzRCQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQTt5QkFBRTt3QkFDL0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFOzRCQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTt5QkFBRTt3QkFDdEQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7NEJBQUUsTUFBTSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQTt5QkFBRTt3QkFDdkYsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7NEJBQUUsTUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTt5QkFBRTt3QkFDOUUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7NEJBQUUsTUFBTSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQTt5QkFBRTt3QkFDcEYsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFOzRCQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQTt5QkFBRTt3QkFDNUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFOzRCQUFFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQTt5QkFBRTt3QkFFN0MsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO3dCQUNyRixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7cUJBQ3hDO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDTDthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDdkI7SUFDSCxDQUFDOzt5SEF0RVUsNEJBQTRCOzZHQUE1Qiw0QkFBNEIsd0ZBSXRCLGdDQUFnQyw2QkNuQm5ELDgyREFtREE7MkZEcENhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSw0QkFBNEI7b0lBUWEsS0FBSztzQkFBdkQsZUFBZTt1QkFBQyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25uZWN0aW9uUG9zaXRpb25QYWlyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknXG5pbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcblxuaW1wb3J0IHsgZmFFbGxpcHNpc0ggfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnXG5cbmltcG9ydCB7IFNlYW1Db25maXJtRGlhbG9nU2VydmljZSB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9jb25maXJtLWRpYWxvZydcblxuaW1wb3J0IHsgRGF0YXRhYmxlQWN0aW9uTWVudUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtYWN0aW9uLW1lbnUtaXRlbS9kYXRhdGFibGUtYWN0aW9uLW1lbnUtaXRlbS5jb21wb25lbnQnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlYW0tZGF0YXRhYmxlLWFjdGlvbi1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGF0YWJsZS1hY3Rpb24tbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGF0YWJsZS1hY3Rpb24tbWVudS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQge1xuXG4gIGZhRWxsaXBzaXNIID0gZmFFbGxpcHNpc0hcblxuICBAQ29udGVudENoaWxkcmVuKERhdGF0YWJsZUFjdGlvbk1lbnVJdGVtQ29tcG9uZW50KSBpdGVtcz86IFF1ZXJ5TGlzdDxEYXRhdGFibGVBY3Rpb25NZW51SXRlbUNvbXBvbmVudD5cblxuICAvKiogQGlnbm9yZSAqL1xuICBfYWN0aW9uTWVudVBvc2l0aW9uczogQ29ubmVjdGlvblBvc2l0aW9uUGFpcltdID0gW1xuICAgIHtcbiAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICB9LFxuICBdXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY29uZmlybURpYWxvZzogU2VhbUNvbmZpcm1EaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyXG4gICkgeyB9XG5cbiAgYWN0aXZhdGVJdGVtKGV2ZW50OiBhbnksIGl0ZW06IERhdGF0YWJsZUFjdGlvbk1lbnVJdGVtQ29tcG9uZW50KSB7XG4gICAgaWYgKGl0ZW0uY29uZmlybURpYWxvZykge1xuICAgICAgdGhpcy5fY29uZmlybURpYWxvZy5vcGVuKGl0ZW0uY29uZmlybURpYWxvZy5tZXNzYWdlLCBpdGVtLmNvbmZpcm1EaWFsb2cuYWxlcnQpXG4gICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgIC5zdWJzY3JpYmUodiA9PiB7XG4gICAgICAgICAgaWYgKHYgPT09ICdjb25maXJtJykge1xuICAgICAgICAgICAgaXRlbS5jbGljay5lbWl0KGV2ZW50KVxuICAgICAgICAgICAgaWYgKGl0ZW0uaHJlZikge1xuICAgICAgICAgICAgICBjb25zdCB3aW4gPSB3aW5kb3cub3BlbihpdGVtLmhyZWYsIGl0ZW0udGFyZ2V0IHx8IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgaWYgYWx3YXlzIHNldHRpbmcgb3BlbmVyIHRvIG51bGwgaXMgdG8gcmVzdHJpY3RpdmVcbiAgICAgICAgICAgICAgLy8gaWYgKHdpbiAmJiBpdGVtLnRhcmdldCAmJiBpdGVtLnRhcmdldC50b0xvd2VyQ2FzZSgpID09PSAnX2JsYW5rJykge1xuICAgICAgICAgICAgICAvLyAgIHdpbi5vcGVuZXIgPSBudWxsXG4gICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4dHJhczogTmF2aWdhdGlvbkV4dHJhcyA9IHt9XG4gICAgICAgICAgICAgIGlmIChpdGVtLnF1ZXJ5UGFyYW1zKSB7IGV4dHJhcy5xdWVyeVBhcmFtcyA9IGl0ZW0ucXVlcnlQYXJhbXMgfVxuICAgICAgICAgICAgICBpZiAoaXRlbS5mcmFnbWVudCkgeyBleHRyYXMuZnJhZ21lbnQgPSBpdGVtLmZyYWdtZW50IH1cbiAgICAgICAgICAgICAgaWYgKGl0ZW0ucXVlcnlQYXJhbXNIYW5kbGluZykgeyBleHRyYXMucXVlcnlQYXJhbXNIYW5kbGluZyA9IGl0ZW0ucXVlcnlQYXJhbXNIYW5kbGluZyB9XG4gICAgICAgICAgICAgIGlmIChpdGVtLnByZXNlcnZlRnJhZ21lbnQpIHsgZXh0cmFzLnByZXNlcnZlRnJhZ21lbnQgPSBpdGVtLnByZXNlcnZlRnJhZ21lbnQgfVxuICAgICAgICAgICAgICBpZiAoaXRlbS5za2lwTG9jYXRpb25DaGFuZ2UpIHsgZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZSA9IGl0ZW0uc2tpcExvY2F0aW9uQ2hhbmdlIH1cbiAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwbGFjZVVybCkgeyBleHRyYXMucmVwbGFjZVVybCA9IGl0ZW0ucmVwbGFjZVVybCB9XG4gICAgICAgICAgICAgIGlmIChpdGVtLnN0YXRlKSB7IGV4dHJhcy5zdGF0ZSA9IGl0ZW0uc3RhdGUgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRzID0gQXJyYXkuaXNBcnJheShpdGVtLnJvdXRlckxpbmspID8gaXRlbS5yb3V0ZXJMaW5rIDogW2l0ZW0ucm91dGVyTGlua11cbiAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKGNvbW1hbmRzLCBleHRyYXMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtLmNsaWNrLmVtaXQoZXZlbnQpXG4gICAgfVxuICB9XG5cbn1cbiIsIjxzZWFtLW1lbnUgI21lbnVcbiAgbWVudUNsYXNzPVwibGlzdC1ncm91cCBweS0wIGJvcmRlci0wIHNlYW0tZGF0YXRhYmxlLWFjdGlvbi1tZW51XCJcbiAgYW5pbWF0aW9uVHlwZT1cImZhZGVcIj5cblxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihpdGVtLnJvdXRlckxpbmsgfHwgaXRlbS5ocmVmKSAmJiAhaXRlbS5jb25maXJtRGlhbG9nOyBlbHNlIG5vUm91dGVyTGlua1wiPlxuICAgICAgPGEgKm5nSWY9XCJpdGVtLmhyZWY7IGVsc2Ugbm9IcmVmXCJcbiAgICAgICAgc2VhbU1lbnVJdGVtXG4gICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtaXRlbS1hY3Rpb24gcHktMVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuaHJlZl09XCJpdGVtLmhyZWZcIlxuICAgICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcbiAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlSXRlbSgkZXZlbnQsIGl0ZW0pXCI+XG4gICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgIDwvYT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9IcmVmPlxuICAgICAgICA8YSBzZWFtTWVudUl0ZW1cbiAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uIHB5LTFcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwiaXRlbS5xdWVyeVBhcmFtc1wiXG4gICAgICAgICAgW2ZyYWdtZW50XT1cIiRhbnkoaXRlbS5mcmFnbWVudClcIlxuICAgICAgICAgIFtxdWVyeVBhcmFtc0hhbmRsaW5nXT1cIml0ZW0ucXVlcnlQYXJhbXNIYW5kbGluZ1wiXG4gICAgICAgICAgW3ByZXNlcnZlRnJhZ21lbnRdPVwiJGFueShpdGVtLnByZXNlcnZlRnJhZ21lbnQpXCJcbiAgICAgICAgICBbc2tpcExvY2F0aW9uQ2hhbmdlXT1cIiRhbnkoaXRlbS5za2lwTG9jYXRpb25DaGFuZ2UpXCJcbiAgICAgICAgICBbcmVwbGFjZVVybF09XCIkYW55KGl0ZW0ucmVwbGFjZVVybClcIlxuICAgICAgICAgIFtzdGF0ZV09XCIkYW55KGl0ZW0uc3RhdGUpXCJcbiAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIlxuICAgICAgICAgIFt0YXJnZXRdPVwiJGFueShpdGVtLnRhcmdldClcIlxuICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZUl0ZW0oJGV2ZW50LCBpdGVtKVwiPlxuICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI25vUm91dGVyTGluaz5cbiAgICAgIDxidXR0b24gc2VhbU1lbnVJdGVtXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uIHB5LTFcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgIChjbGljayk9XCJhY3RpdmF0ZUl0ZW0oJGV2ZW50LCBpdGVtKVwiPlxuICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvc2VhbS1tZW51PlxuXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRhdGF0YWJsZS1hY3Rpb24tYnV0dG9uIGJ0blwiXG4gIFtzZWFtTWVudVRvZ2dsZV09XCJtZW51XCJcbiAgW3Bvc2l0aW9uc109XCJfYWN0aW9uTWVudVBvc2l0aW9ucyB8fCBbXVwiXG4gIHRpdGxlPVwiUm93IEFjdGlvbnNcIj5cbiAgPHNlYW0taWNvbiBbaWNvbl09XCJmYUVsbGlwc2lzSFwiPjwvc2VhbS1pY29uPlxuPC9idXR0b24+XG4iXX0=
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLWFjdGlvbi1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlLWFjdGlvbi1tZW51L2RhdGF0YWJsZS1hY3Rpb24tbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL2RhdGF0YWJsZS1hY3Rpb24tbWVudS9kYXRhdGFibGUtYWN0aW9uLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFHdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBRS9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFFdkQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0VBQW9FLENBQUE7Ozs7Ozs7QUFRckgsTUFBTSxPQUFPLDRCQUE0QjtJQXVDdkMsWUFDVSxjQUF3QyxFQUN4QyxPQUFlO1FBRGYsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBQ3hDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUF0Q2hCLGdCQUFXLEdBQUcsV0FBVyxDQUFBO1FBTWxDLGNBQWM7UUFDZCx5QkFBb0IsR0FBNkI7WUFDL0M7Z0JBQ0UsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixRQUFRLEVBQUUsS0FBSztnQkFDZixRQUFRLEVBQUUsS0FBSzthQUNoQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixPQUFPLEVBQUUsS0FBSztnQkFDZCxRQUFRLEVBQUUsS0FBSztnQkFD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QkFBNEI7a0JBTnhDLFNBQVM7K0JBQ0UsNEJBQTRCLFlBRzVCLHlCQUF5QjtvSUFPUyxJQUFJO3NCQUEvQyxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRVMsS0FBSztzQkFBdkQsZUFBZTt1QkFBQyxnQ0FBZ0M7Z0JBOEJ4QixTQUFTO3NCQUFqQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQm9vbGVhbklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHsgQ29ubmVjdGlvblBvc2l0aW9uUGFpciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5J1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIElucHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5cbmltcG9ydCB7IGZhRWxsaXBzaXNIIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJ1xuaW1wb3J0IHsgU2VhbUNvbmZpcm1EaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2NvbmZpcm0tZGlhbG9nJ1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2NvcmUnXG5pbXBvcnQgeyBNZW51Q29tcG9uZW50IH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL21lbnUnXG5cbmltcG9ydCB7IERhdGF0YWJsZUFjdGlvbk1lbnVJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLWFjdGlvbi1tZW51LWl0ZW0vZGF0YXRhYmxlLWFjdGlvbi1tZW51LWl0ZW0uY29tcG9uZW50J1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLWRhdGF0YWJsZS1hY3Rpb24tbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhdGFibGUtYWN0aW9uLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhdGFibGUtYWN0aW9uLW1lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdzZWFtRGF0YXRhYmxlQWN0aW9uTWVudSdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YXRhYmxlQWN0aW9uTWVudUNvbXBvbmVudCB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9pc1N1Yk1lbnU6IEJvb2xlYW5JbnB1dFxuXG4gIHJlYWRvbmx5IGZhRWxsaXBzaXNIID0gZmFFbGxpcHNpc0hcblxuICBAVmlld0NoaWxkKE1lbnVDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIG1lbnU/OiBNZW51Q29tcG9uZW50XG5cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRhdGFibGVBY3Rpb25NZW51SXRlbUNvbXBvbmVudCkgaXRlbXM/OiBRdWVyeUxpc3Q8RGF0YXRhYmxlQWN0aW9uTWVudUl0ZW1Db21wb25lbnQ+XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2FjdGlvbk1lbnVQb3NpdGlvbnM6IENvbm5lY3Rpb25Qb3NpdGlvblBhaXJbXSA9IFtcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgfSxcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgfSxcbiAgXVxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBpc1N1Yk1lbnUgPSBmYWxzZVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NvbmZpcm1EaWFsb2c6IFNlYW1Db25maXJtRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlclxuICApIHsgfVxuXG4gIGFjdGl2YXRlSXRlbShldmVudDogYW55LCBpdGVtOiBEYXRhdGFibGVBY3Rpb25NZW51SXRlbUNvbXBvbmVudCkge1xuICAgIGlmIChpdGVtLmNvbmZpcm1EaWFsb2cpIHtcbiAgICAgIHRoaXMuX2NvbmZpcm1EaWFsb2cub3BlbihpdGVtLmNvbmZpcm1EaWFsb2cubWVzc2FnZSwgaXRlbS5jb25maXJtRGlhbG9nLmFsZXJ0KVxuICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAuc3Vic2NyaWJlKHYgPT4ge1xuICAgICAgICAgIGlmICh2ID09PSAnY29uZmlybScpIHtcbiAgICAgICAgICAgIGl0ZW0uY2xpY2suZW1pdChldmVudClcbiAgICAgICAgICAgIGlmIChpdGVtLmhyZWYpIHtcbiAgICAgICAgICAgICAgY29uc3Qgd2luID0gd2luZG93Lm9wZW4oaXRlbS5ocmVmLCBpdGVtLnRhcmdldCB8fCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIGlmIGFsd2F5cyBzZXR0aW5nIG9wZW5lciB0byBudWxsIGlzIHRvIHJlc3RyaWN0aXZlXG4gICAgICAgICAgICAgIC8vIGlmICh3aW4gJiYgaXRlbS50YXJnZXQgJiYgaXRlbS50YXJnZXQudG9Mb3dlckNhc2UoKSA9PT0gJ19ibGFuaycpIHtcbiAgICAgICAgICAgICAgLy8gICB3aW4ub3BlbmVyID0gbnVsbFxuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBleHRyYXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7fVxuICAgICAgICAgICAgICBpZiAoaXRlbS5xdWVyeVBhcmFtcykgeyBleHRyYXMucXVlcnlQYXJhbXMgPSBpdGVtLnF1ZXJ5UGFyYW1zIH1cbiAgICAgICAgICAgICAgaWYgKGl0ZW0uZnJhZ21lbnQpIHsgZXh0cmFzLmZyYWdtZW50ID0gaXRlbS5mcmFnbWVudCB9XG4gICAgICAgICAgICAgIGlmIChpdGVtLnF1ZXJ5UGFyYW1zSGFuZGxpbmcpIHsgZXh0cmFzLnF1ZXJ5UGFyYW1zSGFuZGxpbmcgPSBpdGVtLnF1ZXJ5UGFyYW1zSGFuZGxpbmcgfVxuICAgICAgICAgICAgICBpZiAoaXRlbS5wcmVzZXJ2ZUZyYWdtZW50KSB7IGV4dHJhcy5wcmVzZXJ2ZUZyYWdtZW50ID0gaXRlbS5wcmVzZXJ2ZUZyYWdtZW50IH1cbiAgICAgICAgICAgICAgaWYgKGl0ZW0uc2tpcExvY2F0aW9uQ2hhbmdlKSB7IGV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2UgPSBpdGVtLnNraXBMb2NhdGlvbkNoYW5nZSB9XG4gICAgICAgICAgICAgIGlmIChpdGVtLnJlcGxhY2VVcmwpIHsgZXh0cmFzLnJlcGxhY2VVcmwgPSBpdGVtLnJlcGxhY2VVcmwgfVxuICAgICAgICAgICAgICBpZiAoaXRlbS5zdGF0ZSkgeyBleHRyYXMuc3RhdGUgPSBpdGVtLnN0YXRlIH1cblxuICAgICAgICAgICAgICBjb25zdCBjb21tYW5kcyA9IEFycmF5LmlzQXJyYXkoaXRlbS5yb3V0ZXJMaW5rKSA/IGl0ZW0ucm91dGVyTGluayA6IFtpdGVtLnJvdXRlckxpbmtdXG4gICAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywgZXh0cmFzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbS5jbGljay5lbWl0KGV2ZW50KVxuICAgIH1cbiAgfVxuXG59XG4iLCI8c2VhbS1tZW51ICNtZW51XG4gIG1lbnVDbGFzcz1cImxpc3QtZ3JvdXAgcHktMCBib3JkZXItMCBzZWFtLWRhdGF0YWJsZS1hY3Rpb24tbWVudVwiXG4gIGFuaW1hdGlvblR5cGU9XCJmYWRlXCI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoaXRlbS5yb3V0ZXJMaW5rIHx8IGl0ZW0uaHJlZikgJiYgIWl0ZW0uY29uZmlybURpYWxvZzsgZWxzZSBub1JvdXRlckxpbmtcIj5cbiAgICAgIDxhICpuZ0lmPVwiaXRlbS5ocmVmOyBlbHNlIG5vSHJlZlwiXG4gICAgICAgIHNlYW1NZW51SXRlbVxuICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uIHB5LTFcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLmhyZWZdPVwiaXRlbS5ocmVmXCJcbiAgICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXG4gICAgICAgIChjbGljayk9XCJhY3RpdmF0ZUl0ZW0oJGV2ZW50LCBpdGVtKVwiPlxuICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICA8L2E+XG4gICAgICA8bmctdGVtcGxhdGUgI25vSHJlZj5cbiAgICAgICAgPGEgc2VhbU1lbnVJdGVtXG4gICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvbiBweS0xXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucXVlcnlQYXJhbXNcIlxuICAgICAgICAgIFtmcmFnbWVudF09XCIkYW55KGl0ZW0uZnJhZ21lbnQpXCJcbiAgICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJpdGVtLnF1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuICAgICAgICAgIFtwcmVzZXJ2ZUZyYWdtZW50XT1cIiRhbnkoaXRlbS5wcmVzZXJ2ZUZyYWdtZW50KVwiXG4gICAgICAgICAgW3NraXBMb2NhdGlvbkNoYW5nZV09XCIkYW55KGl0ZW0uc2tpcExvY2F0aW9uQ2hhbmdlKVwiXG4gICAgICAgICAgW3JlcGxhY2VVcmxdPVwiJGFueShpdGVtLnJlcGxhY2VVcmwpXCJcbiAgICAgICAgICBbc3RhdGVdPVwiJGFueShpdGVtLnN0YXRlKVwiXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICBbdGFyZ2V0XT1cIiRhbnkoaXRlbS50YXJnZXQpXCJcbiAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVJdGVtKCRldmVudCwgaXRlbSlcIj5cbiAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNub1JvdXRlckxpbms+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFpdGVtLnN1Yk1lbnU7IGVsc2Ugbm9TdWJNZW51XCI+XG4gICAgICAgIDxidXR0b24gc2VhbU1lbnVJdGVtXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvbiBweS0xXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgW3NlYW1NZW51VG9nZ2xlXT1cIml0ZW0uc3ViTWVudS5tZW51XCJcbiAgICAgICAgICBbc2VhbU1lbnVUb2dnbGVQb3NpdGlvbnNPZmZzZXRZXT1cIi0zXCI+XG4gICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICAjbm9TdWJNZW51PlxuICAgICAgICA8YnV0dG9uIHNlYW1NZW51SXRlbVxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtaXRlbS1hY3Rpb24gcHktMVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZUl0ZW0oJGV2ZW50LCBpdGVtKVwiPlxuICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9zZWFtLW1lbnU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNTdWJNZW51XCI+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZGF0YXRhYmxlLWFjdGlvbi1idXR0b24gYnRuXCJcbiAgICBbc2VhbU1lbnVUb2dnbGVdPVwibWVudVwiXG4gICAgW3Bvc2l0aW9uc109XCJfYWN0aW9uTWVudVBvc2l0aW9ucyB8fCBbXVwiXG4gICAgdGl0bGU9XCJSb3cgQWN0aW9uc1wiPlxuICAgIDxzZWFtLWljb24gW2ljb25dPVwiZmFFbGxpcHNpc0hcIj48L3NlYW0taWNvbj5cbiAgPC9idXR0b24+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -7,7 +7,7 @@ export class DatatableActionMenuItemComponent {
7
7
  }
8
8
  }
9
9
  DatatableActionMenuItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableActionMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10
- DatatableActionMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableActionMenuItemComponent, selector: "seam-datatable-action-menu-item", inputs: { label: "label", href: ["attr.href", "href"], target: "target", queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", preserveFragment: "preserveFragment", skipLocationChange: "skipLocationChange", replaceUrl: "replaceUrl", state: "state", routerLink: "routerLink", confirmDialog: "confirmDialog", disabled: "disabled" }, outputs: { click: "click" }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
10
+ DatatableActionMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableActionMenuItemComponent, selector: "seam-datatable-action-menu-item", inputs: { label: "label", href: ["attr.href", "href"], target: "target", queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", preserveFragment: "preserveFragment", skipLocationChange: "skipLocationChange", replaceUrl: "replaceUrl", state: "state", routerLink: "routerLink", confirmDialog: "confirmDialog", disabled: "disabled", subMenu: "subMenu" }, outputs: { click: "click" }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
11
11
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableActionMenuItemComponent, decorators: [{
12
12
  type: Component,
13
13
  args: [{
@@ -42,7 +42,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
42
42
  type: Input
43
43
  }], disabled: [{
44
44
  type: Input
45
+ }], subMenu: [{
46
+ type: Input
45
47
  }], click: [{
46
48
  type: Output
47
49
  }] } });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLWFjdGlvbi1tZW51LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2RhdGF0YWJsZS9kYXRhdGFibGUtYWN0aW9uLW1lbnUtaXRlbS9kYXRhdGFibGUtYWN0aW9uLW1lbnUtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUE7O0FBU3RCLE1BQU0sT0FBTyxnQ0FBZ0M7SUFMN0M7UUEyQkUsNERBQTREO1FBQ3pDLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFBO0tBRW5EOzs2SEF6QlksZ0NBQWdDO2lIQUFoQyxnQ0FBZ0MsdWRBSGpDLEVBQUU7MkZBR0QsZ0NBQWdDO2tCQUw1QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQ0FBaUM7b0JBQzNDLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs4QkFHVSxLQUFLO3NCQUFiLEtBQUs7Z0JBR2MsSUFBSTtzQkFBdkIsS0FBSzt1QkFBQyxXQUFXO2dCQUNULE1BQU07c0JBQWQsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR2EsS0FBSztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuXG5pbXBvcnQgeyBUaGVtZVR5cGVzIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL21vZGVscydcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2VhbS1kYXRhdGFibGUtYWN0aW9uLW1lbnUtaXRlbScsXG4gIHRlbXBsYXRlOiBgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0YXRhYmxlQWN0aW9uTWVudUl0ZW1Db21wb25lbnQge1xuXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdhdHRyLmhyZWYnKSBocmVmOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIHRhcmdldDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIC8vIEFsbG93IHJvdXRlckxpbmsgaW5wdXRzIG9uIG1lbnUgaXRlbVxuICBASW5wdXQoKSBxdWVyeVBhcmFtczoge1trOiBzdHJpbmddOiBhbnl9IHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBmcmFnbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBxdWVyeVBhcmFtc0hhbmRsaW5nOiBhbnlcbiAgQElucHV0KCkgcHJlc2VydmVGcmFnbWVudDogYm9vbGVhbnwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBza2lwTG9jYXRpb25DaGFuZ2U6IGJvb2xlYW58IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgcmVwbGFjZVVybDogYm9vbGVhbnwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBzdGF0ZToge1trOiBzdHJpbmddOiBhbnl9IHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSByb3V0ZXJMaW5rOiBzdHJpbmcgfCBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBjb25maXJtRGlhbG9nOiB7IG1lc3NhZ2U/OiBzdHJpbmcsIGFsZXJ0Pzogc3RyaW5nIHwgeyBtZXNzYWdlOiBzdHJpbmcsIHR5cGU6IFRoZW1lVHlwZXMgfSB9IHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuXG59XG4iXX0=
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLWFjdGlvbi1tZW51LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2RhdGF0YWJsZS9kYXRhdGFibGUtYWN0aW9uLW1lbnUtaXRlbS9kYXRhdGFibGUtYWN0aW9uLW1lbnUtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUE7O0FBV3RCLE1BQU0sT0FBTyxnQ0FBZ0M7SUFMN0M7UUE2QkUsNERBQTREO1FBQ3pDLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFBO0tBRW5EOzs2SEEzQlksZ0NBQWdDO2lIQUFoQyxnQ0FBZ0MsMmVBSGpDLEVBQUU7MkZBR0QsZ0NBQWdDO2tCQUw1QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQ0FBaUM7b0JBQzNDLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs4QkFHVSxLQUFLO3NCQUFiLEtBQUs7Z0JBR2MsSUFBSTtzQkFBdkIsS0FBSzt1QkFBQyxXQUFXO2dCQUNULE1BQU07c0JBQWQsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUdhLEtBQUs7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuaW1wb3J0IHsgVGhlbWVUeXBlcyB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9tb2RlbHMnXG5cbmltcG9ydCB7IERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtYWN0aW9uLW1lbnUvZGF0YXRhYmxlLWFjdGlvbi1tZW51LmNvbXBvbmVudCdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2VhbS1kYXRhdGFibGUtYWN0aW9uLW1lbnUtaXRlbScsXG4gIHRlbXBsYXRlOiBgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0YXRhYmxlQWN0aW9uTWVudUl0ZW1Db21wb25lbnQge1xuXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdhdHRyLmhyZWYnKSBocmVmOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIHRhcmdldDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIC8vIEFsbG93IHJvdXRlckxpbmsgaW5wdXRzIG9uIG1lbnUgaXRlbVxuICBASW5wdXQoKSBxdWVyeVBhcmFtczoge1trOiBzdHJpbmddOiBhbnl9IHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBmcmFnbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBxdWVyeVBhcmFtc0hhbmRsaW5nOiBhbnlcbiAgQElucHV0KCkgcHJlc2VydmVGcmFnbWVudDogYm9vbGVhbnwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBza2lwTG9jYXRpb25DaGFuZ2U6IGJvb2xlYW58IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgcmVwbGFjZVVybDogYm9vbGVhbnwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBzdGF0ZToge1trOiBzdHJpbmddOiBhbnl9IHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSByb3V0ZXJMaW5rOiBzdHJpbmcgfCBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBjb25maXJtRGlhbG9nOiB7IG1lc3NhZ2U/OiBzdHJpbmcsIGFsZXJ0Pzogc3RyaW5nIHwgeyBtZXNzYWdlOiBzdHJpbmcsIHR5cGU6IFRoZW1lVHlwZXMgfSB9IHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIHN1Yk1lbnU6IERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoKSByZWFkb25seSBjbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG5cbn1cbiJdfQ==
@@ -43,7 +43,7 @@ export class DatatableColumnPreferencesButtonComponent {
43
43
  }
44
44
  }
45
45
  DatatableColumnPreferencesButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableColumnPreferencesButtonComponent, deps: [{ token: i1.ColumnsAlterationsManagerService }], target: i0.ɵɵFactoryTarget.Component });
46
- DatatableColumnPreferencesButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableColumnPreferencesButtonComponent, selector: "seam-datatable-column-preferences-button", ngImport: i0, template: "<ng-template #colPrefsTpl>\n <seam-datatable-column-preferences></seam-datatable-column-preferences>\n</ng-template>\n\n<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [seamPopover]=\"colPrefsTpl\">\n Show/Hide Columns\n </button>\n\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"_resetColumns($event)\">\n Reset Columns\n </button>\n</seam-menu>\n\n<button type=\"button\" class=\"btn btn-lightgray btn-sm\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Column Preferences\">\n <seam-icon [icon]=\"icon\"></seam-icon>\n <span class=\"sr-only\">Column Preferences</span>\n</button>\n\n", styles: [""], dependencies: [{ kind: "component", type: i2.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i2.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i2.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i3.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "directive", type: i4.TheSeamPopoverDirective, selector: "[seamPopover]", inputs: ["seamPopover", "seamPopoverBaseWidth", "seamPopoverDisabled"], exportAs: ["seamPopover"] }, { kind: "component", type: i5.DatatableColumnPreferencesComponent, selector: "seam-datatable-column-preferences" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
46
+ DatatableColumnPreferencesButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableColumnPreferencesButtonComponent, selector: "seam-datatable-column-preferences-button", ngImport: i0, template: "<ng-template #colPrefsTpl>\n <seam-datatable-column-preferences></seam-datatable-column-preferences>\n</ng-template>\n\n<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [seamPopover]=\"colPrefsTpl\">\n Show/Hide Columns\n </button>\n\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"_resetColumns($event)\">\n Reset Columns\n </button>\n</seam-menu>\n\n<button type=\"button\" class=\"btn btn-lightgray btn-sm\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Column Preferences\">\n <seam-icon [icon]=\"icon\"></seam-icon>\n <span class=\"sr-only\">Column Preferences</span>\n</button>\n\n", styles: [""], dependencies: [{ kind: "component", type: i2.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i2.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions", "seamMenuTogglePositionsOffsetY"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i2.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i3.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "directive", type: i4.TheSeamPopoverDirective, selector: "[seamPopover]", inputs: ["seamPopover", "seamPopoverBaseWidth", "seamPopoverDisabled"], exportAs: ["seamPopover"] }, { kind: "component", type: i5.DatatableColumnPreferencesComponent, selector: "seam-datatable-column-preferences" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
47
47
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableColumnPreferencesButtonComponent, decorators: [{
48
48
  type: Component,
49
49
  args: [{ selector: 'seam-datatable-column-preferences-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #colPrefsTpl>\n <seam-datatable-column-preferences></seam-datatable-column-preferences>\n</ng-template>\n\n<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [seamPopover]=\"colPrefsTpl\">\n Show/Hide Columns\n </button>\n\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"_resetColumns($event)\">\n Reset Columns\n </button>\n</seam-menu>\n\n<button type=\"button\" class=\"btn btn-lightgray btn-sm\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Column Preferences\">\n <seam-icon [icon]=\"icon\"></seam-icon>\n <span class=\"sr-only\">Column Preferences</span>\n</button>\n\n" }]
@@ -88,7 +88,7 @@ export class DatatableExportButtonComponent {
88
88
  }
89
89
  }
90
90
  DatatableExportButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableExportButtonComponent, deps: [{ token: THESEAM_DATATABLE }, { token: i1.ToastrService }, { token: i2.TheSeamLoadingOverlayService }, { token: i3.DynamicValueHelperService }, { token: THESEAM_DYNAMIC_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
91
- DatatableExportButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableExportButtonComponent, selector: "seam-datatable-export-button", inputs: { exporters: "exporters" }, ngImport: i0, template: "<seam-menu #menu>\n <button *ngFor=\"let exp of exporters\"\n seamMenuItem\n [icon]=\"exp?.icon\"\n (click)=\"_onExporterClicked(exp)\">\n {{ exp.label }}\n </button>\n</seam-menu>\n<button\n [seamMenuToggle]=\"menu\"\n seamButton\n theme=\"lightgray\"\n size=\"sm\"\n class=\"dropdown-toggle\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Export\"\n [disabled]=\"disabled\"\n >\n <seam-icon [icon]=\"icon\" class=\"mr-2\"></seam-icon>\n</button>\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i5.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i5.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i6.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "component", type: i7.ButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
91
+ DatatableExportButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableExportButtonComponent, selector: "seam-datatable-export-button", inputs: { exporters: "exporters" }, ngImport: i0, template: "<seam-menu #menu>\n <button *ngFor=\"let exp of exporters\"\n seamMenuItem\n [icon]=\"exp?.icon\"\n (click)=\"_onExporterClicked(exp)\">\n {{ exp.label }}\n </button>\n</seam-menu>\n<button\n [seamMenuToggle]=\"menu\"\n seamButton\n theme=\"lightgray\"\n size=\"sm\"\n class=\"dropdown-toggle\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Export\"\n [disabled]=\"disabled\"\n >\n <seam-icon [icon]=\"icon\" class=\"mr-2\"></seam-icon>\n</button>\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i5.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions", "seamMenuTogglePositionsOffsetY"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i5.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i6.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "component", type: i7.ButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
92
92
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableExportButtonComponent, decorators: [{
93
93
  type: Component,
94
94
  args: [{ selector: 'seam-datatable-export-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<seam-menu #menu>\n <button *ngFor=\"let exp of exporters\"\n seamMenuItem\n [icon]=\"exp?.icon\"\n (click)=\"_onExporterClicked(exp)\">\n {{ exp.label }}\n </button>\n</seam-menu>\n<button\n [seamMenuToggle]=\"menu\"\n seamButton\n theme=\"lightgray\"\n size=\"sm\"\n class=\"dropdown-toggle\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Export\"\n [disabled]=\"disabled\"\n >\n <seam-icon [icon]=\"icon\" class=\"mr-2\"></seam-icon>\n</button>\n", styles: [":host{display:inline-block}\n"] }]
@@ -106,7 +106,7 @@ export class DatatableDynamicActionMenuComponent {
106
106
  }
107
107
  }
108
108
  DatatableDynamicActionMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableDynamicActionMenuComponent, deps: [{ token: i1.DynamicValueHelperService }, { token: i2.DynamicDatatableRowActionsService }], target: i0.ɵɵFactoryTarget.Component });
109
- DatatableDynamicActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableDynamicActionMenuComponent, selector: "seam-datatable-dynamic-action-menu", inputs: { row: "row", actionDefs: "actionDefs" }, ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let record of _menuRecords$ | async\">\n\n <a *ngIf=\"record.elementType === 'a'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</a>\n\n <button *ngIf=\"record.elementType === 'button'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</button>\n\n </ng-container>\n\n <!-- <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"item.fragment\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n [state]=\"item.state\"\n [routerLink]=\"item.routerLink\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container> -->\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"$any(_actionMenuPositions)\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "component", type: i5.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i5.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i5.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "directive", type: i6.DatatableDynamicActionMenuItemDirective, selector: "[seamDatatableDynamicActionMenuItem]", inputs: ["seamDatatableDynamicActionMenuItem"], exportAs: ["seamDatatableDynamicActionMenuItem"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
109
+ DatatableDynamicActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableDynamicActionMenuComponent, selector: "seam-datatable-dynamic-action-menu", inputs: { row: "row", actionDefs: "actionDefs" }, ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let record of _menuRecords$ | async\">\n\n <a *ngIf=\"record.elementType === 'a'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</a>\n\n <button *ngIf=\"record.elementType === 'button'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</button>\n\n </ng-container>\n\n <!-- <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"item.fragment\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n [state]=\"item.state\"\n [routerLink]=\"item.routerLink\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container> -->\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"$any(_actionMenuPositions)\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "component", type: i5.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i5.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions", "seamMenuTogglePositionsOffsetY"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i5.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "directive", type: i6.DatatableDynamicActionMenuItemDirective, selector: "[seamDatatableDynamicActionMenuItem]", inputs: ["seamDatatableDynamicActionMenuItem"], exportAs: ["seamDatatableDynamicActionMenuItem"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
110
110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableDynamicActionMenuComponent, decorators: [{
111
111
  type: Component,
112
112
  args: [{ selector: 'seam-datatable-dynamic-action-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let record of _menuRecords$ | async\">\n\n <a *ngIf=\"record.elementType === 'a'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</a>\n\n <button *ngIf=\"record.elementType === 'button'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</button>\n\n </ng-container>\n\n <!-- <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"item.fragment\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n [state]=\"item.state\"\n [routerLink]=\"item.routerLink\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container> -->\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"$any(_actionMenuPositions)\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"] }]
@@ -51,6 +51,7 @@ export class DashboardWidgetsComponent {
51
51
  this._layoutChange = new Subject();
52
52
  this.widgetsChange = new EventEmitter();
53
53
  this._widthChange = new Subject();
54
+ this._dashboardWidgets.setViewContainerRef(this._viewContainerRef);
54
55
  this.containers$ = this._containers.asObservable();
55
56
  this._gapStyleSize$ = this._gapSize.pipe(auditTime(0), map(size => size / 2), shareReplay({ bufferSize: 1, refCount: true }));
56
57
  this._widthChange.pipe(debounceTime(30), tap(width => {
@@ -203,4 +204,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
203
204
  }], widgetsChange: [{
204
205
  type: Output
205
206
  }] } });
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLXdpZGdldHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2ZyYW1ld29yay9kYXNoYm9hcmQvZGFzaGJvYXJkLXdpZGdldHMvZGFzaGJvYXJkLXdpZGdldHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2ZyYW1ld29yay9kYXNoYm9hcmQvZGFzaGJvYXJkLXdpZGdldHMvZGFzaGJvYXJkLXdpZGdldHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsb0JBQW9CLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQTtBQUM5RyxPQUFPLEVBQUUsT0FBTyxFQUFlLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ2pHLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEVBRVosaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV0SixPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBRXBFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUV0RCxPQUFPLEVBQUUs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d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLHVCQUF1Qjs0QkFDaEMsaURBQWlEOzRCQUNqRCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQzt5QkFDekQ7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGtDQUFrQzs0QkFDM0MsaURBQWlEOzRCQUNqRCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQzt5QkFDekQ7cUJBQ0YsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7OzBCQWdFbEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx1QkFBdUI7NENBL0N6QyxPQUFPO3NCQURWLEtBQUs7Z0JBT21CLGdCQUFnQjtzQkFBeEMsS0FBSztnQkFHRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBUUYsVUFBVTtzQkFEYixLQUFLO2dCQU9GLE9BQU87c0JBRFYsS0FBSztnQkFVMkMsVUFBVTtzQkFBMUQsWUFBWTt1QkFBQyxpQ0FBaUM7Z0JBQ3hCLGlCQUFpQjtzQkFBdkMsWUFBWTt1QkFBQyxPQUFPO2dCQUV3QixhQUFhO3NCQUF6RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBS2pDLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSwgdHJhbnNmZXJBcnJheUl0ZW0gfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJ1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGF1ZGl0VGltZSwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUsIG1hcCwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBmYUxvY2ssIGZhVW5sb2NrIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJ1xuXG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vY29yZSdcbmltcG9ydCB0eXBlIHsgSUVsZW1lbnRSZXNpemVkRXZlbnQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vc2hhcmVkJ1xuaW1wb3J0IHsgVEhFU0VBTV9XSURHRVRfQUNDRVNTT1IgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vd2lkZ2V0J1xuXG5pbXBvcnQgdHlwZSB7IElUaGVTZWFtQmFzZUxheW91dFJlZiB9IGZyb20gJy4uLy4uL2Jhc2UtbGF5b3V0L2Jhc2UtbGF5b3V0LXJlZidcbmltcG9ydCB7IFRIRVNFQU1fQkFTRV9MQVlPVVRfUkVGIH0gZnJvbSAnLi4vLi4vYmFzZS1sYXlvdXQvYmFzZS1sYXlvdXQtdG9rZW5zJ1xuaW1wb3J0IHsgRGFzaGJvYXJkV2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGFzaGJvYXJkLXdpZGdldC1jb250YWluZXIvZGFzaGJvYXJkLXdpZGdldC1jb250YWluZXIuY29tcG9uZW50J1xuXG5pbXBvcnQgeyBEYXNoYm9hcmRXaWRnZXRzQWNjZXNzb3IsIFRIRVNFQU1fREFTSEJPQVJEX1dJREdFVFNfQUNDRVNTT1IgfSBmcm9tICcuLi9kYXNoYm9hcmQtd2lkZ2V0cy10b2tlbnMnXG5pbXBvcnQgdHlwZSB7IElEYXNoYm9hcmRXaWRnZXRzQ29sdW1uUmVjb3JkLCBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW0sIElEYXNoYm9hcmRXaWRnZXRzSXRlbURlZiB9IGZyb20gJy4vZGFzaGJvYXJkLXdpZGdldHMtaXRlbSdcbmltcG9ydCB7IERhc2hib2FyZFdpZGdldHNTZXJ2aWNlIH0gZnJvbSAnLi9kYXNoYm9hcmQtd2lkZ2V0cy5zZXJ2aWNlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLWRhc2hib2FyZC13aWRnZXRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rhc2hib2FyZC13aWRnZXRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGFzaGJvYXJkLXdpZGdldHMuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogVEhFU0VBTV9XSURHRVRfQUNDRVNTT1IsXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXNoYm9hcmRXaWRnZXRzQ29tcG9uZW50KVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogVEhFU0VBTV9EQVNIQk9BUkRfV0lER0VUU19BQ0NFU1NPUixcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhc2hib2FyZFdpZGdldHNDb21wb25lbnQpXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkV2lkZ2V0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBEYXNoYm9hcmRXaWRnZXRzQWNjZXNzb3Ige1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZ2FwU2l6ZTogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX251bUNvbHVtbnM6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV93aWRnZXRzRHJhZ2dhYmxlOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2RyYWdUb2dnbGVWaXNpYmxlOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3dpZGdldHM6IElEYXNoYm9hcmRXaWRnZXRzSXRlbURlZltdIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIGZhTG9jayA9IGZhTG9ja1xuICBmYVVubG9jayA9IGZhVW5sb2NrXG5cbiAgcHVibGljIHJlYWRvbmx5IF9hY3Rpb25XaWRnZXREcmFnVG9nZ2xlTmFtZSA9ICd3aWRnZXQtZHJhZy10b2dnbGUnXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICBASW5wdXQoKVxuICBnZXQgZ2FwU2l6ZSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fZ2FwU2l6ZS52YWx1ZSB9XG4gIHNldCBnYXBTaXplKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5fZ2FwU2l6ZS5uZXh0KGNvZXJjZU51bWJlclByb3BlcnR5KHZhbCkpXG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfZ2FwU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigzMClcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgd2lkZ2V0c0RyYWdnYWJsZSA9IGZhbHNlXG5cbiAgQElucHV0KClcbiAgZ2V0IGRyYWdUb2dnbGVWaXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZHJhZ1RvZ2dsZVZpc2libGUudmFsdWUgfVxuICBzZXQgZHJhZ1RvZ2dsZVZpc2libGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZHJhZ1RvZ2dsZVZpc2libGUubmV4dChjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsKSlcbiAgfVxuICBwcml2YXRlIF9kcmFnVG9nZ2xlVmlzaWJsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSlcblxuICBASW5wdXQoKVxuICBnZXQgbnVtQ29sdW1ucygpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fZGFzaGJvYXJkV2lkZ2V0cy5udW1Db2x1bW5zIH1cbiAgc2V0IG51bUNvbHVtbnModmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLl9kYXNoYm9hcmRXaWRnZXRzLm51bUNvbHVtbnMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWwpXG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgd2lkZ2V0cyh2YWx1ZTogSURhc2hib2FyZFdpZGdldHNJdGVtRGVmW10pIHsgdGhpcy5fZGFzaGJvYXJkV2lkZ2V0cy53aWRnZXRzID0gdmFsdWUgfHwgW10gfVxuICBnZXQgd2lkZ2V0cygpOiBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1EZWZbXSB7IHJldHVybiB0aGlzLl9kYXNoYm9hcmRXaWRnZXRzLndpZGdldHMgfVxuXG4gIHB1YmxpYyB3aWRnZXRJdGVtcyQ6IE9ic2VydmFibGU8SURhc2hib2FyZFdpZGdldHNJdGVtW10+XG4gIHB1YmxpYyB3aWRnZXRDb2x1bW5zJDogT2JzZXJ2YWJsZTxJRGFzaGJvYXJkV2lkZ2V0c0NvbHVtblJlY29yZFtdPlxuICBwdWJsaWMgY29udGFpbmVycyQ6IE9ic2VydmFibGU8RGFzaGJvYXJkV2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50W10+XG5cbiAgcmVhZG9ubHkgX2dhcFN0eWxlU2l6ZSQ6IE9ic2VydmFibGU8bnVtYmVyPlxuXG4gIEBWaWV3Q2hpbGRyZW4oRGFzaGJvYXJkV2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50KSBjb250YWluZXJzPzogUXVlcnlMaXN0PERhc2hib2FyZFdpZGdldENvbnRhaW5lckNvbXBvbmVudD5cbiAgQFZpZXdDaGlsZHJlbihDZGtEcmFnKSBjZGtEcmFnRGlyZWN0aXZlcz86IFF1ZXJ5TGlzdDxDZGtEcmFnPlxuXG4gIEBWaWV3Q2hpbGQoJ3RvZ2dsZUJ0blRwbCcsIHsgc3RhdGljOiB0cnVlIH0pIF90b2dnbGVCdG5UcGw/OiBUZW1wbGF0ZVJlZjxhbnk+XG5cbiAgcHJpdmF0ZSBfY29udGFpbmVycyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGFzaGJvYXJkV2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50W10+KFtdKVxuICBwcml2YXRlIF9sYXlvdXRDaGFuZ2UgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgQE91dHB1dCgpIHdpZGdldHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElEYXNoYm9hcmRXaWRnZXRzSXRlbVtdPigpXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfd2lkdGhDaGFuZ2UgPSBuZXcgU3ViamVjdDxudW1iZXI+KClcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9kYXNoYm9hcmRXaWRnZXRzOiBEYXNoYm9hcmRXaWRnZXRzU2VydmljZSxcbiAgICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChUSEVTRUFNX0JBU0VfTEFZT1VUX1JFRikgcHJpdmF0ZSBfYmFzZUxheW91dFJlZj86IElUaGVTZWFtQmFzZUxheW91dFJlZlxuICApIHtcbiAgICB0aGlzLmNvbnRhaW5lcnMkID0gdGhpcy5fY29udGFpbmVycy5hc09ic2VydmFibGUoKVxuXG4gICAgdGhpcy5fZ2FwU3R5bGVTaXplJCA9IHRoaXMuX2dhcFNpemUucGlwZShcbiAgICAgIGF1ZGl0VGltZSgwKSxcbiAgICAgIG1hcChzaXplID0+IHNpemUgLyAyKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSlcbiAgICApXG5cbiAgICB0aGlzLl93aWR0aENoYW5nZS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDMwKSxcbiAgICAgIHRhcCh3aWR0aCA9PiB7XG4gICAgICAgIGlmICh3aWR0aCA+IDEzMDApIHtcbiAgICAgICAgICB0aGlzLm51bUNvbHVtbnMgPSAzXG4gICAgICAgIH0gZWxzZSBpZiAod2lkdGggPiA4MDApIHtcbiAgICAgICAgICB0aGlzLm51bUNvbHVtbnMgPSAyXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5udW1Db2x1bW5zID0gMVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKVxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIHRoaXMud2lkZ2V0SXRlbXMkID0gdGhpcy5fZGFzaGJvYXJkV2lkZ2V0cy53aWRnZXRJdGVtcyRcbiAgICB0aGlzLndpZGdldENvbHVtbnMkID0gdGhpcy5fZGFzaGJvYXJkV2lkZ2V0cy53aWRnZXRDb2x1bW5zJFxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gdGhpcy5fZGFzaGJvYXJkV2lkZ2V0cy5zZXRWaWV3Q29udGFpbmVyUmVmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYpXG5cbiAgICB0aGlzLl9sYXlvdXRDaGFuZ2UucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLndpZGdldEl0ZW1zJC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YXAod2lkZ2V0SXRlbXMgPT4gdGhpcy53aWRnZXRzQ2hhbmdlLmVtaXQod2lkZ2V0SXRlbXMpKSxcbiAgICAgICAgLy8gbWFwKHdpZGdldEl0ZW1zID0+IHRoaXMuX2Rhc2hib2FyZFdpZGdldHMudG9TZXJpYWxpemVhYmxlSXRlbXMod2lkZ2V0SXRlbXMpKSxcbiAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ3NlcmlhbGl6YWJsZScsIHYpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2Rhc2hib2FyZFdpZGdldHMuc2F2ZVByZWZlcmVuY2VzKCkpXG4gICAgICApKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKVxuICAgICkuc3Vic2NyaWJlKClcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3VucmVnaXN0ZXJUb2dnbGVBY3Rpb24oKVxuICAgIHRoaXMuX25nVW5zdWJzY3JpYmUubmV4dCh1bmRlZmluZWQpXG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuX2Jhc2VMYXlvdXRSZWYpIHtcbiAgICAgIHRoaXMuX2RyYWdUb2dnbGVWaXNpYmxlLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRhcCh2aXNpYmxlID0+IHtcbiAgICAgICAgICBjb25zdCBpc1JlZ2lzdGVyZWQgPSB0aGlzLl9pc0FjdGlvblRvZ2dsZUFjdGlvblJlZ2lzdGVyZWQoKVxuICAgICAgICAgIGlmICh2aXNpYmxlICYmICFpc1JlZ2lzdGVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyVG9nZ2xlQWN0aW9uKClcbiAgICAgICAgICB9IGVsc2UgaWYgKCF2aXNpYmxlICYmIGlzUmVnaXN0ZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5fdW5yZWdpc3RlclRvZ2dsZUFjdGlvbigpXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpXG4gICAgICApLnN1YnNjcmliZSgpXG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJzPy5jaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmNvbnRhaW5lcnM/LnRvQXJyYXkoKSB8fCBbXSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLl9jb250YWluZXJzLm5leHQoW10pKVxuICAgICkuc3Vic2NyaWJlKHYgPT4gdGhpcy5fY29udGFpbmVycy5uZXh0KHYpKVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJUb2dnbGVBY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2Jhc2VMYXlvdXRSZWYpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBhIGNvbXBvbmVudCBkeW5hbWljYWxseSBjcmVhdGVkIGZyb20gdGhlXG4gICAgICAvLyBjb25maWcgYW5kIHJldHVybiBhIHJlZiB0byBpdCwgaW5zdGVhZCBvZiB1c2luZyBhIHRlbXBsYXRlLlxuICAgICAgaWYgKHRoaXMuX3RvZ2dsZUJ0blRwbCkge1xuICAgICAgICB0aGlzLl9iYXNlTGF5b3V0UmVmLnJlZ2lzdGVyQWN0aW9uKHtcbiAgICAgICAgICAvLyB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICB0eXBlOiAndGVtcGxhdGUnLFxuICAgICAgICAgIG5hbWU6IHRoaXMuX2FjdGlvbldpZGdldERyYWdUb2dnbGVOYW1lLFxuICAgICAgICAgIGxhYmVsOiAnVG9nZ2xlIFdpZGdldCBEcmFnZ2luZycsXG4gICAgICAgICAgLy8gZXhlYzogKCkgPT4ge1xuICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ3RvZ2dsZScpXG4gICAgICAgICAgLy8gfSxcbiAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5fdG9nZ2xlQnRuVHBsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdW5yZWdpc3RlclRvZ2dsZUFjdGlvbigpIHtcbiAgICBpZiAodGhpcy5fYmFzZUxheW91dFJlZikge1xuICAgICAgdGhpcy5fYmFzZUxheW91dFJlZi51bnJlZ2lzdGVyQWN0aW9uKHRoaXMuX2FjdGlvbldpZGdldERyYWdUb2dnbGVOYW1lKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzQWN0aW9uVG9nZ2xlQWN0aW9uUmVnaXN0ZXJlZCgpIHtcbiAgICBpZiAoIXRoaXMuX2Jhc2VMYXlvdXRSZWYpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYmFzZUxheW91dFJlZi5pc0FjdGlvblJlZ2lzdGVyZWQodGhpcy5fYWN0aW9uV2lkZ2V0RHJhZ1RvZ2dsZU5hbWUpXG4gIH1cblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcbiAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIgPT09IGV2ZW50LmNvbnRhaW5lcikge1xuICAgICAgbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpXG4gICAgICB0aGlzLl9kYXNoYm9hcmRXaWRnZXRzLnVwZGF0ZU9yZGVyKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2xheW91dENoYW5nZS5uZXh0KCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKFxuICAgICAgICBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLFxuICAgICAgICBldmVudC5jb250YWluZXIuZGF0YSxcbiAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgZXZlbnQuY3VycmVudEluZGV4XG4gICAgICApXG4gICAgICB0aGlzLl9kYXNoYm9hcmRXaWRnZXRzLnVwZGF0ZU9yZGVyKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2xheW91dENoYW5nZS5uZXh0KCkpXG4gICAgfVxuICB9XG5cbiAgX2NvbnRhaW5lclRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS53aWRnZXRJZFxuICB9XG5cbiAgX2NvbHVtbnNUcmFja0J5Rm4oaW5kZXg6IG51bWJlciwgcmVjb3JkOiBJRGFzaGJvYXJkV2lkZ2V0c0NvbHVtblJlY29yZCkge1xuICAgIHJldHVybiByZWNvcmQuY29sdW1uXG4gIH1cblxuICB0b2dnbGVEcmFnZ2luZygpIHtcbiAgICB0aGlzLndpZGdldHNEcmFnZ2FibGUgPSAhdGhpcy53aWRnZXRzRHJhZ2dhYmxlXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKVxuICB9XG5cbiAgX3Jlc2l6ZWQoZXZlbnQ6IElFbGVtZW50UmVzaXplZEV2ZW50KSB7XG4gICAgdGhpcy5fd2lkdGhDaGFuZ2UubmV4dChldmVudC5zaXplLndpZHRoKVxuICB9XG5cbn1cbiIsIjwhLS1cbiAgVGhpcyBpcyBhbiB1Z2x5IHRyaWNrIEkgYW0gdXNpbmcgdG8gcmVuZGVyIHRoZSBjb21wb25lbnQgaW50byBhbiA8bmctY29udGVudD5cbiAgd3JhcHBlZCBpbiBhbiA8bmctdGVtcGxhdGU+IHRvIG1vdmUgdGhlIGNvbXBvbmVudCB0byBkaWZmZXJlbnQgb3V0bGV0cyB3aXRob3V0XG4gIHJlaW5pdGlhbGl6aW5nIGl0LiBUaGlzIHdheSB0aGUgd2lkZ2V0IHdvbid0IHJlbG9hZCB3aGVuIG1vdmluZyBiZXR3ZWVuXG4gIGNvbHVtbnMuIFdoZW4gSSByZW1lbWJlciBob3cgSSBwcm9ncmFtYXRpY2FsbHkgZGlkIHRoaXMgSSB3aWxsIHJlbW92ZSB0aGlzXG4gIHdlaXJkbmVzcy5cbiAtLT5cbiA8c2VhbS1kYXNoYm9hcmQtd2lkZ2V0LWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiB3aWRnZXRJdGVtcyQgfCBhc3luYzsgdHJhY2tCeTogX2NvbnRhaW5lclRyYWNrQnlGblwiIFtkZWZdPVwiJGFueShpdGVtKVwiPlxuICA8IS0tIDxuZy10ZW1wbGF0ZSBbY2RrUG9ydGFsT3V0bGV0XT1cIml0ZW0ucG9ydGFsXCI+PC9uZy10ZW1wbGF0ZT4gLS0+XG4gIDxuZy10ZW1wbGF0ZSBbc2VhbURhc2hib2FyZFdpZGdldFBvcnRhbE91dGxldF09XCJpdGVtLnBvcnRhbFwiPjwvbmctdGVtcGxhdGU+XG48L3NlYW0tZGFzaGJvYXJkLXdpZGdldC1jb250YWluZXI+XG5cbjxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtd2lkZ2V0cy1iYXNlIGQtZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kXCJcbiAgc3R5bGU9XCJmbGV4OiAxNDEwcHg7XCJcbiAgW3N0eWxlLnBhZGRpbmcucHhdPVwiX2dhcFN0eWxlU2l6ZSQgfCBhc3luY1wiXG4gIChzZWFtRWxlbVJlc2l6ZWQpPVwiX3Jlc2l6ZWQoJGV2ZW50KVwiXG4gIGNka0Ryb3BMaXN0R3JvdXA+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGNvbCBvZiB3aWRnZXRDb2x1bW5zJCB8IGFzeW5jOyB0cmFja0J5OiBfY29sdW1uc1RyYWNrQnlGblwiXG4gICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZmxleC1ncm93LTEgZGFzaGJvYXJkLXdpZGdldHMtbGlzdFwiXG4gICAgY2RrRHJvcExpc3RcbiAgICBbY2RrRHJvcExpc3REYXRhXT1cImNvbC5pdGVtc1wiXG4gICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRhbnkoJGV2ZW50KSlcIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbC5pdGVtczsgdHJhY2tCeTogX2NvbnRhaW5lclRyYWNrQnlGblwiXG4gICAgICBjbGFzcz1cImRhc2hib2FyZC13aWRnZXRzLWxpc3QtaXRlbVwiXG4gICAgICBbYXR0ci5kYXRhLXdpZGdldC1pZF09XCJpdGVtLndpZGdldElkXCJcbiAgICAgIGNka0RyYWdcbiAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIXdpZGdldHNEcmFnZ2FibGVcIj5cbiAgICAgIDxkaXYgW3N0eWxlLm1hcmdpbi5weF09XCJfZ2FwU3R5bGVTaXplJCB8IGFzeW5jXCI+XG4gICAgICAgIDxzZWFtLWRhc2hib2FyZC13aWRnZXQtdGVtcGxhdGUtY29udGFpbmVyIFtpdGVtXT1cIml0ZW1cIj48L3NlYW0tZGFzaGJvYXJkLXdpZGdldC10ZW1wbGF0ZS1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0b2dnbGVCdG5UcGw+XG4gIDxidXR0b24gc2VhbUJ1dHRvbiB0aGVtZT1cImJhc2VsYXlvdXQtYWN0aW9uXCIgdGl0bGU9XCJ7eyB3aWRnZXRzRHJhZ2dhYmxlID8gJ0xvY2sgdGhlIERhc2hib2FyZCcgOiAnTW9kaWZ5IERhc2hib2FyZCcgfX1cIiAoY2xpY2spPVwidG9nZ2xlRHJhZ2dpbmcoKVwiPlxuICAgIDxzZWFtLWljb24gW2ljb25dPVwid2lkZ2V0c0RyYWdnYWJsZSA/IGZhVW5sb2NrIDogZmFMb2NrXCI+PC9zZWFtLWljb24+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLXdpZGdldHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2ZyYW1ld29yay9kYXNoYm9hcmQvZGFzaGJvYXJkLXdpZGdldHMvZGFzaGJvYXJkLXdpZGdldHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2ZyYW1ld29yay9kYXNoYm9hcmQvZGFzaGJvYXJkLXdpZGdldHMvZGFzaGJvYXJkLXdpZGdldHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsb0JBQW9CLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQTtBQUM5RyxPQUFPLEVBQUUsT0FBTyxFQUFlLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ2pHLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEVBRVosaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV0SixPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBRXBFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUV0RCxPQUFPLEVBQUUs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QWYsWUFBWSxFQUFFO21FQUF5QjsyRkFyQnRDLHlCQUF5QjtrQkFuQnJDLFNBQVM7K0JBQ0Usd0JBQXdCLGFBR3ZCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSx1QkFBdUI7NEJBQ2hDLGlEQUFpRDs0QkFDakQsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUM7eUJBQ3pEO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxrQ0FBa0M7NEJBQzNDLGlEQUFpRDs0QkFDakQsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUM7eUJBQ3pEO3FCQUNGLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJOzswQkFnRWxDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsdUJBQXVCOzRDQS9DekMsT0FBTztzQkFEVixLQUFLO2dCQU9tQixnQkFBZ0I7c0JBQXhDLEtBQUs7Z0JBR0YsaUJBQWlCO3NCQURwQixLQUFLO2dCQVFGLFVBQVU7c0JBRGIsS0FBSztnQkFPRixPQUFPO3NCQURWLEtBQUs7Z0JBVTJDLFVBQVU7c0JBQTFELFlBQVk7dUJBQUMsaUNBQWlDO2dCQUN4QixpQkFBaUI7c0JBQXZDLFlBQVk7dUJBQUMsT0FBTztnQkFFd0IsYUFBYTtzQkFBekQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUtqQyxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbidcbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXksIHRyYW5zZmVyQXJyYXlJdGVtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCdcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBhdWRpdFRpbWUsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbmFsaXplLCBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgZmFMb2NrLCBmYVVubG9jayB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucydcblxuaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2NvcmUnXG5pbXBvcnQgdHlwZSB7IElFbGVtZW50UmVzaXplZEV2ZW50IH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3NoYXJlZCdcbmltcG9ydCB7IFRIRVNFQU1fV0lER0VUX0FDQ0VTU09SIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3dpZGdldCdcblxuaW1wb3J0IHR5cGUgeyBJVGhlU2VhbUJhc2VMYXlvdXRSZWYgfSBmcm9tICcuLi8uLi9iYXNlLWxheW91dC9iYXNlLWxheW91dC1yZWYnXG5pbXBvcnQgeyBUSEVTRUFNX0JBU0VfTEFZT1VUX1JFRiB9IGZyb20gJy4uLy4uL2Jhc2UtbGF5b3V0L2Jhc2UtbGF5b3V0LXRva2VucydcbmltcG9ydCB7IERhc2hib2FyZFdpZGdldENvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4uL2Rhc2hib2FyZC13aWRnZXQtY29udGFpbmVyL2Rhc2hib2FyZC13aWRnZXQtY29udGFpbmVyLmNvbXBvbmVudCdcblxuaW1wb3J0IHsgRGFzaGJvYXJkV2lkZ2V0c0FjY2Vzc29yLCBUSEVTRUFNX0RBU0hCT0FSRF9XSURHRVRTX0FDQ0VTU09SIH0gZnJvbSAnLi4vZGFzaGJvYXJkLXdpZGdldHMtdG9rZW5zJ1xuaW1wb3J0IHR5cGUgeyBJRGFzaGJvYXJkV2lkZ2V0c0NvbHVtblJlY29yZCwgSURhc2hib2FyZFdpZGdldHNJdGVtLCBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1EZWYgfSBmcm9tICcuL2Rhc2hib2FyZC13aWRnZXRzLWl0ZW0nXG5pbXBvcnQgeyBEYXNoYm9hcmRXaWRnZXRzU2VydmljZSB9IGZyb20gJy4vZGFzaGJvYXJkLXdpZGdldHMuc2VydmljZSdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2VhbS1kYXNoYm9hcmQtd2lkZ2V0cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXNoYm9hcmQtd2lkZ2V0cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rhc2hib2FyZC13aWRnZXRzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRIRVNFQU1fV0lER0VUX0FDQ0VTU09SLFxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGFzaGJvYXJkV2lkZ2V0c0NvbXBvbmVudClcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRIRVNFQU1fREFTSEJPQVJEX1dJREdFVFNfQUNDRVNTT1IsXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXNoYm9hcmRXaWRnZXRzQ29tcG9uZW50KVxuICAgIH0sXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZFdpZGdldHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgRGFzaGJvYXJkV2lkZ2V0c0FjY2Vzc29yIHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2dhcFNpemU6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9udW1Db2x1bW5zOiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfd2lkZ2V0c0RyYWdnYWJsZTogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kcmFnVG9nZ2xlVmlzaWJsZTogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV93aWRnZXRzOiBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1EZWZbXSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBmYUxvY2sgPSBmYUxvY2tcbiAgZmFVbmxvY2sgPSBmYVVubG9ja1xuXG4gIHB1YmxpYyByZWFkb25seSBfYWN0aW9uV2lkZ2V0RHJhZ1RvZ2dsZU5hbWUgPSAnd2lkZ2V0LWRyYWctdG9nZ2xlJ1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgQElucHV0KClcbiAgZ2V0IGdhcFNpemUoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX2dhcFNpemUudmFsdWUgfVxuICBzZXQgZ2FwU2l6ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX2dhcFNpemUubmV4dChjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWwpKVxuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2dhcFNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMzApXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHdpZGdldHNEcmFnZ2FibGUgPSBmYWxzZVxuXG4gIEBJbnB1dCgpXG4gIGdldCBkcmFnVG9nZ2xlVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2RyYWdUb2dnbGVWaXNpYmxlLnZhbHVlIH1cbiAgc2V0IGRyYWdUb2dnbGVWaXNpYmxlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2RyYWdUb2dnbGVWaXNpYmxlLm5leHQoY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbCkpXG4gIH1cbiAgcHJpdmF0ZSBfZHJhZ1RvZ2dsZVZpc2libGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpXG5cbiAgQElucHV0KClcbiAgZ2V0IG51bUNvbHVtbnMoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZFdpZGdldHMubnVtQ29sdW1ucyB9XG4gIHNldCBudW1Db2x1bW5zKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5fZGFzaGJvYXJkV2lkZ2V0cy5udW1Db2x1bW5zID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsKVxuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHdpZGdldHModmFsdWU6IElEYXNoYm9hcmRXaWRnZXRzSXRlbURlZltdKSB7IHRoaXMuX2Rhc2hib2FyZFdpZGdldHMud2lkZ2V0cyA9IHZhbHVlIHx8IFtdIH1cbiAgZ2V0IHdpZGdldHMoKTogSURhc2hib2FyZFdpZGdldHNJdGVtRGVmW10geyByZXR1cm4gdGhpcy5fZGFzaGJvYXJkV2lkZ2V0cy53aWRnZXRzIH1cblxuICBwdWJsaWMgd2lkZ2V0SXRlbXMkOiBPYnNlcnZhYmxlPElEYXNoYm9hcmRXaWRnZXRzSXRlbVtdPlxuICBwdWJsaWMgd2lkZ2V0Q29sdW1ucyQ6IE9ic2VydmFibGU8SURhc2hib2FyZFdpZGdldHNDb2x1bW5SZWNvcmRbXT5cbiAgcHVibGljIGNvbnRhaW5lcnMkOiBPYnNlcnZhYmxlPERhc2hib2FyZFdpZGdldENvbnRhaW5lckNvbXBvbmVudFtdPlxuXG4gIHJlYWRvbmx5IF9nYXBTdHlsZVNpemUkOiBPYnNlcnZhYmxlPG51bWJlcj5cblxuICBAVmlld0NoaWxkcmVuKERhc2hib2FyZFdpZGdldENvbnRhaW5lckNvbXBvbmVudCkgY29udGFpbmVycz86IFF1ZXJ5TGlzdDxEYXNoYm9hcmRXaWRnZXRDb250YWluZXJDb21wb25lbnQ+XG4gIEBWaWV3Q2hpbGRyZW4oQ2RrRHJhZykgY2RrRHJhZ0RpcmVjdGl2ZXM/OiBRdWVyeUxpc3Q8Q2RrRHJhZz5cblxuICBAVmlld0NoaWxkKCd0b2dnbGVCdG5UcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KSBfdG9nZ2xlQnRuVHBsPzogVGVtcGxhdGVSZWY8YW55PlxuXG4gIHByaXZhdGUgX2NvbnRhaW5lcnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhc2hib2FyZFdpZGdldENvbnRhaW5lckNvbXBvbmVudFtdPihbXSlcbiAgcHJpdmF0ZSBfbGF5b3V0Q2hhbmdlID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuXG4gIEBPdXRwdXQoKSB3aWRnZXRzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1bXT4oKVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpZHRoQ2hhbmdlID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZGFzaGJvYXJkV2lkZ2V0czogRGFzaGJvYXJkV2lkZ2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVEhFU0VBTV9CQVNFX0xBWU9VVF9SRUYpIHByaXZhdGUgX2Jhc2VMYXlvdXRSZWY/OiBJVGhlU2VhbUJhc2VMYXlvdXRSZWZcbiAgKSB7XG4gICAgdGhpcy5fZGFzaGJvYXJkV2lkZ2V0cy5zZXRWaWV3Q29udGFpbmVyUmVmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYpXG5cbiAgICB0aGlzLmNvbnRhaW5lcnMkID0gdGhpcy5fY29udGFpbmVycy5hc09ic2VydmFibGUoKVxuXG4gICAgdGhpcy5fZ2FwU3R5bGVTaXplJCA9IHRoaXMuX2dhcFNpemUucGlwZShcbiAgICAgIGF1ZGl0VGltZSgwKSxcbiAgICAgIG1hcChzaXplID0+IHNpemUgLyAyKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSlcbiAgICApXG5cbiAgICB0aGlzLl93aWR0aENoYW5nZS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDMwKSxcbiAgICAgIHRhcCh3aWR0aCA9PiB7XG4gICAgICAgIGlmICh3aWR0aCA+IDEzMDApIHtcbiAgICAgICAgICB0aGlzLm51bUNvbHVtbnMgPSAzXG4gICAgICAgIH0gZWxzZSBpZiAod2lkdGggPiA4MDApIHtcbiAgICAgICAgICB0aGlzLm51bUNvbHVtbnMgPSAyXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5udW1Db2x1bW5zID0gMVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKVxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIHRoaXMud2lkZ2V0SXRlbXMkID0gdGhpcy5fZGFzaGJvYXJkV2lkZ2V0cy53aWRnZXRJdGVtcyRcbiAgICB0aGlzLndpZGdldENvbHVtbnMkID0gdGhpcy5fZGFzaGJvYXJkV2lkZ2V0cy53aWRnZXRDb2x1bW5zJFxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gdGhpcy5fZGFzaGJvYXJkV2lkZ2V0cy5zZXRWaWV3Q29udGFpbmVyUmVmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYpXG5cbiAgICB0aGlzLl9sYXlvdXRDaGFuZ2UucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLndpZGdldEl0ZW1zJC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YXAod2lkZ2V0SXRlbXMgPT4gdGhpcy53aWRnZXRzQ2hhbmdlLmVtaXQod2lkZ2V0SXRlbXMpKSxcbiAgICAgICAgLy8gbWFwKHdpZGdldEl0ZW1zID0+IHRoaXMuX2Rhc2hib2FyZFdpZGdldHMudG9TZXJpYWxpemVhYmxlSXRlbXMod2lkZ2V0SXRlbXMpKSxcbiAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ3NlcmlhbGl6YWJsZScsIHYpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2Rhc2hib2FyZFdpZGdldHMuc2F2ZVByZWZlcmVuY2VzKCkpXG4gICAgICApKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKVxuICAgICkuc3Vic2NyaWJlKClcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3VucmVnaXN0ZXJUb2dnbGVBY3Rpb24oKVxuICAgIHRoaXMuX25nVW5zdWJzY3JpYmUubmV4dCh1bmRlZmluZWQpXG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuX2Jhc2VMYXlvdXRSZWYpIHtcbiAgICAgIHRoaXMuX2RyYWdUb2dnbGVWaXNpYmxlLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRhcCh2aXNpYmxlID0+IHtcbiAgICAgICAgICBjb25zdCBpc1JlZ2lzdGVyZWQgPSB0aGlzLl9pc0FjdGlvblRvZ2dsZUFjdGlvblJlZ2lzdGVyZWQoKVxuICAgICAgICAgIGlmICh2aXNpYmxlICYmICFpc1JlZ2lzdGVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyVG9nZ2xlQWN0aW9uKClcbiAgICAgICAgICB9IGVsc2UgaWYgKCF2aXNpYmxlICYmIGlzUmVnaXN0ZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5fdW5yZWdpc3RlclRvZ2dsZUFjdGlvbigpXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpXG4gICAgICApLnN1YnNjcmliZSgpXG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJzPy5jaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmNvbnRhaW5lcnM/LnRvQXJyYXkoKSB8fCBbXSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLl9jb250YWluZXJzLm5leHQoW10pKVxuICAgICkuc3Vic2NyaWJlKHYgPT4gdGhpcy5fY29udGFpbmVycy5uZXh0KHYpKVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJUb2dnbGVBY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2Jhc2VMYXlvdXRSZWYpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBhIGNvbXBvbmVudCBkeW5hbWljYWxseSBjcmVhdGVkIGZyb20gdGhlXG4gICAgICAvLyBjb25maWcgYW5kIHJldHVybiBhIHJlZiB0byBpdCwgaW5zdGVhZCBvZiB1c2luZyBhIHRlbXBsYXRlLlxuICAgICAgaWYgKHRoaXMuX3RvZ2dsZUJ0blRwbCkge1xuICAgICAgICB0aGlzLl9iYXNlTGF5b3V0UmVmLnJlZ2lzdGVyQWN0aW9uKHtcbiAgICAgICAgICAvLyB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICB0eXBlOiAndGVtcGxhdGUnLFxuICAgICAgICAgIG5hbWU6IHRoaXMuX2FjdGlvbldpZGdldERyYWdUb2dnbGVOYW1lLFxuICAgICAgICAgIGxhYmVsOiAnVG9nZ2xlIFdpZGdldCBEcmFnZ2luZycsXG4gICAgICAgICAgLy8gZXhlYzogKCkgPT4ge1xuICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ3RvZ2dsZScpXG4gICAgICAgICAgLy8gfSxcbiAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5fdG9nZ2xlQnRuVHBsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdW5yZWdpc3RlclRvZ2dsZUFjdGlvbigpIHtcbiAgICBpZiAodGhpcy5fYmFzZUxheW91dFJlZikge1xuICAgICAgdGhpcy5fYmFzZUxheW91dFJlZi51bnJlZ2lzdGVyQWN0aW9uKHRoaXMuX2FjdGlvbldpZGdldERyYWdUb2dnbGVOYW1lKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzQWN0aW9uVG9nZ2xlQWN0aW9uUmVnaXN0ZXJlZCgpIHtcbiAgICBpZiAoIXRoaXMuX2Jhc2VMYXlvdXRSZWYpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYmFzZUxheW91dFJlZi5pc0FjdGlvblJlZ2lzdGVyZWQodGhpcy5fYWN0aW9uV2lkZ2V0RHJhZ1RvZ2dsZU5hbWUpXG4gIH1cblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcbiAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIgPT09IGV2ZW50LmNvbnRhaW5lcikge1xuICAgICAgbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpXG4gICAgICB0aGlzLl9kYXNoYm9hcmRXaWRnZXRzLnVwZGF0ZU9yZGVyKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2xheW91dENoYW5nZS5uZXh0KCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKFxuICAgICAgICBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLFxuICAgICAgICBldmVudC5jb250YWluZXIuZGF0YSxcbiAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgZXZlbnQuY3VycmVudEluZGV4XG4gICAgICApXG4gICAgICB0aGlzLl9kYXNoYm9hcmRXaWRnZXRzLnVwZGF0ZU9yZGVyKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2xheW91dENoYW5nZS5uZXh0KCkpXG4gICAgfVxuICB9XG5cbiAgX2NvbnRhaW5lclRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS53aWRnZXRJZFxuICB9XG5cbiAgX2NvbHVtbnNUcmFja0J5Rm4oaW5kZXg6IG51bWJlciwgcmVjb3JkOiBJRGFzaGJvYXJkV2lkZ2V0c0NvbHVtblJlY29yZCkge1xuICAgIHJldHVybiByZWNvcmQuY29sdW1uXG4gIH1cblxuICB0b2dnbGVEcmFnZ2luZygpIHtcbiAgICB0aGlzLndpZGdldHNEcmFnZ2FibGUgPSAhdGhpcy53aWRnZXRzRHJhZ2dhYmxlXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKVxuICB9XG5cbiAgX3Jlc2l6ZWQoZXZlbnQ6IElFbGVtZW50UmVzaXplZEV2ZW50KSB7XG4gICAgdGhpcy5fd2lkdGhDaGFuZ2UubmV4dChldmVudC5zaXplLndpZHRoKVxuICB9XG5cbn1cbiIsIjwhLS1cbiAgVGhpcyBpcyBhbiB1Z2x5IHRyaWNrIEkgYW0gdXNpbmcgdG8gcmVuZGVyIHRoZSBjb21wb25lbnQgaW50byBhbiA8bmctY29udGVudD5cbiAgd3JhcHBlZCBpbiBhbiA8bmctdGVtcGxhdGU+IHRvIG1vdmUgdGhlIGNvbXBvbmVudCB0byBkaWZmZXJlbnQgb3V0bGV0cyB3aXRob3V0XG4gIHJlaW5pdGlhbGl6aW5nIGl0LiBUaGlzIHdheSB0aGUgd2lkZ2V0IHdvbid0IHJlbG9hZCB3aGVuIG1vdmluZyBiZXR3ZWVuXG4gIGNvbHVtbnMuIFdoZW4gSSByZW1lbWJlciBob3cgSSBwcm9ncmFtYXRpY2FsbHkgZGlkIHRoaXMgSSB3aWxsIHJlbW92ZSB0aGlzXG4gIHdlaXJkbmVzcy5cbiAtLT5cbiA8c2VhbS1kYXNoYm9hcmQtd2lkZ2V0LWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiB3aWRnZXRJdGVtcyQgfCBhc3luYzsgdHJhY2tCeTogX2NvbnRhaW5lclRyYWNrQnlGblwiIFtkZWZdPVwiJGFueShpdGVtKVwiPlxuICA8IS0tIDxuZy10ZW1wbGF0ZSBbY2RrUG9ydGFsT3V0bGV0XT1cIml0ZW0ucG9ydGFsXCI+PC9uZy10ZW1wbGF0ZT4gLS0+XG4gIDxuZy10ZW1wbGF0ZSBbc2VhbURhc2hib2FyZFdpZGdldFBvcnRhbE91dGxldF09XCJpdGVtLnBvcnRhbFwiPjwvbmctdGVtcGxhdGU+XG48L3NlYW0tZGFzaGJvYXJkLXdpZGdldC1jb250YWluZXI+XG5cbjxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtd2lkZ2V0cy1iYXNlIGQtZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kXCJcbiAgc3R5bGU9XCJmbGV4OiAxNDEwcHg7XCJcbiAgW3N0eWxlLnBhZGRpbmcucHhdPVwiX2dhcFN0eWxlU2l6ZSQgfCBhc3luY1wiXG4gIChzZWFtRWxlbVJlc2l6ZWQpPVwiX3Jlc2l6ZWQoJGV2ZW50KVwiXG4gIGNka0Ryb3BMaXN0R3JvdXA+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGNvbCBvZiB3aWRnZXRDb2x1bW5zJCB8IGFzeW5jOyB0cmFja0J5OiBfY29sdW1uc1RyYWNrQnlGblwiXG4gICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZmxleC1ncm93LTEgZGFzaGJvYXJkLXdpZGdldHMtbGlzdFwiXG4gICAgY2RrRHJvcExpc3RcbiAgICBbY2RrRHJvcExpc3REYXRhXT1cImNvbC5pdGVtc1wiXG4gICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRhbnkoJGV2ZW50KSlcIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbC5pdGVtczsgdHJhY2tCeTogX2NvbnRhaW5lclRyYWNrQnlGblwiXG4gICAgICBjbGFzcz1cImRhc2hib2FyZC13aWRnZXRzLWxpc3QtaXRlbVwiXG4gICAgICBbYXR0ci5kYXRhLXdpZGdldC1pZF09XCJpdGVtLndpZGdldElkXCJcbiAgICAgIGNka0RyYWdcbiAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIXdpZGdldHNEcmFnZ2FibGVcIj5cbiAgICAgIDxkaXYgW3N0eWxlLm1hcmdpbi5weF09XCJfZ2FwU3R5bGVTaXplJCB8IGFzeW5jXCI+XG4gICAgICAgIDxzZWFtLWRhc2hib2FyZC13aWRnZXQtdGVtcGxhdGUtY29udGFpbmVyIFtpdGVtXT1cIml0ZW1cIj48L3NlYW0tZGFzaGJvYXJkLXdpZGdldC10ZW1wbGF0ZS1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0b2dnbGVCdG5UcGw+XG4gIDxidXR0b24gc2VhbUJ1dHRvbiB0aGVtZT1cImJhc2VsYXlvdXQtYWN0aW9uXCIgdGl0bGU9XCJ7eyB3aWRnZXRzRHJhZ2dhYmxlID8gJ0xvY2sgdGhlIERhc2hib2FyZCcgOiAnTW9kaWZ5IERhc2hib2FyZCcgfX1cIiAoY2xpY2spPVwidG9nZ2xlRHJhZ2dpbmcoKVwiPlxuICAgIDxzZWFtLWljb24gW2ljb25dPVwid2lkZ2V0c0RyYWdnYWJsZSA/IGZhVW5sb2NrIDogZmFMb2NrXCI+PC9zZWFtLWljb24+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -80,18 +80,21 @@ export class DashboardWidgetsService {
80
80
  const injector = Injector.create({ providers: [
81
81
  { provide: THESEAM_WIDGET_DATA, useValue: { widgetId: def.widgetId } }
82
82
  ], parent: this._viewContainerRefSubject.value?.injector });
83
+ // TODO: I still use the ViewContainerRef injector, but I don't pass it to
84
+ // the portal, because it throws an error and I am not sure why. I would
85
+ // like to find out why, even though I don't think it is needed, because our
86
+ // code has been leaving it undefined for a while, when I thought it was
87
+ // being used.
83
88
  if (typeof def.component === 'string') {
84
89
  return this._dynamicComponentLoaderModule
85
90
  .getComponentFactory(def.component)
86
91
  .pipe(map(componentFactory => {
87
- return new ComponentPortal(componentFactory.componentType, vcr,
88
- // undefined,
89
- injector, componentFactory /* ComponentFactoryBoundToModule */.ngModule.componentFactoryResolver);
92
+ return new ComponentPortal(componentFactory.componentType, undefined, injector, componentFactory /* ComponentFactoryBoundToModule */.ngModule.componentFactoryResolver);
90
93
  }), take(1));
91
94
  }
92
95
  return def.componentFactoryResolver
93
- ? of(new ComponentPortal(def.component, vcr, injector, def.componentFactoryResolver))
94
- : of(new ComponentPortal(def.component, vcr, injector));
96
+ ? of(new ComponentPortal(def.component, undefined, injector, def.componentFactoryResolver))
97
+ : of(new ComponentPortal(def.component, undefined, injector));
95
98
  }
96
99
  updateOrder() {
97
100
  return this.widgetColumns$
@@ -175,4 +178,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
175
178
  providedIn: 'root'
176
179
  }]
177
180
  }], ctorParameters: function () { return [{ type: i1.TheSeamDynamicComponentLoader }, { type: i2.DashboardWidgetsPreferencesService }]; } });
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLXdpZGdldHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9mcmFtZXdvcmsvZGFzaGJvYXJkL2Rhc2hib2FyZC13aWRnZXRzL2Rhc2hib2FyZC13aWRnZXRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUE7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUd6RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQVM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTs7OztBQUsvRCxNQUFNLE9BQU8sdUJBQXVCO0lBU2xDLElBQUksT0FBTyxLQUFpQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUN4RSxJQUFJLE9BQU8sQ0FBQyxLQUFpQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUc1RSxJQUFJLFVBQVUsS0FBYSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUMxRCxJQUFJLFVBQVUsQ0FBQyxLQUFhO1FBQzFCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQ3BDLElBQUks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QUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3hELElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztnQkFDbEMsS0FBSzthQUNOLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxFQUNGLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FDakIsQ0FBQTtJQUNILENBQUM7O29IQXRPVSx1QkFBdUI7d0hBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJ1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIGlzRGV2TW9kZSwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGF1ZGl0VGltZSwgbWFwLCBtYXBUbywgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IFRoZVNlYW1EeW5hbWljQ29tcG9uZW50TG9hZGVyIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2R5bmFtaWMtY29tcG9uZW50LWxvYWRlcidcbmltcG9ydCB7IG5vdE51bGxPclVuZGVmaW5lZCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi91dGlscydcblxuaW1wb3J0IHtcbiAgSURhc2hib2FyZFdpZGdldEl0ZW1MYXlvdXRQcmVmZXJlbmNlLFxuICBJRGFzaGJvYXJkV2lkZ2V0c0NvbHVtblJlY29yZCxcbiAgSURhc2hib2FyZFdpZGdldHNJdGVtLFxuICBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1EZWZcbn0gZnJvbSAnLi9kYXNoYm9hcmQtd2lkZ2V0cy1pdGVtJ1xuaW1wb3J0IHsgRGFzaGJvYXJkV2lkZ2V0c1ByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gJy4vZGFzaGJvYXJkLXdpZGdldHMtcHJlZmVyZW5jZXMuc2VydmljZSdcbmltcG9ydCB7IFRIRVNFQU1fV0lER0VUX0RBVEEgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vd2lkZ2V0J1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRXaWRnZXRzU2VydmljZSB7XG5cbiAgcHVibGljIHJlYWRvbmx5IHByZWZlcmVuY2VLZXk6IHN0cmluZyA9ICdkYXRhdGFibGUtd2lkZ2V0cydcblxuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdE51bUNvbHVtbnM6IG51bWJlciA9IDNcblxuICAvKiogVXNlZCBmb3Igb3BlcmF0aW9ucywgc3VjaCBhcyAnYWRkV2lkZ2V0JywgaWYgdGhlIGNvbHVtbiBpcyBub3Qgc3BlY2lmaWVkLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdENvbHVtbjogbnVtYmVyID0gMFxuXG4gIGdldCB3aWRnZXRzKCk6IElEYXNoYm9hcmRXaWRnZXRzSXRlbURlZltdIHsgcmV0dXJuIHRoaXMuX3dpZGdldHMudmFsdWUgfVxuICBzZXQgd2lkZ2V0cyh2YWx1ZTogSURhc2hib2FyZFdpZGdldHNJdGVtRGVmW10pIHsgdGhpcy5fd2lkZ2V0cy5uZXh0KHZhbHVlKSB9XG4gIHByaXZhdGUgX3dpZGdldHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElEYXNoYm9hcmRXaWRnZXRzSXRlbURlZltdPihbXSlcblxuICBnZXQgbnVtQ29sdW1ucygpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fbnVtQ29sdW1ucy52YWx1ZSB9XG4gIHNldCBudW1Db2x1bW5zKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX251bUNvbHVtbnMudmFsdWUpIHtcbiAgICAgIHRoaXMuX251bUNvbHVtbnMubmV4dCh2YWx1ZSlcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfbnVtQ29sdW1ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih0aGlzLmRlZmF1bHROdW1Db2x1bW5zKVxuXG4gIHB1YmxpYyByZWFkb25seSBudW1Db2x1bW5zJDogT2JzZXJ2YWJsZTxudW1iZXI+XG4gIHB1YmxpYyByZWFkb25seSB3aWRnZXRJdGVtcyQ6IE9ic2VydmFibGU8SURhc2hib2FyZFdpZGdldHNJdGVtW10+XG4gIHB1YmxpYyByZWFkb25seSB3aWRnZXRDb2x1bW5zJDogT2JzZXJ2YWJsZTxJRGFzaGJvYXJkV2lkZ2V0c0NvbHVtblJlY29yZFtdPlxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWZTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZHluYW1pY0NvbXBvbmVudExvYWRlck1vZHVsZTogVGhlU2VhbUR5bmFtaWNDb21wb25lbnRMb2FkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcHJlZmVyZW5jZXM6IERhc2hib2FyZFdpZGdldHNQcmVmZXJlbmNlc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5udW1Db2x1bW5zJCA9IHRoaXMuX251bUNvbHVtbnMuYXNPYnNlcnZhYmxlKClcblxuICAgIC8vIFdpZGdldCBpdGVtcyB3aXRob3V0IHByZWZlcmVuY2VzXG4gICAgY29uc3QgX3dpZGdldEl0ZW1zJCA9IGNvbWJpbmVMYXRlc3QoWyB0aGlzLl93aWRnZXRzLCB0aGlzLl92aWV3Q29udGFpbmVyUmVmU3ViamVjdCBdKVxuICAgICAgLnBpcGUoc3dpdGNoTWFwKChbIGRlZnMsIHZjciBdKSA9PiB0aGlzLmNyZWF0ZVdpZGdldEl0ZW1zKGRlZnMsIHZjcikpKVxuXG4gICAgLy8gV2lkZ2V0IGl0ZW1zIHdpdGggcHJlZmVyZW5jZXNcbiAgICB0aGlzLndpZGdldEl0ZW1zJCA9IGNvbWJpbmVMYXRlc3QoWyBfd2lkZ2V0SXRlbXMkLCB0aGlzLm51bUNvbHVtbnMkIF0pXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gV2FpdCB1bnRpbCB0aGUgY3VycmVudCB0aWNrIGlzIGRvbmUsIGluY2FzZSBib3RoIHRoZSB3aWRnZXRzIGFuZFxuICAgICAgICAvLyBudW1iZXIgb2YgY29sdW1ucyBhcmUgc2V0IGR1cnJpbmcgdGhlIHNhbWUgdGljay4gV2l0aG91dCB0aGUgYXVkaXQsXG4gICAgICAgIC8vIHRoaXMgd291bGQgZ2V0IGNhbGxlZCB0d2ljZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWQgd2l0aFxuICAgICAgICAvLyBib3RoIGlucHV0cyBzZXQgb25lIGFmdGVyIHRoZSBvdGhlciBpbmRpdmlkdWFsbHkuXG4gICAgICAgIGF1ZGl0VGltZSgwKSxcbiAgICAgICAgc3dpdGNoTWFwKChbIGl0ZW1zLCBudW1Db2x1bW5zIF0pID0+XG4gICAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXMuc2VsZWN0TGF5b3V0KHRoaXMucHJlZmVyZW5jZUtleSwgdGhpcy5fbGF5b3V0TmFtZShudW1Db2x1bW5zKSkucGlwZShcbiAgICAgICAgICAgIG1hcChsYXlvdXQgPT4gbGF5b3V0ID8gdGhpcy53aXRoTGF5b3V0UHJlZmVyZW5jZXMoaXRlbXMsIGxheW91dCkgOiBpdGVtcylcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSlcbiAgICAgIClcblxuICAgIHRoaXMud2lkZ2V0Q29sdW1ucyQgPSB0aGlzLndpZGdldEl0ZW1zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChpdGVtcyA9PiB0aGlzLnRvQ29sdW1uUmVjb3JkcyhpdGVtcykpLFxuICAgICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIF9sYXlvdXROYW1lKG51bUNvbHVtbnM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjb2x1bW5zLSR7bnVtQ29sdW1uc31gXG4gIH1cblxuICBwdWJsaWMgc2V0Vmlld0NvbnRhaW5lclJlZih2Y3I6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmU3ViamVjdC5uZXh0KHZjcilcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVXaWRnZXRJdGVtcyhkZWZzOiBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1EZWZbXSwgdmNyPzogVmlld0NvbnRhaW5lclJlZik6IE9ic2VydmFibGU8SURhc2hib2FyZFdpZGdldHNJdGVtW10+IHtcbiAgICBjb25zdCBfY3JlYXRlT2JzZXJ2YWJsZXMgPSAoZGVmcyB8fCBbXSkubWFwKGQgPT4gdGhpcy5jcmVhdGVXaWRnZXRJdGVtKGQsIHZjcikpXG4gICAgY29uc3QgaXRlbXMkID0gX2NyZWF0ZU9ic2VydmFibGVzLmxlbmd0aCA+IDAgPyBjb21iaW5lTGF0ZXN0KF9jcmVhdGVPYnNlcnZhYmxlcykgOiBvZihbXSlcbiAgICByZXR1cm4gaXRlbXMkLnBpcGUoXG4gICAgICBtYXAoaXRlbXMgPT4gaXRlbXMuZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCkpLFxuICAgICAgdGFwKGl0ZW1zID0+IHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IGl0ZW1zLm1hcCh2ID0+IHYud2lkZ2V0SWQpXG4gICAgICAgICAgaWYgKChuZXcgU2V0KGlkcykpLnNpemUgIT09IGlkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFtEYXNoYm9hcmRXaWRnZXRzU2VydmljZV0gRHVwbGljYXRlIHdpZGdldCdzIHdpdGggdGhlIHNhbWUgJ3dpZGdldElkJyBmb3VuZC5gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwdWJsaWMgY3JlYXRlV2lkZ2V0SXRlbShkZWY6IElEYXNoYm9hcmRXaWRnZXRzSXRlbURlZiwgdmNyPzogVmlld0NvbnRhaW5lclJlZik6IE9ic2VydmFibGU8SURhc2hib2FyZFdpZGdldHNJdGVtIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCFkZWYud2lkZ2V0SWQgfHwgdHlwZW9mIGRlZi53aWRnZXRJZCAhPT0gJ3N0cmluZycgfHwgZGVmLndpZGdldElkLmxlbmd0aCA8IDEpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oYFtEYXNoYm9hcmRXaWRnZXRzU2VydmljZV0gV2lkZ2V0IGlnbm9yZWQuIEFsbCB3aWRnZXRzIG11c3QgaGF2ZSBhICd3aWRnZXRJZCcuYCwgZGVmKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVXaWRnZXRQb3J0YWwoZGVmLCB2Y3IpLnBpcGUoXG4gICAgICBtYXAocG9ydGFsID0+ICh7XG4gICAgICAgIC4uLmRlZixcbiAgICAgICAgY29sOiBkZWYuY29sIHx8IHRoaXMuZGVmYXVsdENvbHVtbixcbiAgICAgICAgb3JkZXI6IGRlZi5vcmRlciB8fCAwLFxuICAgICAgICBwb3J0YWwsXG4gICAgICAgIF9faXRlbURlZjogZGVmXG4gICAgICB9KSlcbiAgICApXG4gIH1cblxuICBwdWJsaWMgY3JlYXRlV2lkZ2V0UG9ydGFsKGRlZjogSURhc2hib2FyZFdpZGdldHNJdGVtRGVmLCB2Y3I/OiBWaWV3Q29udGFpbmVyUmVmKTogT2JzZXJ2YWJsZTxDb21wb25lbnRQb3J0YWw8YW55Pj4ge1xuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHsgcHJvdmlkZXJzOiBbXG4gICAgICB7IHByb3ZpZGU6IFRIRVNFQU1fV0lER0VUX0RBVEEsIHVzZVZhbHVlOiB7IHdpZGdldElkOiBkZWYud2lkZ2V0SWQgfSB9XG4gICAgXSwgcGFyZW50OiB0aGlzLl92aWV3Q29udGFpbmVyUmVmU3ViamVjdC52YWx1ZT8uaW5qZWN0b3IgfSlcblxuICAgIGlmICh0eXBlb2YgZGVmLmNvbXBvbmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLl9keW5hbWljQ29tcG9uZW50TG9hZGVyTW9kdWxlXG4gICAgICAgIC5nZXRDb21wb25lbnRGYWN0b3J5KGRlZi5jb21wb25lbnQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcChjb21wb25lbnRGYWN0b3J5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29tcG9uZW50UG9ydGFsKFxuICAgICAgICAgICAgICBjb21wb25lbnRGYWN0b3J5LmNvbXBvbmVudFR5cGUsXG4gICAgICAgICAgICAgIHZjcixcbiAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBpbmplY3RvcixcbiAgICAgICAgICAgICAgKGNvbXBvbmVudEZhY3RvcnkgYXMgYW55IC8qIENvbXBvbmVudEZhY3RvcnlCb3VuZFRvTW9kdWxlICovKS5uZ01vZHVsZS5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlKDEpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxuICAgICAgPyBvZihuZXcgQ29tcG9uZW50UG9ydGFsKGRlZi5jb21wb25lbnQsIHZjciwgaW5qZWN0b3IsIGRlZi5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpKVxuICAgICAgOiBvZihuZXcgQ29tcG9uZW50UG9ydGFsKGRlZi5jb21wb25lbnQsIHZjciwgaW5qZWN0b3IpKVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZU9yZGVyKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLndpZGdldENvbHVtbnMkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFwKGNvbHVtbnMgPT4gY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgbGV0IGkgPSAwXG4gICAgICAgICAgY29sLml0ZW1zLmZvckVhY2goaXRtID0+IGl0bS5vcmRlciA9IGkrKylcbiAgICAgICAgfSkpLFxuICAgICAgICBtYXBUbyh1bmRlZmluZWQpXG4gICAgICApXG4gIH1cblxuICBwdWJsaWMgdG9Db2x1bW5SZWNvcmRzKGl0ZW1zOiBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1bXSk6IElEYXNoYm9hcmRXaWRnZXRzQ29sdW1uUmVjb3JkW10ge1xuICAgIGxldCBjb2x1bW5zOiBJRGFzaGJvYXJkV2lkZ2V0c0NvbHVtblJlY29yZFtdID0gW11cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5udW1Db2x1bW5zOyBpKyspIHtcbiAgICAgIGNvbHVtbnMucHVzaCh7IGNvbHVtbjogaSwgaXRlbXM6IFtdIH0pXG4gICAgfVxuXG4gICAgY29uc3QgY29sTm90Rm91bmQ6IElEYXNoYm9hcmRXaWRnZXRzSXRlbVtdID0gW11cblxuICAgIC8vIERpc3RyaWJ1dGUgaXRlbXMgaW50byBjb2x1bW5zXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICBjb25zdCBjb2w6IElEYXNoYm9hcmRXaWRnZXRzQ29sdW1uUmVjb3JkIHwgdW5kZWZpbmVkID0gY29sdW1ucy5maW5kKGMgPT4gYy5jb2x1bW4gPT09IGl0ZW0uY29sKVxuICAgICAgaWYgKCFjb2wpIHtcbiAgICAgICAgLy8gY29sdW1ucy5wdXNoKHsgY29sdW1uOiBpdGVtLmNvbCwgaXRlbXM6IFsgaXRlbSBdIH0pXG4gICAgICAgIC8vIGlmIChpdGVtLmNvbCA8IDApIHtcbiAgICAgICAgLy8gICBjb25zdCBjb2wwOiBJRGFzaGJvYXJkV2lkZ2V0c0NvbHVtblJlY29yZCB8IHVuZGVmaW5lZCA9IGNvbHVtbnMuZmluZChjID0+IGMuY29sdW1uID09PSAwKVxuICAgICAgICAvLyAgIGlmIChjb2wwKSB7XG4gICAgICAgIC8vICAgICBjb2wwLml0ZW1zLnB1c2goaXRlbSlcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH0gZWxzZSBpZiAoaXRlbS5jb2wgPiB0aGlzLm51bUNvbHVtbnMgLSAxKSB7XG4gICAgICAgIC8vICAgY29uc3QgY29sTWF4OiBJRGFzaGJvYXJkV2lkZ2V0c0NvbHVtblJlY29yZCB8IHVuZGVmaW5lZCA9IGNvbHVtbnMuZmluZChjID0+IGMuY29sdW1uID09PSB0aGlzLm51bUNvbHVtbnMgLSAxKVxuICAgICAgICAvLyAgIGlmIChjb2xNYXgpIHtcbiAgICAgICAgLy8gICAgIGNvbE1heC5pdGVtcy5wdXNoKGl0ZW0pXG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIGNvbE5vdEZvdW5kLnB1c2goaXRlbSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbC5pdGVtcy5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xOb3RGb3VuZC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IGNvbE5vdEZvdW5kW2ldXG5cbiAgICAgIGNvbnN0IGNvbDogSURhc2hib2FyZFdpZGdldHNDb2x1bW5SZWNvcmQgfCB1bmRlZmluZWQgPSBjb2x1bW5zXG4gICAgICAgIC5maW5kKGMgPT4gYy5jb2x1bW4gPT09IGkgJSB0aGlzLm51bUNvbHVtbnMpXG5cbiAgICAgIGlmIChjb2wpIHtcbiAgICAgICAgY29sLml0ZW1zLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTb3J0IGNvbHVtbnNcbiAgICBjb2x1bW5zID0gY29sdW1ucy5zb3J0KChhLCBiKSA9PiBhLmNvbHVtbiAtIGIuY29sdW1uKVxuXG4gICAgLy8gU29ydCBjb2x1bW5zIGl0ZW1zXG4gICAgY29sdW1ucy5mb3JFYWNoKGNvbCA9PiBjb2wuaXRlbXMuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpKVxuXG4gICAgcmV0dXJuIGNvbHVtbnNcbiAgfVxuXG4gIHB1YmxpYyB3aXRoTGF5b3V0UHJlZmVyZW5jZXMoaXRlbXM6IElEYXNoYm9hcmRXaWRnZXRzSXRlbVtdLCBsYXlvdXQ6IElEYXNoYm9hcmRXaWRnZXRJdGVtTGF5b3V0UHJlZmVyZW5jZSk6IElEYXNoYm9hcmRXaWRnZXRzSXRlbVtdIHtcbiAgICBjb25zdCBfaXRlbXM6IElEYXNoYm9hcmRXaWRnZXRzSXRlbVtdID0gW11cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgY29uc3QgaXRlbVByZWYgPSBsYXlvdXQuaXRlbXMuZmluZCh4ID0+IHgud2lkZ2V0SWQgPT09IGl0ZW0ud2lkZ2V0SWQpXG4gICAgICBfaXRlbXMucHVzaCh7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIC4uLihpdGVtUHJlZiB8fCB7fSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIF9pdGVtc1xuICB9XG5cbiAgcHVibGljIHNhdmVQcmVmZXJlbmNlcygpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAvLyBSaWdodCBub3cgdGhlIGl0ZW1zIGFyZSBtb3ZlZCBiZXR3ZWVuIHRoZSBjb2x1bW4gcmVjb3JkIGFycmF5cywgYnV0IHRoZVxuICAgIC8vICdjb2wnIHByb3AgaXMgbm90IHVwZGF0ZWQsIHNvIGl0IGlzIG1hcHBlZCB0byBjb3JyZWN0ZWQgaXRlbXMgaGVyZSBmcm9tXG4gICAgLy8gdGhlIGNvbHVtbiByZWNvcmRzLlxuICAgIGNvbnN0IGl0ZW1zJCA9IHRoaXMud2lkZ2V0Q29sdW1ucyQucGlwZShcbiAgICAgIG1hcChjb2x1bW5zID0+IChbXSBhcyBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1bXSlcbiAgICAgICAgLmNvbmNhdCguLi4oY29sdW1ucy5tYXAoYyA9PiBjLml0ZW1zLm1hcChpdG0gPT4gKHsgLi4uaXRtLCBjb2w6IGMuY29sdW1uIH0pKSkpKVxuICAgICAgKSxcbiAgICApXG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbIGl0ZW1zJCwgdGhpcy5udW1Db2x1bW5zJCBdKS5waXBlKFxuICAgICAgYXVkaXRUaW1lKDApLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcCgoWyBpdGVtcywgbnVtQ29sdW1ucyBdKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVmZXJlbmNlcy51cGRhdGVMYXlvdXQodGhpcy5wcmVmZXJlbmNlS2V5LCB7XG4gICAgICAgICAgbmFtZTogdGhpcy5fbGF5b3V0TmFtZShudW1Db2x1bW5zKSxcbiAgICAgICAgICBpdGVtc1xuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgICBtYXBUbyh1bmRlZmluZWQpXG4gICAgKVxuICB9XG5cbn1cbiJdfQ==
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLXdpZGdldHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9mcmFtZXdvcmsvZGFzaGJvYXJkL2Rhc2hib2FyZC13aWRnZXRzL2Rhc2hib2FyZC13aWRnZXRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUE7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUd6RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTs7OztBQWEvRCxNQUFNLE9BQU8sdUJBQXVCO0lBU2xDLElBQUksT0FBTyxLQUFpQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUN4RSxJQUFJLE9BQU8sQ0FBQyxLQUFpQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUc1RSxJQUFJLFVBQVUsS0FBYSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUMxRCxJQUFJLFVBQVUsQ0FBQyxLQUFhO1FBQzFCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQ3BDLElBQUks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RSxVQUFVLENBQUUsRUFBRSxFQUFFO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDeEQsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO2dCQUNsQyxLQUFLO2FBQ04sQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUNqQixDQUFBO0lBQ0gsQ0FBQzs7b0hBM09VLHVCQUF1Qjt3SEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgaXNEZXZNb2RlLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBtYXAsIG1hcFRvLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgVGhlU2VhbUR5bmFtaWNDb21wb25lbnRMb2FkZXIgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vZHluYW1pYy1jb21wb25lbnQtbG9hZGVyJ1xuaW1wb3J0IHsgbm90TnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3V0aWxzJ1xuaW1wb3J0IHsgVEhFU0VBTV9XSURHRVRfREFUQSB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi93aWRnZXQnXG5cbmltcG9ydCB7XG4gIElEYXNoYm9hcmRXaWRnZXRJdGVtTGF5b3V0UHJlZmVyZW5jZSxcbiAgSURhc2hib2FyZFdpZGdldHNDb2x1bW5SZWNvcmQsXG4gIElEYXNoYm9hcmRXaWRnZXRzSXRlbSxcbiAgSURhc2hib2FyZFdpZGdldHNJdGVtRGVmXG59IGZyb20gJy4vZGFzaGJvYXJkLXdpZGdldHMtaXRlbSdcbmltcG9ydCB7IERhc2hib2FyZFdpZGdldHNQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuL2Rhc2hib2FyZC13aWRnZXRzLXByZWZlcmVuY2VzLnNlcnZpY2UnXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZFdpZGdldHNTZXJ2aWNlIHtcblxuICBwdWJsaWMgcmVhZG9ubHkgcHJlZmVyZW5jZUtleTogc3RyaW5nID0gJ2RhdGF0YWJsZS13aWRnZXRzJ1xuXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0TnVtQ29sdW1uczogbnVtYmVyID0gM1xuXG4gIC8qKiBVc2VkIGZvciBvcGVyYXRpb25zLCBzdWNoIGFzICdhZGRXaWRnZXQnLCBpZiB0aGUgY29sdW1uIGlzIG5vdCBzcGVjaWZpZWQuICovXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0Q29sdW1uOiBudW1iZXIgPSAwXG5cbiAgZ2V0IHdpZGdldHMoKTogSURhc2hib2FyZFdpZGdldHNJdGVtRGVmW10geyByZXR1cm4gdGhpcy5fd2lkZ2V0cy52YWx1ZSB9XG4gIHNldCB3aWRnZXRzKHZhbHVlOiBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1EZWZbXSkgeyB0aGlzLl93aWRnZXRzLm5leHQodmFsdWUpIH1cbiAgcHJpdmF0ZSBfd2lkZ2V0cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SURhc2hib2FyZFdpZGdldHNJdGVtRGVmW10+KFtdKVxuXG4gIGdldCBudW1Db2x1bW5zKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9udW1Db2x1bW5zLnZhbHVlIH1cbiAgc2V0IG51bUNvbHVtbnModmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fbnVtQ29sdW1ucy52YWx1ZSkge1xuICAgICAgdGhpcy5fbnVtQ29sdW1ucy5uZXh0KHZhbHVlKVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9udW1Db2x1bW5zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KHRoaXMuZGVmYXVsdE51bUNvbHVtbnMpXG5cbiAgcHVibGljIHJlYWRvbmx5IG51bUNvbHVtbnMkOiBPYnNlcnZhYmxlPG51bWJlcj5cbiAgcHVibGljIHJlYWRvbmx5IHdpZGdldEl0ZW1zJDogT2JzZXJ2YWJsZTxJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1bXT5cbiAgcHVibGljIHJlYWRvbmx5IHdpZGdldENvbHVtbnMkOiBPYnNlcnZhYmxlPElEYXNoYm9hcmRXaWRnZXRzQ29sdW1uUmVjb3JkW10+XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRhaW5lclJlZlN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9keW5hbWljQ29tcG9uZW50TG9hZGVyTW9kdWxlOiBUaGVTZWFtRHluYW1pY0NvbXBvbmVudExvYWRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmVmZXJlbmNlczogRGFzaGJvYXJkV2lkZ2V0c1ByZWZlcmVuY2VzU2VydmljZVxuICApIHtcbiAgICB0aGlzLm51bUNvbHVtbnMkID0gdGhpcy5fbnVtQ29sdW1ucy5hc09ic2VydmFibGUoKVxuXG4gICAgLy8gV2lkZ2V0IGl0ZW1zIHdpdGhvdXQgcHJlZmVyZW5jZXNcbiAgICBjb25zdCBfd2lkZ2V0SXRlbXMkID0gY29tYmluZUxhdGVzdChbIHRoaXMuX3dpZGdldHMsIHRoaXMuX3ZpZXdDb250YWluZXJSZWZTdWJqZWN0IF0pXG4gICAgICAucGlwZShzd2l0Y2hNYXAoKFsgZGVmcywgdmNyIF0pID0+IHRoaXMuY3JlYXRlV2lkZ2V0SXRlbXMoZGVmcywgdmNyKSkpXG5cbiAgICAvLyBXaWRnZXQgaXRlbXMgd2l0aCBwcmVmZXJlbmNlc1xuICAgIHRoaXMud2lkZ2V0SXRlbXMkID0gY29tYmluZUxhdGVzdChbIF93aWRnZXRJdGVtcyQsIHRoaXMubnVtQ29sdW1ucyQgXSlcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBXYWl0IHVudGlsIHRoZSBjdXJyZW50IHRpY2sgaXMgZG9uZSwgaW5jYXNlIGJvdGggdGhlIHdpZGdldHMgYW5kXG4gICAgICAgIC8vIG51bWJlciBvZiBjb2x1bW5zIGFyZSBzZXQgZHVycmluZyB0aGUgc2FtZSB0aWNrLiBXaXRob3V0IHRoZSBhdWRpdCxcbiAgICAgICAgLy8gdGhpcyB3b3VsZCBnZXQgY2FsbGVkIHR3aWNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZCB3aXRoXG4gICAgICAgIC8vIGJvdGggaW5wdXRzIHNldCBvbmUgYWZ0ZXIgdGhlIG90aGVyIGluZGl2aWR1YWxseS5cbiAgICAgICAgYXVkaXRUaW1lKDApLFxuICAgICAgICBzd2l0Y2hNYXAoKFsgaXRlbXMsIG51bUNvbHVtbnMgXSkgPT5cbiAgICAgICAgICB0aGlzLl9wcmVmZXJlbmNlcy5zZWxlY3RMYXlvdXQodGhpcy5wcmVmZXJlbmNlS2V5LCB0aGlzLl9sYXlvdXROYW1lKG51bUNvbHVtbnMpKS5waXBlKFxuICAgICAgICAgICAgbWFwKGxheW91dCA9PiBsYXlvdXQgPyB0aGlzLndpdGhMYXlvdXRQcmVmZXJlbmNlcyhpdGVtcywgbGF5b3V0KSA6IGl0ZW1zKVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgICAgKVxuXG4gICAgdGhpcy53aWRnZXRDb2x1bW5zJCA9IHRoaXMud2lkZ2V0SXRlbXMkXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKGl0ZW1zID0+IHRoaXMudG9Db2x1bW5SZWNvcmRzKGl0ZW1zKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSlcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgX2xheW91dE5hbWUobnVtQ29sdW1uczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGNvbHVtbnMtJHtudW1Db2x1bW5zfWBcbiAgfVxuXG4gIHB1YmxpYyBzZXRWaWV3Q29udGFpbmVyUmVmKHZjcjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWZTdWJqZWN0Lm5leHQodmNyKVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZVdpZGdldEl0ZW1zKGRlZnM6IElEYXNoYm9hcmRXaWRnZXRzSXRlbURlZltdLCB2Y3I/OiBWaWV3Q29udGFpbmVyUmVmKTogT2JzZXJ2YWJsZTxJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1bXT4ge1xuICAgIGNvbnN0IF9jcmVhdGVPYnNlcnZhYmxlcyA9IChkZWZzIHx8IFtdKS5tYXAoZCA9PiB0aGlzLmNyZWF0ZVdpZGdldEl0ZW0oZCwgdmNyKSlcbiAgICBjb25zdCBpdGVtcyQgPSBfY3JlYXRlT2JzZXJ2YWJsZXMubGVuZ3RoID4gMCA/IGNvbWJpbmVMYXRlc3QoX2NyZWF0ZU9ic2VydmFibGVzKSA6IG9mKFtdKVxuICAgIHJldHVybiBpdGVtcyQucGlwZShcbiAgICAgIG1hcChpdGVtcyA9PiBpdGVtcy5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKSksXG4gICAgICB0YXAoaXRlbXMgPT4ge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICBjb25zdCBpZHM6IHN0cmluZ1tdID0gaXRlbXMubWFwKHYgPT4gdi53aWRnZXRJZClcbiAgICAgICAgICBpZiAoKG5ldyBTZXQoaWRzKSkuc2l6ZSAhPT0gaWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW0Rhc2hib2FyZFdpZGdldHNTZXJ2aWNlXSBEdXBsaWNhdGUgd2lkZ2V0J3Mgd2l0aCB0aGUgc2FtZSAnd2lkZ2V0SWQnIGZvdW5kLmApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVXaWRnZXRJdGVtKGRlZjogSURhc2hib2FyZFdpZGdldHNJdGVtRGVmLCB2Y3I/OiBWaWV3Q29udGFpbmVyUmVmKTogT2JzZXJ2YWJsZTxJRGFzaGJvYXJkV2lkZ2V0c0l0ZW0gfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIWRlZi53aWRnZXRJZCB8fCB0eXBlb2YgZGVmLndpZGdldElkICE9PSAnc3RyaW5nJyB8fCBkZWYud2lkZ2V0SWQubGVuZ3RoIDwgMSkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW0Rhc2hib2FyZFdpZGdldHNTZXJ2aWNlXSBXaWRnZXQgaWdub3JlZC4gQWxsIHdpZGdldHMgbXVzdCBoYXZlIGEgJ3dpZGdldElkJy5gLCBkZWYpXG4gICAgICB9XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVdpZGdldFBvcnRhbChkZWYsIHZjcikucGlwZShcbiAgICAgIG1hcChwb3J0YWwgPT4gKHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICBjb2w6IGRlZi5jb2wgfHwgdGhpcy5kZWZhdWx0Q29sdW1uLFxuICAgICAgICBvcmRlcjogZGVmLm9yZGVyIHx8IDAsXG4gICAgICAgIHBvcnRhbCxcbiAgICAgICAgX19pdGVtRGVmOiBkZWZcbiAgICAgIH0pKVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVXaWRnZXRQb3J0YWwoZGVmOiBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1EZWYsIHZjcj86IFZpZXdDb250YWluZXJSZWYpOiBPYnNlcnZhYmxlPENvbXBvbmVudFBvcnRhbDxhbnk+PiB7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoeyBwcm92aWRlcnM6IFtcbiAgICAgIHsgcHJvdmlkZTogVEhFU0VBTV9XSURHRVRfREFUQSwgdXNlVmFsdWU6IHsgd2lkZ2V0SWQ6IGRlZi53aWRnZXRJZCB9IH1cbiAgICBdLCBwYXJlbnQ6IHRoaXMuX3ZpZXdDb250YWluZXJSZWZTdWJqZWN0LnZhbHVlPy5pbmplY3RvciB9KVxuXG4gICAgLy8gVE9ETzogSSBzdGlsbCB1c2UgdGhlIFZpZXdDb250YWluZXJSZWYgaW5qZWN0b3IsIGJ1dCBJIGRvbid0IHBhc3MgaXQgdG9cbiAgICAvLyB0aGUgcG9ydGFsLCBiZWNhdXNlIGl0IHRocm93cyBhbiBlcnJvciBhbmQgSSBhbSBub3Qgc3VyZSB3aHkuIEkgd291bGRcbiAgICAvLyBsaWtlIHRvIGZpbmQgb3V0IHdoeSwgZXZlbiB0aG91Z2ggSSBkb24ndCB0aGluayBpdCBpcyBuZWVkZWQsIGJlY2F1c2Ugb3VyXG4gICAgLy8gY29kZSBoYXMgYmVlbiBsZWF2aW5nIGl0IHVuZGVmaW5lZCBmb3IgYSB3aGlsZSwgd2hlbiBJIHRob3VnaHQgaXQgd2FzXG4gICAgLy8gYmVpbmcgdXNlZC5cblxuICAgIGlmICh0eXBlb2YgZGVmLmNvbXBvbmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLl9keW5hbWljQ29tcG9uZW50TG9hZGVyTW9kdWxlXG4gICAgICAgIC5nZXRDb21wb25lbnRGYWN0b3J5KGRlZi5jb21wb25lbnQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcChjb21wb25lbnRGYWN0b3J5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29tcG9uZW50UG9ydGFsKFxuICAgICAgICAgICAgICBjb21wb25lbnRGYWN0b3J5LmNvbXBvbmVudFR5cGUsXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgaW5qZWN0b3IsXG4gICAgICAgICAgICAgIChjb21wb25lbnRGYWN0b3J5IGFzIGFueSAvKiBDb21wb25lbnRGYWN0b3J5Qm91bmRUb01vZHVsZSAqLykubmdNb2R1bGUuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZi5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICAgID8gb2YobmV3IENvbXBvbmVudFBvcnRhbChkZWYuY29tcG9uZW50LCB1bmRlZmluZWQsIGluamVjdG9yLCBkZWYuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSlcbiAgICAgIDogb2YobmV3IENvbXBvbmVudFBvcnRhbChkZWYuY29tcG9uZW50LCB1bmRlZmluZWQsIGluamVjdG9yKSlcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVPcmRlcigpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy53aWRnZXRDb2x1bW5zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRhcChjb2x1bW5zID0+IGNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgIGxldCBpID0gMFxuICAgICAgICAgIGNvbC5pdGVtcy5mb3JFYWNoKGl0bSA9PiBpdG0ub3JkZXIgPSBpKyspXG4gICAgICAgIH0pKSxcbiAgICAgICAgbWFwVG8odW5kZWZpbmVkKVxuICAgICAgKVxuICB9XG5cbiAgcHVibGljIHRvQ29sdW1uUmVjb3JkcyhpdGVtczogSURhc2hib2FyZFdpZGdldHNJdGVtW10pOiBJRGFzaGJvYXJkV2lkZ2V0c0NvbHVtblJlY29yZFtdIHtcbiAgICBsZXQgY29sdW1uczogSURhc2hib2FyZFdpZGdldHNDb2x1bW5SZWNvcmRbXSA9IFtdXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtQ29sdW1uczsgaSsrKSB7XG4gICAgICBjb2x1bW5zLnB1c2goeyBjb2x1bW46IGksIGl0ZW1zOiBbXSB9KVxuICAgIH1cblxuICAgIGNvbnN0IGNvbE5vdEZvdW5kOiBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1bXSA9IFtdXG5cbiAgICAvLyBEaXN0cmlidXRlIGl0ZW1zIGludG8gY29sdW1uc1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgY29uc3QgY29sOiBJRGFzaGJvYXJkV2lkZ2V0c0NvbHVtblJlY29yZCB8IHVuZGVmaW5lZCA9IGNvbHVtbnMuZmluZChjID0+IGMuY29sdW1uID09PSBpdGVtLmNvbClcbiAgICAgIGlmICghY29sKSB7XG4gICAgICAgIC8vIGNvbHVtbnMucHVzaCh7IGNvbHVtbjogaXRlbS5jb2wsIGl0ZW1zOiBbIGl0ZW0gXSB9KVxuICAgICAgICAvLyBpZiAoaXRlbS5jb2wgPCAwKSB7XG4gICAgICAgIC8vICAgY29uc3QgY29sMDogSURhc2hib2FyZFdpZGdldHNDb2x1bW5SZWNvcmQgfCB1bmRlZmluZWQgPSBjb2x1bW5zLmZpbmQoYyA9PiBjLmNvbHVtbiA9PT0gMClcbiAgICAgICAgLy8gICBpZiAoY29sMCkge1xuICAgICAgICAvLyAgICAgY29sMC5pdGVtcy5wdXNoKGl0ZW0pXG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9IGVsc2UgaWYgKGl0ZW0uY29sID4gdGhpcy5udW1Db2x1bW5zIC0gMSkge1xuICAgICAgICAvLyAgIGNvbnN0IGNvbE1heDogSURhc2hib2FyZFdpZGdldHNDb2x1bW5SZWNvcmQgfCB1bmRlZmluZWQgPSBjb2x1bW5zLmZpbmQoYyA9PiBjLmNvbHVtbiA9PT0gdGhpcy5udW1Db2x1bW5zIC0gMSlcbiAgICAgICAgLy8gICBpZiAoY29sTWF4KSB7XG4gICAgICAgIC8vICAgICBjb2xNYXguaXRlbXMucHVzaChpdGVtKVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICBjb2xOb3RGb3VuZC5wdXNoKGl0ZW0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2wuaXRlbXMucHVzaChpdGVtKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sTm90Rm91bmQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBjb2xOb3RGb3VuZFtpXVxuXG4gICAgICBjb25zdCBjb2w6IElEYXNoYm9hcmRXaWRnZXRzQ29sdW1uUmVjb3JkIHwgdW5kZWZpbmVkID0gY29sdW1uc1xuICAgICAgICAuZmluZChjID0+IGMuY29sdW1uID09PSBpICUgdGhpcy5udW1Db2x1bW5zKVxuXG4gICAgICBpZiAoY29sKSB7XG4gICAgICAgIGNvbC5pdGVtcy5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU29ydCBjb2x1bW5zXG4gICAgY29sdW1ucyA9IGNvbHVtbnMuc29ydCgoYSwgYikgPT4gYS5jb2x1bW4gLSBiLmNvbHVtbilcblxuICAgIC8vIFNvcnQgY29sdW1ucyBpdGVtc1xuICAgIGNvbHVtbnMuZm9yRWFjaChjb2wgPT4gY29sLml0ZW1zLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKSlcblxuICAgIHJldHVybiBjb2x1bW5zXG4gIH1cblxuICBwdWJsaWMgd2l0aExheW91dFByZWZlcmVuY2VzKGl0ZW1zOiBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1bXSwgbGF5b3V0OiBJRGFzaGJvYXJkV2lkZ2V0SXRlbUxheW91dFByZWZlcmVuY2UpOiBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1bXSB7XG4gICAgY29uc3QgX2l0ZW1zOiBJRGFzaGJvYXJkV2lkZ2V0c0l0ZW1bXSA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGNvbnN0IGl0ZW1QcmVmID0gbGF5b3V0Lml0ZW1zLmZpbmQoeCA9PiB4LndpZGdldElkID09PSBpdGVtLndpZGdldElkKVxuICAgICAgX2l0ZW1zLnB1c2goe1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICAuLi4oaXRlbVByZWYgfHwge30pXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBfaXRlbXNcbiAgfVxuXG4gIHB1YmxpYyBzYXZlUHJlZmVyZW5jZXMoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgLy8gUmlnaHQgbm93IHRoZSBpdGVtcyBhcmUgbW92ZWQgYmV0d2VlbiB0aGUgY29sdW1uIHJlY29yZCBhcnJheXMsIGJ1dCB0aGVcbiAgICAvLyAnY29sJyBwcm9wIGlzIG5vdCB1cGRhdGVkLCBzbyBpdCBpcyBtYXBwZWQgdG8gY29ycmVjdGVkIGl0ZW1zIGhlcmUgZnJvbVxuICAgIC8vIHRoZSBjb2x1bW4gcmVjb3Jkcy5cbiAgICBjb25zdCBpdGVtcyQgPSB0aGlzLndpZGdldENvbHVtbnMkLnBpcGUoXG4gICAgICBtYXAoY29sdW1ucyA9PiAoW10gYXMgSURhc2hib2FyZFdpZGdldHNJdGVtW10pXG4gICAgICAgIC5jb25jYXQoLi4uKGNvbHVtbnMubWFwKGMgPT4gYy5pdGVtcy5tYXAoaXRtID0+ICh7IC4uLml0bSwgY29sOiBjLmNvbHVtbiB9KSkpKSlcbiAgICAgICksXG4gICAgKVxuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoWyBpdGVtcyQsIHRoaXMubnVtQ29sdW1ucyQgXSkucGlwZShcbiAgICAgIGF1ZGl0VGltZSgwKSxcbiAgICAgIHRha2UoMSksXG4gICAgICBzd2l0Y2hNYXAoKFsgaXRlbXMsIG51bUNvbHVtbnMgXSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXMudXBkYXRlTGF5b3V0KHRoaXMucHJlZmVyZW5jZUtleSwge1xuICAgICAgICAgIG5hbWU6IHRoaXMuX2xheW91dE5hbWUobnVtQ29sdW1ucyksXG4gICAgICAgICAgaXRlbXNcbiAgICAgICAgfSlcbiAgICAgIH0pLFxuICAgICAgbWFwVG8odW5kZWZpbmVkKVxuICAgIClcbiAgfVxuXG59XG4iXX0=
@@ -130,7 +130,7 @@ export class TheSeamSchemaFormSubmitSplitComponent {
130
130
  }
131
131
  }
132
132
  TheSeamSchemaFormSubmitSplitComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamSchemaFormSubmitSplitComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component });
133
- TheSeamSchemaFormSubmitSplitComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: TheSeamSchemaFormSubmitSplitComponent, selector: "seam-schema-form-submit-split", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: "<div\n [class]=\"options?.htmlClass || ''\">\n <div [class.btn-group]=\"_dropdownObj\">\n <button seamButton theme=\"primary\" type=\"submit\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [class]=\"'btn btn-primary ' + (options?.fieldHtmlClass || '')\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [value]=\"controlValue\"\n (click)=\"updateValue($event)\">\n {{ _buttonLabel }}\n <span *ngIf=\"_selectedItem\">\n [{{ _selectedItem.name }}]\n </span>\n </button>\n <ng-container *ngIf=\"_dropdownObj\">\n <button\n [seamMenuToggle]=\"menu\" seamButton theme=\"primary\"\n class=\"dropdown-toggle dropdown-toggle-split\"\n [disabled]=\"_dropdownDisabled\">\n <span class=\"sr-only\">Toggle Dropdown</span>\n </button>\n <seam-menu #menu>\n <ng-container *ngFor=\"let item of _selectList\">\n <button seamMenuItem\n [class.active]=\"item.checked\"\n (click)=\"_setDropdownValue(item.value)\">\n {{ item.name }}\n </button>\n </ng-container>\n </seam-menu>\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i3.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i3.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }] });
133
+ TheSeamSchemaFormSubmitSplitComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: TheSeamSchemaFormSubmitSplitComponent, selector: "seam-schema-form-submit-split", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: "<div\n [class]=\"options?.htmlClass || ''\">\n <div [class.btn-group]=\"_dropdownObj\">\n <button seamButton theme=\"primary\" type=\"submit\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [class]=\"'btn btn-primary ' + (options?.fieldHtmlClass || '')\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [value]=\"controlValue\"\n (click)=\"updateValue($event)\">\n {{ _buttonLabel }}\n <span *ngIf=\"_selectedItem\">\n [{{ _selectedItem.name }}]\n </span>\n </button>\n <ng-container *ngIf=\"_dropdownObj\">\n <button\n [seamMenuToggle]=\"menu\" seamButton theme=\"primary\"\n class=\"dropdown-toggle dropdown-toggle-split\"\n [disabled]=\"_dropdownDisabled\">\n <span class=\"sr-only\">Toggle Dropdown</span>\n </button>\n <seam-menu #menu>\n <ng-container *ngFor=\"let item of _selectList\">\n <button seamMenuItem\n [class.active]=\"item.checked\"\n (click)=\"_setDropdownValue(item.value)\">\n {{ item.name }}\n </button>\n </ng-container>\n </seam-menu>\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i3.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions", "seamMenuTogglePositionsOffsetY"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i3.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }] });
134
134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamSchemaFormSubmitSplitComponent, decorators: [{
135
135
  type: Component,
136
136
  args: [{ selector: 'seam-schema-form-submit-split', template: "<div\n [class]=\"options?.htmlClass || ''\">\n <div [class.btn-group]=\"_dropdownObj\">\n <button seamButton theme=\"primary\" type=\"submit\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [class]=\"'btn btn-primary ' + (options?.fieldHtmlClass || '')\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [value]=\"controlValue\"\n (click)=\"updateValue($event)\">\n {{ _buttonLabel }}\n <span *ngIf=\"_selectedItem\">\n [{{ _selectedItem.name }}]\n </span>\n </button>\n <ng-container *ngIf=\"_dropdownObj\">\n <button\n [seamMenuToggle]=\"menu\" seamButton theme=\"primary\"\n class=\"dropdown-toggle dropdown-toggle-split\"\n [disabled]=\"_dropdownDisabled\">\n <span class=\"sr-only\">Toggle Dropdown</span>\n </button>\n <seam-menu #menu>\n <ng-container *ngFor=\"let item of _selectList\">\n <button seamMenuItem\n [class.active]=\"item.checked\"\n (click)=\"_setDropdownValue(item.value)\">\n {{ item.name }}\n </button>\n </ng-container>\n </seam-menu>\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"] }]