@dereekb/dbx-web 12.1.14 → 12.2.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.
@@ -16,6 +16,7 @@ export * from './table.item.cell.component';
16
16
  export * from './table.item.directive';
17
17
  export * from './table.item.header.component';
18
18
  export * from './table.module';
19
+ export * from './table.reader';
19
20
  export * from './table.store';
20
21
  export * from './table';
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3RhYmxlL3NyYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY2VsbC5hY3Rpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY2VsbC5pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jZWxsLnN1bW1hcnllbmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY2VsbC5zdW1tYXJ5c3RhcnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29sdW1uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmNvbHVtbi5oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29sdW1uLmZvb3Rlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5ncm91cC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5ncm91cC5oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuZ3JvdXAuZm9vdGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLml0ZW0uYWN0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLml0ZW0uY2VsbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5pdGVtLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLml0ZW0uaGVhZGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLnN0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUnO1xuIl19
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3RhYmxlL3NyYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jZWxsLmFjdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jZWxsLmlucHV0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmNlbGwuc3VtbWFyeWVuZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jZWxsLnN1bW1hcnlzdGFydC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jb2x1bW4uZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29sdW1uLmhlYWRlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5jb2x1bW4uZm9vdGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmdyb3VwLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmdyb3VwLmhlYWRlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS5ncm91cC5mb290ZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuaXRlbS5hY3Rpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuaXRlbS5jZWxsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLml0ZW0uZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuaXRlbS5oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUucmVhZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZSc7XG4iXX0=
@@ -1,11 +1,11 @@
1
- import { ChangeDetectionStrategy, Component, inject, computed, input } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, inject, computed, input, viewChild, effect, ChangeDetectorRef } from '@angular/core';
2
2
  import { toSignal } from '@angular/core/rxjs-interop';
3
3
  import { DbxTableStore } from './table.store';
4
4
  import { loadingStateContext, mapLoadingStateValueWithOperator, valueFromFinishedLoadingState } from '@dereekb/rxjs';
5
- import { shareReplay, map, switchMap } from 'rxjs';
5
+ import { shareReplay, map, switchMap, throttleTime } from 'rxjs';
6
6
  import { DbxLoadingComponent } from '@dereekb/dbx-web';
7
7
  import { InfiniteScrollDirective } from 'ngx-infinite-scroll';
8
- import { MatTableModule } from '@angular/material/table';
8
+ import { MatTable, MatTableModule } from '@angular/material/table';
9
9
  import { DbxTableInputCellComponent } from './table.cell.input.component';
10
10
  import { DbxTableSummaryEndCellComponent } from './table.cell.summaryend.component';
11
11
  import { DbxTableSummaryStartCellComponent } from './table.cell.summarystart.component';
@@ -36,7 +36,11 @@ export function isDbxTableViewItemElement(element) {
36
36
  */
37
37
  export class DbxTableViewComponent {
38
38
  tableStore = inject((DbxTableStore));
39
- // readonly table = viewChild.required<MatTable<DbxTableViewElement<T, G>>>(MatTable);
39
+ table = viewChild.required(MatTable);
40
+ /**
41
+ * TEMPORARY: the cdk seems to not implement change detection properly
42
+ */
43
+ cdRef = inject(ChangeDetectorRef);
40
44
  DEFAULT_TRACK_BY_FUNCTION = (index) => {
41
45
  return index;
42
46
  };
@@ -89,7 +93,7 @@ export class DbxTableViewComponent {
89
93
  .flat();
90
94
  }));
91
95
  })), shareReplay(1));
92
- elements$ = this.elementsState$.pipe(valueFromFinishedLoadingState([]), shareReplay(1));
96
+ elements$ = this.elementsState$.pipe(valueFromFinishedLoadingState(() => []), throttleTime(50, undefined, { leading: true, trailing: true }), shareReplay(1));
93
97
  displayedColumns$ = this.innerColumnNames$.pipe(map((columnNames) => {
94
98
  return [this.itemsColumnName, ...columnNames, this.actionsColumnName];
95
99
  }), shareReplay(1));
@@ -125,6 +129,12 @@ export class DbxTableViewComponent {
125
129
  dataLoadingContextSignal = toSignal(this.dataLoadingContext.state$);
126
130
  viewDelegateSignal = toSignal(this.tableStore.viewDelegate$);
127
131
  elementsSignal = toSignal(this.elements$, { initialValue: [] });
132
+ _elementEffect = effect(() => {
133
+ const table = this.table();
134
+ table.dataSource = this.elementsSignal(); // signal to render the rows
135
+ table.renderRows();
136
+ this.cdRef.detectChanges(); // detect changes
137
+ });
128
138
  onScrollDown() {
129
139
  this.tableStore.loadMore();
130
140
  }
@@ -147,7 +157,7 @@ export class DbxTableViewComponent {
147
157
  return viewDelegate?.fullSummaryRow != null;
148
158
  });
149
159
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
150
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxTableViewComponent, isStandalone: true, selector: "dbx-table-view", inputs: { scrollDistance: { classPropertyName: "scrollDistance", publicName: "scrollDistance", isSignal: true, isRequired: false, transformFunction: null }, throttleScroll: { classPropertyName: "throttleScroll", publicName: "throttleScroll", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <section class=\"dbx-table-view\" dbx-column-size #columnSize=\"dbxColumnSize\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table recycleRows [dataSource]=\"elementsSignal()\" [trackBy]=\"trackElementByFunctionSignal()\" multiTemplateDataRows>\n <!-- Groups -->\n <!-- Group Header column -->\n <ng-container matColumnDef=\"groupHeaderColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-header [group]=\"element.group\"></dbx-table-group-header>\n </td>\n </ng-container>\n\n <!-- Group Footer column -->\n <ng-container matColumnDef=\"groupFooterColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-footer [group]=\"element.group\"></dbx-table-group-footer>\n </td>\n </ng-container>\n\n <!-- Items -->\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th dbx-column-size-column=\"head\" mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-header [item]=\"element.item\"></dbx-table-item-header>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th [dbx-column-size-column]=\"$index\" mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-cell [item]=\"element.item\" [column]=\"column\"></dbx-table-item-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th dbx-column-size-column=\"tail\" mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-action [item]=\"element.item\"></dbx-table-item-action>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeaderColumn']; when: showGroupHeaderRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal(); when: showItemRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['groupFooterColumn']; when: showGroupFooterRow\"></tr>\n\n <tr [ngClass]=\"{ 'dbx-hide': !showFooterRowSignal() }\" mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n <!-- Full summary row -->\n @if (showFullSummaryRowSignal()) {\n <div class=\"mat-mdc-table dbx-table-view-full-summary-row-container\">\n <div class=\"mdc-data-table__cell mat-mdc-row\">\n <dbx-table-full-summary-row></dbx-table-full-summary-row>\n </div>\n </div>\n }\n</dbx-loading>\n", dependencies: [{ kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1.MatRecycleRows, selector: "mat-table[recycleRows], table[mat-table][recycleRows]" }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: DbxTableInputCellComponent, selector: "dbx-table-input-cell" }, { kind: "component", type: DbxTableItemHeaderComponent, selector: "dbx-table-item-header" }, { kind: "component", type: DbxTableItemCellComponent, selector: "dbx-table-item-cell", inputs: ["column"] }, { kind: "component", type: DbxTableItemActionComponent, selector: "dbx-table-item-action" }, { kind: "component", type: DbxTableActionCellComponent, selector: "dbx-table-action-cell" }, { kind: "component", type: DbxTableColumnHeaderComponent, selector: "dbx-table-column-header" }, { kind: "component", type: DbxTableColumnFooterComponent, selector: "dbx-table-column-footer" }, { kind: "component", type: DbxTableSummaryStartCellComponent, selector: "dbx-table-summary-start-cell" }, { kind: "component", type: DbxTableSummaryEndCellComponent, selector: "dbx-table-summary-end-cell" }, { kind: "component", type: DbxTableGroupHeaderComponent, selector: "dbx-table-group-header" }, { kind: "component", type: DbxTableGroupFooterComponent, selector: "dbx-table-group-footer" }, { kind: "component", type: DbxTableFullSummaryRowComponent, selector: "dbx-table-full-summary-row" }, { kind: "directive", type: DbxColumnSizeDirective, selector: "[dbx-column-size]", exportAs: ["dbxColumnSize"] }, { kind: "directive", type: DbxColumnSizeColumnDirective, selector: "[dbx-column-size-column]", inputs: ["dbx-column-size-column"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
160
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxTableViewComponent, isStandalone: true, selector: "dbx-table-view", inputs: { scrollDistance: { classPropertyName: "scrollDistance", publicName: "scrollDistance", isSignal: true, isRequired: false, transformFunction: null }, throttleScroll: { classPropertyName: "throttleScroll", publicName: "throttleScroll", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, isSignal: true }], ngImport: i0, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <section class=\"dbx-table-view\" dbx-column-size #columnSize=\"dbxColumnSize\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table recycleRows [trackBy]=\"trackElementByFunctionSignal()\" multiTemplateDataRows>\n <!-- Groups -->\n <!-- Group Header column -->\n <ng-container matColumnDef=\"groupHeaderColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-header [group]=\"element.group\"></dbx-table-group-header>\n </td>\n </ng-container>\n\n <!-- Group Footer column -->\n <ng-container matColumnDef=\"groupFooterColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-footer [group]=\"element.group\"></dbx-table-group-footer>\n </td>\n </ng-container>\n\n <!-- Items -->\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th dbx-column-size-column=\"head\" mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-header [item]=\"element.item\"></dbx-table-item-header>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th [dbx-column-size-column]=\"$index\" mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-cell [item]=\"element.item\" [column]=\"column\"></dbx-table-item-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th dbx-column-size-column=\"tail\" mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-action [item]=\"element.item\"></dbx-table-item-action>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeaderColumn']; when: showGroupHeaderRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal(); when: showItemRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['groupFooterColumn']; when: showGroupFooterRow\"></tr>\n\n <tr [ngClass]=\"{ 'dbx-hide': !showFooterRowSignal() }\" mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n <!-- Full summary row -->\n @if (showFullSummaryRowSignal()) {\n <div class=\"mat-mdc-table dbx-table-view-full-summary-row-container\">\n <div class=\"mdc-data-table__cell mat-mdc-row\">\n <dbx-table-full-summary-row></dbx-table-full-summary-row>\n </div>\n </div>\n }\n</dbx-loading>\n", dependencies: [{ kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1.MatRecycleRows, selector: "mat-table[recycleRows], table[mat-table][recycleRows]" }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: DbxTableInputCellComponent, selector: "dbx-table-input-cell" }, { kind: "component", type: DbxTableItemHeaderComponent, selector: "dbx-table-item-header" }, { kind: "component", type: DbxTableItemCellComponent, selector: "dbx-table-item-cell", inputs: ["column"] }, { kind: "component", type: DbxTableItemActionComponent, selector: "dbx-table-item-action" }, { kind: "component", type: DbxTableActionCellComponent, selector: "dbx-table-action-cell" }, { kind: "component", type: DbxTableColumnHeaderComponent, selector: "dbx-table-column-header" }, { kind: "component", type: DbxTableColumnFooterComponent, selector: "dbx-table-column-footer" }, { kind: "component", type: DbxTableSummaryStartCellComponent, selector: "dbx-table-summary-start-cell" }, { kind: "component", type: DbxTableSummaryEndCellComponent, selector: "dbx-table-summary-end-cell" }, { kind: "component", type: DbxTableGroupHeaderComponent, selector: "dbx-table-group-header" }, { kind: "component", type: DbxTableGroupFooterComponent, selector: "dbx-table-group-footer" }, { kind: "component", type: DbxTableFullSummaryRowComponent, selector: "dbx-table-full-summary-row" }, { kind: "directive", type: DbxColumnSizeDirective, selector: "[dbx-column-size]", exportAs: ["dbxColumnSize"] }, { kind: "directive", type: DbxColumnSizeColumnDirective, selector: "[dbx-column-size-column]", inputs: ["dbx-column-size-column"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
151
161
  }
152
162
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxTableViewComponent, decorators: [{
153
163
  type: Component,
@@ -170,6 +180,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
170
180
  DbxTableFullSummaryRowComponent,
171
181
  DbxColumnSizeDirective,
172
182
  DbxColumnSizeColumnDirective
173
- ], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <section class=\"dbx-table-view\" dbx-column-size #columnSize=\"dbxColumnSize\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table recycleRows [dataSource]=\"elementsSignal()\" [trackBy]=\"trackElementByFunctionSignal()\" multiTemplateDataRows>\n <!-- Groups -->\n <!-- Group Header column -->\n <ng-container matColumnDef=\"groupHeaderColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-header [group]=\"element.group\"></dbx-table-group-header>\n </td>\n </ng-container>\n\n <!-- Group Footer column -->\n <ng-container matColumnDef=\"groupFooterColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-footer [group]=\"element.group\"></dbx-table-group-footer>\n </td>\n </ng-container>\n\n <!-- Items -->\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th dbx-column-size-column=\"head\" mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-header [item]=\"element.item\"></dbx-table-item-header>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th [dbx-column-size-column]=\"$index\" mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-cell [item]=\"element.item\" [column]=\"column\"></dbx-table-item-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th dbx-column-size-column=\"tail\" mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-action [item]=\"element.item\"></dbx-table-item-action>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeaderColumn']; when: showGroupHeaderRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal(); when: showItemRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['groupFooterColumn']; when: showGroupFooterRow\"></tr>\n\n <tr [ngClass]=\"{ 'dbx-hide': !showFooterRowSignal() }\" mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n <!-- Full summary row -->\n @if (showFullSummaryRowSignal()) {\n <div class=\"mat-mdc-table dbx-table-view-full-summary-row-container\">\n <div class=\"mdc-data-table__cell mat-mdc-row\">\n <dbx-table-full-summary-row></dbx-table-full-summary-row>\n </div>\n </div>\n }\n</dbx-loading>\n" }]
183
+ ], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <section class=\"dbx-table-view\" dbx-column-size #columnSize=\"dbxColumnSize\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table recycleRows [trackBy]=\"trackElementByFunctionSignal()\" multiTemplateDataRows>\n <!-- Groups -->\n <!-- Group Header column -->\n <ng-container matColumnDef=\"groupHeaderColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-header [group]=\"element.group\"></dbx-table-group-header>\n </td>\n </ng-container>\n\n <!-- Group Footer column -->\n <ng-container matColumnDef=\"groupFooterColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-footer [group]=\"element.group\"></dbx-table-group-footer>\n </td>\n </ng-container>\n\n <!-- Items -->\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th dbx-column-size-column=\"head\" mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-header [item]=\"element.item\"></dbx-table-item-header>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th [dbx-column-size-column]=\"$index\" mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-cell [item]=\"element.item\" [column]=\"column\"></dbx-table-item-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th dbx-column-size-column=\"tail\" mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-action [item]=\"element.item\"></dbx-table-item-action>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeaderColumn']; when: showGroupHeaderRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal(); when: showItemRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['groupFooterColumn']; when: showGroupFooterRow\"></tr>\n\n <tr [ngClass]=\"{ 'dbx-hide': !showFooterRowSignal() }\" mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n <!-- Full summary row -->\n @if (showFullSummaryRowSignal()) {\n <div class=\"mat-mdc-table dbx-table-view-full-summary-row-container\">\n <div class=\"mdc-data-table__cell mat-mdc-row\">\n <dbx-table-full-summary-row></dbx-table-full-summary-row>\n </div>\n </div>\n }\n</dbx-loading>\n" }]
174
184
  }] });
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvdGFibGUvc3JjL2xpYi90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFtQixNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQWdCLG1CQUFtQixFQUFFLGdDQUFnQyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25JLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEYsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEUsT0FBTyxF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QUFDLENBQUM7d0dBaEtRLHFCQUFxQjs0RkFBckIscUJBQXFCLDRYQzlFbEMsc2dJQWdGQSw0Q0R4QkksbUJBQW1CLG1LQUNuQixPQUFPLG9GQUNQLHVCQUF1Qix5V0FDdkIsY0FBYyw2aURBQ2QsMEJBQTBCLGlFQUMxQiwyQkFBMkIsa0VBQzNCLHlCQUF5QixvRkFDekIsMkJBQTJCLGtFQUMzQiwyQkFBMkIsa0VBQzNCLDZCQUE2QixvRUFDN0IsNkJBQTZCLG9FQUM3QixpQ0FBaUMseUVBQ2pDLCtCQUErQix1RUFDL0IsNEJBQTRCLG1FQUM1Qiw0QkFBNEIsbUVBQzVCLCtCQUErQix1RUFDL0Isc0JBQXNCLDJGQUN0Qiw0QkFBNEI7OzRGQUtuQixxQkFBcUI7a0JBMUJqQyxTQUFTOytCQUNFLGdCQUFnQixXQUVqQjt3QkFDUCxtQkFBbUI7d0JBQ25CLE9BQU87d0JBQ1AsdUJBQXVCO3dCQUN2QixjQUFjO3dCQUNkLDBCQUEwQjt3QkFDMUIsMkJBQTJCO3dCQUMzQix5QkFBeUI7d0JBQ3pCLDJCQUEyQjt3QkFDM0IsMkJBQTJCO3dCQUMzQiw2QkFBNkI7d0JBQzdCLDZCQUE2Qjt3QkFDN0IsaUNBQWlDO3dCQUNqQywrQkFBK0I7d0JBQy9CLDRCQUE0Qjt3QkFDNUIsNEJBQTRCO3dCQUM1QiwrQkFBK0I7d0JBQy9CLHNCQUFzQjt3QkFDdEIsNEJBQTRCO3FCQUM3QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgVHJhY2tCeUZ1bmN0aW9uLCBpbmplY3QsIGNvbXB1dGVkLCBpbnB1dCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERieFRhYmxlU3RvcmUgfSBmcm9tICcuL3RhYmxlLnN0b3JlJztcbmltcG9ydCB7IExvYWRpbmdTdGF0ZSwgbG9hZGluZ1N0YXRlQ29udGV4dCwgbWFwTG9hZGluZ1N0YXRlVmFsdWVXaXRoT3BlcmF0b3IsIHZhbHVlRnJvbUZpbmlzaGVkTG9hZGluZ1N0YXRlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBzaGFyZVJlcGxheSwgbWFwLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERieExvYWRpbmdDb21wb25lbnQgfSBmcm9tICdAZGVyZWVrYi9kYngtd2ViJztcbmltcG9ydCB7IEluZmluaXRlU2Nyb2xsRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWluZmluaXRlLXNjcm9sbCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IERieFRhYmxlSW5wdXRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jZWxsLmlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYnhUYWJsZVN1bW1hcnlFbmRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jZWxsLnN1bW1hcnllbmQuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlU3VtbWFyeVN0YXJ0Q2VsbENvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuY2VsbC5zdW1tYXJ5c3RhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlQ29sdW1uRm9vdGVyQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jb2x1bW4uZm9vdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYnhUYWJsZUl0ZW1DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5pdGVtLmNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlSXRlbUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuaXRlbS5oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlSXRlbUFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuaXRlbS5hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlQWN0aW9uQ2VsbENvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuY2VsbC5hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlQ29sdW1uSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jb2x1bW4uaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYnhUYWJsZUl0ZW1Hcm91cCwgRGVmYXVsdERieFRhYmxlSXRlbUdyb3VwIH0gZnJvbSAnLi90YWJsZSc7XG5pbXBvcnQgeyBEYnhUYWJsZUdyb3VwSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5ncm91cC5oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlR3JvdXBGb290ZXJDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmdyb3VwLmZvb3Rlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgcHVzaEFycmF5SXRlbXNJbnRvQXJyYXkgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGJ4VGFibGVGdWxsU3VtbWFyeVJvd0NvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuZnVsbHN1bW1hcnlyb3cuY29tcG9uZW50JztcbmltcG9ydCB7IERieENvbHVtblNpemVEaXJlY3RpdmUsIERieENvbHVtblNpemVDb2x1bW5EaXJlY3RpdmUgfSBmcm9tICcuL3RhYmxlLmNvbHVtbi5zaXplLmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBEQlhfVEFCTEVfSVRFTVNfQ09MVU1OX05BTUUgPSAnX2l0ZW1zJztcbmV4cG9ydCBjb25zdCBEQlhfVEFCTEVfQUNUSU9OU19DT0xVTU5fTkFNRSA9ICdfYWN0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4VGFibGVWaWV3R3JvdXBFbGVtZW50PFQsIEc+IHtcbiAgcmVhZG9ubHkgdHlwZTogJ2dyb3VwJztcbiAgcmVhZG9ubHkgbG9jYXRpb246ICdoZWFkZXInIHwgJ2Zvb3Rlcic7XG4gIHJlYWRvbmx5IGdyb3VwOiBEYnhUYWJsZUl0ZW1Hcm91cDxULCBHPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhUYWJsZVZpZXdJdGVtRWxlbWVudDxULCBHPiB7XG4gIHJlYWRvbmx5IHR5cGU6ICdpdGVtJztcbiAgcmVhZG9ubHkgaXRlbTogVDtcbn1cblxuZXhwb3J0IHR5cGUgRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPiA9IERieFRhYmxlVmlld0dyb3VwRWxlbWVudDxULCBHPiB8IERieFRhYmxlVmlld0l0ZW1FbGVtZW50PFQsIEc+O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEYnhUYWJsZVZpZXdHcm91cEVsZW1lbnQ8VCwgRz4oZWxlbWVudDogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPik6IGVsZW1lbnQgaXMgRGJ4VGFibGVWaWV3R3JvdXBFbGVtZW50PFQsIEc+IHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZSA9PT0gJ2dyb3VwJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGJ4VGFibGVWaWV3SXRlbUVsZW1lbnQ8VCwgRz4oZWxlbWVudDogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPik6IGVsZW1lbnQgaXMgRGJ4VGFibGVWaWV3SXRlbUVsZW1lbnQ8VCwgRz4ge1xuICByZXR1cm4gZWxlbWVudC50eXBlID09PSAnaXRlbSc7XG59XG5cbi8qKlxuICogQSB0YWJsZSB3aXRoIGZpeGVkIGNvbnRlbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGJ4LXRhYmxlLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbXG4gICAgRGJ4TG9hZGluZ0NvbXBvbmVudCxcbiAgICBOZ0NsYXNzLFxuICAgIEluZmluaXRlU2Nyb2xsRGlyZWN0aXZlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIERieFRhYmxlSW5wdXRDZWxsQ29tcG9uZW50LFxuICAgIERieFRhYmxlSXRlbUhlYWRlckNvbXBvbmVudCxcbiAgICBEYnhUYWJsZUl0ZW1DZWxsQ29tcG9uZW50LFxuICAgIERieFRhYmxlSXRlbUFjdGlvbkNvbXBvbmVudCxcbiAgICBEYnhUYWJsZUFjdGlvbkNlbGxDb21wb25lbnQsXG4gICAgRGJ4VGFibGVDb2x1bW5IZWFkZXJDb21wb25lbnQsXG4gICAgRGJ4VGFibGVDb2x1bW5Gb290ZXJDb21wb25lbnQsXG4gICAgRGJ4VGFibGVTdW1tYXJ5U3RhcnRDZWxsQ29tcG9uZW50LFxuICAgIERieFRhYmxlU3VtbWFyeUVuZENlbGxDb21wb25lbnQsXG4gICAgRGJ4VGFibGVHcm91cEhlYWRlckNvbXBvbmVudCxcbiAgICBEYnhUYWJsZUdyb3VwRm9vdGVyQ29tcG9uZW50LFxuICAgIERieFRhYmxlRnVsbFN1bW1hcnlSb3dDb21wb25lbnQsXG4gICAgRGJ4Q29sdW1uU2l6ZURpcmVjdGl2ZSxcbiAgICBEYnhDb2x1bW5TaXplQ29sdW1uRGlyZWN0aXZlXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERieFRhYmxlVmlld0NvbXBvbmVudDxJLCBDLCBULCBHID0gdW5rbm93bj4ge1xuICByZWFkb25seSB0YWJsZVN0b3JlID0gaW5qZWN0KERieFRhYmxlU3RvcmU8SSwgQywgVCwgRz4pO1xuICAvLyByZWFkb25seSB0YWJsZSA9IHZpZXdDaGlsZC5yZXF1aXJlZDxNYXRUYWJsZTxEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+Pj4oTWF0VGFibGUpO1xuXG4gIHJlYWRvbmx5IERFRkFVTFRfVFJBQ0tfQllfRlVOQ1RJT046IFRyYWNrQnlGdW5jdGlvbjxhbnk+ID0gKGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9O1xuXG4gIHJlYWRvbmx5IHNjcm9sbERpc3RhbmNlID0gaW5wdXQ8bnVtYmVyPigwLjUpO1xuICByZWFkb25seSB0aHJvdHRsZVNjcm9sbCA9IGlucHV0PG51bWJlcj4oNTApO1xuXG4gIHJlYWRvbmx5IGl0ZW1zQ29sdW1uTmFtZSA9IERCWF9UQUJMRV9JVEVNU19DT0xVTU5fTkFNRTtcbiAgcmVhZG9ubHkgYWN0aW9uc0NvbHVtbk5hbWUgPSBEQlhfVEFCTEVfQUNUSU9OU19DT0xVTU5fTkFNRTtcblxuICByZWFkb25seSBpbm5lckNvbHVtbnMkID0gdGhpcy50YWJsZVN0b3JlLmNvbHVtbnMkO1xuICByZWFkb25seSBpbm5lckNvbHVtbk5hbWVzJCA9IHRoaXMuaW5uZXJDb2x1bW5zJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXAoKHkpID0+IHkuY29sdW1uTmFtZSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5uZXJDb2x1bW5zU2lnbmFsID0gdG9TaWduYWwodGhpcy5pbm5lckNvbHVtbnMkKTtcbiAgcmVhZG9ubHkgaW5uZXJDb2x1bW5OYW1lc1NpZ25hbCA9IHRvU2lnbmFsKHRoaXMuaW5uZXJDb2x1bW5OYW1lcyQpO1xuXG4gIHJlYWRvbmx5IGVsZW1lbnRzU3RhdGUkOiBPYnNlcnZhYmxlPExvYWRpbmdTdGF0ZTxEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+W10+PiA9IHRoaXMudGFibGVTdG9yZS5ncm91cHNTdGF0ZSQucGlwZShcbiAgICBtYXBMb2FkaW5nU3RhdGVWYWx1ZVdpdGhPcGVyYXRvcihcbiAgICAgIHN3aXRjaE1hcCgoZ3JvdXBzKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlU3RvcmUudmlld0RlbGVnYXRlJC5waXBlKFxuICAgICAgICAgIG1hcCgodmlld0RlbGVnYXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGdyb3VwSGVhZGVyOiBpbnB1dEdyb3VwSGVhZGVyLCBncm91cEZvb3RlcjogaW5wdXRHcm91cEZvb3RlciB9ID0gdmlld0RlbGVnYXRlO1xuICAgICAgICAgICAgY29uc3QgaGFzR3JvdXBIZWFkZXIgPSBpbnB1dEdyb3VwSGVhZGVyICE9IG51bGwgPyAoZ3JvdXA6IERieFRhYmxlSXRlbUdyb3VwPFQsIEc+KSA9PiBpbnB1dEdyb3VwSGVhZGVyKGdyb3VwKSAhPSBudWxsIDogKCkgPT4gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBoYXNHcm91cEZvb3RlciA9IGlucHV0R3JvdXBGb290ZXIgIT0gbnVsbCA/IChncm91cDogRGJ4VGFibGVJdGVtR3JvdXA8VCwgRz4pID0+IGlucHV0R3JvdXBGb290ZXIoZ3JvdXApICE9IG51bGwgOiAoKSA9PiBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIGdyb3Vwc1xuICAgICAgICAgICAgICAubWFwKChncm91cCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaXRlbXMgfSA9IGdyb3VwO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUVsZW1lbnRzOiBEYnhUYWJsZVZpZXdJdGVtRWxlbWVudDxULCBHPltdID0gaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ2l0ZW0nLFxuICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50czogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPltdO1xuXG4gICAgICAgICAgICAgICAgaWYgKChncm91cCBhcyBEZWZhdWx0RGJ4VGFibGVJdGVtR3JvdXA8VCwgRz4pLmRlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRzID0gaXRlbUVsZW1lbnRzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSBoYXNHcm91cEhlYWRlcihncm91cCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmb290ZXIgPSBoYXNHcm91cEZvb3Rlcihncm91cCk7XG5cbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRzID0gW107XG5cbiAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2dyb3VwJyxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogJ2hlYWRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHB1c2hBcnJheUl0ZW1zSW50b0FycmF5KGVsZW1lbnRzLCBpdGVtRWxlbWVudHMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoZm9vdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdncm91cCcsXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246ICdmb290ZXInLFxuICAgICAgICAgICAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZsYXQoKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZWxlbWVudHMkID0gdGhpcy5lbGVtZW50c1N0YXRlJC5waXBlKHZhbHVlRnJvbUZpbmlzaGVkTG9hZGluZ1N0YXRlKFtdKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IGRpc3BsYXllZENvbHVtbnMkID0gdGhpcy5pbm5lckNvbHVtbk5hbWVzJC5waXBlKFxuICAgIG1hcCgoY29sdW1uTmFtZXMpID0+IHtcbiAgICAgIHJldHVybiBbdGhpcy5pdGVtc0NvbHVtbk5hbWUsIC4uLmNvbHVtbk5hbWVzLCB0aGlzLmFjdGlvbnNDb2x1bW5OYW1lXTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRpc3BsYXllZENvbHVtbnNTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29sdW1uTmFtZXMgPSB0aGlzLmlubmVyQ29sdW1uTmFtZXNTaWduYWwoKSB8fCBbXTtcbiAgICByZXR1cm4gW3RoaXMuaXRlbXNDb2x1bW5OYW1lLCAuLi5jb2x1bW5OYW1lcywgdGhpcy5hY3Rpb25zQ29sdW1uTmFtZV07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHZpc2libGVDb2x1bW5zU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmRpc3BsYXllZENvbHVtbnNTaWduYWwoKTtcblxuICAgIC8vIFRPRE86IEV2ZXJ5IHRpbWUgdGhlIHRhYmxlIGlzIHJlbmRlcmVkL3NpemUgY2hhbmdlcy9ldGMgd2Ugc2hvdWxkIHJlY29tcHV0ZSB3aWR0aCBvZiB0aGUgZmlyc3QgbiBjb2x1bW5zIHRoYXQgc3BhbiB0aGUgdmlld3BvcnRcbiAgICAvLyBpbiBvcmRlciB0byBjYWxjdWxhdGUgYSBjb2xzcGFuIGZvciB0aGUgZ3JvdXAgaGVhZGVyL2Zvb3RlciB0aGF0IGlzIG5vdCBncmVhdGVyIHRoYW4gc3BhbiBvZiB0aGUgdGFibGUgZm9yIGEgZ2l2ZW4gdmlldyBzaXplXG4gICAgLy8gSS5FLiBpZiB0aGUgc2NyZWVuIHNocmlua3MgdG8gb25seSBzaG93IHRoZSBmaXJzdCA0IGNvbHVtbnMsIHRoZW4gdGhlIGNvbHNwYW4gc2hvdWxkIGJlIDQuXG5cbiAgICAvLyBhcyBhIHRlbXBvcmFyeSBtZWFzdXJlLCB3ZSBqdXN0IHNob3cgaGFsZiB0aGUgY29sdW1uc1xuXG4gICAgcmV0dXJuIGRpc3BsYXllZENvbHVtbnMubGVuZ3RoIC8gMjtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdHJhY2tCeUZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxUcmFja0J5RnVuY3Rpb248VD4+ID0gdGhpcy50YWJsZVN0b3JlLnZpZXdEZWxlZ2F0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgudHJhY2tCeSA/PyB0aGlzLkRFRkFVTFRfVFJBQ0tfQllfRlVOQ1RJT04pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5wdXRUcmFja0J5RnVuY3Rpb25TaWduYWwgPSB0b1NpZ25hbCh0aGlzLnRyYWNrQnlGdW5jdGlvbiQsIHsgaW5pdGlhbFZhbHVlOiB0aGlzLkRFRkFVTFRfVFJBQ0tfQllfRlVOQ1RJT04gfSk7XG4gIHJlYWRvbmx5IHRyYWNrRWxlbWVudEJ5RnVuY3Rpb25TaWduYWw6IFNpZ25hbDxUcmFja0J5RnVuY3Rpb248RGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPj4+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHRyYWNrQnlGdW5jdGlvbiA9IHRoaXMuaW5wdXRUcmFja0J5RnVuY3Rpb25TaWduYWwoKSBhcyBUcmFja0J5RnVuY3Rpb248VD47XG5cbiAgICBjb25zdCBmbjogVHJhY2tCeUZ1bmN0aW9uPERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz4+ID0gKGluZGV4OiBudW1iZXIsIGVsZW1lbnQ6IERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz4pID0+IHtcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdpdGVtJykge1xuICAgICAgICByZXR1cm4gYGlfJHt0cmFja0J5RnVuY3Rpb24oaW5kZXgsIGVsZW1lbnQuaXRlbSBhcyBUKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGBnXyR7ZWxlbWVudC5ncm91cC5ncm91cElkfWA7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBmbjtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY29udGV4dCA9IGxvYWRpbmdTdGF0ZUNvbnRleHQoeyBvYnM6IHRoaXMudGFibGVTdG9yZS5kYXRhU3RhdGUkIH0pO1xuICByZWFkb25seSBkYXRhTG9hZGluZ0NvbnRleHQgPSBsb2FkaW5nU3RhdGVDb250ZXh0KHsgb2JzOiB0aGlzLmVsZW1lbnRzU3RhdGUkIH0pO1xuXG4gIHJlYWRvbmx5IGNvbnRleHRTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmNvbnRleHQuc3RhdGUkKTtcbiAgcmVhZG9ubHkgZGF0YUxvYWRpbmdDb250ZXh0U2lnbmFsID0gdG9TaWduYWwodGhpcy5kYXRhTG9hZGluZ0NvbnRleHQuc3RhdGUkKTtcblxuICByZWFkb25seSB2aWV3RGVsZWdhdGVTaWduYWwgPSB0b1NpZ25hbCh0aGlzLnRhYmxlU3RvcmUudmlld0RlbGVnYXRlJCk7XG4gIHJlYWRvbmx5IGVsZW1lbnRzU2lnbmFsID0gdG9TaWduYWwodGhpcy5lbGVtZW50cyQsIHsgaW5pdGlhbFZhbHVlOiBbXSB9KTtcblxuICBvblNjcm9sbERvd24oKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZVN0b3JlLmxvYWRNb3JlKCk7XG4gIH1cblxuICBzaG93SXRlbVJvdyhfOiBudW1iZXIsIHJvdzogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiByb3cudHlwZSA9PT0gJ2l0ZW0nO1xuICB9XG5cbiAgc2hvd0dyb3VwSGVhZGVyUm93KF86IG51bWJlciwgcm93OiBEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJvdy50eXBlID09PSAnZ3JvdXAnICYmIHJvdy5sb2NhdGlvbiA9PT0gJ2hlYWRlcic7XG4gIH1cblxuICBzaG93R3JvdXBGb290ZXJSb3coXzogbnVtYmVyLCByb3c6IERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcm93LnR5cGUgPT09ICdncm91cCcgJiYgcm93LmxvY2F0aW9uID09PSAnZm9vdGVyJztcbiAgfVxuXG4gIHJlYWRvbmx5IHNob3dGb290ZXJSb3dTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgdmlld0RlbGVnYXRlID0gdGhpcy52aWV3RGVsZWdhdGVTaWduYWwoKTtcbiAgICBjb25zdCBzaG93Rm9vdGVyUm93ID0gdmlld0RlbGVnYXRlICYmICh2aWV3RGVsZWdhdGUuc3VtbWFyeVJvd0hlYWRlciAhPSBudWxsIHx8IHZpZXdEZWxlZ2F0ZS5jb2x1bW5Gb290ZXIgIT0gbnVsbCB8fCB2aWV3RGVsZWdhdGUuc3VtbWFyeVJvd0VuZCAhPSBudWxsKTtcbiAgICByZXR1cm4gc2hvd0Zvb3RlclJvdztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2hvd0Z1bGxTdW1tYXJ5Um93U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdEZWxlZ2F0ZSA9IHRoaXMudmlld0RlbGVnYXRlU2lnbmFsKCk7XG4gICAgcmV0dXJuIHZpZXdEZWxlZ2F0ZT8uZnVsbFN1bW1hcnlSb3cgIT0gbnVsbDtcbiAgfSk7XG59XG4iLCI8ZGJ4LWxvYWRpbmcgW2NvbnRleHRdPVwiY29udGV4dFwiPlxuICA8ZGJ4LWxvYWRpbmcgY2xhc3M9XCJkYngtdGFibGUtdmlldy1sb2FkaW5nXCIgW2xpbmVhcl09XCJ0cnVlXCIgW2NvbnRleHRdPVwiZGF0YUxvYWRpbmdDb250ZXh0XCI+PC9kYngtbG9hZGluZz5cbiAgPHNlY3Rpb24gY2xhc3M9XCJkYngtdGFibGUtdmlld1wiIGRieC1jb2x1bW4tc2l6ZSAjY29sdW1uU2l6ZT1cImRieENvbHVtblNpemVcIiBpbmZpbml0ZS1zY3JvbGwgW2luZmluaXRlU2Nyb2xsRGlzdGFuY2VdPVwic2Nyb2xsRGlzdGFuY2UoKVwiIFtpbmZpbml0ZVNjcm9sbFRocm90dGxlXT1cInRocm90dGxlU2Nyb2xsKClcIiBbc2Nyb2xsV2luZG93XT1cImZhbHNlXCIgKHNjcm9sbGVkKT1cIm9uU2Nyb2xsRG93bigpXCI+XG4gICAgPHRhYmxlIGNsYXNzPVwiZGJ4LXRhYmxlLXZpZXctdGFibGVcIiBtYXQtdGFibGUgcmVjeWNsZVJvd3MgW2RhdGFTb3VyY2VdPVwiZWxlbWVudHNTaWduYWwoKVwiIFt0cmFja0J5XT1cInRyYWNrRWxlbWVudEJ5RnVuY3Rpb25TaWduYWwoKVwiIG11bHRpVGVtcGxhdGVEYXRhUm93cz5cbiAgICAgIDwhLS0gR3JvdXBzIC0tPlxuICAgICAgPCEtLSBHcm91cCBIZWFkZXIgY29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJncm91cEhlYWRlckNvbHVtblwiIFtzdGlja3ldPVwidHJ1ZVwiPlxuICAgICAgICA8dGQgbWF0LWNlbGwgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5TaXplLnZpc2libGVDb2x1bW5zU2lnbmFsKClcIiAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGRieC10YWJsZS1ncm91cC1oZWFkZXIgW2dyb3VwXT1cImVsZW1lbnQuZ3JvdXBcIj48L2RieC10YWJsZS1ncm91cC1oZWFkZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBHcm91cCBGb290ZXIgY29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJncm91cEZvb3RlckNvbHVtblwiIFtzdGlja3ldPVwidHJ1ZVwiPlxuICAgICAgICA8dGQgbWF0LWNlbGwgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5TaXplLnZpc2libGVDb2x1bW5zU2lnbmFsKClcIiAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGRieC10YWJsZS1ncm91cC1mb290ZXIgW2dyb3VwXT1cImVsZW1lbnQuZ3JvdXBcIj48L2RieC10YWJsZS1ncm91cC1mb290ZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBJdGVtcyAtLT5cbiAgICAgIDwhLS0gSGVhZGVyL0l0ZW0gY29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIml0ZW1zQ29sdW1uTmFtZVwiIFtzdGlja3ldPVwidHJ1ZVwiPlxuICAgICAgICA8dGggZGJ4LWNvbHVtbi1zaXplLWNvbHVtbj1cImhlYWRcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgPGRieC10YWJsZS1pbnB1dC1jZWxsPjwvZGJ4LXRhYmxlLWlucHV0LWNlbGw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGRieC10YWJsZS1pdGVtLWhlYWRlciBbaXRlbV09XCJlbGVtZW50Lml0ZW1cIj48L2RieC10YWJsZS1pdGVtLWhlYWRlcj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLXN1bW1hcnktc3RhcnQtY2VsbD48L2RieC10YWJsZS1zdW1tYXJ5LXN0YXJ0LWNlbGw+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBDb2x1bW4gRGVmaW5pdGlvbnMgLS0+XG4gICAgICBAZm9yIChjb2x1bW4gb2YgaW5uZXJDb2x1bW5zU2lnbmFsKCk7IHRyYWNrIGNvbHVtbi5jb2x1bW5OYW1lKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uY29sdW1uTmFtZVwiIFtzdGlja3ldPVwiZmFsc2VcIj5cbiAgICAgICAgICA8dGggW2RieC1jb2x1bW4tc2l6ZS1jb2x1bW5dPVwiJGluZGV4XCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgPGRieC10YWJsZS1jb2x1bW4taGVhZGVyIFtjb2x1bW5dPVwiY29sdW1uXCI+PC9kYngtdGFibGUtY29sdW1uLWhlYWRlcj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgICA8ZGJ4LXRhYmxlLWl0ZW0tY2VsbCBbaXRlbV09XCJlbGVtZW50Lml0ZW1cIiBbY29sdW1uXT1cImNvbHVtblwiPjwvZGJ4LXRhYmxlLWl0ZW0tY2VsbD5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICAgICAgICA8ZGJ4LXRhYmxlLWNvbHVtbi1mb290ZXIgW2NvbHVtbl09XCJjb2x1bW5cIj48L2RieC10YWJsZS1jb2x1bW4tZm9vdGVyPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgfVxuXG4gICAgICA8IS0tIFRhaWwvQWN0aW9uIGNvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJhY3Rpb25zQ29sdW1uTmFtZVwiIFtzdGlja3lFbmRdPVwidHJ1ZVwiPlxuICAgICAgICA8dGggZGJ4LWNvbHVtbi1zaXplLWNvbHVtbj1cInRhaWxcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgPGRieC10YWJsZS1hY3Rpb24tY2VsbD48L2RieC10YWJsZS1hY3Rpb24tY2VsbD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWl0ZW0tYWN0aW9uIFtpdGVtXT1cImVsZW1lbnQuaXRlbVwiPjwvZGJ4LXRhYmxlLWl0ZW0tYWN0aW9uPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgICAgIDxkYngtdGFibGUtc3VtbWFyeS1lbmQtY2VsbD48L2RieC10YWJsZS1zdW1tYXJ5LWVuZC1jZWxsPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gVGFibGUgVmlldyAtLT5cbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1NpZ25hbCgpOyBzdGlja3k6IHRydWVcIj48L3RyPlxuXG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydncm91cEhlYWRlckNvbHVtbiddOyB3aGVuOiBzaG93R3JvdXBIZWFkZXJSb3dcIj48L3RyPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNTaWduYWwoKTsgd2hlbjogc2hvd0l0ZW1Sb3dcIj48L3RyPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZ3JvdXBGb290ZXJDb2x1bW4nXTsgd2hlbjogc2hvd0dyb3VwRm9vdGVyUm93XCI+PC90cj5cblxuICAgICAgPHRyIFtuZ0NsYXNzXT1cInsgJ2RieC1oaWRlJzogIXNob3dGb290ZXJSb3dTaWduYWwoKSB9XCIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNTaWduYWwoKTsgc3RpY2t5OiB0cnVlXCI+PC90cj5cbiAgICA8L3RhYmxlPlxuICA8L3NlY3Rpb24+XG4gIDwhLS0gRnVsbCBzdW1tYXJ5IHJvdyAtLT5cbiAgQGlmIChzaG93RnVsbFN1bW1hcnlSb3dTaWduYWwoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLXRhYmxlIGRieC10YWJsZS12aWV3LWZ1bGwtc3VtbWFyeS1yb3ctY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWRjLWRhdGEtdGFibGVfX2NlbGwgbWF0LW1kYy1yb3dcIj5cbiAgICAgICAgPGRieC10YWJsZS1mdWxsLXN1bW1hcnktcm93PjwvZGJ4LXRhYmxlLWZ1bGwtc3VtbWFyeS1yb3c+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kYngtbG9hZGluZz5cbiJdfQ==
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvdGFibGUvc3JjL2xpYi90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFtQixNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNKLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBZ0IsbUJBQW1CLEVBQUUsZ0NBQWdDLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkksT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hG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Y0FBYzt3QkFDZCwwQkFBMEI7d0JBQzFCLDJCQUEyQjt3QkFDM0IseUJBQXlCO3dCQUN6QiwyQkFBMkI7d0JBQzNCLDJCQUEyQjt3QkFDM0IsNkJBQTZCO3dCQUM3Qiw2QkFBNkI7d0JBQzdCLGlDQUFpQzt3QkFDakMsK0JBQStCO3dCQUMvQiw0QkFBNEI7d0JBQzVCLDRCQUE0Qjt3QkFDNUIsK0JBQStCO3dCQUMvQixzQkFBc0I7d0JBQ3RCLDRCQUE0QjtxQkFDN0IsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIFRyYWNrQnlGdW5jdGlvbiwgaW5qZWN0LCBjb21wdXRlZCwgaW5wdXQsIFNpZ25hbCwgdmlld0NoaWxkLCBlZmZlY3QsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERieFRhYmxlU3RvcmUgfSBmcm9tICcuL3RhYmxlLnN0b3JlJztcbmltcG9ydCB7IExvYWRpbmdTdGF0ZSwgbG9hZGluZ1N0YXRlQ29udGV4dCwgbWFwTG9hZGluZ1N0YXRlVmFsdWVXaXRoT3BlcmF0b3IsIHZhbHVlRnJvbUZpbmlzaGVkTG9hZGluZ1N0YXRlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBzaGFyZVJlcGxheSwgbWFwLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGJ4TG9hZGluZ0NvbXBvbmVudCB9IGZyb20gJ0BkZXJlZWtiL2RieC13ZWInO1xuaW1wb3J0IHsgSW5maW5pdGVTY3JvbGxEaXJlY3RpdmUgfSBmcm9tICduZ3gtaW5maW5pdGUtc2Nyb2xsJztcbmltcG9ydCB7IE1hdFRhYmxlLCBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IERieFRhYmxlSW5wdXRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jZWxsLmlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYnhUYWJsZVN1bW1hcnlFbmRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jZWxsLnN1bW1hcnllbmQuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlU3VtbWFyeVN0YXJ0Q2VsbENvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuY2VsbC5zdW1tYXJ5c3RhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlQ29sdW1uRm9vdGVyQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jb2x1bW4uZm9vdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYnhUYWJsZUl0ZW1DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5pdGVtLmNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlSXRlbUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuaXRlbS5oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlSXRlbUFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuaXRlbS5hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlQWN0aW9uQ2VsbENvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuY2VsbC5hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlQ29sdW1uSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jb2x1bW4uaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYnhUYWJsZUl0ZW1Hcm91cCwgRGVmYXVsdERieFRhYmxlSXRlbUdyb3VwIH0gZnJvbSAnLi90YWJsZSc7XG5pbXBvcnQgeyBEYnhUYWJsZUdyb3VwSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5ncm91cC5oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERieFRhYmxlR3JvdXBGb290ZXJDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmdyb3VwLmZvb3Rlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgcHVzaEFycmF5SXRlbXNJbnRvQXJyYXkgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGJ4VGFibGVGdWxsU3VtbWFyeVJvd0NvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuZnVsbHN1bW1hcnlyb3cuY29tcG9uZW50JztcbmltcG9ydCB7IERieENvbHVtblNpemVEaXJlY3RpdmUsIERieENvbHVtblNpemVDb2x1bW5EaXJlY3RpdmUgfSBmcm9tICcuL3RhYmxlLmNvbHVtbi5zaXplLmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBEQlhfVEFCTEVfSVRFTVNfQ09MVU1OX05BTUUgPSAnX2l0ZW1zJztcbmV4cG9ydCBjb25zdCBEQlhfVEFCTEVfQUNUSU9OU19DT0xVTU5fTkFNRSA9ICdfYWN0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4VGFibGVWaWV3R3JvdXBFbGVtZW50PFQsIEc+IHtcbiAgcmVhZG9ubHkgdHlwZTogJ2dyb3VwJztcbiAgcmVhZG9ubHkgbG9jYXRpb246ICdoZWFkZXInIHwgJ2Zvb3Rlcic7XG4gIHJlYWRvbmx5IGdyb3VwOiBEYnhUYWJsZUl0ZW1Hcm91cDxULCBHPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhUYWJsZVZpZXdJdGVtRWxlbWVudDxULCBHPiB7XG4gIHJlYWRvbmx5IHR5cGU6ICdpdGVtJztcbiAgcmVhZG9ubHkgaXRlbTogVDtcbn1cblxuZXhwb3J0IHR5cGUgRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPiA9IERieFRhYmxlVmlld0dyb3VwRWxlbWVudDxULCBHPiB8IERieFRhYmxlVmlld0l0ZW1FbGVtZW50PFQsIEc+O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEYnhUYWJsZVZpZXdHcm91cEVsZW1lbnQ8VCwgRz4oZWxlbWVudDogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPik6IGVsZW1lbnQgaXMgRGJ4VGFibGVWaWV3R3JvdXBFbGVtZW50PFQsIEc+IHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZSA9PT0gJ2dyb3VwJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGJ4VGFibGVWaWV3SXRlbUVsZW1lbnQ8VCwgRz4oZWxlbWVudDogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPik6IGVsZW1lbnQgaXMgRGJ4VGFibGVWaWV3SXRlbUVsZW1lbnQ8VCwgRz4ge1xuICByZXR1cm4gZWxlbWVudC50eXBlID09PSAnaXRlbSc7XG59XG5cbi8qKlxuICogQSB0YWJsZSB3aXRoIGZpeGVkIGNvbnRlbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGJ4LXRhYmxlLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbXG4gICAgRGJ4TG9hZGluZ0NvbXBvbmVudCxcbiAgICBOZ0NsYXNzLFxuICAgIEluZmluaXRlU2Nyb2xsRGlyZWN0aXZlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIERieFRhYmxlSW5wdXRDZWxsQ29tcG9uZW50LFxuICAgIERieFRhYmxlSXRlbUhlYWRlckNvbXBvbmVudCxcbiAgICBEYnhUYWJsZUl0ZW1DZWxsQ29tcG9uZW50LFxuICAgIERieFRhYmxlSXRlbUFjdGlvbkNvbXBvbmVudCxcbiAgICBEYnhUYWJsZUFjdGlvbkNlbGxDb21wb25lbnQsXG4gICAgRGJ4VGFibGVDb2x1bW5IZWFkZXJDb21wb25lbnQsXG4gICAgRGJ4VGFibGVDb2x1bW5Gb290ZXJDb21wb25lbnQsXG4gICAgRGJ4VGFibGVTdW1tYXJ5U3RhcnRDZWxsQ29tcG9uZW50LFxuICAgIERieFRhYmxlU3VtbWFyeUVuZENlbGxDb21wb25lbnQsXG4gICAgRGJ4VGFibGVHcm91cEhlYWRlckNvbXBvbmVudCxcbiAgICBEYnhUYWJsZUdyb3VwRm9vdGVyQ29tcG9uZW50LFxuICAgIERieFRhYmxlRnVsbFN1bW1hcnlSb3dDb21wb25lbnQsXG4gICAgRGJ4Q29sdW1uU2l6ZURpcmVjdGl2ZSxcbiAgICBEYnhDb2x1bW5TaXplQ29sdW1uRGlyZWN0aXZlXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERieFRhYmxlVmlld0NvbXBvbmVudDxJLCBDLCBULCBHID0gdW5rbm93bj4ge1xuICByZWFkb25seSB0YWJsZVN0b3JlID0gaW5qZWN0KERieFRhYmxlU3RvcmU8SSwgQywgVCwgRz4pO1xuICByZWFkb25seSB0YWJsZSA9IHZpZXdDaGlsZC5yZXF1aXJlZDxNYXRUYWJsZTxEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+Pj4oTWF0VGFibGUpO1xuXG4gIC8qKlxuICAgKiBURU1QT1JBUlk6IHRoZSBjZGsgc2VlbXMgdG8gbm90IGltcGxlbWVudCBjaGFuZ2UgZGV0ZWN0aW9uIHByb3Blcmx5XG4gICAqL1xuICByZWFkb25seSBjZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgcmVhZG9ubHkgREVGQVVMVF9UUkFDS19CWV9GVU5DVElPTjogVHJhY2tCeUZ1bmN0aW9uPGFueT4gPSAoaW5kZXgpID0+IHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG5cbiAgcmVhZG9ubHkgc2Nyb2xsRGlzdGFuY2UgPSBpbnB1dDxudW1iZXI+KDAuNSk7XG4gIHJlYWRvbmx5IHRocm90dGxlU2Nyb2xsID0gaW5wdXQ8bnVtYmVyPig1MCk7XG5cbiAgcmVhZG9ubHkgaXRlbXNDb2x1bW5OYW1lID0gREJYX1RBQkxFX0lURU1TX0NPTFVNTl9OQU1FO1xuICByZWFkb25seSBhY3Rpb25zQ29sdW1uTmFtZSA9IERCWF9UQUJMRV9BQ1RJT05TX0NPTFVNTl9OQU1FO1xuXG4gIHJlYWRvbmx5IGlubmVyQ29sdW1ucyQgPSB0aGlzLnRhYmxlU3RvcmUuY29sdW1ucyQ7XG4gIHJlYWRvbmx5IGlubmVyQ29sdW1uTmFtZXMkID0gdGhpcy5pbm5lckNvbHVtbnMkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcCgoeSkgPT4geS5jb2x1bW5OYW1lKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbm5lckNvbHVtbnNTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmlubmVyQ29sdW1ucyQpO1xuICByZWFkb25seSBpbm5lckNvbHVtbk5hbWVzU2lnbmFsID0gdG9TaWduYWwodGhpcy5pbm5lckNvbHVtbk5hbWVzJCk7XG5cbiAgcmVhZG9ubHkgZWxlbWVudHNTdGF0ZSQ6IE9ic2VydmFibGU8TG9hZGluZ1N0YXRlPERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz5bXT4+ID0gdGhpcy50YWJsZVN0b3JlLmdyb3Vwc1N0YXRlJC5waXBlKFxuICAgIG1hcExvYWRpbmdTdGF0ZVZhbHVlV2l0aE9wZXJhdG9yKFxuICAgICAgc3dpdGNoTWFwKChncm91cHMpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVTdG9yZS52aWV3RGVsZWdhdGUkLnBpcGUoXG4gICAgICAgICAgbWFwKCh2aWV3RGVsZWdhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZ3JvdXBIZWFkZXI6IGlucHV0R3JvdXBIZWFkZXIsIGdyb3VwRm9vdGVyOiBpbnB1dEdyb3VwRm9vdGVyIH0gPSB2aWV3RGVsZWdhdGU7XG4gICAgICAgICAgICBjb25zdCBoYXNHcm91cEhlYWRlciA9IGlucHV0R3JvdXBIZWFkZXIgIT0gbnVsbCA/IChncm91cDogRGJ4VGFibGVJdGVtR3JvdXA8VCwgRz4pID0+IGlucHV0R3JvdXBIZWFkZXIoZ3JvdXApICE9IG51bGwgOiAoKSA9PiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0dyb3VwRm9vdGVyID0gaW5wdXRHcm91cEZvb3RlciAhPSBudWxsID8gKGdyb3VwOiBEYnhUYWJsZUl0ZW1Hcm91cDxULCBHPikgPT4gaW5wdXRHcm91cEZvb3Rlcihncm91cCkgIT0gbnVsbCA6ICgpID0+IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzXG4gICAgICAgICAgICAgIC5tYXAoKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpdGVtcyB9ID0gZ3JvdXA7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtRWxlbWVudHM6IERieFRhYmxlVmlld0l0ZW1FbGVtZW50PFQsIEc+W10gPSBpdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnaXRlbScsXG4gICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRzOiBEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+W107XG5cbiAgICAgICAgICAgICAgICBpZiAoKGdyb3VwIGFzIERlZmF1bHREYnhUYWJsZUl0ZW1Hcm91cDxULCBHPikuZGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudHMgPSBpdGVtRWxlbWVudHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IGhhc0dyb3VwSGVhZGVyKGdyb3VwKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvb3RlciA9IGhhc0dyb3VwRm9vdGVyKGdyb3VwKTtcblxuICAgICAgICAgICAgICAgICAgZWxlbWVudHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZ3JvdXAnLFxuICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAnaGVhZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICBncm91cFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcHVzaEFycmF5SXRlbXNJbnRvQXJyYXkoZWxlbWVudHMsIGl0ZW1FbGVtZW50cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChmb290ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2dyb3VwJyxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogJ2Zvb3RlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZmxhdCgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBlbGVtZW50cyQgPSB0aGlzLmVsZW1lbnRzU3RhdGUkLnBpcGUoXG4gICAgdmFsdWVGcm9tRmluaXNoZWRMb2FkaW5nU3RhdGUoKCkgPT4gW10pLFxuICAgIHRocm90dGxlVGltZSg1MCwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGlzcGxheWVkQ29sdW1ucyQgPSB0aGlzLmlubmVyQ29sdW1uTmFtZXMkLnBpcGUoXG4gICAgbWFwKChjb2x1bW5OYW1lcykgPT4ge1xuICAgICAgcmV0dXJuIFt0aGlzLml0ZW1zQ29sdW1uTmFtZSwgLi4uY29sdW1uTmFtZXMsIHRoaXMuYWN0aW9uc0NvbHVtbk5hbWVdO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGlzcGxheWVkQ29sdW1uc1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IHRoaXMuaW5uZXJDb2x1bW5OYW1lc1NpZ25hbCgpIHx8IFtdO1xuICAgIHJldHVybiBbdGhpcy5pdGVtc0NvbHVtbk5hbWUsIC4uLmNvbHVtbk5hbWVzLCB0aGlzLmFjdGlvbnNDb2x1bW5OYW1lXTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdmlzaWJsZUNvbHVtbnNTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZGlzcGxheWVkQ29sdW1uc1NpZ25hbCgpO1xuXG4gICAgLy8gVE9ETzogRXZlcnkgdGltZSB0aGUgdGFibGUgaXMgcmVuZGVyZWQvc2l6ZSBjaGFuZ2VzL2V0YyB3ZSBzaG91bGQgcmVjb21wdXRlIHdpZHRoIG9mIHRoZSBmaXJzdCBuIGNvbHVtbnMgdGhhdCBzcGFuIHRoZSB2aWV3cG9ydFxuICAgIC8vIGluIG9yZGVyIHRvIGNhbGN1bGF0ZSBhIGNvbHNwYW4gZm9yIHRoZSBncm91cCBoZWFkZXIvZm9vdGVyIHRoYXQgaXMgbm90IGdyZWF0ZXIgdGhhbiBzcGFuIG9mIHRoZSB0YWJsZSBmb3IgYSBnaXZlbiB2aWV3IHNpemVcbiAgICAvLyBJLkUuIGlmIHRoZSBzY3JlZW4gc2hyaW5rcyB0byBvbmx5IHNob3cgdGhlIGZpcnN0IDQgY29sdW1ucywgdGhlbiB0aGUgY29sc3BhbiBzaG91bGQgYmUgNC5cblxuICAgIC8vIGFzIGEgdGVtcG9yYXJ5IG1lYXN1cmUsIHdlIGp1c3Qgc2hvdyBoYWxmIHRoZSBjb2x1bW5zXG5cbiAgICByZXR1cm4gZGlzcGxheWVkQ29sdW1ucy5sZW5ndGggLyAyO1xuICB9KTtcblxuICByZWFkb25seSB0cmFja0J5RnVuY3Rpb24kOiBPYnNlcnZhYmxlPFRyYWNrQnlGdW5jdGlvbjxUPj4gPSB0aGlzLnRhYmxlU3RvcmUudmlld0RlbGVnYXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC50cmFja0J5ID8/IHRoaXMuREVGQVVMVF9UUkFDS19CWV9GVU5DVElPTiksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbnB1dFRyYWNrQnlGdW5jdGlvblNpZ25hbCA9IHRvU2lnbmFsKHRoaXMudHJhY2tCeUZ1bmN0aW9uJCwgeyBpbml0aWFsVmFsdWU6IHRoaXMuREVGQVVMVF9UUkFDS19CWV9GVU5DVElPTiB9KTtcbiAgcmVhZG9ubHkgdHJhY2tFbGVtZW50QnlGdW5jdGlvblNpZ25hbDogU2lnbmFsPFRyYWNrQnlGdW5jdGlvbjxEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+Pj4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdHJhY2tCeUZ1bmN0aW9uID0gdGhpcy5pbnB1dFRyYWNrQnlGdW5jdGlvblNpZ25hbCgpIGFzIFRyYWNrQnlGdW5jdGlvbjxUPjtcblxuICAgIGNvbnN0IGZuOiBUcmFja0J5RnVuY3Rpb248RGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPj4gPSAoaW5kZXg6IG51bWJlciwgZWxlbWVudDogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPikgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2l0ZW0nKSB7XG4gICAgICAgIHJldHVybiBgaV8ke3RyYWNrQnlGdW5jdGlvbihpbmRleCwgZWxlbWVudC5pdGVtIGFzIFQpfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYGdfJHtlbGVtZW50Lmdyb3VwLmdyb3VwSWR9YDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZuO1xuICB9KTtcblxuICByZWFkb25seSBjb250ZXh0ID0gbG9hZGluZ1N0YXRlQ29udGV4dCh7IG9iczogdGhpcy50YWJsZVN0b3JlLmRhdGFTdGF0ZSQgfSk7XG4gIHJlYWRvbmx5IGRhdGFMb2FkaW5nQ29udGV4dCA9IGxvYWRpbmdTdGF0ZUNvbnRleHQoeyBvYnM6IHRoaXMuZWxlbWVudHNTdGF0ZSQgfSk7XG5cbiAgcmVhZG9ubHkgY29udGV4dFNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuY29udGV4dC5zdGF0ZSQpO1xuICByZWFkb25seSBkYXRhTG9hZGluZ0NvbnRleHRTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmRhdGFMb2FkaW5nQ29udGV4dC5zdGF0ZSQpO1xuXG4gIHJlYWRvbmx5IHZpZXdEZWxlZ2F0ZVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMudGFibGVTdG9yZS52aWV3RGVsZWdhdGUkKTtcbiAgcmVhZG9ubHkgZWxlbWVudHNTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmVsZW1lbnRzJCwgeyBpbml0aWFsVmFsdWU6IFtdIH0pO1xuXG4gIHJlYWRvbmx5IF9lbGVtZW50RWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGUoKTtcbiAgICB0YWJsZS5kYXRhU291cmNlID0gdGhpcy5lbGVtZW50c1NpZ25hbCgpOyAvLyBzaWduYWwgdG8gcmVuZGVyIHRoZSByb3dzXG4gICAgdGFibGUucmVuZGVyUm93cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpOyAvLyBkZXRlY3QgY2hhbmdlc1xuICB9KTtcblxuICBvblNjcm9sbERvd24oKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZVN0b3JlLmxvYWRNb3JlKCk7XG4gIH1cblxuICBzaG93SXRlbVJvdyhfOiBudW1iZXIsIHJvdzogRGJ4VGFibGVWaWV3RWxlbWVudDxULCBHPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiByb3cudHlwZSA9PT0gJ2l0ZW0nO1xuICB9XG5cbiAgc2hvd0dyb3VwSGVhZGVyUm93KF86IG51bWJlciwgcm93OiBEYnhUYWJsZVZpZXdFbGVtZW50PFQsIEc+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJvdy50eXBlID09PSAnZ3JvdXAnICYmIHJvdy5sb2NhdGlvbiA9PT0gJ2hlYWRlcic7XG4gIH1cblxuICBzaG93R3JvdXBGb290ZXJSb3coXzogbnVtYmVyLCByb3c6IERieFRhYmxlVmlld0VsZW1lbnQ8VCwgRz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcm93LnR5cGUgPT09ICdncm91cCcgJiYgcm93LmxvY2F0aW9uID09PSAnZm9vdGVyJztcbiAgfVxuXG4gIHJlYWRvbmx5IHNob3dGb290ZXJSb3dTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgdmlld0RlbGVnYXRlID0gdGhpcy52aWV3RGVsZWdhdGVTaWduYWwoKTtcbiAgICBjb25zdCBzaG93Rm9vdGVyUm93ID0gdmlld0RlbGVnYXRlICYmICh2aWV3RGVsZWdhdGUuc3VtbWFyeVJvd0hlYWRlciAhPSBudWxsIHx8IHZpZXdEZWxlZ2F0ZS5jb2x1bW5Gb290ZXIgIT0gbnVsbCB8fCB2aWV3RGVsZWdhdGUuc3VtbWFyeVJvd0VuZCAhPSBudWxsKTtcbiAgICByZXR1cm4gc2hvd0Zvb3RlclJvdztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2hvd0Z1bGxTdW1tYXJ5Um93U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdEZWxlZ2F0ZSA9IHRoaXMudmlld0RlbGVnYXRlU2lnbmFsKCk7XG4gICAgcmV0dXJuIHZpZXdEZWxlZ2F0ZT8uZnVsbFN1bW1hcnlSb3cgIT0gbnVsbDtcbiAgfSk7XG59XG4iLCI8ZGJ4LWxvYWRpbmcgW2NvbnRleHRdPVwiY29udGV4dFwiPlxuICA8ZGJ4LWxvYWRpbmcgY2xhc3M9XCJkYngtdGFibGUtdmlldy1sb2FkaW5nXCIgW2xpbmVhcl09XCJ0cnVlXCIgW2NvbnRleHRdPVwiZGF0YUxvYWRpbmdDb250ZXh0XCI+PC9kYngtbG9hZGluZz5cbiAgPHNlY3Rpb24gY2xhc3M9XCJkYngtdGFibGUtdmlld1wiIGRieC1jb2x1bW4tc2l6ZSAjY29sdW1uU2l6ZT1cImRieENvbHVtblNpemVcIiBpbmZpbml0ZS1zY3JvbGwgW2luZmluaXRlU2Nyb2xsRGlzdGFuY2VdPVwic2Nyb2xsRGlzdGFuY2UoKVwiIFtpbmZpbml0ZVNjcm9sbFRocm90dGxlXT1cInRocm90dGxlU2Nyb2xsKClcIiBbc2Nyb2xsV2luZG93XT1cImZhbHNlXCIgKHNjcm9sbGVkKT1cIm9uU2Nyb2xsRG93bigpXCI+XG4gICAgPHRhYmxlIGNsYXNzPVwiZGJ4LXRhYmxlLXZpZXctdGFibGVcIiBtYXQtdGFibGUgcmVjeWNsZVJvd3MgW3RyYWNrQnldPVwidHJhY2tFbGVtZW50QnlGdW5jdGlvblNpZ25hbCgpXCIgbXVsdGlUZW1wbGF0ZURhdGFSb3dzPlxuICAgICAgPCEtLSBHcm91cHMgLS0+XG4gICAgICA8IS0tIEdyb3VwIEhlYWRlciBjb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImdyb3VwSGVhZGVyQ29sdW1uXCIgW3N0aWNreV09XCJ0cnVlXCI+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtblNpemUudmlzaWJsZUNvbHVtbnNTaWduYWwoKVwiICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWdyb3VwLWhlYWRlciBbZ3JvdXBdPVwiZWxlbWVudC5ncm91cFwiPjwvZGJ4LXRhYmxlLWdyb3VwLWhlYWRlcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEdyb3VwIEZvb3RlciBjb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImdyb3VwRm9vdGVyQ29sdW1uXCIgW3N0aWNreV09XCJ0cnVlXCI+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtblNpemUudmlzaWJsZUNvbHVtbnNTaWduYWwoKVwiICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWdyb3VwLWZvb3RlciBbZ3JvdXBdPVwiZWxlbWVudC5ncm91cFwiPjwvZGJ4LXRhYmxlLWdyb3VwLWZvb3Rlcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEl0ZW1zIC0tPlxuICAgICAgPCEtLSBIZWFkZXIvSXRlbSBjb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiaXRlbXNDb2x1bW5OYW1lXCIgW3N0aWNreV09XCJ0cnVlXCI+XG4gICAgICAgIDx0aCBkYngtY29sdW1uLXNpemUtY29sdW1uPVwiaGVhZFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWlucHV0LWNlbGw+PC9kYngtdGFibGUtaW5wdXQtY2VsbD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWl0ZW0taGVhZGVyIFtpdGVtXT1cImVsZW1lbnQuaXRlbVwiPjwvZGJ4LXRhYmxlLWl0ZW0taGVhZGVyPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgICAgIDxkYngtdGFibGUtc3VtbWFyeS1zdGFydC1jZWxsPjwvZGJ4LXRhYmxlLXN1bW1hcnktc3RhcnQtY2VsbD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIENvbHVtbiBEZWZpbml0aW9ucyAtLT5cbiAgICAgIEBmb3IgKGNvbHVtbiBvZiBpbm5lckNvbHVtbnNTaWduYWwoKTsgdHJhY2sgY29sdW1uLmNvbHVtbk5hbWUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5jb2x1bW5OYW1lXCIgW3N0aWNreV09XCJmYWxzZVwiPlxuICAgICAgICAgIDx0aCBbZGJ4LWNvbHVtbi1zaXplLWNvbHVtbl09XCIkaW5kZXhcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICA8ZGJ4LXRhYmxlLWNvbHVtbi1oZWFkZXIgW2NvbHVtbl09XCJjb2x1bW5cIj48L2RieC10YWJsZS1jb2x1bW4taGVhZGVyPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIDxkYngtdGFibGUtaXRlbS1jZWxsIFtpdGVtXT1cImVsZW1lbnQuaXRlbVwiIFtjb2x1bW5dPVwiY29sdW1uXCI+PC9kYngtdGFibGUtaXRlbS1jZWxsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgICAgICAgIDxkYngtdGFibGUtY29sdW1uLWZvb3RlciBbY29sdW1uXT1cImNvbHVtblwiPjwvZGJ4LXRhYmxlLWNvbHVtbi1mb290ZXI+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gVGFpbC9BY3Rpb24gY29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImFjdGlvbnNDb2x1bW5OYW1lXCIgW3N0aWNreUVuZF09XCJ0cnVlXCI+XG4gICAgICAgIDx0aCBkYngtY29sdW1uLXNpemUtY29sdW1uPVwidGFpbFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICA8ZGJ4LXRhYmxlLWFjdGlvbi1jZWxsPjwvZGJ4LXRhYmxlLWFjdGlvbi1jZWxsPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgIDxkYngtdGFibGUtaXRlbS1hY3Rpb24gW2l0ZW1dPVwiZWxlbWVudC5pdGVtXCI+PC9kYngtdGFibGUtaXRlbS1hY3Rpb24+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICAgICAgPGRieC10YWJsZS1zdW1tYXJ5LWVuZC1jZWxsPjwvZGJ4LXRhYmxlLXN1bW1hcnktZW5kLWNlbGw+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBUYWJsZSBWaWV3IC0tPlxuICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zU2lnbmFsKCk7IHN0aWNreTogdHJ1ZVwiPjwvdHI+XG5cbiAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2dyb3VwSGVhZGVyQ29sdW1uJ107IHdoZW46IHNob3dHcm91cEhlYWRlclJvd1wiPjwvdHI+XG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1NpZ25hbCgpOyB3aGVuOiBzaG93SXRlbVJvd1wiPjwvdHI+XG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydncm91cEZvb3RlckNvbHVtbiddOyB3aGVuOiBzaG93R3JvdXBGb290ZXJSb3dcIj48L3RyPlxuXG4gICAgICA8dHIgW25nQ2xhc3NdPVwieyAnZGJ4LWhpZGUnOiAhc2hvd0Zvb3RlclJvd1NpZ25hbCgpIH1cIiBtYXQtZm9vdGVyLXJvdyAqbWF0Rm9vdGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1NpZ25hbCgpOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICAgIDwvdGFibGU+XG4gIDwvc2VjdGlvbj5cbiAgPCEtLSBGdWxsIHN1bW1hcnkgcm93IC0tPlxuICBAaWYgKHNob3dGdWxsU3VtbWFyeVJvd1NpZ25hbCgpKSB7XG4gICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtdGFibGUgZGJ4LXRhYmxlLXZpZXctZnVsbC1zdW1tYXJ5LXJvdy1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZGMtZGF0YS10YWJsZV9fY2VsbCBtYXQtbWRjLXJvd1wiPlxuICAgICAgICA8ZGJ4LXRhYmxlLWZ1bGwtc3VtbWFyeS1yb3c+PC9kYngtdGFibGUtZnVsbC1zdW1tYXJ5LXJvdz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2RieC1sb2FkaW5nPlxuIl19
@@ -0,0 +1,102 @@
1
+ import { combineLatest, map, of, shareReplay, startWith, switchMap } from 'rxjs';
2
+ import { filterMaybeArrayValues } from '@dereekb/util';
3
+ /**
4
+ * Default track by function for DbxTableColumn.
5
+ *
6
+ * Returns the column name.
7
+ *
8
+ * @param column
9
+ * @returns
10
+ */
11
+ export const DEFAULT_DBX_TABLE_READER_COLUMN_TRACK_BY = (column) => column.columnName;
12
+ export function dbxTableReader(config) {
13
+ const { delegate, tableStore } = config;
14
+ const { items$ } = tableStore;
15
+ const { readItemCellDataForColumn, trackColumn: inputTrackColumn, trackItem } = delegate;
16
+ const trackColumn = (inputTrackColumn ?? DEFAULT_DBX_TABLE_READER_COLUMN_TRACK_BY);
17
+ const _cellDataAccessorsForColumn = (column) => {
18
+ return items$.pipe(map((x) => {
19
+ const allObservables = [];
20
+ const accessorsRecord = {};
21
+ x.forEach((item) => {
22
+ const itemKey = trackItem(item);
23
+ const accessor$ = readItemCellDataForColumn(column, item).pipe(map((value) => {
24
+ return {
25
+ column,
26
+ item,
27
+ value
28
+ };
29
+ }));
30
+ accessorsRecord[itemKey] = accessor$;
31
+ allObservables.push(accessor$);
32
+ });
33
+ const allValues$ = combineLatest(allObservables).pipe(startWith([]), shareReplay(1));
34
+ return {
35
+ column,
36
+ allValues$,
37
+ accessorsRecord
38
+ };
39
+ }), shareReplay(1));
40
+ };
41
+ function columnDataCellsAccessor(columnKey, column) {
42
+ const cellDataAccessors$ = _cellDataAccessorsForColumn(column);
43
+ const cellData$ = cellDataAccessors$.pipe(switchMap((record) => record.allValues$), startWith([]), shareReplay(1));
44
+ return {
45
+ columnKey,
46
+ column,
47
+ cellDataAccessors$,
48
+ cellData$
49
+ };
50
+ }
51
+ const allColumnsData$ = tableStore.columns$.pipe(map((nextColumns) => {
52
+ const record = {};
53
+ nextColumns.forEach((column) => {
54
+ const columnKey = trackColumn(column);
55
+ record[columnKey] = columnDataCellsAccessor(columnKey, column);
56
+ });
57
+ return {
58
+ record
59
+ };
60
+ }), shareReplay(1));
61
+ const _columnAccessorForColumn = (column) => {
62
+ const columnKey = trackColumn(column);
63
+ return allColumnsData$.pipe(map((columnsData) => columnsData.record[columnKey]), shareReplay(1));
64
+ };
65
+ const loadCellDataPairsForColumn = (column) => {
66
+ const columnsData$ = _columnAccessorForColumn(column).pipe(switchMap((accessor) => {
67
+ // when visibility changes, the data will change to be an empty array
68
+ return accessor ? accessor.cellData$ : of([]);
69
+ }), shareReplay(1));
70
+ return columnsData$;
71
+ };
72
+ const cellDataPairsForColumn = (column) => {
73
+ return loadCellDataPairsForColumn(column);
74
+ };
75
+ const cellDataForColumn = (column) => {
76
+ return cellDataPairsForColumn(column).pipe(map((pairs) => filterMaybeArrayValues(pairs.map((pair) => pair.value))), shareReplay(1));
77
+ };
78
+ const cellDataPairForColumnAndItem = (column, item) => {
79
+ const itemKey = trackItem(item);
80
+ const columnsData$ = _columnAccessorForColumn(column).pipe(switchMap((columnsData) => {
81
+ return columnsData
82
+ ? columnsData.cellDataAccessors$.pipe(switchMap((cellDataAccessor) => {
83
+ const itemAccessor = cellDataAccessor.accessorsRecord[itemKey];
84
+ const result = itemAccessor ? itemAccessor : of(null);
85
+ return result;
86
+ }))
87
+ : of(null);
88
+ }), shareReplay(1));
89
+ return columnsData$;
90
+ };
91
+ const cellDataForColumnAndItem = (column, item) => {
92
+ return cellDataPairForColumnAndItem(column, item).pipe(map((pair) => pair?.value));
93
+ };
94
+ return {
95
+ delegate,
96
+ cellDataPairsForColumn,
97
+ cellDataForColumn,
98
+ cellDataPairForColumnAndItem,
99
+ cellDataForColumnAndItem
100
+ };
101
+ }
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUucmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi90YWJsZS9zcmMvbGliL3RhYmxlLnJlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0YsT0FBTyxFQUF1QixzQkFBc0IsRUFBMkIsTUFBTSxlQUFlLENBQUM7QUEyQnJHOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSx3Q0FBd0MsR0FBcUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFnRnhKLE1BQU0sVUFBVSxjQUFjLENBQVUsTUFBcUM7SUFDM0UsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDeEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUM5QixNQUFNLEVBQUUseUJBQXlCLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUN6RixNQUFNLFdBQVcsR0FBRyxDQUFDLGdCQUFnQixJQUFJLHdDQUF3QyxDQUEyQyxDQUFDO0lBVTdILE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxNQUF5QixFQUF3RCxFQUFFO1FBQ3RILE9BQU8sTUFBTSxDQUFDLElBQUksQ0FDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDUixNQUFNLGNBQWMsR0FBc0QsRUFBRSxDQUFDO1lBQzdFLE1BQU0sZUFBZSxHQUFtRCxFQUFFLENBQUM7WUFFM0UsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNqQixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFD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QUFDLENBQ2YsQ0FBQztRQUVGLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUMsQ0FBQztJQUVGLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxNQUF5QixFQUFFLElBQU8sRUFBd0IsRUFBRTtRQUM1RixPQUFPLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsUUFBUTtRQUNSLHNCQUFzQjtRQUN0QixpQkFBaUI7UUFDakIsNEJBQTRCO1FBQzVCLHdCQUF3QjtLQUN6QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJpbWF0aXZlS2V5LCBNYXliZSwgZmlsdGVyTWF5YmVBcnJheVZhbHVlcywgUmVhZFJlcXVpcmVkS2V5RnVuY3Rpb24gfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IERieFRhYmxlQ29sdW1uIH0gZnJvbSAnLi90YWJsZSc7XG5pbXBvcnQgeyBEYnhUYWJsZVN0b3JlIH0gZnJvbSAnLi90YWJsZS5zdG9yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4VGFibGVSZWFkZXJDZWxsUGFpcjxDLCBUPiB7XG4gIHJlYWRvbmx5IGNvbHVtbjogRGJ4VGFibGVDb2x1bW48Qz47XG4gIHJlYWRvbmx5IGl0ZW06IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4VGFibGVSZWFkZXJDZWxsRGF0YVBhaXI8QywgVCwgTz4gZXh0ZW5kcyBEYnhUYWJsZVJlYWRlckNlbGxQYWlyPEMsIFQ+IHtcbiAgcmVhZG9ubHkgdmFsdWU6IE87XG59XG5cbi8qKlxuICogS2V5IHVzZWQgZm9yIHRyYWNraW5nIGNvbHVtbnMuXG4gKlxuICogR2VuZXJhbGx5IHRoZSB0YWJsZSBuYW1lIGlzIHVzZWQgZm9yIHRoaXMuXG4gKi9cbmV4cG9ydCB0eXBlIERieFRhYmxlUmVhZGVyQ29sdW1uS2V5ID0gc3RyaW5nO1xuXG4vKipcbiAqIEtleSB1c2VkIGZvciB0cmFja2luZyBpdGVtcy5cbiAqXG4gKiBHZW5lcmFsbHkgdGhlIGl0ZW0ncyB1bmlxdWUgaWRlbnRpZmllciBpcyB1c2VkIGZvciB0aGlzLlxuICovXG5leHBvcnQgdHlwZSBEYnhUYWJsZVJlYWRlckl0ZW1LZXkgPSBQcmltYXRpdmVLZXk7XG5cbi8qKlxuICogRGVmYXVsdCB0cmFjayBieSBmdW5jdGlvbiBmb3IgRGJ4VGFibGVDb2x1bW4uXG4gKlxuICogUmV0dXJucyB0aGUgY29sdW1uIG5hbWUuXG4gKlxuICogQHBhcmFtIGNvbHVtblxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfREJYX1RBQkxFX1JFQURFUl9DT0xVTU5fVFJBQ0tfQlk6IFJlYWRSZXF1aXJlZEtleUZ1bmN0aW9uPERieFRhYmxlQ29sdW1uPERieFRhYmxlUmVhZGVyQ29sdW1uS2V5Pj4gPSAoY29sdW1uKSA9PiBjb2x1bW4uY29sdW1uTmFtZTtcblxuLyoqXG4gKiBGdW5jdGlvbiB1c2VkIGZvciB0cmFja2luZyB1bmlxdWUgY29sdW1ucyB1c2luZyB0aGUgY29sdW1uJ3MgZGF0YS5cbiAqXG4gKiBJZiB0aGUgY29sdW1uIGtleSB2YWx1ZSBpcyB0aGUgc2FtZSBiZXR3ZWVuIHRob3NlIHR3byBjb2x1bW5zLCB0aGVuIHRoZSBtZXRhZGF0YSBvZiBib3RoIGNvbHVtbnMgd2lsbCBiZSBjb25zaWRlcmVkIHRoZSBzYW1lL2VxdWFsLlxuICovXG5leHBvcnQgdHlwZSBEYnhUYWJsZVJlYWRlckNvbHVtblRyYWNrQnlGdW5jdGlvbjxDPiA9IFJlYWRSZXF1aXJlZEtleUZ1bmN0aW9uPERieFRhYmxlQ29sdW1uPEM+LCBEYnhUYWJsZVJlYWRlckNvbHVtbktleT47XG5cbi8qKlxuICogRnVuY3Rpb24gdXNlZCBmb3IgdHJhY2tpbmcgdW5pcXVlIGNvbHVtbnMgdXNpbmcgdGhlIGNvbHVtbidzIGRhdGEuXG4gKlxuICogSWYgdGhlIGNvbHVtbiBrZXkgdmFsdWUgaXMgdGhlIHNhbWUgYmV0d2VlbiB0aG9zZSB0d28gY29sdW1ucywgdGhlbiB0aGUgbWV0YWRhdGEgb2YgYm90aCBjb2x1bW5zIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUgc2FtZS9lcXVhbC5cbiAqL1xuZXhwb3J0IHR5cGUgRGJ4VGFibGVSZWFkZXJJdGVtVHJhY2tCeUZ1bmN0aW9uPFQ+ID0gUmVhZFJlcXVpcmVkS2V5RnVuY3Rpb248VCwgRGJ4VGFibGVSZWFkZXJJdGVtS2V5PjtcblxuZXhwb3J0IGludGVyZmFjZSBEYnhUYWJsZVJlYWRlckRlbGVnYXRlPEMsIFQsIE8+IHtcbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZGF0YSBmb3IgYSBzcGVjaWZpYyBjb2x1bW4gYW5kIGl0ZW0vcm93LlxuICAgKlxuICAgKiBAcGFyYW0gY29sdW1uXG4gICAqIEBwYXJhbSBpdGVtXG4gICAqL1xuICByZWFkSXRlbUNlbGxEYXRhRm9yQ29sdW1uKGNvbHVtbjogRGJ4VGFibGVDb2x1bW48Qz4sIGl0ZW06IFQpOiBPYnNlcnZhYmxlPE8+O1xuICAvKipcbiAgICogVXNlZCBmb3IgdHJhY2tpbmcgdW5pcXVlIGNvbHVtbnMuXG4gICAqXG4gICAqIFVzZSBpZiB0aGUgbWV0YWRhdGEgYmV0d2VlbiBjb2x1bW5zIHNob3VsZCBiZSB1c2VkIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb24uXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHVzaW5nIHRoZSBjb2x1bW4gbmFtZSBhcyB0aGUga2V5IGlmIG5vdCBkZWZpbmVkLlxuICAgKi9cbiAgdHJhY2tDb2x1bW4/OiBEYnhUYWJsZVJlYWRlckNvbHVtblRyYWNrQnlGdW5jdGlvbjxDPjtcbiAgLyoqXG4gICAqIFVzZWQgZm9yIHRyYWNraW5nIHVuaXF1ZSBpdGVtcy9yb3dzLlxuICAgKlxuICAgKiBVc2UgaWYgdGhlIG1ldGFkYXRhIGJldHdlZW4gaXRlbXMgc2hvdWxkIGJlIHVzZWQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvbi5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdXNpbmcgdGhlIGl0ZW0gaXRzZWxmIGFzIHRoZSBrZXkgaWYgbm90IGRlZmluZWQuXG4gICAqL1xuICB0cmFja0l0ZW06IERieFRhYmxlUmVhZGVySXRlbVRyYWNrQnlGdW5jdGlvbjxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhUYWJsZVJlYWRlcjxDLCBULCBPPiB7XG4gIC8qKlxuICAgKiBEZWxlZ2F0ZSB1c2VkIGZvciByZXRyaWV2aW5nIHRoZSBkYXRhIGZvciBhIHNwZWNpZmljIGNvbHVtbiBhbmQgaXRlbS9yb3cuXG4gICAqL1xuICByZWFkb25seSBkZWxlZ2F0ZTogRGJ4VGFibGVSZWFkZXJEZWxlZ2F0ZTxDLCBULCBPPjtcbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgY2VsbCBkYXRhIHBhaXJzIGZvciBhIHNwZWNpZmljIGNvbHVtbi5cbiAgICovXG4gIGNlbGxEYXRhUGFpcnNGb3JDb2x1bW4oY29sdW1uOiBEYnhUYWJsZUNvbHVtbjxDPik6IE9ic2VydmFibGU8RGJ4VGFibGVSZWFkZXJDZWxsRGF0YVBhaXI8QywgVCwgTz5bXT47XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIGNlbGwgZGF0YSBmb3IgYSBzcGVjaWZpYyBjb2x1bW4uXG4gICAqL1xuICBjZWxsRGF0YUZvckNvbHVtbihjb2x1bW46IERieFRhYmxlQ29sdW1uPEM+KTogT2JzZXJ2YWJsZTxPW10+O1xuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjZWxsIGRhdGEgcGFpciBmb3IgYSBzcGVjaWZpYyBjb2x1bW4gYW5kIGl0ZW0uXG4gICAqXG4gICAqIFJldHVybnMgbnVsbCBpZiB0aGUgY29sdW1uIGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBpdGVtIGlzIG5vdCBmb3VuZC5cbiAgICovXG4gIGNlbGxEYXRhUGFpckZvckNvbHVtbkFuZEl0ZW0oY29sdW1uOiBEYnhUYWJsZUNvbHVtbjxDPiwgaXRlbTogVCk6IE9ic2VydmFibGU8TWF5YmU8RGJ4VGFibGVSZWFkZXJDZWxsRGF0YVBhaXI8QywgVCwgTz4+PjtcbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY2VsbCBkYXRhIGZvciBhIHNwZWNpZmljIGNvbHVtbiBhbmQgaXRlbS5cbiAgICpcbiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBjb2x1bW4gaXMgbm90IHZpc2libGUgb3IgdGhlIGl0ZW0gaXMgbm90IGZvdW5kLlxuICAgKi9cbiAgY2VsbERhdGFGb3JDb2x1bW5BbmRJdGVtKGNvbHVtbjogRGJ4VGFibGVDb2x1bW48Qz4sIGl0ZW06IFQpOiBPYnNlcnZhYmxlPE1heWJlPE8+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhUYWJsZVJlYWRlckNvbmZpZzxDLCBULCBPPiB7XG4gIC8qKlxuICAgKiBEZWxlZ2F0ZSB1c2VkIGZvciByZXRyaWV2aW5nIHRoZSBkYXRhIGZvciBhIHNwZWNpZmljIGNvbHVtbiBhbmQgaXRlbS9yb3cuXG4gICAqL1xuICByZWFkb25seSBkZWxlZ2F0ZTogRGJ4VGFibGVSZWFkZXJEZWxlZ2F0ZTxDLCBULCBPPjtcbiAgLyoqXG4gICAqIFRoZSB0YWJsZSBzdG9yZSB1c2VkIGZvciByZXRyaWV2aW5nIHRoZSBpdGVtcy5cbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlU3RvcmU6IERieFRhYmxlU3RvcmU8dW5rbm93biwgQywgVD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYnhUYWJsZVJlYWRlcjxDLCBULCBPPihjb25maWc6IERieFRhYmxlUmVhZGVyQ29uZmlnPEMsIFQsIE8+KTogRGJ4VGFibGVSZWFkZXI8QywgVCwgTz4ge1xuICBjb25zdCB7IGRlbGVnYXRlLCB0YWJsZVN0b3JlIH0gPSBjb25maWc7XG4gIGNvbnN0IHsgaXRlbXMkIH0gPSB0YWJsZVN0b3JlO1xuICBjb25zdCB7IHJlYWRJdGVtQ2VsbERhdGFGb3JDb2x1bW4sIHRyYWNrQ29sdW1uOiBpbnB1dFRyYWNrQ29sdW1uLCB0cmFja0l0ZW0gfSA9IGRlbGVnYXRlO1xuICBjb25zdCB0cmFja0NvbHVtbiA9IChpbnB1dFRyYWNrQ29sdW1uID8/IERFRkFVTFRfREJYX1RBQkxFX1JFQURFUl9DT0xVTU5fVFJBQ0tfQlkpIGFzIERieFRhYmxlUmVhZGVyQ29sdW1uVHJhY2tCeUZ1bmN0aW9uPEM+O1xuXG4gIGludGVyZmFjZSBEYnhUYWJsZVJlYWRlckNlbGxEYXRhQWNjZXNzb3JzRm9yQ29sdW1uIHtcbiAgICByZWFkb25seSBjb2x1bW46IERieFRhYmxlQ29sdW1uPEM+O1xuICAgIHJlYWRvbmx5IGFsbFZhbHVlcyQ6IE9ic2VydmFibGU8RGJ4VGFibGVSZWFkZXJDZWxsRGF0YVBhaXI8QywgVCwgTz5bXT47XG4gICAgcmVhZG9ubHkgYWNjZXNzb3JzUmVjb3JkOiBEYnhUYWJsZVJlYWRlckNlbGxEYXRhQWNjZXNzb3JzRm9yQ29sdW1uUmVjb3JkO1xuICB9XG5cbiAgdHlwZSBEYnhUYWJsZVJlYWRlckNlbGxEYXRhQWNjZXNzb3JzRm9yQ29sdW1uUmVjb3JkID0gUmVjb3JkPERieFRhYmxlUmVhZGVySXRlbUtleSwgT2JzZXJ2YWJsZTxEYnhUYWJsZVJlYWRlckNlbGxEYXRhUGFpcjxDLCBULCBPPj4+O1xuXG4gIGNvbnN0IF9jZWxsRGF0YUFjY2Vzc29yc0ZvckNvbHVtbiA9IChjb2x1bW46IERieFRhYmxlQ29sdW1uPEM+KTogT2JzZXJ2YWJsZTxEYnhUYWJsZVJlYWRlckNlbGxEYXRhQWNjZXNzb3JzRm9yQ29sdW1uPiA9PiB7XG4gICAgcmV0dXJuIGl0ZW1zJC5waXBlKFxuICAgICAgbWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGFsbE9ic2VydmFibGVzOiBPYnNlcnZhYmxlPERieFRhYmxlUmVhZGVyQ2VsbERhdGFQYWlyPEMsIFQsIE8+PltdID0gW107XG4gICAgICAgIGNvbnN0IGFjY2Vzc29yc1JlY29yZDogRGJ4VGFibGVSZWFkZXJDZWxsRGF0YUFjY2Vzc29yc0ZvckNvbHVtblJlY29yZCA9IHt9O1xuXG4gICAgICAgIHguZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1LZXkgPSB0cmFja0l0ZW0oaXRlbSk7XG4gICAgICAgICAgY29uc3QgYWNjZXNzb3IkID0gcmVhZEl0ZW1DZWxsRGF0YUZvckNvbHVtbihjb2x1bW4sIGl0ZW0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGFjY2Vzc29yc1JlY29yZFtpdGVtS2V5XSA9IGFjY2Vzc29yJDtcbiAgICAgICAgICBhbGxPYnNlcnZhYmxlcy5wdXNoKGFjY2Vzc29yJCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGFsbFZhbHVlcyQgPSBjb21iaW5lTGF0ZXN0KGFsbE9ic2VydmFibGVzKS5waXBlKHN0YXJ0V2l0aChbXSksIHNoYXJlUmVwbGF5KDEpKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICBhbGxWYWx1ZXMkLFxuICAgICAgICAgIGFjY2Vzc29yc1JlY29yZFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH07XG5cbiAgaW50ZXJmYWNlIERieFRhYmxlUmVhZGVyQ29sdW1uRGF0YUNlbGxzQWNjZXNzb3Ige1xuICAgIHJlYWRvbmx5IGNvbHVtbktleTogRGJ4VGFibGVSZWFkZXJDb2x1bW5LZXk7XG4gICAgcmVhZG9ubHkgY29sdW1uOiBEYnhUYWJsZUNvbHVtbjxDPjtcbiAgICByZWFkb25seSBjZWxsRGF0YUFjY2Vzc29ycyQ6IE9ic2VydmFibGU8RGJ4VGFibGVSZWFkZXJDZWxsRGF0YUFjY2Vzc29yc0ZvckNvbHVtbj47XG4gICAgcmVhZG9ubHkgY2VsbERhdGEkOiBPYnNlcnZhYmxlPERieFRhYmxlUmVhZGVyQ2VsbERhdGFQYWlyPEMsIFQsIE8+W10+O1xuICB9XG5cbiAgZnVuY3Rpb24gY29sdW1uRGF0YUNlbGxzQWNjZXNzb3IoY29sdW1uS2V5OiBEYnhUYWJsZVJlYWRlckNvbHVtbktleSwgY29sdW1uOiBEYnhUYWJsZUNvbHVtbjxDPik6IERieFRhYmxlUmVhZGVyQ29sdW1uRGF0YUNlbGxzQWNjZXNzb3Ige1xuICAgIGNvbnN0IGNlbGxEYXRhQWNjZXNzb3JzJCA9IF9jZWxsRGF0YUFjY2Vzc29yc0ZvckNvbHVtbihjb2x1bW4pO1xuICAgIGNvbnN0IGNlbGxEYXRhJCA9IGNlbGxEYXRhQWNjZXNzb3JzJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZWNvcmQpID0+IHJlY29yZC5hbGxWYWx1ZXMkKSxcbiAgICAgIHN0YXJ0V2l0aChbXSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uS2V5LFxuICAgICAgY29sdW1uLFxuICAgICAgY2VsbERhdGFBY2Nlc3NvcnMkLFxuICAgICAgY2VsbERhdGEkXG4gICAgfTtcbiAgfVxuXG4gIGludGVyZmFjZSBEYnhUYWJsZVJlYWRlckNvbHVtbkRhdGFBY2N1bXVsYXRvciB7XG4gICAgcmVhZG9ubHkgcmVjb3JkOiBEYnhUYWJsZVJlYWRlckNvbHVtbkRhdGFSZWNvcmQ7XG4gIH1cblxuICB0eXBlIERieFRhYmxlUmVhZGVyQ29sdW1uRGF0YVJlY29yZCA9IFJlY29yZDxEYnhUYWJsZVJlYWRlckNvbHVtbktleSwgRGJ4VGFibGVSZWFkZXJDb2x1bW5EYXRhQ2VsbHNBY2Nlc3Nvcj47XG5cbiAgY29uc3QgYWxsQ29sdW1uc0RhdGEkOiBPYnNlcnZhYmxlPERieFRhYmxlUmVhZGVyQ29sdW1uRGF0YUFjY3VtdWxhdG9yPiA9IHRhYmxlU3RvcmUuY29sdW1ucyQucGlwZShcbiAgICBtYXAoKG5leHRDb2x1bW5zOiBEYnhUYWJsZUNvbHVtbjxDPltdKSA9PiB7XG4gICAgICBjb25zdCByZWNvcmQ6IERieFRhYmxlUmVhZGVyQ29sdW1uRGF0YVJlY29yZCA9IHt9O1xuXG4gICAgICBuZXh0Q29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uS2V5ID0gdHJhY2tDb2x1bW4oY29sdW1uKTtcbiAgICAgICAgcmVjb3JkW2NvbHVtbktleV0gPSBjb2x1bW5EYXRhQ2VsbHNBY2Nlc3Nvcihjb2x1bW5LZXksIGNvbHVtbik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVjb3JkXG4gICAgICB9O1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgY29uc3QgX2NvbHVtbkFjY2Vzc29yRm9yQ29sdW1uID0gKGNvbHVtbjogRGJ4VGFibGVDb2x1bW48Qz4pOiBPYnNlcnZhYmxlPE1heWJlPERieFRhYmxlUmVhZGVyQ29sdW1uRGF0YUNlbGxzQWNjZXNzb3I+PiA9PiB7XG4gICAgY29uc3QgY29sdW1uS2V5ID0gdHJhY2tDb2x1bW4oY29sdW1uKTtcbiAgICByZXR1cm4gYWxsQ29sdW1uc0RhdGEkLnBpcGUoXG4gICAgICBtYXAoKGNvbHVtbnNEYXRhKSA9PiBjb2x1bW5zRGF0YS5yZWNvcmRbY29sdW1uS2V5XSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgbG9hZENlbGxEYXRhUGFpcnNGb3JDb2x1bW4gPSAoY29sdW1uOiBEYnhUYWJsZUNvbHVtbjxDPik6IE9ic2VydmFibGU8RGJ4VGFibGVSZWFkZXJDZWxsRGF0YVBhaXI8QywgVCwgTz5bXT4gPT4ge1xuICAgIGNvbnN0IGNvbHVtbnNEYXRhJCA9IF9jb2x1bW5BY2Nlc3NvckZvckNvbHVtbihjb2x1bW4pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGFjY2Vzc29yKSA9PiB7XG4gICAgICAgIC8vIHdoZW4gdmlzaWJpbGl0eSBjaGFuZ2VzLCB0aGUgZGF0YSB3aWxsIGNoYW5nZSB0byBiZSBhbiBlbXB0eSBhcnJheVxuICAgICAgICByZXR1cm4gYWNjZXNzb3IgPyBhY2Nlc3Nvci5jZWxsRGF0YSQgOiBvZihbXSk7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHJldHVybiBjb2x1bW5zRGF0YSQ7XG4gIH07XG5cbiAgY29uc3QgY2VsbERhdGFQYWlyc0ZvckNvbHVtbiA9IChjb2x1bW46IERieFRhYmxlQ29sdW1uPEM+KTogT2JzZXJ2YWJsZTxEYnhUYWJsZVJlYWRlckNlbGxEYXRhUGFpcjxDLCBULCBPPltdPiA9PiB7XG4gICAgcmV0dXJuIGxvYWRDZWxsRGF0YVBhaXJzRm9yQ29sdW1uKGNvbHVtbik7XG4gIH07XG5cbiAgY29uc3QgY2VsbERhdGFGb3JDb2x1bW4gPSAoY29sdW1uOiBEYnhUYWJsZUNvbHVtbjxDPik6IE9ic2VydmFibGU8T1tdPiA9PiB7XG4gICAgcmV0dXJuIGNlbGxEYXRhUGFpcnNGb3JDb2x1bW4oY29sdW1uKS5waXBlKFxuICAgICAgbWFwKChwYWlycykgPT4gZmlsdGVyTWF5YmVBcnJheVZhbHVlcyhwYWlycy5tYXAoKHBhaXIpID0+IHBhaXIudmFsdWUpKSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgY2VsbERhdGFQYWlyRm9yQ29sdW1uQW5kSXRlbSA9IChjb2x1bW46IERieFRhYmxlQ29sdW1uPEM+LCBpdGVtOiBUKTogT2JzZXJ2YWJsZTxNYXliZTxEYnhUYWJsZVJlYWRlckNlbGxEYXRhUGFpcjxDLCBULCBPPj4+ID0+IHtcbiAgICBjb25zdCBpdGVtS2V5ID0gdHJhY2tJdGVtKGl0ZW0pO1xuICAgIGNvbnN0IGNvbHVtbnNEYXRhJCA9IF9jb2x1bW5BY2Nlc3NvckZvckNvbHVtbihjb2x1bW4pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGNvbHVtbnNEYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zRGF0YVxuICAgICAgICAgID8gY29sdW1uc0RhdGEuY2VsbERhdGFBY2Nlc3NvcnMkLnBpcGUoXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoY2VsbERhdGFBY2Nlc3NvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1BY2Nlc3NvciA9IGNlbGxEYXRhQWNjZXNzb3IuYWNjZXNzb3JzUmVjb3JkW2l0ZW1LZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogT2JzZXJ2YWJsZTxNYXliZTxEYnhUYWJsZVJlYWRlckNlbGxEYXRhUGFpcjxDLCBULCBPPj4+ID0gaXRlbUFjY2Vzc29yID8gaXRlbUFjY2Vzc29yIDogb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG5cbiAgICByZXR1cm4gY29sdW1uc0RhdGEkO1xuICB9O1xuXG4gIGNvbnN0IGNlbGxEYXRhRm9yQ29sdW1uQW5kSXRlbSA9IChjb2x1bW46IERieFRhYmxlQ29sdW1uPEM+LCBpdGVtOiBUKTogT2JzZXJ2YWJsZTxNYXliZTxPPj4gPT4ge1xuICAgIHJldHVybiBjZWxsRGF0YVBhaXJGb3JDb2x1bW5BbmRJdGVtKGNvbHVtbiwgaXRlbSkucGlwZShtYXAoKHBhaXIpID0+IHBhaXI/LnZhbHVlKSk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBkZWxlZ2F0ZSxcbiAgICBjZWxsRGF0YVBhaXJzRm9yQ29sdW1uLFxuICAgIGNlbGxEYXRhRm9yQ29sdW1uLFxuICAgIGNlbGxEYXRhUGFpckZvckNvbHVtbkFuZEl0ZW0sXG4gICAgY2VsbERhdGFGb3JDb2x1bW5BbmRJdGVtXG4gIH07XG59XG4iXX0=