@angular-generic-table/core 5.0.0-rc.12 → 5.0.0-rc.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/esm2020/lib/core.component.mjs +46 -17
  2. package/esm2020/lib/core.module.mjs +5 -5
  3. package/esm2020/lib/core.service.mjs +4 -4
  4. package/esm2020/lib/gt-delta/gt-delta.component.mjs +7 -18
  5. package/esm2020/lib/models/table-config.interface.mjs +1 -1
  6. package/esm2020/lib/models/table-events.interface.mjs +2 -0
  7. package/esm2020/lib/pagination/pagination.component.mjs +4 -4
  8. package/esm2020/lib/pagination/pagination.module.mjs +5 -5
  9. package/esm2020/lib/pipes/capital-case.pipe.mjs +4 -4
  10. package/esm2020/lib/pipes/dash-case.pipe.mjs +4 -4
  11. package/esm2020/lib/pipes/dynamic.pipe.mjs +4 -4
  12. package/esm2020/lib/pipes/highlight.pipe.mjs +4 -4
  13. package/esm2020/lib/pipes/sort-class.pipe.mjs +4 -4
  14. package/esm2020/public-api.mjs +2 -1
  15. package/fesm2015/angular-generic-table-core.mjs +90 -73
  16. package/fesm2015/angular-generic-table-core.mjs.map +1 -1
  17. package/fesm2020/angular-generic-table-core.mjs +90 -72
  18. package/fesm2020/angular-generic-table-core.mjs.map +1 -1
  19. package/{angular-generic-table-core.d.ts → index.d.ts} +0 -0
  20. package/lib/core.component.d.ts +12 -1
  21. package/lib/gt-delta/gt-delta.component.d.ts +1 -1
  22. package/lib/models/table-config.interface.d.ts +2 -0
  23. package/lib/models/table-events.interface.d.ts +11 -0
  24. package/lib/pagination/pagination.component.d.ts +1 -1
  25. package/lib/pipes/capital-case.pipe.d.ts +1 -1
  26. package/lib/pipes/dash-case.pipe.d.ts +1 -1
  27. package/lib/pipes/dynamic.pipe.d.ts +1 -1
  28. package/lib/pipes/highlight.pipe.d.ts +1 -1
  29. package/lib/pipes/sort-class.pipe.d.ts +1 -1
  30. package/package.json +5 -5
  31. package/public-api.d.ts +1 -0
@@ -1,17 +1,21 @@
1
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
2
  import { BehaviorSubject, combineLatest, EMPTY, isObservable, of, ReplaySubject, Subject, } from 'rxjs';
3
- import { map, shareReplay, startWith, switchMap, withLatestFrom, } from 'rxjs/operators';
3
+ import { debounceTime, distinctUntilChanged, map, shareReplay, startWith, switchMap, take, tap, withLatestFrom, } from 'rxjs/operators';
4
4
  import { Order } from './enums/order.enum';
5
5
  import { chunk, search } from './utilities/utilities';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@angular/common";
8
- import * as i2 from "./pipes/dash-case.pipe";
9
- import * as i3 from "./pipes/sort-class.pipe";
10
- import * as i4 from "./pipes/capital-case.pipe";
11
- import * as i5 from "./pipes/highlight.pipe";
8
+ import * as i2 from "./pipes/sort-class.pipe";
9
+ import * as i3 from "./pipes/dash-case.pipe";
10
+ import * as i4 from "./pipes/highlight.pipe";
11
+ import * as i5 from "./pipes/capital-case.pipe";
12
12
  import * as i6 from "./pipes/dynamic.pipe";
13
13
  export class CoreComponent {
14
14
  constructor() {
15
+ this.rowClick = new EventEmitter();
16
+ this._rowHover$ = new ReplaySubject(1);
17
+ this.rowHover = new EventEmitter();
18
+ this.rowHover$ = this._rowHover$.asObservable().pipe(debounceTime(50), distinctUntilChanged((p, q) => p.index === q.index), tap((event) => this.rowHover.emit(event)), shareReplay(1));
15
19
  this._loading$ = new ReplaySubject(1);
16
20
  this.sortBy$ = new Subject();
17
21
  // tslint:disable-next-line:variable-name
@@ -28,16 +32,18 @@ export class CoreComponent {
28
32
  (config.rows &&
29
33
  !!Object.values(config.rows).find((column) => !!column.mapTo))) {
30
34
  // ...map data to new keys on row...
31
- data = data.map((row) => {
35
+ const newData = [];
36
+ for (let i = 0; i < data.length; i++) {
37
+ const row = data[i];
32
38
  const newKeys = Object.entries(config.columns || config.rows || [])
33
39
  .filter(([key, value]) => !!value.mapTo) // add keys for columns with mapTo config...
34
- .reduce((previousValue, currentValue) => ({
40
+ .reduce((previousValue, [key, value]) => ({
35
41
  ...previousValue,
36
- // tslint:disable-next-line:no-non-null-assertion
37
- [currentValue[0]]: this.nestedValue(row, currentValue[1].mapTo.path, currentValue[1].mapTo?.missingValue),
42
+ [key]: this.nestedValue(row, value.mapTo.path, value.mapTo?.missingValue),
38
43
  }), {});
39
- return { ...row, ...newKeys };
40
- });
44
+ newData[i] = { ...row, ...newKeys };
45
+ }
46
+ data = newData;
41
47
  }
42
48
  return { data, config };
43
49
  }), switchMap((obs) => combineLatest([
@@ -120,6 +126,25 @@ export class CoreComponent {
120
126
  set data(data) {
121
127
  this._data$.next(data);
122
128
  }
129
+ _rowClick(row, index, event) {
130
+ this.rowClick.emit({ row, index, event });
131
+ }
132
+ hoverRow(arg) {
133
+ if (typeof arg === 'number') {
134
+ this.data$
135
+ .pipe(map((data) => data[arg]), take(1))
136
+ .subscribe((row) => this._hoverRow(row, arg));
137
+ }
138
+ else if (typeof arg === 'string') {
139
+ // TODO: implement hover by id
140
+ }
141
+ else {
142
+ this._hoverRow(null, null);
143
+ }
144
+ }
145
+ _hoverRow(row, index, event) {
146
+ this._rowHover$.next({ row, index, event });
147
+ }
123
148
  get loading$() {
124
149
  return this._loading$.pipe(startWith(false), map((value) => (isObservable(value) ? value : of(value))), switchMap((obs) => obs), shareReplay(1));
125
150
  }
@@ -142,11 +167,11 @@ export class CoreComponent {
142
167
  (index === levels.length - 1 ? missingValue : {}), object);
143
168
  }
144
169
  }
145
- CoreComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
146
- CoreComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CoreComponent, selector: "angular-generic-table", inputs: { loading: "loading", page: "page", search: "search", config: "config", data: "data" }, ngImport: i0, template: "<table\n [ngClass]=\"(tableConfig$ | async)?.class || 'table'\"\n [class.table-mobile]=\"(tableConfig$ | async)?.mobileLayout\"\n [class.table-horizontal]=\"(tableConfig$ | async)?.rows\"\n [class.table-loading]=\"loading$ | async\"\n [class.gt-sticky-row-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.row && (tableConfig$ | async)?.rows\n \"\n [class.gt-sticky-column-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.column\n \"\n [attr.aria-busy]=\"(loading$ | async) === true ? true : null\"\n>\n <thead>\n <tr\n *ngIf=\"{\n config: (tableConfig$ | async)!,\n isLoading: loading$ | async\n } as table\"\n >\n <ng-container\n *ngFor=\"let column of table?.config?.columns | keyvalue: columnOrder\"\n >\n <th\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [class.disabled]=\"table.isLoading\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: column.key:true\"\n [class.gt-sortable]=\"true\"\n scope=\"col\"\n >\n <button\n *ngIf=\"column.value?.sortable\"\n class=\"gt-sort\"\n (click)=\"\n table.isLoading || !column.value?.sortable || sort(column.key)\n \"\n >\n <span *ngIf=\"column.value?.header !== false\">{{\n column.value?.header || column.key | capitalCase\n }}</span>\n </button>\n <span\n *ngIf=\"!column.value?.sortable && column.value?.header !== false\"\n >{{ column.value?.header || column.key | capitalCase }}</span\n >\n </th>\n </ng-container>\n <ng-container\n *ngIf=\"\n ((table?.config?.rows | keyvalue: columnOrder) || [])[0] as headerRow\n \"\n >\n <th\n class=\"row-header\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: headerRow.key:true\"\n ngClass=\"{{ headerRow.value?.sortable ? 'sort ' : '' }} {{\n sortBy$ | async | sortClass: headerRow.key\n }} {{ (headerRow.key | dashCase) + '-column' }}\"\n (click)=\"\n table.isLoading || !headerRow.value?.sortable || sort(headerRow.key)\n \"\n scope=\"col\"\n >\n <ng-container *ngIf=\"headerRow?.value?.header !== false\">{{\n headerRow?.value?.header || headerRow.key | capitalCase\n }}</ng-container>\n </th>\n <th\n *ngFor=\"let column of ((table$ | async)?.data || [])[0]\"\n ngClass=\"{{ headerRow.value?.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config?.rows || {})[headerRow.key].templateRef\n ? templateRef\n : (table.config?.rows || {})[headerRow.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: headerRow,\n transform: (table.config?.rows || {})[headerRow.key].transform,\n templateRef: (table.config?.rows || {})[headerRow.key]\n .templateRef,\n index: 0\n }\"\n >\n </ng-container>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody *ngIf=\"loading$ | async; else tableContent\">\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-loading\"></ng-content>\n </td>\n </tr>\n </tbody>\n</table>\n<ng-template #tableContent>\n <ng-container *ngIf=\"(table$ | async)! as table\">\n <tbody *ngIf=\"(table!.data![0] || table!.data!).length > 0; else noData\">\n <ng-container *ngIf=\"table.config.columns\">\n <tr\n *ngFor=\"\n let row of table!.data![(currentPage$ | async) || 0];\n let i = index\n \"\n [attr.id]=\"'tableRow_' + i\"\n >\n <ng-container\n *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\"\n >\n <td\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value?.class\n }}\"\n [attr.data-label]=\"\n table.config?.mobileLayout && column.value?.mobileHeader\n ? column.value?.mobileHeader !== true\n ? column.value?.mobileHeader\n : (column.value?.header || column.key | capitalCase)\n : null\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (searchBy$ | async) &&\n !(table.config?.columns || {})[column.key].templateRef\n ? highlighted\n : (table.config?.columns || {})[column.key].templateRef\n ? templateRef\n : (table.config?.columns || {})[column.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: row,\n column: column,\n search: (searchBy$ | async),\n transform: (table.config?.columns || {})[column.key]\n .transform,\n templateRef: (table.config?.columns || {})[column.key]\n .templateRef,\n index: i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n ></ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n <ng-container *ngIf=\"table.config.rows\">\n <ng-container\n *ngFor=\"\n let row of table?.config?.rows | keyvalue: columnOrder | slice: 1;\n let i = index\n \"\n >\n <tr\n *ngIf=\"!row.value?.hidden\"\n [attr.id]=\"'tableRow_' + i\"\n ngClass=\"{{ (row.key | dashCase) + '-row' }}\"\n >\n <th class=\"row-header\" scope=\"row\">\n {{ row.value?.header || row.key | capitalCase }}\n </th>\n <td\n *ngFor=\"let column of (table?.data || [])[0]; let y = index\"\n ngClass=\"{{ row.value?.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config?.rows || {})[row.key].templateRef\n ? templateRef\n : (table.config?.rows || {})[row.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: row,\n transform: (table.config?.rows || {})[row.key].transform,\n templateRef: (table.config?.rows || {})[row.key].templateRef,\n index: table.config?.rows ? y : i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n >\n </ng-container>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </ng-container>\n</ng-template>\n<ng-template #noData>\n <tbody>\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-no-data\"></ng-content>\n </td>\n </tr>\n </tbody>\n</ng-template>\n<ng-template #highlighted let-row=\"row\" let-column=\"column\" let-search=\"search\">\n <div [innerHTML]=\"row[column.key] | highlight: search\"></div>\n</ng-template>\n<ng-template #rawData let-row=\"row\" let-column=\"column\">\n {{ row[column.key] }}\n</ng-template>\n<ng-template\n #transformData\n let-row=\"row\"\n let-column=\"column\"\n let-transform=\"transform\"\n let-data=\"data\"\n>\n {{ row[column.key] | dynamicPipe: transform.pipe:transform?.args }}\n</ng-template>\n<ng-template\n #templateRef\n let-row=\"row\"\n let-column=\"column\"\n let-index=\"index\"\n let-templateRef=\"templateRef\"\n let-data=\"data\"\n>\n <ng-container\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{\n row: row,\n col: column,\n index: index,\n data: data\n }\"\n ></ng-container>\n</ng-template>\n", directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i1.AsyncPipe, "keyvalue": i1.KeyValuePipe, "dashCase": i2.DashCasePipe, "sortClass": i3.SortClassPipe, "capitalCase": i4.CapitalCasePipe, "slice": i1.SlicePipe, "highlight": i5.HighlightPipe, "dynamicPipe": i6.DynamicPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
147
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CoreComponent, decorators: [{
170
+ CoreComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: CoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
171
+ CoreComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: CoreComponent, selector: "angular-generic-table", inputs: { loading: "loading", page: "page", search: "search", config: "config", data: "data" }, outputs: { rowClick: "rowClick", rowHover: "rowHover" }, ngImport: i0, template: "<table\n [ngClass]=\"(tableConfig$ | async)?.class || 'table'\"\n [class.table-mobile]=\"(tableConfig$ | async)?.mobileLayout\"\n [class.table-horizontal]=\"(tableConfig$ | async)?.rows\"\n [class.table-loading]=\"loading$ | async\"\n [class.gt-sticky-row-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.row && (tableConfig$ | async)?.rows\n \"\n [class.gt-sticky-column-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.column\n \"\n [attr.aria-busy]=\"(loading$ | async) === true ? true : null\"\n>\n <thead>\n <tr\n *ngIf=\"{\n config: (tableConfig$ | async)!,\n isLoading: loading$ | async\n } as table\"\n >\n <ng-container\n *ngFor=\"let column of table?.config?.columns | keyvalue: columnOrder\"\n >\n <th\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [class.disabled]=\"table.isLoading\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: column.key:true\"\n [class.gt-sortable]=\"true\"\n scope=\"col\"\n >\n <button\n *ngIf=\"column.value?.sortable\"\n class=\"gt-sort\"\n (click)=\"\n table.isLoading || !column.value?.sortable || sort(column.key)\n \"\n >\n <span *ngIf=\"column.value?.header !== false\">{{\n column.value?.header || column.key | capitalCase\n }}</span>\n </button>\n <span\n *ngIf=\"!column.value?.sortable && column.value?.header !== false\"\n >{{ column.value?.header || column.key | capitalCase }}</span\n >\n </th>\n </ng-container>\n <ng-container\n *ngIf=\"\n ((table?.config?.rows | keyvalue: columnOrder) || [])[0] as headerRow\n \"\n >\n <th\n class=\"row-header\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: headerRow.key:true\"\n ngClass=\"{{ headerRow.value?.sortable ? 'sort ' : '' }} {{\n sortBy$ | async | sortClass: headerRow.key\n }} {{ (headerRow.key | dashCase) + '-column' }}\"\n (click)=\"\n table.isLoading || !headerRow.value?.sortable || sort(headerRow.key)\n \"\n scope=\"col\"\n >\n <ng-container *ngIf=\"headerRow?.value?.header !== false\">{{\n headerRow?.value?.header || headerRow.key | capitalCase\n }}</ng-container>\n </th>\n <th\n *ngFor=\"let column of ((table$ | async)?.data || [])[0]\"\n ngClass=\"{{ headerRow.value?.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config?.rows || {})[headerRow.key].templateRef\n ? templateRef\n : (table.config?.rows || {})[headerRow.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: headerRow,\n transform: (table.config?.rows || {})[headerRow.key].transform,\n templateRef: (table.config?.rows || {})[headerRow.key]\n .templateRef,\n index: 0\n }\"\n >\n </ng-container>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody *ngIf=\"loading$ | async; else tableContent\">\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-loading\"></ng-content>\n </td>\n </tr>\n </tbody>\n</table>\n<ng-template #tableContent>\n <ng-container *ngIf=\"(table$ | async)! as table\">\n <tbody *ngIf=\"(table!.data![0] || table!.data!).length > 0; else noData\">\n <ng-container *ngIf=\"table.config.columns\">\n <tr\n *ngFor=\"\n let row of table!.data![(currentPage$ | async) || 0];\n let i = index\n \"\n [attr.id]=\"'tableRow_' + i\"\n (click)=\"table?.config?.rowClick && _rowClick(row, i, $event)\"\n (mouseover)=\"table?.config?.rowHover && _hoverRow(row, i, $event)\"\n (mouseout)=\"table?.config?.rowHover && _hoverRow(null, null, $event)\"\n [class.gt-hover]=\"(rowHover$ | async)?.index === i\"\n >\n <ng-container\n *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\"\n >\n <td\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value?.class\n }}\"\n [attr.data-label]=\"\n table.config?.mobileLayout && column.value?.mobileHeader\n ? column.value?.mobileHeader !== true\n ? column.value?.mobileHeader\n : (column.value?.header || column.key | capitalCase)\n : null\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (searchBy$ | async) &&\n !(table.config?.columns || {})[column.key].templateRef\n ? highlighted\n : (table.config?.columns || {})[column.key].templateRef\n ? templateRef\n : (table.config?.columns || {})[column.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: row,\n column: column,\n search: (searchBy$ | async),\n transform: (table.config?.columns || {})[column.key]\n .transform,\n templateRef: (table.config?.columns || {})[column.key]\n .templateRef,\n index: i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n ></ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n <ng-container *ngIf=\"table.config.rows\">\n <ng-container\n *ngFor=\"\n let row of table?.config?.rows | keyvalue: columnOrder | slice: 1;\n let i = index\n \"\n >\n <tr\n *ngIf=\"!row.value?.hidden\"\n [attr.id]=\"'tableRow_' + i\"\n ngClass=\"{{ (row.key | dashCase) + '-row' }}\"\n (click)=\"table?.config?.rowClick && _rowClick(row, i, $event)\"\n (mouseover)=\"table?.config?.rowHover && _hoverRow(row, i, $event)\"\n (mouseout)=\"\n table?.config?.rowHover && _hoverRow(null, null, $event)\n \"\n [class.gt-hover]=\"(rowHover$ | async)?.index === i\"\n >\n <th class=\"row-header\" scope=\"row\">\n {{ row.value?.header || row.key | capitalCase }}\n </th>\n <td\n *ngFor=\"let column of (table?.data || [])[0]; let y = index\"\n ngClass=\"{{ row.value?.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config?.rows || {})[row.key].templateRef\n ? templateRef\n : (table.config?.rows || {})[row.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: row,\n transform: (table.config?.rows || {})[row.key].transform,\n templateRef: (table.config?.rows || {})[row.key].templateRef,\n index: table.config?.rows ? y : i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n >\n </ng-container>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </ng-container>\n</ng-template>\n<ng-template #noData>\n <tbody>\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-no-data\"></ng-content>\n </td>\n </tr>\n </tbody>\n</ng-template>\n<ng-template #highlighted let-row=\"row\" let-column=\"column\" let-search=\"search\">\n <div [innerHTML]=\"row[column.key] | highlight: search\"></div>\n</ng-template>\n<ng-template #rawData let-row=\"row\" let-column=\"column\">\n {{ row[column.key] }}\n</ng-template>\n<ng-template\n #transformData\n let-row=\"row\"\n let-column=\"column\"\n let-transform=\"transform\"\n let-data=\"data\"\n>\n {{ row[column.key] | dynamicPipe: transform.pipe:transform?.args }}\n</ng-template>\n<ng-template\n #templateRef\n let-row=\"row\"\n let-column=\"column\"\n let-index=\"index\"\n let-templateRef=\"templateRef\"\n let-data=\"data\"\n>\n <ng-container\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{\n row: row,\n col: column,\n index: index,\n data: data\n }\"\n ></ng-container>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i2.SortClassPipe, name: "sortClass" }, { kind: "pipe", type: i3.DashCasePipe, name: "dashCase" }, { kind: "pipe", type: i4.HighlightPipe, name: "highlight" }, { kind: "pipe", type: i5.CapitalCasePipe, name: "capitalCase" }, { kind: "pipe", type: i6.DynamicPipe, name: "dynamicPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
172
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: CoreComponent, decorators: [{
148
173
  type: Component,
149
- args: [{ selector: 'angular-generic-table', styles: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<table\n [ngClass]=\"(tableConfig$ | async)?.class || 'table'\"\n [class.table-mobile]=\"(tableConfig$ | async)?.mobileLayout\"\n [class.table-horizontal]=\"(tableConfig$ | async)?.rows\"\n [class.table-loading]=\"loading$ | async\"\n [class.gt-sticky-row-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.row && (tableConfig$ | async)?.rows\n \"\n [class.gt-sticky-column-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.column\n \"\n [attr.aria-busy]=\"(loading$ | async) === true ? true : null\"\n>\n <thead>\n <tr\n *ngIf=\"{\n config: (tableConfig$ | async)!,\n isLoading: loading$ | async\n } as table\"\n >\n <ng-container\n *ngFor=\"let column of table?.config?.columns | keyvalue: columnOrder\"\n >\n <th\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [class.disabled]=\"table.isLoading\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: column.key:true\"\n [class.gt-sortable]=\"true\"\n scope=\"col\"\n >\n <button\n *ngIf=\"column.value?.sortable\"\n class=\"gt-sort\"\n (click)=\"\n table.isLoading || !column.value?.sortable || sort(column.key)\n \"\n >\n <span *ngIf=\"column.value?.header !== false\">{{\n column.value?.header || column.key | capitalCase\n }}</span>\n </button>\n <span\n *ngIf=\"!column.value?.sortable && column.value?.header !== false\"\n >{{ column.value?.header || column.key | capitalCase }}</span\n >\n </th>\n </ng-container>\n <ng-container\n *ngIf=\"\n ((table?.config?.rows | keyvalue: columnOrder) || [])[0] as headerRow\n \"\n >\n <th\n class=\"row-header\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: headerRow.key:true\"\n ngClass=\"{{ headerRow.value?.sortable ? 'sort ' : '' }} {{\n sortBy$ | async | sortClass: headerRow.key\n }} {{ (headerRow.key | dashCase) + '-column' }}\"\n (click)=\"\n table.isLoading || !headerRow.value?.sortable || sort(headerRow.key)\n \"\n scope=\"col\"\n >\n <ng-container *ngIf=\"headerRow?.value?.header !== false\">{{\n headerRow?.value?.header || headerRow.key | capitalCase\n }}</ng-container>\n </th>\n <th\n *ngFor=\"let column of ((table$ | async)?.data || [])[0]\"\n ngClass=\"{{ headerRow.value?.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config?.rows || {})[headerRow.key].templateRef\n ? templateRef\n : (table.config?.rows || {})[headerRow.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: headerRow,\n transform: (table.config?.rows || {})[headerRow.key].transform,\n templateRef: (table.config?.rows || {})[headerRow.key]\n .templateRef,\n index: 0\n }\"\n >\n </ng-container>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody *ngIf=\"loading$ | async; else tableContent\">\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-loading\"></ng-content>\n </td>\n </tr>\n </tbody>\n</table>\n<ng-template #tableContent>\n <ng-container *ngIf=\"(table$ | async)! as table\">\n <tbody *ngIf=\"(table!.data![0] || table!.data!).length > 0; else noData\">\n <ng-container *ngIf=\"table.config.columns\">\n <tr\n *ngFor=\"\n let row of table!.data![(currentPage$ | async) || 0];\n let i = index\n \"\n [attr.id]=\"'tableRow_' + i\"\n >\n <ng-container\n *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\"\n >\n <td\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value?.class\n }}\"\n [attr.data-label]=\"\n table.config?.mobileLayout && column.value?.mobileHeader\n ? column.value?.mobileHeader !== true\n ? column.value?.mobileHeader\n : (column.value?.header || column.key | capitalCase)\n : null\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (searchBy$ | async) &&\n !(table.config?.columns || {})[column.key].templateRef\n ? highlighted\n : (table.config?.columns || {})[column.key].templateRef\n ? templateRef\n : (table.config?.columns || {})[column.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: row,\n column: column,\n search: (searchBy$ | async),\n transform: (table.config?.columns || {})[column.key]\n .transform,\n templateRef: (table.config?.columns || {})[column.key]\n .templateRef,\n index: i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n ></ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n <ng-container *ngIf=\"table.config.rows\">\n <ng-container\n *ngFor=\"\n let row of table?.config?.rows | keyvalue: columnOrder | slice: 1;\n let i = index\n \"\n >\n <tr\n *ngIf=\"!row.value?.hidden\"\n [attr.id]=\"'tableRow_' + i\"\n ngClass=\"{{ (row.key | dashCase) + '-row' }}\"\n >\n <th class=\"row-header\" scope=\"row\">\n {{ row.value?.header || row.key | capitalCase }}\n </th>\n <td\n *ngFor=\"let column of (table?.data || [])[0]; let y = index\"\n ngClass=\"{{ row.value?.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config?.rows || {})[row.key].templateRef\n ? templateRef\n : (table.config?.rows || {})[row.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: row,\n transform: (table.config?.rows || {})[row.key].transform,\n templateRef: (table.config?.rows || {})[row.key].templateRef,\n index: table.config?.rows ? y : i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n >\n </ng-container>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </ng-container>\n</ng-template>\n<ng-template #noData>\n <tbody>\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-no-data\"></ng-content>\n </td>\n </tr>\n </tbody>\n</ng-template>\n<ng-template #highlighted let-row=\"row\" let-column=\"column\" let-search=\"search\">\n <div [innerHTML]=\"row[column.key] | highlight: search\"></div>\n</ng-template>\n<ng-template #rawData let-row=\"row\" let-column=\"column\">\n {{ row[column.key] }}\n</ng-template>\n<ng-template\n #transformData\n let-row=\"row\"\n let-column=\"column\"\n let-transform=\"transform\"\n let-data=\"data\"\n>\n {{ row[column.key] | dynamicPipe: transform.pipe:transform?.args }}\n</ng-template>\n<ng-template\n #templateRef\n let-row=\"row\"\n let-column=\"column\"\n let-index=\"index\"\n let-templateRef=\"templateRef\"\n let-data=\"data\"\n>\n <ng-container\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{\n row: row,\n col: column,\n index: index,\n data: data\n }\"\n ></ng-container>\n</ng-template>\n" }]
174
+ args: [{ selector: 'angular-generic-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<table\n [ngClass]=\"(tableConfig$ | async)?.class || 'table'\"\n [class.table-mobile]=\"(tableConfig$ | async)?.mobileLayout\"\n [class.table-horizontal]=\"(tableConfig$ | async)?.rows\"\n [class.table-loading]=\"loading$ | async\"\n [class.gt-sticky-row-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.row && (tableConfig$ | async)?.rows\n \"\n [class.gt-sticky-column-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.column\n \"\n [attr.aria-busy]=\"(loading$ | async) === true ? true : null\"\n>\n <thead>\n <tr\n *ngIf=\"{\n config: (tableConfig$ | async)!,\n isLoading: loading$ | async\n } as table\"\n >\n <ng-container\n *ngFor=\"let column of table?.config?.columns | keyvalue: columnOrder\"\n >\n <th\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [class.disabled]=\"table.isLoading\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: column.key:true\"\n [class.gt-sortable]=\"true\"\n scope=\"col\"\n >\n <button\n *ngIf=\"column.value?.sortable\"\n class=\"gt-sort\"\n (click)=\"\n table.isLoading || !column.value?.sortable || sort(column.key)\n \"\n >\n <span *ngIf=\"column.value?.header !== false\">{{\n column.value?.header || column.key | capitalCase\n }}</span>\n </button>\n <span\n *ngIf=\"!column.value?.sortable && column.value?.header !== false\"\n >{{ column.value?.header || column.key | capitalCase }}</span\n >\n </th>\n </ng-container>\n <ng-container\n *ngIf=\"\n ((table?.config?.rows | keyvalue: columnOrder) || [])[0] as headerRow\n \"\n >\n <th\n class=\"row-header\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: headerRow.key:true\"\n ngClass=\"{{ headerRow.value?.sortable ? 'sort ' : '' }} {{\n sortBy$ | async | sortClass: headerRow.key\n }} {{ (headerRow.key | dashCase) + '-column' }}\"\n (click)=\"\n table.isLoading || !headerRow.value?.sortable || sort(headerRow.key)\n \"\n scope=\"col\"\n >\n <ng-container *ngIf=\"headerRow?.value?.header !== false\">{{\n headerRow?.value?.header || headerRow.key | capitalCase\n }}</ng-container>\n </th>\n <th\n *ngFor=\"let column of ((table$ | async)?.data || [])[0]\"\n ngClass=\"{{ headerRow.value?.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config?.rows || {})[headerRow.key].templateRef\n ? templateRef\n : (table.config?.rows || {})[headerRow.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: headerRow,\n transform: (table.config?.rows || {})[headerRow.key].transform,\n templateRef: (table.config?.rows || {})[headerRow.key]\n .templateRef,\n index: 0\n }\"\n >\n </ng-container>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody *ngIf=\"loading$ | async; else tableContent\">\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-loading\"></ng-content>\n </td>\n </tr>\n </tbody>\n</table>\n<ng-template #tableContent>\n <ng-container *ngIf=\"(table$ | async)! as table\">\n <tbody *ngIf=\"(table!.data![0] || table!.data!).length > 0; else noData\">\n <ng-container *ngIf=\"table.config.columns\">\n <tr\n *ngFor=\"\n let row of table!.data![(currentPage$ | async) || 0];\n let i = index\n \"\n [attr.id]=\"'tableRow_' + i\"\n (click)=\"table?.config?.rowClick && _rowClick(row, i, $event)\"\n (mouseover)=\"table?.config?.rowHover && _hoverRow(row, i, $event)\"\n (mouseout)=\"table?.config?.rowHover && _hoverRow(null, null, $event)\"\n [class.gt-hover]=\"(rowHover$ | async)?.index === i\"\n >\n <ng-container\n *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\"\n >\n <td\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value?.class\n }}\"\n [attr.data-label]=\"\n table.config?.mobileLayout && column.value?.mobileHeader\n ? column.value?.mobileHeader !== true\n ? column.value?.mobileHeader\n : (column.value?.header || column.key | capitalCase)\n : null\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (searchBy$ | async) &&\n !(table.config?.columns || {})[column.key].templateRef\n ? highlighted\n : (table.config?.columns || {})[column.key].templateRef\n ? templateRef\n : (table.config?.columns || {})[column.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: row,\n column: column,\n search: (searchBy$ | async),\n transform: (table.config?.columns || {})[column.key]\n .transform,\n templateRef: (table.config?.columns || {})[column.key]\n .templateRef,\n index: i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n ></ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n <ng-container *ngIf=\"table.config.rows\">\n <ng-container\n *ngFor=\"\n let row of table?.config?.rows | keyvalue: columnOrder | slice: 1;\n let i = index\n \"\n >\n <tr\n *ngIf=\"!row.value?.hidden\"\n [attr.id]=\"'tableRow_' + i\"\n ngClass=\"{{ (row.key | dashCase) + '-row' }}\"\n (click)=\"table?.config?.rowClick && _rowClick(row, i, $event)\"\n (mouseover)=\"table?.config?.rowHover && _hoverRow(row, i, $event)\"\n (mouseout)=\"\n table?.config?.rowHover && _hoverRow(null, null, $event)\n \"\n [class.gt-hover]=\"(rowHover$ | async)?.index === i\"\n >\n <th class=\"row-header\" scope=\"row\">\n {{ row.value?.header || row.key | capitalCase }}\n </th>\n <td\n *ngFor=\"let column of (table?.data || [])[0]; let y = index\"\n ngClass=\"{{ row.value?.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config?.rows || {})[row.key].templateRef\n ? templateRef\n : (table.config?.rows || {})[row.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: row,\n transform: (table.config?.rows || {})[row.key].transform,\n templateRef: (table.config?.rows || {})[row.key].templateRef,\n index: table.config?.rows ? y : i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n >\n </ng-container>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </ng-container>\n</ng-template>\n<ng-template #noData>\n <tbody>\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-no-data\"></ng-content>\n </td>\n </tr>\n </tbody>\n</ng-template>\n<ng-template #highlighted let-row=\"row\" let-column=\"column\" let-search=\"search\">\n <div [innerHTML]=\"row[column.key] | highlight: search\"></div>\n</ng-template>\n<ng-template #rawData let-row=\"row\" let-column=\"column\">\n {{ row[column.key] }}\n</ng-template>\n<ng-template\n #transformData\n let-row=\"row\"\n let-column=\"column\"\n let-transform=\"transform\"\n let-data=\"data\"\n>\n {{ row[column.key] | dynamicPipe: transform.pipe:transform?.args }}\n</ng-template>\n<ng-template\n #templateRef\n let-row=\"row\"\n let-column=\"column\"\n let-index=\"index\"\n let-templateRef=\"templateRef\"\n let-data=\"data\"\n>\n <ng-container\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{\n row: row,\n col: column,\n index: index,\n data: data\n }\"\n ></ng-container>\n</ng-template>\n" }]
150
175
  }], propDecorators: { loading: [{
151
176
  type: Input
152
177
  }], page: [{
@@ -157,5 +182,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
157
182
  type: Input
158
183
  }], data: [{
159
184
  type: Input
185
+ }], rowClick: [{
186
+ type: Output
187
+ }], rowHover: [{
188
+ type: Output
160
189
  }] } });
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixLQUFLLEVBQ0wsWUFBWSxFQUVaLEVBQUUsRUFDRixhQUFhLEVBQ2IsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBR2QsT0FBTyxFQUNMLEdBQUcsRUFDSCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7QUFXdEQsTUFBTSxPQUFPLGFBQWE7SUFOMUI7UUF1Q1UsY0FBUyxHQUNmLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLFlBQU8sR0FBdUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUk1Qyx5Q0FBeUM7UUFDakMsZUFBVSxHQUNoQixJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixjQUFTLEdBQThCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN6RCxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQ2IsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FB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RyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ25ELE1BQU0sQ0FDUCxDQUFDO0lBQ0osQ0FBQzs7MkdBek5VLGFBQWE7K0ZBQWIsYUFBYSw2SkNqQzFCLDAxUUFvUEE7NEZEbk5hLGFBQWE7a0JBTnpCLFNBQVM7K0JBQ0UsdUJBQXVCLFVBRXpCLEVBQUUsbUJBQ08sdUJBQXVCLENBQUMsTUFBTTs4QkFHbEMsT0FBTztzQkFBbkIsS0FBSztnQkFJRixJQUFJO3NCQURQLEtBQUs7Z0JBTUYsTUFBTTtzQkFEVCxLQUFLO2dCQU1GLE1BQU07c0JBRFQsS0FBSztnQkFNRixJQUFJO3NCQURQLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBFTVBUWSxcbiAgaXNPYnNlcnZhYmxlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgUmVwbGF5U3ViamVjdCxcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHdpdGhMYXRlc3RGcm9tLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT3JkZXIgfSBmcm9tICcuL2VudW1zL29yZGVyLmVudW0nO1xuaW1wb3J0IHsgY2h1bmssIHNlYXJjaCB9IGZyb20gJy4vdXRpbGl0aWVzL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBUYWJsZVJvdyB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLXJvdy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVTb3J0IH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtc29ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVNZXRhIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtbWV0YS5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhbmd1bGFyLWdlbmVyaWMtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb3JlQ29tcG9uZW50IHtcbiAgQElucHV0KCkgc2V0IGxvYWRpbmcoaXNMb2FkaW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmckLm5leHQoaXNMb2FkaW5nKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcGFnZShwYWdlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9jdXJyZW50UGFnZSQubmV4dChwYWdlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBzZWFyY2goc3RyaW5nOiBPYnNlcnZhYmxlPHN0cmluZz4gfCBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fc2VhcmNoQnkkLm5leHQoc3RyaW5nKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBjb25maWcoY29uZmlnOiBPYnNlcnZhYmxlPFRhYmxlQ29uZmlnPiB8IFRhYmxlQ29uZmlnKSB7XG4gICAgdGhpcy5fdGFibGVDb25maWckLm5leHQoY29uZmlnKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKGRhdGE6IE9ic2VydmFibGU8QXJyYXk8VGFibGVSb3c+PiB8IEFycmF5PFRhYmxlUm93Pikge1xuICAgIHRoaXMuX2RhdGEkLm5leHQoZGF0YSk7XG4gIH1cblxuICBnZXQgbG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmckLnBpcGUoXG4gICAgICBzdGFydFdpdGgoZmFsc2UpLFxuICAgICAgbWFwKCh2YWx1ZSkgPT4gKGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSA6IG9mKHZhbHVlKSkpLFxuICAgICAgc3dpdGNoTWFwKChvYnMpID0+IG9icyksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkaW5nJDogUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbj4gPVxuICAgIG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICBzb3J0QnkkOiBTdWJqZWN0PFRhYmxlU29ydD4gPSBuZXcgU3ViamVjdCgpO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF9zb3J0Qnk6IFRhYmxlU29ydCB8IHVuZGVmaW5lZDtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF9zZWFyY2hCeSQ6IFJlcGxheVN1YmplY3Q8T2JzZXJ2YWJsZTxzdHJpbmc+IHwgc3RyaW5nIHwgbnVsbD4gPVxuICAgIG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICBzZWFyY2hCeSQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4gPSB0aGlzLl9zZWFyY2hCeSQucGlwZShcbiAgICBzdGFydFdpdGgoJycpLFxuICAgIG1hcCgodmFsdWUpID0+IChpc09ic2VydmFibGUodmFsdWUpID8gdmFsdWUgOiBvZih2YWx1ZSkpKSxcbiAgICBzd2l0Y2hNYXAoKG9icykgPT4gb2JzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gIHByaXZhdGUgX3RhYmxlQ29uZmlnJDogUmVwbGF5U3ViamVjdDxUYWJsZUNvbmZpZyB8IE9ic2VydmFibGU8VGFibGVDb25maWc+PiA9XG4gICAgbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gIHRhYmxlQ29uZmlnJDogT2JzZXJ2YWJsZTxUYWJsZUNvbmZpZz4gPSB0aGlzLl90YWJsZUNvbmZpZyQucGlwZShcbiAgICBtYXAoKHZhbHVlKSA9PiAoaXNPYnNlcnZhYmxlKHZhbHVlKSA/IHZhbHVlIDogb2YodmFsdWUpKSksXG4gICAgc3dpdGNoTWFwKChvYnMpID0+IG9icyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBwcml2YXRlIF9kYXRhJDogUmVwbGF5U3ViamVjdDxBcnJheTxUYWJsZVJvdz4gfCBPYnNlcnZhYmxlPEFycmF5PFRhYmxlUm93Pj4+ID1cbiAgICBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgZGF0YSQ6IE9ic2VydmFibGU8QXJyYXk8VGFibGVSb3c+PiA9IHRoaXMuX2RhdGEkLnBpcGUoXG4gICAgbWFwKCh2YWx1ZSkgPT4gKGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSA6IG9mKHZhbHVlKSkpLFxuICAgIHN3aXRjaE1hcCgob2JzKSA9PiBjb21iaW5lTGF0ZXN0KFtvYnNdKSksXG4gICAgd2l0aExhdGVzdEZyb20odGhpcy50YWJsZUNvbmZpZyQpLFxuICAgIG1hcCgoW1tkYXRhXSwgY29uZmlnXSkgPT4ge1xuICAgICAgLy8gaWYgY29sdW1ucyBvciByb3dzIGNvbnRhaW5zIGNvbmZpZyBmb3IgbWFwVG8uLi5cbiAgICAgIGlmIChcbiAgICAgICAgKGNvbmZpZy5jb2x1bW5zICYmXG4gICAgICAgICAgISFPYmplY3QudmFsdWVzKGNvbmZpZy5jb2x1bW5zKS5maW5kKChjb2x1bW4pID0+ICEhY29sdW1uLm1hcFRvKSkgfHxcbiAgICAgICAgKGNvbmZpZy5yb3dzICYmXG4gICAgICAgICAgISFPYmplY3QudmFsdWVzKGNvbmZpZy5yb3dzKS5maW5kKChjb2x1bW4pID0+ICEhY29sdW1uLm1hcFRvKSlcbiAgICAgICkge1xuICAgICAgICAvLyAuLi5tYXAgZGF0YSB0byBuZXcga2V5cyBvbiByb3cuLi5cbiAgICAgICAgZGF0YSA9IGRhdGEubWFwKChyb3cpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdLZXlzID0gT2JqZWN0LmVudHJpZXMoY29uZmlnLmNvbHVtbnMgfHwgY29uZmlnLnJvd3MgfHwgW10pXG4gICAgICAgICAgICAuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+ICEhdmFsdWUubWFwVG8pIC8vIGFkZCBrZXlzIGZvciBjb2x1bW5zIHdpdGggbWFwVG8gY29uZmlnLi4uXG4gICAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgICAocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnByZXZpb3VzVmFsdWUsXG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgIFtjdXJyZW50VmFsdWVbMF1dOiB0aGlzLm5lc3RlZFZhbHVlKFxuICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlWzFdLm1hcFRvIS5wYXRoLFxuICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlWzFdLm1hcFRvPy5taXNzaW5nVmFsdWVcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ucm93LCAuLi5uZXdLZXlzIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZGF0YSwgY29uZmlnIH07XG4gICAgfSksXG4gICAgc3dpdGNoTWFwKChvYnMpID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgb2Yob2JzKSxcbiAgICAgICAgdGhpcy5zb3J0QnkkLnBpcGUoc3RhcnRXaXRoKEVNUFRZKSksXG4gICAgICAgIHRoaXMuc2VhcmNoQnkkLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW3RhYmxlLCBzb3J0QnksIHNlYXJjaEJ5XSkgPT4ge1xuICAgICAgLy8gY3JlYXRlIGEgbmV3IGFycmF5IHJlZmVyZW5jZSBhbmQgc29ydCBuZXcgYXJyYXkgKHByZXZlbnQgbXV0YXRpbmcgZXhpc3Rpbmcgc3RhdGUpXG4gICAgICB0YWJsZS5kYXRhID0gWy4uLnRhYmxlLmRhdGFdO1xuICAgICAgcmV0dXJuICFzb3J0QnlcbiAgICAgICAgPyBzZWFyY2hCeVxuICAgICAgICAgID8gc2VhcmNoKHNlYXJjaEJ5LCBmYWxzZSwgdGFibGUuZGF0YSwgdGFibGUuY29uZmlnKVxuICAgICAgICAgIDogdGFibGUuZGF0YVxuICAgICAgICA6IChzZWFyY2hCeVxuICAgICAgICAgICAgPyBzZWFyY2goc2VhcmNoQnksIGZhbHNlLCB0YWJsZS5kYXRhLCB0YWJsZS5jb25maWcpXG4gICAgICAgICAgICA6IHRhYmxlLmRhdGFcbiAgICAgICAgICApPy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAvLyBUT0RPOiBpbXByb3ZlIGxvZ2ljXG4gICAgICAgICAgICBjb25zdCB0eXBlZCA9IHNvcnRCeSBhcyBUYWJsZVNvcnQ7XG4gICAgICAgICAgICByZXR1cm4gYVt0eXBlZC5zb3J0QnldID4gYlt0eXBlZC5zb3J0QnldXG4gICAgICAgICAgICAgID8gdHlwZWQuc29ydEJ5T3JkZXIgPT09IE9yZGVyLkFTQ1xuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogLTFcbiAgICAgICAgICAgICAgOiBiW3R5cGVkLnNvcnRCeV0gPiBhW3R5cGVkLnNvcnRCeV1cbiAgICAgICAgICAgICAgPyB0eXBlZC5zb3J0QnlPcmRlciA9PT0gT3JkZXIuQVNDXG4gICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgIDogMVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgfSk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICB0YWJsZSQ6IE9ic2VydmFibGU8VGFibGVNZXRhPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZGF0YSQsXG4gICAgdGhpcy50YWJsZUNvbmZpZyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbc29ydGVkLCBjb25maWddKSA9PiB7XG4gICAgICAvLyBpZiBwYWdpbmF0aW9uIGlzIGRpc2FibGVkLi4uXG4gICAgICBpZiAoIWNvbmZpZy5wYWdpbmF0aW9uIHx8IGNvbmZpZy5wYWdpbmF0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyAuLi5yZXR1cm4gdW5hbHRlcmVkIGFycmF5XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogW3NvcnRlZF0sXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGluZm86IHsgcmVjb3Jkczogc29ydGVkLmxlbmd0aCwgcGFnZVRvdGFsOiAxIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gcmVjb3JkIHNldFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogY2h1bmsoc29ydGVkLCArKGNvbmZpZy5wYWdpbmF0aW9uLmxlbmd0aCB8fCAwKSksXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5mbzoge1xuICAgICAgICAgIHJlY29yZHM6IHNvcnRlZC5sZW5ndGgsXG4gICAgICAgICAgcGFnZVRvdGFsOiBNYXRoLmNlaWwoXG4gICAgICAgICAgICBzb3J0ZWQubGVuZ3RoIC8gKyhjb25maWcucGFnaW5hdGlvbi5sZW5ndGggfHwgMClcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRQYWdlJDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuICBjdXJyZW50UGFnZSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9jdXJyZW50UGFnZSQsIHRoaXMudGFibGUkXSkucGlwZShcbiAgICBtYXAoKFtwYWdlLCB0YWJsZV06IGFueSkgPT4ge1xuICAgICAgLy8gZGV0ZXJtaW5lIGxhc3QgcGFnZVxuICAgICAgY29uc3QgbGFzdFBhZ2UgPVxuICAgICAgICBNYXRoLmNlaWwoXG4gICAgICAgICAgdGFibGUuaW5mby5yZWNvcmRzIC9cbiAgICAgICAgICAgICh0YWJsZS5jb25maWc/LnBhZ2luYXRpb24/Lmxlbmd0aCB8fCB0YWJsZS5pbmZvLnJlY29yZHMpXG4gICAgICAgICkgLSAxO1xuICAgICAgLy8gZGV0ZXJtaW5lIG1heC9taW4gcG9zaXRpb25cbiAgICAgIHJldHVybiArcGFnZSA8IDAgPyAwIDogK3BhZ2UgPiBsYXN0UGFnZSA/IGxhc3RQYWdlIDogK3BhZ2U7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBjb2xzcGFuJCA9IHRoaXMudGFibGVDb25maWckLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjb25maWcpID0+XG4gICAgICBjb25maWcuY29sdW1uc1xuICAgICAgICA/IG9mKFxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhjb25maWcuY29sdW1ucyB8fCBjb25maWcucm93cyB8fCB7fSkuZmlsdGVyKFxuICAgICAgICAgICAgICAodmFsdWUpID0+IHZhbHVlLmhpZGRlbiAhPT0gdHJ1ZVxuICAgICAgICAgICAgKS5sZW5ndGhcbiAgICAgICAgICApXG4gICAgICAgIDogdGhpcy5kYXRhJC5waXBlKG1hcCgoZGF0YSkgPT4gZGF0YS5sZW5ndGggKyAxKSlcbiAgICApXG4gICk7XG5cbiAgc29ydChwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV3U29ydE9yZGVyID1cbiAgICAgIHRoaXMuX3NvcnRCeT8uc29ydEJ5ICE9PSBwcm9wZXJ0eSB8fFxuICAgICAgdGhpcy5fc29ydEJ5Py5zb3J0QnlPcmRlciA9PT0gT3JkZXIuREVTQyB8fFxuICAgICAgIXRoaXMuX3NvcnRCeS5zb3J0QnlPcmRlclxuICAgICAgICA/IE9yZGVyLkFTQ1xuICAgICAgICA6IE9yZGVyLkRFU0M7XG4gICAgY29uc3QgbmV3U29ydEJ5ID0ge1xuICAgICAgc29ydEJ5OiBwcm9wZXJ0eSxcbiAgICAgIHNvcnRCeU9yZGVyOiBuZXdTb3J0T3JkZXIsXG4gICAgfTtcbiAgICB0aGlzLnNvcnRCeSQubmV4dChuZXdTb3J0QnkpO1xuICAgIHRoaXMuX3NvcnRCeSA9IG5ld1NvcnRCeTtcbiAgfVxuXG4gIGNvbHVtbk9yZGVyID0gKFxuICAgIGE6IEtleVZhbHVlPHN0cmluZywgVGFibGVDb2x1bW4+LFxuICAgIGI6IEtleVZhbHVlPHN0cmluZywgVGFibGVDb2x1bW4+XG4gICk6IG51bWJlciA9PiB7XG4gICAgcmV0dXJuIChhLnZhbHVlLm9yZGVyIHx8IDApIC0gKGIudmFsdWUub3JkZXIgfHwgMCk7XG4gIH07XG5cbiAgbmVzdGVkVmFsdWUoXG4gICAgb2JqZWN0OiBhbnksXG4gICAgbWFwVG86IHN0cmluZyxcbiAgICBtaXNzaW5nVmFsdWU6IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsXG4gICk6IHVua25vd24ge1xuICAgIGNvbnN0IGxldmVscyA9IG1hcFRvLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIGxldmVscy5yZWR1Y2UoXG4gICAgICAocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlLCBpbmRleCkgPT5cbiAgICAgICAgcHJldmlvdXNWYWx1ZVtjdXJyZW50VmFsdWVdIHx8XG4gICAgICAgIChpbmRleCA9PT0gbGV2ZWxzLmxlbmd0aCAtIDEgPyBtaXNzaW5nVmFsdWUgOiB7fSksXG4gICAgICBvYmplY3RcbiAgICApO1xuICB9XG59XG4iLCI8dGFibGVcbiAgW25nQ2xhc3NdPVwiKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8uY2xhc3MgfHwgJ3RhYmxlJ1wiXG4gIFtjbGFzcy50YWJsZS1tb2JpbGVdPVwiKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8ubW9iaWxlTGF5b3V0XCJcbiAgW2NsYXNzLnRhYmxlLWhvcml6b250YWxdPVwiKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8ucm93c1wiXG4gIFtjbGFzcy50YWJsZS1sb2FkaW5nXT1cImxvYWRpbmckIHwgYXN5bmNcIlxuICBbY2xhc3MuZ3Qtc3RpY2t5LXJvdy1oZWFkZXJdPVwiXG4gICAgKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8uc3RpY2t5SGVhZGVycz8ucm93ICYmICh0YWJsZUNvbmZpZyQgfCBhc3luYyk/LnJvd3NcbiAgXCJcbiAgW2NsYXNzLmd0LXN0aWNreS1jb2x1bW4taGVhZGVyXT1cIlxuICAgICh0YWJsZUNvbmZpZyQgfCBhc3luYyk/LnN0aWNreUhlYWRlcnM/LmNvbHVtblxuICBcIlxuICBbYXR0ci5hcmlhLWJ1c3ldPVwiKGxvYWRpbmckIHwgYXN5bmMpID09PSB0cnVlID8gdHJ1ZSA6IG51bGxcIlxuPlxuICA8dGhlYWQ+XG4gICAgPHRyXG4gICAgICAqbmdJZj1cIntcbiAgICAgICAgY29uZmlnOiAodGFibGVDb25maWckIHwgYXN5bmMpISxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jXG4gICAgICB9IGFzIHRhYmxlXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGU/LmNvbmZpZz8uY29sdW1ucyB8IGtleXZhbHVlOiBjb2x1bW5PcmRlclwiXG4gICAgICA+XG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi52YWx1ZT8uaGlkZGVuXCJcbiAgICAgICAgICBuZ0NsYXNzPVwie3sgKGNvbHVtbi5rZXkgfCBkYXNoQ2FzZSkgKyAnLWNvbHVtbicgfX0ge3tcbiAgICAgICAgICAgIGNvbHVtbi52YWx1ZS5jbGFzc1xuICAgICAgICAgIH19XCJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwidGFibGUuaXNMb2FkaW5nXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwic29ydEJ5JCB8IGFzeW5jIHwgc29ydENsYXNzOiBjb2x1bW4ua2V5OnRydWVcIlxuICAgICAgICAgIFtjbGFzcy5ndC1zb3J0YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImNvbHVtbi52YWx1ZT8uc29ydGFibGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJndC1zb3J0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgdGFibGUuaXNMb2FkaW5nIHx8ICFjb2x1bW4udmFsdWU/LnNvcnRhYmxlIHx8IHNvcnQoY29sdW1uLmtleSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4udmFsdWU/LmhlYWRlciAhPT0gZmFsc2VcIj57e1xuICAgICAgICAgICAgICBjb2x1bW4udmFsdWU/LmhlYWRlciB8fCBjb2x1bW4ua2V5IHwgY2FwaXRhbENhc2VcbiAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIiFjb2x1bW4udmFsdWU/LnNvcnRhYmxlICYmIGNvbHVtbi52YWx1ZT8uaGVhZGVyICE9PSBmYWxzZVwiXG4gICAgICAgICAgICA+e3sgY29sdW1uLnZhbHVlPy5oZWFkZXIgfHwgY29sdW1uLmtleSB8IGNhcGl0YWxDYXNlIH19PC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICA8L3RoPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgKCh0YWJsZT8uY29uZmlnPy5yb3dzIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyKSB8fCBbXSlbMF0gYXMgaGVhZGVyUm93XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDx0aFxuICAgICAgICAgIGNsYXNzPVwicm93LWhlYWRlclwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cInNvcnRCeSQgfCBhc3luYyB8IHNvcnRDbGFzczogaGVhZGVyUm93LmtleTp0cnVlXCJcbiAgICAgICAgICBuZ0NsYXNzPVwie3sgaGVhZGVyUm93LnZhbHVlPy5zb3J0YWJsZSA/ICdzb3J0ICcgOiAnJyB9fSB7e1xuICAgICAgICAgICAgc29ydEJ5JCB8IGFzeW5jIHwgc29ydENsYXNzOiBoZWFkZXJSb3cua2V5XG4gICAgICAgICAgfX0ge3sgKGhlYWRlclJvdy5rZXkgfCBkYXNoQ2FzZSkgKyAnLWNvbHVtbicgfX1cIlxuICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgIHRhYmxlLmlzTG9hZGluZyB8fCAhaGVhZGVyUm93LnZhbHVlPy5zb3J0YWJsZSB8fCBzb3J0KGhlYWRlclJvdy5rZXkpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyUm93Py52YWx1ZT8uaGVhZGVyICE9PSBmYWxzZVwiPnt7XG4gICAgICAgICAgICBoZWFkZXJSb3c/LnZhbHVlPy5oZWFkZXIgfHwgaGVhZGVyUm93LmtleSB8IGNhcGl0YWxDYXNlXG4gICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiAoKHRhYmxlJCB8IGFzeW5jKT8uZGF0YSB8fCBbXSlbMF1cIlxuICAgICAgICAgIG5nQ2xhc3M9XCJ7eyBoZWFkZXJSb3cudmFsdWU/LmNsYXNzIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIlxuICAgICAgICAgICAgICAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XS50ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgID8gdGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICA6ICh0YWJsZS5jb25maWc/LnJvd3MgfHwge30pW2hlYWRlclJvdy5rZXldLnRyYW5zZm9ybVxuICAgICAgICAgICAgICAgID8gdHJhbnNmb3JtRGF0YVxuICAgICAgICAgICAgICAgIDogcmF3RGF0YVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgIHJvdzogY29sdW1uLFxuICAgICAgICAgICAgICBjb2x1bW46IGhlYWRlclJvdyxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XS50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XVxuICAgICAgICAgICAgICAgIC50ZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgaW5kZXg6IDBcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90aD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keSAqbmdJZj1cImxvYWRpbmckIHwgYXN5bmM7IGVsc2UgdGFibGVDb250ZW50XCI+XG4gICAgPHRyPlxuICAgICAgPHRkIGNsYXNzPVwicC0wXCIgW2NvbFNwYW5dPVwiY29sc3BhbiQgfCBhc3luY1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIudGFibGUtbG9hZGluZ1wiPjwvbmctY29udGVudD5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG48bmctdGVtcGxhdGUgI3RhYmxlQ29udGVudD5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih0YWJsZSQgfCBhc3luYykhIGFzIHRhYmxlXCI+XG4gICAgPHRib2R5ICpuZ0lmPVwiKHRhYmxlIS5kYXRhIVswXSB8fCB0YWJsZSEuZGF0YSEpLmxlbmd0aCA+IDA7IGVsc2Ugbm9EYXRhXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGUuY29uZmlnLmNvbHVtbnNcIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgcm93IG9mIHRhYmxlIS5kYXRhIVsoY3VycmVudFBhZ2UkIHwgYXN5bmMpIHx8IDBdO1xuICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F0dHIuaWRdPVwiJ3RhYmxlUm93XycgKyBpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGUuY29uZmlnPy5jb2x1bW5zIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uLnZhbHVlPy5oaWRkZW5cIlxuICAgICAgICAgICAgICBuZ0NsYXNzPVwie3sgKGNvbHVtbi5rZXkgfCBkYXNoQ2FzZSkgKyAnLWNvbHVtbicgfX0ge3tcbiAgICAgICAgICAgICAgICBjb2x1bW4udmFsdWU/LmNsYXNzXG4gICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICB0YWJsZS5jb25maWc/Lm1vYmlsZUxheW91dCAmJiBjb2x1bW4udmFsdWU/Lm1vYmlsZUhlYWRlclxuICAgICAgICAgICAgICAgICAgPyBjb2x1bW4udmFsdWU/Lm1vYmlsZUhlYWRlciAhPT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi52YWx1ZT8ubW9iaWxlSGVhZGVyXG4gICAgICAgICAgICAgICAgICAgIDogKGNvbHVtbi52YWx1ZT8uaGVhZGVyIHx8IGNvbHVtbi5rZXkgfCBjYXBpdGFsQ2FzZSlcbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiXG4gICAgICAgICAgICAgICAgICAoc2VhcmNoQnkkIHwgYXN5bmMpICYmXG4gICAgICAgICAgICAgICAgICAhKHRhYmxlLmNvbmZpZz8uY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgPyBoaWdobGlnaHRlZFxuICAgICAgICAgICAgICAgICAgICA6ICh0YWJsZS5jb25maWc/LmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldLnRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgICAgID8gdGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgOiAodGFibGUuY29uZmlnPy5jb2x1bW5zIHx8IHt9KVtjb2x1bW4ua2V5XS50cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICAgICAgPyB0cmFuc2Zvcm1EYXRhXG4gICAgICAgICAgICAgICAgICAgIDogcmF3RGF0YVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICBzZWFyY2g6IChzZWFyY2hCeSQgfCBhc3luYyksXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICh0YWJsZS5jb25maWc/LmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldXG4gICAgICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZjogKHRhYmxlLmNvbmZpZz8uY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV1cbiAgICAgICAgICAgICAgICAgICAgLnRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YWJsZS5kYXRhWyhjdXJyZW50UGFnZSQgfCBhc3luYykgfHwgMF1cbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlLmNvbmZpZy5yb3dzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgIGxldCByb3cgb2YgdGFibGU/LmNvbmZpZz8ucm93cyB8IGtleXZhbHVlOiBjb2x1bW5PcmRlciB8IHNsaWNlOiAxO1xuICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8dHJcbiAgICAgICAgICAgICpuZ0lmPVwiIXJvdy52YWx1ZT8uaGlkZGVuXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cIid0YWJsZVJvd18nICsgaVwiXG4gICAgICAgICAgICBuZ0NsYXNzPVwie3sgKHJvdy5rZXkgfCBkYXNoQ2FzZSkgKyAnLXJvdycgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cInJvdy1oZWFkZXJcIiBzY29wZT1cInJvd1wiPlxuICAgICAgICAgICAgICB7eyByb3cudmFsdWU/LmhlYWRlciB8fCByb3cua2V5IHwgY2FwaXRhbENhc2UgfX1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiAodGFibGU/LmRhdGEgfHwgW10pWzBdOyBsZXQgeSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgbmdDbGFzcz1cInt7IHJvdy52YWx1ZT8uY2xhc3MgfX1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiXG4gICAgICAgICAgICAgICAgICAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtyb3cua2V5XS50ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgICAgICA/IHRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgICAgIDogKHRhYmxlLmNvbmZpZz8ucm93cyB8fCB7fSlbcm93LmtleV0udHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgICAgID8gdHJhbnNmb3JtRGF0YVxuICAgICAgICAgICAgICAgICAgICA6IHJhd0RhdGFcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICByb3c6IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIGNvbHVtbjogcm93LFxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtyb3cua2V5XS50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZjogKHRhYmxlLmNvbmZpZz8ucm93cyB8fCB7fSlbcm93LmtleV0udGVtcGxhdGVSZWYsXG4gICAgICAgICAgICAgICAgICBpbmRleDogdGFibGUuY29uZmlnPy5yb3dzID8geSA6IGksXG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YWJsZS5kYXRhWyhjdXJyZW50UGFnZSQgfCBhc3luYykgfHwgMF1cbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3Rib2R5PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI25vRGF0YT5cbiAgPHRib2R5PlxuICAgIDx0cj5cbiAgICAgIDx0ZCBjbGFzcz1cInAtMFwiIFtjb2xTcGFuXT1cImNvbHNwYW4kIHwgYXN5bmNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnRhYmxlLW5vLWRhdGFcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNoaWdobGlnaHRlZCBsZXQtcm93PVwicm93XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC1zZWFyY2g9XCJzZWFyY2hcIj5cbiAgPGRpdiBbaW5uZXJIVE1MXT1cInJvd1tjb2x1bW4ua2V5XSB8IGhpZ2hsaWdodDogc2VhcmNoXCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyYXdEYXRhIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIHt7IHJvd1tjb2x1bW4ua2V5XSB9fVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZVxuICAjdHJhbnNmb3JtRGF0YVxuICBsZXQtcm93PVwicm93XCJcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiXG4gIGxldC10cmFuc2Zvcm09XCJ0cmFuc2Zvcm1cIlxuICBsZXQtZGF0YT1cImRhdGFcIlxuPlxuICB7eyByb3dbY29sdW1uLmtleV0gfCBkeW5hbWljUGlwZTogdHJhbnNmb3JtLnBpcGU6dHJhbnNmb3JtPy5hcmdzIH19XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlXG4gICN0ZW1wbGF0ZVJlZlxuICBsZXQtcm93PVwicm93XCJcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LXRlbXBsYXRlUmVmPVwidGVtcGxhdGVSZWZcIlxuICBsZXQtZGF0YT1cImRhdGFcIlxuPlxuICA8bmctY29udGFpbmVyXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVSZWZcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICByb3c6IHJvdyxcbiAgICAgIGNvbDogY29sdW1uLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgZGF0YTogZGF0YVxuICAgIH1cIlxuICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixLQUFLLEVBQ0wsWUFBWSxFQUVaLEVBQUUsRUFDRixhQUFhLEVBQ2IsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBR2QsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEVBQ0gsY0FBYyxHQUNmLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7O0FBZXRELE1BQU0sT0FBTyxhQUFhO0lBTjFCO1FBOEJZLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQU1qRCxlQUFVLEdBQUcsSUFBSSxhQUFhLENBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ2pELGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUN6RCxjQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQzdDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFDaEIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFD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QUFFLFlBQVk7U0FDMUIsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO0lBQzNCLENBQUM7SUFTRCxXQUFXLENBQ1QsTUFBVyxFQUNYLEtBQWEsRUFDYixlQUF1QyxJQUFJO1FBRTNDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDckMsYUFBYSxDQUFDLFlBQVksQ0FBQztZQUMzQixDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDbkQsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDOzswR0FuUVUsYUFBYTs4RkFBYixhQUFhLHNOQy9DMUIsZytSQThQQTsyRkQvTWEsYUFBYTtrQkFOekIsU0FBUzsrQkFDRSx1QkFBdUIsbUJBR2hCLHVCQUF1QixDQUFDLE1BQU07OEJBR2xDLE9BQU87c0JBQW5CLEtBQUs7Z0JBSUYsSUFBSTtzQkFEUCxLQUFLO2dCQU1GLE1BQU07c0JBRFQsS0FBSztnQkFNRixNQUFNO3NCQURULEtBQUs7Z0JBTUYsSUFBSTtzQkFEUCxLQUFLO2dCQUtJLFFBQVE7c0JBQWpCLE1BQU07Z0JBT0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIEVNUFRZLFxuICBpc09ic2VydmFibGUsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBSZXBsYXlTdWJqZWN0LFxuICBTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBtYXAsXG4gIHNoYXJlUmVwbGF5LFxuICBzdGFydFdpdGgsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxuICB3aXRoTGF0ZXN0RnJvbSxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuL21vZGVscy90YWJsZS1jb2x1bW4uaW50ZXJmYWNlJztcbmltcG9ydCB7IE9yZGVyIH0gZnJvbSAnLi9lbnVtcy9vcmRlci5lbnVtJztcbmltcG9ydCB7IGNodW5rLCBzZWFyY2ggfSBmcm9tICcuL3V0aWxpdGllcy91dGlsaXRpZXMnO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICcuL21vZGVscy90YWJsZS1yb3cuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlU29ydCB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLXNvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlTWV0YSB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLW1ldGEuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEd0Um93Q2xpY2tFdmVudCxcbiAgR3RSb3dIb3ZlckV2ZW50LFxufSBmcm9tICcuL21vZGVscy90YWJsZS1ldmVudHMuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYW5ndWxhci1nZW5lcmljLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ29yZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNldCBsb2FkaW5nKGlzTG9hZGluZzogT2JzZXJ2YWJsZTxib29sZWFuPiB8IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9sb2FkaW5nJC5uZXh0KGlzTG9hZGluZyk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHBhZ2UocGFnZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fY3VycmVudFBhZ2UkLm5leHQocGFnZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgc2VhcmNoKHN0cmluZzogT2JzZXJ2YWJsZTxzdHJpbmc+IHwgc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX3NlYXJjaEJ5JC5uZXh0KHN0cmluZyk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgY29uZmlnKGNvbmZpZzogT2JzZXJ2YWJsZTxUYWJsZUNvbmZpZz4gfCBUYWJsZUNvbmZpZykge1xuICAgIHRoaXMuX3RhYmxlQ29uZmlnJC5uZXh0KGNvbmZpZyk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgZGF0YShkYXRhOiBPYnNlcnZhYmxlPEFycmF5PFRhYmxlUm93Pj4gfCBBcnJheTxUYWJsZVJvdz4pIHtcbiAgICB0aGlzLl9kYXRhJC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgQE91dHB1dCgpIHJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHdFJvd0NsaWNrRXZlbnQ+KCk7XG5cbiAgX3Jvd0NsaWNrKHJvdzogVGFibGVSb3csIGluZGV4OiBudW1iZXIsIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHsgcm93LCBpbmRleCwgZXZlbnQgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yb3dIb3ZlciQgPSBuZXcgUmVwbGF5U3ViamVjdDxHdFJvd0hvdmVyRXZlbnQ+KDEpO1xuICBAT3V0cHV0KCkgcm93SG92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEd0Um93SG92ZXJFdmVudD4oKTtcbiAgcm93SG92ZXIkID0gdGhpcy5fcm93SG92ZXIkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgcSkgPT4gcC5pbmRleCA9PT0gcS5pbmRleCksXG4gICAgdGFwKChldmVudCkgPT4gdGhpcy5yb3dIb3Zlci5lbWl0KGV2ZW50KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBob3ZlclJvdyhpZDogc3RyaW5nKTogdm9pZDtcbiAgaG92ZXJSb3coaW5kZXg6IG51bWJlcik6IHZvaWQ7XG4gIGhvdmVyUm93KG5vbmU6IG51bGwpOiB2b2lkO1xuICBob3ZlclJvdyhhcmc6IHN0cmluZyB8IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuZGF0YSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChkYXRhKSA9PiBkYXRhW2FyZ10pLFxuICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyb3cpID0+IHRoaXMuX2hvdmVyUm93KHJvdywgYXJnKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IGhvdmVyIGJ5IGlkXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2hvdmVyUm93KG51bGwsIG51bGwpO1xuICAgIH1cbiAgfVxuICBfaG92ZXJSb3coXG4gICAgcm93OiBUYWJsZVJvdyB8IG51bGwsXG4gICAgaW5kZXg6IG51bWJlciB8IG51bGwsXG4gICAgZXZlbnQ/OiBNb3VzZUV2ZW50XG4gICk6IHZvaWQge1xuICAgIHRoaXMuX3Jvd0hvdmVyJC5uZXh0KHsgcm93LCBpbmRleCwgZXZlbnQgfSk7XG4gIH1cblxuICBnZXQgbG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmckLnBpcGUoXG4gICAgICBzdGFydFdpdGgoZmFsc2UpLFxuICAgICAgbWFwKCh2YWx1ZSkgPT4gKGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSA6IG9mKHZhbHVlKSkpLFxuICAgICAgc3dpdGNoTWFwKChvYnMpID0+IG9icyksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkaW5nJDogUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbj4gPVxuICAgIG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICBzb3J0QnkkOiBTdWJqZWN0PFRhYmxlU29ydD4gPSBuZXcgU3ViamVjdCgpO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF9zb3J0Qnk6IFRhYmxlU29ydCB8IHVuZGVmaW5lZDtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF9zZWFyY2hCeSQ6IFJlcGxheVN1YmplY3Q8T2JzZXJ2YWJsZTxzdHJpbmc+IHwgc3RyaW5nIHwgbnVsbD4gPVxuICAgIG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICBzZWFyY2hCeSQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4gPSB0aGlzLl9zZWFyY2hCeSQucGlwZShcbiAgICBzdGFydFdpdGgoJycpLFxuICAgIG1hcCgodmFsdWUpID0+IChpc09ic2VydmFibGUodmFsdWUpID8gdmFsdWUgOiBvZih2YWx1ZSkpKSxcbiAgICBzd2l0Y2hNYXAoKG9icykgPT4gb2JzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gIHByaXZhdGUgX3RhYmxlQ29uZmlnJDogUmVwbGF5U3ViamVjdDxUYWJsZUNvbmZpZyB8IE9ic2VydmFibGU8VGFibGVDb25maWc+PiA9XG4gICAgbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gIHRhYmxlQ29uZmlnJDogT2JzZXJ2YWJsZTxUYWJsZUNvbmZpZz4gPSB0aGlzLl90YWJsZUNvbmZpZyQucGlwZShcbiAgICBtYXAoKHZhbHVlKSA9PiAoaXNPYnNlcnZhYmxlKHZhbHVlKSA/IHZhbHVlIDogb2YodmFsdWUpKSksXG4gICAgc3dpdGNoTWFwKChvYnMpID0+IG9icyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBwcml2YXRlIF9kYXRhJDogUmVwbGF5U3ViamVjdDxBcnJheTxUYWJsZVJvdz4gfCBPYnNlcnZhYmxlPEFycmF5PFRhYmxlUm93Pj4+ID1cbiAgICBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgZGF0YSQ6IE9ic2VydmFibGU8QXJyYXk8VGFibGVSb3c+PiA9IHRoaXMuX2RhdGEkLnBpcGUoXG4gICAgbWFwKCh2YWx1ZSkgPT4gKGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSA6IG9mKHZhbHVlKSkpLFxuICAgIHN3aXRjaE1hcCgob2JzKSA9PiBjb21iaW5lTGF0ZXN0KFtvYnNdKSksXG4gICAgd2l0aExhdGVzdEZyb20odGhpcy50YWJsZUNvbmZpZyQpLFxuICAgIG1hcCgoW1tkYXRhXSwgY29uZmlnXSkgPT4ge1xuICAgICAgLy8gaWYgY29sdW1ucyBvciByb3dzIGNvbnRhaW5zIGNvbmZpZyBmb3IgbWFwVG8uLi5cbiAgICAgIGlmIChcbiAgICAgICAgKGNvbmZpZy5jb2x1bW5zICYmXG4gICAgICAgICAgISFPYmplY3QudmFsdWVzKGNvbmZpZy5jb2x1bW5zKS5maW5kKChjb2x1bW4pID0+ICEhY29sdW1uLm1hcFRvKSkgfHxcbiAgICAgICAgKGNvbmZpZy5yb3dzICYmXG4gICAgICAgICAgISFPYmplY3QudmFsdWVzKGNvbmZpZy5yb3dzKS5maW5kKChjb2x1bW4pID0+ICEhY29sdW1uLm1hcFRvKSlcbiAgICAgICkge1xuICAgICAgICAvLyAuLi5tYXAgZGF0YSB0byBuZXcga2V5cyBvbiByb3cuLi5cbiAgICAgICAgY29uc3QgbmV3RGF0YTogVGFibGVSb3dbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCByb3cgPSBkYXRhW2ldO1xuICAgICAgICAgIGNvbnN0IG5ld0tleXMgPSBPYmplY3QuZW50cmllcyhjb25maWcuY29sdW1ucyB8fCBjb25maWcucm93cyB8fCBbXSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gISF2YWx1ZS5tYXBUbykgLy8gYWRkIGtleXMgZm9yIGNvbHVtbnMgd2l0aCBtYXBUbyBjb25maWcuLi5cbiAgICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAgIChwcmV2aW91c1ZhbHVlLCBba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ucHJldmlvdXNWYWx1ZSxcbiAgICAgICAgICAgICAgICBba2V5XTogdGhpcy5uZXN0ZWRWYWx1ZShcbiAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLm1hcFRvIS5wYXRoLFxuICAgICAgICAgICAgICAgICAgdmFsdWUubWFwVG8/Lm1pc3NpbmdWYWx1ZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBuZXdEYXRhW2ldID0geyAuLi5yb3csIC4uLm5ld0tleXMgfTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhID0gbmV3RGF0YTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRhdGEsIGNvbmZpZyB9O1xuICAgIH0pLFxuICAgIHN3aXRjaE1hcCgob2JzKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIG9mKG9icyksXG4gICAgICAgIHRoaXMuc29ydEJ5JC5waXBlKHN0YXJ0V2l0aChFTVBUWSkpLFxuICAgICAgICB0aGlzLnNlYXJjaEJ5JCxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAoKFt0YWJsZSwgc29ydEJ5LCBzZWFyY2hCeV0pID0+IHtcbiAgICAgIC8vIGNyZWF0ZSBhIG5ldyBhcnJheSByZWZlcmVuY2UgYW5kIHNvcnQgbmV3IGFycmF5IChwcmV2ZW50IG11dGF0aW5nIGV4aXN0aW5nIHN0YXRlKVxuICAgICAgdGFibGUuZGF0YSA9IFsuLi50YWJsZS5kYXRhXTtcbiAgICAgIHJldHVybiAhc29ydEJ5XG4gICAgICAgID8gc2VhcmNoQnlcbiAgICAgICAgICA/IHNlYXJjaChzZWFyY2hCeSwgZmFsc2UsIHRhYmxlLmRhdGEsIHRhYmxlLmNvbmZpZylcbiAgICAgICAgICA6IHRhYmxlLmRhdGFcbiAgICAgICAgOiAoc2VhcmNoQnlcbiAgICAgICAgICAgID8gc2VhcmNoKHNlYXJjaEJ5LCBmYWxzZSwgdGFibGUuZGF0YSwgdGFibGUuY29uZmlnKVxuICAgICAgICAgICAgOiB0YWJsZS5kYXRhXG4gICAgICAgICAgKT8uc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgLy8gVE9ETzogaW1wcm92ZSBsb2dpY1xuICAgICAgICAgICAgY29uc3QgdHlwZWQgPSBzb3J0QnkgYXMgVGFibGVTb3J0O1xuICAgICAgICAgICAgcmV0dXJuIGFbdHlwZWQuc29ydEJ5XSA+IGJbdHlwZWQuc29ydEJ5XVxuICAgICAgICAgICAgICA/IHR5cGVkLnNvcnRCeU9yZGVyID09PSBPcmRlci5BU0NcbiAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICA6IC0xXG4gICAgICAgICAgICAgIDogYlt0eXBlZC5zb3J0QnldID4gYVt0eXBlZC5zb3J0QnldXG4gICAgICAgICAgICAgID8gdHlwZWQuc29ydEJ5T3JkZXIgPT09IE9yZGVyLkFTQ1xuICAgICAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgICAgICA6IDFcbiAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgIH0pO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgdGFibGUkOiBPYnNlcnZhYmxlPFRhYmxlTWV0YT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRhdGEkLFxuICAgIHRoaXMudGFibGVDb25maWckLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3NvcnRlZCwgY29uZmlnXSkgPT4ge1xuICAgICAgLy8gaWYgcGFnaW5hdGlvbiBpcyBkaXNhYmxlZC4uLlxuICAgICAgaWYgKCFjb25maWcucGFnaW5hdGlvbiB8fCBjb25maWcucGFnaW5hdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gLi4ucmV0dXJuIHVuYWx0ZXJlZCBhcnJheVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IFtzb3J0ZWRdLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmZvOiB7IHJlY29yZHM6IHNvcnRlZC5sZW5ndGgsIHBhZ2VUb3RhbDogMSB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHJlY29yZCBzZXRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IGNodW5rKHNvcnRlZCwgKyhjb25maWcucGFnaW5hdGlvbi5sZW5ndGggfHwgMCkpLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGluZm86IHtcbiAgICAgICAgICByZWNvcmRzOiBzb3J0ZWQubGVuZ3RoLFxuICAgICAgICAgIHBhZ2VUb3RhbDogTWF0aC5jZWlsKFxuICAgICAgICAgICAgc29ydGVkLmxlbmd0aCAvICsoY29uZmlnLnBhZ2luYXRpb24ubGVuZ3RoIHx8IDApXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBwcml2YXRlIF9jdXJyZW50UGFnZSQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgwKTtcbiAgY3VycmVudFBhZ2UkID0gY29tYmluZUxhdGVzdChbdGhpcy5fY3VycmVudFBhZ2UkLCB0aGlzLnRhYmxlJF0pLnBpcGUoXG4gICAgbWFwKChbcGFnZSwgdGFibGVdOiBhbnkpID0+IHtcbiAgICAgIC8vIGRldGVybWluZSBsYXN0IHBhZ2VcbiAgICAgIGNvbnN0IGxhc3RQYWdlID1cbiAgICAgICAgTWF0aC5jZWlsKFxuICAgICAgICAgIHRhYmxlLmluZm8ucmVjb3JkcyAvXG4gICAgICAgICAgICAodGFibGUuY29uZmlnPy5wYWdpbmF0aW9uPy5sZW5ndGggfHwgdGFibGUuaW5mby5yZWNvcmRzKVxuICAgICAgICApIC0gMTtcbiAgICAgIC8vIGRldGVybWluZSBtYXgvbWluIHBvc2l0aW9uXG4gICAgICByZXR1cm4gK3BhZ2UgPCAwID8gMCA6ICtwYWdlID4gbGFzdFBhZ2UgPyBsYXN0UGFnZSA6ICtwYWdlO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgY29sc3BhbiQgPSB0aGlzLnRhYmxlQ29uZmlnJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoY29uZmlnKSA9PlxuICAgICAgY29uZmlnLmNvbHVtbnNcbiAgICAgICAgPyBvZihcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoY29uZmlnLmNvbHVtbnMgfHwgY29uZmlnLnJvd3MgfHwge30pLmZpbHRlcihcbiAgICAgICAgICAgICAgKHZhbHVlKSA9PiB2YWx1ZS5oaWRkZW4gIT09IHRydWVcbiAgICAgICAgICAgICkubGVuZ3RoXG4gICAgICAgICAgKVxuICAgICAgICA6IHRoaXMuZGF0YSQucGlwZShtYXAoKGRhdGEpID0+IGRhdGEubGVuZ3RoICsgMSkpXG4gICAgKVxuICApO1xuXG4gIHNvcnQocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1NvcnRPcmRlciA9XG4gICAgICB0aGlzLl9zb3J0Qnk/LnNvcnRCeSAhPT0gcHJvcGVydHkgfHxcbiAgICAgIHRoaXMuX3NvcnRCeT8uc29ydEJ5T3JkZXIgPT09IE9yZGVyLkRFU0MgfHxcbiAgICAgICF0aGlzLl9zb3J0Qnkuc29ydEJ5T3JkZXJcbiAgICAgICAgPyBPcmRlci5BU0NcbiAgICAgICAgOiBPcmRlci5ERVNDO1xuICAgIGNvbnN0IG5ld1NvcnRCeSA9IHtcbiAgICAgIHNvcnRCeTogcHJvcGVydHksXG4gICAgICBzb3J0QnlPcmRlcjogbmV3U29ydE9yZGVyLFxuICAgIH07XG4gICAgdGhpcy5zb3J0QnkkLm5leHQobmV3U29ydEJ5KTtcbiAgICB0aGlzLl9zb3J0QnkgPSBuZXdTb3J0Qnk7XG4gIH1cblxuICBjb2x1bW5PcmRlciA9IChcbiAgICBhOiBLZXlWYWx1ZTxzdHJpbmcsIFRhYmxlQ29sdW1uPixcbiAgICBiOiBLZXlWYWx1ZTxzdHJpbmcsIFRhYmxlQ29sdW1uPlxuICApOiBudW1iZXIgPT4ge1xuICAgIHJldHVybiAoYS52YWx1ZS5vcmRlciB8fCAwKSAtIChiLnZhbHVlLm9yZGVyIHx8IDApO1xuICB9O1xuXG4gIG5lc3RlZFZhbHVlKFxuICAgIG9iamVjdDogYW55LFxuICAgIG1hcFRvOiBzdHJpbmcsXG4gICAgbWlzc2luZ1ZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsID0gbnVsbFxuICApOiB1bmtub3duIHtcbiAgICBjb25zdCBsZXZlbHMgPSBtYXBUby5zcGxpdCgnLicpO1xuICAgIHJldHVybiBsZXZlbHMucmVkdWNlKFxuICAgICAgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSwgaW5kZXgpID0+XG4gICAgICAgIHByZXZpb3VzVmFsdWVbY3VycmVudFZhbHVlXSB8fFxuICAgICAgICAoaW5kZXggPT09IGxldmVscy5sZW5ndGggLSAxID8gbWlzc2luZ1ZhbHVlIDoge30pLFxuICAgICAgb2JqZWN0XG4gICAgKTtcbiAgfVxufVxuIiwiPHRhYmxlXG4gIFtuZ0NsYXNzXT1cIih0YWJsZUNvbmZpZyQgfCBhc3luYyk/LmNsYXNzIHx8ICd0YWJsZSdcIlxuICBbY2xhc3MudGFibGUtbW9iaWxlXT1cIih0YWJsZUNvbmZpZyQgfCBhc3luYyk/Lm1vYmlsZUxheW91dFwiXG4gIFtjbGFzcy50YWJsZS1ob3Jpem9udGFsXT1cIih0YWJsZUNvbmZpZyQgfCBhc3luYyk/LnJvd3NcIlxuICBbY2xhc3MudGFibGUtbG9hZGluZ109XCJsb2FkaW5nJCB8IGFzeW5jXCJcbiAgW2NsYXNzLmd0LXN0aWNreS1yb3ctaGVhZGVyXT1cIlxuICAgICh0YWJsZUNvbmZpZyQgfCBhc3luYyk/LnN0aWNreUhlYWRlcnM/LnJvdyAmJiAodGFibGVDb25maWckIHwgYXN5bmMpPy5yb3dzXG4gIFwiXG4gIFtjbGFzcy5ndC1zdGlja3ktY29sdW1uLWhlYWRlcl09XCJcbiAgICAodGFibGVDb25maWckIHwgYXN5bmMpPy5zdGlja3lIZWFkZXJzPy5jb2x1bW5cbiAgXCJcbiAgW2F0dHIuYXJpYS1idXN5XT1cIihsb2FkaW5nJCB8IGFzeW5jKSA9PT0gdHJ1ZSA/IHRydWUgOiBudWxsXCJcbj5cbiAgPHRoZWFkPlxuICAgIDx0clxuICAgICAgKm5nSWY9XCJ7XG4gICAgICAgIGNvbmZpZzogKHRhYmxlQ29uZmlnJCB8IGFzeW5jKSEsXG4gICAgICAgIGlzTG9hZGluZzogbG9hZGluZyQgfCBhc3luY1xuICAgICAgfSBhcyB0YWJsZVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlPy5jb25maWc/LmNvbHVtbnMgfCBrZXl2YWx1ZTogY29sdW1uT3JkZXJcIlxuICAgICAgPlxuICAgICAgICA8dGhcbiAgICAgICAgICAqbmdJZj1cIiFjb2x1bW4udmFsdWU/LmhpZGRlblwiXG4gICAgICAgICAgbmdDbGFzcz1cInt7IChjb2x1bW4ua2V5IHwgZGFzaENhc2UpICsgJy1jb2x1bW4nIH19IHt7XG4gICAgICAgICAgICBjb2x1bW4udmFsdWUuY2xhc3NcbiAgICAgICAgICB9fVwiXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInRhYmxlLmlzTG9hZGluZ1wiXG4gICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cInNvcnRCeSQgfCBhc3luYyB8IHNvcnRDbGFzczogY29sdW1uLmtleTp0cnVlXCJcbiAgICAgICAgICBbY2xhc3MuZ3Qtc29ydGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udmFsdWU/LnNvcnRhYmxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3Qtc29ydFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIHRhYmxlLmlzTG9hZGluZyB8fCAhY29sdW1uLnZhbHVlPy5zb3J0YWJsZSB8fCBzb3J0KGNvbHVtbi5rZXkpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLnZhbHVlPy5oZWFkZXIgIT09IGZhbHNlXCI+e3tcbiAgICAgICAgICAgICAgY29sdW1uLnZhbHVlPy5oZWFkZXIgfHwgY29sdW1uLmtleSB8IGNhcGl0YWxDYXNlXG4gICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uLnZhbHVlPy5zb3J0YWJsZSAmJiBjb2x1bW4udmFsdWU/LmhlYWRlciAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgPnt7IGNvbHVtbi52YWx1ZT8uaGVhZGVyIHx8IGNvbHVtbi5rZXkgfCBjYXBpdGFsQ2FzZSB9fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgPC90aD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICgodGFibGU/LmNvbmZpZz8ucm93cyB8IGtleXZhbHVlOiBjb2x1bW5PcmRlcikgfHwgW10pWzBdIGFzIGhlYWRlclJvd1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8dGhcbiAgICAgICAgICBjbGFzcz1cInJvdy1oZWFkZXJcIlxuICAgICAgICAgIFthdHRyLmFyaWEtc29ydF09XCJzb3J0QnkkIHwgYXN5bmMgfCBzb3J0Q2xhc3M6IGhlYWRlclJvdy5rZXk6dHJ1ZVwiXG4gICAgICAgICAgbmdDbGFzcz1cInt7IGhlYWRlclJvdy52YWx1ZT8uc29ydGFibGUgPyAnc29ydCAnIDogJycgfX0ge3tcbiAgICAgICAgICAgIHNvcnRCeSQgfCBhc3luYyB8IHNvcnRDbGFzczogaGVhZGVyUm93LmtleVxuICAgICAgICAgIH19IHt7IChoZWFkZXJSb3cua2V5IHwgZGFzaENhc2UpICsgJy1jb2x1bW4nIH19XCJcbiAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICB0YWJsZS5pc0xvYWRpbmcgfHwgIWhlYWRlclJvdy52YWx1ZT8uc29ydGFibGUgfHwgc29ydChoZWFkZXJSb3cua2V5KVxuICAgICAgICAgIFwiXG4gICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclJvdz8udmFsdWU/LmhlYWRlciAhPT0gZmFsc2VcIj57e1xuICAgICAgICAgICAgaGVhZGVyUm93Py52YWx1ZT8uaGVhZGVyIHx8IGhlYWRlclJvdy5rZXkgfCBjYXBpdGFsQ2FzZVxuICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgKCh0YWJsZSQgfCBhc3luYyk/LmRhdGEgfHwgW10pWzBdXCJcbiAgICAgICAgICBuZ0NsYXNzPVwie3sgaGVhZGVyUm93LnZhbHVlPy5jbGFzcyB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJcbiAgICAgICAgICAgICAgKHRhYmxlLmNvbmZpZz8ucm93cyB8fCB7fSlbaGVhZGVyUm93LmtleV0udGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICA/IHRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgOiAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XS50cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICA/IHRyYW5zZm9ybURhdGFcbiAgICAgICAgICAgICAgICA6IHJhd0RhdGFcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICByb3c6IGNvbHVtbixcbiAgICAgICAgICAgICAgY29sdW1uOiBoZWFkZXJSb3csXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogKHRhYmxlLmNvbmZpZz8ucm93cyB8fCB7fSlbaGVhZGVyUm93LmtleV0udHJhbnNmb3JtLFxuICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZjogKHRhYmxlLmNvbmZpZz8ucm93cyB8fCB7fSlbaGVhZGVyUm93LmtleV1cbiAgICAgICAgICAgICAgICAudGVtcGxhdGVSZWYsXG4gICAgICAgICAgICAgIGluZGV4OiAwXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHkgKm5nSWY9XCJsb2FkaW5nJCB8IGFzeW5jOyBlbHNlIHRhYmxlQ29udGVudFwiPlxuICAgIDx0cj5cbiAgICAgIDx0ZCBjbGFzcz1cInAtMFwiIFtjb2xTcGFuXT1cImNvbHNwYW4kIHwgYXN5bmNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnRhYmxlLWxvYWRpbmdcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG48L3RhYmxlPlxuPG5nLXRlbXBsYXRlICN0YWJsZUNvbnRlbnQ+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIodGFibGUkIHwgYXN5bmMpISBhcyB0YWJsZVwiPlxuICAgIDx0Ym9keSAqbmdJZj1cIih0YWJsZSEuZGF0YSFbMF0gfHwgdGFibGUhLmRhdGEhKS5sZW5ndGggPiAwOyBlbHNlIG5vRGF0YVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlLmNvbmZpZy5jb2x1bW5zXCI+XG4gICAgICAgIDx0clxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IHJvdyBvZiB0YWJsZSEuZGF0YSFbKGN1cnJlbnRQYWdlJCB8IGFzeW5jKSB8fCAwXTtcbiAgICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgICBcIlxuICAgICAgICAgIFthdHRyLmlkXT1cIid0YWJsZVJvd18nICsgaVwiXG4gICAgICAgICAgKGNsaWNrKT1cInRhYmxlPy5jb25maWc/LnJvd0NsaWNrICYmIF9yb3dDbGljayhyb3csIGksICRldmVudClcIlxuICAgICAgICAgIChtb3VzZW92ZXIpPVwidGFibGU/LmNvbmZpZz8ucm93SG92ZXIgJiYgX2hvdmVyUm93KHJvdywgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgKG1vdXNlb3V0KT1cInRhYmxlPy5jb25maWc/LnJvd0hvdmVyICYmIF9ob3ZlclJvdyhudWxsLCBudWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICBbY2xhc3MuZ3QtaG92ZXJdPVwiKHJvd0hvdmVyJCB8IGFzeW5jKT8uaW5kZXggPT09IGlcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB0YWJsZS5jb25maWc/LmNvbHVtbnMgfCBrZXl2YWx1ZTogY29sdW1uT3JkZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAqbmdJZj1cIiFjb2x1bW4udmFsdWU/LmhpZGRlblwiXG4gICAgICAgICAgICAgIG5nQ2xhc3M9XCJ7eyAoY29sdW1uLmtleSB8IGRhc2hDYXNlKSArICctY29sdW1uJyB9fSB7e1xuICAgICAgICAgICAgICAgIGNvbHVtbi52YWx1ZT8uY2xhc3NcbiAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgIHRhYmxlLmNvbmZpZz8ubW9iaWxlTGF5b3V0ICYmIGNvbHVtbi52YWx1ZT8ubW9iaWxlSGVhZGVyXG4gICAgICAgICAgICAgICAgICA/IGNvbHVtbi52YWx1ZT8ubW9iaWxlSGVhZGVyICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgID8gY29sdW1uLnZhbHVlPy5tb2JpbGVIZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgOiAoY29sdW1uLnZhbHVlPy5oZWFkZXIgfHwgY29sdW1uLmtleSB8IGNhcGl0YWxDYXNlKVxuICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJcbiAgICAgICAgICAgICAgICAgIChzZWFyY2hCeSQgfCBhc3luYykgJiZcbiAgICAgICAgICAgICAgICAgICEodGFibGUuY29uZmlnPy5jb2x1bW5zIHx8IHt9KVtjb2x1bW4ua2V5XS50ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgICAgICA/IGhpZ2hsaWdodGVkXG4gICAgICAgICAgICAgICAgICAgIDogKHRhYmxlLmNvbmZpZz8uY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgPyB0ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgICAgICA6ICh0YWJsZS5jb25maWc/LmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldLnRyYW5zZm9ybVxuICAgICAgICAgICAgICAgICAgICA/IHRyYW5zZm9ybURhdGFcbiAgICAgICAgICAgICAgICAgICAgOiByYXdEYXRhXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIHNlYXJjaDogKHNlYXJjaEJ5JCB8IGFzeW5jKSxcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogKHRhYmxlLmNvbmZpZz8uY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV1cbiAgICAgICAgICAgICAgICAgICAgLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiAodGFibGUuY29uZmlnPy5jb2x1bW5zIHx8IHt9KVtjb2x1bW4ua2V5XVxuICAgICAgICAgICAgICAgICAgICAudGVtcGxhdGVSZWYsXG4gICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHRhYmxlLmRhdGFbKGN1cnJlbnRQYWdlJCB8IGFzeW5jKSB8fCAwXVxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGUuY29uZmlnLnJvd3NcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IHJvdyBvZiB0YWJsZT8uY29uZmlnPy5yb3dzIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyIHwgc2xpY2U6IDE7XG4gICAgICAgICAgICBsZXQgaSA9IGluZGV4XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgKm5nSWY9XCIhcm93LnZhbHVlPy5oaWRkZW5cIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ3RhYmxlUm93XycgKyBpXCJcbiAgICAgICAgICAgIG5nQ2xhc3M9XCJ7eyAocm93LmtleSB8IGRhc2hDYXNlKSArICctcm93JyB9fVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidGFibGU/LmNvbmZpZz8ucm93Q2xpY2sgJiYgX3Jvd0NsaWNrKHJvdywgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAobW91c2VvdmVyKT1cInRhYmxlPy5jb25maWc/LnJvd0hvdmVyICYmIF9ob3ZlclJvdyhyb3csIGksICRldmVudClcIlxuICAgICAgICAgICAgKG1vdXNlb3V0KT1cIlxuICAgICAgICAgICAgICB0YWJsZT8uY29uZmlnPy5yb3dIb3ZlciAmJiBfaG92ZXJSb3cobnVsbCwgbnVsbCwgJGV2ZW50KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy5ndC1ob3Zlcl09XCIocm93SG92ZXIkIHwgYXN5bmMpPy5pbmRleCA9PT0gaVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwicm93LWhlYWRlclwiIHNjb3BlPVwicm93XCI+XG4gICAgICAgICAgICAgIHt7IHJvdy52YWx1ZT8uaGVhZGVyIHx8IHJvdy5rZXkgfCBjYXBpdGFsQ2FzZSB9fVxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mICh0YWJsZT8uZGF0YSB8fCBbXSlbMF07IGxldCB5ID0gaW5kZXhcIlxuICAgICAgICAgICAgICBuZ0NsYXNzPVwie3sgcm93LnZhbHVlPy5jbGFzcyB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJcbiAgICAgICAgICAgICAgICAgICh0YWJsZS5jb25maWc/LnJvd3MgfHwge30pW3Jvdy5rZXldLnRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgICAgID8gdGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgOiAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtyb3cua2V5XS50cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICAgICAgPyB0cmFuc2Zvcm1EYXRhXG4gICAgICAgICAgICAgICAgICAgIDogcmF3RGF0YVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgIHJvdzogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgY29sdW1uOiByb3csXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICh0YWJsZS5jb25maWc/LnJvd3MgfHwge30pW3Jvdy5rZXldLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtyb3cua2V5XS50ZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgICAgIGluZGV4OiB0YWJsZS5jb25maWc/LnJvd3MgPyB5IDogaSxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHRhYmxlLmRhdGFbKGN1cnJlbnRQYWdlJCB8IGFzeW5jKSB8fCAwXVxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdGJvZHk+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbm9EYXRhPlxuICA8dGJvZHk+XG4gICAgPHRyPlxuICAgICAgPHRkIGNsYXNzPVwicC0wXCIgW2NvbFNwYW5dPVwiY29sc3BhbiQgfCBhc3luY1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIudGFibGUtbm8tZGF0YVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2hpZ2hsaWdodGVkIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LXNlYXJjaD1cInNlYXJjaFwiPlxuICA8ZGl2IFtpbm5lckhUTUxdPVwicm93W2NvbHVtbi5rZXldIHwgaGlnaGxpZ2h0OiBzZWFyY2hcIj48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3Jhd0RhdGEgbGV0LXJvdz1cInJvd1wiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAge3sgcm93W2NvbHVtbi5rZXldIH19XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlXG4gICN0cmFuc2Zvcm1EYXRhXG4gIGxldC1yb3c9XCJyb3dcIlxuICBsZXQtY29sdW1uPVwiY29sdW1uXCJcbiAgbGV0LXRyYW5zZm9ybT1cInRyYW5zZm9ybVwiXG4gIGxldC1kYXRhPVwiZGF0YVwiXG4+XG4gIHt7IHJvd1tjb2x1bW4ua2V5XSB8IGR5bmFtaWNQaXBlOiB0cmFuc2Zvcm0ucGlwZTp0cmFuc2Zvcm0/LmFyZ3MgfX1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGVcbiAgI3RlbXBsYXRlUmVmXG4gIGxldC1yb3c9XCJyb3dcIlxuICBsZXQtY29sdW1uPVwiY29sdW1uXCJcbiAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICBsZXQtdGVtcGxhdGVSZWY9XCJ0ZW1wbGF0ZVJlZlwiXG4gIGxldC1kYXRhPVwiZGF0YVwiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVJlZlwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgIHJvdzogcm93LFxuICAgICAgY29sOiBjb2x1bW4sXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfVwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -10,8 +10,8 @@ import { GtDeltaComponent } from './gt-delta/gt-delta.component';
10
10
  import * as i0 from "@angular/core";
11
11
  export class GenericTableCoreModule {
12
12
  }
13
- GenericTableCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GenericTableCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
- GenericTableCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GenericTableCoreModule, declarations: [CoreComponent,
13
+ GenericTableCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: GenericTableCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
+ GenericTableCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.1", ngImport: i0, type: GenericTableCoreModule, declarations: [CoreComponent,
15
15
  SortClassPipe,
16
16
  DashCasePipe,
17
17
  HighlightPipe,
@@ -19,8 +19,8 @@ GenericTableCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
19
19
  CapitalCasePipe,
20
20
  DynamicPipe,
21
21
  GtDeltaComponent], imports: [CommonModule], exports: [CoreComponent, GtDeltaComponent] });
22
- GenericTableCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GenericTableCoreModule, imports: [[CommonModule]] });
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GenericTableCoreModule, decorators: [{
22
+ GenericTableCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: GenericTableCoreModule, imports: [CommonModule] });
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: GenericTableCoreModule, decorators: [{
24
24
  type: NgModule,
25
25
  args: [{
26
26
  declarations: [
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
37
37
  exports: [CoreComponent, GtDeltaComponent],
38
38
  }]
39
39
  }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBZ0JqRSxNQUFNLE9BQU8sc0JBQXNCOztvSEFBdEIsc0JBQXNCO3FIQUF0QixzQkFBc0IsaUJBWi9CLGFBQWE7UUFDYixhQUFhO1FBQ2IsWUFBWTtRQUNaLGFBQWE7UUFDYixlQUFlO1FBQ2YsZUFBZTtRQUNmLFdBQVc7UUFDWCxnQkFBZ0IsYUFFUixZQUFZLGFBQ1osYUFBYSxFQUFFLGdCQUFnQjtxSEFFOUIsc0JBQXNCLFlBSHhCLENBQUMsWUFBWSxDQUFDOzRGQUdaLHNCQUFzQjtrQkFkbEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osYUFBYTt3QkFDYixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsV0FBVzt3QkFDWCxnQkFBZ0I7cUJBQ2pCO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDO2lCQUMzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb3JlQ29tcG9uZW50IH0gZnJvbSAnLi9jb3JlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU29ydENsYXNzUGlwZSB9IGZyb20gJy4vcGlwZXMvc29ydC1jbGFzcy5waXBlJztcbmltcG9ydCB7IERhc2hDYXNlUGlwZSB9IGZyb20gJy4vcGlwZXMvZGFzaC1jYXNlLnBpcGUnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0UGlwZSB9IGZyb20gJy4vcGlwZXMvaGlnaGxpZ2h0LnBpcGUnO1xuaW1wb3J0IHsgQ2FwaXRhbENhc2VQaXBlIH0gZnJvbSAnLi9waXBlcy9jYXBpdGFsLWNhc2UucGlwZSc7XG5pbXBvcnQgeyBEeW5hbWljUGlwZSB9IGZyb20gJy4vcGlwZXMvZHluYW1pYy5waXBlJztcbmltcG9ydCB7IEd0RGVsdGFDb21wb25lbnQgfSBmcm9tICcuL2d0LWRlbHRhL2d0LWRlbHRhLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIENvcmVDb21wb25lbnQsXG4gICAgU29ydENsYXNzUGlwZSxcbiAgICBEYXNoQ2FzZVBpcGUsXG4gICAgSGlnaGxpZ2h0UGlwZSxcbiAgICBDYXBpdGFsQ2FzZVBpcGUsXG4gICAgQ2FwaXRhbENhc2VQaXBlLFxuICAgIER5bmFtaWNQaXBlLFxuICAgIEd0RGVsdGFDb21wb25lbnQsXG4gIF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbQ29yZUNvbXBvbmVudCwgR3REZWx0YUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyaWNUYWJsZUNvcmVNb2R1bGUge31cbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBZ0JqRSxNQUFNLE9BQU8sc0JBQXNCOzttSEFBdEIsc0JBQXNCO29IQUF0QixzQkFBc0IsaUJBWi9CLGFBQWE7UUFDYixhQUFhO1FBQ2IsWUFBWTtRQUNaLGFBQWE7UUFDYixlQUFlO1FBQ2YsZUFBZTtRQUNmLFdBQVc7UUFDWCxnQkFBZ0IsYUFFUixZQUFZLGFBQ1osYUFBYSxFQUFFLGdCQUFnQjtvSEFFOUIsc0JBQXNCLFlBSHZCLFlBQVk7MkZBR1gsc0JBQXNCO2tCQWRsQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixXQUFXO3dCQUNYLGdCQUFnQjtxQkFDakI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUM7aUJBQzNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcmVDb21wb25lbnQgfSBmcm9tICcuL2NvcmUuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTb3J0Q2xhc3NQaXBlIH0gZnJvbSAnLi9waXBlcy9zb3J0LWNsYXNzLnBpcGUnO1xuaW1wb3J0IHsgRGFzaENhc2VQaXBlIH0gZnJvbSAnLi9waXBlcy9kYXNoLWNhc2UucGlwZSc7XG5pbXBvcnQgeyBIaWdobGlnaHRQaXBlIH0gZnJvbSAnLi9waXBlcy9oaWdobGlnaHQucGlwZSc7XG5pbXBvcnQgeyBDYXBpdGFsQ2FzZVBpcGUgfSBmcm9tICcuL3BpcGVzL2NhcGl0YWwtY2FzZS5waXBlJztcbmltcG9ydCB7IER5bmFtaWNQaXBlIH0gZnJvbSAnLi9waXBlcy9keW5hbWljLnBpcGUnO1xuaW1wb3J0IHsgR3REZWx0YUNvbXBvbmVudCB9IGZyb20gJy4vZ3QtZGVsdGEvZ3QtZGVsdGEuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQ29yZUNvbXBvbmVudCxcbiAgICBTb3J0Q2xhc3NQaXBlLFxuICAgIERhc2hDYXNlUGlwZSxcbiAgICBIaWdobGlnaHRQaXBlLFxuICAgIENhcGl0YWxDYXNlUGlwZSxcbiAgICBDYXBpdGFsQ2FzZVBpcGUsXG4gICAgRHluYW1pY1BpcGUsXG4gICAgR3REZWx0YUNvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGV4cG9ydHM6IFtDb3JlQ29tcG9uZW50LCBHdERlbHRhQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1RhYmxlQ29yZU1vZHVsZSB7fVxuIl19
@@ -3,12 +3,12 @@ import * as i0 from "@angular/core";
3
3
  export class CoreService {
4
4
  constructor() { }
5
5
  }
6
- CoreService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7
- CoreService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CoreService, providedIn: 'root' });
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CoreService, decorators: [{
6
+ CoreService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: CoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7
+ CoreService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: CoreService, providedIn: 'root' });
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: CoreService, decorators: [{
9
9
  type: Injectable,
10
10
  args: [{
11
11
  providedIn: 'root',
12
12
  }]
13
13
  }], ctorParameters: function () { return []; } });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2NvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sV0FBVztJQUN0QixnQkFBZSxDQUFDOzt5R0FETCxXQUFXOzZHQUFYLFdBQVcsY0FGVixNQUFNOzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29yZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG59XG4iXX0=
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2NvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sV0FBVztJQUN0QixnQkFBZSxDQUFDOzt3R0FETCxXQUFXOzRHQUFYLFdBQVcsY0FGVixNQUFNOzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29yZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG59XG4iXX0=
@@ -17,8 +17,8 @@ export class GtDeltaComponent {
17
17
  this.initialValue = '-';
18
18
  }
19
19
  }
20
- GtDeltaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GtDeltaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
- GtDeltaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: GtDeltaComponent, selector: "gt-delta", inputs: { data: "data", index: "index", baseIndex: "baseIndex", classes: "classes", key: "key", notApplicableValue: "notApplicableValue", initialValue: "initialValue" }, ngImport: i0, template: `<span
20
+ GtDeltaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: GtDeltaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
+ GtDeltaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: GtDeltaComponent, selector: "gt-delta", inputs: { data: "data", index: "index", baseIndex: "baseIndex", classes: "classes", key: "key", notApplicableValue: "notApplicableValue", initialValue: "initialValue" }, ngImport: i0, template: `<span
22
22
  *ngIf="{
23
23
  value:
24
24
  index === 0
@@ -50,12 +50,10 @@ GtDeltaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versi
50
50
  ? initialValue
51
51
  : notApplicableValue
52
52
  }}</span
53
- >`, isInline: true, styles: [":host{display:inline-block}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "percent": i1.PercentPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GtDeltaComponent, decorators: [{
53
+ >`, isInline: true, styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.PercentPipe, name: "percent" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: GtDeltaComponent, decorators: [{
55
55
  type: Component,
56
- args: [{
57
- selector: 'gt-delta',
58
- template: `<span
56
+ args: [{ selector: 'gt-delta', template: `<span
59
57
  *ngIf="{
60
58
  value:
61
59
  index === 0
@@ -87,16 +85,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
87
85
  ? initialValue
88
86
  : notApplicableValue
89
87
  }}</span
90
- >`,
91
- styles: [
92
- `
93
- :host {
94
- display: inline-block;
95
- }
96
- `,
97
- ],
98
- changeDetection: ChangeDetectionStrategy.OnPush,
99
- }]
88
+ >`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block}\n"] }]
100
89
  }], ctorParameters: function () { return []; }, propDecorators: { data: [{
101
90
  type: Input
102
91
  }], index: [{
@@ -112,4 +101,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
112
101
  }], initialValue: [{
113
102
  type: Input
114
103
  }] } });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3QtZGVsdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2d0LWRlbHRhL2d0LWRlbHRhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBK0MxRSxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCO1FBQ0EsU0FBSSxHQUFHLElBQUksQ0FBQztRQUNaLFdBQU0sR0FBRyxNQUFNLENBQUM7UUFDUCxTQUFJLEdBQWMsRUFBRSxDQUFDO1FBQ3JCLFVBQUssR0FBVyxDQUFDLENBQUM7UUFFbEIsWUFBTyxHQUFHO1lBQ2pCLElBQUksRUFBRSxVQUFVO1lBQ2hCLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLFFBQVEsRUFBRSxhQUFhO1NBQ3hCLENBQUM7UUFDTyxRQUFHLEdBQVcsT0FBTyxDQUFDO1FBQ3RCLHVCQUFrQixHQUFXLEtBQUssQ0FBQztRQUNuQyxpQkFBWSxHQUFXLEdBQUcsQ0FBQztJQWJyQixDQUFDOzs4R0FETCxnQkFBZ0I7a0dBQWhCLGdCQUFnQiwwTkExQ2pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWdDUjs0RkFVUyxnQkFBZ0I7a0JBNUM1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxVQUFVO29CQUNwQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBZ0NSO29CQUNGLE1BQU0sRUFBRTt3QkFDTjs7OztLQUlDO3FCQUNGO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDswRUFLVSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUtHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYWJsZVJvd3MgfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtcm93LmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2d0LWRlbHRhJyxcbiAgdGVtcGxhdGU6IGA8c3BhblxuICAgICpuZ0lmPVwie1xuICAgICAgdmFsdWU6XG4gICAgICAgIGluZGV4ID09PSAwXG4gICAgICAgICAgPyBpbml0aWFsVmFsdWVcbiAgICAgICAgICA6ICgoYmFzZUluZGV4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBkYXRhW2luZGV4IC0gMV1ba2V5XVxuICAgICAgICAgICAgICA6IGRhdGFbYmFzZUluZGV4XVtrZXldKSAtXG4gICAgICAgICAgICAgIGRhdGFbaW5kZXhdW2tleV0pIC9cbiAgICAgICAgICAgIC1NYXRoLmFicyhcbiAgICAgICAgICAgICAgYmFzZUluZGV4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGRhdGFbaW5kZXggLSAxXVtrZXldXG4gICAgICAgICAgICAgICAgOiBkYXRhW2Jhc2VJbmRleF1ba2V5XVxuICAgICAgICAgICAgKVxuICAgIH0gYXMgZGVsdGFcIlxuICAgIFtjbGFzc109XCJbXG4gICAgICBjbGFzc2VzLnNwYW4sXG4gICAgICAhZGVsdGEudmFsdWUgfHwgIU51bWJlci5pc0Zpbml0ZShkZWx0YS52YWx1ZSlcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogZGVsdGEudmFsdWUgPiAwXG4gICAgICAgID8gY2xhc3Nlcy5wb3NpdGl2ZVxuICAgICAgICA6IGNsYXNzZXMubmVnYXRpdmVcbiAgICBdXCJcbiAgICBbY2xhc3MuZ3QtZGVsdGEtcG9zaXRpdmVdPVwiZGVsdGEudmFsdWUgPiAwICYmIE51bWJlci5pc0Zpbml0ZShkZWx0YS52YWx1ZSlcIlxuICAgIFtjbGFzcy5ndC1kZWx0YS1uZWdhdGl2ZV09XCJkZWx0YS52YWx1ZSA8IDBcIlxuICAgID57e1xuICAgICAgTnVtYmVyLmlzRmluaXRlKGRlbHRhLnZhbHVlKVxuICAgICAgICA/IChkZWx0YS52YWx1ZSB8IHBlcmNlbnQpXG4gICAgICAgIDogZGVsdGEudmFsdWUgPT09IGluaXRpYWxWYWx1ZVxuICAgICAgICA/IGluaXRpYWxWYWx1ZVxuICAgICAgICA6IG5vdEFwcGxpY2FibGVWYWx1ZVxuICAgIH19PC9zcGFuXG4gID5gLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cbiAgICBgLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgR3REZWx0YUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgTWF0aCA9IE1hdGg7XG4gIE51bWJlciA9IE51bWJlcjtcbiAgQElucHV0KCkgZGF0YTogVGFibGVSb3dzID0gW107XG4gIEBJbnB1dCgpIGluZGV4OiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBiYXNlSW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGNsYXNzZXMgPSB7XG4gICAgc3BhbjogJ2d0LWRlbHRhJyxcbiAgICBwb3NpdGl2ZTogJ3RleHQtc3VjY2VzcycsXG4gICAgbmVnYXRpdmU6ICd0ZXh0LWRhbmdlcicsXG4gIH07XG4gIEBJbnB1dCgpIGtleTogc3RyaW5nID0gJ3ZhbHVlJztcbiAgQElucHV0KCkgbm90QXBwbGljYWJsZVZhbHVlOiBzdHJpbmcgPSAnbi9hJztcbiAgQElucHV0KCkgaW5pdGlhbFZhbHVlOiBzdHJpbmcgPSAnLSc7XG59XG4iXX0=
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3QtZGVsdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2d0LWRlbHRhL2d0LWRlbHRhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBK0MxRSxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCO1FBQ0EsU0FBSSxHQUFHLElBQUksQ0FBQztRQUNaLFdBQU0sR0FBRyxNQUFNLENBQUM7UUFDUCxTQUFJLEdBQWMsRUFBRSxDQUFDO1FBQ3JCLFVBQUssR0FBVyxDQUFDLENBQUM7UUFFbEIsWUFBTyxHQUFHO1lBQ2pCLElBQUksRUFBRSxVQUFVO1lBQ2hCLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLFFBQVEsRUFBRSxhQUFhO1NBQ3hCLENBQUM7UUFDTyxRQUFHLEdBQVcsT0FBTyxDQUFDO1FBQ3RCLHVCQUFrQixHQUFXLEtBQUssQ0FBQztRQUNuQyxpQkFBWSxHQUFXLEdBQUcsQ0FBQztJQWJyQixDQUFDOzs2R0FETCxnQkFBZ0I7aUdBQWhCLGdCQUFnQiwwTkExQ2pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWdDUjsyRkFVUyxnQkFBZ0I7a0JBNUM1QixTQUFTOytCQUNFLFVBQVUsWUFDVjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFnQ1IsbUJBUWUsdUJBQXVCLENBQUMsTUFBTTswRUFNdEMsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVSb3dzIH0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLXJvdy5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdndC1kZWx0YScsXG4gIHRlbXBsYXRlOiBgPHNwYW5cbiAgICAqbmdJZj1cIntcbiAgICAgIHZhbHVlOlxuICAgICAgICBpbmRleCA9PT0gMFxuICAgICAgICAgID8gaW5pdGlhbFZhbHVlXG4gICAgICAgICAgOiAoKGJhc2VJbmRleCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gZGF0YVtpbmRleCAtIDFdW2tleV1cbiAgICAgICAgICAgICAgOiBkYXRhW2Jhc2VJbmRleF1ba2V5XSkgLVxuICAgICAgICAgICAgICBkYXRhW2luZGV4XVtrZXldKSAvXG4gICAgICAgICAgICAtTWF0aC5hYnMoXG4gICAgICAgICAgICAgIGJhc2VJbmRleCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBkYXRhW2luZGV4IC0gMV1ba2V5XVxuICAgICAgICAgICAgICAgIDogZGF0YVtiYXNlSW5kZXhdW2tleV1cbiAgICAgICAgICAgIClcbiAgICB9IGFzIGRlbHRhXCJcbiAgICBbY2xhc3NdPVwiW1xuICAgICAgY2xhc3Nlcy5zcGFuLFxuICAgICAgIWRlbHRhLnZhbHVlIHx8ICFOdW1iZXIuaXNGaW5pdGUoZGVsdGEudmFsdWUpXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IGRlbHRhLnZhbHVlID4gMFxuICAgICAgICA/IGNsYXNzZXMucG9zaXRpdmVcbiAgICAgICAgOiBjbGFzc2VzLm5lZ2F0aXZlXG4gICAgXVwiXG4gICAgW2NsYXNzLmd0LWRlbHRhLXBvc2l0aXZlXT1cImRlbHRhLnZhbHVlID4gMCAmJiBOdW1iZXIuaXNGaW5pdGUoZGVsdGEudmFsdWUpXCJcbiAgICBbY2xhc3MuZ3QtZGVsdGEtbmVnYXRpdmVdPVwiZGVsdGEudmFsdWUgPCAwXCJcbiAgICA+e3tcbiAgICAgIE51bWJlci5pc0Zpbml0ZShkZWx0YS52YWx1ZSlcbiAgICAgICAgPyAoZGVsdGEudmFsdWUgfCBwZXJjZW50KVxuICAgICAgICA6IGRlbHRhLnZhbHVlID09PSBpbml0aWFsVmFsdWVcbiAgICAgICAgPyBpbml0aWFsVmFsdWVcbiAgICAgICAgOiBub3RBcHBsaWNhYmxlVmFsdWVcbiAgICB9fTwvc3BhblxuICA+YCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEd0RGVsdGFDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcigpIHt9XG4gIE1hdGggPSBNYXRoO1xuICBOdW1iZXIgPSBOdW1iZXI7XG4gIEBJbnB1dCgpIGRhdGE6IFRhYmxlUm93cyA9IFtdO1xuICBASW5wdXQoKSBpbmRleDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgYmFzZUluZGV4PzogbnVtYmVyO1xuICBASW5wdXQoKSBjbGFzc2VzID0ge1xuICAgIHNwYW46ICdndC1kZWx0YScsXG4gICAgcG9zaXRpdmU6ICd0ZXh0LXN1Y2Nlc3MnLFxuICAgIG5lZ2F0aXZlOiAndGV4dC1kYW5nZXInLFxuICB9O1xuICBASW5wdXQoKSBrZXk6IHN0cmluZyA9ICd2YWx1ZSc7XG4gIEBJbnB1dCgpIG5vdEFwcGxpY2FibGVWYWx1ZTogc3RyaW5nID0gJ24vYSc7XG4gIEBJbnB1dCgpIGluaXRpYWxWYWx1ZTogc3RyaW5nID0gJy0nO1xufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuL3RhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29uZmlnIHtcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgbW9iaWxlTGF5b3V0PzogYm9vbGVhbjtcbiAgc3RpY2t5SGVhZGVycz86IHtcbiAgICByb3c/OiBib29sZWFuO1xuICAgIGNvbHVtbj86IGJvb2xlYW47XG4gIH07XG4gIGNsYXNzPzogc3RyaW5nO1xuICByb3dzPzoge1xuICAgIFtrZXk6IHN0cmluZ106IFRhYmxlQ29sdW1uO1xuICB9O1xuICBjb2x1bW5zPzoge1xuICAgIFtrZXk6IHN0cmluZ106IFRhYmxlQ29sdW1uO1xuICB9O1xuICBwYWdpbmF0aW9uPzoge1xuICAgIGxlbmd0aD86IG51bWJlcjtcbiAgfTtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuL3RhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICcuL3RhYmxlLXJvdy5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29uZmlnIHtcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgbW9iaWxlTGF5b3V0PzogYm9vbGVhbjtcbiAgc3RpY2t5SGVhZGVycz86IHtcbiAgICByb3c/OiBib29sZWFuO1xuICAgIGNvbHVtbj86IGJvb2xlYW47XG4gIH07XG4gIGNsYXNzPzogc3RyaW5nO1xuICByb3dzPzoge1xuICAgIFtrZXk6IHN0cmluZ106IFRhYmxlQ29sdW1uO1xuICB9O1xuICBjb2x1bW5zPzoge1xuICAgIFtrZXk6IHN0cmluZ106IFRhYmxlQ29sdW1uO1xuICB9O1xuICBwYWdpbmF0aW9uPzoge1xuICAgIGxlbmd0aD86IG51bWJlcjtcbiAgfTtcbiAgcm93Q2xpY2s/OiBib29sZWFuO1xuICByb3dIb3Zlcj86IGJvb2xlYW47XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZXZlbnRzLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9tb2RlbHMvdGFibGUtZXZlbnRzLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICcuL3RhYmxlLXJvdy5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEd0Um93Q2xpY2tFdmVudCB7XG4gIHJvdzogVGFibGVSb3c7XG4gIGluZGV4OiBudW1iZXI7XG4gIGV2ZW50OiBNb3VzZUV2ZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEd0Um93SG92ZXJFdmVudCB7XG4gIHJvdzogVGFibGVSb3cgfCBudWxsO1xuICBpbmRleDogbnVtYmVyIHwgbnVsbDtcbiAgZXZlbnQ/OiBNb3VzZUV2ZW50O1xufVxuIl19
@@ -81,9 +81,9 @@ export class PaginationComponent {
81
81
  }
82
82
  }
83
83
  }
84
- PaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
85
- PaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PaginationComponent, selector: "angular-generic-table-pagination", inputs: { paginationLength: "paginationLength", classes: "classes", ariaLabels: "ariaLabels", table: "table" }, ngImport: i0, template: "<ng-container\n *ngIf=\"{\n links: pagination$ | async,\n currentPosition: table?.currentPage$ | async\n } as pagination\"\n>\n <nav\n *ngIf=\"pagination.links && pagination.links.length > 1\"\n role=\"navigation\"\n [attr.aria-label]=\"ariaLabels?.nav\"\n class=\"gt-pagination\"\n [class]=\"classes?.nav\"\n >\n <ul [class]=\"classes?.ul\">\n <ng-container\n *ngFor=\"\n let position of pagination!.links;\n let i = index;\n let last = last\n \"\n >\n <li\n [class]=\"classes?.li\"\n [class.active]=\"position === (pagination!.currentPosition || 0) + 1\"\n >\n <button\n [class]=\"classes?.button\"\n [attr.aria-label]=\"ariaLabels.button + position\"\n (click)=\"goto(position)\"\n >\n {{ position }}\n </button>\n </li>\n <li\n [class]=\"classes?.li\"\n class=\"gt-ellipsis\"\n *ngIf=\"position + 1 !== pagination!.links![i + 1] && !last\"\n >\n <button [class]=\"classes?.button\" disabled tabindex=\"-1\"></button>\n </li>\n </ng-container>\n </ul>\n </nav>\n</ng-container>\n", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i1.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
86
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PaginationComponent, decorators: [{
84
+ PaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: PaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
85
+ PaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: PaginationComponent, selector: "angular-generic-table-pagination", inputs: { paginationLength: "paginationLength", classes: "classes", ariaLabels: "ariaLabels", table: "table" }, ngImport: i0, template: "<ng-container\n *ngIf=\"{\n links: pagination$ | async,\n currentPosition: table?.currentPage$ | async\n } as pagination\"\n>\n <nav\n *ngIf=\"pagination.links && pagination.links.length > 1\"\n role=\"navigation\"\n [attr.aria-label]=\"ariaLabels?.nav\"\n class=\"gt-pagination\"\n [class]=\"classes?.nav\"\n >\n <ul [class]=\"classes?.ul\">\n <ng-container\n *ngFor=\"\n let position of pagination!.links;\n let i = index;\n let last = last\n \"\n >\n <li\n [class]=\"classes?.li\"\n [class.active]=\"position === (pagination!.currentPosition || 0) + 1\"\n >\n <button\n [class]=\"classes?.button\"\n [attr.aria-label]=\"ariaLabels.button + position\"\n (click)=\"goto(position)\"\n >\n {{ position }}\n </button>\n </li>\n <li\n [class]=\"classes?.li\"\n class=\"gt-ellipsis\"\n *ngIf=\"position + 1 !== pagination!.links![i + 1] && !last\"\n >\n <button [class]=\"classes?.button\" disabled tabindex=\"-1\"></button>\n </li>\n </ng-container>\n </ul>\n </nav>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: PaginationComponent, decorators: [{
87
87
  type: Component,
88
88
  args: [{ selector: 'angular-generic-table-pagination', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container\n *ngIf=\"{\n links: pagination$ | async,\n currentPosition: table?.currentPage$ | async\n } as pagination\"\n>\n <nav\n *ngIf=\"pagination.links && pagination.links.length > 1\"\n role=\"navigation\"\n [attr.aria-label]=\"ariaLabels?.nav\"\n class=\"gt-pagination\"\n [class]=\"classes?.nav\"\n >\n <ul [class]=\"classes?.ul\">\n <ng-container\n *ngFor=\"\n let position of pagination!.links;\n let i = index;\n let last = last\n \"\n >\n <li\n [class]=\"classes?.li\"\n [class.active]=\"position === (pagination!.currentPosition || 0) + 1\"\n >\n <button\n [class]=\"classes?.button\"\n [attr.aria-label]=\"ariaLabels.button + position\"\n (click)=\"goto(position)\"\n >\n {{ position }}\n </button>\n </li>\n <li\n [class]=\"classes?.li\"\n class=\"gt-ellipsis\"\n *ngIf=\"position + 1 !== pagination!.links![i + 1] && !last\"\n >\n <button [class]=\"classes?.button\" disabled tabindex=\"-1\"></button>\n </li>\n </ng-container>\n </ul>\n </nav>\n</ng-container>\n" }]
89
89
  }], propDecorators: { paginationLength: [{
@@ -95,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
95
95
  }], table: [{
96
96
  type: Input
97
97
  }] } });
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVl2RCxNQUFNLE9BQU8sbUJBQW1CO0lBTGhDO1FBbUNFLFdBQU0sR0FBaUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEQsZ0JBQVcsR0FBMkI7WUFDNUMsR0FBRyxFQUFFLGtCQUFrQjtZQUN2QixNQUFNLEVBQUUsYUFBYTtTQUN0QixDQUFDO1FBQ00sYUFBUSxHQUF3QjtZQUN0QyxFQUFFLEVBQUUsWUFBWTtZQUNoQixFQUFFLEVBQUUsV0FBVztZQUNmLE1BQU0sRUFBRSxXQUFXO1NBQ3BCLENBQUM7UUFDTSxzQkFBaUIsR0FBVyxDQUFDLENBQUM7UUFDdEMsZ0JBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDNUIsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDakIsYUFBYSxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQ3RFLEVBQ0QsR0FBRyxDQUFDLENBQUMs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Q0FBQztJQUVELElBQUksQ0FBQyxJQUFZO1FBQ2YsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7O2lIQXJGVSxtQkFBbUI7cUdBQW5CLG1CQUFtQix3TENkaEMsdXRDQTRDQTs0RkQ5QmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGtDQUFrQyxtQkFFM0IsdUJBQXVCLENBQUMsTUFBTTs4QkFPbEMsZ0JBQWdCO3NCQUE1QixLQUFLO2dCQU9PLE9BQU87c0JBQW5CLEtBQUs7Z0JBT08sVUFBVTtzQkFBdEIsS0FBSztnQkFNTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgcGx1Y2ssIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvcmVDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBHdFBhZ2luYXRpb25BcmlhTGFiZWxzLFxuICBHdFBhZ2luYXRpb25DbGFzc2VzLFxufSBmcm9tICcuLi9tb2RlbHMvZ3QtcGFnaW5hdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FuZ3VsYXItZ2VuZXJpYy10YWJsZS1wYWdpbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbXBvbmVudCB7XG4gIGdldCBwYWdpbmF0aW9uTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRpb25MZW5ndGg7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgcGFnaW5hdGlvbkxlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGFnaW5hdGlvbkxlbmd0aCA9ICt2YWx1ZTtcbiAgfVxuICBnZXQgY2xhc3NlcygpOiBHdFBhZ2luYXRpb25DbGFzc2VzIHtcbiAgICByZXR1cm4gdGhpcy5fY2xhc3NlcztcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBjbGFzc2VzKHZhbHVlOiBHdFBhZ2luYXRpb25DbGFzc2VzKSB7XG4gICAgdGhpcy5fY2xhc3NlcyA9IHZhbHVlO1xuICB9XG4gIGdldCBhcmlhTGFiZWxzKCk6IEd0UGFnaW5hdGlvbkFyaWFMYWJlbHMge1xuICAgIHJldHVybiB0aGlzLl9hcmlhTGFiZWxzO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGFyaWFMYWJlbHModmFsdWU6IEd0UGFnaW5hdGlvbkFyaWFMYWJlbHMpIHtcbiAgICB0aGlzLl9hcmlhTGFiZWxzID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHRhYmxlKCk6IENvcmVDb21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90YWJsZTtcbiAgfVxuICBASW5wdXQoKSBzZXQgdGFibGUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3RhYmxlID0gdmFsdWU7XG4gICAgdGhpcy50YWJsZSQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICB0YWJsZSQ6IFJlcGxheVN1YmplY3Q8Q29yZUNvbXBvbmVudD4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgcHJpdmF0ZSBfdGFibGU6IENvcmVDb21wb25lbnQgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2FyaWFMYWJlbHM6IEd0UGFnaW5hdGlvbkFyaWFMYWJlbHMgPSB7XG4gICAgbmF2OiAnVGFibGUgcGFnaW5hdGlvbicsXG4gICAgYnV0dG9uOiAnR28gdG8gcGFnZSAnLFxuICB9O1xuICBwcml2YXRlIF9jbGFzc2VzOiBHdFBhZ2luYXRpb25DbGFzc2VzID0ge1xuICAgIHVsOiAncGFnaW5hdGlvbicsXG4gICAgbGk6ICdwYWdlLWl0ZW0nLFxuICAgIGJ1dHRvbjogJ3BhZ2UtbGluaycsXG4gIH07XG4gIHByaXZhdGUgX3BhZ2luYXRpb25MZW5ndGg6IG51bWJlciA9IDU7XG4gIHBhZ2luYXRpb24kID0gdGhpcy50YWJsZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGNvcmUpID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtjb3JlPy50YWJsZSQucGlwZShwbHVjaygnaW5mbycpKSwgY29yZT8uY3VycmVudFBhZ2UkXSlcbiAgICApLFxuICAgIG1hcCgoW2luZm8sIGN1cnJlbnRQYWdlXSkgPT4gdGhpcy5nZW5lcmF0ZUxpc3QoaW5mby5wYWdlVG90YWwsIGN1cnJlbnRQYWdlKSlcbiAgKTtcblxuICBnZW5lcmF0ZUxpc3QocGFnZXM6IG51bWJlciwgY3VycmVudFBvc2l0aW9uOiBudW1iZXIpOiBBcnJheTxudW1iZXI+IHtcbiAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmZsb29yKHRoaXMucGFnaW5hdGlvbkxlbmd0aCAvIDIpO1xuICAgIGNvbnN0IGxlbmd0aCA9XG4gICAgICBwYWdlcyA8IHRoaXMucGFnaW5hdGlvbkxlbmd0aCA/IHBhZ2VzIDogdGhpcy5wYWdpbmF0aW9uTGVuZ3RoO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSwgKF8sIGkpID0+IHtcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChwYWdlcyA8IHRoaXMucGFnaW5hdGlvbkxlbmd0aCkge1xuICAgICAgICByZXR1cm4gaSArIDE7XG4gICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHBhZ2VzO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UG9zaXRpb24gPiBtaWRkbGUgJiYgY3VycmVudFBvc2l0aW9uIDwgcGFnZXMgLSBtaWRkbGUpIHtcbiAgICAgICAgcmV0dXJuIGkgKyBjdXJyZW50UG9zaXRpb24gLSAobWlkZGxlIC0gMSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjdXJyZW50UG9zaXRpb24gPiBtaWRkbGUgJiZcbiAgICAgICAgY3VycmVudFBvc2l0aW9uIDwgcGFnZXMgLSAobWlkZGxlIC0gMSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gaSArIGN1cnJlbnRQb3NpdGlvbiAtIG1pZGRsZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGN1cnJlbnRQb3NpdGlvbiA+IG1pZGRsZSAmJlxuICAgICAgICBjdXJyZW50UG9zaXRpb24gPT09IHBhZ2VzIC0gKG1pZGRsZSAtIDEpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGkgKyBjdXJyZW50UG9zaXRpb24gLSAobWlkZGxlICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQb3NpdGlvbiA+IG1pZGRsZSAmJiBjdXJyZW50UG9zaXRpb24gPT09IHBhZ2VzIC0gMSkge1xuICAgICAgICByZXR1cm4gaSArIGN1cnJlbnRQb3NpdGlvbiAtIChtaWRkbGUgKyAyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpICsgMTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdvdG8ocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgIHRoaXMudGFibGUucGFnZSA9IHBhZ2UgLSAxO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBsaW5rczogcGFnaW5hdGlvbiQgfCBhc3luYyxcbiAgICBjdXJyZW50UG9zaXRpb246IHRhYmxlPy5jdXJyZW50UGFnZSQgfCBhc3luY1xuICB9IGFzIHBhZ2luYXRpb25cIlxuPlxuICA8bmF2XG4gICAgKm5nSWY9XCJwYWdpbmF0aW9uLmxpbmtzICYmIHBhZ2luYXRpb24ubGlua3MubGVuZ3RoID4gMVwiXG4gICAgcm9sZT1cIm5hdmlnYXRpb25cIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVscz8ubmF2XCJcbiAgICBjbGFzcz1cImd0LXBhZ2luYXRpb25cIlxuICAgIFtjbGFzc109XCJjbGFzc2VzPy5uYXZcIlxuICA+XG4gICAgPHVsIFtjbGFzc109XCJjbGFzc2VzPy51bFwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICBsZXQgcG9zaXRpb24gb2YgcGFnaW5hdGlvbiEubGlua3M7XG4gICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICBsZXQgbGFzdCA9IGxhc3RcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGxpXG4gICAgICAgICAgW2NsYXNzXT1cImNsYXNzZXM/LmxpXCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInBvc2l0aW9uID09PSAocGFnaW5hdGlvbiEuY3VycmVudFBvc2l0aW9uIHx8IDApICsgMVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBbY2xhc3NdPVwiY2xhc3Nlcz8uYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVscy5idXR0b24gKyBwb3NpdGlvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZ290byhwb3NpdGlvbilcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHBvc2l0aW9uIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaVxuICAgICAgICAgIFtjbGFzc109XCJjbGFzc2VzPy5saVwiXG4gICAgICAgICAgY2xhc3M9XCJndC1lbGxpcHNpc1wiXG4gICAgICAgICAgKm5nSWY9XCJwb3NpdGlvbiArIDEgIT09IHBhZ2luYXRpb24hLmxpbmtzIVtpICsgMV0gJiYgIWxhc3RcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvbiBbY2xhc3NdPVwiY2xhc3Nlcz8uYnV0dG9uXCIgZGlzYWJsZWQgdGFiaW5kZXg9XCItMVwiPjwvYnV0dG9uPlxuICAgICAgICA8L2xpPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC91bD5cbiAgPC9uYXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVl2RCxNQUFNLE9BQU8sbUJBQW1CO0lBTGhDO1FBbUNFLFdBQU0sR0FBaUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEQsZ0JBQVcsR0FBMkI7WUFDNUMsR0FBRyxFQUFFLGtCQUFrQjtZQUN2QixNQUFNLEVBQUUsYUFBYTtTQUN0QixDQUFDO1FBQ00sYUFBUSxHQUF3QjtZQUN0QyxFQUFFLEVBQUUsWUFBWTtZQUNoQixFQUFFLEVBQUUsV0FBVztZQUNmLE1BQU0sRUFBRSxXQUFXO1NBQ3BCLENBQUM7UUFDTSxzQkFBaUIsR0FBVyxDQUFDLENBQUM7UUFDdEMsZ0JBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDNUIsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDakIsYUFBYSxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQ3RFLEVBQ0QsR0FBRyxDQUFDLENBQUMs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Q0FBQztJQUVELElBQUksQ0FBQyxJQUFZO1FBQ2YsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7O2dIQXJGVSxtQkFBbUI7b0dBQW5CLG1CQUFtQix3TENkaEMsdXRDQTRDQTsyRkQ5QmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGtDQUFrQyxtQkFFM0IsdUJBQXVCLENBQUMsTUFBTTs4QkFPbEMsZ0JBQWdCO3NCQUE1QixLQUFLO2dCQU9PLE9BQU87c0JBQW5CLEtBQUs7Z0JBT08sVUFBVTtzQkFBdEIsS0FBSztnQkFNTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgcGx1Y2ssIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvcmVDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBHdFBhZ2luYXRpb25BcmlhTGFiZWxzLFxuICBHdFBhZ2luYXRpb25DbGFzc2VzLFxufSBmcm9tICcuLi9tb2RlbHMvZ3QtcGFnaW5hdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FuZ3VsYXItZ2VuZXJpYy10YWJsZS1wYWdpbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbXBvbmVudCB7XG4gIGdldCBwYWdpbmF0aW9uTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRpb25MZW5ndGg7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgcGFnaW5hdGlvbkxlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGFnaW5hdGlvbkxlbmd0aCA9ICt2YWx1ZTtcbiAgfVxuICBnZXQgY2xhc3NlcygpOiBHdFBhZ2luYXRpb25DbGFzc2VzIHtcbiAgICByZXR1cm4gdGhpcy5fY2xhc3NlcztcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBjbGFzc2VzKHZhbHVlOiBHdFBhZ2luYXRpb25DbGFzc2VzKSB7XG4gICAgdGhpcy5fY2xhc3NlcyA9IHZhbHVlO1xuICB9XG4gIGdldCBhcmlhTGFiZWxzKCk6IEd0UGFnaW5hdGlvbkFyaWFMYWJlbHMge1xuICAgIHJldHVybiB0aGlzLl9hcmlhTGFiZWxzO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGFyaWFMYWJlbHModmFsdWU6IEd0UGFnaW5hdGlvbkFyaWFMYWJlbHMpIHtcbiAgICB0aGlzLl9hcmlhTGFiZWxzID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHRhYmxlKCk6IENvcmVDb21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90YWJsZTtcbiAgfVxuICBASW5wdXQoKSBzZXQgdGFibGUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3RhYmxlID0gdmFsdWU7XG4gICAgdGhpcy50YWJsZSQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICB0YWJsZSQ6IFJlcGxheVN1YmplY3Q8Q29yZUNvbXBvbmVudD4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgcHJpdmF0ZSBfdGFibGU6IENvcmVDb21wb25lbnQgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2FyaWFMYWJlbHM6IEd0UGFnaW5hdGlvbkFyaWFMYWJlbHMgPSB7XG4gICAgbmF2OiAnVGFibGUgcGFnaW5hdGlvbicsXG4gICAgYnV0dG9uOiAnR28gdG8gcGFnZSAnLFxuICB9O1xuICBwcml2YXRlIF9jbGFzc2VzOiBHdFBhZ2luYXRpb25DbGFzc2VzID0ge1xuICAgIHVsOiAncGFnaW5hdGlvbicsXG4gICAgbGk6ICdwYWdlLWl0ZW0nLFxuICAgIGJ1dHRvbjogJ3BhZ2UtbGluaycsXG4gIH07XG4gIHByaXZhdGUgX3BhZ2luYXRpb25MZW5ndGg6IG51bWJlciA9IDU7XG4gIHBhZ2luYXRpb24kID0gdGhpcy50YWJsZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGNvcmUpID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtjb3JlPy50YWJsZSQucGlwZShwbHVjaygnaW5mbycpKSwgY29yZT8uY3VycmVudFBhZ2UkXSlcbiAgICApLFxuICAgIG1hcCgoW2luZm8sIGN1cnJlbnRQYWdlXSkgPT4gdGhpcy5nZW5lcmF0ZUxpc3QoaW5mby5wYWdlVG90YWwsIGN1cnJlbnRQYWdlKSlcbiAgKTtcblxuICBnZW5lcmF0ZUxpc3QocGFnZXM6IG51bWJlciwgY3VycmVudFBvc2l0aW9uOiBudW1iZXIpOiBBcnJheTxudW1iZXI+IHtcbiAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmZsb29yKHRoaXMucGFnaW5hdGlvbkxlbmd0aCAvIDIpO1xuICAgIGNvbnN0IGxlbmd0aCA9XG4gICAgICBwYWdlcyA8IHRoaXMucGFnaW5hdGlvbkxlbmd0aCA/IHBhZ2VzIDogdGhpcy5wYWdpbmF0aW9uTGVuZ3RoO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSwgKF8sIGkpID0+IHtcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChwYWdlcyA8IHRoaXMucGFnaW5hdGlvbkxlbmd0aCkge1xuICAgICAgICByZXR1cm4gaSArIDE7XG4gICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHBhZ2VzO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UG9zaXRpb24gPiBtaWRkbGUgJiYgY3VycmVudFBvc2l0aW9uIDwgcGFnZXMgLSBtaWRkbGUpIHtcbiAgICAgICAgcmV0dXJuIGkgKyBjdXJyZW50UG9zaXRpb24gLSAobWlkZGxlIC0gMSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjdXJyZW50UG9zaXRpb24gPiBtaWRkbGUgJiZcbiAgICAgICAgY3VycmVudFBvc2l0aW9uIDwgcGFnZXMgLSAobWlkZGxlIC0gMSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gaSArIGN1cnJlbnRQb3NpdGlvbiAtIG1pZGRsZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGN1cnJlbnRQb3NpdGlvbiA+IG1pZGRsZSAmJlxuICAgICAgICBjdXJyZW50UG9zaXRpb24gPT09IHBhZ2VzIC0gKG1pZGRsZSAtIDEpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGkgKyBjdXJyZW50UG9zaXRpb24gLSAobWlkZGxlICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQb3NpdGlvbiA+IG1pZGRsZSAmJiBjdXJyZW50UG9zaXRpb24gPT09IHBhZ2VzIC0gMSkge1xuICAgICAgICByZXR1cm4gaSArIGN1cnJlbnRQb3NpdGlvbiAtIChtaWRkbGUgKyAyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpICsgMTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdvdG8ocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgIHRoaXMudGFibGUucGFnZSA9IHBhZ2UgLSAxO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBsaW5rczogcGFnaW5hdGlvbiQgfCBhc3luYyxcbiAgICBjdXJyZW50UG9zaXRpb246IHRhYmxlPy5jdXJyZW50UGFnZSQgfCBhc3luY1xuICB9IGFzIHBhZ2luYXRpb25cIlxuPlxuICA8bmF2XG4gICAgKm5nSWY9XCJwYWdpbmF0aW9uLmxpbmtzICYmIHBhZ2luYXRpb24ubGlua3MubGVuZ3RoID4gMVwiXG4gICAgcm9sZT1cIm5hdmlnYXRpb25cIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVscz8ubmF2XCJcbiAgICBjbGFzcz1cImd0LXBhZ2luYXRpb25cIlxuICAgIFtjbGFzc109XCJjbGFzc2VzPy5uYXZcIlxuICA+XG4gICAgPHVsIFtjbGFzc109XCJjbGFzc2VzPy51bFwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICBsZXQgcG9zaXRpb24gb2YgcGFnaW5hdGlvbiEubGlua3M7XG4gICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICBsZXQgbGFzdCA9IGxhc3RcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGxpXG4gICAgICAgICAgW2NsYXNzXT1cImNsYXNzZXM/LmxpXCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInBvc2l0aW9uID09PSAocGFnaW5hdGlvbiEuY3VycmVudFBvc2l0aW9uIHx8IDApICsgMVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBbY2xhc3NdPVwiY2xhc3Nlcz8uYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVscy5idXR0b24gKyBwb3NpdGlvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZ290byhwb3NpdGlvbilcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHBvc2l0aW9uIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaVxuICAgICAgICAgIFtjbGFzc109XCJjbGFzc2VzPy5saVwiXG4gICAgICAgICAgY2xhc3M9XCJndC1lbGxpcHNpc1wiXG4gICAgICAgICAgKm5nSWY9XCJwb3NpdGlvbiArIDEgIT09IHBhZ2luYXRpb24hLmxpbmtzIVtpICsgMV0gJiYgIWxhc3RcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvbiBbY2xhc3NdPVwiY2xhc3Nlcz8uYnV0dG9uXCIgZGlzYWJsZWQgdGFiaW5kZXg9XCItMVwiPjwvYnV0dG9uPlxuICAgICAgICA8L2xpPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC91bD5cbiAgPC9uYXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==