@one-paragon/angular-utilities 1.2.11 → 1.2.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.
- package/action-state/ngrx.d.ts +1 -1
- package/esm2022/table-builder/classes/TableBuilderDataSource.mjs +18 -27
- package/esm2022/table-builder/classes/table-builder.mjs +2 -2
- package/esm2022/table-builder/classes/table-store.mjs +9 -13
- package/esm2022/table-builder/components/column-builder/column-helpers.mjs +1 -3
- package/esm2022/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +11 -17
- package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +21 -20
- package/esm2022/table-builder/components/generic-table/paginator.component.mjs +58 -56
- package/esm2022/table-builder/components/table-container/table-container.mjs +55 -51
- package/esm2022/table-builder/components/table-container/virtual-scroll-container.mjs +57 -34
- package/esm2022/table-builder/directives/tb-filter.directive.mjs +10 -19
- package/esm2022/table-builder/services/export-to-csv.service.mjs +6 -16
- package/fesm2022/one-paragon-angular-utilities.mjs +239 -242
- package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -1
- package/package.json +1 -1
- package/table-builder/classes/TableBuilderDataSource.d.ts +4 -4
- package/table-builder/classes/table-store.d.ts +5 -3
- package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +5 -3
- package/table-builder/components/generic-table/generic-table.component.d.ts +3 -1
- package/table-builder/components/generic-table/paginator.component.d.ts +20 -19
- package/table-builder/components/table-container/table-container-imports.d.ts +2 -2
- package/table-builder/components/table-container/table-container.d.ts +10 -11
- package/table-builder/components/table-container/virtual-scroll-container.d.ts +15 -2
- package/table-builder/directives/table-wrapper.directive.d.ts +1 -1
- package/table-builder/directives/tb-filter.directive.d.ts +2 -3
- package/table-builder/services/export-to-csv.service.d.ts +1 -6
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
import { Component, Input, EventEmitter, Output, ContentChildren, ChangeDetectionStrategy, ViewChild, inject, ContentChild, ElementRef, Injector, contentChildren, computed, effect, untracked, } from '@angular/core';
|
|
1
|
+
import { Component, Input, EventEmitter, Output, ContentChildren, ChangeDetectionStrategy, ViewChild, inject, ContentChild, ElementRef, Injector, contentChildren, computed, effect, untracked, runInInjectionContext, } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject, ReplaySubject, combineLatest, of } from 'rxjs';
|
|
3
3
|
import { FieldType } from '../../interfaces/report-def';
|
|
4
|
-
import { map,
|
|
4
|
+
import { map, mergeAll, scan, startWith, timestamp, mergeMap, switchMap } from 'rxjs/operators';
|
|
5
5
|
import { MatRowDef } from '@angular/material/table';
|
|
6
6
|
import { CustomCellDirective, TableCustomFilterDirective, TableFilterDirective } from '../../directives';
|
|
7
7
|
import { stateIs, TableStore } from '../../classes/table-store';
|
|
8
|
-
import { notNull } from '../../../rxjs/rxjs-operators';
|
|
9
8
|
import { ExportToCsvService } from '../../services/export-to-csv.service';
|
|
10
9
|
import { ArrayDefaults } from '../../classes/DefaultSettings';
|
|
11
10
|
import { TableBuilderConfigToken } from '../../classes/TableBuilderConfig';
|
|
12
11
|
import { InitializationState } from '../../classes/TableState';
|
|
13
|
-
import { sortData } from '../../functions/sort-data-function';
|
|
14
12
|
import { WrapperFilterStore } from '../table-container-filter/table-wrapper-filter-store';
|
|
15
13
|
import { cloneDeep } from 'lodash';
|
|
16
14
|
import { defaultShareReplay } from '../../../rxjs';
|
|
@@ -49,7 +47,7 @@ import * as i16 from "@angular/material/tooltip";
|
|
|
49
47
|
import * as i17 from "./virtual-scroll-container";
|
|
50
48
|
export class TableContainerComponent {
|
|
51
49
|
props = { ...defaultProps };
|
|
52
|
-
|
|
50
|
+
data = new BehaviorSubject([]);
|
|
53
51
|
state = inject(TableStore);
|
|
54
52
|
dataStore = inject(DataStore);
|
|
55
53
|
config = inject(TableBuilderConfigToken);
|
|
@@ -59,7 +57,7 @@ export class TableContainerComponent {
|
|
|
59
57
|
injector = inject(Injector);
|
|
60
58
|
filterDirectives = contentChildren(TableFilterDirective, { descendants: true });
|
|
61
59
|
customFilterDirectives = contentChildren(TableCustomFilterDirective, { descendants: true });
|
|
62
|
-
allFilterDirectives = computed(() => {
|
|
60
|
+
$allFilterDirectives = computed(() => {
|
|
63
61
|
if (this.wrapper) {
|
|
64
62
|
return [...this.filterDirectives(), ...this.customFilterDirectives(), ...this.wrapper.$registrations()];
|
|
65
63
|
}
|
|
@@ -67,15 +65,17 @@ export class TableContainerComponent {
|
|
|
67
65
|
return [...this.filterDirectives(), ...this.customFilterDirectives()];
|
|
68
66
|
}
|
|
69
67
|
});
|
|
70
|
-
|
|
68
|
+
$isInitializationState = (state) => computed(() => this.state.selectSignal(s => s.initializationState === state)());
|
|
71
69
|
allFilterDirectivesEffect = effect(() => {
|
|
72
|
-
const
|
|
70
|
+
const loaded = this.$isInitializationState(InitializationState.LoadedFromStore)();
|
|
71
|
+
const stateFilters = this.state.$filters();
|
|
72
|
+
const filterDirectives = this.$allFilterDirectives();
|
|
73
73
|
untracked(() => {
|
|
74
|
-
if (
|
|
75
|
-
|
|
74
|
+
if (loaded) {
|
|
75
|
+
filterDirectives.filter(f => !f.used).forEach(f => {
|
|
76
76
|
f.used = true;
|
|
77
77
|
if (f.savable) {
|
|
78
|
-
var filter =
|
|
78
|
+
var filter = stateFilters[f.filterId];
|
|
79
79
|
if (isFilterInfo(filter)) {
|
|
80
80
|
const filterDirective = f;
|
|
81
81
|
filterDirective.fieldType = filter.fieldType;
|
|
@@ -127,27 +127,27 @@ export class TableContainerComponent {
|
|
|
127
127
|
trackBy;
|
|
128
128
|
inputFilters;
|
|
129
129
|
selection$ = new EventEmitter();
|
|
130
|
-
data = this.
|
|
130
|
+
$data = toSignal(this.data, { initialValue: [] });
|
|
131
131
|
onStateReset = new EventEmitter();
|
|
132
132
|
onSaveState = new EventEmitter();
|
|
133
133
|
state$ = this.state.getSavableState().pipe(map(state => cloneDeep(state)), defaultShareReplay());
|
|
134
134
|
clearSelections() {
|
|
135
135
|
this.genericTable?.selection.clear(true);
|
|
136
136
|
}
|
|
137
|
-
|
|
138
|
-
displayData = this.displayDataSubject.pipe(switchAll(), defaultShareReplay());
|
|
137
|
+
displayData = new ReplaySubject(1);
|
|
139
138
|
$displayData = toSignal(this.displayData, { initialValue: [] });
|
|
140
|
-
collapseFooter
|
|
139
|
+
$collapseFooter = this.state.$collapseFooter;
|
|
140
|
+
$collapseHeader = this.state.$collapseHeader;
|
|
141
141
|
ngOnDestroy() {
|
|
142
142
|
if (this.tableId) {
|
|
143
143
|
this.stateService.saveTableStateToLocal({ tableId: this.tableId, tableState: this.state.getSavableStateSignal() });
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
firstPage() {
|
|
147
|
-
this.paginatorComponent
|
|
147
|
+
this.paginatorComponent?.$paginator()?.firstPage();
|
|
148
148
|
}
|
|
149
149
|
lastPage() {
|
|
150
|
-
this.paginatorComponent
|
|
150
|
+
this.paginatorComponent?.$paginator()?.lastPage();
|
|
151
151
|
}
|
|
152
152
|
resetState() {
|
|
153
153
|
this.customFilterDirectives().forEach(cf => cf.reset());
|
|
@@ -155,22 +155,22 @@ export class TableContainerComponent {
|
|
|
155
155
|
this.state.resetState();
|
|
156
156
|
this.onStateReset.next(null);
|
|
157
157
|
}
|
|
158
|
-
|
|
159
|
-
this
|
|
160
|
-
|
|
161
|
-
if (
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
158
|
+
initializeStateEffect = effect(() => {
|
|
159
|
+
const metaLoaded = this.$isInitializationState(InitializationState.MetaDataLoaded)();
|
|
160
|
+
untracked(() => {
|
|
161
|
+
if (metaLoaded) {
|
|
162
|
+
this.state.setTableSettings(this.tableBuilder.settings);
|
|
163
|
+
if (this.tableId) {
|
|
164
|
+
const persistedState = this.stateService.$selectLocalTableStateForView(this.tableId)();
|
|
165
|
+
if (persistedState) {
|
|
166
|
+
this.state.updateStateFromPersistedState(persistedState);
|
|
167
|
+
return;
|
|
165
168
|
}
|
|
166
|
-
}
|
|
167
|
-
this.state.updateStateFromPersistedState(persistedState$.pipe(notNull()));
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
169
|
+
}
|
|
170
170
|
this.state.setInitializationState(InitializationState.LoadedFromStore);
|
|
171
171
|
}
|
|
172
172
|
});
|
|
173
|
-
}
|
|
173
|
+
});
|
|
174
174
|
customFilters$ = new BehaviorSubject([]);
|
|
175
175
|
initializeData() {
|
|
176
176
|
const predicateFilters$ = combineLatest([this.inputFilters?.pipe(startWith([])) ?? of([]), this.customFilters$])
|
|
@@ -183,29 +183,35 @@ export class TableContainerComponent {
|
|
|
183
183
|
const sortsState$ = this.state.sort$.pipe(scan(updateSortState, initialSortState));
|
|
184
184
|
const sortedAndFilteredData$ = sortAndFilterData(this.tableBuilder.getData$(), sortsState$, filters$);
|
|
185
185
|
const flatGrouped$ = combineLatest([sortedAndFilteredData$.pipe(timestamp()), this.state.groupByKeys$.pipe(timestamp()), this.state.expandedGroups$.pipe(timestamp())]).pipe(scan(updateGroupByState, initialGroupByState), map(({ displayData }) => displayData), defaultShareReplay());
|
|
186
|
-
this.
|
|
187
|
-
|
|
188
|
-
this.state.on(this.displayData, (data) => {
|
|
186
|
+
this.state.on(sortedAndFilteredData$, (data) => {
|
|
187
|
+
this.data.next(data);
|
|
189
188
|
this.dataStore.patchState({ dataLen: data.length });
|
|
190
189
|
});
|
|
190
|
+
this.state.on(flatGrouped$, (data) => {
|
|
191
|
+
this.displayData.next(data);
|
|
192
|
+
});
|
|
191
193
|
}
|
|
192
194
|
ngOnInit() {
|
|
193
195
|
const customCells$ = toObservable(this.$customCells, { injector: this.injector });
|
|
194
196
|
this.state.setLinkMaps(this.tableBuilder.metaData$.pipe(map(createLinkCreatorDict)));
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
+
const customCellMeta = customCells$.pipe(switchMap(c => c.length ? combineLatest(c.map(c => c.$metaData)) : of([])));
|
|
198
|
+
const metaForState = combineLatest([this.tableBuilder.metaData$, customCellMeta]).pipe(map(([mds, customCells]) => {
|
|
197
199
|
mds = mds.map(this.mapArrayFieldsMetaDatas);
|
|
198
200
|
return [
|
|
199
201
|
...mds,
|
|
200
202
|
...customCells.map(md => this.mergeMetaData(md, mds.find(item => item.key === md.key)))
|
|
201
203
|
];
|
|
202
|
-
}))
|
|
203
|
-
|
|
204
|
-
this.
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
204
|
+
}));
|
|
205
|
+
this.state.setMetaData(metaForState);
|
|
206
|
+
runInInjectionContext(this.injector, () => {
|
|
207
|
+
const ds = new TableBuilderDataSource(this.$displayData, this.state, this.dataStore);
|
|
208
|
+
this.state.updateState({
|
|
209
|
+
props: {
|
|
210
|
+
dataSource: ds,
|
|
211
|
+
...this.props
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
});
|
|
209
215
|
this.initializeData();
|
|
210
216
|
}
|
|
211
217
|
mergeMetaData(metaData1, metaData2) {
|
|
@@ -227,8 +233,7 @@ export class TableContainerComponent {
|
|
|
227
233
|
return metaData1;
|
|
228
234
|
}
|
|
229
235
|
exportToCsv() {
|
|
230
|
-
|
|
231
|
-
this.exportToCsvService.exportToCsv(sorted);
|
|
236
|
+
this.exportToCsvService.exportToCsv(this.$data());
|
|
232
237
|
}
|
|
233
238
|
expandAllGroups = () => {
|
|
234
239
|
const groupHeaders = getAllGroupHeaderNames(this.$displayData());
|
|
@@ -250,9 +255,8 @@ export class TableContainerComponent {
|
|
|
250
255
|
}
|
|
251
256
|
return meta;
|
|
252
257
|
};
|
|
253
|
-
collapseHeader$ = this.state.state$.pipe(map(state => state.persistedTableSettings.collapseHeader));
|
|
254
258
|
addFilterDirectives = (state) => {
|
|
255
|
-
const customFilters$ = toObservable(this
|
|
259
|
+
const customFilters$ = toObservable(this.$allFilterDirectives, { injector: this.injector }).pipe(mergeMap(customerFilters => customerFilters
|
|
256
260
|
.filter(filter => !filter.savable)
|
|
257
261
|
.map(filter => filter.filter$)), mergeAll(), scan((a, b) => {
|
|
258
262
|
if (b.active) {
|
|
@@ -269,12 +273,14 @@ export class TableContainerComponent {
|
|
|
269
273
|
};
|
|
270
274
|
$useVirtual = this.state.$isVirtual;
|
|
271
275
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
272
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: TableContainerComponent, isStandalone: true, selector: "tb-table-container", inputs: { tableBuilder: "tableBuilder", tableId: "tableId", indexColumn: "indexColumn", selectionColumn: "selectionColumn", isSticky: "isSticky", stickyFooter: "stickyFooter", pageSize: "pageSize", groupHeaderTemplate: "groupHeaderTemplate", groupHeaderHeight: "groupHeaderHeight", trackBy: "trackBy", inputFilters: "inputFilters" }, outputs: {
|
|
276
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: TableContainerComponent, isStandalone: true, selector: "tb-table-container", inputs: { tableBuilder: "tableBuilder", tableId: "tableId", indexColumn: "indexColumn", selectionColumn: "selectionColumn", isSticky: "isSticky", stickyFooter: "stickyFooter", pageSize: "pageSize", groupHeaderTemplate: "groupHeaderTemplate", groupHeaderHeight: "groupHeaderHeight", trackBy: "trackBy", inputFilters: "inputFilters" }, outputs: { data: "data", selection$: "selection$", onStateReset: "onStateReset", onSaveState: "onSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore, DataStore], queries: [{ propertyName: "filterDirectives", predicate: TableFilterDirective, descendants: true, isSignal: true }, { propertyName: "customFilterDirectives", predicate: TableCustomFilterDirective, descendants: true, isSignal: true }, { propertyName: "$customCells", predicate: CustomCellDirective, isSignal: true }, { propertyName: "tableElRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "customRows", predicate: MatRowDef }], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }, { propertyName: "genericTable", first: true, predicate: GenericTableComponent, descendants: true }], ngImport: i0, template: "<ng-content select=\"[before]\" />\r\n\r\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\r\n <div class=\"header-wrapper\">\r\n <div class=\"title\">\r\n @if ((!$collapseHeader()) || tableSettings.showTitleWhenHeaderCollapsed) {\r\n <ng-content select=\".tb-header-title\"/>\r\n }\r\n @if((state.groupByKeys$ | async)?.length){\r\n <group-by-list />\r\n }\r\n </div>\r\n <div class=\"flx-row-end\">\r\n <lib-filter-list />\r\n @if (!tableSettings.hideHeader) {\r\n @if (!$collapseHeader()) {\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n @else {\r\n <mat-icon color=\"primary\" [matMenuTriggerFor]=\"mainMenu\" class=\"flat-menu-button pointer\">more_horiz</mat-icon>\r\n <mat-menu #mainMenu='matMenu'>\r\n <div class=\"flex-column\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n <mat-icon [matTooltip]=\"$collapseHeader() ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\r\n (click)=\"state.toggleCollapseHeader()\">\r\n {{$collapseHeader() ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n }\r\n\r\n </div>\r\n </div>\r\n <div class=\"table-wrapper\">\r\n @if($useVirtual())\r\n {\r\n <tb-virtual-scroll-container>\r\n <tb-generic-table [rows]='customRows' [data]=\"(data | async)!\" [displayData]=\"$displayData()\"\r\n (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]=\"trackBy\" />\r\n </tb-virtual-scroll-container>\r\n }\r\n @else\r\n {\r\n <tb-generic-table [rows]='customRows' [data]=\"(data | async)!\" [displayData]=\"$displayData()\"\r\n (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]=\"trackBy\" />\r\n }\r\n\r\n </div>\r\n @if(tableSettings.usePaginator)\r\n {\r\n <div class=\"paginator\">\r\n <tb-paginator #tbPaginator [tableElRef]=\"tableElRef\" />\r\n\r\n <mat-icon [matTooltip]=\"$collapseFooter() ? 'expand' : 'collapse'\" class=\"collapse-icon footer\"\r\n (click)=\"state.toggleCollapseFooter()\">\r\n {{$collapseFooter() ? 'expand_more' : 'expand_less'}}\r\n </mat-icon>\r\n </div>\r\n }\r\n\r\n <ng-template #headerMenu>\r\n @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}\r\n @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}\r\n @if (!tableSettings.hideSort) {<tb-sort-menu/>}\r\n @if (!!tableId) {<tb-profiles-menu [$tableId]=\"tableId\" (onSaveState)=\"onSaveState.emit($event)\"/>}\r\n </ng-template>\r\n\r\n <ng-template #headerMenuExtra>\r\n <button mat-menu-item (click)=\"resetState()\">\r\n <mat-icon color=\"primary\">autorenew</mat-icon>\r\n <span>Reset table</span>\r\n </button>\r\n @if (!tableSettings.hideExport) {\r\n <button mat-menu-item (click)=\"exportToCsv()\">\r\n <mat-icon color=\"primary\">file_download</mat-icon>\r\n <span>Export Table</span>\r\n </button>\r\n }\r\n @if (tableId) {\r\n <button stop-propagation mat-menu-item (click)=\"pm.trigger()?.toggleMenu()\">\r\n <mat-icon color=\"primary\">people</mat-icon>\r\n <span>Profiles</span>\r\n </button>\r\n <tb-profiles-menu class=\"profiles-menu\" #pm [$tableId]=\"tableId\" (onSaveState)=\"onSaveState.emit($event)\"/>\r\n }\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}.pointer{cursor:pointer}.add-key{width:90%}.paginator{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff;bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.profiles-menu{visibility:hidden;width:0px;height:0px;display:block;overflow:hidden;position:absolute;top:50px}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}.paginator-row{display:flex;align-items:center}\n"], dependencies: [{ kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.PaginatorComponent, selector: "tb-paginator", inputs: ["tableElRef"] }, { kind: "directive", type: i3.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: i4.MultiSortDirective, selector: "[multiSort]", inputs: ["matSortDisabled"], exportAs: ["multiSort"] }, { kind: "component", type: i5.GroupByListComponent, selector: "group-by-list" }, { kind: "component", type: i6.FilterChipsComponent, selector: "lib-filter-list" }, { kind: "component", type: i7.GenFilterDisplayerComponent, selector: "tb-filter-displayer" }, { kind: "component", type: i8.GenColDisplayerComponent, selector: "tb-col-displayer" }, { kind: "component", type: i9.SortMenuComponent, selector: "tb-sort-menu" }, { kind: "component", type: i10.GenericTableComponent, selector: "tb-generic-table", inputs: ["trackBy", "displayData", "data", "rows", "columnBuilders", "columnInfos"], outputs: ["selection$"] }, { kind: "directive", type: i11.StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "component", type: i12.ProfilesMenuComponent, selector: "tb-profiles-menu", inputs: ["$tableId"], outputs: ["onSaveState"] }, { kind: "ngmodule", type: i13.MatButtonModule }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: i14.MatMenuModule }, { kind: "component", type: i14.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: i15.MatIconModule }, { kind: "component", type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: i16.MatTooltipModule }, { kind: "directive", type: i16.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i17.VirtualScrollContainer, selector: "tb-virtual-scroll-container" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
273
277
|
}
|
|
274
278
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableContainerComponent, decorators: [{
|
|
275
279
|
type: Component,
|
|
276
|
-
args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore, DataStore], standalone: true, imports: containerImports, template: "<ng-content select=\"[before]\" />\r\n\r\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\r\n <div class=\"header-wrapper\">\r\n <div class=\"title\">\r\n @if ((
|
|
277
|
-
}], propDecorators: {
|
|
280
|
+
args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore, DataStore], standalone: true, imports: containerImports, template: "<ng-content select=\"[before]\" />\r\n\r\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\r\n <div class=\"header-wrapper\">\r\n <div class=\"title\">\r\n @if ((!$collapseHeader()) || tableSettings.showTitleWhenHeaderCollapsed) {\r\n <ng-content select=\".tb-header-title\"/>\r\n }\r\n @if((state.groupByKeys$ | async)?.length){\r\n <group-by-list />\r\n }\r\n </div>\r\n <div class=\"flx-row-end\">\r\n <lib-filter-list />\r\n @if (!tableSettings.hideHeader) {\r\n @if (!$collapseHeader()) {\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n @else {\r\n <mat-icon color=\"primary\" [matMenuTriggerFor]=\"mainMenu\" class=\"flat-menu-button pointer\">more_horiz</mat-icon>\r\n <mat-menu #mainMenu='matMenu'>\r\n <div class=\"flex-column\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n <mat-icon [matTooltip]=\"$collapseHeader() ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\r\n (click)=\"state.toggleCollapseHeader()\">\r\n {{$collapseHeader() ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n }\r\n\r\n </div>\r\n </div>\r\n <div class=\"table-wrapper\">\r\n @if($useVirtual())\r\n {\r\n <tb-virtual-scroll-container>\r\n <tb-generic-table [rows]='customRows' [data]=\"(data | async)!\" [displayData]=\"$displayData()\"\r\n (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]=\"trackBy\" />\r\n </tb-virtual-scroll-container>\r\n }\r\n @else\r\n {\r\n <tb-generic-table [rows]='customRows' [data]=\"(data | async)!\" [displayData]=\"$displayData()\"\r\n (selection$)='selection$.emit($event)' [columnInfos]='$myColumns()' [trackBy]=\"trackBy\" />\r\n }\r\n\r\n </div>\r\n @if(tableSettings.usePaginator)\r\n {\r\n <div class=\"paginator\">\r\n <tb-paginator #tbPaginator [tableElRef]=\"tableElRef\" />\r\n\r\n <mat-icon [matTooltip]=\"$collapseFooter() ? 'expand' : 'collapse'\" class=\"collapse-icon footer\"\r\n (click)=\"state.toggleCollapseFooter()\">\r\n {{$collapseFooter() ? 'expand_more' : 'expand_less'}}\r\n </mat-icon>\r\n </div>\r\n }\r\n\r\n <ng-template #headerMenu>\r\n @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}\r\n @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}\r\n @if (!tableSettings.hideSort) {<tb-sort-menu/>}\r\n @if (!!tableId) {<tb-profiles-menu [$tableId]=\"tableId\" (onSaveState)=\"onSaveState.emit($event)\"/>}\r\n </ng-template>\r\n\r\n <ng-template #headerMenuExtra>\r\n <button mat-menu-item (click)=\"resetState()\">\r\n <mat-icon color=\"primary\">autorenew</mat-icon>\r\n <span>Reset table</span>\r\n </button>\r\n @if (!tableSettings.hideExport) {\r\n <button mat-menu-item (click)=\"exportToCsv()\">\r\n <mat-icon color=\"primary\">file_download</mat-icon>\r\n <span>Export Table</span>\r\n </button>\r\n }\r\n @if (tableId) {\r\n <button stop-propagation mat-menu-item (click)=\"pm.trigger()?.toggleMenu()\">\r\n <mat-icon color=\"primary\">people</mat-icon>\r\n <span>Profiles</span>\r\n </button>\r\n <tb-profiles-menu class=\"profiles-menu\" #pm [$tableId]=\"tableId\" (onSaveState)=\"onSaveState.emit($event)\"/>\r\n }\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}.pointer{cursor:pointer}.add-key{width:90%}.paginator{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff;bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.profiles-menu{visibility:hidden;width:0px;height:0px;display:block;overflow:hidden;position:absolute;top:50px}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}.paginator-row{display:flex;align-items:center}\n"] }]
|
|
281
|
+
}], propDecorators: { data: [{
|
|
282
|
+
type: Output
|
|
283
|
+
}], paginatorComponent: [{
|
|
278
284
|
type: ViewChild,
|
|
279
285
|
args: [PaginatorComponent]
|
|
280
286
|
}], genericTable: [{
|
|
@@ -311,8 +317,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
311
317
|
type: Input
|
|
312
318
|
}], selection$: [{
|
|
313
319
|
type: Output
|
|
314
|
-
}], data: [{
|
|
315
|
-
type: Output
|
|
316
320
|
}], onStateReset: [{
|
|
317
321
|
type: Output
|
|
318
322
|
}], onSaveState: [{
|
|
@@ -320,4 +324,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
320
324
|
}], state$: [{
|
|
321
325
|
type: Output
|
|
322
326
|
}] } });
|
|
323
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBRWYsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxNQUFNLEVBRU4sWUFBWSxFQUNaLFVBQVUsRUFHVixRQUFRLEVBQ1IsZUFBZSxFQUNmLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckYsT0FBTyxFQUFtQixTQUFTLEVBQVksTUFBTSw2QkFBNkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhJLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUs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O2dCQUdPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBR08sUUFBUTtzQkFBcEIsS0FBSztnQkFHTyxZQUFZO3NCQUF4QixLQUFLO2dCQUdPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBR08sbUJBQW1CO3NCQUEvQixLQUFLO2dCQUdPLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFLRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE91dHB1dCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFByZWRpY2F0ZSxcclxuICBWaWV3Q2hpbGQsXHJcbiAgaW5qZWN0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSW5qZWN0b3IsXHJcbiAgY29udGVudENoaWxkcmVuLFxyXG4gIGNvbXB1dGVkLFxyXG4gIGVmZmVjdCxcclxuICB1bnRyYWNrZWQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgY29tYmluZUxhdGVzdCwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXJyYXlBZGRpdGlvbmFsLCBGaWVsZFR5cGUsIE1ldGFEYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtZGVmJztcclxuaW1wb3J0IHsgbWFwLCB0YXAsIHdpdGhMYXRlc3RGcm9tLCBtZXJnZUFsbCwgc2Nhbiwgc3dpdGNoQWxsLCBzdGFydFdpdGgsIHRpbWVzdGFtcCwgbWVyZ2VNYXAsIGZpbHRlciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUYWJsZUJ1aWxkZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLWJ1aWxkZXInO1xyXG5pbXBvcnQgeyBNYXRSb3dEZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IEN1c3RvbUNlbGxEaXJlY3RpdmUsIFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCBUYWJsZUZpbHRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBzdGF0ZUlzLCBUYWJsZVN0b3JlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90YWJsZS1zdG9yZSc7XHJcbmltcG9ydCB7IG5vdE51bGwgfSBmcm9tICcuLi8uLi8uLi9yeGpzL3J4anMtb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRXhwb3J0VG9Dc3ZTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXhwb3J0LXRvLWNzdi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXJyYXlEZWZhdWx0cyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvRGVmYXVsdFNldHRpbmdzJztcclxuaW1wb3J0IHsgVGFibGVCdWlsZGVyQ29uZmlnVG9rZW4gfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlQnVpbGRlckNvbmZpZyc7XHJcbmltcG9ydCB7IEluaXRpYWxpemF0aW9uU3RhdGUsIFRhYmxlU3RhdGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlU3RhdGUnO1xyXG5pbXBvcnQgeyBzb3J0RGF0YSB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9zb3J0LWRhdGEtZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBXcmFwcGVyRmlsdGVyU3RvcmUgfSBmcm9tICcuLi90YWJsZS1jb250YWluZXItZmlsdGVyL3RhYmxlLXdyYXBwZXItZmlsdGVyLXN0b3JlJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgZGVmYXVsdFNoYXJlUmVwbGF5IH0gZnJvbSAnLi4vLi4vLi4vcnhqcyc7XHJcbmltcG9ydCB7IGNyZWF0ZUZpbHRlckZ1bmMsIGlzQ3VzdG9tRmlsdGVyLCBpc0ZpbHRlckluZm8gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2ZpbHRlci1pbmZvJztcclxuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGljdGlvbmFyeSc7XHJcbmltcG9ydCB7IFRhYmxlV3JhcHBlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGFibGUtd3JhcHBlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBjcmVhdGVMaW5rQ3JlYXRvckRpY3QgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saW5rLWNyZWF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IFRhYmxlQnVpbGRlclN0YXRlU3RvcmUgfSBmcm9tICcuLi8uLi9uZ3J4L3RhYmxlQnVpbGRlclN0YXRlU3RvcmUnO1xyXG5pbXBvcnQgeyBjb250YWluZXJJbXBvcnRzIH0gZnJvbSAnLi90YWJsZS1jb250YWluZXItaW1wb3J0cyc7XHJcbmltcG9ydCB7IHVwZGF0ZUZpbHRlckluZm9TdGF0ZSwgdXBkYXRlRmlsdGVyUHJlZGljYXRlU3RhdGUsIHVwZGF0ZUZpbHRlclN0YXRlIH0gZnJvbSAnLi90YWJsZS1jb250YWluZXIuaGVscGVycy9maWx0ZXItc3RhdGUuaGVscGVycyc7XHJcbmltcG9ydCB7IGluaXRpYWxTb3J0U3RhdGUsIHVwZGF0ZVNvcnRTdGF0ZSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvc29ydC1zdGF0ZS5oZWxwZXJzJztcclxuaW1wb3J0IHsgZ2V0QWxsR3JvdXBIZWFkZXJOYW1lcywgaW5pdGlhbEdyb3VwQnlTdGF0ZSwgdXBkYXRlR3JvdXBCeVN0YXRlIH0gZnJvbSAnLi90YWJsZS1jb250YWluZXIuaGVscGVycy9ncm91cEJ5LmhlbHBlcnMnO1xyXG5pbXBvcnQgeyBzb3J0QW5kRmlsdGVyRGF0YSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZGF0YS1zdGF0ZS5oZWxwZXJzJztcclxuaW1wb3J0IHsgVGFibGVQcm9wcywgZGVmYXVsdFByb3BzIH0gZnJvbSAnLi90YWJsZVByb3BzJztcclxuaW1wb3J0IHsgUGFnaW5hdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VuZXJpYy10YWJsZS9wYWdpbmF0b3IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVCdWlsZGVyRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGFibGVCdWlsZGVyRGF0YVNvdXJjZSc7XHJcbmltcG9ydCB7IEdlbmVyaWNUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBEYXRhU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2RhdGEtc3RvcmUnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd0Yi10YWJsZS1jb250YWluZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWNvbnRhaW5lci5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLWNvbnRhaW5lci5jc3MnLCAnLi4vLi4vc3R5bGVzL2NvbGxhcHNlci5zdHlsZXMuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBwcm92aWRlcnM6IFtUYWJsZVN0b3JlLCBFeHBvcnRUb0NzdlNlcnZpY2UsIFdyYXBwZXJGaWx0ZXJTdG9yZSwgRGF0YVN0b3JlXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBjb250YWluZXJJbXBvcnRzXHJcbn0pIGV4cG9ydCBjbGFzcyBUYWJsZUNvbnRhaW5lckNvbXBvbmVudDxUID0gYW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcm9wczogVGFibGVQcm9wcyA9IHsgLi4uZGVmYXVsdFByb3BzIH07XHJcbiAgZGF0YVN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPFRbXT4+KDEpO1xyXG5cclxuICBwdWJsaWMgc3RhdGUgPSBpbmplY3QoVGFibGVTdG9yZSk7XHJcbiAgcHJpdmF0ZSBkYXRhU3RvcmUgPSBpbmplY3QoRGF0YVN0b3JlKTtcclxuICBwdWJsaWMgY29uZmlnID0gaW5qZWN0KFRhYmxlQnVpbGRlckNvbmZpZ1Rva2VuKTtcclxuICBwdWJsaWMgZXhwb3J0VG9Dc3ZTZXJ2aWNlID0gaW5qZWN0KEV4cG9ydFRvQ3N2U2VydmljZTxUPik7XHJcbiAgcHVibGljIHdyYXBwZXIgPSBpbmplY3QoVGFibGVXcmFwcGVyRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG4gIHB1YmxpYyBzdGF0ZVNlcnZpY2UgPSBpbmplY3QoVGFibGVCdWlsZGVyU3RhdGVTdG9yZSk7XHJcbiAgcHVibGljIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcclxuXHJcbiAgZmlsdGVyRGlyZWN0aXZlcyA9IGNvbnRlbnRDaGlsZHJlbihUYWJsZUZpbHRlckRpcmVjdGl2ZSwge2Rlc2NlbmRhbnRzOiB0cnVlfSk7XHJcbiAgY3VzdG9tRmlsdGVyRGlyZWN0aXZlcyA9IGNvbnRlbnRDaGlsZHJlbihUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSwge2Rlc2NlbmRhbnRzOiB0cnVlfSk7XHJcblxyXG4gIGFsbEZpbHRlckRpcmVjdGl2ZXMgPSBjb21wdXRlZCggKCkgPT4gIHtcclxuICAgICAgaWYodGhpcy53cmFwcGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmZpbHRlckRpcmVjdGl2ZXMoKSwgLi4udGhpcy5jdXN0b21GaWx0ZXJEaXJlY3RpdmVzKCksIC4uLnRoaXMud3JhcHBlci4kcmVnaXN0cmF0aW9ucygpXTtcclxuICAgICAgfSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmZpbHRlckRpcmVjdGl2ZXMoKSwgLi4udGhpcy5jdXN0b21GaWx0ZXJEaXJlY3RpdmVzKCldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgKTtcclxuXHJcblxyXG4gIHRhYmxlU3RhdGUgPSB0b1NpZ25hbCh0aGlzLnN0YXRlLnN0YXRlJC5waXBlKGZpbHRlcihzdGF0ZUlzKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKSkpKSA7XHJcblxyXG4gIGFsbEZpbHRlckRpcmVjdGl2ZXNFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnRhYmxlU3RhdGUoKTtcclxuICAgIHVudHJhY2tlZCgoKSA9PiB7XHJcbiAgICAgIGlmKHN0YXRlKSB7XHJcbiAgICAgICAgdGhpcy5hbGxGaWx0ZXJEaXJlY3RpdmVzKCkuZmlsdGVyKCBmID0+ICFmLnVzZWQpLmZvckVhY2goIGYgPT4ge1xyXG4gICAgICAgICAgZi51c2VkID0gdHJ1ZTtcclxuICAgICAgICAgIGlmKGYuc2F2YWJsZSkge1xyXG4gICAgICAgICAgICB2YXIgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmLmZpbHRlcklkXTtcclxuICAgICAgICAgICAgaWYoaXNGaWx0ZXJJbmZvKGZpbHRlcikpIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEaXJlY3RpdmU6IFRhYmxlRmlsdGVyRGlyZWN0aXZlID0gZiBhcyBUYWJsZUZpbHRlckRpcmVjdGl2ZTtcclxuICAgICAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUuZmllbGRUeXBlID0gZmlsdGVyLmZpZWxkVHlwZTtcclxuICAgICAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUuZmlsdGVyVHlwZSA9IGZpbHRlci5maWx0ZXJUeXBlO1xyXG4gICAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5zZXRGaWx0ZXJWYWx1ZShmaWx0ZXIuZmlsdGVyVmFsdWUpO1xyXG4gICAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5rZXkgPSBmaWx0ZXIua2V5O1xyXG4gICAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS51cGRhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihpc0N1c3RvbUZpbHRlcihmaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgICAgZi5hY3RpdmUgPSBmaWx0ZXIuYWN0aXZlID8/IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuYWRkRmlsdGVyKChmLmZpbHRlciQgYXMgYW55KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfSk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoUGFnaW5hdG9yQ29tcG9uZW50KSAgcGFnaW5hdG9yQ29tcG9uZW50PzogUGFnaW5hdG9yQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoR2VuZXJpY1RhYmxlQ29tcG9uZW50KSAgZ2VuZXJpY1RhYmxlPzogR2VuZXJpY1RhYmxlQ29tcG9uZW50O1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oTWF0Um93RGVmKSBjdXN0b21Sb3dzITogUXVlcnlMaXN0PE1hdFJvd0RlZjxhbnk+PjtcclxuICAkY3VzdG9tQ2VsbHMgPSBjb250ZW50Q2hpbGRyZW4oQ3VzdG9tQ2VsbERpcmVjdGl2ZSk7XHJcbiAgJG15Q29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlLiRtZXRhRGF0YUFycmF5KCkubWFwKCBtZXRhRGF0YSA9PiAoe21ldGFEYXRhLCBjdXN0b21DZWxsOiB0aGlzLiRjdXN0b21DZWxscygpLmZpbmQoY2MgPT4gY2MuY3VzdG9tQ2VsbCA9PT0gbWV0YURhdGEua2V5KX0pKVxyXG4gIH0pXHJcbiAgQENvbnRlbnRDaGlsZCgndGFibGUnLCB7cmVhZDogRWxlbWVudFJlZn0pIHRhYmxlRWxSZWYhOiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB0YWJsZUJ1aWxkZXIhOiBUYWJsZUJ1aWxkZXI7XHJcbiAgQElucHV0KCkgdGFibGVJZCE6IHN0cmluZztcclxuICBASW5wdXQoKSBzZXQgaW5kZXhDb2x1bW4odmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnByb3BzLmluZGV4Q29sdW1uID0gdmFsO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZXQgc2VsZWN0aW9uQ29sdW1uKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5wcm9wcy5zZWxlY3Rpb25Db2x1bW4gPSB2YWw7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNldCBpc1N0aWNreSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucHJvcHMuaXNTdGlja3kgPSB2YWw7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNldCBzdGlja3lGb290ZXIodmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnByb3BzLnN0aWNreUZvb3RlciA9IHZhbDtcclxuICB9XHJcbiAgQElucHV0KCkgc2V0IHBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc3RhdGUuc2V0UGFnZVNpemUodmFsdWUpO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZXQgZ3JvdXBIZWFkZXJUZW1wbGF0ZSggdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgIHRoaXMucHJvcHMuZ3JvdXBIZWFkZXJUZW1wbGF0ZSA9IHRlbXBsYXRlO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZXQgZ3JvdXBIZWFkZXJIZWlnaHQodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5wcm9wcy5ncm91cEhlYWRlckhlaWdodCA9IHZhbHVlO1xyXG4gIH1cclxuICBASW5wdXQoKSB0cmFja0J5ITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlucHV0RmlsdGVycz86IE9ic2VydmFibGU8QXJyYXk8UHJlZGljYXRlPFQ+Pj47XHJcblxyXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb24kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkYXRhID0gdGhpcy5kYXRhU3ViamVjdC5waXBlKFxyXG4gICAgc3dpdGNoQWxsKCksXHJcbiAgICBzdGFydFdpdGgoW10gYXMgVFtdKSxcclxuICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpLFxyXG4gICk7XHJcbiAgQE91dHB1dCgpIG9uU3RhdGVSZXNldCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TYXZlU3RhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHN0YXRlJCA9IHRoaXMuc3RhdGUuZ2V0U2F2YWJsZVN0YXRlKCkucGlwZShcclxuICAgIG1hcChzdGF0ZSA9PiBjbG9uZURlZXAoc3RhdGUpKSxcclxuICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpLFxyXG4gICk7XHJcblxyXG4gIGNsZWFyU2VsZWN0aW9ucygpe1xyXG4gICAgdGhpcy5nZW5lcmljVGFibGU/LnNlbGVjdGlvbi5jbGVhcih0cnVlKTtcclxuICB9XHJcbiAgZGlzcGxheURhdGFTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8T2JzZXJ2YWJsZTxUW10+PigxKTtcclxuICBkaXNwbGF5RGF0YSA9IHRoaXMuZGlzcGxheURhdGFTdWJqZWN0LnBpcGUoXHJcbiAgICBzd2l0Y2hBbGwoKSxcclxuICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpLFxyXG4gICk7XHJcbiAgJGRpc3BsYXlEYXRhID0gdG9TaWduYWwodGhpcy5kaXNwbGF5RGF0YSwgeyBpbml0aWFsVmFsdWU6IFtdIH0pO1xyXG5cclxuXHJcblxyXG4gIGNvbGxhcHNlRm9vdGVyJCA9IHRoaXMuc3RhdGUuc3RhdGUkLnBpcGUobWFwKHN0YXRlID0+IHN0YXRlLnBlcnNpc3RlZFRhYmxlU2V0dGluZ3MuY29sbGFwc2VGb290ZXIpKTtcclxuXHJcblxyXG5cclxuXHJcbiAgbmdPbkRlc3Ryb3koKXtcclxuICAgIGlmKHRoaXMudGFibGVJZCkge1xyXG4gICAgICB0aGlzLnN0YXRlU2VydmljZS5zYXZlVGFibGVTdGF0ZVRvTG9jYWwoeyB0YWJsZUlkOnRoaXMudGFibGVJZCwgdGFibGVTdGF0ZTogdGhpcy5zdGF0ZS5nZXRTYXZhYmxlU3RhdGVTaWduYWwoKSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpcnN0UGFnZSgpOiB2b2lkIHtcclxuICAgdGhpcy5wYWdpbmF0b3JDb21wb25lbnQ/LnBhZ2luYXRvcj8uZmlyc3RQYWdlKCk7XHJcbiAgfVxyXG5cclxuICBsYXN0UGFnZSgpOiB2b2lkIHtcclxuICAgdGhpcy5wYWdpbmF0b3JDb21wb25lbnQ/LnBhZ2luYXRvcj8ubGFzdFBhZ2UoKTtcclxuICB9XHJcblxyXG4gIHJlc2V0U3RhdGUoKSB7XHJcbiAgICB0aGlzLmN1c3RvbUZpbHRlckRpcmVjdGl2ZXMoKS5mb3JFYWNoKCBjZiA9PiBjZi5yZXNldCgpKTtcclxuICAgIHRoaXMuZmlsdGVyRGlyZWN0aXZlcygpLmZvckVhY2goIGNmID0+IGNmLnJlc2V0KCkgKTtcclxuICAgIHRoaXMuc3RhdGUucmVzZXRTdGF0ZSgpO1xyXG4gICAgdGhpcy5vblN0YXRlUmVzZXQubmV4dChudWxsKVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVN0YXRlKCkge1xyXG4gICAgdGhpcy5zdGF0ZS5zZXRUYWJsZVNldHRpbmdzKHRoaXMudGFibGVCdWlsZGVyLnNldHRpbmdzKTtcclxuICAgIHRoaXMuc3RhdGUucnVuT25jZVdoZW4oXHJcbiAgICAgIHN0YXRlSXMoSW5pdGlhbGl6YXRpb25TdGF0ZS5NZXRhRGF0YUxvYWRlZCksXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICBpZih0aGlzLnRhYmxlSWQpIHtcclxuICAgICAgICAgIGNvbnN0IHBlcnNpc3RlZFN0YXRlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnN0YXRlU2VydmljZS4kc2VsZWN0TG9jYWxUYWJsZVN0YXRlRm9yVmlldyh0aGlzLnRhYmxlSWQpLCB7aW5qZWN0b3I6IHRoaXMuaW5qZWN0b3J9KS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoIHBlcnNpc3RlZFN0YXRlID0+IHtcclxuICAgICAgICAgICAgICBpZighcGVyc2lzdGVkU3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuc2V0SW5pdGlhbGl6YXRpb25TdGF0ZShJbml0aWFsaXphdGlvblN0YXRlLkxvYWRlZEZyb21TdG9yZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbm90TnVsbCgpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc3RhdGUudXBkYXRlU3RhdGVGcm9tUGVyc2lzdGVkU3RhdGUocGVyc2lzdGVkU3RhdGUkLnBpcGUobm90TnVsbCgpKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3RhdGUuc2V0SW5pdGlhbGl6YXRpb25TdGF0ZShJbml0aWFsaXphdGlvblN0YXRlLkxvYWRlZEZyb21TdG9yZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGN1c3RvbUZpbHRlcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcmVkaWNhdGU8VD5bXT4oW10pO1xyXG4gIGluaXRpYWxpemVEYXRhKCkge1xyXG5cclxuICAgIGNvbnN0IHByZWRpY2F0ZUZpbHRlcnMkID0gY29tYmluZUxhdGVzdChbdGhpcy5pbnB1dEZpbHRlcnM/LnBpcGUoc3RhcnRXaXRoKFtdKSkgPz8gb2YoW10gYXMgUHJlZGljYXRlPFQ+W10pLCB0aGlzLmN1c3RvbUZpbHRlcnMkXSlcclxuICAgICAgLnBpcGUobWFwKChbYSwgYl0pID0+IFsuLi5hLCAuLi5iXSkpO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlcnMkID0gY29tYmluZUxhdGVzdChbXHJcbiAgICAgIHRoaXMuc3RhdGUuZmlsdGVycyQucGlwZShzY2FuKHVwZGF0ZUZpbHRlckluZm9TdGF0ZSwgeyBhbGxGaWx0ZXJzOiB7fSB9KSwgdGltZXN0YW1wKCkpLFxyXG4gICAgICBwcmVkaWNhdGVGaWx0ZXJzJC5waXBlKHNjYW4odXBkYXRlRmlsdGVyUHJlZGljYXRlU3RhdGUsIHthbGxGaWx0ZXJzOiBbXSBhcyBQcmVkaWNhdGU8VD5bXX0pLCB0aW1lc3RhbXAoKSlcclxuICAgIF0pXHJcbiAgICAucGlwZShcclxuICAgICAgbWFwKChbZmlsdGVySW5mbywgcHJlZF0pID0+IHVwZGF0ZUZpbHRlclN0YXRlKGZpbHRlckluZm8sIHByZWQpKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzb3J0c1N0YXRlJCA9IHRoaXMuc3RhdGUuc29ydCQucGlwZShzY2FuKHVwZGF0ZVNvcnRTdGF0ZSwgaW5pdGlhbFNvcnRTdGF0ZSkpO1xyXG5cclxuICAgIGNvbnN0IHNvcnRlZEFuZEZpbHRlcmVkRGF0YSQgPSBzb3J0QW5kRmlsdGVyRGF0YSh0aGlzLnRhYmxlQnVpbGRlci5nZXREYXRhJCgpLCBzb3J0c1N0YXRlJCwgZmlsdGVycyQpO1xyXG5cclxuICAgIGNvbnN0IGZsYXRHcm91cGVkJCA9IGNvbWJpbmVMYXRlc3QoW3NvcnRlZEFuZEZpbHRlcmVkRGF0YSQucGlwZSh0aW1lc3RhbXAoKSksIHRoaXMuc3RhdGUuZ3JvdXBCeUtleXMkLnBpcGUodGltZXN0YW1wKCkpLCB0aGlzLnN0YXRlLmV4cGFuZGVkR3JvdXBzJC5waXBlKHRpbWVzdGFtcCgpKV0pLnBpcGUoXHJcbiAgICAgIHNjYW4odXBkYXRlR3JvdXBCeVN0YXRlLCBpbml0aWFsR3JvdXBCeVN0YXRlKSxcclxuICAgICAgbWFwKCh7ZGlzcGxheURhdGF9KSA9PiBkaXNwbGF5RGF0YSksXHJcbiAgICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpLFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmRpc3BsYXlEYXRhU3ViamVjdC5uZXh0KGZsYXRHcm91cGVkJCk7XHJcbiAgICB0aGlzLmRhdGFTdWJqZWN0Lm5leHQoc29ydGVkQW5kRmlsdGVyZWREYXRhJCk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZS5vbih0aGlzLmRpc3BsYXlEYXRhLCAoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmRhdGFTdG9yZS5wYXRjaFN0YXRlKHtkYXRhTGVuOiBkYXRhLmxlbmd0aH0pXHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBjb25zdCBjdXN0b21DZWxscyQgPSB0b09ic2VydmFibGUodGhpcy4kY3VzdG9tQ2VsbHMsIHsgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XHJcbiAgICB0aGlzLnN0YXRlLnNldExpbmtNYXBzKHRoaXMudGFibGVCdWlsZGVyLm1ldGFEYXRhJCEucGlwZShcclxuICAgICAgbWFwKGNyZWF0ZUxpbmtDcmVhdG9yRGljdClcclxuICAgICkpO1xyXG4gICAgY29uc3QgYyA9IGN1c3RvbUNlbGxzJC5waXBlKHN3aXRjaE1hcChjID0+IGMubGVuZ3RoID8gY29tYmluZUxhdGVzdChjLm1hcChjID0+IGMuJG1ldGFEYXRhKSkgOiBvZihbXSBhcyBNZXRhRGF0YVtdKSkpO1xyXG4gICAgdGhpcy5zdGF0ZS5zZXRNZXRhRGF0YShjb21iaW5lTGF0ZXN0KFt0aGlzLnRhYmxlQnVpbGRlci5tZXRhRGF0YSQsICBjXSkucGlwZShtYXAoKFttZHMsIGN1c3RvbUNlbGxzXSkgPT4ge1xyXG4gICAgICBtZHMgPSBtZHMubWFwKHRoaXMubWFwQXJyYXlGaWVsZHNNZXRhRGF0YXMpO1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIC4uLm1kcyxcclxuICAgICAgICAuLi5jdXN0b21DZWxscy5tYXAoIG1kID0+IHRoaXMubWVyZ2VNZXRhRGF0YShtZCwgbWRzLmZpbmQoIGl0ZW0gPT4gaXRlbS5rZXkgPT09IG1kLmtleSApICkpXHJcbiAgICAgIF1cclxuICAgIH0pKSlcclxuICAgIGNvbnN0IGRzID0gbmV3IFRhYmxlQnVpbGRlckRhdGFTb3VyY2U8VD4oXHJcbiAgICAgIHRoaXMuZGlzcGxheURhdGEsXHJcbiAgICAgIHRoaXMuc3RhdGUsXHJcbiAgICAgIHRoaXMuZGF0YVN0b3JlXHJcbiAgICApO1xyXG4gICAgdGhpcy5zdGF0ZS51cGRhdGVTdGF0ZSh7cHJvcHM6IHtcclxuICAgICAgZGF0YVNvdXJjZTogZHMsXHJcbiAgICAgIC4uLnRoaXMucHJvcHNcclxuICAgIH19KVxyXG4gICAgdGhpcy5pbml0aWFsaXplU3RhdGUoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGEoKTtcclxuICB9XHJcblxyXG4gIG1lcmdlTWV0YURhdGEobWV0YURhdGExOiBNZXRhRGF0YSwgbWV0YURhdGEyPzogTWV0YURhdGEpIHtcclxuICAgIGlmKCFtZXRhRGF0YTIpe1xyXG4gICAgICBtZXRhRGF0YTEubm9FeHBvcnQgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gbWV0YURhdGExXHJcbiAgICB9XHJcbiAgICBpZighbWV0YURhdGExLmRpc3BsYXlOYW1lKSBtZXRhRGF0YTEuZGlzcGxheU5hbWUgPSBtZXRhRGF0YTIuZGlzcGxheU5hbWU7XHJcbiAgICBpZighbWV0YURhdGExLnByZVNvcnQpIG1ldGFEYXRhMS5wcmVTb3J0ID0gbWV0YURhdGEyLnByZVNvcnQ7XHJcbiAgICBpZighbWV0YURhdGExLm9yZGVyKSBtZXRhRGF0YTEub3JkZXIgPSBtZXRhRGF0YTIub3JkZXI7XHJcbiAgICBpZighbWV0YURhdGExLndpZHRoKSBtZXRhRGF0YTEud2lkdGggPSBtZXRhRGF0YTIud2lkdGg7XHJcbiAgICBpZihtZXRhRGF0YTIuZmllbGRUeXBlKSBtZXRhRGF0YTEuZmllbGRUeXBlID0gbWV0YURhdGEyLmZpZWxkVHlwZTtcclxuICAgIG1ldGFEYXRhMS5ub0V4cG9ydCA9ICFtZXRhRGF0YTI7XHJcbiAgICByZXR1cm4gbWV0YURhdGExO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0VG9Dc3YoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzb3J0ZWQgPSB0aGlzLmRhdGEucGlwZShcclxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zdGF0ZS5zb3J0JCksXHJcbiAgICAgIG1hcCgoW2RhdGEsIHNvcnRlZF0pID0+IHNvcnREYXRhKGRhdGEsIHNvcnRlZCkpXHJcbiAgICApO1xyXG4gICAgdGhpcy5leHBvcnRUb0NzdlNlcnZpY2UuZXhwb3J0VG9Dc3Yoc29ydGVkKTtcclxuICB9XHJcblxyXG4gIGV4cGFuZEFsbEdyb3VwcyA9ICgpID0+IHtcclxuICAgIGNvbnN0IGdyb3VwSGVhZGVycyA9IGdldEFsbEdyb3VwSGVhZGVyTmFtZXModGhpcy4kZGlzcGxheURhdGEoKSk7XHJcbiAgICB0aGlzLnN0YXRlLmV4cGFuZEFsbE9mR3JvdXAoeyBncm91cEhlYWRlcnNCeUtleTogZ3JvdXBIZWFkZXJzIH0pO1xyXG4gIH1cclxuXHJcbiAgY29sbGFwc2VBbGxHcm91cHMgPSAoKSA9PiB0aGlzLnN0YXRlLmNvbGxhcHNlQWxsKCk7XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIHRoaXMuc3RhdGUucnVuT25jZVdoZW4oXHJcbiAgICAgIHN0YXRlSXMoSW5pdGlhbGl6YXRpb25TdGF0ZS5Mb2FkZWRGcm9tU3RvcmUpLFxyXG4gICAgICBzdGF0ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWx0ZXJEaXJlY3RpdmVzKHN0YXRlKTtcclxuICAgICAgICB0aGlzLnN0YXRlLnVwZGF0ZVN0YXRlKHsgaW5pdGlhbGl6YXRpb25TdGF0ZTogSW5pdGlhbGl6YXRpb25TdGF0ZS5SZWFkeSB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgbWFwQXJyYXlGaWVsZHNNZXRhRGF0YXMgPSAobWV0YSA6IE1ldGFEYXRhPFQ+KSA9PiB7XHJcbiAgICBpZihtZXRhLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkFycmF5KXtcclxuICAgICAgY29uc3QgYWRkaXRpb25hbCA9IHsuLi5tZXRhLmFkZGl0aW9uYWx9IGFzIEFycmF5QWRkaXRpb25hbDtcclxuICAgICAgYWRkaXRpb25hbC5hcnJheVN0eWxlID0gYWRkaXRpb25hbD8uYXJyYXlTdHlsZSA/PyBBcnJheURlZmF1bHRzLmFycmF5U3R5bGU7XHJcbiAgICAgIGFkZGl0aW9uYWwubGltaXQgPSBhZGRpdGlvbmFsLmxpbWl0ID8/IHRoaXMuY29uZmlnLmFycmF5SW5mbz8ubGltaXQgPz8gQXJyYXlEZWZhdWx0cy5saW1pdDtcclxuICAgICAgcmV0dXJuIHsuLi5tZXRhLGFkZGl0aW9uYWx9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWV0YTtcclxuICB9XHJcblxyXG4gIGNvbGxhcHNlSGVhZGVyJCA9IHRoaXMuc3RhdGUuc3RhdGUkLnBpcGUobWFwKHN0YXRlID0+IHN0YXRlLnBlcnNpc3RlZFRhYmxlU2V0dGluZ3MuY29sbGFwc2VIZWFkZXIpKTtcclxuXHJcbiAgYWRkRmlsdGVyRGlyZWN0aXZlcyA9IChzdGF0ZTogVGFibGVTdGF0ZSkgPT4ge1xyXG4gICAgY29uc3QgY3VzdG9tRmlsdGVycyQgPSAgdG9PYnNlcnZhYmxlKHRoaXMuYWxsRmlsdGVyRGlyZWN0aXZlcywge2luamVjdG9yOiB0aGlzLmluamVjdG9yfSkucGlwZShcclxuICAgICAgbWVyZ2VNYXAoIGN1c3RvbWVyRmlsdGVycyA9PiBjdXN0b21lckZpbHRlcnNcclxuICAgICAgICAuZmlsdGVyKCBmaWx0ZXIgPT4gIWZpbHRlci5zYXZhYmxlIClcclxuICAgICAgICAubWFwKGZpbHRlciA9PiBmaWx0ZXIuZmlsdGVyJCApXHJcbiAgICAgICksXHJcbiAgICAgIG1lcmdlQWxsKCksXHJcbiAgICAgIHNjYW4oIChhLGIpPT4ge1xyXG4gICAgICAgICAgaWYoYi5hY3RpdmUpIHtcclxuICAgICAgICAgICAgYVtiLmZpbHRlcklkXSA9IGlzQ3VzdG9tRmlsdGVyKGIpID8gYi5wcmVkaWNhdGUgOiBjcmVhdGVGaWx0ZXJGdW5jKGIpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGVsZXRlIGFbYi5maWx0ZXJJZF0gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICByZXR1cm4gYTtcclxuICAgICAgfSwge30gYXMgRGljdGlvbmFyeTxQcmVkaWNhdGU8YW55Pj4pLFxyXG4gICAgICBtYXAoIGYgPT4gT2JqZWN0LnZhbHVlcyhmKSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZS5vbihjdXN0b21GaWx0ZXJzJCwgKGYpID0+IHtcclxuICAgICAgdGhpcy5jdXN0b21GaWx0ZXJzJC5uZXh0KGYpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAkdXNlVmlydHVhbCA9IHRoaXMuc3RhdGUuJGlzVmlydHVhbDtcclxufVxyXG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJbYmVmb3JlXVwiIC8+XHJcblxyXG48bmctY29udGFpbmVyIG11bHRpU29ydCAqbmdyeExldD1cInN0YXRlLnRhYmxlU2V0dGluZ3MkIGFzIHRhYmxlU2V0dGluZ3NcIj5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXdyYXBwZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICBAaWYgKCghKGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSkgfHwgdGFibGVTZXR0aW5ncy5zaG93VGl0bGVXaGVuSGVhZGVyQ29sbGFwc2VkKSB7XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnRiLWhlYWRlci10aXRsZVwiLz5cclxuICAgICAgfVxyXG4gICAgICBAaWYoKHN0YXRlLmdyb3VwQnlLZXlzJCB8IGFzeW5jKT8ubGVuZ3RoKXtcclxuICAgICAgICA8Z3JvdXAtYnktbGlzdCAvPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbHgtcm93LWVuZFwiPlxyXG4gICAgICA8bGliLWZpbHRlci1saXN0IC8+XHJcbiAgICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZUhlYWRlcikge1xyXG4gICAgICAgIEBpZiAoIShjb2xsYXBzZUhlYWRlciQgfCBhc3luYykpIHtcclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51XCIvPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9J3ByaW1hcnknIFttYXRNZW51VHJpZ2dlckZvcl09XCJtYWluTWVudVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPG1hdC1tZW51ICNtYWluTWVudT0nbWF0TWVudSc+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51RXh0cmFcIi8+XHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgIH1cclxuICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1haW5NZW51XCIgY2xhc3M9XCJmbGF0LW1lbnUtYnV0dG9uIHBvaW50ZXJcIj5tb3JlX2hvcml6PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxtYXQtbWVudSAjbWFpbk1lbnU9J21hdE1lbnUnPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyTWVudVwiLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51RXh0cmFcIi8+XHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgIH1cclxuICAgICAgICA8bWF0LWljb24gW21hdFRvb2x0aXBdPVwiKGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSA/ICdleHBhbmQnIDogJ2NvbGxhcHNlJ1wiIGNsYXNzPVwiY29sbGFwc2UtaWNvbiBoZWFkZXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInN0YXRlLnRvZ2dsZUNvbGxhcHNlSGVhZGVyKClcIj5cclxuICAgICAgICAgIHt7KGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnfX1cclxuICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICB9XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXJcIj5cclxuICAgIEBpZigkdXNlVmlydHVhbCgpKVxyXG4gICAge1xyXG4gICAgICA8dGItdmlydHVhbC1zY3JvbGwtY29udGFpbmVyPlxyXG4gICAgICAgIDx0Yi1nZW5lcmljLXRhYmxlIFtyb3dzXT0nY3VzdG9tUm93cycgW2RhdGFdPVwiKGRhdGEgfCBhc3luYykhXCIgW2Rpc3BsYXlEYXRhXT1cIiRkaXNwbGF5RGF0YSgpXCJcclxuICAgICAgICAgIChzZWxlY3Rpb24kKT0nc2VsZWN0aW9uJC5lbWl0KCRldmVudCknIFtjb2x1bW5JbmZvc109JyRteUNvbHVtbnMoKScgW3RyYWNrQnldPVwidHJhY2tCeVwiIC8+XHJcbiAgICAgIDwvdGItdmlydHVhbC1zY3JvbGwtY29udGFpbmVyPlxyXG4gICAgfVxyXG4gICAgQGVsc2VcclxuICAgIHtcclxuICAgICAgPHRiLWdlbmVyaWMtdGFibGUgW3Jvd3NdPSdjdXN0b21Sb3dzJyBbZGF0YV09XCIoZGF0YSB8IGFzeW5jKSFcIiBbZGlzcGxheURhdGFdPVwiJGRpc3BsYXlEYXRhKClcIlxyXG4gICAgICAgIChzZWxlY3Rpb24kKT0nc2VsZWN0aW9uJC5lbWl0KCRldmVudCknIFtjb2x1bW5JbmZvc109JyRteUNvbHVtbnMoKScgW3RyYWNrQnldPVwidHJhY2tCeVwiIC8+XHJcbiAgICB9XHJcblxyXG4gIDwvZGl2PlxyXG4gIEBpZih0YWJsZVNldHRpbmdzLnVzZVBhZ2luYXRvcilcclxuICB7XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdG9yXCI+XHJcbiAgICAgIDx0Yi1wYWdpbmF0b3IgI3RiUGFnaW5hdG9yIFtkYXRhJF09XCJkYXRhXCIgW3RhYmxlRWxSZWZdPVwidGFibGVFbFJlZlwiIC8+XHJcblxyXG4gICAgICA8bWF0LWljb24gW21hdFRvb2x0aXBdPVwiKGNvbGxhcHNlRm9vdGVyJCB8IGFzeW5jKSA/ICdleHBhbmQnIDogJ2NvbGxhcHNlJ1wiIGNsYXNzPVwiY29sbGFwc2UtaWNvbiBmb290ZXJcIlxyXG4gICAgICAgIChjbGljayk9XCJzdGF0ZS50b2dnbGVDb2xsYXBzZUZvb3RlcigpXCI+XHJcbiAgICAgICAge3soY29sbGFwc2VGb290ZXIkIHwgYXN5bmMpID8gJ2V4cGFuZF9tb3JlJyA6ICdleHBhbmRfbGVzcyd9fVxyXG4gICAgICA8L21hdC1pY29uPlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICA8bmctdGVtcGxhdGUgI2hlYWRlck1lbnU+XHJcbiAgICBAaWYgKCF0YWJsZVNldHRpbmdzLmhpZGVGaWx0ZXIpIHs8dGItZmlsdGVyLWRpc3BsYXllci8+fVxyXG4gICAgQGlmICghdGFibGVTZXR0aW5ncy5oaWRlQ29sdW1uU2V0dGluZ3MpIHs8dGItY29sLWRpc3BsYXllci8+fVxyXG4gICAgQGlmICghdGFibGVTZXR0aW5ncy5oaWRlU29ydCkgezx0Yi1zb3J0LW1lbnUvPn1cclxuICAgIEBpZiAoISF0YWJsZUlkKSB7PHRiLXByb2ZpbGVzLW1lbnUgWyR0YWJsZUlkXT1cInRhYmxlSWRcIiAob25TYXZlU3RhdGUpPVwib25TYXZlU3RhdGUuZW1pdCgkZXZlbnQpXCIvPn1cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2hlYWRlck1lbnVFeHRyYT5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVzZXRTdGF0ZSgpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5hdXRvcmVuZXc8L21hdC1pY29uPlxyXG4gICAgICA8c3Bhbj5SZXNldCB0YWJsZTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgQGlmICghdGFibGVTZXR0aW5ncy5oaWRlRXhwb3J0KSB7XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZXhwb3J0VG9Dc3YoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5maWxlX2Rvd25sb2FkPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3Bhbj5FeHBvcnQgVGFibGU8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgQGlmICh0YWJsZUlkKSB7XHJcbiAgICAgIDxidXR0b24gc3RvcC1wcm9wYWdhdGlvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwbS50cmlnZ2VyKCk/LnRvZ2dsZU1lbnUoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5wZW9wbGU8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuPlByb2ZpbGVzPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPHRiLXByb2ZpbGVzLW1lbnUgY2xhc3M9XCJwcm9maWxlcy1tZW51XCIgI3BtIFskdGFibGVJZF09XCJ0YWJsZUlkXCIgKG9uU2F2ZVN0YXRlKT1cIm9uU2F2ZVN0YXRlLmVtaXQoJGV2ZW50KVwiLz5cclxuICAgIH1cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
|
|
327
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBRWYsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxNQUFNLEVBRU4sWUFBWSxFQUNaLFVBQVUsRUFHVixRQUFRLEVBQ1IsZUFBZSxFQUNmLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULHFCQUFxQixHQUN0QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFjLGFBQWEsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JGLE9BQU8sRUFBbUIsU0FBUyxFQUFZLE1BQU0sNkJBQTZCLENBQUM7QUFDbkYsT0FBTyxFQUFFLEdBQUcsRUFBdUIsUUFBUSxFQUFFLElBQUksRUFBYSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4SSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekcsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFjLE1BQU0sMEJBQTBCLENBQUM7QUFFM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDMUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUzRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN0SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDakcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDakYsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdsRCxNQUFNLE9BQU8sdUJBQXVCO0lBQ3JDLEtBQUssR0FBZSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7SUFDOUIsSUFBSSxHQUFHLElBQUksZUFBZSxDQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRXZDLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDekMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLENBQUEsa0JBQXFCLENBQUEsQ0FBQyxDQUFDO0lBQ25ELE9BQU8sR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1RCxZQUFZLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDOUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVuQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsb0JBQW9CLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUM5RSxzQkFBc0IsR0FBRyxlQUFlLENBQUMsMEJBQTBCLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUUxRixvQkFBb0IsR0FBRyxRQUFRLENBQUUsR0FBRyxFQUFFO1FBQ2xDLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDMUcsQ0FBQztRQUFDLENBQUM7WUFDRCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNILENBQUMsQ0FDRixDQUFDO0lBRUYsc0JBQXNCLEdBQUcsQ0FBQyxLQUEwQixFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3JFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBRTtJQUVwRSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQ2xGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNyRCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBRyxNQUFNLEVBQUUsQ0FBQztnQkFDVixnQkFBZ0IsQ0FBQyxNQUFNLENBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDLEVBQUU7b0JBQ2xELENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUNkLElBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNiLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3RDLElBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7NEJBQ3hCLE1BQU0sZUFBZSxHQUF5QixDQUF5QixDQUFDOzRCQUN4RSxlQUFlLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7NEJBQzdDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQzs0QkFDL0MsZUFBZSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7NEJBQ25ELGVBQWUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQzs0QkFDakMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUMzQixDQUFDO3dCQUNELElBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7NEJBQzFCLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7d0JBQ3BDLENBQUM7d0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUUsQ0FBQyxDQUFDLE9BQWUsQ0FBQyxDQUFDO29CQUMzQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFNkIsa0JBQWtCLENBQXNCO0lBQ3JDLFlBQVksQ0FBeUI7SUFDNUMsVUFBVSxDQUE2QjtJQUNuRSxZQUFZLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDcEQsVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDekIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQTtJQUMvSSxDQUFDLENBQUMsQ0FBQTtJQUN5QyxVQUFVLENBQWM7SUFFeEMsWUFBWSxDQUFnQjtJQUM5QyxPQUFPLENBQVU7SUFDMUIsSUFBYSxXQUFXLENBQUMsR0FBWTtRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQWEsZUFBZSxDQUFDLEdBQVk7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO0lBQ25DLENBQUM7SUFDRCxJQUFhLFFBQVEsQ0FBQyxHQUFZO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBYSxZQUFZLENBQUMsR0FBWTtRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQWEsUUFBUSxDQUFDLEtBQWE7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQWEsbUJBQW1CLENBQUUsUUFBMEI7UUFDMUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUM7SUFDNUMsQ0FBQztJQUNELElBQWEsaUJBQWlCLENBQUMsS0FBYTtRQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBQ1EsT0FBTyxDQUFVO0lBQ2pCLFlBQVksQ0FBbUM7SUFFOUMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDMUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDbEMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUNsRCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDOUIsa0JBQWtCLEVBQUUsQ0FDckIsQ0FBQztJQUVGLGVBQWU7UUFDYixJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELFdBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBTSxDQUFDLENBQUMsQ0FBQztJQUV4QyxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVoRSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7SUFDN0MsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0lBRTdDLFdBQVc7UUFDVCxJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsT0FBTyxFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEgsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCxRQUFRO1FBQ1AsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsT0FBTyxDQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM5QixDQUFDO0lBQ08scUJBQXFCLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUNyRixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBRyxVQUFVLEVBQUUsQ0FBQztnQkFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hELElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQyxDQUFDO29CQUNmLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3ZGLElBQUcsY0FBYyxFQUFDLENBQUM7d0JBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBQ3pELE9BQU87b0JBQ1QsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDekUsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxjQUFjLEdBQUcsSUFBSSxlQUFlLENBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELGNBQWM7UUFFWixNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFvQixDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQy9ILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2QyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUM7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ3RGLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsRUFBQyxVQUFVLEVBQUUsRUFBb0IsRUFBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUM7U0FDMUcsQ0FBQzthQUNELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQ2pFLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFFbkYsTUFBTSxzQkFBc0IsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUV0RyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMxSyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLENBQUMsRUFDN0MsR0FBRyxDQUFDLENBQUMsRUFBQyxXQUFXLEVBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQ25DLGtCQUFrQixFQUFFLENBQ3JCLENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsUUFBUTtRQUNOLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBVSxDQUFDLElBQUksQ0FDdEQsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQzNCLENBQUMsQ0FBQztRQUNILE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkksTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUNqSCxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUM1QyxPQUFPO2dCQUNMLEdBQUcsR0FBRztnQkFDTixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFFLENBQUUsQ0FBQzthQUM1RixDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ3hDLE1BQU0sRUFBRSxHQUFHLElBQUksc0JBQXNCLENBQ25DLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FDZixDQUFDO1lBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7Z0JBQ3JCLEtBQUssRUFBRTtvQkFDTCxVQUFVLEVBQUUsRUFBRTtvQkFDZCxHQUFHLElBQUksQ0FBQyxLQUFLO2lCQUNkO2FBQ0YsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxTQUFtQixFQUFFLFNBQW9CO1FBQ3JELElBQUcsQ0FBQyxTQUFTLEVBQUMsQ0FBQztZQUNiLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQzFCLE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7UUFDRCxJQUFHLENBQUMsU0FBUyxDQUFDLFdBQVc7WUFBRSxTQUFTLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUM7UUFDekUsSUFBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPO1lBQUUsU0FBUyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzdELElBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSztZQUFFLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUN2RCxJQUFHLENBQUMsU0FBUyxDQUFDLEtBQUs7WUFBRSxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDdkQsSUFBRyxTQUFTLENBQUMsU0FBUztZQUFFLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUNsRSxTQUFTLENBQUMsUUFBUSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ2hDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsZUFBZSxHQUFHLEdBQUcsRUFBRTtRQUNyQixNQUFNLFlBQVksR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUE7SUFFRCxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRW5ELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FDcEIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxFQUM1QyxLQUFLLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBR0QsdUJBQXVCLEdBQUcsQ0FBQyxJQUFrQixFQUFFLEVBQUU7UUFDL0MsSUFBRyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxLQUFLLEVBQUMsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBb0IsQ0FBQztZQUMzRCxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsRUFBRSxVQUFVLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQztZQUMzRSxVQUFVLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDM0YsT0FBTyxFQUFDLEdBQUcsSUFBSSxFQUFDLFVBQVUsRUFBQyxDQUFBO1FBQzdCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQTtJQUdELG1CQUFtQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO1FBQzFDLE1BQU0sY0FBYyxHQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUM3RixRQUFRLENBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQyxlQUFlO2FBQ3pDLE1BQU0sQ0FBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBRTthQUNuQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFFLENBQ2hDLEVBQ0QsUUFBUSxFQUFFLEVBQ1YsSUFBSSxDQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFO1lBQ1QsSUFBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUU7WUFDeEIsQ0FBQztZQUNMLE9BQU8sQ0FBQyxDQUFDO1FBQ1QsQ0FBQyxFQUFFLEVBQWdDLENBQUMsRUFDcEMsR0FBRyxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM1QixDQUFDO1FBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUE7SUFFRCxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7dUdBclJ0Qix1QkFBdUI7MkZBQXZCLHVCQUF1QixnaEJBSHhCLENBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLFNBQVMsQ0FBQywyREFlekMsb0JBQW9CLDRGQUNkLDBCQUEwQixrRkE2Q3BDLG1CQUFtQiw4R0FJcEIsVUFBVSw2Q0FMdkIsU0FBUyxpRkFGZixrQkFBa0IsK0VBQ2xCLHFCQUFxQixnREN6SGxDLHMwSEErRkE7OzJGRDlCZ0IsdUJBQXVCO2tCQVJ0QyxTQUFTOytCQUNJLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxjQUM5RCxJQUFJLFdBQ1AsZ0JBQWdCOzhCQUdqQixJQUFJO3NCQUFiLE1BQU07Z0JBcUR5QixrQkFBa0I7c0JBQWpELFNBQVM7dUJBQUMsa0JBQWtCO2dCQUNNLFlBQVk7c0JBQTlDLFNBQVM7dUJBQUMscUJBQXFCO2dCQUNKLFVBQVU7c0JBQXJDLGVBQWU7dUJBQUMsU0FBUztnQkFLaUIsVUFBVTtzQkFBcEQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDO2dCQUVkLFlBQVk7c0JBQXRDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ08sV0FBVztzQkFBdkIsS0FBSztnQkFHTyxlQUFlO3NCQUEzQixLQUFLO2dCQUdPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBR08sWUFBWTtzQkFBeEIsS0FBSztnQkFHTyxRQUFRO3NCQUFwQixLQUFLO2dCQUdPLG1CQUFtQjtzQkFBL0IsS0FBSztnQkFHTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFFRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE91dHB1dCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFByZWRpY2F0ZSxcclxuICBWaWV3Q2hpbGQsXHJcbiAgaW5qZWN0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSW5qZWN0b3IsXHJcbiAgY29udGVudENoaWxkcmVuLFxyXG4gIGNvbXB1dGVkLFxyXG4gIGVmZmVjdCxcclxuICB1bnRyYWNrZWQsXHJcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFycmF5QWRkaXRpb25hbCwgRmllbGRUeXBlLCBNZXRhRGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZic7XHJcbmltcG9ydCB7IG1hcCwgdGFwLCB3aXRoTGF0ZXN0RnJvbSwgbWVyZ2VBbGwsIHNjYW4sIHN3aXRjaEFsbCwgc3RhcnRXaXRoLCB0aW1lc3RhbXAsIG1lcmdlTWFwLCBmaWx0ZXIsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVGFibGVCdWlsZGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90YWJsZS1idWlsZGVyJztcclxuaW1wb3J0IHsgTWF0Um93RGVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBDdXN0b21DZWxsRGlyZWN0aXZlLCBUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSwgVGFibGVGaWx0ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcclxuaW1wb3J0IHsgc3RhdGVJcywgVGFibGVTdG9yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdGFibGUtc3RvcmUnO1xyXG5pbXBvcnQgeyBub3ROdWxsIH0gZnJvbSAnLi4vLi4vLi4vcnhqcy9yeGpzLW9wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEV4cG9ydFRvQ3N2U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4cG9ydC10by1jc3Yuc2VydmljZSc7XHJcbmltcG9ydCB7IEFycmF5RGVmYXVsdHMgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0RlZmF1bHRTZXR0aW5ncyc7XHJcbmltcG9ydCB7IFRhYmxlQnVpbGRlckNvbmZpZ1Rva2VuIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9UYWJsZUJ1aWxkZXJDb25maWcnO1xyXG5pbXBvcnQgeyBJbml0aWFsaXphdGlvblN0YXRlLCBUYWJsZVN0YXRlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9UYWJsZVN0YXRlJztcclxuaW1wb3J0IHsgc29ydERhdGEgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvc29ydC1kYXRhLWZ1bmN0aW9uJztcclxuaW1wb3J0IHsgV3JhcHBlckZpbHRlclN0b3JlIH0gZnJvbSAnLi4vdGFibGUtY29udGFpbmVyLWZpbHRlci90YWJsZS13cmFwcGVyLWZpbHRlci1zdG9yZSc7XHJcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IGRlZmF1bHRTaGFyZVJlcGxheSB9IGZyb20gJy4uLy4uLy4uL3J4anMnO1xyXG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXJGdW5jLCBpc0N1c3RvbUZpbHRlciwgaXNGaWx0ZXJJbmZvIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9maWx0ZXItaW5mbyc7XHJcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RpY3Rpb25hcnknO1xyXG5pbXBvcnQgeyBUYWJsZVdyYXBwZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RhYmxlLXdyYXBwZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgY3JlYXRlTGlua0NyZWF0b3JEaWN0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGluay1jcmVhdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYWJsZUJ1aWxkZXJTdGF0ZVN0b3JlIH0gZnJvbSAnLi4vLi4vbmdyeC90YWJsZUJ1aWxkZXJTdGF0ZVN0b3JlJztcclxuaW1wb3J0IHsgY29udGFpbmVySW1wb3J0cyB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLWltcG9ydHMnO1xyXG5pbXBvcnQgeyB1cGRhdGVGaWx0ZXJJbmZvU3RhdGUsIHVwZGF0ZUZpbHRlclByZWRpY2F0ZVN0YXRlLCB1cGRhdGVGaWx0ZXJTdGF0ZSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZmlsdGVyLXN0YXRlLmhlbHBlcnMnO1xyXG5pbXBvcnQgeyBpbml0aWFsU29ydFN0YXRlLCB1cGRhdGVTb3J0U3RhdGUgfSBmcm9tICcuL3RhYmxlLWNvbnRhaW5lci5oZWxwZXJzL3NvcnQtc3RhdGUuaGVscGVycyc7XHJcbmltcG9ydCB7IGdldEFsbEdyb3VwSGVhZGVyTmFtZXMsIGluaXRpYWxHcm91cEJ5U3RhdGUsIHVwZGF0ZUdyb3VwQnlTdGF0ZSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZ3JvdXBCeS5oZWxwZXJzJztcclxuaW1wb3J0IHsgc29ydEFuZEZpbHRlckRhdGEgfSBmcm9tICcuL3RhYmxlLWNvbnRhaW5lci5oZWxwZXJzL2RhdGEtc3RhdGUuaGVscGVycyc7XHJcbmltcG9ydCB7IFRhYmxlUHJvcHMsIGRlZmF1bHRQcm9wcyB9IGZyb20gJy4vdGFibGVQcm9wcyc7XHJcbmltcG9ydCB7IFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL2dlbmVyaWMtdGFibGUvcGFnaW5hdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlQnVpbGRlckRhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlQnVpbGRlckRhdGFTb3VyY2UnO1xyXG5pbXBvcnQgeyBHZW5lcmljVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9nZW5lcmljLXRhYmxlL2dlbmVyaWMtdGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgRGF0YVN0b3JlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9kYXRhLXN0b3JlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndGItdGFibGUtY29udGFpbmVyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jb250YWluZXIuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS1jb250YWluZXIuY3NzJywgJy4uLy4uL3N0eWxlcy9jb2xsYXBzZXIuc3R5bGVzLnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgcHJvdmlkZXJzOiBbVGFibGVTdG9yZSwgRXhwb3J0VG9Dc3ZTZXJ2aWNlLCBXcmFwcGVyRmlsdGVyU3RvcmUsIERhdGFTdG9yZV0sXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogY29udGFpbmVySW1wb3J0c1xyXG59KSBleHBvcnQgY2xhc3MgVGFibGVDb250YWluZXJDb21wb25lbnQ8VCA9IGFueT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJvcHM6IFRhYmxlUHJvcHMgPSB7IC4uLmRlZmF1bHRQcm9wcyB9O1xyXG4gIEBPdXRwdXQoKSBkYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUW10+KFtdKTtcclxuXHJcbiAgcHVibGljIHN0YXRlID0gaW5qZWN0KFRhYmxlU3RvcmUpO1xyXG4gIHByaXZhdGUgZGF0YVN0b3JlID0gaW5qZWN0KERhdGFTdG9yZSk7XHJcbiAgcHVibGljIGNvbmZpZyA9IGluamVjdChUYWJsZUJ1aWxkZXJDb25maWdUb2tlbik7XHJcbiAgcHVibGljIGV4cG9ydFRvQ3N2U2VydmljZSA9IGluamVjdChFeHBvcnRUb0NzdlNlcnZpY2U8VD4pO1xyXG4gIHB1YmxpYyB3cmFwcGVyID0gaW5qZWN0KFRhYmxlV3JhcHBlckRpcmVjdGl2ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcclxuICBwdWJsaWMgc3RhdGVTZXJ2aWNlID0gaW5qZWN0KFRhYmxlQnVpbGRlclN0YXRlU3RvcmUpO1xyXG4gIHB1YmxpYyBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XHJcblxyXG4gIGZpbHRlckRpcmVjdGl2ZXMgPSBjb250ZW50Q2hpbGRyZW4oVGFibGVGaWx0ZXJEaXJlY3RpdmUsIHtkZXNjZW5kYW50czogdHJ1ZX0pO1xyXG4gIGN1c3RvbUZpbHRlckRpcmVjdGl2ZXMgPSBjb250ZW50Q2hpbGRyZW4oVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsIHtkZXNjZW5kYW50czogdHJ1ZX0pO1xyXG5cclxuICAkYWxsRmlsdGVyRGlyZWN0aXZlcyA9IGNvbXB1dGVkKCAoKSA9PiAge1xyXG4gICAgICBpZih0aGlzLndyYXBwZXIpIHtcclxuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZmlsdGVyRGlyZWN0aXZlcygpLCAuLi50aGlzLmN1c3RvbUZpbHRlckRpcmVjdGl2ZXMoKSwgLi4udGhpcy53cmFwcGVyLiRyZWdpc3RyYXRpb25zKCldO1xyXG4gICAgICB9IHtcclxuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZmlsdGVyRGlyZWN0aXZlcygpLCAuLi50aGlzLmN1c3RvbUZpbHRlckRpcmVjdGl2ZXMoKV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICApO1xyXG5cclxuICAkaXNJbml0aWFsaXphdGlvblN0YXRlID0gKHN0YXRlOiBJbml0aWFsaXphdGlvblN0YXRlKSA9PiBjb21wdXRlZCgoKSA9PlxyXG4gICAgdGhpcy5zdGF0ZS5zZWxlY3RTaWduYWwocyA9PiBzLmluaXRpYWxpemF0aW9uU3RhdGUgPT09IHN0YXRlKSgpKSA7XHJcblxyXG4gIGFsbEZpbHRlckRpcmVjdGl2ZXNFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3QgbG9hZGVkID0gdGhpcy4kaXNJbml0aWFsaXphdGlvblN0YXRlKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKSgpO1xyXG4gICAgY29uc3Qgc3RhdGVGaWx0ZXJzID0gdGhpcy5zdGF0ZS4kZmlsdGVycygpO1xyXG4gICAgY29uc3QgZmlsdGVyRGlyZWN0aXZlcyA9IHRoaXMuJGFsbEZpbHRlckRpcmVjdGl2ZXMoKTtcclxuICAgIHVudHJhY2tlZCgoKSA9PiB7XHJcbiAgICAgIGlmKGxvYWRlZCkge1xyXG4gICAgICAgIGZpbHRlckRpcmVjdGl2ZXMuZmlsdGVyKCBmID0+ICFmLnVzZWQpLmZvckVhY2goIGYgPT4ge1xyXG4gICAgICAgICAgZi51c2VkID0gdHJ1ZTtcclxuICAgICAgICAgIGlmKGYuc2F2YWJsZSkge1xyXG4gICAgICAgICAgICB2YXIgZmlsdGVyID0gc3RhdGVGaWx0ZXJzW2YuZmlsdGVySWRdO1xyXG4gICAgICAgICAgICBpZihpc0ZpbHRlckluZm8oZmlsdGVyKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlckRpcmVjdGl2ZTogVGFibGVGaWx0ZXJEaXJlY3RpdmUgPSBmIGFzIFRhYmxlRmlsdGVyRGlyZWN0aXZlO1xyXG4gICAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5maWVsZFR5cGUgPSBmaWx0ZXIuZmllbGRUeXBlO1xyXG4gICAgICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5maWx0ZXJUeXBlID0gZmlsdGVyLmZpbHRlclR5cGU7XHJcbiAgICAgICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLnNldEZpbHRlclZhbHVlKGZpbHRlci5maWx0ZXJWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLmtleSA9IGZpbHRlci5rZXk7XHJcbiAgICAgICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGlzQ3VzdG9tRmlsdGVyKGZpbHRlcikpIHtcclxuICAgICAgICAgICAgICBmLmFjdGl2ZSA9IGZpbHRlci5hY3RpdmUgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5hZGRGaWx0ZXIoKGYuZmlsdGVyJCBhcyBhbnkpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9KTtcclxuXHJcbiAgQFZpZXdDaGlsZChQYWdpbmF0b3JDb21wb25lbnQpICBwYWdpbmF0b3JDb21wb25lbnQ/OiBQYWdpbmF0b3JDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChHZW5lcmljVGFibGVDb21wb25lbnQpICBnZW5lcmljVGFibGU/OiBHZW5lcmljVGFibGVDb21wb25lbnQ7XHJcbiAgQENvbnRlbnRDaGlsZHJlbihNYXRSb3dEZWYpIGN1c3RvbVJvd3MhOiBRdWVyeUxpc3Q8TWF0Um93RGVmPGFueT4+O1xyXG4gICRjdXN0b21DZWxscyA9IGNvbnRlbnRDaGlsZHJlbihDdXN0b21DZWxsRGlyZWN0aXZlKTtcclxuICAkbXlDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuJG1ldGFEYXRhQXJyYXkoKS5tYXAoIG1ldGFEYXRhID0+ICh7bWV0YURhdGEsIGN1c3RvbUNlbGw6IHRoaXMuJGN1c3RvbUNlbGxzKCkuZmluZChjYyA9PiBjYy5jdXN0b21DZWxsID09PSBtZXRhRGF0YS5rZXkpfSkpXHJcbiAgfSlcclxuICBAQ29udGVudENoaWxkKCd0YWJsZScsIHtyZWFkOiBFbGVtZW50UmVmfSkgdGFibGVFbFJlZiE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHRhYmxlQnVpbGRlciE6IFRhYmxlQnVpbGRlcjtcclxuICBASW5wdXQoKSB0YWJsZUlkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNldCBpbmRleENvbHVtbih2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucHJvcHMuaW5kZXhDb2x1bW4gPSB2YWw7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNldCBzZWxlY3Rpb25Db2x1bW4odmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnByb3BzLnNlbGVjdGlvbkNvbHVtbiA9IHZhbDtcclxuICB9XHJcbiAgQElucHV0KCkgc2V0IGlzU3RpY2t5KHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5wcm9wcy5pc1N0aWNreSA9IHZhbDtcclxuICB9XHJcbiAgQElucHV0KCkgc2V0IHN0aWNreUZvb3Rlcih2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucHJvcHMuc3RpY2t5Rm9vdGVyID0gdmFsO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5zdGF0ZS5zZXRQYWdlU2l6ZSh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNldCBncm91cEhlYWRlclRlbXBsYXRlKCB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgdGhpcy5wcm9wcy5ncm91cEhlYWRlclRlbXBsYXRlID0gdGVtcGxhdGU7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNldCBncm91cEhlYWRlckhlaWdodCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnByb3BzLmdyb3VwSGVhZGVySGVpZ2h0ID0gdmFsdWU7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHRyYWNrQnkhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaW5wdXRGaWx0ZXJzPzogT2JzZXJ2YWJsZTxBcnJheTxQcmVkaWNhdGU8VD4+PjtcclxuXHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbiQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgJGRhdGEgPSB0b1NpZ25hbCh0aGlzLmRhdGEsIHsgaW5pdGlhbFZhbHVlOiBbXSB9KTtcclxuICBAT3V0cHV0KCkgb25TdGF0ZVJlc2V0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblNhdmVTdGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc3RhdGUkID0gdGhpcy5zdGF0ZS5nZXRTYXZhYmxlU3RhdGUoKS5waXBlKFxyXG4gICAgbWFwKHN0YXRlID0+IGNsb25lRGVlcChzdGF0ZSkpLFxyXG4gICAgZGVmYXVsdFNoYXJlUmVwbGF5KCksXHJcbiAgKTtcclxuXHJcbiAgY2xlYXJTZWxlY3Rpb25zKCl7XHJcbiAgICB0aGlzLmdlbmVyaWNUYWJsZT8uc2VsZWN0aW9uLmNsZWFyKHRydWUpO1xyXG4gIH1cclxuICBkaXNwbGF5RGF0YSA9IG5ldyBSZXBsYXlTdWJqZWN0PFRbXT4oMSk7XHJcblxyXG4gICRkaXNwbGF5RGF0YSA9IHRvU2lnbmFsKHRoaXMuZGlzcGxheURhdGEsIHsgaW5pdGlhbFZhbHVlOiBbXSB9KTtcclxuXHJcbiAgJGNvbGxhcHNlRm9vdGVyID0gdGhpcy5zdGF0ZS4kY29sbGFwc2VGb290ZXI7XHJcbiAgJGNvbGxhcHNlSGVhZGVyID0gdGhpcy5zdGF0ZS4kY29sbGFwc2VIZWFkZXI7XHJcblxyXG4gIG5nT25EZXN0cm95KCl7XHJcbiAgICBpZih0aGlzLnRhYmxlSWQpIHtcclxuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2F2ZVRhYmxlU3RhdGVUb0xvY2FsKHsgdGFibGVJZDp0aGlzLnRhYmxlSWQsIHRhYmxlU3RhdGU6IHRoaXMuc3RhdGUuZ2V0U2F2YWJsZVN0YXRlU2lnbmFsKCkgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaXJzdFBhZ2UoKTogdm9pZCB7XHJcbiAgIHRoaXMucGFnaW5hdG9yQ29tcG9uZW50Py4kcGFnaW5hdG9yKCk/LmZpcnN0UGFnZSgpO1xyXG4gIH1cclxuXHJcbiAgbGFzdFBhZ2UoKTogdm9pZCB7XHJcbiAgIHRoaXMucGFnaW5hdG9yQ29tcG9uZW50Py4kcGFnaW5hdG9yKCk/Lmxhc3RQYWdlKCk7XHJcbiAgfVxyXG5cclxuICByZXNldFN0YXRlKCkge1xyXG4gICAgdGhpcy5jdXN0b21GaWx0ZXJEaXJlY3RpdmVzKCkuZm9yRWFjaCggY2YgPT4gY2YucmVzZXQoKSk7XHJcbiAgICB0aGlzLmZpbHRlckRpcmVjdGl2ZXMoKS5mb3JFYWNoKCBjZiA9PiBjZi5yZXNldCgpICk7XHJcbiAgICB0aGlzLnN0YXRlLnJlc2V0U3RhdGUoKTtcclxuICAgIHRoaXMub25TdGF0ZVJlc2V0Lm5leHQobnVsbClcclxuICB9XHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplU3RhdGVFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3QgbWV0YUxvYWRlZCA9IHRoaXMuJGlzSW5pdGlhbGl6YXRpb25TdGF0ZShJbml0aWFsaXphdGlvblN0YXRlLk1ldGFEYXRhTG9hZGVkKSgpO1xyXG4gICAgdW50cmFja2VkKCgpID0+IHtcclxuICAgICAgaWYobWV0YUxvYWRlZCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUuc2V0VGFibGVTZXR0aW5ncyh0aGlzLnRhYmxlQnVpbGRlci5zZXR0aW5ncyk7XHJcbiAgICAgICAgaWYodGhpcy50YWJsZUlkKXtcclxuICAgICAgICAgIGNvbnN0IHBlcnNpc3RlZFN0YXRlID0gdGhpcy5zdGF0ZVNlcnZpY2UuJHNlbGVjdExvY2FsVGFibGVTdGF0ZUZvclZpZXcodGhpcy50YWJsZUlkKSgpO1xyXG4gICAgICAgICAgaWYocGVyc2lzdGVkU3RhdGUpe1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLnVwZGF0ZVN0YXRlRnJvbVBlcnNpc3RlZFN0YXRlKHBlcnNpc3RlZFN0YXRlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXRlLnNldEluaXRpYWxpemF0aW9uU3RhdGUoSW5pdGlhbGl6YXRpb25TdGF0ZS5Mb2FkZWRGcm9tU3RvcmUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9KTtcclxuICBjdXN0b21GaWx0ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJlZGljYXRlPFQ+W10+KFtdKTtcclxuICBpbml0aWFsaXplRGF0YSgpIHtcclxuXHJcbiAgICBjb25zdCBwcmVkaWNhdGVGaWx0ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaW5wdXRGaWx0ZXJzPy5waXBlKHN0YXJ0V2l0aChbXSkpID8/IG9mKFtdIGFzIFByZWRpY2F0ZTxUPltdKSwgdGhpcy5jdXN0b21GaWx0ZXJzJF0pXHJcbiAgICAgIC5waXBlKG1hcCgoW2EsIGJdKSA9PiBbLi4uYSwgLi4uYl0pKTtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICB0aGlzLnN0YXRlLmZpbHRlcnMkLnBpcGUoc2Nhbih1cGRhdGVGaWx0ZXJJbmZvU3RhdGUsIHsgYWxsRmlsdGVyczoge30gfSksIHRpbWVzdGFtcCgpKSxcclxuICAgICAgcHJlZGljYXRlRmlsdGVycyQucGlwZShzY2FuKHVwZGF0ZUZpbHRlclByZWRpY2F0ZVN0YXRlLCB7YWxsRmlsdGVyczogW10gYXMgUHJlZGljYXRlPFQ+W119KSwgdGltZXN0YW1wKCkpXHJcbiAgICBdKVxyXG4gICAgLnBpcGUoXHJcbiAgICAgIG1hcCgoW2ZpbHRlckluZm8sIHByZWRdKSA9PiB1cGRhdGVGaWx0ZXJTdGF0ZShmaWx0ZXJJbmZvLCBwcmVkKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc29ydHNTdGF0ZSQgPSB0aGlzLnN0YXRlLnNvcnQkLnBpcGUoc2Nhbih1cGRhdGVTb3J0U3RhdGUsIGluaXRpYWxTb3J0U3RhdGUpKTtcclxuXHJcbiAgICBjb25zdCBzb3J0ZWRBbmRGaWx0ZXJlZERhdGEkID0gc29ydEFuZEZpbHRlckRhdGEodGhpcy50YWJsZUJ1aWxkZXIuZ2V0RGF0YSQoKSwgc29ydHNTdGF0ZSQsIGZpbHRlcnMkKTtcclxuXHJcbiAgICBjb25zdCBmbGF0R3JvdXBlZCQgPSBjb21iaW5lTGF0ZXN0KFtzb3J0ZWRBbmRGaWx0ZXJlZERhdGEkLnBpcGUodGltZXN0YW1wKCkpLCB0aGlzLnN0YXRlLmdyb3VwQnlLZXlzJC5waXBlKHRpbWVzdGFtcCgpKSwgdGhpcy5zdGF0ZS5leHBhbmRlZEdyb3VwcyQucGlwZSh0aW1lc3RhbXAoKSldKS5waXBlKFxyXG4gICAgICBzY2FuKHVwZGF0ZUdyb3VwQnlTdGF0ZSwgaW5pdGlhbEdyb3VwQnlTdGF0ZSksXHJcbiAgICAgIG1hcCgoe2Rpc3BsYXlEYXRhfSkgPT4gZGlzcGxheURhdGEpLFxyXG4gICAgICBkZWZhdWx0U2hhcmVSZXBsYXkoKSxcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZS5vbihzb3J0ZWRBbmRGaWx0ZXJlZERhdGEkLCAoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmRhdGEubmV4dChkYXRhKTtcclxuICAgICAgdGhpcy5kYXRhU3RvcmUucGF0Y2hTdGF0ZSh7ZGF0YUxlbjogZGF0YS5sZW5ndGh9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3RhdGUub24oZmxhdEdyb3VwZWQkLCAoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmRpc3BsYXlEYXRhLm5leHQoZGF0YSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBjb25zdCBjdXN0b21DZWxscyQgPSB0b09ic2VydmFibGUodGhpcy4kY3VzdG9tQ2VsbHMsIHsgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XHJcbiAgICB0aGlzLnN0YXRlLnNldExpbmtNYXBzKHRoaXMudGFibGVCdWlsZGVyLm1ldGFEYXRhJCEucGlwZShcclxuICAgICAgbWFwKGNyZWF0ZUxpbmtDcmVhdG9yRGljdClcclxuICAgICkpO1xyXG4gICAgY29uc3QgY3VzdG9tQ2VsbE1ldGEgPSBjdXN0b21DZWxscyQucGlwZShzd2l0Y2hNYXAoYyA9PiBjLmxlbmd0aCA/IGNvbWJpbmVMYXRlc3QoYy5tYXAoYyA9PiBjLiRtZXRhRGF0YSkpIDogb2YoW10gYXMgTWV0YURhdGFbXSkpKTtcclxuICAgIGNvbnN0IG1ldGFGb3JTdGF0ZSA9IGNvbWJpbmVMYXRlc3QoW3RoaXMudGFibGVCdWlsZGVyLm1ldGFEYXRhJCwgIGN1c3RvbUNlbGxNZXRhXSkucGlwZShtYXAoKFttZHMsIGN1c3RvbUNlbGxzXSkgPT4ge1xyXG4gICAgICBtZHMgPSBtZHMubWFwKHRoaXMubWFwQXJyYXlGaWVsZHNNZXRhRGF0YXMpO1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIC4uLm1kcyxcclxuICAgICAgICAuLi5jdXN0b21DZWxscy5tYXAoIG1kID0+IHRoaXMubWVyZ2VNZXRhRGF0YShtZCwgbWRzLmZpbmQoIGl0ZW0gPT4gaXRlbS5rZXkgPT09IG1kLmtleSApICkpXHJcbiAgICAgIF1cclxuICAgIH0pKTtcclxuICAgIHRoaXMuc3RhdGUuc2V0TWV0YURhdGEobWV0YUZvclN0YXRlKTtcclxuICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRzID0gbmV3IFRhYmxlQnVpbGRlckRhdGFTb3VyY2U8VD4oXHJcbiAgICAgICAgdGhpcy4kZGlzcGxheURhdGEsXHJcbiAgICAgICAgdGhpcy5zdGF0ZSxcclxuICAgICAgICB0aGlzLmRhdGFTdG9yZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnN0YXRlLnVwZGF0ZVN0YXRlKHtcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgZGF0YVNvdXJjZTogZHMsXHJcbiAgICAgICAgICAuLi50aGlzLnByb3BzXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGEoKTtcclxuICB9XHJcblxyXG4gIG1lcmdlTWV0YURhdGEobWV0YURhdGExOiBNZXRhRGF0YSwgbWV0YURhdGEyPzogTWV0YURhdGEpIHtcclxuICAgIGlmKCFtZXRhRGF0YTIpe1xyXG4gICAgICBtZXRhRGF0YTEubm9FeHBvcnQgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gbWV0YURhdGExXHJcbiAgICB9XHJcbiAgICBpZighbWV0YURhdGExLmRpc3BsYXlOYW1lKSBtZXRhRGF0YTEuZGlzcGxheU5hbWUgPSBtZXRhRGF0YTIuZGlzcGxheU5hbWU7XHJcbiAgICBpZighbWV0YURhdGExLnByZVNvcnQpIG1ldGFEYXRhMS5wcmVTb3J0ID0gbWV0YURhdGEyLnByZVNvcnQ7XHJcbiAgICBpZighbWV0YURhdGExLm9yZGVyKSBtZXRhRGF0YTEub3JkZXIgPSBtZXRhRGF0YTIub3JkZXI7XHJcbiAgICBpZighbWV0YURhdGExLndpZHRoKSBtZXRhRGF0YTEud2lkdGggPSBtZXRhRGF0YTIud2lkdGg7XHJcbiAgICBpZihtZXRhRGF0YTIuZmllbGRUeXBlKSBtZXRhRGF0YTEuZmllbGRUeXBlID0gbWV0YURhdGEyLmZpZWxkVHlwZTtcclxuICAgIG1ldGFEYXRhMS5ub0V4cG9ydCA9ICFtZXRhRGF0YTI7XHJcbiAgICByZXR1cm4gbWV0YURhdGExO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0VG9Dc3YoKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cG9ydFRvQ3N2U2VydmljZS5leHBvcnRUb0Nzdih0aGlzLiRkYXRhKCkpO1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kQWxsR3JvdXBzID0gKCkgPT4ge1xyXG4gICAgY29uc3QgZ3JvdXBIZWFkZXJzID0gZ2V0QWxsR3JvdXBIZWFkZXJOYW1lcyh0aGlzLiRkaXNwbGF5RGF0YSgpKTtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kQWxsT2ZHcm91cCh7IGdyb3VwSGVhZGVyc0J5S2V5OiBncm91cEhlYWRlcnMgfSk7XHJcbiAgfVxyXG5cclxuICBjb2xsYXBzZUFsbEdyb3VwcyA9ICgpID0+IHRoaXMuc3RhdGUuY29sbGFwc2VBbGwoKTtcclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgdGhpcy5zdGF0ZS5ydW5PbmNlV2hlbihcclxuICAgICAgc3RhdGVJcyhJbml0aWFsaXphdGlvblN0YXRlLkxvYWRlZEZyb21TdG9yZSksXHJcbiAgICAgIHN0YXRlID0+IHtcclxuICAgICAgICB0aGlzLmFkZEZpbHRlckRpcmVjdGl2ZXMoc3RhdGUpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUudXBkYXRlU3RhdGUoeyBpbml0aWFsaXphdGlvblN0YXRlOiBJbml0aWFsaXphdGlvblN0YXRlLlJlYWR5IH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBtYXBBcnJheUZpZWxkc01ldGFEYXRhcyA9IChtZXRhIDogTWV0YURhdGE8VD4pID0+IHtcclxuICAgIGlmKG1ldGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQXJyYXkpe1xyXG4gICAgICBjb25zdCBhZGRpdGlvbmFsID0gey4uLm1ldGEuYWRkaXRpb25hbH0gYXMgQXJyYXlBZGRpdGlvbmFsO1xyXG4gICAgICBhZGRpdGlvbmFsLmFycmF5U3R5bGUgPSBhZGRpdGlvbmFsPy5hcnJheVN0eWxlID8/IEFycmF5RGVmYXVsdHMuYXJyYXlTdHlsZTtcclxuICAgICAgYWRkaXRpb25hbC5saW1pdCA9IGFkZGl0aW9uYWwubGltaXQgPz8gdGhpcy5jb25maWcuYXJyYXlJbmZvPy5saW1pdCA/PyBBcnJheURlZmF1bHRzLmxpbWl0O1xyXG4gICAgICByZXR1cm4gey4uLm1ldGEsYWRkaXRpb25hbH1cclxuICAgIH1cclxuICAgIHJldHVybiBtZXRhO1xyXG4gIH1cclxuXHJcblxyXG4gIGFkZEZpbHRlckRpcmVjdGl2ZXMgPSAoc3RhdGU6IFRhYmxlU3RhdGUpID0+IHtcclxuICAgIGNvbnN0IGN1c3RvbUZpbHRlcnMkID0gIHRvT2JzZXJ2YWJsZSh0aGlzLiRhbGxGaWx0ZXJEaXJlY3RpdmVzLCB7aW5qZWN0b3I6IHRoaXMuaW5qZWN0b3J9KS5waXBlKFxyXG4gICAgICBtZXJnZU1hcCggY3VzdG9tZXJGaWx0ZXJzID0+IGN1c3RvbWVyRmlsdGVyc1xyXG4gICAgICAgIC5maWx0ZXIoIGZpbHRlciA9PiAhZmlsdGVyLnNhdmFibGUgKVxyXG4gICAgICAgIC5tYXAoZmlsdGVyID0+IGZpbHRlci5maWx0ZXIkIClcclxuICAgICAgKSxcclxuICAgICAgbWVyZ2VBbGwoKSxcclxuICAgICAgc2NhbiggKGEsYik9PiB7XHJcbiAgICAgICAgICBpZihiLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICBhW2IuZmlsdGVySWRdID0gaXNDdXN0b21GaWx0ZXIoYikgPyBiLnByZWRpY2F0ZSA6IGNyZWF0ZUZpbHRlckZ1bmMoYik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgYVtiLmZpbHRlcklkXSA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIHJldHVybiBhO1xyXG4gICAgICB9LCB7fSBhcyBEaWN0aW9uYXJ5PFByZWRpY2F0ZTxhbnk+PiksXHJcbiAgICAgIG1hcCggZiA9PiBPYmplY3QudmFsdWVzKGYpKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlLm9uKGN1c3RvbUZpbHRlcnMkLCAoZikgPT4ge1xyXG4gICAgICB0aGlzLmN1c3RvbUZpbHRlcnMkLm5leHQoZik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gICR1c2VWaXJ0dWFsID0gdGhpcy5zdGF0ZS4kaXNWaXJ0dWFsO1xyXG59XHJcbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cIltiZWZvcmVdXCIgLz5cclxuXHJcbjxuZy1jb250YWluZXIgbXVsdGlTb3J0ICpuZ3J4TGV0PVwic3RhdGUudGFibGVTZXR0aW5ncyQgYXMgdGFibGVTZXR0aW5nc1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItd3JhcHBlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgIEBpZiAoKCEkY29sbGFwc2VIZWFkZXIoKSkgfHwgdGFibGVTZXR0aW5ncy5zaG93VGl0bGVXaGVuSGVhZGVyQ29sbGFwc2VkKSB7XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnRiLWhlYWRlci10aXRsZVwiLz5cclxuICAgICAgfVxyXG4gICAgICBAaWYoKHN0YXRlLmdyb3VwQnlLZXlzJCB8IGFzeW5jKT8ubGVuZ3RoKXtcclxuICAgICAgICA8Z3JvdXAtYnktbGlzdCAvPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbHgtcm93LWVuZFwiPlxyXG4gICAgICA8bGliLWZpbHRlci1saXN0IC8+XHJcbiAgICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZUhlYWRlcikge1xyXG4gICAgICAgIEBpZiAoISRjb2xsYXBzZUhlYWRlcigpKSB7XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyTWVudVwiLz5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPSdwcmltYXJ5JyBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWFpbk1lbnVcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxtYXQtbWVudSAjbWFpbk1lbnU9J21hdE1lbnUnPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyTWVudUV4dHJhXCIvPlxyXG4gICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtYWluTWVudVwiIGNsYXNzPVwiZmxhdC1tZW51LWJ1dHRvbiBwb2ludGVyXCI+bW9yZV9ob3JpejwvbWF0LWljb24+XHJcbiAgICAgICAgICA8bWF0LW1lbnUgI21haW5NZW51PSdtYXRNZW51Jz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVcIi8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyTWVudUV4dHJhXCIvPlxyXG4gICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICB9XHJcbiAgICAgICAgPG1hdC1pY29uIFttYXRUb29sdGlwXT1cIiRjb2xsYXBzZUhlYWRlcigpID8gJ2V4cGFuZCcgOiAnY29sbGFwc2UnXCIgY2xhc3M9XCJjb2xsYXBzZS1pY29uIGhlYWRlclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwic3RhdGUudG9nZ2xlQ29sbGFwc2VIZWFkZXIoKVwiPlxyXG4gICAgICAgICAge3skY29sbGFwc2VIZWFkZXIoKSA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnfX1cclxuICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICB9XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXJcIj5cclxuICAgIEBpZigkdXNlVmlydHVhbCgpKVxyXG4gICAge1xyXG4gICAgICA8dGItdmlydHVhbC1zY3JvbGwtY29udGFpbmVyPlxyXG4gICAgICAgIDx0Yi1nZW5lcmljLXRhYmxlIFtyb3dzXT0nY3VzdG9tUm93cycgW2RhdGFdPVwiKGRhdGEgfCBhc3luYykhXCIgW2Rpc3BsYXlEYXRhXT1cIiRkaXNwbGF5RGF0YSgpXCJcclxuICAgICAgICAgIChzZWxlY3Rpb24kKT0nc2VsZWN0aW9uJC5lbWl0KCRldmVudCknIFtjb2x1bW5JbmZvc109JyRteUNvbHVtbnMoKScgW3RyYWNrQnldPVwidHJhY2tCeVwiIC8+XHJcbiAgICAgIDwvdGItdmlydHVhbC1zY3JvbGwtY29udGFpbmVyPlxyXG4gICAgfVxyXG4gICAgQGVsc2VcclxuICAgIHtcclxuICAgICAgPHRiLWdlbmVyaWMtdGFibGUgW3Jvd3NdPSdjdXN0b21Sb3dzJyBbZGF0YV09XCIoZGF0YSB8IGFzeW5jKSFcIiBbZGlzcGxheURhdGFdPVwiJGRpc3BsYXlEYXRhKClcIlxyXG4gICAgICAgIChzZWxlY3Rpb24kKT0nc2VsZWN0aW9uJC5lbWl0KCRldmVudCknIFtjb2x1bW5JbmZvc109JyRteUNvbHVtbnMoKScgW3RyYWNrQnldPVwidHJhY2tCeVwiIC8+XHJcbiAgICB9XHJcblxyXG4gIDwvZGl2PlxyXG4gIEBpZih0YWJsZVNldHRpbmdzLnVzZVBhZ2luYXRvcilcclxuICB7XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdG9yXCI+XHJcbiAgICAgIDx0Yi1wYWdpbmF0b3IgI3RiUGFnaW5hdG9yIFt0YWJsZUVsUmVmXT1cInRhYmxlRWxSZWZcIiAvPlxyXG5cclxuICAgICAgPG1hdC1pY29uIFttYXRUb29sdGlwXT1cIiRjb2xsYXBzZUZvb3RlcigpID8gJ2V4cGFuZCcgOiAnY29sbGFwc2UnXCIgY2xhc3M9XCJjb2xsYXBzZS1pY29uIGZvb3RlclwiXHJcbiAgICAgICAgKGNsaWNrKT1cInN0YXRlLnRvZ2dsZUNvbGxhcHNlRm9vdGVyKClcIj5cclxuICAgICAgICB7eyRjb2xsYXBzZUZvb3RlcigpID8gJ2V4cGFuZF9tb3JlJyA6ICdleHBhbmRfbGVzcyd9fVxyXG4gICAgICA8L21hdC1pY29uPlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICA8bmctdGVtcGxhdGUgI2hlYWRlck1lbnU+XHJcbiAgICBAaWYgKCF0YWJsZVNldHRpbmdzLmhpZGVGaWx0ZXIpIHs8dGItZmlsdGVyLWRpc3BsYXllci8+fVxyXG4gICAgQGlmICghdGFibGVTZXR0aW5ncy5oaWRlQ29sdW1uU2V0dGluZ3MpIHs8dGItY29sLWRpc3BsYXllci8+fVxyXG4gICAgQGlmICghdGFibGVTZXR0aW5ncy5oaWRlU29ydCkgezx0Yi1zb3J0LW1lbnUvPn1cclxuICAgIEBpZiAoISF0YWJsZUlkKSB7PHRiLXByb2ZpbGVzLW1lbnUgWyR0YWJsZUlkXT1cInRhYmxlSWRcIiAob25TYXZlU3RhdGUpPVwib25TYXZlU3RhdGUuZW1pdCgkZXZlbnQpXCIvPn1cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2hlYWRlck1lbnVFeHRyYT5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVzZXRTdGF0ZSgpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5hdXRvcmVuZXc8L21hdC1pY29uPlxyXG4gICAgICA8c3Bhbj5SZXNldCB0YWJsZTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgQGlmICghdGFibGVTZXR0aW5ncy5oaWRlRXhwb3J0KSB7XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZXhwb3J0VG9Dc3YoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5maWxlX2Rvd25sb2FkPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3Bhbj5FeHBvcnQgVGFibGU8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgQGlmICh0YWJsZUlkKSB7XHJcbiAgICAgIDxidXR0b24gc3RvcC1wcm9wYWdhdGlvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwbS50cmlnZ2VyKCk/LnRvZ2dsZU1lbnUoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5wZW9wbGU8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuPlByb2ZpbGVzPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPHRiLXByb2ZpbGVzLW1lbnUgY2xhc3M9XCJwcm9maWxlcy1tZW51XCIgI3BtIFskdGFibGVJZF09XCJ0YWJsZUlkXCIgKG9uU2F2ZVN0YXRlKT1cIm9uU2F2ZVN0YXRlLmVtaXQoJGV2ZW50KVwiLz5cclxuICAgIH1cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
|