@one-paragon/angular-utilities 1.2.9-beta.1 → 1.2.10-beta-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/esm2022/action-state/action-state-spinner/action-state-spinner.component.mjs +3 -3
- package/esm2022/action-state/action-state-ui/action-state-ui.module.mjs +1 -1
- package/esm2022/action-state/index.mjs +1 -1
- package/esm2022/action-state/ngrx-ext/ngrx-ext.module.mjs +1 -1
- package/esm2022/action-state/ngrx.mjs +1 -1
- package/esm2022/http-request-state/directives/index.mjs +1 -1
- package/esm2022/http-request-state/index.mjs +1 -1
- package/esm2022/http-request-state/rxjs/getRequestorBody.mjs +1 -1
- package/esm2022/http-request-state/rxjs/getRequestorState.mjs +1 -1
- package/esm2022/http-request-state/rxjs/index.mjs +1 -1
- package/esm2022/ngrx/actionable-selector.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/esm2022/rxjs/defaultShareReplay.mjs +1 -1
- package/esm2022/rxjs/index.mjs +1 -1
- package/esm2022/rxjs/mapError.mjs +1 -1
- package/esm2022/rxjs/rxjs-operators.mjs +1 -1
- package/esm2022/rxjs/subjectifier.mjs +1 -1
- package/esm2022/rxjs/subscriber.directive.mjs +1 -1
- package/esm2022/table-builder/classes/DefaultSettings.mjs +1 -1
- package/esm2022/table-builder/classes/MatTableObservableDataSource.mjs +1 -1
- package/esm2022/table-builder/classes/TableBuilderConfig.mjs +1 -1
- package/esm2022/table-builder/classes/TableBuilderDataSource.mjs +1 -1
- package/esm2022/table-builder/classes/TableState.mjs +1 -1
- package/esm2022/table-builder/classes/data-store.mjs +1 -1
- package/esm2022/table-builder/classes/display-col.mjs +1 -1
- package/esm2022/table-builder/classes/filter-info.mjs +1 -1
- package/esm2022/table-builder/classes/table-builder-general-settings.mjs +4 -1
- package/esm2022/table-builder/classes/table-builder.mjs +1 -1
- package/esm2022/table-builder/classes/table-store.mjs +1 -1
- package/esm2022/table-builder/components/column-builder/column-builder.component.mjs +3 -3
- package/esm2022/table-builder/components/column-builder/column-helpers.mjs +1 -1
- package/esm2022/table-builder/components/date-filter/date-filter.component.mjs +3 -3
- package/esm2022/table-builder/components/date-time-filter/date-time-filter.component.mjs +3 -3
- package/esm2022/table-builder/components/filter/filter.component.mjs +3 -3
- package/esm2022/table-builder/components/filter/in-list/in-list-filter.component.mjs +19 -19
- package/esm2022/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +3 -3
- package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +10 -4
- package/esm2022/table-builder/components/generic-table/paginator.component.mjs +25 -25
- package/esm2022/table-builder/components/group-by-list/group-by-list.component.mjs +3 -3
- package/esm2022/table-builder/components/in-filter/in-filter.component.mjs +3 -3
- package/esm2022/table-builder/components/index.mjs +1 -1
- package/esm2022/table-builder/components/initialization-component/initialization-component.mjs +3 -3
- package/esm2022/table-builder/components/link-column.component.mjs +31 -31
- package/esm2022/table-builder/components/number-filter/number-filter.component.mjs +3 -3
- package/esm2022/table-builder/components/profiles-menu/profiles-menu.component.mjs +3 -3
- package/esm2022/table-builder/components/scroll-strategy.mjs +1 -1
- package/esm2022/table-builder/components/sort-menu/sort-menu.component-store.mjs +1 -1
- package/esm2022/table-builder/components/sort-menu/sort-menu.component.mjs +3 -3
- package/esm2022/table-builder/components/table-container/table-container-imports.mjs +1 -1
- package/esm2022/table-builder/components/table-container/table-container.helpers/data-state.helpers.mjs +1 -1
- package/esm2022/table-builder/components/table-container/table-container.helpers/filter-state.helpers.mjs +1 -1
- package/esm2022/table-builder/components/table-container/table-container.helpers/groupBy.helpers.mjs +1 -1
- package/esm2022/table-builder/components/table-container/table-container.helpers/sort-state.helpers.mjs +1 -1
- package/esm2022/table-builder/components/table-container/table-container.mjs +29 -22
- package/esm2022/table-builder/components/table-container/tableProps.mjs +2 -1
- package/esm2022/table-builder/components/table-container/virtual-scroll-container.mjs +35 -11
- package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +3 -3
- package/esm2022/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +3 -3
- package/esm2022/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs +1 -1
- package/esm2022/table-builder/directives/custom-cell-directive.mjs +1 -1
- package/esm2022/table-builder/directives/index.mjs +1 -1
- package/esm2022/table-builder/directives/multi-sort.directive.mjs +1 -1
- package/esm2022/table-builder/directives/resize-column.directive.mjs +1 -1
- package/esm2022/table-builder/directives/table-wrapper.directive.mjs +1 -1
- package/esm2022/table-builder/directives/tb-filter.directive.mjs +1 -1
- package/esm2022/table-builder/enums/filterTypes.mjs +1 -1
- package/esm2022/table-builder/functions/boolean-filter-function.mjs +1 -1
- package/esm2022/table-builder/functions/date-filter-function.mjs +1 -1
- package/esm2022/table-builder/functions/download-data.mjs +1 -1
- package/esm2022/table-builder/functions/null-filter-function.mjs +1 -1
- package/esm2022/table-builder/functions/number-filter-function.mjs +1 -1
- package/esm2022/table-builder/functions/sort-data-function.mjs +1 -1
- package/esm2022/table-builder/functions/string-filter-function.mjs +1 -1
- package/esm2022/table-builder/interfaces/ColumnInfo.mjs +1 -1
- package/esm2022/table-builder/interfaces/report-def.mjs +1 -1
- package/esm2022/table-builder/ngrx/tableBuilderStateStore.mjs +1 -1
- package/esm2022/table-builder/pipes/column-total.pipe.mjs +1 -1
- package/esm2022/table-builder/pipes/format-filter-type.pipe.mjs +1 -1
- package/esm2022/table-builder/pipes/format-filter-value.pipe.mjs +1 -1
- package/esm2022/table-builder/services/export-to-csv.service.mjs +1 -1
- package/esm2022/table-builder/services/link-creator.service.mjs +1 -1
- package/esm2022/table-builder/services/table-template-service.mjs +1 -1
- package/esm2022/table-builder/services/transform-creator.mjs +1 -1
- package/esm2022/table-builder/table-builder.module.mjs +1 -1
- package/esm2022/utilities/array-helpers.mjs +1 -1
- package/esm2022/utilities/directives/auto-focus.directive.mjs +1 -1
- package/esm2022/utilities/directives/clickEmitterDirective.mjs +1 -1
- package/esm2022/utilities/directives/clickSubject.mjs +1 -1
- package/esm2022/utilities/directives/conditional-classes.directive.mjs +1 -1
- package/esm2022/utilities/directives/dialog-service.mjs +1 -1
- package/esm2022/utilities/directives/dialog.mjs +1 -1
- package/esm2022/utilities/directives/mat-toggle-group-directive.mjs +1 -1
- package/esm2022/utilities/directives/prevent-enter.directive.mjs +1 -1
- package/esm2022/utilities/directives/stop-propagation.directive.mjs +1 -1
- package/esm2022/utilities/directives/trim-whitespace.directive.mjs +1 -1
- package/esm2022/utilities/index.mjs +1 -1
- package/esm2022/utilities/module.mjs +1 -1
- package/esm2022/utilities/pipes/function.pipe.mjs +1 -1
- package/esm2022/utilities/pipes/phone.pipe.mjs +1 -1
- package/esm2022/utilities/pipes/space-case.pipes.mjs +1 -1
- package/fesm2022/one-paragon-angular-utilities.mjs +174 -134
- package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -1
- package/package.json +1 -1
- package/table-builder/classes/table-builder-general-settings.d.ts +2 -0
- package/table-builder/components/generic-table/generic-table.component.d.ts +1 -0
- package/table-builder/components/table-container/table-container.d.ts +2 -1
- package/table-builder/components/table-container/tableProps.d.ts +1 -0
- package/table-builder/components/table-container/virtual-scroll-container.d.ts +8 -3
|
@@ -70,26 +70,28 @@ export class TableContainerComponent {
|
|
|
70
70
|
tableState = toSignal(this.state.state$.pipe(filter(stateIs(InitializationState.LoadedFromStore))));
|
|
71
71
|
allFilterDirectivesEffect = effect(() => {
|
|
72
72
|
const state = this.tableState();
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
f.used
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
73
|
+
untracked(() => {
|
|
74
|
+
if (state) {
|
|
75
|
+
this.allFilterDirectives().filter(f => !f.used).forEach(f => {
|
|
76
|
+
f.used = true;
|
|
77
|
+
if (f.savable) {
|
|
78
|
+
var filter = state.filters[f.filterId];
|
|
79
|
+
if (isFilterInfo(filter)) {
|
|
80
|
+
const filterDirective = f;
|
|
81
|
+
filterDirective.fieldType = filter.fieldType;
|
|
82
|
+
filterDirective.filterType = filter.filterType;
|
|
83
|
+
filterDirective.setFilterValue(filter.filterValue);
|
|
84
|
+
filterDirective.key = filter.key;
|
|
85
|
+
filterDirective.update();
|
|
86
|
+
}
|
|
87
|
+
if (isCustomFilter(filter)) {
|
|
88
|
+
f.active = filter.active ?? false;
|
|
89
|
+
}
|
|
90
|
+
this.state.addFilter(f.filter$);
|
|
85
91
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
untracked(() => this.state.addFilter(f.filter$));
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
});
|
|
93
95
|
});
|
|
94
96
|
paginatorComponent;
|
|
95
97
|
genericTable;
|
|
@@ -119,6 +121,9 @@ export class TableContainerComponent {
|
|
|
119
121
|
set groupHeaderTemplate(template) {
|
|
120
122
|
this.props.groupHeaderTemplate = template;
|
|
121
123
|
}
|
|
124
|
+
set groupHeaderHeight(value) {
|
|
125
|
+
this.props.groupHeaderHeight = value;
|
|
126
|
+
}
|
|
122
127
|
trackBy;
|
|
123
128
|
inputFilters;
|
|
124
129
|
selection$ = new EventEmitter();
|
|
@@ -264,11 +269,11 @@ export class TableContainerComponent {
|
|
|
264
269
|
};
|
|
265
270
|
$useVirtual = this.state.$isVirtual;
|
|
266
271
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
267
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: TableContainerComponent, isStandalone: true, selector: "tb-table-container", inputs: { tableBuilder: "tableBuilder", tableId: "tableId", indexColumn: "indexColumn", selectionColumn: "selectionColumn", isSticky: "isSticky", stickyFooter: "stickyFooter", pageSize: "pageSize", groupHeaderTemplate: "groupHeaderTemplate", trackBy: "trackBy", inputFilters: "inputFilters" }, outputs: { selection$: "selection$", data: "data", onStateReset: "onStateReset", onSaveState: "onSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore, DataStore], queries: [{ propertyName: "filterDirectives", predicate: TableFilterDirective, descendants: true, isSignal: true }, { propertyName: "customFilterDirectives", predicate: TableCustomFilterDirective, descendants: true, isSignal: true }, { propertyName: "$customCells", predicate: CustomCellDirective, isSignal: true }, { propertyName: "tableElRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "customRows", predicate: MatRowDef }], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }, { propertyName: "genericTable", first: true, predicate: GenericTableComponent, descendants: true }], ngImport: i0, template: "<ng-content select=\"[before]\" />\
|
|
272
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: TableContainerComponent, isStandalone: true, selector: "tb-table-container", inputs: { tableBuilder: "tableBuilder", tableId: "tableId", indexColumn: "indexColumn", selectionColumn: "selectionColumn", isSticky: "isSticky", stickyFooter: "stickyFooter", pageSize: "pageSize", groupHeaderTemplate: "groupHeaderTemplate", groupHeaderHeight: "groupHeaderHeight", trackBy: "trackBy", inputFilters: "inputFilters" }, outputs: { selection$: "selection$", data: "data", onStateReset: "onStateReset", onSaveState: "onSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore, DataStore], queries: [{ propertyName: "filterDirectives", predicate: TableFilterDirective, descendants: true, isSignal: true }, { propertyName: "customFilterDirectives", predicate: TableCustomFilterDirective, descendants: true, isSignal: true }, { propertyName: "$customCells", predicate: CustomCellDirective, isSignal: true }, { propertyName: "tableElRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "customRows", predicate: MatRowDef }], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }, { propertyName: "genericTable", first: true, predicate: GenericTableComponent, descendants: true }], ngImport: i0, template: "<ng-content select=\"[before]\" />\n\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\n <div class=\"header-wrapper\">\n <div class=\"title\">\n @if ((!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed) {\n <ng-content select=\".tb-header-title\"/>\n }\n @if((state.groupByKeys$ | async)?.length){\n <group-by-list />\n }\n </div>\n <div class=\"flx-row-end\">\n <lib-filter-list />\n @if (!tableSettings.hideHeader) {\n @if (!(collapseHeader$ | async)) {\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\n </mat-menu>\n }\n @else {\n <mat-icon color=\"primary\" [matMenuTriggerFor]=\"mainMenu\" class=\"flat-menu-button pointer\">more_horiz</mat-icon>\n <mat-menu #mainMenu='matMenu'>\n <div class=\"flex-column\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\n </div>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\n </mat-menu>\n }\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\n (click)=\"state.toggleCollapseHeader()\">\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\n </mat-icon>\n }\n\n </div>\n </div>\n <div class=\"table-wrapper\">\n @if($useVirtual())\n {\n <tb-virtual-scroll-container>\n <tb-generic-table [rows]='customRows' [data]=\"(data | async)!\" [displayData]=\"$displayData()\"\n (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]=\"trackBy\" />\n </tb-virtual-scroll-container>\n }\n @else\n {\n <tb-generic-table [rows]='customRows' [data]=\"(data | async)!\" [displayData]=\"$displayData()\"\n (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]=\"trackBy\" />\n }\n\n </div>\n @if(tableSettings.usePaginator)\n {\n <div class=\"paginator\">\n <tb-paginator #tbPaginator [data$]=\"data\" [tableElRef]=\"tableElRef\" />\n\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\"\n (click)=\"state.toggleCollapseFooter()\">\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\n </mat-icon>\n </div>\n }\n\n <ng-template #headerMenu>\n @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}\n @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}\n @if (!tableSettings.hideSort) {<tb-sort-menu/>}\n @if (!!tableId) {<tb-profiles-menu [$tableId]=\"tableId\" (onSaveState)=\"onSaveState.emit($event)\"/>}\n </ng-template>\n\n <ng-template #headerMenuExtra>\n <button mat-menu-item (click)=\"resetState()\">\n <mat-icon color=\"primary\">autorenew</mat-icon>\n <span>Reset table</span>\n </button>\n @if (!tableSettings.hideExport) {\n <button mat-menu-item (click)=\"exportToCsv()\">\n <mat-icon color=\"primary\">file_download</mat-icon>\n <span>Export Table</span>\n </button>\n }\n @if (tableId) {\n <button stop-propagation mat-menu-item (click)=\"pm.trigger()?.toggleMenu()\">\n <mat-icon color=\"primary\">people</mat-icon>\n <span>Profiles</span>\n </button>\n <tb-profiles-menu class=\"profiles-menu\" #pm [$tableId]=\"tableId\" (onSaveState)=\"onSaveState.emit($event)\"/>\n }\n </ng-template>\n</ng-container>\n", styles: [".header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.table-wrapper{overflow-x:auto}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}.pointer{cursor:pointer}.add-key{width:90%}.paginator{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff;bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.profiles-menu{visibility:hidden;width:0px;height:0px;display:block;overflow:hidden;position:absolute;top:50px}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}.paginator-row{display:flex;align-items:center}\n"], dependencies: [{ kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.PaginatorComponent, selector: "tb-paginator", inputs: ["data$", "tableElRef"] }, { kind: "directive", type: i3.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: i4.MultiSortDirective, selector: "[multiSort]", inputs: ["matSortDisabled"], exportAs: ["multiSort"] }, { kind: "component", type: i5.GroupByListComponent, selector: "group-by-list" }, { kind: "component", type: i6.FilterChipsComponent, selector: "lib-filter-list" }, { kind: "component", type: i7.GenFilterDisplayerComponent, selector: "tb-filter-displayer" }, { kind: "component", type: i8.GenColDisplayerComponent, selector: "tb-col-displayer" }, { kind: "component", type: i9.SortMenuComponent, selector: "tb-sort-menu" }, { kind: "component", type: i10.GenericTableComponent, selector: "tb-generic-table", inputs: ["trackBy", "displayData", "data", "rows", "columnBuilders", "columnInfos"], outputs: ["selection$"] }, { kind: "directive", type: i11.StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "component", type: i12.ProfilesMenuComponent, selector: "tb-profiles-menu", inputs: ["$tableId"], outputs: ["onSaveState"] }, { kind: "ngmodule", type: i13.MatButtonModule }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: i14.MatMenuModule }, { kind: "component", type: i14.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: i15.MatIconModule }, { kind: "component", type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: i16.MatTooltipModule }, { kind: "directive", type: i16.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i17.VirtualScrollContainer, selector: "tb-virtual-scroll-container" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
268
273
|
}
|
|
269
274
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableContainerComponent, decorators: [{
|
|
270
275
|
type: Component,
|
|
271
|
-
args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore, DataStore], standalone: true, imports: containerImports, template: "<ng-content select=\"[before]\" />\
|
|
276
|
+
args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore, DataStore], standalone: true, imports: containerImports, template: "<ng-content select=\"[before]\" />\n\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\n <div class=\"header-wrapper\">\n <div class=\"title\">\n @if ((!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed) {\n <ng-content select=\".tb-header-title\"/>\n }\n @if((state.groupByKeys$ | async)?.length){\n <group-by-list />\n }\n </div>\n <div class=\"flx-row-end\">\n <lib-filter-list />\n @if (!tableSettings.hideHeader) {\n @if (!(collapseHeader$ | async)) {\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #mainMenu='matMenu'>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\n </mat-menu>\n }\n @else {\n <mat-icon color=\"primary\" [matMenuTriggerFor]=\"mainMenu\" class=\"flat-menu-button pointer\">more_horiz</mat-icon>\n <mat-menu #mainMenu='matMenu'>\n <div class=\"flex-column\">\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\n </div>\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\n </mat-menu>\n }\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\n (click)=\"state.toggleCollapseHeader()\">\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\n </mat-icon>\n }\n\n </div>\n </div>\n <div class=\"table-wrapper\">\n @if($useVirtual())\n {\n <tb-virtual-scroll-container>\n <tb-generic-table [rows]='customRows' [data]=\"(data | async)!\" [displayData]=\"$displayData()\"\n (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]=\"trackBy\" />\n </tb-virtual-scroll-container>\n }\n @else\n {\n <tb-generic-table [rows]='customRows' [data]=\"(data | async)!\" [displayData]=\"$displayData()\"\n (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]=\"trackBy\" />\n }\n\n </div>\n @if(tableSettings.usePaginator)\n {\n <div class=\"paginator\">\n <tb-paginator #tbPaginator [data$]=\"data\" [tableElRef]=\"tableElRef\" />\n\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\"\n (click)=\"state.toggleCollapseFooter()\">\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\n </mat-icon>\n </div>\n }\n\n <ng-template #headerMenu>\n @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}\n @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}\n @if (!tableSettings.hideSort) {<tb-sort-menu/>}\n @if (!!tableId) {<tb-profiles-menu [$tableId]=\"tableId\" (onSaveState)=\"onSaveState.emit($event)\"/>}\n </ng-template>\n\n <ng-template #headerMenuExtra>\n <button mat-menu-item (click)=\"resetState()\">\n <mat-icon color=\"primary\">autorenew</mat-icon>\n <span>Reset table</span>\n </button>\n @if (!tableSettings.hideExport) {\n <button mat-menu-item (click)=\"exportToCsv()\">\n <mat-icon color=\"primary\">file_download</mat-icon>\n <span>Export Table</span>\n </button>\n }\n @if (tableId) {\n <button stop-propagation mat-menu-item (click)=\"pm.trigger()?.toggleMenu()\">\n <mat-icon color=\"primary\">people</mat-icon>\n <span>Profiles</span>\n </button>\n <tb-profiles-menu class=\"profiles-menu\" #pm [$tableId]=\"tableId\" (onSaveState)=\"onSaveState.emit($event)\"/>\n }\n </ng-template>\n</ng-container>\n", styles: [".header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.table-wrapper{overflow-x:auto}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}.pointer{cursor:pointer}.add-key{width:90%}.paginator{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff;bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.profiles-menu{visibility:hidden;width:0px;height:0px;display:block;overflow:hidden;position:absolute;top:50px}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}.paginator-row{display:flex;align-items:center}\n"] }]
|
|
272
277
|
}], propDecorators: { paginatorComponent: [{
|
|
273
278
|
type: ViewChild,
|
|
274
279
|
args: [PaginatorComponent]
|
|
@@ -298,6 +303,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
298
303
|
type: Input
|
|
299
304
|
}], groupHeaderTemplate: [{
|
|
300
305
|
type: Input
|
|
306
|
+
}], groupHeaderHeight: [{
|
|
307
|
+
type: Input
|
|
301
308
|
}], trackBy: [{
|
|
302
309
|
type: Input
|
|
303
310
|
}], inputFilters: [{
|
|
@@ -313,4 +320,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
313
320
|
}], state$: [{
|
|
314
321
|
type: Output
|
|
315
322
|
}] } });
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBRWYsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxNQUFNLEVBRU4sWUFBWSxFQUNaLFVBQVUsRUFHVixRQUFRLEVBQ1IsZUFBZSxFQUNmLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckYsT0FBTyxFQUFtQixTQUFTLEVBQVksTUFBTSw2QkFBNkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhJLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUs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QjtzQkFBL0IsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFLRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE91dHB1dCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFByZWRpY2F0ZSxcclxuICBWaWV3Q2hpbGQsXHJcbiAgaW5qZWN0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSW5qZWN0b3IsXHJcbiAgY29udGVudENoaWxkcmVuLFxyXG4gIGNvbXB1dGVkLFxyXG4gIGVmZmVjdCxcclxuICB1bnRyYWNrZWQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgY29tYmluZUxhdGVzdCwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXJyYXlBZGRpdGlvbmFsLCBGaWVsZFR5cGUsIE1ldGFEYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtZGVmJztcclxuaW1wb3J0IHsgbWFwLCB0YXAsIHdpdGhMYXRlc3RGcm9tLCBtZXJnZUFsbCwgc2Nhbiwgc3dpdGNoQWxsLCBzdGFydFdpdGgsIHRpbWVzdGFtcCwgbWVyZ2VNYXAsIGZpbHRlciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUYWJsZUJ1aWxkZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLWJ1aWxkZXInO1xyXG5pbXBvcnQgeyBNYXRSb3dEZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IEN1c3RvbUNlbGxEaXJlY3RpdmUsIFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCBUYWJsZUZpbHRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBzdGF0ZUlzLCBUYWJsZVN0b3JlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90YWJsZS1zdG9yZSc7XHJcbmltcG9ydCB7IG5vdE51bGwgfSBmcm9tICcuLi8uLi8uLi9yeGpzL3J4anMtb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRXhwb3J0VG9Dc3ZTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXhwb3J0LXRvLWNzdi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXJyYXlEZWZhdWx0cyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvRGVmYXVsdFNldHRpbmdzJztcclxuaW1wb3J0IHsgVGFibGVCdWlsZGVyQ29uZmlnVG9rZW4gfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlQnVpbGRlckNvbmZpZyc7XHJcbmltcG9ydCB7IEluaXRpYWxpemF0aW9uU3RhdGUsIFRhYmxlU3RhdGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlU3RhdGUnO1xyXG5pbXBvcnQgeyBzb3J0RGF0YSB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9zb3J0LWRhdGEtZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBXcmFwcGVyRmlsdGVyU3RvcmUgfSBmcm9tICcuLi90YWJsZS1jb250YWluZXItZmlsdGVyL3RhYmxlLXdyYXBwZXItZmlsdGVyLXN0b3JlJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgZGVmYXVsdFNoYXJlUmVwbGF5IH0gZnJvbSAnLi4vLi4vLi4vcnhqcyc7XHJcbmltcG9ydCB7IGNyZWF0ZUZpbHRlckZ1bmMsIGlzQ3VzdG9tRmlsdGVyLCBpc0ZpbHRlckluZm8gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2ZpbHRlci1pbmZvJztcclxuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGljdGlvbmFyeSc7XHJcbmltcG9ydCB7IFRhYmxlV3JhcHBlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGFibGUtd3JhcHBlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBjcmVhdGVMaW5rQ3JlYXRvckRpY3QgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saW5rLWNyZWF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IFRhYmxlQnVpbGRlclN0YXRlU3RvcmUgfSBmcm9tICcuLi8uLi9uZ3J4L3RhYmxlQnVpbGRlclN0YXRlU3RvcmUnO1xyXG5pbXBvcnQgeyBjb250YWluZXJJbXBvcnRzIH0gZnJvbSAnLi90YWJsZS1jb250YWluZXItaW1wb3J0cyc7XHJcbmltcG9ydCB7IHVwZGF0ZUZpbHRlckluZm9TdGF0ZSwgdXBkYXRlRmlsdGVyUHJlZGljYXRlU3RhdGUsIHVwZGF0ZUZpbHRlclN0YXRlIH0gZnJvbSAnLi90YWJsZS1jb250YWluZXIuaGVscGVycy9maWx0ZXItc3RhdGUuaGVscGVycyc7XHJcbmltcG9ydCB7IGluaXRpYWxTb3J0U3RhdGUsIHVwZGF0ZVNvcnRTdGF0ZSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvc29ydC1zdGF0ZS5oZWxwZXJzJztcclxuaW1wb3J0IHsgZ2V0QWxsR3JvdXBIZWFkZXJOYW1lcywgaW5pdGlhbEdyb3VwQnlTdGF0ZSwgdXBkYXRlR3JvdXBCeVN0YXRlIH0gZnJvbSAnLi90YWJsZS1jb250YWluZXIuaGVscGVycy9ncm91cEJ5LmhlbHBlcnMnO1xyXG5pbXBvcnQgeyBzb3J0QW5kRmlsdGVyRGF0YSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZGF0YS1zdGF0ZS5oZWxwZXJzJztcclxuaW1wb3J0IHsgVGFibGVQcm9wcywgZGVmYXVsdFByb3BzIH0gZnJvbSAnLi90YWJsZVByb3BzJztcclxuaW1wb3J0IHsgUGFnaW5hdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VuZXJpYy10YWJsZS9wYWdpbmF0b3IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVCdWlsZGVyRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGFibGVCdWlsZGVyRGF0YVNvdXJjZSc7XHJcbmltcG9ydCB7IEdlbmVyaWNUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBEYXRhU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2RhdGEtc3RvcmUnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd0Yi10YWJsZS1jb250YWluZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWNvbnRhaW5lci5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLWNvbnRhaW5lci5jc3MnLCAnLi4vLi4vc3R5bGVzL2NvbGxhcHNlci5zdHlsZXMuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBwcm92aWRlcnM6IFtUYWJsZVN0b3JlLCBFeHBvcnRUb0NzdlNlcnZpY2UsIFdyYXBwZXJGaWx0ZXJTdG9yZSwgRGF0YVN0b3JlXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBjb250YWluZXJJbXBvcnRzXHJcbn0pIGV4cG9ydCBjbGFzcyBUYWJsZUNvbnRhaW5lckNvbXBvbmVudDxUID0gYW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcm9wczogVGFibGVQcm9wcyA9IHsgLi4uZGVmYXVsdFByb3BzIH07XHJcbiAgZGF0YVN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPFRbXT4+KDEpO1xyXG5cclxuICBwdWJsaWMgc3RhdGUgPSBpbmplY3QoVGFibGVTdG9yZSk7XHJcbiAgcHJpdmF0ZSBkYXRhU3RvcmUgPSBpbmplY3QoRGF0YVN0b3JlKTtcclxuICBwdWJsaWMgY29uZmlnID0gaW5qZWN0KFRhYmxlQnVpbGRlckNvbmZpZ1Rva2VuKTtcclxuICBwdWJsaWMgZXhwb3J0VG9Dc3ZTZXJ2aWNlID0gaW5qZWN0KEV4cG9ydFRvQ3N2U2VydmljZTxUPik7XHJcbiAgcHVibGljIHdyYXBwZXIgPSBpbmplY3QoVGFibGVXcmFwcGVyRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG4gIHB1YmxpYyBzdGF0ZVNlcnZpY2UgPSBpbmplY3QoVGFibGVCdWlsZGVyU3RhdGVTdG9yZSk7XHJcbiAgcHVibGljIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcclxuXHJcbiAgZmlsdGVyRGlyZWN0aXZlcyA9IGNvbnRlbnRDaGlsZHJlbihUYWJsZUZpbHRlckRpcmVjdGl2ZSwge2Rlc2NlbmRhbnRzOiB0cnVlfSk7XHJcbiAgY3VzdG9tRmlsdGVyRGlyZWN0aXZlcyA9IGNvbnRlbnRDaGlsZHJlbihUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSwge2Rlc2NlbmRhbnRzOiB0cnVlfSk7XHJcblxyXG4gIGFsbEZpbHRlckRpcmVjdGl2ZXMgPSBjb21wdXRlZCggKCkgPT4gIHtcclxuICAgICAgaWYodGhpcy53cmFwcGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmZpbHRlckRpcmVjdGl2ZXMoKSwgLi4udGhpcy5jdXN0b21GaWx0ZXJEaXJlY3RpdmVzKCksIC4uLnRoaXMud3JhcHBlci4kcmVnaXN0cmF0aW9ucygpXTtcclxuICAgICAgfSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmZpbHRlckRpcmVjdGl2ZXMoKSwgLi4udGhpcy5jdXN0b21GaWx0ZXJEaXJlY3RpdmVzKCldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgKTtcclxuXHJcblxyXG4gIHRhYmxlU3RhdGUgPSB0b1NpZ25hbCh0aGlzLnN0YXRlLnN0YXRlJC5waXBlKGZpbHRlcihzdGF0ZUlzKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKSkpKSA7XHJcblxyXG4gIGFsbEZpbHRlckRpcmVjdGl2ZXNFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnRhYmxlU3RhdGUoKTtcclxuICAgIGlmKHN0YXRlKSB7XHJcbiAgICAgIHRoaXMuYWxsRmlsdGVyRGlyZWN0aXZlcygpLmZpbHRlciggZiA9PiAhZi51c2VkKS5mb3JFYWNoKCBmID0+IHtcclxuICAgICAgICBmLnVzZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmKGYuc2F2YWJsZSkge1xyXG4gICAgICAgICAgdmFyIGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZi5maWx0ZXJJZF07XHJcbiAgICAgICAgICBpZihpc0ZpbHRlckluZm8oZmlsdGVyKSkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJEaXJlY3RpdmU6IFRhYmxlRmlsdGVyRGlyZWN0aXZlID0gZiBhcyBUYWJsZUZpbHRlckRpcmVjdGl2ZTtcclxuICAgICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLmZpZWxkVHlwZSA9IGZpbHRlci5maWVsZFR5cGU7XHJcbiAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5maWx0ZXJUeXBlID0gZmlsdGVyLmZpbHRlclR5cGU7XHJcbiAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5zZXRGaWx0ZXJWYWx1ZShmaWx0ZXIuZmlsdGVyVmFsdWUpO1xyXG4gICAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUua2V5ID0gZmlsdGVyLmtleTtcclxuICAgICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoaXNDdXN0b21GaWx0ZXIoZmlsdGVyKSkge1xyXG4gICAgICAgICAgICBmLmFjdGl2ZSA9IGZpbHRlci5hY3RpdmUgPz8gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5zdGF0ZS5hZGRGaWx0ZXIoKGYuZmlsdGVyJCBhcyBhbnkpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgQFZpZXdDaGlsZChQYWdpbmF0b3JDb21wb25lbnQpICBwYWdpbmF0b3JDb21wb25lbnQ/OiBQYWdpbmF0b3JDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChHZW5lcmljVGFibGVDb21wb25lbnQpICBnZW5lcmljVGFibGU/OiBHZW5lcmljVGFibGVDb21wb25lbnQ7XHJcbiAgQENvbnRlbnRDaGlsZHJlbihNYXRSb3dEZWYpIGN1c3RvbVJvd3MhOiBRdWVyeUxpc3Q8TWF0Um93RGVmPGFueT4+O1xyXG4gICRjdXN0b21DZWxscyA9IGNvbnRlbnRDaGlsZHJlbihDdXN0b21DZWxsRGlyZWN0aXZlKTtcclxuICAkbXlDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuJG1ldGFEYXRhQXJyYXkoKS5tYXAoIG1ldGFEYXRhID0+ICh7bWV0YURhdGEsIGN1c3RvbUNlbGw6IHRoaXMuJGN1c3RvbUNlbGxzKCkuZmluZChjYyA9PiBjYy5jdXN0b21DZWxsID09PSBtZXRhRGF0YS5rZXkpfSkpXHJcbiAgfSlcclxuICBAQ29udGVudENoaWxkKCd0YWJsZScsIHtyZWFkOiBFbGVtZW50UmVmfSkgdGFibGVFbFJlZiE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHRhYmxlQnVpbGRlciE6IFRhYmxlQnVpbGRlcjtcclxuICBASW5wdXQoKSB0YWJsZUlkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNldCBpbmRleENvbHVtbih2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucHJvcHMuaW5kZXhDb2x1bW4gPSB2YWw7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNldCBzZWxlY3Rpb25Db2x1bW4odmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnByb3BzLnNlbGVjdGlvbkNvbHVtbiA9IHZhbDtcclxuICB9XHJcbiAgQElucHV0KCkgc2V0IGlzU3RpY2t5KHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5wcm9wcy5pc1N0aWNreSA9IHZhbDtcclxuICB9XHJcbiAgQElucHV0KCkgc2V0IHN0aWNreUZvb3Rlcih2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucHJvcHMuc3RpY2t5Rm9vdGVyID0gdmFsO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5zdGF0ZS5zZXRQYWdlU2l6ZSh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNldCBncm91cEhlYWRlclRlbXBsYXRlKCB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgdGhpcy5wcm9wcy5ncm91cEhlYWRlclRlbXBsYXRlID0gdGVtcGxhdGU7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHRyYWNrQnkhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaW5wdXRGaWx0ZXJzPzogT2JzZXJ2YWJsZTxBcnJheTxQcmVkaWNhdGU8VD4+PjtcclxuXHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbiQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRhdGEgPSB0aGlzLmRhdGFTdWJqZWN0LnBpcGUoXHJcbiAgICBzd2l0Y2hBbGwoKSxcclxuICAgIHN0YXJ0V2l0aChbXSBhcyBUW10pLFxyXG4gICAgZGVmYXVsdFNoYXJlUmVwbGF5KCksXHJcbiAgKTtcclxuICBAT3V0cHV0KCkgb25TdGF0ZVJlc2V0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblNhdmVTdGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc3RhdGUkID0gdGhpcy5zdGF0ZS5nZXRTYXZhYmxlU3RhdGUoKS5waXBlKFxyXG4gICAgbWFwKHN0YXRlID0+IGNsb25lRGVlcChzdGF0ZSkpLFxyXG4gICAgZGVmYXVsdFNoYXJlUmVwbGF5KCksXHJcbiAgKTtcclxuXHJcbiAgY2xlYXJTZWxlY3Rpb25zKCl7XHJcbiAgICB0aGlzLmdlbmVyaWNUYWJsZT8uc2VsZWN0aW9uLmNsZWFyKHRydWUpO1xyXG4gIH1cclxuICBkaXNwbGF5RGF0YVN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPFRbXT4+KDEpO1xyXG4gIGRpc3BsYXlEYXRhID0gdGhpcy5kaXNwbGF5RGF0YVN1YmplY3QucGlwZShcclxuICAgIHN3aXRjaEFsbCgpLFxyXG4gICAgZGVmYXVsdFNoYXJlUmVwbGF5KCksXHJcbiAgKTtcclxuICAkZGlzcGxheURhdGEgPSB0b1NpZ25hbCh0aGlzLmRpc3BsYXlEYXRhLCB7IGluaXRpYWxWYWx1ZTogW10gfSk7XHJcblxyXG5cclxuXHJcbiAgY29sbGFwc2VGb290ZXIkID0gdGhpcy5zdGF0ZS5zdGF0ZSQucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUucGVyc2lzdGVkVGFibGVTZXR0aW5ncy5jb2xsYXBzZUZvb3RlcikpO1xyXG5cclxuXHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpe1xyXG4gICAgaWYodGhpcy50YWJsZUlkKSB7XHJcbiAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNhdmVUYWJsZVN0YXRlVG9Mb2NhbCh7IHRhYmxlSWQ6dGhpcy50YWJsZUlkLCB0YWJsZVN0YXRlOiB0aGlzLnN0YXRlLmdldFNhdmFibGVTdGF0ZVNpZ25hbCgpIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmlyc3RQYWdlKCk6IHZvaWQge1xyXG4gICB0aGlzLnBhZ2luYXRvckNvbXBvbmVudD8ucGFnaW5hdG9yPy5maXJzdFBhZ2UoKTtcclxuICB9XHJcblxyXG4gIGxhc3RQYWdlKCk6IHZvaWQge1xyXG4gICB0aGlzLnBhZ2luYXRvckNvbXBvbmVudD8ucGFnaW5hdG9yPy5sYXN0UGFnZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRTdGF0ZSgpIHtcclxuICAgIHRoaXMuY3VzdG9tRmlsdGVyRGlyZWN0aXZlcygpLmZvckVhY2goIGNmID0+IGNmLnJlc2V0KCkpO1xyXG4gICAgdGhpcy5maWx0ZXJEaXJlY3RpdmVzKCkuZm9yRWFjaCggY2YgPT4gY2YucmVzZXQoKSApO1xyXG4gICAgdGhpcy5zdGF0ZS5yZXNldFN0YXRlKCk7XHJcbiAgICB0aGlzLm9uU3RhdGVSZXNldC5uZXh0KG51bGwpXHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplU3RhdGUoKSB7XHJcbiAgICB0aGlzLnN0YXRlLnNldFRhYmxlU2V0dGluZ3ModGhpcy50YWJsZUJ1aWxkZXIuc2V0dGluZ3MpO1xyXG4gICAgdGhpcy5zdGF0ZS5ydW5PbmNlV2hlbihcclxuICAgICAgc3RhdGVJcyhJbml0aWFsaXphdGlvblN0YXRlLk1ldGFEYXRhTG9hZGVkKSxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIGlmKHRoaXMudGFibGVJZCkge1xyXG4gICAgICAgICAgY29uc3QgcGVyc2lzdGVkU3RhdGUkID0gdG9PYnNlcnZhYmxlKHRoaXMuc3RhdGVTZXJ2aWNlLiRzZWxlY3RMb2NhbFRhYmxlU3RhdGVGb3JWaWV3KHRoaXMudGFibGVJZCksIHtpbmplY3RvcjogdGhpcy5pbmplY3Rvcn0pLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcCggcGVyc2lzdGVkU3RhdGUgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKCFwZXJzaXN0ZWRTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zZXRJbml0aWFsaXphdGlvblN0YXRlKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBub3ROdWxsKCksXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZS51cGRhdGVTdGF0ZUZyb21QZXJzaXN0ZWRTdGF0ZShwZXJzaXN0ZWRTdGF0ZSQucGlwZShub3ROdWxsKCkpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZS5zZXRJbml0aWFsaXphdGlvblN0YXRlKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgY3VzdG9tRmlsdGVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFByZWRpY2F0ZTxUPltdPihbXSk7XHJcbiAgaW5pdGlhbGl6ZURhdGEoKSB7XHJcblxyXG4gICAgY29uc3QgcHJlZGljYXRlRmlsdGVycyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmlucHV0RmlsdGVycz8ucGlwZShzdGFydFdpdGgoW10pKSA/PyBvZihbXSBhcyBQcmVkaWNhdGU8VD5bXSksIHRoaXMuY3VzdG9tRmlsdGVycyRdKVxyXG4gICAgICAucGlwZShtYXAoKFthLCBiXSkgPT4gWy4uLmEsIC4uLmJdKSk7XHJcblxyXG4gICAgY29uc3QgZmlsdGVycyQgPSBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgdGhpcy5zdGF0ZS5maWx0ZXJzJC5waXBlKHNjYW4odXBkYXRlRmlsdGVySW5mb1N0YXRlLCB7IGFsbEZpbHRlcnM6IHt9IH0pLCB0aW1lc3RhbXAoKSksXHJcbiAgICAgIHByZWRpY2F0ZUZpbHRlcnMkLnBpcGUoc2Nhbih1cGRhdGVGaWx0ZXJQcmVkaWNhdGVTdGF0ZSwge2FsbEZpbHRlcnM6IFtdIGFzIFByZWRpY2F0ZTxUPltdfSksIHRpbWVzdGFtcCgpKVxyXG4gICAgXSlcclxuICAgIC5waXBlKFxyXG4gICAgICBtYXAoKFtmaWx0ZXJJbmZvLCBwcmVkXSkgPT4gdXBkYXRlRmlsdGVyU3RhdGUoZmlsdGVySW5mbywgcHJlZCkpXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHNvcnRzU3RhdGUkID0gdGhpcy5zdGF0ZS5zb3J0JC5waXBlKHNjYW4odXBkYXRlU29ydFN0YXRlLCBpbml0aWFsU29ydFN0YXRlKSk7XHJcblxyXG4gICAgY29uc3Qgc29ydGVkQW5kRmlsdGVyZWREYXRhJCA9IHNvcnRBbmRGaWx0ZXJEYXRhKHRoaXMudGFibGVCdWlsZGVyLmdldERhdGEkKCksIHNvcnRzU3RhdGUkLCBmaWx0ZXJzJCk7XHJcblxyXG4gICAgY29uc3QgZmxhdEdyb3VwZWQkID0gY29tYmluZUxhdGVzdChbc29ydGVkQW5kRmlsdGVyZWREYXRhJC5waXBlKHRpbWVzdGFtcCgpKSwgdGhpcy5zdGF0ZS5ncm91cEJ5S2V5cyQucGlwZSh0aW1lc3RhbXAoKSksIHRoaXMuc3RhdGUuZXhwYW5kZWRHcm91cHMkLnBpcGUodGltZXN0YW1wKCkpXSkucGlwZShcclxuICAgICAgc2Nhbih1cGRhdGVHcm91cEJ5U3RhdGUsIGluaXRpYWxHcm91cEJ5U3RhdGUpLFxyXG4gICAgICBtYXAoKHtkaXNwbGF5RGF0YX0pID0+IGRpc3BsYXlEYXRhKSxcclxuICAgICAgZGVmYXVsdFNoYXJlUmVwbGF5KCksXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZGlzcGxheURhdGFTdWJqZWN0Lm5leHQoZmxhdEdyb3VwZWQkKTtcclxuICAgIHRoaXMuZGF0YVN1YmplY3QubmV4dChzb3J0ZWRBbmRGaWx0ZXJlZERhdGEkKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlLm9uKHRoaXMuZGlzcGxheURhdGEsIChkYXRhKSA9PiB7XHJcbiAgICAgIHRoaXMuZGF0YVN0b3JlLnBhdGNoU3RhdGUoe2RhdGFMZW46IGRhdGEubGVuZ3RofSlcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnN0IGN1c3RvbUNlbGxzJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLiRjdXN0b21DZWxscywgeyBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcclxuICAgIHRoaXMuc3RhdGUuc2V0TGlua01hcHModGhpcy50YWJsZUJ1aWxkZXIubWV0YURhdGEkIS5waXBlKFxyXG4gICAgICBtYXAoY3JlYXRlTGlua0NyZWF0b3JEaWN0KVxyXG4gICAgKSk7XHJcbiAgICBjb25zdCBjID0gY3VzdG9tQ2VsbHMkLnBpcGUoc3dpdGNoTWFwKGMgPT4gYy5sZW5ndGggPyBjb21iaW5lTGF0ZXN0KGMubWFwKGMgPT4gYy4kbWV0YURhdGEpKSA6IG9mKFtdIGFzIE1ldGFEYXRhW10pKSk7XHJcbiAgICB0aGlzLnN0YXRlLnNldE1ldGFEYXRhKGNvbWJpbmVMYXRlc3QoW3RoaXMudGFibGVCdWlsZGVyLm1ldGFEYXRhJCwgIGNdKS5waXBlKG1hcCgoW21kcywgY3VzdG9tQ2VsbHNdKSA9PiB7XHJcbiAgICAgIG1kcyA9IG1kcy5tYXAodGhpcy5tYXBBcnJheUZpZWxkc01ldGFEYXRhcyk7XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAgLi4ubWRzLFxyXG4gICAgICAgIC4uLmN1c3RvbUNlbGxzLm1hcCggbWQgPT4gdGhpcy5tZXJnZU1ldGFEYXRhKG1kLCBtZHMuZmluZCggaXRlbSA9PiBpdGVtLmtleSA9PT0gbWQua2V5ICkgKSlcclxuICAgICAgXVxyXG4gICAgfSkpKVxyXG4gICAgY29uc3QgZHMgPSBuZXcgVGFibGVCdWlsZGVyRGF0YVNvdXJjZTxUPihcclxuICAgICAgdGhpcy5kaXNwbGF5RGF0YSxcclxuICAgICAgdGhpcy5zdGF0ZSxcclxuICAgICAgdGhpcy5kYXRhU3RvcmVcclxuICAgICk7XHJcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZVN0YXRlKHtwcm9wczoge1xyXG4gICAgICBkYXRhU291cmNlOiBkcyxcclxuICAgICAgLi4udGhpcy5wcm9wc1xyXG4gICAgfX0pXHJcbiAgICB0aGlzLmluaXRpYWxpemVTdGF0ZSgpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplRGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgbWVyZ2VNZXRhRGF0YShtZXRhRGF0YTE6IE1ldGFEYXRhLCBtZXRhRGF0YTI/OiBNZXRhRGF0YSkge1xyXG4gICAgaWYoIW1ldGFEYXRhMil7XHJcbiAgICAgIG1ldGFEYXRhMS5ub0V4cG9ydCA9IHRydWU7XHJcbiAgICAgIHJldHVybiBtZXRhRGF0YTFcclxuICAgIH1cclxuICAgIGlmKCFtZXRhRGF0YTEuZGlzcGxheU5hbWUpIG1ldGFEYXRhMS5kaXNwbGF5TmFtZSA9IG1ldGFEYXRhMi5kaXNwbGF5TmFtZTtcclxuICAgIGlmKCFtZXRhRGF0YTEucHJlU29ydCkgbWV0YURhdGExLnByZVNvcnQgPSBtZXRhRGF0YTIucHJlU29ydDtcclxuICAgIGlmKCFtZXRhRGF0YTEub3JkZXIpIG1ldGFEYXRhMS5vcmRlciA9IG1ldGFEYXRhMi5vcmRlcjtcclxuICAgIGlmKCFtZXRhRGF0YTEud2lkdGgpIG1ldGFEYXRhMS53aWR0aCA9IG1ldGFEYXRhMi53aWR0aDtcclxuICAgIGlmKG1ldGFEYXRhMi5maWVsZFR5cGUpIG1ldGFEYXRhMS5maWVsZFR5cGUgPSBtZXRhRGF0YTIuZmllbGRUeXBlO1xyXG4gICAgbWV0YURhdGExLm5vRXhwb3J0ID0gIW1ldGFEYXRhMjtcclxuICAgIHJldHVybiBtZXRhRGF0YTE7XHJcbiAgfVxyXG5cclxuICBleHBvcnRUb0NzdigpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNvcnRlZCA9IHRoaXMuZGF0YS5waXBlKFxyXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0YXRlLnNvcnQkKSxcclxuICAgICAgbWFwKChbZGF0YSwgc29ydGVkXSkgPT4gc29ydERhdGEoZGF0YSwgc29ydGVkKSlcclxuICAgICk7XHJcbiAgICB0aGlzLmV4cG9ydFRvQ3N2U2VydmljZS5leHBvcnRUb0Nzdihzb3J0ZWQpO1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kQWxsR3JvdXBzID0gKCkgPT4ge1xyXG4gICAgY29uc3QgZ3JvdXBIZWFkZXJzID0gZ2V0QWxsR3JvdXBIZWFkZXJOYW1lcyh0aGlzLiRkaXNwbGF5RGF0YSgpKTtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kQWxsT2ZHcm91cCh7IGdyb3VwSGVhZGVyc0J5S2V5OiBncm91cEhlYWRlcnMgfSk7XHJcbiAgfVxyXG5cclxuICBjb2xsYXBzZUFsbEdyb3VwcyA9ICgpID0+IHRoaXMuc3RhdGUuY29sbGFwc2VBbGwoKTtcclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgdGhpcy5zdGF0ZS5ydW5PbmNlV2hlbihcclxuICAgICAgc3RhdGVJcyhJbml0aWFsaXphdGlvblN0YXRlLkxvYWRlZEZyb21TdG9yZSksXHJcbiAgICAgIHN0YXRlID0+IHtcclxuICAgICAgICB0aGlzLmFkZEZpbHRlckRpcmVjdGl2ZXMoc3RhdGUpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUudXBkYXRlU3RhdGUoeyBpbml0aWFsaXphdGlvblN0YXRlOiBJbml0aWFsaXphdGlvblN0YXRlLlJlYWR5IH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBtYXBBcnJheUZpZWxkc01ldGFEYXRhcyA9IChtZXRhIDogTWV0YURhdGE8VD4pID0+IHtcclxuICAgIGlmKG1ldGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQXJyYXkpe1xyXG4gICAgICBjb25zdCBhZGRpdGlvbmFsID0gey4uLm1ldGEuYWRkaXRpb25hbH0gYXMgQXJyYXlBZGRpdGlvbmFsO1xyXG4gICAgICBhZGRpdGlvbmFsLmFycmF5U3R5bGUgPSBhZGRpdGlvbmFsPy5hcnJheVN0eWxlID8/IEFycmF5RGVmYXVsdHMuYXJyYXlTdHlsZTtcclxuICAgICAgYWRkaXRpb25hbC5saW1pdCA9IGFkZGl0aW9uYWwubGltaXQgPz8gdGhpcy5jb25maWcuYXJyYXlJbmZvPy5saW1pdCA/PyBBcnJheURlZmF1bHRzLmxpbWl0O1xyXG4gICAgICByZXR1cm4gey4uLm1ldGEsYWRkaXRpb25hbH1cclxuICAgIH1cclxuICAgIHJldHVybiBtZXRhO1xyXG4gIH1cclxuXHJcbiAgY29sbGFwc2VIZWFkZXIkID0gdGhpcy5zdGF0ZS5zdGF0ZSQucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUucGVyc2lzdGVkVGFibGVTZXR0aW5ncy5jb2xsYXBzZUhlYWRlcikpO1xyXG5cclxuICBhZGRGaWx0ZXJEaXJlY3RpdmVzID0gKHN0YXRlOiBUYWJsZVN0YXRlKSA9PiB7XHJcbiAgICBjb25zdCBjdXN0b21GaWx0ZXJzJCA9ICB0b09ic2VydmFibGUodGhpcy5hbGxGaWx0ZXJEaXJlY3RpdmVzLCB7aW5qZWN0b3I6IHRoaXMuaW5qZWN0b3J9KS5waXBlKFxyXG4gICAgICBtZXJnZU1hcCggY3VzdG9tZXJGaWx0ZXJzID0+IGN1c3RvbWVyRmlsdGVyc1xyXG4gICAgICAgIC5maWx0ZXIoIGZpbHRlciA9PiAhZmlsdGVyLnNhdmFibGUgKVxyXG4gICAgICAgIC5tYXAoZmlsdGVyID0+IGZpbHRlci5maWx0ZXIkIClcclxuICAgICAgKSxcclxuICAgICAgbWVyZ2VBbGwoKSxcclxuICAgICAgc2NhbiggKGEsYik9PiB7XHJcbiAgICAgICAgICBpZihiLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICBhW2IuZmlsdGVySWRdID0gaXNDdXN0b21GaWx0ZXIoYikgPyBiLnByZWRpY2F0ZSA6IGNyZWF0ZUZpbHRlckZ1bmMoYik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgYVtiLmZpbHRlcklkXSA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIHJldHVybiBhO1xyXG4gICAgICB9LCB7fSBhcyBEaWN0aW9uYXJ5PFByZWRpY2F0ZTxhbnk+PiksXHJcbiAgICAgIG1hcCggZiA9PiBPYmplY3QudmFsdWVzKGYpKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlLm9uKGN1c3RvbUZpbHRlcnMkLCAoZikgPT4ge1xyXG4gICAgICB0aGlzLmN1c3RvbUZpbHRlcnMkLm5leHQoZik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gICR1c2VWaXJ0dWFsID0gdGhpcy5zdGF0ZS4kaXNWaXJ0dWFsO1xyXG59XHJcbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cIltiZWZvcmVdXCIgLz5cclxuXHJcbjxuZy1jb250YWluZXIgbXVsdGlTb3J0ICpuZ3J4TGV0PVwic3RhdGUudGFibGVTZXR0aW5ncyQgYXMgdGFibGVTZXR0aW5nc1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItd3JhcHBlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgIEBpZiAoKCEoY29sbGFwc2VIZWFkZXIkIHwgYXN5bmMpKSB8fCB0YWJsZVNldHRpbmdzLnNob3dUaXRsZVdoZW5IZWFkZXJDb2xsYXBzZWQpIHtcclxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIudGItaGVhZGVyLXRpdGxlXCIvPlxyXG4gICAgICB9XHJcbiAgICAgIEBpZigoc3RhdGUuZ3JvdXBCeUtleXMkIHwgYXN5bmMpPy5sZW5ndGgpe1xyXG4gICAgICAgIDxncm91cC1ieS1saXN0IC8+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZseC1yb3ctZW5kXCI+XHJcbiAgICAgIDxsaWItZmlsdGVyLWxpc3QgLz5cclxuICAgICAgQGlmICghdGFibGVTZXR0aW5ncy5oaWRlSGVhZGVyKSB7XHJcbiAgICAgICAgQGlmICghKGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSkge1xyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVcIi8+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj0ncHJpbWFyeScgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1haW5NZW51XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LW1lbnUgI21haW5NZW51PSdtYXRNZW51Jz5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVFeHRyYVwiLz5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBlbHNlIHtcclxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWFpbk1lbnVcIiBjbGFzcz1cImZsYXQtbWVudS1idXR0b24gcG9pbnRlclwiPm1vcmVfaG9yaXo8L21hdC1pY29uPlxyXG4gICAgICAgICAgPG1hdC1tZW51ICNtYWluTWVudT0nbWF0TWVudSc+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51XCIvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVFeHRyYVwiLz5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxtYXQtaWNvbiBbbWF0VG9vbHRpcF09XCIoY29sbGFwc2VIZWFkZXIkIHwgYXN5bmMpID8gJ2V4cGFuZCcgOiAnY29sbGFwc2UnXCIgY2xhc3M9XCJjb2xsYXBzZS1pY29uIGhlYWRlclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwic3RhdGUudG9nZ2xlQ29sbGFwc2VIZWFkZXIoKVwiPlxyXG4gICAgICAgICAge3soY29sbGFwc2VIZWFkZXIkIHwgYXN5bmMpID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZSd9fVxyXG4gICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgIH1cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlclwiPlxyXG4gICAgQGlmKCR1c2VWaXJ0dWFsKCkpXHJcbiAgICB7XHJcbiAgICAgIDx0Yi12aXJ0dWFsLXNjcm9sbC1jb250YWluZXI+XHJcbiAgICAgICAgPHRiLWdlbmVyaWMtdGFibGUgW3Jvd3NdPSdjdXN0b21Sb3dzJyBbZGF0YV09XCIoZGF0YSB8IGFzeW5jKSFcIiBbZGlzcGxheURhdGFdPVwiJGRpc3BsYXlEYXRhKClcIlxyXG4gICAgICAgICAgKHNlbGVjdGlvbiQpPSdzZWxlY3Rpb24kLmVtaXQoJGV2ZW50KScgW2NvbHVtbkluZm9zXT0nJG15Q29sdW1ucygpJyBbdHJhY2tCeV09XCJ0cmFja0J5XCIgLz5cclxuICAgICAgPC90Yi12aXJ0dWFsLXNjcm9sbC1jb250YWluZXI+XHJcbiAgICB9XHJcbiAgICBAZWxzZVxyXG4gICAge1xyXG4gICAgICA8dGItZ2VuZXJpYy10YWJsZSBbcm93c109J2N1c3RvbVJvd3MnIFtkYXRhXT1cIihkYXRhIHwgYXN5bmMpIVwiIFtkaXNwbGF5RGF0YV09XCIkZGlzcGxheURhdGEoKVwiXHJcbiAgICAgICAgKHNlbGVjdGlvbiQpPSdzZWxlY3Rpb24kLmVtaXQoJGV2ZW50KScgW2NvbHVtbkluZm9zXT0nJG15Q29sdW1ucygpJyBbdHJhY2tCeV09XCJ0cmFja0J5XCIgLz5cclxuICAgIH1cclxuXHJcbiAgPC9kaXY+XHJcbiAgQGlmKHRhYmxlU2V0dGluZ3MudXNlUGFnaW5hdG9yKVxyXG4gIHtcclxuICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0b3JcIj5cclxuICAgICAgPHRiLXBhZ2luYXRvciAjdGJQYWdpbmF0b3IgW2RhdGEkXT1cImRhdGFcIiBbdGFibGVFbFJlZl09XCJ0YWJsZUVsUmVmXCIgLz5cclxuXHJcbiAgICAgIDxtYXQtaWNvbiBbbWF0VG9vbHRpcF09XCIoY29sbGFwc2VGb290ZXIkIHwgYXN5bmMpID8gJ2V4cGFuZCcgOiAnY29sbGFwc2UnXCIgY2xhc3M9XCJjb2xsYXBzZS1pY29uIGZvb3RlclwiXHJcbiAgICAgICAgKGNsaWNrKT1cInN0YXRlLnRvZ2dsZUNvbGxhcHNlRm9vdGVyKClcIj5cclxuICAgICAgICB7eyhjb2xsYXBzZUZvb3RlciQgfCBhc3luYykgPyAnZXhwYW5kX21vcmUnIDogJ2V4cGFuZF9sZXNzJ319XHJcbiAgICAgIDwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjaGVhZGVyTWVudT5cclxuICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZUZpbHRlcikgezx0Yi1maWx0ZXItZGlzcGxheWVyLz59XHJcbiAgICBAaWYgKCF0YWJsZVNldHRpbmdzLmhpZGVDb2x1bW5TZXR0aW5ncykgezx0Yi1jb2wtZGlzcGxheWVyLz59XHJcbiAgICBAaWYgKCF0YWJsZVNldHRpbmdzLmhpZGVTb3J0KSB7PHRiLXNvcnQtbWVudS8+fVxyXG4gICAgQGlmICghIXRhYmxlSWQpIHs8dGItcHJvZmlsZXMtbWVudSBbJHRhYmxlSWRdPVwidGFibGVJZFwiIChvblNhdmVTdGF0ZSk9XCJvblNhdmVTdGF0ZS5lbWl0KCRldmVudClcIi8+fVxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjaGVhZGVyTWVudUV4dHJhPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJyZXNldFN0YXRlKClcIj5cclxuICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmF1dG9yZW5ldzwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuPlJlc2V0IHRhYmxlPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICBAaWYgKCF0YWJsZVNldHRpbmdzLmhpZGVFeHBvcnQpIHtcclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJleHBvcnRUb0NzdigpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuPkV4cG9ydCBUYWJsZTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgICBAaWYgKHRhYmxlSWQpIHtcclxuICAgICAgPGJ1dHRvbiBzdG9wLXByb3BhZ2F0aW9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBtLnRyaWdnZXIoKT8udG9nZ2xlTWVudSgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPnBlb3BsZTwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4+UHJvZmlsZXM8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8dGItcHJvZmlsZXMtbWVudSBjbGFzcz1cInByb2ZpbGVzLW1lbnVcIiAjcG0gWyR0YWJsZUlkXT1cInRhYmxlSWRcIiAob25TYXZlU3RhdGUpPVwib25TYXZlU3RhdGUuZW1pdCgkZXZlbnQpXCIvPlxyXG4gICAgfVxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
|
|
323
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBRWYsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxNQUFNLEVBRU4sWUFBWSxFQUNaLFVBQVUsRUFHVixRQUFRLEVBQ1IsZUFBZSxFQUNmLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckYsT0FBTyxFQUFtQixTQUFTLEVBQVksTUFBTSw2QkFBNkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhJLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUs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O2dCQUdPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBR08sUUFBUTtzQkFBcEIsS0FBSztnQkFHTyxZQUFZO3NCQUF4QixLQUFLO2dCQUdPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBR08sbUJBQW1CO3NCQUEvQixLQUFLO2dCQUdPLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFLRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgUHJlZGljYXRlLFxuICBWaWV3Q2hpbGQsXG4gIGluamVjdCxcbiAgVGVtcGxhdGVSZWYsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIEluamVjdG9yLFxuICBjb250ZW50Q2hpbGRyZW4sXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcnJheUFkZGl0aW9uYWwsIEZpZWxkVHlwZSwgTWV0YURhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC1kZWYnO1xuaW1wb3J0IHsgbWFwLCB0YXAsIHdpdGhMYXRlc3RGcm9tLCBtZXJnZUFsbCwgc2Nhbiwgc3dpdGNoQWxsLCBzdGFydFdpdGgsIHRpbWVzdGFtcCwgbWVyZ2VNYXAsIGZpbHRlciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGFibGVCdWlsZGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90YWJsZS1idWlsZGVyJztcbmltcG9ydCB7IE1hdFJvd0RlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IEN1c3RvbUNlbGxEaXJlY3RpdmUsIFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCBUYWJsZUZpbHRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgc3RhdGVJcywgVGFibGVTdG9yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdGFibGUtc3RvcmUnO1xuaW1wb3J0IHsgbm90TnVsbCB9IGZyb20gJy4uLy4uLy4uL3J4anMvcnhqcy1vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRXhwb3J0VG9Dc3ZTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXhwb3J0LXRvLWNzdi5zZXJ2aWNlJztcbmltcG9ydCB7IEFycmF5RGVmYXVsdHMgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0RlZmF1bHRTZXR0aW5ncyc7XG5pbXBvcnQgeyBUYWJsZUJ1aWxkZXJDb25maWdUb2tlbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGFibGVCdWlsZGVyQ29uZmlnJztcbmltcG9ydCB7IEluaXRpYWxpemF0aW9uU3RhdGUsIFRhYmxlU3RhdGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlU3RhdGUnO1xuaW1wb3J0IHsgc29ydERhdGEgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvc29ydC1kYXRhLWZ1bmN0aW9uJztcbmltcG9ydCB7IFdyYXBwZXJGaWx0ZXJTdG9yZSB9IGZyb20gJy4uL3RhYmxlLWNvbnRhaW5lci1maWx0ZXIvdGFibGUtd3JhcHBlci1maWx0ZXItc3RvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGRlZmF1bHRTaGFyZVJlcGxheSB9IGZyb20gJy4uLy4uLy4uL3J4anMnO1xuaW1wb3J0IHsgY3JlYXRlRmlsdGVyRnVuYywgaXNDdXN0b21GaWx0ZXIsIGlzRmlsdGVySW5mbyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZmlsdGVyLWluZm8nO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGljdGlvbmFyeSc7XG5pbXBvcnQgeyBUYWJsZVdyYXBwZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RhYmxlLXdyYXBwZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IGNyZWF0ZUxpbmtDcmVhdG9yRGljdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xpbmstY3JlYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlQnVpbGRlclN0YXRlU3RvcmUgfSBmcm9tICcuLi8uLi9uZ3J4L3RhYmxlQnVpbGRlclN0YXRlU3RvcmUnO1xuaW1wb3J0IHsgY29udGFpbmVySW1wb3J0cyB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLWltcG9ydHMnO1xuaW1wb3J0IHsgdXBkYXRlRmlsdGVySW5mb1N0YXRlLCB1cGRhdGVGaWx0ZXJQcmVkaWNhdGVTdGF0ZSwgdXBkYXRlRmlsdGVyU3RhdGUgfSBmcm9tICcuL3RhYmxlLWNvbnRhaW5lci5oZWxwZXJzL2ZpbHRlci1zdGF0ZS5oZWxwZXJzJztcbmltcG9ydCB7IGluaXRpYWxTb3J0U3RhdGUsIHVwZGF0ZVNvcnRTdGF0ZSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvc29ydC1zdGF0ZS5oZWxwZXJzJztcbmltcG9ydCB7IGdldEFsbEdyb3VwSGVhZGVyTmFtZXMsIGluaXRpYWxHcm91cEJ5U3RhdGUsIHVwZGF0ZUdyb3VwQnlTdGF0ZSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZ3JvdXBCeS5oZWxwZXJzJztcbmltcG9ydCB7IHNvcnRBbmRGaWx0ZXJEYXRhIH0gZnJvbSAnLi90YWJsZS1jb250YWluZXIuaGVscGVycy9kYXRhLXN0YXRlLmhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVQcm9wcywgZGVmYXVsdFByb3BzIH0gZnJvbSAnLi90YWJsZVByb3BzJztcbmltcG9ydCB7IFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL2dlbmVyaWMtdGFibGUvcGFnaW5hdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUJ1aWxkZXJEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9UYWJsZUJ1aWxkZXJEYXRhU291cmNlJztcbmltcG9ydCB7IEdlbmVyaWNUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERhdGFTdG9yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZGF0YS1zdG9yZSc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0Yi10YWJsZS1jb250YWluZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jb250YWluZXIuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUtY29udGFpbmVyLmNzcycsICcuLi8uLi9zdHlsZXMvY29sbGFwc2VyLnN0eWxlcy5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbVGFibGVTdG9yZSwgRXhwb3J0VG9Dc3ZTZXJ2aWNlLCBXcmFwcGVyRmlsdGVyU3RvcmUsIERhdGFTdG9yZV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBjb250YWluZXJJbXBvcnRzXG59KSBleHBvcnQgY2xhc3MgVGFibGVDb250YWluZXJDb21wb25lbnQ8VCA9IGFueT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByb3BzOiBUYWJsZVByb3BzID0geyAuLi5kZWZhdWx0UHJvcHMgfTtcbiAgZGF0YVN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPFRbXT4+KDEpO1xuXG4gIHB1YmxpYyBzdGF0ZSA9IGluamVjdChUYWJsZVN0b3JlKTtcbiAgcHJpdmF0ZSBkYXRhU3RvcmUgPSBpbmplY3QoRGF0YVN0b3JlKTtcbiAgcHVibGljIGNvbmZpZyA9IGluamVjdChUYWJsZUJ1aWxkZXJDb25maWdUb2tlbik7XG4gIHB1YmxpYyBleHBvcnRUb0NzdlNlcnZpY2UgPSBpbmplY3QoRXhwb3J0VG9Dc3ZTZXJ2aWNlPFQ+KTtcbiAgcHVibGljIHdyYXBwZXIgPSBpbmplY3QoVGFibGVXcmFwcGVyRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwdWJsaWMgc3RhdGVTZXJ2aWNlID0gaW5qZWN0KFRhYmxlQnVpbGRlclN0YXRlU3RvcmUpO1xuICBwdWJsaWMgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIGZpbHRlckRpcmVjdGl2ZXMgPSBjb250ZW50Q2hpbGRyZW4oVGFibGVGaWx0ZXJEaXJlY3RpdmUsIHtkZXNjZW5kYW50czogdHJ1ZX0pO1xuICBjdXN0b21GaWx0ZXJEaXJlY3RpdmVzID0gY29udGVudENoaWxkcmVuKFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCB7ZGVzY2VuZGFudHM6IHRydWV9KTtcblxuICBhbGxGaWx0ZXJEaXJlY3RpdmVzID0gY29tcHV0ZWQoICgpID0+ICB7XG4gICAgICBpZih0aGlzLndyYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmZpbHRlckRpcmVjdGl2ZXMoKSwgLi4udGhpcy5jdXN0b21GaWx0ZXJEaXJlY3RpdmVzKCksIC4uLnRoaXMud3JhcHBlci4kcmVnaXN0cmF0aW9ucygpXTtcbiAgICAgIH0ge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZmlsdGVyRGlyZWN0aXZlcygpLCAuLi50aGlzLmN1c3RvbUZpbHRlckRpcmVjdGl2ZXMoKV07XG4gICAgICB9XG4gICAgfVxuICApO1xuXG5cbiAgdGFibGVTdGF0ZSA9IHRvU2lnbmFsKHRoaXMuc3RhdGUuc3RhdGUkLnBpcGUoZmlsdGVyKHN0YXRlSXMoSW5pdGlhbGl6YXRpb25TdGF0ZS5Mb2FkZWRGcm9tU3RvcmUpKSkpIDtcblxuICBhbGxGaWx0ZXJEaXJlY3RpdmVzRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMudGFibGVTdGF0ZSgpO1xuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICBpZihzdGF0ZSkge1xuICAgICAgICB0aGlzLmFsbEZpbHRlckRpcmVjdGl2ZXMoKS5maWx0ZXIoIGYgPT4gIWYudXNlZCkuZm9yRWFjaCggZiA9PiB7XG4gICAgICAgICAgZi51c2VkID0gdHJ1ZTtcbiAgICAgICAgICBpZihmLnNhdmFibGUpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2YuZmlsdGVySWRdO1xuICAgICAgICAgICAgaWYoaXNGaWx0ZXJJbmZvKGZpbHRlcikpIHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRGlyZWN0aXZlOiBUYWJsZUZpbHRlckRpcmVjdGl2ZSA9IGYgYXMgVGFibGVGaWx0ZXJEaXJlY3RpdmU7XG4gICAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5maWVsZFR5cGUgPSBmaWx0ZXIuZmllbGRUeXBlO1xuICAgICAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUuZmlsdGVyVHlwZSA9IGZpbHRlci5maWx0ZXJUeXBlO1xuICAgICAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUuc2V0RmlsdGVyVmFsdWUoZmlsdGVyLmZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLmtleSA9IGZpbHRlci5rZXk7XG4gICAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS51cGRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGlzQ3VzdG9tRmlsdGVyKGZpbHRlcikpIHtcbiAgICAgICAgICAgICAgZi5hY3RpdmUgPSBmaWx0ZXIuYWN0aXZlID8/IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5hZGRGaWx0ZXIoKGYuZmlsdGVyJCBhcyBhbnkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pXG4gIH0pO1xuXG4gIEBWaWV3Q2hpbGQoUGFnaW5hdG9yQ29tcG9uZW50KSAgcGFnaW5hdG9yQ29tcG9uZW50PzogUGFnaW5hdG9yQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKEdlbmVyaWNUYWJsZUNvbXBvbmVudCkgIGdlbmVyaWNUYWJsZT86IEdlbmVyaWNUYWJsZUNvbXBvbmVudDtcbiAgQENvbnRlbnRDaGlsZHJlbihNYXRSb3dEZWYpIGN1c3RvbVJvd3MhOiBRdWVyeUxpc3Q8TWF0Um93RGVmPGFueT4+O1xuICAkY3VzdG9tQ2VsbHMgPSBjb250ZW50Q2hpbGRyZW4oQ3VzdG9tQ2VsbERpcmVjdGl2ZSk7XG4gICRteUNvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuJG1ldGFEYXRhQXJyYXkoKS5tYXAoIG1ldGFEYXRhID0+ICh7bWV0YURhdGEsIGN1c3RvbUNlbGw6IHRoaXMuJGN1c3RvbUNlbGxzKCkuZmluZChjYyA9PiBjYy5jdXN0b21DZWxsID09PSBtZXRhRGF0YS5rZXkpfSkpXG4gIH0pXG4gIEBDb250ZW50Q2hpbGQoJ3RhYmxlJywge3JlYWQ6IEVsZW1lbnRSZWZ9KSB0YWJsZUVsUmVmITogRWxlbWVudFJlZjtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB0YWJsZUJ1aWxkZXIhOiBUYWJsZUJ1aWxkZXI7XG4gIEBJbnB1dCgpIHRhYmxlSWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNldCBpbmRleENvbHVtbih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnByb3BzLmluZGV4Q29sdW1uID0gdmFsO1xuICB9XG4gIEBJbnB1dCgpIHNldCBzZWxlY3Rpb25Db2x1bW4odmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5wcm9wcy5zZWxlY3Rpb25Db2x1bW4gPSB2YWw7XG4gIH1cbiAgQElucHV0KCkgc2V0IGlzU3RpY2t5KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMucHJvcHMuaXNTdGlja3kgPSB2YWw7XG4gIH1cbiAgQElucHV0KCkgc2V0IHN0aWNreUZvb3Rlcih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnByb3BzLnN0aWNreUZvb3RlciA9IHZhbDtcbiAgfVxuICBASW5wdXQoKSBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuc3RhdGUuc2V0UGFnZVNpemUodmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpIHNldCBncm91cEhlYWRlclRlbXBsYXRlKCB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMucHJvcHMuZ3JvdXBIZWFkZXJUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICB9XG4gIEBJbnB1dCgpIHNldCBncm91cEhlYWRlckhlaWdodCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5wcm9wcy5ncm91cEhlYWRlckhlaWdodCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHRyYWNrQnkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlucHV0RmlsdGVycz86IE9ic2VydmFibGU8QXJyYXk8UHJlZGljYXRlPFQ+Pj47XG5cbiAgQE91dHB1dCgpIHNlbGVjdGlvbiQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBkYXRhID0gdGhpcy5kYXRhU3ViamVjdC5waXBlKFxuICAgIHN3aXRjaEFsbCgpLFxuICAgIHN0YXJ0V2l0aChbXSBhcyBUW10pLFxuICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpLFxuICApO1xuICBAT3V0cHV0KCkgb25TdGF0ZVJlc2V0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25TYXZlU3RhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzdGF0ZSQgPSB0aGlzLnN0YXRlLmdldFNhdmFibGVTdGF0ZSgpLnBpcGUoXG4gICAgbWFwKHN0YXRlID0+IGNsb25lRGVlcChzdGF0ZSkpLFxuICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpLFxuICApO1xuXG4gIGNsZWFyU2VsZWN0aW9ucygpe1xuICAgIHRoaXMuZ2VuZXJpY1RhYmxlPy5zZWxlY3Rpb24uY2xlYXIodHJ1ZSk7XG4gIH1cbiAgZGlzcGxheURhdGFTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8T2JzZXJ2YWJsZTxUW10+PigxKTtcbiAgZGlzcGxheURhdGEgPSB0aGlzLmRpc3BsYXlEYXRhU3ViamVjdC5waXBlKFxuICAgIHN3aXRjaEFsbCgpLFxuICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpLFxuICApO1xuICAkZGlzcGxheURhdGEgPSB0b1NpZ25hbCh0aGlzLmRpc3BsYXlEYXRhLCB7IGluaXRpYWxWYWx1ZTogW10gfSk7XG5cblxuXG4gIGNvbGxhcHNlRm9vdGVyJCA9IHRoaXMuc3RhdGUuc3RhdGUkLnBpcGUobWFwKHN0YXRlID0+IHN0YXRlLnBlcnNpc3RlZFRhYmxlU2V0dGluZ3MuY29sbGFwc2VGb290ZXIpKTtcblxuXG5cblxuICBuZ09uRGVzdHJveSgpe1xuICAgIGlmKHRoaXMudGFibGVJZCkge1xuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2F2ZVRhYmxlU3RhdGVUb0xvY2FsKHsgdGFibGVJZDp0aGlzLnRhYmxlSWQsIHRhYmxlU3RhdGU6IHRoaXMuc3RhdGUuZ2V0U2F2YWJsZVN0YXRlU2lnbmFsKCkgfSk7XG4gICAgfVxuICB9XG5cbiAgZmlyc3RQYWdlKCk6IHZvaWQge1xuICAgdGhpcy5wYWdpbmF0b3JDb21wb25lbnQ/LnBhZ2luYXRvcj8uZmlyc3RQYWdlKCk7XG4gIH1cblxuICBsYXN0UGFnZSgpOiB2b2lkIHtcbiAgIHRoaXMucGFnaW5hdG9yQ29tcG9uZW50Py5wYWdpbmF0b3I/Lmxhc3RQYWdlKCk7XG4gIH1cblxuICByZXNldFN0YXRlKCkge1xuICAgIHRoaXMuY3VzdG9tRmlsdGVyRGlyZWN0aXZlcygpLmZvckVhY2goIGNmID0+IGNmLnJlc2V0KCkpO1xuICAgIHRoaXMuZmlsdGVyRGlyZWN0aXZlcygpLmZvckVhY2goIGNmID0+IGNmLnJlc2V0KCkgKTtcbiAgICB0aGlzLnN0YXRlLnJlc2V0U3RhdGUoKTtcbiAgICB0aGlzLm9uU3RhdGVSZXNldC5uZXh0KG51bGwpXG4gIH1cblxuICBpbml0aWFsaXplU3RhdGUoKSB7XG4gICAgdGhpcy5zdGF0ZS5zZXRUYWJsZVNldHRpbmdzKHRoaXMudGFibGVCdWlsZGVyLnNldHRpbmdzKTtcbiAgICB0aGlzLnN0YXRlLnJ1bk9uY2VXaGVuKFxuICAgICAgc3RhdGVJcyhJbml0aWFsaXphdGlvblN0YXRlLk1ldGFEYXRhTG9hZGVkKSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYodGhpcy50YWJsZUlkKSB7XG4gICAgICAgICAgY29uc3QgcGVyc2lzdGVkU3RhdGUkID0gdG9PYnNlcnZhYmxlKHRoaXMuc3RhdGVTZXJ2aWNlLiRzZWxlY3RMb2NhbFRhYmxlU3RhdGVGb3JWaWV3KHRoaXMudGFibGVJZCksIHtpbmplY3RvcjogdGhpcy5pbmplY3Rvcn0pLnBpcGUoXG4gICAgICAgICAgICB0YXAoIHBlcnNpc3RlZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgaWYoIXBlcnNpc3RlZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zZXRJbml0aWFsaXphdGlvblN0YXRlKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBub3ROdWxsKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnN0YXRlLnVwZGF0ZVN0YXRlRnJvbVBlcnNpc3RlZFN0YXRlKHBlcnNpc3RlZFN0YXRlJC5waXBlKG5vdE51bGwoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RhdGUuc2V0SW5pdGlhbGl6YXRpb25TdGF0ZShJbml0aWFsaXphdGlvblN0YXRlLkxvYWRlZEZyb21TdG9yZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBjdXN0b21GaWx0ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJlZGljYXRlPFQ+W10+KFtdKTtcbiAgaW5pdGlhbGl6ZURhdGEoKSB7XG5cbiAgICBjb25zdCBwcmVkaWNhdGVGaWx0ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaW5wdXRGaWx0ZXJzPy5waXBlKHN0YXJ0V2l0aChbXSkpID8/IG9mKFtdIGFzIFByZWRpY2F0ZTxUPltdKSwgdGhpcy5jdXN0b21GaWx0ZXJzJF0pXG4gICAgICAucGlwZShtYXAoKFthLCBiXSkgPT4gWy4uLmEsIC4uLmJdKSk7XG5cbiAgICBjb25zdCBmaWx0ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zdGF0ZS5maWx0ZXJzJC5waXBlKHNjYW4odXBkYXRlRmlsdGVySW5mb1N0YXRlLCB7IGFsbEZpbHRlcnM6IHt9IH0pLCB0aW1lc3RhbXAoKSksXG4gICAgICBwcmVkaWNhdGVGaWx0ZXJzJC5waXBlKHNjYW4odXBkYXRlRmlsdGVyUHJlZGljYXRlU3RhdGUsIHthbGxGaWx0ZXJzOiBbXSBhcyBQcmVkaWNhdGU8VD5bXX0pLCB0aW1lc3RhbXAoKSlcbiAgICBdKVxuICAgIC5waXBlKFxuICAgICAgbWFwKChbZmlsdGVySW5mbywgcHJlZF0pID0+IHVwZGF0ZUZpbHRlclN0YXRlKGZpbHRlckluZm8sIHByZWQpKVxuICAgICk7XG5cbiAgICBjb25zdCBzb3J0c1N0YXRlJCA9IHRoaXMuc3RhdGUuc29ydCQucGlwZShzY2FuKHVwZGF0ZVNvcnRTdGF0ZSwgaW5pdGlhbFNvcnRTdGF0ZSkpO1xuXG4gICAgY29uc3Qgc29ydGVkQW5kRmlsdGVyZWREYXRhJCA9IHNvcnRBbmRGaWx0ZXJEYXRhKHRoaXMudGFibGVCdWlsZGVyLmdldERhdGEkKCksIHNvcnRzU3RhdGUkLCBmaWx0ZXJzJCk7XG5cbiAgICBjb25zdCBmbGF0R3JvdXBlZCQgPSBjb21iaW5lTGF0ZXN0KFtzb3J0ZWRBbmRGaWx0ZXJlZERhdGEkLnBpcGUodGltZXN0YW1wKCkpLCB0aGlzLnN0YXRlLmdyb3VwQnlLZXlzJC5waXBlKHRpbWVzdGFtcCgpKSwgdGhpcy5zdGF0ZS5leHBhbmRlZEdyb3VwcyQucGlwZSh0aW1lc3RhbXAoKSldKS5waXBlKFxuICAgICAgc2Nhbih1cGRhdGVHcm91cEJ5U3RhdGUsIGluaXRpYWxHcm91cEJ5U3RhdGUpLFxuICAgICAgbWFwKCh7ZGlzcGxheURhdGF9KSA9PiBkaXNwbGF5RGF0YSksXG4gICAgICBkZWZhdWx0U2hhcmVSZXBsYXkoKSxcbiAgICApO1xuXG4gICAgdGhpcy5kaXNwbGF5RGF0YVN1YmplY3QubmV4dChmbGF0R3JvdXBlZCQpO1xuICAgIHRoaXMuZGF0YVN1YmplY3QubmV4dChzb3J0ZWRBbmRGaWx0ZXJlZERhdGEkKTtcblxuICAgIHRoaXMuc3RhdGUub24odGhpcy5kaXNwbGF5RGF0YSwgKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZGF0YVN0b3JlLnBhdGNoU3RhdGUoe2RhdGFMZW46IGRhdGEubGVuZ3RofSlcbiAgICB9KTtcbiAgfVxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBjdXN0b21DZWxscyQgPSB0b09ic2VydmFibGUodGhpcy4kY3VzdG9tQ2VsbHMsIHsgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgdGhpcy5zdGF0ZS5zZXRMaW5rTWFwcyh0aGlzLnRhYmxlQnVpbGRlci5tZXRhRGF0YSQhLnBpcGUoXG4gICAgICBtYXAoY3JlYXRlTGlua0NyZWF0b3JEaWN0KVxuICAgICkpO1xuICAgIGNvbnN0IGMgPSBjdXN0b21DZWxscyQucGlwZShzd2l0Y2hNYXAoYyA9PiBjLmxlbmd0aCA/IGNvbWJpbmVMYXRlc3QoYy5tYXAoYyA9PiBjLiRtZXRhRGF0YSkpIDogb2YoW10gYXMgTWV0YURhdGFbXSkpKTtcbiAgICB0aGlzLnN0YXRlLnNldE1ldGFEYXRhKGNvbWJpbmVMYXRlc3QoW3RoaXMudGFibGVCdWlsZGVyLm1ldGFEYXRhJCwgIGNdKS5waXBlKG1hcCgoW21kcywgY3VzdG9tQ2VsbHNdKSA9PiB7XG4gICAgICBtZHMgPSBtZHMubWFwKHRoaXMubWFwQXJyYXlGaWVsZHNNZXRhRGF0YXMpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4ubWRzLFxuICAgICAgICAuLi5jdXN0b21DZWxscy5tYXAoIG1kID0+IHRoaXMubWVyZ2VNZXRhRGF0YShtZCwgbWRzLmZpbmQoIGl0ZW0gPT4gaXRlbS5rZXkgPT09IG1kLmtleSApICkpXG4gICAgICBdXG4gICAgfSkpKVxuICAgIGNvbnN0IGRzID0gbmV3IFRhYmxlQnVpbGRlckRhdGFTb3VyY2U8VD4oXG4gICAgICB0aGlzLmRpc3BsYXlEYXRhLFxuICAgICAgdGhpcy5zdGF0ZSxcbiAgICAgIHRoaXMuZGF0YVN0b3JlXG4gICAgKTtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZVN0YXRlKHtwcm9wczoge1xuICAgICAgZGF0YVNvdXJjZTogZHMsXG4gICAgICAuLi50aGlzLnByb3BzXG4gICAgfX0pXG4gICAgdGhpcy5pbml0aWFsaXplU3RhdGUoKTtcbiAgICB0aGlzLmluaXRpYWxpemVEYXRhKCk7XG4gIH1cblxuICBtZXJnZU1ldGFEYXRhKG1ldGFEYXRhMTogTWV0YURhdGEsIG1ldGFEYXRhMj86IE1ldGFEYXRhKSB7XG4gICAgaWYoIW1ldGFEYXRhMil7XG4gICAgICBtZXRhRGF0YTEubm9FeHBvcnQgPSB0cnVlO1xuICAgICAgcmV0dXJuIG1ldGFEYXRhMVxuICAgIH1cbiAgICBpZighbWV0YURhdGExLmRpc3BsYXlOYW1lKSBtZXRhRGF0YTEuZGlzcGxheU5hbWUgPSBtZXRhRGF0YTIuZGlzcGxheU5hbWU7XG4gICAgaWYoIW1ldGFEYXRhMS5wcmVTb3J0KSBtZXRhRGF0YTEucHJlU29ydCA9IG1ldGFEYXRhMi5wcmVTb3J0O1xuICAgIGlmKCFtZXRhRGF0YTEub3JkZXIpIG1ldGFEYXRhMS5vcmRlciA9IG1ldGFEYXRhMi5vcmRlcjtcbiAgICBpZighbWV0YURhdGExLndpZHRoKSBtZXRhRGF0YTEud2lkdGggPSBtZXRhRGF0YTIud2lkdGg7XG4gICAgaWYobWV0YURhdGEyLmZpZWxkVHlwZSkgbWV0YURhdGExLmZpZWxkVHlwZSA9IG1ldGFEYXRhMi5maWVsZFR5cGU7XG4gICAgbWV0YURhdGExLm5vRXhwb3J0ID0gIW1ldGFEYXRhMjtcbiAgICByZXR1cm4gbWV0YURhdGExO1xuICB9XG5cbiAgZXhwb3J0VG9Dc3YoKTogdm9pZCB7XG4gICAgY29uc3Qgc29ydGVkID0gdGhpcy5kYXRhLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0YXRlLnNvcnQkKSxcbiAgICAgIG1hcCgoW2RhdGEsIHNvcnRlZF0pID0+IHNvcnREYXRhKGRhdGEsIHNvcnRlZCkpXG4gICAgKTtcbiAgICB0aGlzLmV4cG9ydFRvQ3N2U2VydmljZS5leHBvcnRUb0Nzdihzb3J0ZWQpO1xuICB9XG5cbiAgZXhwYW5kQWxsR3JvdXBzID0gKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwSGVhZGVycyA9IGdldEFsbEdyb3VwSGVhZGVyTmFtZXModGhpcy4kZGlzcGxheURhdGEoKSk7XG4gICAgdGhpcy5zdGF0ZS5leHBhbmRBbGxPZkdyb3VwKHsgZ3JvdXBIZWFkZXJzQnlLZXk6IGdyb3VwSGVhZGVycyB9KTtcbiAgfVxuXG4gIGNvbGxhcHNlQWxsR3JvdXBzID0gKCkgPT4gdGhpcy5zdGF0ZS5jb2xsYXBzZUFsbCgpO1xuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnN0YXRlLnJ1bk9uY2VXaGVuKFxuICAgICAgc3RhdGVJcyhJbml0aWFsaXphdGlvblN0YXRlLkxvYWRlZEZyb21TdG9yZSksXG4gICAgICBzdGF0ZSA9PiB7XG4gICAgICAgIHRoaXMuYWRkRmlsdGVyRGlyZWN0aXZlcyhzdGF0ZSk7XG4gICAgICAgIHRoaXMuc3RhdGUudXBkYXRlU3RhdGUoeyBpbml0aWFsaXphdGlvblN0YXRlOiBJbml0aWFsaXphdGlvblN0YXRlLlJlYWR5IH0pO1xuICAgICAgfSk7XG4gIH1cblxuXG4gIG1hcEFycmF5RmllbGRzTWV0YURhdGFzID0gKG1ldGEgOiBNZXRhRGF0YTxUPikgPT4ge1xuICAgIGlmKG1ldGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQXJyYXkpe1xuICAgICAgY29uc3QgYWRkaXRpb25hbCA9IHsuLi5tZXRhLmFkZGl0aW9uYWx9IGFzIEFycmF5QWRkaXRpb25hbDtcbiAgICAgIGFkZGl0aW9uYWwuYXJyYXlTdHlsZSA9IGFkZGl0aW9uYWw/LmFycmF5U3R5bGUgPz8gQXJyYXlEZWZhdWx0cy5hcnJheVN0eWxlO1xuICAgICAgYWRkaXRpb25hbC5saW1pdCA9IGFkZGl0aW9uYWwubGltaXQgPz8gdGhpcy5jb25maWcuYXJyYXlJbmZvPy5saW1pdCA/PyBBcnJheURlZmF1bHRzLmxpbWl0O1xuICAgICAgcmV0dXJuIHsuLi5tZXRhLGFkZGl0aW9uYWx9XG4gICAgfVxuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgY29sbGFwc2VIZWFkZXIkID0gdGhpcy5zdGF0ZS5zdGF0ZSQucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUucGVyc2lzdGVkVGFibGVTZXR0aW5ncy5jb2xsYXBzZUhlYWRlcikpO1xuXG4gIGFkZEZpbHRlckRpcmVjdGl2ZXMgPSAoc3RhdGU6IFRhYmxlU3RhdGUpID0+IHtcbiAgICBjb25zdCBjdXN0b21GaWx0ZXJzJCA9ICB0b09ic2VydmFibGUodGhpcy5hbGxGaWx0ZXJEaXJlY3RpdmVzLCB7aW5qZWN0b3I6IHRoaXMuaW5qZWN0b3J9KS5waXBlKFxuICAgICAgbWVyZ2VNYXAoIGN1c3RvbWVyRmlsdGVycyA9PiBjdXN0b21lckZpbHRlcnNcbiAgICAgICAgLmZpbHRlciggZmlsdGVyID0+ICFmaWx0ZXIuc2F2YWJsZSApXG4gICAgICAgIC5tYXAoZmlsdGVyID0+IGZpbHRlci5maWx0ZXIkIClcbiAgICAgICksXG4gICAgICBtZXJnZUFsbCgpLFxuICAgICAgc2NhbiggKGEsYik9PiB7XG4gICAgICAgICAgaWYoYi5hY3RpdmUpIHtcbiAgICAgICAgICAgIGFbYi5maWx0ZXJJZF0gPSBpc0N1c3RvbUZpbHRlcihiKSA/IGIucHJlZGljYXRlIDogY3JlYXRlRmlsdGVyRnVuYyhiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIGFbYi5maWx0ZXJJZF0gO1xuICAgICAgICAgIH1cbiAgICAgIHJldHVybiBhO1xuICAgICAgfSwge30gYXMgRGljdGlvbmFyeTxQcmVkaWNhdGU8YW55Pj4pLFxuICAgICAgbWFwKCBmID0+IE9iamVjdC52YWx1ZXMoZikpXG4gICAgKTtcblxuICAgIHRoaXMuc3RhdGUub24oY3VzdG9tRmlsdGVycyQsIChmKSA9PiB7XG4gICAgICB0aGlzLmN1c3RvbUZpbHRlcnMkLm5leHQoZik7XG4gICAgfSk7XG4gIH1cblxuICAkdXNlVmlydHVhbCA9IHRoaXMuc3RhdGUuJGlzVmlydHVhbDtcbn1cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cIltiZWZvcmVdXCIgLz5cblxuPG5nLWNvbnRhaW5lciBtdWx0aVNvcnQgKm5ncnhMZXQ9XCJzdGF0ZS50YWJsZVNldHRpbmdzJCBhcyB0YWJsZVNldHRpbmdzXCI+XG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItd3JhcHBlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgQGlmICgoIShjb2xsYXBzZUhlYWRlciQgfCBhc3luYykpIHx8IHRhYmxlU2V0dGluZ3Muc2hvd1RpdGxlV2hlbkhlYWRlckNvbGxhcHNlZCkge1xuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIudGItaGVhZGVyLXRpdGxlXCIvPlxuICAgICAgfVxuICAgICAgQGlmKChzdGF0ZS5ncm91cEJ5S2V5cyQgfCBhc3luYyk/Lmxlbmd0aCl7XG4gICAgICAgIDxncm91cC1ieS1saXN0IC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZseC1yb3ctZW5kXCI+XG4gICAgICA8bGliLWZpbHRlci1saXN0IC8+XG4gICAgICBAaWYgKCF0YWJsZVNldHRpbmdzLmhpZGVIZWFkZXIpIHtcbiAgICAgICAgQGlmICghKGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSkge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51XCIvPlxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPSdwcmltYXJ5JyBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWFpbk1lbnVcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxtYXQtbWVudSAjbWFpbk1lbnU9J21hdE1lbnUnPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVFeHRyYVwiLz5cbiAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIHtcbiAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1haW5NZW51XCIgY2xhc3M9XCJmbGF0LW1lbnUtYnV0dG9uIHBvaW50ZXJcIj5tb3JlX2hvcml6PC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LW1lbnUgI21haW5NZW51PSdtYXRNZW51Jz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyTWVudVwiLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVFeHRyYVwiLz5cbiAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICB9XG4gICAgICAgIDxtYXQtaWNvbiBbbWF0VG9vbHRpcF09XCIoY29sbGFwc2VIZWFkZXIkIHwgYXN5bmMpID8gJ2V4cGFuZCcgOiAnY29sbGFwc2UnXCIgY2xhc3M9XCJjb2xsYXBzZS1pY29uIGhlYWRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cInN0YXRlLnRvZ2dsZUNvbGxhcHNlSGVhZGVyKClcIj5cbiAgICAgICAgICB7eyhjb2xsYXBzZUhlYWRlciQgfCBhc3luYykgPyAnZXhwYW5kX2xlc3MnIDogJ2V4cGFuZF9tb3JlJ319XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICB9XG5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyXCI+XG4gICAgQGlmKCR1c2VWaXJ0dWFsKCkpXG4gICAge1xuICAgICAgPHRiLXZpcnR1YWwtc2Nyb2xsLWNvbnRhaW5lcj5cbiAgICAgICAgPHRiLWdlbmVyaWMtdGFibGUgW3Jvd3NdPSdjdXN0b21Sb3dzJyBbZGF0YV09XCIoZGF0YSB8IGFzeW5jKSFcIiBbZGlzcGxheURhdGFdPVwiJGRpc3BsYXlEYXRhKClcIlxuICAgICAgICAgIChzZWxlY3Rpb24kKT0nc2VsZWN0aW9uJC5lbWl0KCRldmVudCknIFtjb2x1bW5JbmZvc109JyRteUNvbHVtbnMoKScgW3RyYWNrQnldPVwidHJhY2tCeVwiIC8+XG4gICAgICA8L3RiLXZpcnR1YWwtc2Nyb2xsLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGVsc2VcbiAgICB7XG4gICAgICA8dGItZ2VuZXJpYy10YWJsZSBbcm93c109J2N1c3RvbVJvd3MnIFtkYXRhXT1cIihkYXRhIHwgYXN5bmMpIVwiIFtkaXNwbGF5RGF0YV09XCIkZGlzcGxheURhdGEoKVwiXG4gICAgICAgIChzZWxlY3Rpb24kKT0nc2VsZWN0aW9uJC5lbWl0KCRldmVudCknIFtjb2x1bW5JbmZvc109JyRteUNvbHVtbnMoKScgW3RyYWNrQnldPVwidHJhY2tCeVwiIC8+XG4gICAgfVxuXG4gIDwvZGl2PlxuICBAaWYodGFibGVTZXR0aW5ncy51c2VQYWdpbmF0b3IpXG4gIHtcbiAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdG9yXCI+XG4gICAgICA8dGItcGFnaW5hdG9yICN0YlBhZ2luYXRvciBbZGF0YSRdPVwiZGF0YVwiIFt0YWJsZUVsUmVmXT1cInRhYmxlRWxSZWZcIiAvPlxuXG4gICAgICA8bWF0LWljb24gW21hdFRvb2x0aXBdPVwiKGNvbGxhcHNlRm9vdGVyJCB8IGFzeW5jKSA/ICdleHBhbmQnIDogJ2NvbGxhcHNlJ1wiIGNsYXNzPVwiY29sbGFwc2UtaWNvbiBmb290ZXJcIlxuICAgICAgICAoY2xpY2spPVwic3RhdGUudG9nZ2xlQ29sbGFwc2VGb290ZXIoKVwiPlxuICAgICAgICB7eyhjb2xsYXBzZUZvb3RlciQgfCBhc3luYykgPyAnZXhwYW5kX21vcmUnIDogJ2V4cGFuZF9sZXNzJ319XG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICB9XG5cbiAgPG5nLXRlbXBsYXRlICNoZWFkZXJNZW51PlxuICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZUZpbHRlcikgezx0Yi1maWx0ZXItZGlzcGxheWVyLz59XG4gICAgQGlmICghdGFibGVTZXR0aW5ncy5oaWRlQ29sdW1uU2V0dGluZ3MpIHs8dGItY29sLWRpc3BsYXllci8+fVxuICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZVNvcnQpIHs8dGItc29ydC1tZW51Lz59XG4gICAgQGlmICghIXRhYmxlSWQpIHs8dGItcHJvZmlsZXMtbWVudSBbJHRhYmxlSWRdPVwidGFibGVJZFwiIChvblNhdmVTdGF0ZSk9XCJvblNhdmVTdGF0ZS5lbWl0KCRldmVudClcIi8+fVxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjaGVhZGVyTWVudUV4dHJhPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVzZXRTdGF0ZSgpXCI+XG4gICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+YXV0b3JlbmV3PC9tYXQtaWNvbj5cbiAgICAgIDxzcGFuPlJlc2V0IHRhYmxlPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZUV4cG9ydCkge1xuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJleHBvcnRUb0NzdigpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5maWxlX2Rvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+RXhwb3J0IFRhYmxlPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAodGFibGVJZCkge1xuICAgICAgPGJ1dHRvbiBzdG9wLXByb3BhZ2F0aW9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBtLnRyaWdnZXIoKT8udG9nZ2xlTWVudSgpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5wZW9wbGU8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj5Qcm9maWxlczwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHRiLXByb2ZpbGVzLW1lbnUgY2xhc3M9XCJwcm9maWxlcy1tZW51XCIgI3BtIFskdGFibGVJZF09XCJ0YWJsZUlkXCIgKG9uU2F2ZVN0YXRlKT1cIm9uU2F2ZVN0YXRlLmVtaXQoJGV2ZW50KVwiLz5cbiAgICB9XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
@@ -3,5 +3,6 @@ export const defaultProps = {
|
|
|
3
3
|
selectionColumn: false,
|
|
4
4
|
isSticky: true,
|
|
5
5
|
stickyFooter: false,
|
|
6
|
+
groupHeaderHeight: undefined,
|
|
6
7
|
};
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGVQcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2NvbXBvbmVudHMvdGFibGUtY29udGFpbmVyL3RhYmxlUHJvcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFlO0lBQ3RDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLGVBQWUsRUFBRSxLQUFLO0lBQ3RCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsWUFBWSxFQUFFLEtBQUs7SUFDbkIsaUJBQWlCLEVBQUUsU0FBUztDQUM3QixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYmxlQnVpbGRlckRhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlQnVpbGRlckRhdGFTb3VyY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlUHJvcHMge1xuICBpbmRleENvbHVtbjogYm9vbGVhbjtcbiAgc2VsZWN0aW9uQ29sdW1uOiBib29sZWFuO1xuICBpc1N0aWNreTogYm9vbGVhbjtcbiAgc3RpY2t5Rm9vdGVyOmJvb2xlYW47XG4gIGdyb3VwSGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBkYXRhU291cmNlPzogVGFibGVCdWlsZGVyRGF0YVNvdXJjZTxhbnk+O1xuICBncm91cEhlYWRlckhlaWdodD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRQcm9wczogVGFibGVQcm9wcyA9IHtcbiAgaW5kZXhDb2x1bW46IGZhbHNlLFxuICBzZWxlY3Rpb25Db2x1bW46IGZhbHNlLFxuICBpc1N0aWNreTogdHJ1ZSxcbiAgc3RpY2t5Rm9vdGVyOiBmYWxzZSxcbiAgZ3JvdXBIZWFkZXJIZWlnaHQ6IHVuZGVmaW5lZCxcbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, effect, forwardRef, untracked, viewChild, inject } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, effect, forwardRef, untracked, viewChild, inject, contentChild } from '@angular/core';
|
|
2
2
|
import { CdkVirtualScrollViewport, ScrollingModule, VIRTUAL_SCROLL_STRATEGY, } from '@angular/cdk/scrolling';
|
|
3
3
|
import { combineLatest, distinctUntilChanged, map } from 'rxjs';
|
|
4
4
|
import { defaultShareReplay, subscriber } from '../../../rxjs';
|
|
@@ -6,11 +6,15 @@ import { TableStore } from '../../classes/table-store';
|
|
|
6
6
|
import { TableVirtualScrollStrategy } from '../scroll-strategy';
|
|
7
7
|
import { VirtualScrollOptions } from '../../classes/table-builder-general-settings';
|
|
8
8
|
import { DataStore } from '../../classes/data-store';
|
|
9
|
+
import { GenericTableComponent } from '../generic-table/generic-table.component';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
import * as i1 from "@angular/cdk/scrolling";
|
|
11
12
|
export class VirtualScrollContainer {
|
|
12
13
|
state = inject(TableStore);
|
|
13
14
|
dataStore = inject(DataStore);
|
|
15
|
+
genericTable = contentChild(GenericTableComponent);
|
|
16
|
+
sub;
|
|
17
|
+
footerStyle = 'regular-footer';
|
|
14
18
|
viewport = viewChild(CdkVirtualScrollViewport);
|
|
15
19
|
defaultOptions = new VirtualScrollOptions();
|
|
16
20
|
scrollStrategy = new TableVirtualScrollStrategy(this.computedRowHeight(), this.computedHeaderHeight());
|
|
@@ -55,8 +59,15 @@ export class VirtualScrollContainer {
|
|
|
55
59
|
;
|
|
56
60
|
});
|
|
57
61
|
});
|
|
62
|
+
ngAfterViewInit() {
|
|
63
|
+
const footerRowStyle$ = this.genericTable()?.$footerRowStyle();
|
|
64
|
+
if (footerRowStyle$) {
|
|
65
|
+
this.footerStyle = footerRowStyle$;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
58
68
|
ngOnDestroy() {
|
|
59
69
|
removeEventListener('resize', this.resizeHandler);
|
|
70
|
+
this.sub?.unsubscribe();
|
|
60
71
|
}
|
|
61
72
|
setSize(el) {
|
|
62
73
|
const vsViewport = el.nativeElement;
|
|
@@ -64,7 +75,20 @@ export class VirtualScrollContainer {
|
|
|
64
75
|
const rowHeight = this.computedRowHeight();
|
|
65
76
|
let amountOfVisibleItems = virtualScrollOptions?.amountOfVisibleItems || this.defaultOptions.amountOfVisibleItems;
|
|
66
77
|
virtualScrollOptions?.amountOfVisibleItems || this.defaultOptions.amountOfVisibleItems;
|
|
67
|
-
let height =
|
|
78
|
+
let height = 0;
|
|
79
|
+
var sub = this.dataLength$.subscribe(dataLength => {
|
|
80
|
+
if (dataLength < amountOfVisibleItems) {
|
|
81
|
+
height = +(this.computedRowHeight() * dataLength);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
height = (rowHeight * amountOfVisibleItems);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
if (this.footerStyle !== 'no-footer') {
|
|
88
|
+
height += rowHeight;
|
|
89
|
+
console.log(height);
|
|
90
|
+
console.log('regular-footer');
|
|
91
|
+
}
|
|
68
92
|
if (!this.state.tableSettings().hideHeader) {
|
|
69
93
|
const headerHeight = this.computedHeaderHeight();
|
|
70
94
|
height += headerHeight;
|
|
@@ -92,10 +116,10 @@ export class VirtualScrollContainer {
|
|
|
92
116
|
return headerHeight;
|
|
93
117
|
}
|
|
94
118
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: VirtualScrollContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
95
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.2", type: VirtualScrollContainer, isStandalone: true, selector: "tb-virtual-scroll-container", viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
96
|
-
<cdk-virtual-scroll-viewport>
|
|
97
|
-
<ng-content/>
|
|
98
|
-
</cdk-virtual-scroll-viewport>
|
|
119
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.2", type: VirtualScrollContainer, isStandalone: true, selector: "tb-virtual-scroll-container", queries: [{ propertyName: "genericTable", first: true, predicate: GenericTableComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
120
|
+
<cdk-virtual-scroll-viewport>
|
|
121
|
+
<ng-content/>
|
|
122
|
+
</cdk-virtual-scroll-viewport>
|
|
99
123
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], viewProviders: [
|
|
100
124
|
{
|
|
101
125
|
provide: VIRTUAL_SCROLL_STRATEGY,
|
|
@@ -108,10 +132,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
108
132
|
type: Component,
|
|
109
133
|
args: [{
|
|
110
134
|
selector: 'tb-virtual-scroll-container',
|
|
111
|
-
template: `
|
|
112
|
-
<cdk-virtual-scroll-viewport>
|
|
113
|
-
<ng-content/>
|
|
114
|
-
</cdk-virtual-scroll-viewport>
|
|
135
|
+
template: `
|
|
136
|
+
<cdk-virtual-scroll-viewport>
|
|
137
|
+
<ng-content/>
|
|
138
|
+
</cdk-virtual-scroll-viewport>
|
|
115
139
|
`,
|
|
116
140
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
117
141
|
standalone: true,
|
|
@@ -125,4 +149,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
125
149
|
],
|
|
126
150
|
}]
|
|
127
151
|
}] });
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1zY3JvbGwtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdmlydHVhbC1zY3JvbGwtY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQXlCLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUksT0FBTyxFQUNMLHdCQUF3QixFQUN4QixlQUFlLEVBQ2YsdUJBQXVCLEdBQ3hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFvQnJELE1BQU0sT0FBTyxzQkFBc0I7SUFDekIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQixTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXRDLFFBQVEsR0FBRyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUUvQyxjQUFjLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO0lBQzVDLGNBQWMsR0FBRyxJQUFJLDBCQUEw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Q0FBQyxPQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsWUFBWSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLFlBQXNCLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQztRQUNsTixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO3VHQWhIVSxzQkFBc0I7MkZBQXRCLHNCQUFzQixpSUFJWix3QkFBd0IsZ0VBcEJuQzs7OztLQUlQLDJEQUdPLGVBQWUsZ01BQ1Y7WUFDYjtnQkFDRSxPQUFPLEVBQUUsdUJBQXVCO2dCQUNoQyxVQUFVLEVBQUUsQ0FBQyxDQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYztnQkFDM0QsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDLENBQUM7YUFDakQ7U0FDRjs7MkZBRVUsc0JBQXNCO2tCQWxCbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNkJBQTZCO29CQUN2QyxRQUFRLEVBQUU7Ozs7S0FJUDtvQkFDSCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztvQkFDMUIsYUFBYSxFQUFFO3dCQUNiOzRCQUNFLE9BQU8sRUFBRSx1QkFBdUI7NEJBQ2hDLFVBQVUsRUFBRSxDQUFDLENBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjOzRCQUMzRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLHVCQUF1QixDQUFDLENBQUM7eUJBQ2pEO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBlZmZlY3QsIGZvcndhcmRSZWYsIHVudHJhY2tlZCwgdmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXHJcbiAgU2Nyb2xsaW5nTW9kdWxlLFxyXG4gIFZJUlRVQUxfU0NST0xMX1NUUkFURUdZLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlZmF1bHRTaGFyZVJlcGxheSwgc3Vic2NyaWJlciB9IGZyb20gJy4uLy4uLy4uL3J4anMnO1xyXG5pbXBvcnQgeyBUYWJsZVN0b3JlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90YWJsZS1zdG9yZSc7XHJcbmltcG9ydCB7IFRhYmxlVmlydHVhbFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnLi4vc2Nyb2xsLXN0cmF0ZWd5JztcclxuaW1wb3J0IHsgVmlydHVhbFNjcm9sbE9wdGlvbnMgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLWJ1aWxkZXItZ2VuZXJhbC1zZXR0aW5ncyc7XHJcbmltcG9ydCB7IERhdGFTdG9yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZGF0YS1zdG9yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RiLXZpcnR1YWwtc2Nyb2xsLWNvbnRhaW5lcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XHJcbiAgICAgIDxuZy1jb250ZW50Lz5cclxuICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxyXG4gICAgYCxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtTY3JvbGxpbmdNb2R1bGVdLFxyXG4gIHZpZXdQcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogVklSVFVBTF9TQ1JPTExfU1RSQVRFR1ksXHJcbiAgICAgIHVzZUZhY3Rvcnk6IChjOiBWaXJ0dWFsU2Nyb2xsQ29udGFpbmVyKSA9PiBjLnNjcm9sbFN0cmF0ZWd5LFxyXG4gICAgICBkZXBzOiBbZm9yd2FyZFJlZigoKSA9PiBWaXJ0dWFsU2Nyb2xsQ29udGFpbmVyKV0sXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWaXJ0dWFsU2Nyb2xsQ29udGFpbmVyIGltcGxlbWVudHMgIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBzdGF0ZSA9IGluamVjdChUYWJsZVN0b3JlKTtcclxuICBwcml2YXRlIGRhdGFTdG9yZSA9IGluamVjdChEYXRhU3RvcmUpOyBcclxuXHJcbiAgdmlld3BvcnQgPSB2aWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KTtcclxuXHJcbiAgZGVmYXVsdE9wdGlvbnMgPSBuZXcgVmlydHVhbFNjcm9sbE9wdGlvbnMoKTtcclxuICBzY3JvbGxTdHJhdGVneSA9IG5ldyBUYWJsZVZpcnR1YWxTY3JvbGxTdHJhdGVneShcclxuICAgIHRoaXMuY29tcHV0ZWRSb3dIZWlnaHQoKSxcclxuICAgIHRoaXMuY29tcHV0ZWRIZWFkZXJIZWlnaHQoKVxyXG4gICAgKTtcclxuXHJcblxyXG4gIGRhdGFMZW5ndGgkID0gY29tYmluZUxhdGVzdChbdGhpcy5zdGF0ZS5zdGF0ZSQsIHRoaXMuZGF0YVN0b3JlLnN0YXRlJF0pLnBpcGUoXHJcbiAgICBtYXAoKFtzLCBkXSkgPT4gKHtcclxuICAgICAgcGFnaW5hdGVkOiBzLm5vdFBlcnNpc3RlZFRhYmxlU2V0dGluZ3MudXNlUGFnaW5hdG9yICYmICFzLnNob3dBbGwsXHJcbiAgICAgIHBhZ2VTaXplOiBzLnVzZXJEZWZpbmVkPy5wYWdlU2l6ZSB8fCBzLnBhZ2VTaXplLFxyXG4gICAgICBwYWdlTnVtYmVyOiBzLmN1cnJlbnRQYWdlLFxyXG4gICAgICBkYXRhTGVuOiBkLmRhdGFMZW5cclxuICAgIH0pKSxcclxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PlxyXG4gICAgICBhLmRhdGFMZW4gPT09IGIuZGF0YUxlbiAmJlxyXG4gICAgICBhLnBhZ2VTaXplID09PSBiLnBhZ2VTaXplICYmXHJcbiAgICAgIGEucGFnZU51bWJlciA9PT0gYi5wYWdlTnVtYmVyICYmXHJcbiAgICAgIGEucGFnaW5hdGVkID09PSBiLnBhZ2luYXRlZCksXHJcbiAgICBtYXAoKHtkYXRhTGVuLCBwYWdlTnVtYmVyLCBwYWdlU2l6ZSwgcGFnaW5hdGVkfSkgPT4ge1xyXG4gICAgICBpZihwYWdpbmF0ZWQpIHJldHVybiBNYXRoLm1pbihkYXRhTGVuIC0gKHBhZ2VOdW1iZXIgKiBwYWdlU2l6ZSksIHBhZ2VTaXplKTtcclxuICAgICAgcmV0dXJuIGRhdGFMZW47XHJcbiAgICB9KSxcclxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcclxuICApO1xyXG5cclxuXHJcbiAgc3Vic2NyaWJlciA9IHN1YnNjcmliZXIodGhpcy5kYXRhTGVuZ3RoJCwgKGRhdGFMZW5ndGgpID0+IHtcclxuICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kuc2V0RGF0YUxlbmd0aChkYXRhTGVuZ3RoKTtcclxuXHJcbiAgICBpZih0aGlzLnZpZXdwb3J0KCkpe1xyXG4gICAgICB0aGlzLnNldFNpemUodGhpcy52aWV3cG9ydCgpIS5lbGVtZW50UmVmKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIF8gPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0KCk7XHJcbiAgICB1bnRyYWNrZWQoKCkgPT4ge1xyXG4gICAgICBpZighIXZpZXdwb3J0KXtcclxuICAgICAgICBhZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2l6ZUhhbmRsZXIpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlci5vbih2aWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtLCAocmFuZ2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGF0YVN0b3JlLnBhdGNoU3RhdGUoe1xyXG4gICAgICAgICAgICB2aXJ0dWFsRW5kczoge1xyXG4gICAgICAgICAgICAgIHN0YXJ0OiByYW5nZS5zdGFydCxcclxuICAgICAgICAgICAgICBlbmQ6IHJhbmdlLmVuZCArIDI1LFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgb2Zmc2V0JCA9IHZpZXdwb3J0LnNjcm9sbGVkSW5kZXhDaGFuZ2UucGlwZShcclxuICAgICAgICAgIG1hcCgoKSA9PiB2aWV3cG9ydC5nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCkgPz8gMCksXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgZGVmYXVsdFNoYXJlUmVwbGF5KClcclxuICAgICAgICApO1xyXG4gICAgXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVyLm9uKG9mZnNldCQsIChvZmZzZXQpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGF0YVN0b3JlLnBhdGNoU3RhdGUoeyB2aXJ0dWFsU2Nyb2xsT2Zmc2V0OiBvZmZzZXQgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZXRTaXplKHRoaXMudmlld3BvcnQoKSEuZWxlbWVudFJlZik7XHJcbiAgICAgIH07XHJcbiAgICB9KVxyXG5cclxuICB9KVxyXG5cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICByZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2l6ZUhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcclxuICAgIGNvbnN0IHZzVmlld3BvcnQgPSBlbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgdmlydHVhbFNjcm9sbE9wdGlvbnMgPSB0aGlzLnN0YXRlLnRhYmxlU2V0dGluZ3MoKS51c2VWaXJ0dWFsU2Nyb2xsISBhcyBWaXJ0dWFsU2Nyb2xsT3B0aW9ucztcclxuICAgIGNvbnN0IHJvd0hlaWdodCA9IHRoaXMuY29tcHV0ZWRSb3dIZWlnaHQoKTtcclxuICAgIGxldCBhbW91bnRPZlZpc2libGVJdGVtcyA9IHZpcnR1YWxTY3JvbGxPcHRpb25zPy5hbW91bnRPZlZpc2libGVJdGVtcyB8fCB0aGlzLmRlZmF1bHRPcHRpb25zLmFtb3VudE9mVmlzaWJsZUl0ZW1zO1xyXG4gICAgICB2aXJ0dWFsU2Nyb2xsT3B0aW9ucz8uYW1vdW50T2ZWaXNpYmxlSXRlbXMgfHwgdGhpcy5kZWZhdWx0T3B0aW9ucy5hbW91bnRPZlZpc2libGVJdGVtcztcclxuICAgIGxldCBoZWlnaHQgPSAocm93SGVpZ2h0ICogYW1vdW50T2ZWaXNpYmxlSXRlbXMpO1xyXG4gICAgaWYoIXRoaXMuc3RhdGUudGFibGVTZXR0aW5ncygpLmhpZGVIZWFkZXIpe1xyXG4gICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSB0aGlzLmNvbXB1dGVkSGVhZGVySGVpZ2h0KCk7XHJcbiAgICAgIGhlaWdodCArPSBoZWFkZXJIZWlnaHQ7XHJcbiAgICB9XHJcbiAgICBpZih2aXJ0dWFsU2Nyb2xsT3B0aW9ucz8ubWF4Vmlld1BvcnRIZWlnaHQgJiYgdmlydHVhbFNjcm9sbE9wdGlvbnMubWF4Vmlld1BvcnRIZWlnaHQgPCBoZWlnaHQpIGhlaWdodCA9IHZpcnR1YWxTY3JvbGxPcHRpb25zLm1heFZpZXdQb3J0SGVpZ2h0O1xyXG4gICAgdnNWaWV3cG9ydC5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgICdzdHlsZScsXHJcbiAgICAgIGBoZWlnaHQ6ICR7aGVpZ2h0fXB4ICFpbXBvcnRhbnQ7YCxcclxuICAgICk7XHJcbiAgICB0aGlzLnZpZXdwb3J0KCk/LmNoZWNrVmlld3BvcnRTaXplKCk7XHJcbiAgICBjb25zdCB2aXJ0dWFsU2Nyb2xsT2Zmc2V0ID0gdGhpcy52aWV3cG9ydCgpPy5nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCkgPz8gMFxyXG4gICAgdGhpcy5kYXRhU3RvcmUucGF0Y2hTdGF0ZSh7IHZpcnR1YWxTY3JvbGxPZmZzZXQgfSk7XHJcbiAgfVxyXG5cclxuICByZXNpemVIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMudmlld3BvcnQoKSkge1xyXG4gICAgICB0aGlzLnNldFNpemUodGhpcy52aWV3cG9ydCgpIS5lbGVtZW50UmVmKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb21wdXRlZFJvd0hlaWdodCgpe1xyXG4gICAgY29uc3QgdmlydHVhbFNjcm9sbE9wdGlvbnMgPSB0aGlzLnN0YXRlLnRhYmxlU2V0dGluZ3MoKS51c2VWaXJ0dWFsU2Nyb2xsISBhcyBWaXJ0dWFsU2Nyb2xsT3B0aW9ucztcclxuICAgIGNvbnN0IHJvd0hlaWdodCA9IHZpcnR1YWxTY3JvbGxPcHRpb25zPy5yb3dIZWlnaHR8fCAodHlwZW9mIHRoaXMuc3RhdGUudGFibGVTZXR0aW5ncygpLnJvd0hlaWdodCA9PT0gJ251bWJlcicgJiYgdGhpcy5zdGF0ZS50YWJsZVNldHRpbmdzKCkucm93SGVpZ2h0IGFzIG51bWJlcikgfHwgdGhpcy5kZWZhdWx0T3B0aW9ucy5yb3dIZWlnaHQ7XHJcbiAgICByZXR1cm4gcm93SGVpZ2h0O1xyXG4gIH1cclxuXHJcbiAgY29tcHV0ZWRIZWFkZXJIZWlnaHQoKXtcclxuICAgIGNvbnN0IHZpcnR1YWxTY3JvbGxPcHRpb25zID0gdGhpcy5zdGF0ZS50YWJsZVNldHRpbmdzKCkudXNlVmlydHVhbFNjcm9sbCEgYXMgVmlydHVhbFNjcm9sbE9wdGlvbnM7XHJcbiAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSB2aXJ0dWFsU2Nyb2xsT3B0aW9ucz8uaGVhZGVySGVpZ2h0fHwgKHR5cGVvZiAgdGhpcy5zdGF0ZS50YWJsZVNldHRpbmdzKCkuaGVhZGVySGVpZ2h0ID09PSAnbnVtYmVyJyAmJiB0aGlzLnN0YXRlLnRhYmxlU2V0dGluZ3MoKS5oZWFkZXJIZWlnaHQgYXMgbnVtYmVyKSB8fCB0aGlzLmRlZmF1bHRPcHRpb25zLmhlYWRlckhlaWdodDtcclxuICAgIHJldHVybiBoZWFkZXJIZWlnaHQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1zY3JvbGwtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdmlydHVhbC1zY3JvbGwtY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQXlCLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQWlCLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SyxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZix1QkFBdUIsR0FDeEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7QUFvQmpGLE1BQU0sT0FBTyxzQkFBc0I7SUFHekIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQixTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLFlBQVksR0FBRyxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMzRCxH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O1FBQ2xOLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7dUdBMUlVLHNCQUFzQjsyRkFBdEIsc0JBQXNCLGlJQUtHLHFCQUFxQiwwR0FJcEMsd0JBQXdCLGdFQXpCbkM7Ozs7S0FJUCwyREFHTyxlQUFlLGdNQUNWO1lBQ2I7Z0JBQ0UsT0FBTyxFQUFFLHVCQUF1QjtnQkFDaEMsVUFBVSxFQUFFLENBQUMsQ0FBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWM7Z0JBQzNELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2FBQ2pEO1NBQ0Y7OzJGQUVVLHNCQUFzQjtrQkFsQmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsUUFBUSxFQUFFOzs7O0tBSVA7b0JBQ0gsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7b0JBQzFCLGFBQWEsRUFBRTt3QkFDYjs0QkFDRSxPQUFPLEVBQUUsdUJBQXVCOzRCQUNoQyxVQUFVLEVBQUUsQ0FBQyxDQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYzs0QkFDM0QsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO3lCQUNqRDtxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgZWZmZWN0LCBmb3J3YXJkUmVmLCB1bnRyYWNrZWQsIHZpZXdDaGlsZCwgaW5qZWN0LCBBZnRlclZpZXdJbml0LCBjb250ZW50Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCxcbiAgU2Nyb2xsaW5nTW9kdWxlLFxuICBWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlZmF1bHRTaGFyZVJlcGxheSwgc3Vic2NyaWJlciB9IGZyb20gJy4uLy4uLy4uL3J4anMnO1xuaW1wb3J0IHsgVGFibGVTdG9yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdGFibGUtc3RvcmUnO1xuaW1wb3J0IHsgVGFibGVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICcuLi9zY3JvbGwtc3RyYXRlZ3knO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbE9wdGlvbnMgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLWJ1aWxkZXItZ2VuZXJhbC1zZXR0aW5ncyc7XG5pbXBvcnQgeyBEYXRhU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2RhdGEtc3RvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBHZW5lcmljVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9nZW5lcmljLXRhYmxlL2dlbmVyaWMtdGFibGUuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGItdmlydHVhbC1zY3JvbGwtY29udGFpbmVyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgICAgPG5nLWNvbnRlbnQvPlxuICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbU2Nyb2xsaW5nTW9kdWxlXSxcbiAgdmlld1Byb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFZJUlRVQUxfU0NST0xMX1NUUkFURUdZLFxuICAgICAgdXNlRmFjdG9yeTogKGM6IFZpcnR1YWxTY3JvbGxDb250YWluZXIpID0+IGMuc2Nyb2xsU3RyYXRlZ3ksXG4gICAgICBkZXBzOiBbZm9yd2FyZFJlZigoKSA9PiBWaXJ0dWFsU2Nyb2xsQ29udGFpbmVyKV0sXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVmlydHVhbFNjcm9sbENvbnRhaW5lciBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG5cblxuICBwcml2YXRlIHN0YXRlID0gaW5qZWN0KFRhYmxlU3RvcmUpO1xuICBwcml2YXRlIGRhdGFTdG9yZSA9IGluamVjdChEYXRhU3RvcmUpO1xuICBwcml2YXRlIGdlbmVyaWNUYWJsZSA9IGNvbnRlbnRDaGlsZChHZW5lcmljVGFibGVDb21wb25lbnQpO1xuICBzdWI6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgZm9vdGVyU3R5bGUgPSAncmVndWxhci1mb290ZXInO1xuXG4gIHZpZXdwb3J0ID0gdmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCk7XG5cbiAgZGVmYXVsdE9wdGlvbnMgPSBuZXcgVmlydHVhbFNjcm9sbE9wdGlvbnMoKTtcbiAgc2Nyb2xsU3RyYXRlZ3kgPSBuZXcgVGFibGVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3koXG4gICAgdGhpcy5jb21wdXRlZFJvd0hlaWdodCgpLFxuICAgIHRoaXMuY29tcHV0ZWRIZWFkZXJIZWlnaHQoKVxuICApO1xuXG5cbiAgZGF0YUxlbmd0aCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnN0YXRlLnN0YXRlJCwgdGhpcy5kYXRhU3RvcmUuc3RhdGUkXSkucGlwZShcbiAgICBtYXAoKFtzLCBkXSkgPT4gKHtcbiAgICAgIHBhZ2luYXRlZDogcy5ub3RQZXJzaXN0ZWRUYWJsZVNldHRpbmdzLnVzZVBhZ2luYXRvciAmJiAhcy5zaG93QWxsLFxuICAgICAgcGFnZVNpemU6IHMudXNlckRlZmluZWQ/LnBhZ2VTaXplIHx8IHMucGFnZVNpemUsXG4gICAgICBwYWdlTnVtYmVyOiBzLmN1cnJlbnRQYWdlLFxuICAgICAgZGF0YUxlbjogZC5kYXRhTGVuXG4gICAgfSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PlxuICAgICAgYS5kYXRhTGVuID09PSBiLmRhdGFMZW4gJiZcbiAgICAgIGEucGFnZVNpemUgPT09IGIucGFnZVNpemUgJiZcbiAgICAgIGEucGFnZU51bWJlciA9PT0gYi5wYWdlTnVtYmVyICYmXG4gICAgICBhLnBhZ2luYXRlZCA9PT0gYi5wYWdpbmF0ZWQpLFxuICAgIG1hcCgoeyBkYXRhTGVuLCBwYWdlTnVtYmVyLCBwYWdlU2l6ZSwgcGFnaW5hdGVkIH0pID0+IHtcbiAgICAgIGlmIChwYWdpbmF0ZWQpIHJldHVybiBNYXRoLm1pbihkYXRhTGVuIC0gKHBhZ2VOdW1iZXIgKiBwYWdlU2l6ZSksIHBhZ2VTaXplKTtcbiAgICAgIHJldHVybiBkYXRhTGVuO1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuXG4gIHN1YnNjcmliZXIgPSBzdWJzY3JpYmVyKHRoaXMuZGF0YUxlbmd0aCQsIChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgdGhpcy5zY3JvbGxTdHJhdGVneS5zZXREYXRhTGVuZ3RoKGRhdGFMZW5ndGgpO1xuXG4gICAgaWYgKHRoaXMudmlld3BvcnQoKSkge1xuICAgICAgdGhpcy5zZXRTaXplKHRoaXMudmlld3BvcnQoKSEuZWxlbWVudFJlZik7XG4gICAgfVxuICB9KTtcblxuXG4gIF8gPSBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydCgpO1xuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICBpZiAoISF2aWV3cG9ydCkge1xuICAgICAgICBhZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2l6ZUhhbmRsZXIpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZXIub24odmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbSwgKHJhbmdlKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhU3RvcmUucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgICB2aXJ0dWFsRW5kczoge1xuICAgICAgICAgICAgICBzdGFydDogcmFuZ2Uuc3RhcnQsXG4gICAgICAgICAgICAgIGVuZDogcmFuZ2UuZW5kICsgMjUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgb2Zmc2V0JCA9IHZpZXdwb3J0LnNjcm9sbGVkSW5kZXhDaGFuZ2UucGlwZShcbiAgICAgICAgICBtYXAoKCkgPT4gdmlld3BvcnQuZ2V0T2Zmc2V0VG9SZW5kZXJlZENvbnRlbnRTdGFydCgpID8/IDApLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgZGVmYXVsdFNoYXJlUmVwbGF5KClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnN1YnNjcmliZXIub24ob2Zmc2V0JCwgKG9mZnNldCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YVN0b3JlLnBhdGNoU3RhdGUoeyB2aXJ0dWFsU2Nyb2xsT2Zmc2V0OiBvZmZzZXQgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldFNpemUodGhpcy52aWV3cG9ydCgpIS5lbGVtZW50UmVmKTtcbiAgICAgIH07XG4gICAgfSlcblxuICB9KVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBmb290ZXJSb3dTdHlsZSQgPSB0aGlzLmdlbmVyaWNUYWJsZSgpPy4kZm9vdGVyUm93U3R5bGUoKTtcbiAgICBpZiAoZm9vdGVyUm93U3R5bGUkKSB7XG4gICAgICB0aGlzLmZvb3RlclN0eWxlID1mb290ZXJSb3dTdHlsZSQ7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXNpemVIYW5kbGVyKTtcbiAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHNldFNpemUoZWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgY29uc3QgdnNWaWV3cG9ydCA9IGVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdmlydHVhbFNjcm9sbE9wdGlvbnMgPSB0aGlzLnN0YXRlLnRhYmxlU2V0dGluZ3MoKS51c2VWaXJ0dWFsU2Nyb2xsISBhcyBWaXJ0dWFsU2Nyb2xsT3B0aW9ucztcbiAgICBjb25zdCByb3dIZWlnaHQgPSB0aGlzLmNvbXB1dGVkUm93SGVpZ2h0KCk7XG4gICAgbGV0IGFtb3VudE9mVmlzaWJsZUl0ZW1zID0gdmlydHVhbFNjcm9sbE9wdGlvbnM/LmFtb3VudE9mVmlzaWJsZUl0ZW1zIHx8IHRoaXMuZGVmYXVsdE9wdGlvbnMuYW1vdW50T2ZWaXNpYmxlSXRlbXM7XG4gICAgdmlydHVhbFNjcm9sbE9wdGlvbnM/LmFtb3VudE9mVmlzaWJsZUl0ZW1zIHx8IHRoaXMuZGVmYXVsdE9wdGlvbnMuYW1vdW50T2ZWaXNpYmxlSXRlbXM7XG5cbiAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICB2YXIgc3ViID0gdGhpcy5kYXRhTGVuZ3RoJC5zdWJzY3JpYmUoZGF0YUxlbmd0aCA9PiB7XG4gICAgICBpZiAoZGF0YUxlbmd0aCA8IGFtb3VudE9mVmlzaWJsZUl0ZW1zKSB7XG4gICAgICAgIGhlaWdodCA9KyAodGhpcy5jb21wdXRlZFJvd0hlaWdodCgpICogZGF0YUxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWlnaHQgPSAocm93SGVpZ2h0ICogYW1vdW50T2ZWaXNpYmxlSXRlbXMpO1xuICAgICAgfVxuICAgIH1cbiAgICApO1xuICAgIGlmICh0aGlzLmZvb3RlclN0eWxlICE9PSAnbm8tZm9vdGVyJykge1xuICAgICAgaGVpZ2h0ICs9IHJvd0hlaWdodDtcbiAgICAgIGNvbnNvbGUubG9nKGhlaWdodClcbiAgICAgIGNvbnNvbGUubG9nKCdyZWd1bGFyLWZvb3RlcicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUudGFibGVTZXR0aW5ncygpLmhpZGVIZWFkZXIpIHtcbiAgICAgIGNvbnN0IGhlYWRlckhlaWdodCA9IHRoaXMuY29tcHV0ZWRIZWFkZXJIZWlnaHQoKTtcbiAgICAgIGhlaWdodCArPSBoZWFkZXJIZWlnaHQ7XG4gICAgfVxuICAgIGlmICh2aXJ0dWFsU2Nyb2xsT3B0aW9ucz8ubWF4Vmlld1BvcnRIZWlnaHQgJiYgdmlydHVhbFNjcm9sbE9wdGlvbnMubWF4Vmlld1BvcnRIZWlnaHQgPCBoZWlnaHQpIGhlaWdodCA9IHZpcnR1YWxTY3JvbGxPcHRpb25zLm1heFZpZXdQb3J0SGVpZ2h0O1xuICAgIHZzVmlld3BvcnQuc2V0QXR0cmlidXRlKFxuICAgICAgJ3N0eWxlJyxcbiAgICAgIGBoZWlnaHQ6ICR7aGVpZ2h0fXB4ICFpbXBvcnRhbnQ7YCxcbiAgICApO1xuICAgIHRoaXMudmlld3BvcnQoKT8uY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICBjb25zdCB2aXJ0dWFsU2Nyb2xsT2Zmc2V0ID0gdGhpcy52aWV3cG9ydCgpPy5nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCkgPz8gMFxuICAgIHRoaXMuZGF0YVN0b3JlLnBhdGNoU3RhdGUoeyB2aXJ0dWFsU2Nyb2xsT2Zmc2V0IH0pO1xuICB9XG5cbiAgcmVzaXplSGFuZGxlciA9ICgpID0+IHtcbiAgICBpZiAodGhpcy52aWV3cG9ydCgpKSB7XG4gICAgICB0aGlzLnNldFNpemUodGhpcy52aWV3cG9ydCgpIS5lbGVtZW50UmVmKTtcbiAgICB9XG4gIH07XG5cbiAgY29tcHV0ZWRSb3dIZWlnaHQoKSB7XG4gICAgY29uc3QgdmlydHVhbFNjcm9sbE9wdGlvbnMgPSB0aGlzLnN0YXRlLnRhYmxlU2V0dGluZ3MoKS51c2VWaXJ0dWFsU2Nyb2xsISBhcyBWaXJ0dWFsU2Nyb2xsT3B0aW9ucztcbiAgICBjb25zdCByb3dIZWlnaHQgPSB2aXJ0dWFsU2Nyb2xsT3B0aW9ucz8ucm93SGVpZ2h0IHx8ICh0eXBlb2YgdGhpcy5zdGF0ZS50YWJsZVNldHRpbmdzKCkucm93SGVpZ2h0ID09PSAnbnVtYmVyJyAmJiB0aGlzLnN0YXRlLnRhYmxlU2V0dGluZ3MoKS5yb3dIZWlnaHQgYXMgbnVtYmVyKSB8fCB0aGlzLmRlZmF1bHRPcHRpb25zLnJvd0hlaWdodDtcbiAgICByZXR1cm4gcm93SGVpZ2h0O1xuICB9XG5cbiAgY29tcHV0ZWRIZWFkZXJIZWlnaHQoKSB7XG4gICAgY29uc3QgdmlydHVhbFNjcm9sbE9wdGlvbnMgPSB0aGlzLnN0YXRlLnRhYmxlU2V0dGluZ3MoKS51c2VWaXJ0dWFsU2Nyb2xsISBhcyBWaXJ0dWFsU2Nyb2xsT3B0aW9ucztcbiAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSB2aXJ0dWFsU2Nyb2xsT3B0aW9ucz8uaGVhZGVySGVpZ2h0IHx8ICh0eXBlb2YgdGhpcy5zdGF0ZS50YWJsZVNldHRpbmdzKCkuaGVhZGVySGVpZ2h0ID09PSAnbnVtYmVyJyAmJiB0aGlzLnN0YXRlLnRhYmxlU2V0dGluZ3MoKS5oZWFkZXJIZWlnaHQgYXMgbnVtYmVyKSB8fCB0aGlzLmRlZmF1bHRPcHRpb25zLmhlYWRlckhlaWdodDtcbiAgICByZXR1cm4gaGVhZGVySGVpZ2h0O1xuICB9XG59XG4iXX0=
|