@paperless/angular 1.15.0 → 1.16.0
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/esm2020/lib/modules/table/components/table/table.component.mjs +52 -128
- package/esm2020/lib/modules/table/directives/index.mjs +4 -1
- package/esm2020/lib/modules/table/directives/p-table-floating-menu-content.directive.mjs +16 -0
- package/esm2020/lib/modules/table/table.module.mjs +3 -2
- package/esm2020/lib/stencil/components.mjs +10 -8
- package/fesm2015/paperless-angular.mjs +76 -135
- package/fesm2015/paperless-angular.mjs.map +1 -1
- package/fesm2020/paperless-angular.mjs +76 -135
- package/fesm2020/paperless-angular.mjs.map +1 -1
- package/lib/modules/table/components/table/table.component.d.ts +34 -16
- package/lib/modules/table/directives/index.d.ts +3 -1
- package/lib/modules/table/directives/p-table-floating-menu-content.directive.d.ts +8 -0
- package/lib/modules/table/table.module.d.ts +4 -3
- package/lib/stencil/components.d.ts +4 -4
- package/package.json +1 -1
- package/paperless.css +25 -4
|
@@ -2,7 +2,7 @@ import { __decorate } from "tslib";
|
|
|
2
2
|
import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, EventEmitter, HostListener, Input, Output, TemplateRef, } from '@angular/core';
|
|
3
3
|
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
|
|
4
4
|
import { BehaviorSubject, distinctUntilChanged } from 'rxjs';
|
|
5
|
-
import { TableCustomFilterDirective, TableFilterModalDirective, } from '../../directives';
|
|
5
|
+
import { TableCustomFilterDirective, TableFilterModalDirective, TableFloatingMenuContentDirective, } from '../../directives';
|
|
6
6
|
import { TableColumn } from '../table-column/table-column.component';
|
|
7
7
|
import { defaultSize, defaultSizeOptions } from './constants';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
@@ -12,7 +12,8 @@ import * as i3 from "../table-cell/table-cell.component";
|
|
|
12
12
|
import * as i4 from "../../directives/p-table-footer.directive";
|
|
13
13
|
import * as i5 from "../../directives/p-table-header.directive";
|
|
14
14
|
let Table = class Table {
|
|
15
|
-
constructor() {
|
|
15
|
+
constructor(_elementRef) {
|
|
16
|
+
this._elementRef = _elementRef;
|
|
16
17
|
/**
|
|
17
18
|
* Wether data is loading
|
|
18
19
|
*/
|
|
@@ -45,6 +46,14 @@ let Table = class Table {
|
|
|
45
46
|
* Event whenever the current selection changes
|
|
46
47
|
*/
|
|
47
48
|
this.selectedRowsChange = new EventEmitter();
|
|
49
|
+
/**
|
|
50
|
+
* Wether to enable the floating menu
|
|
51
|
+
*/
|
|
52
|
+
this.enableFloatingMenu = true;
|
|
53
|
+
/**
|
|
54
|
+
* The floating menu amount item text
|
|
55
|
+
*/
|
|
56
|
+
this.floatingMenuAmountSelectedText = '0 items selected';
|
|
48
57
|
/**
|
|
49
58
|
* Event whenever a row is clicked
|
|
50
59
|
*/
|
|
@@ -75,17 +84,21 @@ let Table = class Table {
|
|
|
75
84
|
*/
|
|
76
85
|
this.enableFilter = true;
|
|
77
86
|
/**
|
|
78
|
-
* Wether to show the
|
|
87
|
+
* Wether to show the action button
|
|
79
88
|
*/
|
|
80
|
-
this.
|
|
89
|
+
this.enableAction = false;
|
|
81
90
|
/**
|
|
82
|
-
* Wether the
|
|
91
|
+
* Wether the action button is loading
|
|
83
92
|
*/
|
|
84
|
-
this.
|
|
93
|
+
this.actionButtonLoading = false;
|
|
85
94
|
/**
|
|
86
|
-
* The
|
|
95
|
+
* The action button icon
|
|
87
96
|
*/
|
|
88
|
-
this.
|
|
97
|
+
this.actionButtonIcon = 'pencil';
|
|
98
|
+
/**
|
|
99
|
+
* Wether the action button is enabled
|
|
100
|
+
*/
|
|
101
|
+
this.actionButtonEnabled = true;
|
|
89
102
|
/**
|
|
90
103
|
* Event when one of the quick filters is clicked
|
|
91
104
|
*/
|
|
@@ -99,9 +112,9 @@ let Table = class Table {
|
|
|
99
112
|
*/
|
|
100
113
|
this.filter = new EventEmitter();
|
|
101
114
|
/**
|
|
102
|
-
* Event when the
|
|
115
|
+
* Event when the action button is clicked
|
|
103
116
|
*/
|
|
104
|
-
this.
|
|
117
|
+
this.action = new EventEmitter();
|
|
105
118
|
/** START FOOTER */
|
|
106
119
|
/**
|
|
107
120
|
* Wether to show the footer
|
|
@@ -189,7 +202,6 @@ let Table = class Table {
|
|
|
189
202
|
this.filterModalShow$
|
|
190
203
|
.pipe(untilDestroyed(this), distinctUntilChanged())
|
|
191
204
|
.subscribe((value) => this.filterModalShow.next(value));
|
|
192
|
-
// this._generateColumns();
|
|
193
205
|
}
|
|
194
206
|
ngOnChanges(changes) {
|
|
195
207
|
if (changes['items']) {
|
|
@@ -201,10 +213,6 @@ let Table = class Table {
|
|
|
201
213
|
});
|
|
202
214
|
}
|
|
203
215
|
}
|
|
204
|
-
// @HostListener('body:tableDefinitionChanged', { target: 'body' })
|
|
205
|
-
// onTableDefinitionUpdated() {
|
|
206
|
-
// this._generateColumns();
|
|
207
|
-
// }
|
|
208
216
|
keyDown({ key }) {
|
|
209
217
|
if (key !== 'Control' || this._ctrlDown === true) {
|
|
210
218
|
return;
|
|
@@ -269,114 +277,16 @@ let Table = class Table {
|
|
|
269
277
|
definitionsArray[definitionsArray.length - 1].isLast = true;
|
|
270
278
|
this.columns = definitionsArray;
|
|
271
279
|
}
|
|
272
|
-
// private _getHeader() {
|
|
273
|
-
// return (
|
|
274
|
-
// <p-table-row variant="header">
|
|
275
|
-
// {this._columns.map((col: TableDefinition, index) => (
|
|
276
|
-
// <p-table-column
|
|
277
|
-
// definition={col}
|
|
278
|
-
// value={col.name}
|
|
279
|
-
// variant="header"
|
|
280
|
-
// checkbox={this._getCheckbox(index, null, 'header')}
|
|
281
|
-
// index={index}
|
|
282
|
-
// ></p-table-column>
|
|
283
|
-
// ))}
|
|
284
|
-
// </p-table-row>
|
|
285
|
-
// );
|
|
286
|
-
// }
|
|
287
|
-
// private _getRows() {
|
|
288
|
-
// if (this.loading) {
|
|
289
|
-
// return Array.from(
|
|
290
|
-
// {
|
|
291
|
-
// length: this.amountOfLoadingRows,
|
|
292
|
-
// },
|
|
293
|
-
// (_, i) => (
|
|
294
|
-
// <p-table-row
|
|
295
|
-
// enableHover={
|
|
296
|
-
// this.enableRowSelection || this.enableRowClick
|
|
297
|
-
// }
|
|
298
|
-
// >
|
|
299
|
-
// {this._getLoadingColumns(i)}
|
|
300
|
-
// </p-table-row>
|
|
301
|
-
// )
|
|
302
|
-
// );
|
|
303
|
-
// }
|
|
304
|
-
// return this._items.map((item, index) => (
|
|
305
|
-
// <p-table-row
|
|
306
|
-
// enableHover={this.enableRowSelection || this.enableRowClick}
|
|
307
|
-
// onClick={(ev) => this._rowClick(ev, index)}
|
|
308
|
-
// >
|
|
309
|
-
// {this._getRowColumns(item, index)}
|
|
310
|
-
// </p-table-row>
|
|
311
|
-
// ));
|
|
312
|
-
// }
|
|
313
|
-
// private _getRowColumns(item, index) {
|
|
314
|
-
// return this._columns.map((col: TableDefinition, colIndex) => {
|
|
315
|
-
// return (
|
|
316
|
-
// <p-table-column
|
|
317
|
-
// definition={col}
|
|
318
|
-
// item={item}
|
|
319
|
-
// checkbox={this._getCheckbox(colIndex, index)}
|
|
320
|
-
// index={colIndex}
|
|
321
|
-
// rowIndex={index}
|
|
322
|
-
// ></p-table-column>
|
|
323
|
-
// );
|
|
324
|
-
// });
|
|
325
|
-
// }
|
|
326
|
-
// private _getLoadingColumns(index) {
|
|
327
|
-
// return this._columns.map((col: TableDefinition, colIndex) => {
|
|
328
|
-
// return (
|
|
329
|
-
// <p-table-column
|
|
330
|
-
// definition={col}
|
|
331
|
-
// variant="loading"
|
|
332
|
-
// checkbox={this._getCheckbox(colIndex, index, 'loading')}
|
|
333
|
-
// index={colIndex}
|
|
334
|
-
// rowIndex={index}
|
|
335
|
-
// ></p-table-column>
|
|
336
|
-
// );
|
|
337
|
-
// });
|
|
338
|
-
// }
|
|
339
|
-
// private _getCheckbox(
|
|
340
|
-
// index,
|
|
341
|
-
// rowIndex,
|
|
342
|
-
// variant: 'header' | 'default' | 'loading' = 'default'
|
|
343
|
-
// ) {
|
|
344
|
-
// if (!this.enableRowSelection || !this.selectionKey || index !== 0) {
|
|
345
|
-
// return;
|
|
346
|
-
// }
|
|
347
|
-
// if (variant === 'loading') {
|
|
348
|
-
// return <p-loader variant="ghost" class="rounded w-6 h-6" />;
|
|
349
|
-
// }
|
|
350
|
-
// if (variant === 'header') {
|
|
351
|
-
// return (
|
|
352
|
-
// <input
|
|
353
|
-
// class="p-input"
|
|
354
|
-
// type="checkbox"
|
|
355
|
-
// onChange={(ev) => this._selectAllChange(ev)}
|
|
356
|
-
// checked={this._selectionContainsAll()}
|
|
357
|
-
// indeterminate={this._selectionIndeterminate()}
|
|
358
|
-
// />
|
|
359
|
-
// );
|
|
360
|
-
// }
|
|
361
|
-
// const item = this._items[rowIndex];
|
|
362
|
-
// return (
|
|
363
|
-
// <input
|
|
364
|
-
// class="p-input"
|
|
365
|
-
// type="checkbox"
|
|
366
|
-
// onChange={(ev) => this._checkboxChange(ev?.target, rowIndex)}
|
|
367
|
-
// disabled={this.canSelectKey && !item[this.canSelectKey]}
|
|
368
|
-
// checked={this._selectionContains(item, rowIndex)}
|
|
369
|
-
// />
|
|
370
|
-
// );
|
|
371
|
-
// }
|
|
372
280
|
_checkboxDisabled(item) {
|
|
373
281
|
return this.canSelectKey && !item[this.canSelectKey];
|
|
374
282
|
}
|
|
375
|
-
_selectAllChange($event) {
|
|
283
|
+
_selectAllChange($event, forceValue) {
|
|
376
284
|
if (!this.enableRowSelection) {
|
|
377
285
|
return;
|
|
378
286
|
}
|
|
379
|
-
const value =
|
|
287
|
+
const value = forceValue === undefined
|
|
288
|
+
? this._getCheckedValue($event.target)
|
|
289
|
+
: forceValue;
|
|
380
290
|
if (value) {
|
|
381
291
|
const toAdd = [];
|
|
382
292
|
for (let i = 0; i < this.parsedItems.length; i++) {
|
|
@@ -522,16 +432,16 @@ let Table = class Table {
|
|
|
522
432
|
return this._findRowAction(el?.parentElement);
|
|
523
433
|
}
|
|
524
434
|
};
|
|
525
|
-
Table.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Table, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
526
|
-
Table.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Table, selector: "p-table-ngx", inputs: { items: "items", loading: "loading", headerLoading: "headerLoading", footerLoading: "footerLoading", amountOfLoadingRows: "amountOfLoadingRows", enableRowSelection: "enableRowSelection", enableRowClick: "enableRowClick", selectedRows: "selectedRows", selectionKey: "selectionKey", canSelectKey: "canSelectKey", enableHeader: "enableHeader", quickFilters: "quickFilters", activeQuickFilterIdentifier: "activeQuickFilterIdentifier", enableSearch: "enableSearch", query: "query", enableFilter: "enableFilter", selectedFiltersAmount: "selectedFiltersAmount", filterButtonTemplate: "filterButtonTemplate", enableEdit: "enableEdit", editButtonLoading: "editButtonLoading", editButtonIcon: "editButtonIcon", editButtonText: "editButtonText", editButtonTemplate: "editButtonTemplate", enableFooter: "enableFooter", enablePageSize: "enablePageSize", enablePagination: "enablePagination", enableExport: "enableExport", page: "page", total: "total", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hideOnSinglePage: "hideOnSinglePage", emptyStateType: "emptyStateType", emptyStateIllustration: "emptyStateIllustration", emptyStateHeader: "emptyStateHeader", emptyStateContent: "emptyStateContent", emptyStateAction: "emptyStateAction", enableEmptyStateAction: "enableEmptyStateAction", emptyStateFilteredIllustration: "emptyStateFilteredIllustration", emptyStateFilteredHeader: "emptyStateFilteredHeader", emptyStateFilteredContent: "emptyStateFilteredContent", filterModalHeaderText: "filterModalHeaderText", filterModalSaveText: "filterModalSaveText", filterModalCancelText: "filterModalCancelText", filterModalResetText: "filterModalResetText", filterModalShowReset: "filterModalShowReset", filterModalShowResetMobile: "filterModalShowResetMobile" }, outputs: { selectedRowsChange: "selectedRowsChange", rowClick: "rowClick", rowSelected: "rowSelected", rowDeselected: "rowDeselected", quickFilter: "quickFilter", queryChange: "queryChange", filter: "filter", edit: "edit", pageChange: "pageChange", pageSizeChange: "pageSizeChange", export: "export", emptyStateActionClick: "emptyStateActionClick", filterModalShow: "filterModalShow", filterModalSave: "filterModalSave", filterModalReset: "filterModalReset" }, host: { listeners: { "document:keydown": "keyDown($event)", "document:keyup": "keyUp($event)", "document:visibilitychange": "visibilityChange($event)" } }, queries: [{ propertyName: "headerCustomFilterTemplate", first: true, predicate: TableCustomFilterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "filterModalTemplate", first: true, predicate: TableFilterModalDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "columnDefinitions", predicate: TableColumn }], usesOnChanges: true, ngImport: i0, template: "<p-table-container>\n <p-table-header\n *ngIf=\"enableHeader\"\n [quickFilters]=\"quickFilters\"\n [activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n (quickFilter)=\"onQuickFilter($event)\"\n [enableSearch]=\"enableSearch\"\n [query]=\"query\"\n (queryChange)=\"onQueryChange($event)\"\n [enableFilter]=\"enableFilter\"\n [selectedFiltersAmount]=\"selectedFiltersAmount\"\n [filterButtonTemplate]=\"filterButtonTemplate\"\n (filter)=\"filterModalShow$.next(true)\"\n [enableEdit]=\"enableEdit\"\n [canEdit]=\"!!selectedRows.length\"\n [editButtonTemplate]=\"editButtonTemplate\"\n [editLoading]=\"editButtonLoading\"\n [editText]=\"editButtonText\"\n [editIcon]=\"editButtonIcon\"\n (edit)=\"edit.emit()\"\n [itemsSelectedAmount]=\"selectedRows.length\"\n [loading]=\"headerLoading\"\n >\n <ng-container *ngIf=\"headerCustomFilterTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerCustomFilterTemplate\"\n ></ng-container>\n </ng-container>\n </p-table-header>\n\n <p-table-row variant=\"header\">\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n [value]=\"col.name\"\n variant=\"header\"\n [index]=\"index\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"_selectAllChange($event)\"\n [checked]=\"_selectionContainsAll()\"\n [indeterminate]=\"_selectionIndeterminate()\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n\n <div class=\"flex flex-col\">\n <ng-container *ngIf=\"loading; else contentTemplate\">\n <p-table-row\n *ngFor=\"let r of loadingRows; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n >\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n variant=\"loading\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <p-loader\n variant=\"ghost\"\n class=\"h-6 w-6 rounded\"\n ></p-loader>\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"items?.length; else emptyStateTemplate\">\n <p-table-row\n *ngFor=\"let item of items; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n (click)=\"_rowClick($event, rowIndex)\"\n >\n <ng-container\n *ngFor=\"let col of columns; let index = index\"\n >\n <p-table-cell-ngx\n [definition]=\"col\"\n [item]=\"item\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n [template]=\"col.template\"\n ></p-table-cell-ngx>\n\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"\n _checkboxChange($event.target, rowIndex)\n \"\n [disabled]=\"_checkboxDisabled(item)\"\n [checked]=\"_selectionContains(item, rowIndex)\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n </ng-template>\n </div>\n\n <p-table-footer\n *ngIf=\"enableFooter\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [enablePageSize]=\"enablePageSize\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n [enablePagination]=\"enablePagination\"\n [page]=\"page\"\n [total]=\"total\"\n (pageChange)=\"onPageChange($event)\"\n [enableExport]=\"enableExport\"\n (export)=\"export.emit()\"\n [loading]=\"footerLoading\"\n ></p-table-footer>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n <p-modal\n [header]=\"filterModalHeaderText\"\n [show]=\"filterModalShow$ | async\"\n (closed)=\"filterModalShow$.next(false)\"\n >\n <div slot=\"content\" class=\"flex flex-col gap-6\">\n <ng-container\n *ngTemplateOutlet=\"filterModalTemplate\"\n ></ng-container>\n </div>\n <div slot=\"footer\" class=\"flex w-full justify-between gap-4\">\n <p-button\n *ngIf=\"filterModalShowResetMobile\"\n class=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset(true)\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n *ngIf=\"filterModalShowReset\"\n class=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset()\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n class=\"ml-auto w-full tablet:w-auto\"\n icon=\"checkmark\"\n (onClick)=\"onFilterModalSave()\"\n >\n {{ filterModalSaveText }}\n </p-button>\n </div>\n </p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n <div\n *ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n >\n <p-illustration\n [variant]=\"emptyStateFilteredIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateFilteredHeader }}\n </p>\n <p class=\"mb-14 text-sm text-storm-medium\">\n {{ emptyStateFilteredContent }}\n </p>\n </div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n <div\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n [class.cursor-pointer]=\"enableEmptyStateAction\"\n (click)=\"emptyStateClicked()\"\n >\n <p-illustration\n [variant]=\"emptyStateIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateHeader }}\n </p>\n <p class=\"mb-6 text-sm text-storm-medium\">\n {{ emptyStateContent }}\n </p>\n <p-button\n *ngIf=\"enableEmptyStateAction\"\n variant=\"secondary\"\n icon=\"plus\"\n size=\"small\"\n >\n {{ emptyStateAction }}\n </p-button>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}:host .p-input[type=checkbox]{flex-shrink:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.PButton, selector: "p-button", inputs: ["chevron", "chevronPosition", "disabled", "href", "icon", "iconFlip", "iconOnly", "iconPosition", "iconRotate", "inheritText", "loading", "size", "target", "underline", "variant"] }, { kind: "component", type: i2.PIllustration, selector: "p-illustration", inputs: ["variant"] }, { kind: "component", type: i2.PLoader, selector: "p-loader", inputs: ["color", "modalDescription", "modalTitle", "show", "variant"] }, { kind: "component", type: i2.PModal, selector: "p-modal", inputs: ["applyBlur", "backdropClickClose", "header", "padding", "scrollLock", "show", "showClose", "showMobileFooter", "size", "variant"] }, { kind: "component", type: i2.PTableContainer, selector: "p-table-container" }, { kind: "component", type: i2.PTableFooter, selector: "p-table-footer", inputs: ["enableExport", "enablePageSize", "enablePagination", "hideOnSinglePage", "loading", "page", "pageSize", "pageSizeOptions", "total"] }, { kind: "component", type: i2.PTableHeader, selector: "p-table-header", inputs: ["activeQuickFilterIdentifier", "canEdit", "editButtonTemplate", "editIcon", "editLoading", "editText", "enableEdit", "enableFilter", "enableSearch", "filterButtonTemplate", "itemsSelectedAmount", "loading", "query", "quickFilters", "selectedFiltersAmount"] }, { kind: "component", type: i2.PTableRow, selector: "p-table-row", inputs: ["enableHover", "variant"] }, { kind: "component", type: i3.TableCell, selector: "p-table-cell-ngx", inputs: ["variant", "index", "rowIndex", "definition", "item", "value", "checkbox", "template"] }, { kind: "directive", type: i4.TableFooterDirective, selector: "p-table-footer" }, { kind: "directive", type: i5.TableHeaderDirective, selector: "p-table-header" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
435
|
+
Table.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Table, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
436
|
+
Table.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Table, selector: "p-table-ngx", inputs: { items: "items", loading: "loading", headerLoading: "headerLoading", footerLoading: "footerLoading", amountOfLoadingRows: "amountOfLoadingRows", enableRowSelection: "enableRowSelection", enableRowClick: "enableRowClick", selectedRows: "selectedRows", selectionKey: "selectionKey", canSelectKey: "canSelectKey", enableFloatingMenu: "enableFloatingMenu", floatingMenuAmountSelectedText: "floatingMenuAmountSelectedText", floatingMenuAmountSelectedTemplate: "floatingMenuAmountSelectedTemplate", enableHeader: "enableHeader", quickFilters: "quickFilters", activeQuickFilterIdentifier: "activeQuickFilterIdentifier", enableSearch: "enableSearch", query: "query", enableFilter: "enableFilter", selectedFiltersAmount: "selectedFiltersAmount", filterButtonTemplate: "filterButtonTemplate", enableAction: "enableAction", actionButtonLoading: "actionButtonLoading", actionButtonIcon: "actionButtonIcon", actionButtonEnabled: "actionButtonEnabled", actionButtonText: "actionButtonText", actionButtonTemplate: "actionButtonTemplate", enableFooter: "enableFooter", enablePageSize: "enablePageSize", enablePagination: "enablePagination", enableExport: "enableExport", page: "page", total: "total", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hideOnSinglePage: "hideOnSinglePage", emptyStateType: "emptyStateType", emptyStateIllustration: "emptyStateIllustration", emptyStateHeader: "emptyStateHeader", emptyStateContent: "emptyStateContent", emptyStateAction: "emptyStateAction", enableEmptyStateAction: "enableEmptyStateAction", emptyStateFilteredIllustration: "emptyStateFilteredIllustration", emptyStateFilteredHeader: "emptyStateFilteredHeader", emptyStateFilteredContent: "emptyStateFilteredContent", filterModalHeaderText: "filterModalHeaderText", filterModalSaveText: "filterModalSaveText", filterModalCancelText: "filterModalCancelText", filterModalResetText: "filterModalResetText", filterModalShowReset: "filterModalShowReset", filterModalShowResetMobile: "filterModalShowResetMobile" }, outputs: { selectedRowsChange: "selectedRowsChange", rowClick: "rowClick", rowSelected: "rowSelected", rowDeselected: "rowDeselected", quickFilter: "quickFilter", queryChange: "queryChange", filter: "filter", action: "action", pageChange: "pageChange", pageSizeChange: "pageSizeChange", export: "export", emptyStateActionClick: "emptyStateActionClick", filterModalShow: "filterModalShow", filterModalSave: "filterModalSave", filterModalReset: "filterModalReset" }, host: { listeners: { "document:keydown": "keyDown($event)", "document:keyup": "keyUp($event)", "document:visibilitychange": "visibilityChange($event)" } }, queries: [{ propertyName: "floatingMenuContentTemplate", first: true, predicate: TableFloatingMenuContentDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "headerCustomFilterTemplate", first: true, predicate: TableCustomFilterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "filterModalTemplate", first: true, predicate: TableFilterModalDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "columnDefinitions", predicate: TableColumn }], usesOnChanges: true, ngImport: i0, template: "<p-table-container>\n <p-table-header\n *ngIf=\"enableHeader\"\n [quickFilters]=\"quickFilters\"\n [activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n (quickFilter)=\"onQuickFilter($event)\"\n [enableSearch]=\"enableSearch\"\n [query]=\"query\"\n (queryChange)=\"onQueryChange($event)\"\n [enableFilter]=\"enableFilter\"\n [selectedFiltersAmount]=\"selectedFiltersAmount\"\n [filterButtonTemplate]=\"filterButtonTemplate\"\n (filter)=\"filterModalShow$.next(true)\"\n [enableAction]=\"enableAction\"\n [canUseAction]=\"actionButtonEnabled\"\n [actionButtonTemplate]=\"actionButtonTemplate\"\n [actionLoading]=\"actionButtonLoading\"\n [actionText]=\"actionButtonText\"\n [actionIcon]=\"actionButtonIcon\"\n (action)=\"action.emit()\"\n [itemsSelectedAmount]=\"selectedRows.length\"\n [loading]=\"headerLoading\"\n >\n <ng-container *ngIf=\"headerCustomFilterTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerCustomFilterTemplate\"\n ></ng-container>\n </ng-container>\n </p-table-header>\n\n <p-table-row variant=\"header\">\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n [value]=\"col.name\"\n variant=\"header\"\n [index]=\"index\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"_selectAllChange($event)\"\n [checked]=\"_selectionContainsAll()\"\n [indeterminate]=\"_selectionIndeterminate()\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n\n <div class=\"flex flex-col\">\n <ng-container *ngIf=\"loading; else contentTemplate\">\n <p-table-row\n *ngFor=\"let r of loadingRows; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n >\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n variant=\"loading\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <p-loader\n variant=\"ghost\"\n class=\"h-6 w-6 rounded\"\n ></p-loader>\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"items?.length; else emptyStateTemplate\">\n <p-table-row\n *ngFor=\"let item of items; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n (click)=\"_rowClick($event, rowIndex)\"\n >\n <ng-container\n *ngFor=\"let col of columns; let index = index\"\n >\n <p-table-cell-ngx\n [definition]=\"col\"\n [item]=\"item\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n [template]=\"col.template\"\n ></p-table-cell-ngx>\n\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"\n _checkboxChange($event.target, rowIndex)\n \"\n [disabled]=\"_checkboxDisabled(item)\"\n [checked]=\"_selectionContains(item, rowIndex)\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n </ng-template>\n </div>\n\n <p-table-footer\n *ngIf=\"enableFooter\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [enablePageSize]=\"enablePageSize\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n [enablePagination]=\"enablePagination\"\n [page]=\"page\"\n [total]=\"total\"\n (pageChange)=\"onPageChange($event)\"\n [enableExport]=\"enableExport\"\n (export)=\"export.emit()\"\n [loading]=\"footerLoading\"\n ></p-table-footer>\n\n <ng-container *ngIf=\"enableFloatingMenu\">\n <p-floating-menu-container\n [class.inactive]=\"!selectedRows.length\"\n >\n <p-floating-menu-item\n hover={false}\n [class]=\"{\n hidden: !!floatingMenuContentTemplate,\n 'tablet:flex': !!floatingMenuContentTemplate\n }\"\n >\n {{ floatingMenuAmountSelectedText }}\n </p-floating-menu-item>\n <p-divider\n class=\"mx-0 text-storm\"\n variant=\"vertical\"\n [class]=\"{\n hidden: !!floatingMenuContentTemplate,\n 'tablet:flex': !!floatingMenuContentTemplate\n }\"\n />\n <ng-container *ngIf=\"floatingMenuContentTemplate\">\n <ng-container *ngTemplateOutlet=\"floatingMenuContentTemplate\"></ng-container>\n <p-divider\n class=\"mx-0 text-storm\"\n variant=\"vertical\"\n />\n </ng-container>\n <p-floating-menu-item\n (click)=\"_selectAllChange(null, false)\"\n >\n <p-icon variant=\"negative\" />\n </p-floating-menu-item>\n </p-floating-menu-container>\n </ng-container>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n <p-modal\n [header]=\"filterModalHeaderText\"\n [show]=\"filterModalShow$ | async\"\n (closed)=\"filterModalShow$.next(false)\"\n >\n <div slot=\"content\" class=\"flex flex-col gap-6\">\n <ng-container\n *ngTemplateOutlet=\"filterModalTemplate\"\n ></ng-container>\n </div>\n <div slot=\"footer\" class=\"flex w-full justify-between gap-4\">\n <p-button\n *ngIf=\"filterModalShowResetMobile\"\n class=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset(true)\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n *ngIf=\"filterModalShowReset\"\n class=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset()\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n class=\"ml-auto w-full tablet:w-auto\"\n icon=\"checkmark\"\n (onClick)=\"onFilterModalSave()\"\n >\n {{ filterModalSaveText }}\n </p-button>\n </div>\n </p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n <div\n *ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n >\n <p-illustration\n [variant]=\"emptyStateFilteredIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateFilteredHeader }}\n </p>\n <p class=\"mb-14 text-sm text-storm-medium\">\n {{ emptyStateFilteredContent }}\n </p>\n </div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n <div\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n [class.cursor-pointer]=\"enableEmptyStateAction\"\n (click)=\"emptyStateClicked()\"\n >\n <p-illustration\n [variant]=\"emptyStateIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateHeader }}\n </p>\n <p class=\"mb-6 text-sm text-storm-medium\">\n {{ emptyStateContent }}\n </p>\n <p-button\n *ngIf=\"enableEmptyStateAction\"\n variant=\"secondary\"\n icon=\"plus\"\n size=\"small\"\n >\n {{ emptyStateAction }}\n </p-button>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}:host .p-input[type=checkbox]{flex-shrink:0}:host p-table-container{position:relative}:host p-table-container p-floating-menu-container{position:fixed;bottom:1rem;left:50%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));animation:forwards floatingMenuContainerIn .3s ease!important}@media (min-width: 40rem){:host p-table-container p-floating-menu-container{position:absolute;bottom:4rem}}:host p-table-container p-floating-menu-container.inactive{animation:forwards floatingMenuContainerOut .3s ease!important}@keyframes floatingMenuContainerOut{0%{transform:translateY(0) translate(-50%);opacity:100}to{transform:translateY(100%) translate(-50%);opacity:0}}@keyframes floatingMenuContainerIn{0%{transform:translateY(100%) translate(-50%);opacity:0}to{transform:translateY(0) translate(-50%);opacity:100}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.PButton, selector: "p-button", inputs: ["chevron", "chevronPosition", "disabled", "href", "icon", "iconFlip", "iconOnly", "iconPosition", "iconRotate", "inheritText", "loading", "size", "target", "underline", "variant"] }, { kind: "component", type: i2.PDivider, selector: "p-divider", inputs: ["variant"] }, { kind: "component", type: i2.PFloatingMenuContainer, selector: "p-floating-menu-container", inputs: ["usedInTable"] }, { kind: "component", type: i2.PFloatingMenuItem, selector: "p-floating-menu-item", inputs: ["hover"] }, { kind: "component", type: i2.PIcon, selector: "p-icon", inputs: ["flip", "rotate", "size", "variant"] }, { kind: "component", type: i2.PIllustration, selector: "p-illustration", inputs: ["variant"] }, { kind: "component", type: i2.PLoader, selector: "p-loader", inputs: ["color", "modalDescription", "modalTitle", "show", "variant"] }, { kind: "component", type: i2.PModal, selector: "p-modal", inputs: ["applyBlur", "backdropClickClose", "header", "padding", "scrollLock", "show", "showClose", "showMobileFooter", "size", "variant"] }, { kind: "component", type: i2.PTableContainer, selector: "p-table-container" }, { kind: "component", type: i2.PTableFooter, selector: "p-table-footer", inputs: ["enableExport", "enablePageSize", "enablePagination", "hideOnSinglePage", "loading", "page", "pageSize", "pageSizeOptions", "total"] }, { kind: "component", type: i2.PTableHeader, selector: "p-table-header", inputs: ["actionButtonTemplate", "actionIcon", "actionLoading", "actionText", "activeQuickFilterIdentifier", "canUseAction", "enableAction", "enableFilter", "enableSearch", "filterButtonTemplate", "itemsSelectedAmount", "loading", "query", "quickFilters", "selectedFiltersAmount"] }, { kind: "component", type: i2.PTableRow, selector: "p-table-row", inputs: ["enableHover", "variant"] }, { kind: "component", type: i3.TableCell, selector: "p-table-cell-ngx", inputs: ["variant", "index", "rowIndex", "definition", "item", "value", "checkbox", "template"] }, { kind: "directive", type: i4.TableFooterDirective, selector: "p-table-footer" }, { kind: "directive", type: i5.TableHeaderDirective, selector: "p-table-header" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
527
437
|
Table = __decorate([
|
|
528
438
|
UntilDestroy({ checkProperties: true })
|
|
529
439
|
], Table);
|
|
530
440
|
export { Table };
|
|
531
441
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Table, decorators: [{
|
|
532
442
|
type: Component,
|
|
533
|
-
args: [{ selector: 'p-table-ngx', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-table-container>\n <p-table-header\n *ngIf=\"enableHeader\"\n [quickFilters]=\"quickFilters\"\n [activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n (quickFilter)=\"onQuickFilter($event)\"\n [enableSearch]=\"enableSearch\"\n [query]=\"query\"\n (queryChange)=\"onQueryChange($event)\"\n [enableFilter]=\"enableFilter\"\n [selectedFiltersAmount]=\"selectedFiltersAmount\"\n [filterButtonTemplate]=\"filterButtonTemplate\"\n (filter)=\"filterModalShow$.next(true)\"\n [enableEdit]=\"enableEdit\"\n [canEdit]=\"!!selectedRows.length\"\n [editButtonTemplate]=\"editButtonTemplate\"\n [editLoading]=\"editButtonLoading\"\n [editText]=\"editButtonText\"\n [editIcon]=\"editButtonIcon\"\n (edit)=\"edit.emit()\"\n [itemsSelectedAmount]=\"selectedRows.length\"\n [loading]=\"headerLoading\"\n >\n <ng-container *ngIf=\"headerCustomFilterTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerCustomFilterTemplate\"\n ></ng-container>\n </ng-container>\n </p-table-header>\n\n <p-table-row variant=\"header\">\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n [value]=\"col.name\"\n variant=\"header\"\n [index]=\"index\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"_selectAllChange($event)\"\n [checked]=\"_selectionContainsAll()\"\n [indeterminate]=\"_selectionIndeterminate()\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n\n <div class=\"flex flex-col\">\n <ng-container *ngIf=\"loading; else contentTemplate\">\n <p-table-row\n *ngFor=\"let r of loadingRows; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n >\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n variant=\"loading\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <p-loader\n variant=\"ghost\"\n class=\"h-6 w-6 rounded\"\n ></p-loader>\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"items?.length; else emptyStateTemplate\">\n <p-table-row\n *ngFor=\"let item of items; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n (click)=\"_rowClick($event, rowIndex)\"\n >\n <ng-container\n *ngFor=\"let col of columns; let index = index\"\n >\n <p-table-cell-ngx\n [definition]=\"col\"\n [item]=\"item\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n [template]=\"col.template\"\n ></p-table-cell-ngx>\n\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"\n _checkboxChange($event.target, rowIndex)\n \"\n [disabled]=\"_checkboxDisabled(item)\"\n [checked]=\"_selectionContains(item, rowIndex)\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n </ng-template>\n </div>\n\n <p-table-footer\n *ngIf=\"enableFooter\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [enablePageSize]=\"enablePageSize\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n [enablePagination]=\"enablePagination\"\n [page]=\"page\"\n [total]=\"total\"\n (pageChange)=\"onPageChange($event)\"\n [enableExport]=\"enableExport\"\n (export)=\"export.emit()\"\n [loading]=\"footerLoading\"\n ></p-table-footer>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n <p-modal\n [header]=\"filterModalHeaderText\"\n [show]=\"filterModalShow$ | async\"\n (closed)=\"filterModalShow$.next(false)\"\n >\n <div slot=\"content\" class=\"flex flex-col gap-6\">\n <ng-container\n *ngTemplateOutlet=\"filterModalTemplate\"\n ></ng-container>\n </div>\n <div slot=\"footer\" class=\"flex w-full justify-between gap-4\">\n <p-button\n *ngIf=\"filterModalShowResetMobile\"\n class=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset(true)\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n *ngIf=\"filterModalShowReset\"\n class=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset()\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n class=\"ml-auto w-full tablet:w-auto\"\n icon=\"checkmark\"\n (onClick)=\"onFilterModalSave()\"\n >\n {{ filterModalSaveText }}\n </p-button>\n </div>\n </p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n <div\n *ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n >\n <p-illustration\n [variant]=\"emptyStateFilteredIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateFilteredHeader }}\n </p>\n <p class=\"mb-14 text-sm text-storm-medium\">\n {{ emptyStateFilteredContent }}\n </p>\n </div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n <div\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n [class.cursor-pointer]=\"enableEmptyStateAction\"\n (click)=\"emptyStateClicked()\"\n >\n <p-illustration\n [variant]=\"emptyStateIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateHeader }}\n </p>\n <p class=\"mb-6 text-sm text-storm-medium\">\n {{ emptyStateContent }}\n </p>\n <p-button\n *ngIf=\"enableEmptyStateAction\"\n variant=\"secondary\"\n icon=\"plus\"\n size=\"small\"\n >\n {{ emptyStateAction }}\n </p-button>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}:host .p-input[type=checkbox]{flex-shrink:0}\n"] }]
|
|
534
|
-
}], ctorParameters: function () { return []; }, propDecorators: { items: [{
|
|
443
|
+
args: [{ selector: 'p-table-ngx', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-table-container>\n <p-table-header\n *ngIf=\"enableHeader\"\n [quickFilters]=\"quickFilters\"\n [activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n (quickFilter)=\"onQuickFilter($event)\"\n [enableSearch]=\"enableSearch\"\n [query]=\"query\"\n (queryChange)=\"onQueryChange($event)\"\n [enableFilter]=\"enableFilter\"\n [selectedFiltersAmount]=\"selectedFiltersAmount\"\n [filterButtonTemplate]=\"filterButtonTemplate\"\n (filter)=\"filterModalShow$.next(true)\"\n [enableAction]=\"enableAction\"\n [canUseAction]=\"actionButtonEnabled\"\n [actionButtonTemplate]=\"actionButtonTemplate\"\n [actionLoading]=\"actionButtonLoading\"\n [actionText]=\"actionButtonText\"\n [actionIcon]=\"actionButtonIcon\"\n (action)=\"action.emit()\"\n [itemsSelectedAmount]=\"selectedRows.length\"\n [loading]=\"headerLoading\"\n >\n <ng-container *ngIf=\"headerCustomFilterTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerCustomFilterTemplate\"\n ></ng-container>\n </ng-container>\n </p-table-header>\n\n <p-table-row variant=\"header\">\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n [value]=\"col.name\"\n variant=\"header\"\n [index]=\"index\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"_selectAllChange($event)\"\n [checked]=\"_selectionContainsAll()\"\n [indeterminate]=\"_selectionIndeterminate()\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n\n <div class=\"flex flex-col\">\n <ng-container *ngIf=\"loading; else contentTemplate\">\n <p-table-row\n *ngFor=\"let r of loadingRows; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n >\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n variant=\"loading\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <p-loader\n variant=\"ghost\"\n class=\"h-6 w-6 rounded\"\n ></p-loader>\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"items?.length; else emptyStateTemplate\">\n <p-table-row\n *ngFor=\"let item of items; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n (click)=\"_rowClick($event, rowIndex)\"\n >\n <ng-container\n *ngFor=\"let col of columns; let index = index\"\n >\n <p-table-cell-ngx\n [definition]=\"col\"\n [item]=\"item\"\n [checkbox]=\"\n (index === 0 || col.hasCheckbox) &&\n enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n [template]=\"col.template\"\n ></p-table-cell-ngx>\n\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"\n _checkboxChange($event.target, rowIndex)\n \"\n [disabled]=\"_checkboxDisabled(item)\"\n [checked]=\"_selectionContains(item, rowIndex)\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n </ng-template>\n </div>\n\n <p-table-footer\n *ngIf=\"enableFooter\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [enablePageSize]=\"enablePageSize\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n [enablePagination]=\"enablePagination\"\n [page]=\"page\"\n [total]=\"total\"\n (pageChange)=\"onPageChange($event)\"\n [enableExport]=\"enableExport\"\n (export)=\"export.emit()\"\n [loading]=\"footerLoading\"\n ></p-table-footer>\n\n <ng-container *ngIf=\"enableFloatingMenu\">\n <p-floating-menu-container\n [class.inactive]=\"!selectedRows.length\"\n >\n <p-floating-menu-item\n hover={false}\n [class]=\"{\n hidden: !!floatingMenuContentTemplate,\n 'tablet:flex': !!floatingMenuContentTemplate\n }\"\n >\n {{ floatingMenuAmountSelectedText }}\n </p-floating-menu-item>\n <p-divider\n class=\"mx-0 text-storm\"\n variant=\"vertical\"\n [class]=\"{\n hidden: !!floatingMenuContentTemplate,\n 'tablet:flex': !!floatingMenuContentTemplate\n }\"\n />\n <ng-container *ngIf=\"floatingMenuContentTemplate\">\n <ng-container *ngTemplateOutlet=\"floatingMenuContentTemplate\"></ng-container>\n <p-divider\n class=\"mx-0 text-storm\"\n variant=\"vertical\"\n />\n </ng-container>\n <p-floating-menu-item\n (click)=\"_selectAllChange(null, false)\"\n >\n <p-icon variant=\"negative\" />\n </p-floating-menu-item>\n </p-floating-menu-container>\n </ng-container>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n <p-modal\n [header]=\"filterModalHeaderText\"\n [show]=\"filterModalShow$ | async\"\n (closed)=\"filterModalShow$.next(false)\"\n >\n <div slot=\"content\" class=\"flex flex-col gap-6\">\n <ng-container\n *ngTemplateOutlet=\"filterModalTemplate\"\n ></ng-container>\n </div>\n <div slot=\"footer\" class=\"flex w-full justify-between gap-4\">\n <p-button\n *ngIf=\"filterModalShowResetMobile\"\n class=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset(true)\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n *ngIf=\"filterModalShowReset\"\n class=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset()\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n class=\"ml-auto w-full tablet:w-auto\"\n icon=\"checkmark\"\n (onClick)=\"onFilterModalSave()\"\n >\n {{ filterModalSaveText }}\n </p-button>\n </div>\n </p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n <div\n *ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n >\n <p-illustration\n [variant]=\"emptyStateFilteredIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateFilteredHeader }}\n </p>\n <p class=\"mb-14 text-sm text-storm-medium\">\n {{ emptyStateFilteredContent }}\n </p>\n </div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n <div\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n [class.cursor-pointer]=\"enableEmptyStateAction\"\n (click)=\"emptyStateClicked()\"\n >\n <p-illustration\n [variant]=\"emptyStateIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateHeader }}\n </p>\n <p class=\"mb-6 text-sm text-storm-medium\">\n {{ emptyStateContent }}\n </p>\n <p-button\n *ngIf=\"enableEmptyStateAction\"\n variant=\"secondary\"\n icon=\"plus\"\n size=\"small\"\n >\n {{ emptyStateAction }}\n </p-button>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}:host .p-input[type=checkbox]{flex-shrink:0}:host p-table-container{position:relative}:host p-table-container p-floating-menu-container{position:fixed;bottom:1rem;left:50%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));animation:forwards floatingMenuContainerIn .3s ease!important}@media (min-width: 40rem){:host p-table-container p-floating-menu-container{position:absolute;bottom:4rem}}:host p-table-container p-floating-menu-container.inactive{animation:forwards floatingMenuContainerOut .3s ease!important}@keyframes floatingMenuContainerOut{0%{transform:translateY(0) translate(-50%);opacity:100}to{transform:translateY(100%) translate(-50%);opacity:0}}@keyframes floatingMenuContainerIn{0%{transform:translateY(100%) translate(-50%);opacity:0}to{transform:translateY(0) translate(-50%);opacity:100}}\n"] }]
|
|
444
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { items: [{
|
|
535
445
|
type: Input
|
|
536
446
|
}], loading: [{
|
|
537
447
|
type: Input
|
|
@@ -553,6 +463,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
553
463
|
type: Input
|
|
554
464
|
}], canSelectKey: [{
|
|
555
465
|
type: Input
|
|
466
|
+
}], enableFloatingMenu: [{
|
|
467
|
+
type: Input
|
|
468
|
+
}], floatingMenuAmountSelectedText: [{
|
|
469
|
+
type: Input
|
|
470
|
+
}], floatingMenuAmountSelectedTemplate: [{
|
|
471
|
+
type: Input
|
|
472
|
+
}], floatingMenuContentTemplate: [{
|
|
473
|
+
type: ContentChild,
|
|
474
|
+
args: [TableFloatingMenuContentDirective, {
|
|
475
|
+
read: TemplateRef,
|
|
476
|
+
static: true,
|
|
477
|
+
}]
|
|
556
478
|
}], rowClick: [{
|
|
557
479
|
type: Output
|
|
558
480
|
}], rowSelected: [{
|
|
@@ -575,15 +497,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
575
497
|
type: Input
|
|
576
498
|
}], filterButtonTemplate: [{
|
|
577
499
|
type: Input
|
|
578
|
-
}],
|
|
500
|
+
}], enableAction: [{
|
|
501
|
+
type: Input
|
|
502
|
+
}], actionButtonLoading: [{
|
|
579
503
|
type: Input
|
|
580
|
-
}],
|
|
504
|
+
}], actionButtonIcon: [{
|
|
581
505
|
type: Input
|
|
582
|
-
}],
|
|
506
|
+
}], actionButtonEnabled: [{
|
|
583
507
|
type: Input
|
|
584
|
-
}],
|
|
508
|
+
}], actionButtonText: [{
|
|
585
509
|
type: Input
|
|
586
|
-
}],
|
|
510
|
+
}], actionButtonTemplate: [{
|
|
587
511
|
type: Input
|
|
588
512
|
}], quickFilter: [{
|
|
589
513
|
type: Output
|
|
@@ -591,7 +515,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
591
515
|
type: Output
|
|
592
516
|
}], filter: [{
|
|
593
517
|
type: Output
|
|
594
|
-
}],
|
|
518
|
+
}], action: [{
|
|
595
519
|
type: Output
|
|
596
520
|
}], enableFooter: [{
|
|
597
521
|
type: Input
|
|
@@ -680,4 +604,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
680
604
|
type: HostListener,
|
|
681
605
|
args: ['document:visibilitychange', ['$event']]
|
|
682
606
|
}] } });
|
|
683
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFwZXJsZXNzL3NyYy9saWIvbW9kdWxlcy90YWJsZS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcGVybGVzcy9zcmMvbGliL21vZHVsZXMvdGFibGUvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFNckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQ0gsMEJBQTBCLEVBQzFCLHlCQUF5QixHQUM1QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7O0FBU3ZELElBQU0sS0FBSyxHQUFYLE1BQU0sS0FBSztJQWtTZDtRQTVSQTs7V0FFRztRQUNNLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFbEM7O1dBRUc7UUFDTSxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUV4Qzs7V0FFRztRQUNNLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBRXhDOztXQUVHO1FBQ00sd0JBQW1CLEdBQVcsQ0FBQyxDQUFDO1FBRXpDOztXQUVHO1FBQ00sdUJBQWtCLEdB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LEVBQUUsV0FBVzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2Y7Z0JBS1EscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFtQ1AsT0FBTztzQkFETixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVU1QyxLQUFLO3NCQURKLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVTFDLGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLDJCQUEyQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgUXVpY2tGaWx0ZXIsIFJvd0NsaWNrRXZlbnQgfSBmcm9tICdAcGFwZXJsZXNzL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBJY29uVmFyaWFudCxcbiAgICBJbGx1c3RyYXRpb25WYXJpYW50LFxufSBmcm9tICdAcGFwZXJsZXNzL2NvcmUvZGlzdC90eXBlcy9jb21wb25lbnRzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsXG4gICAgVGFibGVGaWx0ZXJNb2RhbERpcmVjdGl2ZSxcbn0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4uL3RhYmxlLWNvbHVtbi90YWJsZS1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IGRlZmF1bHRTaXplLCBkZWZhdWx0U2l6ZU9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbkBVbnRpbERlc3Ryb3koeyBjaGVja1Byb3BlcnRpZXM6IHRydWUgfSlcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncC10YWJsZS1uZ3gnLFxuICAgIHRlbXBsYXRlVXJsOiAndGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWyd0YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgaXRlbXMgdG8gYmUgZmVkIHRvIHRoZSB0YWJsZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGl0ZW1zITogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIGRhdGEgaXMgbG9hZGluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0aGUgaGVhZGVyIHNob3VsZCBzaG93IGxvYWRpbmcgc3RhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBoZWFkZXJMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdGhlIGZvb3RlciBzaG91bGQgc2hvdyBsb2FkaW5nIHN0YXRlXG4gICAgICovXG4gICAgQElucHV0KCkgZm9vdGVyTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBsb2FkaW5nIHJvd3MgdG8gc2hvd1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGFtb3VudE9mTG9hZGluZ1Jvd3M6IG51bWJlciA9IDY7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gZW5hYmxlIHNlbGVjdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZVJvd1NlbGVjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gZW5hYmxlIHJvdyBjbGlja2luZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZVJvd0NsaWNrOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHNlbGVjdGlvbiBvZiBpdGVtc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkUm93czogYW55W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW5ldmVyIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpIHNlbGVjdGVkUm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUga2V5IHRvIGRldGVybWluZSBpZiBhIHJvdyBpcyBzZWxlY3RlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNlbGVjdGlvbktleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogQSBrZXkgdG8gZGV0ZXJtaW5lIGlmIGEgcm93IGNhbiBiZSBzZWxlY3RlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGNhblNlbGVjdEtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbmV2ZXIgYSByb3cgaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSByb3dDbGljazogRXZlbnRFbWl0dGVyPFJvd0NsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbmV2ZXIgYSByb3cgaXMgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcm93U2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbmV2ZXIgYSByb3cgaXMgZGVzZWxlY3RlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSByb3dEZXNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKiBTVEFSVCBIRUFERVIgKi9cblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBzaG93IHRoZSBoZWFkZXJcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogUXVpY2sgZmlsdGVycyB0byBzaG93XG4gICAgICovXG4gICAgQElucHV0KCkgcXVpY2tGaWx0ZXJzOiBRdWlja0ZpbHRlcltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBY3RpdmUgcXVpY2sgZmlsdGVyIGlkZW50aWZpZXJcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhY3RpdmVRdWlja0ZpbHRlcklkZW50aWZpZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBzaG93IHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHF1ZXJ5IHRvIHNob3cgaW4gdGhlIHNlYXJjaCBiYXJcbiAgICAgKi9cbiAgICBASW5wdXQoKSBxdWVyeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIHNob3cgdGhlIGZpbHRlciBidXR0b25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFtb3VudCBvZiBmaWx0ZXJzIGJlaW5nIHNlbGVjdGVkXG4gICAgICovXG4gICAgQElucHV0KCkgc2VsZWN0ZWRGaWx0ZXJzQW1vdW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGVtcGxhdGUgZm9yIHRoZSBmaWx0ZXIgYnV0dG9uIHRleHRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWx0ZXJCdXR0b25UZW1wbGF0ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIHNob3cgdGhlIGVkaXQgYnV0dG9uXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlRWRpdDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdGhlIGVkaXQgYnV0dG9uIGlzIGxvYWRpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlZGl0QnV0dG9uTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVkaXQgYnV0dG9uIGljb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlZGl0QnV0dG9uSWNvbjogSWNvblZhcmlhbnQgPSAncGVuY2lsJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBlZGl0IGJ1dHRvbiB0ZXh0IGlmIGNoYW5nZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlZGl0QnV0dG9uVGV4dD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGVkaXQgYnV0dG9uIHRleHRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlZGl0QnV0dG9uVGVtcGxhdGU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW4gb25lIG9mIHRoZSBxdWljayBmaWx0ZXJzIGlzIGNsaWNrZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcXVpY2tGaWx0ZXI6IEV2ZW50RW1pdHRlcjxRdWlja0ZpbHRlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuIHRoZSBxdWVyeSBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpIHF1ZXJ5Q2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW4gdGhlIGZpbHRlciBidXR0b24gaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBmaWx0ZXI6IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW4gdGhlIGVkaXQgYnV0dG9uIGlzIGNsaWNrZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgZWRpdDogRXZlbnRFbWl0dGVyPG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIFNUQVJUIEZPT1RFUiAqL1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIHNob3cgdGhlIGZvb3RlclxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZUZvb3RlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gZW5hYmxlIHBhZ2Ugc2l6ZSBzZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVQYWdlU2l6ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gZW5hYmxlIHBhZ2luYXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVQYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBlbmFibGUgZXhwb3J0XG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlRXhwb3J0OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHBhZ2VcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwYWdlOiBudW1iZXIgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIGFtb3VudCBvZiBpdGVtc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRvdGFsITogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbmV2ZXIgdGhlIHBhZ2UgY2hhbmdlc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2YgaXRlbXMgcGVyIHBhZ2VcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyID0gZGVmYXVsdFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBmb3IgdGhlIHBhZ2Ugc2l6ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBkZWZhdWx0U2l6ZU9wdGlvbnM7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciB0aGUgcGFnZSBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpIHBhZ2VTaXplQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW5ldmVyIHRoZSBwYWdlIGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgZXhwb3J0OiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBoaWRlIHdoZW4gdGhlcmUgaXMgb25seSAxIHBhZ2UgYXZhaWxhYmxlXG4gICAgICovXG4gICAgQElucHV0KCkgaGlkZU9uU2luZ2xlUGFnZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiBFbXB0eSBzdGF0ZSBzdGFydCAqL1xuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVUeXBlOiAnbm9fZmlsdGVyJyB8ICdmaWx0ZXJlZCcgPSAnbm9fZmlsdGVyJztcblxuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVJbGx1c3RyYXRpb246IElsbHVzdHJhdGlvblZhcmlhbnQgPSAnZW1wdHktc3RhdGUtYWRkJztcbiAgICBASW5wdXQoKSBlbXB0eVN0YXRlSGVhZGVyITogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVDb250ZW50ITogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVBY3Rpb24hOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBlbmFibGVFbXB0eVN0YXRlQWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVGaWx0ZXJlZElsbHVzdHJhdGlvbjogSWxsdXN0cmF0aW9uVmFyaWFudCA9XG4gICAgICAgICdlbXB0eS1zdGF0ZS1zZWFyY2gnO1xuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVGaWx0ZXJlZEhlYWRlciE6IHN0cmluZztcbiAgICBASW5wdXQoKSBlbXB0eVN0YXRlRmlsdGVyZWRDb250ZW50ITogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbmV2ZXIgdGhlIGVtcHR5IHN0YXRlIGlzIGNsaWNrZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgZW1wdHlTdGF0ZUFjdGlvbkNsaWNrOiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiBFbXB0eSBzdGF0ZSBlbmQgKi9cblxuICAgIHB1YmxpYyBjb2x1bW5zOiBhbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBwYXJzZWRJdGVtczogYW55W10gPSBbXTtcbiAgICBwdWJsaWMgbG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcbiAgICAgICAgbGVuZ3RoOiB0aGlzLmFtb3VudE9mTG9hZGluZ1Jvd3MsXG4gICAgfSk7XG4gICAgcHJpdmF0ZSBfY3RybERvd24gPSBmYWxzZTtcblxuICAgIC8vIEFuZ3VsYXIgc3R1ZmZcbiAgICAvLyBjdXN0b20gZmlsdGVyIHRlbXBsYXRlXG4gICAgQENvbnRlbnRDaGlsZChUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSwge1xuICAgICAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICAgICAgc3RhdGljOiB0cnVlLFxuICAgIH0pXG4gICAgcHVibGljIGhlYWRlckN1c3RvbUZpbHRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gY29sdW1uIHRlbXBsYXRlc1xuICAgIHByaXZhdGUgX2NvbHVtbkRlZmluaXRpb25zITogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oVGFibGVDb2x1bW4pXG4gICAgc2V0IGNvbHVtbkRlZmluaXRpb25zKHY6IFF1ZXJ5TGlzdDxUYWJsZUNvbHVtbj4pIHtcbiAgICAgICAgdGhpcy5fY29sdW1uRGVmaW5pdGlvbnMgPSB2O1xuICAgICAgICB0aGlzLl9nZW5lcmF0ZUNvbHVtbnMoKTtcbiAgICB9XG4gICAgZ2V0IGNvbHVtbkRlZmluaXRpb25zKCk6IFF1ZXJ5TGlzdDxUYWJsZUNvbHVtbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uRGVmaW5pdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIG1vZGFsXG4gICAgQENvbnRlbnRDaGlsZChUYWJsZUZpbHRlck1vZGFsRGlyZWN0aXZlLCB7XG4gICAgICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgICAgICBzdGF0aWM6IHRydWUsXG4gICAgfSlcbiAgICBwdWJsaWMgZmlsdGVyTW9kYWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBmaWx0ZXJNb2RhbFNob3ckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICBASW5wdXQoKSBmaWx0ZXJNb2RhbEhlYWRlclRleHQ6IHN0cmluZyA9ICdGaWx0ZXJzJztcbiAgICBASW5wdXQoKSBmaWx0ZXJNb2RhbFNhdmVUZXh0OiBzdHJpbmcgPSAnU2F2ZSc7XG4gICAgQElucHV0KCkgZmlsdGVyTW9kYWxDYW5jZWxUZXh0OiBzdHJpbmcgPSAnQ2FuY2VsJztcbiAgICBASW5wdXQoKSBmaWx0ZXJNb2RhbFJlc2V0VGV4dDogc3RyaW5nID0gJ1Jlc2V0IGZpbHRlcnMnO1xuXG4gICAgQElucHV0KCkgZmlsdGVyTW9kYWxTaG93UmVzZXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBmaWx0ZXJNb2RhbFNob3dSZXNldE1vYmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIGZpbHRlck1vZGFsU2hvdzogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBmaWx0ZXJNb2RhbFNhdmU6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgZmlsdGVyTW9kYWxSZXNldDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuX3BhcnNlSXRlbXModGhpcy5pdGVtcyk7XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nUm93cyA9IEFycmF5LmZyb20oe1xuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmFtb3VudE9mTG9hZGluZ1Jvd3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmlsdGVyTW9kYWxTaG93JFxuICAgICAgICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcyksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5maWx0ZXJNb2RhbFNob3cubmV4dCh2YWx1ZSkpO1xuICAgICAgICAvLyB0aGlzLl9nZW5lcmF0ZUNvbHVtbnMoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzWydpdGVtcyddKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJzZUl0ZW1zKGNoYW5nZXNbJ2l0ZW1zJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydhbW91bnRPZkxvYWRpbmdSb3dzJ10pIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcbiAgICAgICAgICAgICAgICBsZW5ndGg6IGNoYW5nZXNbJ2Ftb3VudE9mTG9hZGluZ1Jvd3MnXS5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vICBASG9zdExpc3RlbmVyKCdib2R5OnRhYmxlRGVmaW5pdGlvbkNoYW5nZWQnLCB7IHRhcmdldDogJ2JvZHknIH0pXG4gICAgLy8gIG9uVGFibGVEZWZpbml0aW9uVXBkYXRlZCgpIHtcbiAgICAvLyAgICAgIHRoaXMuX2dlbmVyYXRlQ29sdW1ucygpO1xuICAgIC8vICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBrZXlEb3duKHsga2V5IH06IHsga2V5OiBzdHJpbmcgfSkge1xuICAgICAgICBpZiAoa2V5ICE9PSAnQ29udHJvbCcgfHwgdGhpcy5fY3RybERvd24gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N0cmxEb3duID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cCcsIFsnJGV2ZW50J10pXG4gICAga2V5VXAoeyBrZXkgfTogeyBrZXk6IHN0cmluZyB9KSB7XG4gICAgICAgIGlmIChrZXkgIT09ICdDb250cm9sJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N0cmxEb3duID0gZmFsc2U7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6dmlzaWJpbGl0eWNoYW5nZScsIFsnJGV2ZW50J10pXG4gICAgdmlzaWJpbGl0eUNoYW5nZSgpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbicgfHwgdGhpcy5fY3RybERvd24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdHJsRG93biA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uUXVlcnlDaGFuZ2UoeyBkZXRhaWwgfTogYW55KSB7XG4gICAgICAgIHRoaXMucXVlcnlDaGFuZ2UuZW1pdChkZXRhaWwpO1xuICAgIH1cblxuICAgIG9uUXVpY2tGaWx0ZXIoeyBkZXRhaWwgfTogYW55KSB7XG4gICAgICAgIHRoaXMucXVpY2tGaWx0ZXIuZW1pdChkZXRhaWwpO1xuICAgIH1cblxuICAgIG9uUGFnZVNpemVDaGFuZ2UoeyBkZXRhaWwgfTogYW55KSB7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBkZXRhaWw7XG4gICAgICAgIHRoaXMucGFnZVNpemVDaGFuZ2UuZW1pdChkZXRhaWwpO1xuICAgIH1cblxuICAgIG9uUGFnZUNoYW5nZSh7IGRldGFpbCB9OiBhbnkpIHtcbiAgICAgICAgdGhpcy5wYWdlID0gZGV0YWlsO1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdChkZXRhaWwpO1xuICAgIH1cblxuICAgIG9uRmlsdGVyTW9kYWxTYXZlKCkge1xuICAgICAgICB0aGlzLmZpbHRlck1vZGFsU2F2ZS5uZXh0KCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBvbkZpbHRlck1vZGFsUmVzZXQocmVzZXRRdWlja0ZpbHRlciA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyTW9kYWxSZXNldC5uZXh0KHJlc2V0UXVpY2tGaWx0ZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1vZGFsU2hvdyQubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgZW1wdHlTdGF0ZUNsaWNrZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVFbXB0eVN0YXRlQWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVtcHR5U3RhdGVBY3Rpb25DbGljay5lbWl0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFyc2VJdGVtcyhpdGVtczogc3RyaW5nKSB7XG4gICAgICAgIGlmICghaXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFyc2VkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgdGhpcy5wYXJzZWRJdGVtcyA9IGl0ZW1zO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYXJzZWRJdGVtcyA9IEpTT04ucGFyc2UoaXRlbXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dlbmVyYXRlQ29sdW1ucygpIHtcbiAgICAgICAgLy8gY29uc3QgZGVmaW5pdGlvbnMgPVxuICAgICAgICAvLyBcdHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgncC10YWJsZS1kZWZpbml0aW9uJyk7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb25zQXJyYXkgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgdGhpcy5fY29sdW1uRGVmaW5pdGlvbnNcbiAgICAgICAgKSBhcyBUYWJsZUNvbHVtbltdO1xuICAgICAgICBkZWZpbml0aW9uc0FycmF5W2RlZmluaXRpb25zQXJyYXkubGVuZ3RoIC0gMV0uaXNMYXN0ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmNvbHVtbnMgPSBkZWZpbml0aW9uc0FycmF5O1xuICAgIH1cblxuICAgIC8vICBwcml2YXRlIF9nZXRIZWFkZXIoKSB7XG4gICAgLy8gICAgICByZXR1cm4gKFxuICAgIC8vICAgICAgICAgIDxwLXRhYmxlLXJvdyB2YXJpYW50PVwiaGVhZGVyXCI+XG4gICAgLy8gICAgICAgICAgICAgIHt0aGlzLl9jb2x1bW5zLm1hcCgoY29sOiBUYWJsZURlZmluaXRpb24sIGluZGV4KSA9PiAoXG4gICAgLy8gICAgICAgICAgICAgICAgICA8cC10YWJsZS1jb2x1bW5cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uPXtjb2x9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvbC5uYW1lfVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJoZWFkZXJcIlxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94PXt0aGlzLl9nZXRDaGVja2JveChpbmRleCwgbnVsbCwgJ2hlYWRlcicpfVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAvLyAgICAgICAgICAgICAgICAgID48L3AtdGFibGUtY29sdW1uPlxuICAgIC8vICAgICAgICAgICAgICApKX1cbiAgICAvLyAgICAgICAgICA8L3AtdGFibGUtcm93PlxuICAgIC8vICAgICAgKTtcbiAgICAvLyAgfVxuXG4gICAgLy8gIHByaXZhdGUgX2dldFJvd3MoKSB7XG4gICAgLy8gICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgLy8gICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgLy8gICAgICAgICAgICAgIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgIGxlbmd0aDogdGhpcy5hbW91bnRPZkxvYWRpbmdSb3dzLFxuICAgIC8vICAgICAgICAgICAgICB9LFxuICAgIC8vICAgICAgICAgICAgICAoXywgaSkgPT4gKFxuICAgIC8vICAgICAgICAgICAgICAgICAgPHAtdGFibGUtcm93XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgZW5hYmxlSG92ZXI9e1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbiB8fCB0aGlzLmVuYWJsZVJvd0NsaWNrXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgPlxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLl9nZXRMb2FkaW5nQ29sdW1ucyhpKX1cbiAgICAvLyAgICAgICAgICAgICAgICAgIDwvcC10YWJsZS1yb3c+XG4gICAgLy8gICAgICAgICAgICAgIClcbiAgICAvLyAgICAgICAgICApO1xuICAgIC8vICAgICAgfVxuXG4gICAgLy8gICAgICByZXR1cm4gdGhpcy5faXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4gKFxuICAgIC8vICAgICAgICAgIDxwLXRhYmxlLXJvd1xuICAgIC8vICAgICAgICAgICAgICBlbmFibGVIb3Zlcj17dGhpcy5lbmFibGVSb3dTZWxlY3Rpb24gfHwgdGhpcy5lbmFibGVSb3dDbGlja31cbiAgICAvLyAgICAgICAgICAgICAgb25DbGljaz17KGV2KSA9PiB0aGlzLl9yb3dDbGljayhldiwgaW5kZXgpfVxuICAgIC8vICAgICAgICAgID5cbiAgICAvLyAgICAgICAgICAgICAge3RoaXMuX2dldFJvd0NvbHVtbnMoaXRlbSwgaW5kZXgpfVxuICAgIC8vICAgICAgICAgIDwvcC10YWJsZS1yb3c+XG4gICAgLy8gICAgICApKTtcbiAgICAvLyAgfVxuXG4gICAgLy8gIHByaXZhdGUgX2dldFJvd0NvbHVtbnMoaXRlbSwgaW5kZXgpIHtcbiAgICAvLyAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zLm1hcCgoY29sOiBUYWJsZURlZmluaXRpb24sIGNvbEluZGV4KSA9PiB7XG4gICAgLy8gICAgICAgICAgcmV0dXJuIChcbiAgICAvLyAgICAgICAgICAgICAgPHAtdGFibGUtY29sdW1uXG4gICAgLy8gICAgICAgICAgICAgICAgICBkZWZpbml0aW9uPXtjb2x9XG4gICAgLy8gICAgICAgICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgIC8vICAgICAgICAgICAgICAgICAgY2hlY2tib3g9e3RoaXMuX2dldENoZWNrYm94KGNvbEluZGV4LCBpbmRleCl9XG4gICAgLy8gICAgICAgICAgICAgICAgICBpbmRleD17Y29sSW5kZXh9XG4gICAgLy8gICAgICAgICAgICAgICAgICByb3dJbmRleD17aW5kZXh9XG4gICAgLy8gICAgICAgICAgICAgID48L3AtdGFibGUtY29sdW1uPlxuICAgIC8vICAgICAgICAgICk7XG4gICAgLy8gICAgICB9KTtcbiAgICAvLyAgfVxuXG4gICAgLy8gIHByaXZhdGUgX2dldExvYWRpbmdDb2x1bW5zKGluZGV4KSB7XG4gICAgLy8gICAgICByZXR1cm4gdGhpcy5fY29sdW1ucy5tYXAoKGNvbDogVGFibGVEZWZpbml0aW9uLCBjb2xJbmRleCkgPT4ge1xuICAgIC8vICAgICAgICAgIHJldHVybiAoXG4gICAgLy8gICAgICAgICAgICAgIDxwLXRhYmxlLWNvbHVtblxuICAgIC8vICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbj17Y29sfVxuICAgIC8vICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImxvYWRpbmdcIlxuICAgIC8vICAgICAgICAgICAgICAgICAgY2hlY2tib3g9e3RoaXMuX2dldENoZWNrYm94KGNvbEluZGV4LCBpbmRleCwgJ2xvYWRpbmcnKX1cbiAgICAvLyAgICAgICAgICAgICAgICAgIGluZGV4PXtjb2xJbmRleH1cbiAgICAvLyAgICAgICAgICAgICAgICAgIHJvd0luZGV4PXtpbmRleH1cbiAgICAvLyAgICAgICAgICAgICAgPjwvcC10YWJsZS1jb2x1bW4+XG4gICAgLy8gICAgICAgICAgKTtcbiAgICAvLyAgICAgIH0pO1xuICAgIC8vICB9XG5cbiAgICAvLyAgcHJpdmF0ZSBfZ2V0Q2hlY2tib3goXG4gICAgLy8gICAgICBpbmRleCxcbiAgICAvLyAgICAgIHJvd0luZGV4LFxuICAgIC8vICAgICAgdmFyaWFudDogJ2hlYWRlcicgfCAnZGVmYXVsdCcgfCAnbG9hZGluZycgPSAnZGVmYXVsdCdcbiAgICAvLyAgKSB7XG4gICAgLy8gICAgICBpZiAoIXRoaXMuZW5hYmxlUm93U2VsZWN0aW9uIHx8ICF0aGlzLnNlbGVjdGlvbktleSB8fCBpbmRleCAhPT0gMCkge1xuICAgIC8vICAgICAgICAgIHJldHVybjtcbiAgICAvLyAgICAgIH1cblxuICAgIC8vICAgICAgaWYgKHZhcmlhbnQgPT09ICdsb2FkaW5nJykge1xuICAgIC8vICAgICAgICAgIHJldHVybiA8cC1sb2FkZXIgdmFyaWFudD1cImdob3N0XCIgY2xhc3M9XCJyb3VuZGVkIHctNiBoLTZcIiAvPjtcbiAgICAvLyAgICAgIH1cblxuICAgIC8vICAgICAgaWYgKHZhcmlhbnQgPT09ICdoZWFkZXInKSB7XG4gICAgLy8gICAgICAgICAgcmV0dXJuIChcbiAgICAvLyAgICAgICAgICAgICAgPGlucHV0XG4gICAgLy8gICAgICAgICAgICAgICAgICBjbGFzcz1cInAtaW5wdXRcIlxuICAgIC8vICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAvLyAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXYpID0+IHRoaXMuX3NlbGVjdEFsbENoYW5nZShldil9XG4gICAgLy8gICAgICAgICAgICAgICAgICBjaGVja2VkPXt0aGlzLl9zZWxlY3Rpb25Db250YWluc0FsbCgpfVxuICAgIC8vICAgICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZT17dGhpcy5fc2VsZWN0aW9uSW5kZXRlcm1pbmF0ZSgpfVxuICAgIC8vICAgICAgICAgICAgICAvPlxuICAgIC8vICAgICAgICAgICk7XG4gICAgLy8gICAgICB9XG5cbiAgICAvLyAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9pdGVtc1tyb3dJbmRleF07XG5cbiAgICAvLyAgICAgIHJldHVybiAoXG4gICAgLy8gICAgICAgICAgPGlucHV0XG4gICAgLy8gICAgICAgICAgICAgIGNsYXNzPVwicC1pbnB1dFwiXG4gICAgLy8gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgLy8gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXYpID0+IHRoaXMuX2NoZWNrYm94Q2hhbmdlKGV2Py50YXJnZXQsIHJvd0luZGV4KX1cbiAgICAvLyAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuY2FuU2VsZWN0S2V5ICYmICFpdGVtW3RoaXMuY2FuU2VsZWN0S2V5XX1cbiAgICAvLyAgICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5fc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgcm93SW5kZXgpfVxuICAgIC8vICAgICAgICAgIC8+XG4gICAgLy8gICAgICApO1xuICAgIC8vICB9XG5cbiAgICBwdWJsaWMgX2NoZWNrYm94RGlzYWJsZWQoaXRlbTogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhblNlbGVjdEtleSAmJiAhaXRlbVt0aGlzLmNhblNlbGVjdEtleV07XG4gICAgfVxuXG4gICAgcHVibGljIF9zZWxlY3RBbGxDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRDaGVja2VkVmFsdWUoJGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdG9BZGQgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJzZWRJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMucGFyc2VkSXRlbXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuU2VsZWN0S2V5ICYmICFyb3dbdGhpcy5jYW5TZWxlY3RLZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3Rpb25Db250YWlucyhyb3csIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvQWRkLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQocm93KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIC4uLnRvQWRkXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGVkUm93c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMucGFyc2VkSXRlbXMuZmluZChcbiAgICAgICAgICAgICAgICAoZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0U2VsZWN0aW9uVmFsdWUoZCwgaSkgPT09XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKHZhbHVlLCBpKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3dEZXNlbGVjdGVkLmVtaXQocm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBfY2hlY2tib3hDaGFuZ2UodGFyZ2V0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5wYXJzZWRJdGVtc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHRoaXMuY2FuU2VsZWN0S2V5ICYmICFyb3dbdGhpcy5jYW5TZWxlY3RLZXldKSB7XG4gICAgICAgICAgICB0YXJnZXQuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRDaGVja2VkVmFsdWUodGFyZ2V0KTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cyA9IFsuLi50aGlzLnNlbGVjdGVkUm93cywgcm93XTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgICAgICAgICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KHJvdyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleE9mVG9SZW1vdmUgPSB0aGlzLl9zZWxlY3Rpb25Db250YWlucyhyb3csIGluZGV4LCB0cnVlKTtcblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMsIGJlY2F1c2Ugc3BsaWNlIGRvZXMgbm90IHRyaWdnZXIgdGhlIHNlbGVjdGlvbiBzZXR0ZXIuXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGVkUm93c107XG4gICAgICAgIHNlbGVjdGlvbi5zcGxpY2UoaW5kZXhPZlRvUmVtb3ZlLCAxKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBzZWxlY3Rpb247XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgICAgICB0aGlzLnJvd0Rlc2VsZWN0ZWQuZW1pdChyb3cpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldENoZWNrZWRWYWx1ZSh0YXJnZXQ6IGFueSkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0Py5jaGVja2VkO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFNlbGVjdGlvblZhbHVlKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbktleSA/IHJvdz8uW3RoaXMuc2VsZWN0aW9uS2V5XSB8fCBpbmRleCA6IGluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBfc2VsZWN0aW9uQ29udGFpbnMoXG4gICAgICAgIHJvdzogYW55LFxuICAgICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgICByZXR1cm5JbmRleCA9IGZhbHNlXG4gICAgKTogYW55IHtcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSB0aGlzLnNlbGVjdGVkUm93cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZShyb3csIGluZGV4KSA9PT1cbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZShpdGVtLCBpbmRleClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuICFyZXR1cm5JbmRleCA/IHJldHVyblZhbHVlID49IDAgOiByZXR1cm5WYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX3NlbGVjdGlvbkNvbnRhaW5zQWxsKCkge1xuICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhcnNlZEl0ZW1zPy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbaV07XG4gICAgICAgICAgICBjb25zdCBjb250YWlucyA9IHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIGkpO1xuXG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX3NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoIHx8ICF0aGlzLnNlbGVjdGVkUm93cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29udGFpbnNDb3VudCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2ldO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbnMgPSB0aGlzLl9zZWxlY3Rpb25Db250YWlucyhpdGVtLCBpKTtcblxuICAgICAgICAgICAgaWYgKGNvbnRhaW5zKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbnNDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zQ291bnQgPiAwICYmIGNvbnRhaW5zQ291bnQgIT09IHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyBfcm93Q2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9ICRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyB8fFxuICAgICAgICAgICAgKHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS50eXBlID09PSAnY2hlY2tib3gnXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fZmluZFJvdyh0YXJnZXQpO1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9maW5kUm93QWN0aW9uKHRhcmdldCk7XG5cbiAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlUm93Q2xpY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2luZGV4XTtcbiAgICAgICAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7XG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBjdHJsRG93bjogdGhpcy5fY3RybERvd24sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoZWNrYm94ID0gcm93Py5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcblxuICAgICAgICBpZiAoIWNoZWNrYm94KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGVja2JveC5jaGVja2VkID0gIWNoZWNrYm94LmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuX2NoZWNrYm94Q2hhbmdlKGNoZWNrYm94LCBpbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmluZFJvdyhlbDogSFRNTEVsZW1lbnQgfCBudWxsKTogYW55IHtcbiAgICAgICAgaWYgKCFlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsPy50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAncC10YWJsZS1yb3cnKSB7XG4gICAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZFJvdyhlbD8ucGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmluZFJvd0FjdGlvbihlbDogSFRNTEVsZW1lbnQgfCBudWxsKTogYW55IHtcbiAgICAgICAgaWYgKCFlbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtYWN0aW9uJykgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pcy1hY3Rpb24nKSAhPT0gJ2ZhbHNlJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3AtdGFibGUtcm93Jykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZFJvd0FjdGlvbihlbD8ucGFyZW50RWxlbWVudCk7XG4gICAgfVxufVxuIiwiPHAtdGFibGUtY29udGFpbmVyPlxuICAgIDxwLXRhYmxlLWhlYWRlclxuICAgICAgICAqbmdJZj1cImVuYWJsZUhlYWRlclwiXG4gICAgICAgIFtxdWlja0ZpbHRlcnNdPVwicXVpY2tGaWx0ZXJzXCJcbiAgICAgICAgW2FjdGl2ZVF1aWNrRmlsdGVySWRlbnRpZmllcl09XCJhY3RpdmVRdWlja0ZpbHRlcklkZW50aWZpZXJcIlxuICAgICAgICAocXVpY2tGaWx0ZXIpPVwib25RdWlja0ZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgW2VuYWJsZVNlYXJjaF09XCJlbmFibGVTZWFyY2hcIlxuICAgICAgICBbcXVlcnldPVwicXVlcnlcIlxuICAgICAgICAocXVlcnlDaGFuZ2UpPVwib25RdWVyeUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2VuYWJsZUZpbHRlcl09XCJlbmFibGVGaWx0ZXJcIlxuICAgICAgICBbc2VsZWN0ZWRGaWx0ZXJzQW1vdW50XT1cInNlbGVjdGVkRmlsdGVyc0Ftb3VudFwiXG4gICAgICAgIFtmaWx0ZXJCdXR0b25UZW1wbGF0ZV09XCJmaWx0ZXJCdXR0b25UZW1wbGF0ZVwiXG4gICAgICAgIChmaWx0ZXIpPVwiZmlsdGVyTW9kYWxTaG93JC5uZXh0KHRydWUpXCJcbiAgICAgICAgW2VuYWJsZUVkaXRdPVwiZW5hYmxlRWRpdFwiXG4gICAgICAgIFtjYW5FZGl0XT1cIiEhc2VsZWN0ZWRSb3dzLmxlbmd0aFwiXG4gICAgICAgIFtlZGl0QnV0dG9uVGVtcGxhdGVdPVwiZWRpdEJ1dHRvblRlbXBsYXRlXCJcbiAgICAgICAgW2VkaXRMb2FkaW5nXT1cImVkaXRCdXR0b25Mb2FkaW5nXCJcbiAgICAgICAgW2VkaXRUZXh0XT1cImVkaXRCdXR0b25UZXh0XCJcbiAgICAgICAgW2VkaXRJY29uXT1cImVkaXRCdXR0b25JY29uXCJcbiAgICAgICAgKGVkaXQpPVwiZWRpdC5lbWl0KClcIlxuICAgICAgICBbaXRlbXNTZWxlY3RlZEFtb3VudF09XCJzZWxlY3RlZFJvd3MubGVuZ3RoXCJcbiAgICAgICAgW2xvYWRpbmddPVwiaGVhZGVyTG9hZGluZ1wiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyQ3VzdG9tRmlsdGVyVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlckN1c3RvbUZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9wLXRhYmxlLWhlYWRlcj5cblxuICAgIDxwLXRhYmxlLXJvdyB2YXJpYW50PVwiaGVhZGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgPHAtdGFibGUtY2VsbC1uZ3hcbiAgICAgICAgICAgICAgICBbZGVmaW5pdGlvbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjb2wubmFtZVwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImhlYWRlclwiXG4gICAgICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICBbY2hlY2tib3hdPVwiXG4gICAgICAgICAgICAgICAgICAgIChpbmRleCA9PT0gMCB8fCBjb2wuaGFzQ2hlY2tib3gpICYmIGVuYWJsZVJvd1NlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjaGVja2JveFRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9wLXRhYmxlLWNlbGwtbmd4PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja2JveFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIl9zZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIl9zZWxlY3Rpb25Db250YWluc0FsbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiX3NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvcC10YWJsZS1yb3c+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZzsgZWxzZSBjb250ZW50VGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxwLXRhYmxlLXJvd1xuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByIG9mIGxvYWRpbmdSb3dzOyBsZXQgcm93SW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgW2VuYWJsZUhvdmVyXT1cImVuYWJsZVJvd1NlbGVjdGlvbiB8fCBlbmFibGVSb3dDbGlja1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwLXRhYmxlLWNlbGwtbmd4XG4gICAgICAgICAgICAgICAgICAgICAgICBbZGVmaW5pdGlvbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrYm94XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRleCA9PT0gMCB8fCBjb2wuaGFzQ2hlY2tib3gpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlUm93U2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY2hlY2tib3hUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcm93SW5kZXhdPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICA+PC9wLXRhYmxlLWNlbGwtbmd4PlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1sb2FkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC02IHctNiByb3VuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3AtbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9wLXRhYmxlLXJvdz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aDsgZWxzZSBlbXB0eVN0YXRlVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8cC10YWJsZS1yb3dcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGxldCByb3dJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2VuYWJsZUhvdmVyXT1cImVuYWJsZVJvd1NlbGVjdGlvbiB8fCBlbmFibGVSb3dDbGlja1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfcm93Q2xpY2soJGV2ZW50LCByb3dJbmRleClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zOyBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRhYmxlLWNlbGwtbmd4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmluaXRpb25dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tib3hdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRleCA9PT0gMCB8fCBjb2wuaGFzQ2hlY2tib3gpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVJvd1NlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjaGVja2JveFRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93SW5kZXhdPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJjb2wudGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcC10YWJsZS1jZWxsLW5neD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja2JveFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NoZWNrYm94Q2hhbmdlKCRldmVudC50YXJnZXQsIHJvd0luZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2NoZWNrYm94RGlzYWJsZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJfc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9wLXRhYmxlLXJvdz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPHAtdGFibGUtZm9vdGVyXG4gICAgICAgICpuZ0lmPVwiZW5hYmxlRm9vdGVyXCJcbiAgICAgICAgW2hpZGVPblNpbmdsZVBhZ2VdPVwiaGlkZU9uU2luZ2xlUGFnZVwiXG4gICAgICAgIFtlbmFibGVQYWdlU2l6ZV09XCJlbmFibGVQYWdlU2l6ZVwiXG4gICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtlbmFibGVQYWdpbmF0aW9uXT1cImVuYWJsZVBhZ2luYXRpb25cIlxuICAgICAgICBbcGFnZV09XCJwYWdlXCJcbiAgICAgICAgW3RvdGFsXT1cInRvdGFsXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZW5hYmxlRXhwb3J0XT1cImVuYWJsZUV4cG9ydFwiXG4gICAgICAgIChleHBvcnQpPVwiZXhwb3J0LmVtaXQoKVwiXG4gICAgICAgIFtsb2FkaW5nXT1cImZvb3RlckxvYWRpbmdcIlxuICAgID48L3AtdGFibGUtZm9vdGVyPlxuPC9wLXRhYmxlLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlck1vZGFsVGVtcGxhdGVcIj5cbiAgICA8cC1tb2RhbFxuICAgICAgICBbaGVhZGVyXT1cImZpbHRlck1vZGFsSGVhZGVyVGV4dFwiXG4gICAgICAgIFtzaG93XT1cImZpbHRlck1vZGFsU2hvdyQgfCBhc3luY1wiXG4gICAgICAgIChjbG9zZWQpPVwiZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKVwiXG4gICAgPlxuICAgICAgICA8ZGl2IHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC02XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJNb2RhbFRlbXBsYXRlXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgc2xvdD1cImZvb3RlclwiIGNsYXNzPVwiZmxleCB3LWZ1bGwganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlck1vZGFsU2hvd1Jlc2V0TW9iaWxlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggdy1mdWxsIHRhYmxldDp3LWF1dG8gZGVza3RvcC14czpoaWRkZW5cIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxSZXNldCh0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZmlsdGVyTW9kYWxSZXNldFRleHQgfX1cbiAgICAgICAgICAgIDwvcC1idXR0b24+XG4gICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlck1vZGFsU2hvd1Jlc2V0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlbiB3LWZ1bGwgdGFibGV0OnctYXV0byBkZXNrdG9wLXhzOmZsZXhcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxSZXNldCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBmaWx0ZXJNb2RhbFJlc2V0VGV4dCB9fVxuICAgICAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtYXV0byB3LWZ1bGwgdGFibGV0OnctYXV0b1wiXG4gICAgICAgICAgICAgICAgaWNvbj1cImNoZWNrbWFya1wiXG4gICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25GaWx0ZXJNb2RhbFNhdmUoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZmlsdGVyTW9kYWxTYXZlVGV4dCB9fVxuICAgICAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9wLW1vZGFsPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlTdGF0ZVRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJlbXB0eVN0YXRlVHlwZSA9PT0gJ2ZpbHRlcmVkJzsgZWxzZSBlbXB0eVN0YXRlTm9uRmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgbWF4LXctWzIwcmVtXVxuICAgICAgICAgICAgZmxleC1jb2xcbiAgICAgICAgICAgIGl0ZW1zLWNlbnRlclxuICAgICAgICAgICAgc2VsZi1jZW50ZXJcbiAgICAgICAgICAgIHB5LTI0XG4gICAgICAgICAgICB0ZXh0LWNlbnRlclxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPHAtaWxsdXN0cmF0aW9uXG4gICAgICAgICAgICBbdmFyaWFudF09XCJlbXB0eVN0YXRlRmlsdGVyZWRJbGx1c3RyYXRpb25cIlxuICAgICAgICAgICAgY2xhc3M9XCJtYi02XCJcbiAgICAgICAgPjwvcC1pbGx1c3RyYXRpb24+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1zdG9ybS1kZWZhdWx0IGZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIHt7IGVtcHR5U3RhdGVGaWx0ZXJlZEhlYWRlciB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwIGNsYXNzPVwibWItMTQgdGV4dC1zbSB0ZXh0LXN0b3JtLW1lZGl1bVwiPlxuICAgICAgICAgICAge3sgZW1wdHlTdGF0ZUZpbHRlcmVkQ29udGVudCB9fVxuICAgICAgICA8L3A+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5U3RhdGVOb25GaWx0ZXJUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICBmbGV4XG4gICAgICAgICAgICBtYXgtdy1bMjByZW1dXG4gICAgICAgICAgICBmbGV4LWNvbFxuICAgICAgICAgICAgaXRlbXMtY2VudGVyXG4gICAgICAgICAgICBzZWxmLWNlbnRlclxuICAgICAgICAgICAgcHktMjRcbiAgICAgICAgICAgIHRleHQtY2VudGVyXG4gICAgICAgIFwiXG4gICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJlbmFibGVFbXB0eVN0YXRlQWN0aW9uXCJcbiAgICAgICAgKGNsaWNrKT1cImVtcHR5U3RhdGVDbGlja2VkKClcIlxuICAgID5cbiAgICAgICAgPHAtaWxsdXN0cmF0aW9uXG4gICAgICAgICAgICBbdmFyaWFudF09XCJlbXB0eVN0YXRlSWxsdXN0cmF0aW9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWItNlwiXG4gICAgICAgID48L3AtaWxsdXN0cmF0aW9uPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtc3Rvcm0tZGVmYXVsdCBmb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICB7eyBlbXB0eVN0YXRlSGVhZGVyIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJtYi02IHRleHQtc20gdGV4dC1zdG9ybS1tZWRpdW1cIj5cbiAgICAgICAgICAgIHt7IGVtcHR5U3RhdGVDb250ZW50IH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZUVtcHR5U3RhdGVBY3Rpb25cIlxuICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBpY29uPVwicGx1c1wiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBlbXB0eVN0YXRlQWN0aW9uIH19XG4gICAgICAgIDwvcC1idXR0b24+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
607
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFwZXJsZXNzL3NyYy9saWIvbW9kdWxlcy90YWJsZS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcGVybGVzcy9zcmMvbGliL21vZHVsZXMvdGFibGUvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFFZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFNckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQ0gsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QixpQ0FBaUMsR0FDcEMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7OztBQVN2RCxJQUFNLEtBQUssR0FBWCxNQUFNLEtBQUs7SUE2VGQsWUFBb0IsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUF2VDNDOztXQUVHO1FBQ00sWUFBTyxHQUFZLEtBQUssQ0FBQztRQUVsQzs7V0FFRztRQUNNLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBRXhDOztXQUVHO1FBQ00sa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFeEM7O1dBRUc7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QUFDLFdBQVc7Z0JBY3JCLG1CQUFtQjtzQkFKekIsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRTt3QkFDckMsSUFBSSxFQUFFLFdBQVc7d0JBQ2pCLE1BQU0sRUFBRSxJQUFJO3FCQUNmO2dCQUtRLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBNkJQLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFVNUMsS0FBSztzQkFESixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVUxQyxnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgUXVpY2tGaWx0ZXIsIFJvd0NsaWNrRXZlbnQgfSBmcm9tICdAcGFwZXJsZXNzL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBJY29uVmFyaWFudCxcbiAgICBJbGx1c3RyYXRpb25WYXJpYW50LFxufSBmcm9tICdAcGFwZXJsZXNzL2NvcmUvZGlzdC90eXBlcy9jb21wb25lbnRzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsXG4gICAgVGFibGVGaWx0ZXJNb2RhbERpcmVjdGl2ZSxcbiAgICBUYWJsZUZsb2F0aW5nTWVudUNvbnRlbnREaXJlY3RpdmUsXG59IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBkZWZhdWx0U2l6ZSwgZGVmYXVsdFNpemVPcHRpb25zIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5AVW50aWxEZXN0cm95KHsgY2hlY2tQcm9wZXJ0aWVzOiB0cnVlIH0pXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3AtdGFibGUtbmd4JyxcbiAgICB0ZW1wbGF0ZVVybDogJ3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsndGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqXG4gICAgICogVGhlIGl0ZW1zIHRvIGJlIGZlZCB0byB0aGUgdGFibGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpdGVtcyE6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBkYXRhIGlzIGxvYWRpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdGhlIGhlYWRlciBzaG91bGQgc2hvdyBsb2FkaW5nIHN0YXRlXG4gICAgICovXG4gICAgQElucHV0KCkgaGVhZGVyTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRoZSBmb290ZXIgc2hvdWxkIHNob3cgbG9hZGluZyBzdGF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGZvb3RlckxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2YgbG9hZGluZyByb3dzIHRvIHNob3dcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhbW91bnRPZkxvYWRpbmdSb3dzOiBudW1iZXIgPSA2O1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIGVuYWJsZSBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVSb3dTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIGVuYWJsZSByb3cgY2xpY2tpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVSb3dDbGljazogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgaXRlbXNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IGFueVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciB0aGUgY3VycmVudCBzZWxlY3Rpb24gY2hhbmdlc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBzZWxlY3RlZFJvd3NDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGtleSB0byBkZXRlcm1pbmUgaWYgYSByb3cgaXMgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZWxlY3Rpb25LZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIEEga2V5IHRvIGRldGVybWluZSBpZiBhIHJvdyBjYW4gYmUgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjYW5TZWxlY3RLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBlbmFibGUgdGhlIGZsb2F0aW5nIG1lbnVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVGbG9hdGluZ01lbnU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZsb2F0aW5nIG1lbnUgYW1vdW50IGl0ZW0gdGV4dFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGZsb2F0aW5nTWVudUFtb3VudFNlbGVjdGVkVGV4dDogc3RyaW5nID0gJzAgaXRlbXMgc2VsZWN0ZWQnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRlbXBsYXRlIGZvciBhbW91bnQgc2VsZWN0ZWQgaXRlbSBpbiB0aGUgZmxvYXRpbmcgbWVudVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGZsb2F0aW5nTWVudUFtb3VudFNlbGVjdGVkVGVtcGxhdGU6IGFueTtcblxuICAgIC8vIGZsb2F0aW5nIG1lbnVcbiAgICBAQ29udGVudENoaWxkKFRhYmxlRmxvYXRpbmdNZW51Q29udGVudERpcmVjdGl2ZSwge1xuICAgICAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICAgICAgc3RhdGljOiB0cnVlLFxuICAgIH0pXG4gICAgcHVibGljIGZsb2F0aW5nTWVudUNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW5ldmVyIGEgcm93IGlzIGNsaWNrZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxSb3dDbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW5ldmVyIGEgcm93IGlzIHNlbGVjdGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJvd1NlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW5ldmVyIGEgcm93IGlzIGRlc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcm93RGVzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogU1RBUlQgSEVBREVSICovXG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gc2hvdyB0aGUgaGVhZGVyXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlSGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFF1aWNrIGZpbHRlcnMgdG8gc2hvd1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHF1aWNrRmlsdGVyczogUXVpY2tGaWx0ZXJbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQWN0aXZlIHF1aWNrIGZpbHRlciBpZGVudGlmaWVyXG4gICAgICovXG4gICAgQElucHV0KCkgYWN0aXZlUXVpY2tGaWx0ZXJJZGVudGlmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gc2hvdyB0aGUgc2VhcmNoIGlucHV0XG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBxdWVyeSB0byBzaG93IGluIHRoZSBzZWFyY2ggYmFyXG4gICAgICovXG4gICAgQElucHV0KCkgcXVlcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBzaG93IHRoZSBmaWx0ZXIgYnV0dG9uXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlRmlsdGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2YgZmlsdGVycyBiZWluZyBzZWxlY3RlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkRmlsdGVyc0Ftb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRlbXBsYXRlIGZvciB0aGUgZmlsdGVyIGJ1dHRvbiB0ZXh0XG4gICAgICovXG4gICAgQElucHV0KCkgZmlsdGVyQnV0dG9uVGVtcGxhdGU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBzaG93IHRoZSBhY3Rpb24gYnV0dG9uXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdGhlIGFjdGlvbiBidXR0b24gaXMgbG9hZGluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbkxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhY3Rpb24gYnV0dG9uIGljb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBhY3Rpb25CdXR0b25JY29uOiBJY29uVmFyaWFudCA9ICdwZW5jaWwnO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGVuYWJsZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhY3Rpb25CdXR0b25FbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhY3Rpb24gYnV0dG9uIHRleHQgaWYgY2hhbmdlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGFjdGlvbkJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGVtcGxhdGUgZm9yIHRoZSBhY3Rpb24gYnV0dG9uIHRleHRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhY3Rpb25CdXR0b25UZW1wbGF0ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbiBvbmUgb2YgdGhlIHF1aWNrIGZpbHRlcnMgaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBxdWlja0ZpbHRlcjogRXZlbnRFbWl0dGVyPFF1aWNrRmlsdGVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW4gdGhlIHF1ZXJ5IGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcXVlcnlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbiB0aGUgZmlsdGVyIGJ1dHRvbiBpcyBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIGZpbHRlcjogRXZlbnRFbWl0dGVyPG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbiB0aGUgYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIGFjdGlvbjogRXZlbnRFbWl0dGVyPG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIFNUQVJUIEZPT1RFUiAqL1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIHNob3cgdGhlIGZvb3RlclxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZUZvb3RlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gZW5hYmxlIHBhZ2Ugc2l6ZSBzZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVQYWdlU2l6ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gZW5hYmxlIHBhZ2luYXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVQYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBlbmFibGUgZXhwb3J0XG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlRXhwb3J0OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHBhZ2VcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwYWdlOiBudW1iZXIgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIGFtb3VudCBvZiBpdGVtc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRvdGFsITogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbmV2ZXIgdGhlIHBhZ2UgY2hhbmdlc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2YgaXRlbXMgcGVyIHBhZ2VcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyID0gZGVmYXVsdFNpemU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBmb3IgdGhlIHBhZ2Ugc2l6ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBkZWZhdWx0U2l6ZU9wdGlvbnM7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciB0aGUgcGFnZSBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpIHBhZ2VTaXplQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW5ldmVyIHRoZSBwYWdlIGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgZXhwb3J0OiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBoaWRlIHdoZW4gdGhlcmUgaXMgb25seSAxIHBhZ2UgYXZhaWxhYmxlXG4gICAgICovXG4gICAgQElucHV0KCkgaGlkZU9uU2luZ2xlUGFnZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiBFbXB0eSBzdGF0ZSBzdGFydCAqL1xuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVUeXBlOiAnbm9fZmlsdGVyJyB8ICdmaWx0ZXJlZCcgPSAnbm9fZmlsdGVyJztcblxuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVJbGx1c3RyYXRpb246IElsbHVzdHJhdGlvblZhcmlhbnQgPSAnZW1wdHktc3RhdGUtYWRkJztcbiAgICBASW5wdXQoKSBlbXB0eVN0YXRlSGVhZGVyITogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVDb250ZW50ITogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVBY3Rpb24hOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBlbmFibGVFbXB0eVN0YXRlQWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVGaWx0ZXJlZElsbHVzdHJhdGlvbjogSWxsdXN0cmF0aW9uVmFyaWFudCA9XG4gICAgICAgICdlbXB0eS1zdGF0ZS1zZWFyY2gnO1xuICAgIEBJbnB1dCgpIGVtcHR5U3RhdGVGaWx0ZXJlZEhlYWRlciE6IHN0cmluZztcbiAgICBASW5wdXQoKSBlbXB0eVN0YXRlRmlsdGVyZWRDb250ZW50ITogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbmV2ZXIgdGhlIGVtcHR5IHN0YXRlIGlzIGNsaWNrZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgZW1wdHlTdGF0ZUFjdGlvbkNsaWNrOiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiBFbXB0eSBzdGF0ZSBlbmQgKi9cblxuICAgIHB1YmxpYyBjb2x1bW5zOiBhbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBwYXJzZWRJdGVtczogYW55W10gPSBbXTtcbiAgICBwdWJsaWMgbG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcbiAgICAgICAgbGVuZ3RoOiB0aGlzLmFtb3VudE9mTG9hZGluZ1Jvd3MsXG4gICAgfSk7XG4gICAgcHJpdmF0ZSBfY3RybERvd24gPSBmYWxzZTtcblxuICAgIC8vIEFuZ3VsYXIgc3R1ZmZcbiAgICAvLyBjdXN0b20gZmlsdGVyIHRlbXBsYXRlXG4gICAgQENvbnRlbnRDaGlsZChUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSwge1xuICAgICAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICAgICAgc3RhdGljOiB0cnVlLFxuICAgIH0pXG4gICAgcHVibGljIGhlYWRlckN1c3RvbUZpbHRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gY29sdW1uIHRlbXBsYXRlc1xuICAgIHByaXZhdGUgX2NvbHVtbkRlZmluaXRpb25zITogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oVGFibGVDb2x1bW4pXG4gICAgc2V0IGNvbHVtbkRlZmluaXRpb25zKHY6IFF1ZXJ5TGlzdDxUYWJsZUNvbHVtbj4pIHtcbiAgICAgICAgdGhpcy5fY29sdW1uRGVmaW5pdGlvbnMgPSB2O1xuICAgICAgICB0aGlzLl9nZW5lcmF0ZUNvbHVtbnMoKTtcbiAgICB9XG4gICAgZ2V0IGNvbHVtbkRlZmluaXRpb25zKCk6IFF1ZXJ5TGlzdDxUYWJsZUNvbHVtbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uRGVmaW5pdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIG1vZGFsXG4gICAgQENvbnRlbnRDaGlsZChUYWJsZUZpbHRlck1vZGFsRGlyZWN0aXZlLCB7XG4gICAgICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgICAgICBzdGF0aWM6IHRydWUsXG4gICAgfSlcbiAgICBwdWJsaWMgZmlsdGVyTW9kYWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBmaWx0ZXJNb2RhbFNob3ckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICBASW5wdXQoKSBmaWx0ZXJNb2RhbEhlYWRlclRleHQ6IHN0cmluZyA9ICdGaWx0ZXJzJztcbiAgICBASW5wdXQoKSBmaWx0ZXJNb2RhbFNhdmVUZXh0OiBzdHJpbmcgPSAnU2F2ZSc7XG4gICAgQElucHV0KCkgZmlsdGVyTW9kYWxDYW5jZWxUZXh0OiBzdHJpbmcgPSAnQ2FuY2VsJztcbiAgICBASW5wdXQoKSBmaWx0ZXJNb2RhbFJlc2V0VGV4dDogc3RyaW5nID0gJ1Jlc2V0IGZpbHRlcnMnO1xuXG4gICAgQElucHV0KCkgZmlsdGVyTW9kYWxTaG93UmVzZXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBmaWx0ZXJNb2RhbFNob3dSZXNldE1vYmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIGZpbHRlck1vZGFsU2hvdzogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBmaWx0ZXJNb2RhbFNhdmU6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgZmlsdGVyTW9kYWxSZXNldDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLl9wYXJzZUl0ZW1zKHRoaXMuaXRlbXMpO1xuXG4gICAgICAgIHRoaXMubG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5hbW91bnRPZkxvYWRpbmdSb3dzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZpbHRlck1vZGFsU2hvdyRcbiAgICAgICAgICAgIC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuZmlsdGVyTW9kYWxTaG93Lm5leHQodmFsdWUpKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzWydpdGVtcyddKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJzZUl0ZW1zKGNoYW5nZXNbJ2l0ZW1zJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydhbW91bnRPZkxvYWRpbmdSb3dzJ10pIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcbiAgICAgICAgICAgICAgICBsZW5ndGg6IGNoYW5nZXNbJ2Ftb3VudE9mTG9hZGluZ1Jvd3MnXS5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICAgIGtleURvd24oeyBrZXkgfTogeyBrZXk6IHN0cmluZyB9KSB7XG4gICAgICAgIGlmIChrZXkgIT09ICdDb250cm9sJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3RybERvd24gPSB0cnVlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXVwJywgWyckZXZlbnQnXSlcbiAgICBrZXlVcCh7IGtleSB9OiB7IGtleTogc3RyaW5nIH0pIHtcbiAgICAgICAgaWYgKGtleSAhPT0gJ0NvbnRyb2wnIHx8IHRoaXMuX2N0cmxEb3duID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3RybERvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDp2aXNpYmlsaXR5Y2hhbmdlJywgWyckZXZlbnQnXSlcbiAgICB2aXNpYmlsaXR5Q2hhbmdlKCkge1xuICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N0cmxEb3duID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25RdWVyeUNoYW5nZSh7IGRldGFpbCB9OiBhbnkpIHtcbiAgICAgICAgdGhpcy5xdWVyeUNoYW5nZS5lbWl0KGRldGFpbCk7XG4gICAgfVxuXG4gICAgb25RdWlja0ZpbHRlcih7IGRldGFpbCB9OiBhbnkpIHtcbiAgICAgICAgdGhpcy5xdWlja0ZpbHRlci5lbWl0KGRldGFpbCk7XG4gICAgfVxuXG4gICAgb25QYWdlU2l6ZUNoYW5nZSh7IGRldGFpbCB9OiBhbnkpIHtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGRldGFpbDtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZUNoYW5nZS5lbWl0KGRldGFpbCk7XG4gICAgfVxuXG4gICAgb25QYWdlQ2hhbmdlKHsgZGV0YWlsIH06IGFueSkge1xuICAgICAgICB0aGlzLnBhZ2UgPSBkZXRhaWw7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KGRldGFpbCk7XG4gICAgfVxuXG4gICAgb25GaWx0ZXJNb2RhbFNhdmUoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyTW9kYWxTYXZlLm5leHQoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RhbFNob3ckLm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIG9uRmlsdGVyTW9kYWxSZXNldChyZXNldFF1aWNrRmlsdGVyID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNb2RhbFJlc2V0Lm5leHQocmVzZXRRdWlja0ZpbHRlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBlbXB0eVN0YXRlQ2xpY2tlZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZUVtcHR5U3RhdGVBY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1wdHlTdGF0ZUFjdGlvbkNsaWNrLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wYXJzZUl0ZW1zKGl0ZW1zOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFpdGVtcykge1xuICAgICAgICAgICAgdGhpcy5wYXJzZWRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlZEl0ZW1zID0gaXRlbXM7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBhcnNlZEl0ZW1zID0gSlNPTi5wYXJzZShpdGVtcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVDb2x1bW5zKCkge1xuICAgICAgICAvLyBjb25zdCBkZWZpbml0aW9ucyA9XG4gICAgICAgIC8vIFx0dGhpcy5fZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdwLXRhYmxlLWRlZmluaXRpb24nKTtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnNBcnJheSA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5EZWZpbml0aW9uc1xuICAgICAgICApIGFzIFRhYmxlQ29sdW1uW107XG4gICAgICAgIGRlZmluaXRpb25zQXJyYXlbZGVmaW5pdGlvbnNBcnJheS5sZW5ndGggLSAxXS5pc0xhc3QgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuY29sdW1ucyA9IGRlZmluaXRpb25zQXJyYXk7XG4gICAgfVxuXG4gICAgcHVibGljIF9jaGVja2JveERpc2FibGVkKGl0ZW06IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW5TZWxlY3RLZXkgJiYgIWl0ZW1bdGhpcy5jYW5TZWxlY3RLZXldO1xuICAgIH1cblxuICAgIHB1YmxpYyBfc2VsZWN0QWxsQ2hhbmdlKCRldmVudDogYW55LCBmb3JjZVZhbHVlPzogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlUm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgICAgICBmb3JjZVZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHRoaXMuX2dldENoZWNrZWRWYWx1ZSgkZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICAgICAgIDogZm9yY2VWYWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB0b0FkZCA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhcnNlZEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5wYXJzZWRJdGVtc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5TZWxlY3RLZXkgJiYgIXJvd1t0aGlzLmNhblNlbGVjdEtleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKHJvdywgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG9BZGQucHVzaChyb3cpO1xuICAgICAgICAgICAgICAgIHRoaXMucm93U2VsZWN0ZWQuZW1pdChyb3cpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cyA9IFsuLi50aGlzLnNlbGVjdGVkUm93cywgLi4udG9BZGRdO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0ZWRSb3dzW2ldO1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5wYXJzZWRJdGVtcy5maW5kKFxuICAgICAgICAgICAgICAgIChkKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZShkLCBpKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0U2VsZWN0aW9uVmFsdWUodmFsdWUsIGkpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvd0Rlc2VsZWN0ZWQuZW1pdChyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgfVxuXG4gICAgcHVibGljIF9jaGVja2JveENoYW5nZSh0YXJnZXQ6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlUm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3cgPSB0aGlzLnBhcnNlZEl0ZW1zW2luZGV4XTtcblxuICAgICAgICBpZiAodGhpcy5jYW5TZWxlY3RLZXkgJiYgIXJvd1t0aGlzLmNhblNlbGVjdEtleV0pIHtcbiAgICAgICAgICAgIHRhcmdldC5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldENoZWNrZWRWYWx1ZSh0YXJnZXQpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzLCByb3ddO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQocm93KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4T2ZUb1JlbW92ZSA9IHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKHJvdywgaW5kZXgsIHRydWUpO1xuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gZG8gdGhpcywgYmVjYXVzZSBzcGxpY2UgZG9lcyBub3QgdHJpZ2dlciB0aGUgc2VsZWN0aW9uIHNldHRlci5cbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzXTtcbiAgICAgICAgc2VsZWN0aW9uLnNwbGljZShpbmRleE9mVG9SZW1vdmUsIDEpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cyA9IHNlbGVjdGlvbjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgICAgIHRoaXMucm93RGVzZWxlY3RlZC5lbWl0KHJvdyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0Q2hlY2tlZFZhbHVlKHRhcmdldDogYW55KSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ/LmNoZWNrZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0U2VsZWN0aW9uVmFsdWUocm93OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uS2V5ID8gcm93Py5bdGhpcy5zZWxlY3Rpb25LZXldIHx8IGluZGV4IDogaW5kZXg7XG4gICAgfVxuXG4gICAgcHVibGljIF9zZWxlY3Rpb25Db250YWlucyhcbiAgICAgICAgcm93OiBhbnksXG4gICAgICAgIGluZGV4OiBudW1iZXIsXG4gICAgICAgIHJldHVybkluZGV4ID0gZmFsc2VcbiAgICApOiBhbnkge1xuICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IHRoaXMuc2VsZWN0ZWRSb3dzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKHJvdywgaW5kZXgpID09PVxuICAgICAgICAgICAgICAgIHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKGl0ZW0sIGluZGV4KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gIXJldHVybkluZGV4ID8gcmV0dXJuVmFsdWUgPj0gMCA6IHJldHVyblZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBfc2VsZWN0aW9uQ29udGFpbnNBbGwoKSB7XG4gICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5zID0gdGhpcy5fc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgaSk7XG5cbiAgICAgICAgICAgIGlmICghY29udGFpbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBfc2VsZWN0aW9uSW5kZXRlcm1pbmF0ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBhcnNlZEl0ZW1zPy5sZW5ndGggfHwgIXRoaXMuc2VsZWN0ZWRSb3dzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb250YWluc0NvdW50ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhcnNlZEl0ZW1zPy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbaV07XG4gICAgICAgICAgICBjb25zdCBjb250YWlucyA9IHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIGkpO1xuXG4gICAgICAgICAgICBpZiAoY29udGFpbnMpIHtcbiAgICAgICAgICAgICAgICBjb250YWluc0NvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGFpbnNDb3VudCA+IDAgJiYgY29udGFpbnNDb3VudCAhPT0gdGhpcy5wYXJzZWRJdGVtcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHVibGljIF9yb3dDbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gJGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnIHx8XG4gICAgICAgICAgICAodGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnR5cGUgPT09ICdjaGVja2JveCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl9maW5kUm93KHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2ZpbmRSb3dBY3Rpb24odGFyZ2V0KTtcblxuICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5lbmFibGVSb3dDbGljaykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbaW5kZXhdO1xuICAgICAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHtcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGN0cmxEb3duOiB0aGlzLl9jdHJsRG93bixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hlY2tib3ggPSByb3c/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpO1xuXG4gICAgICAgIGlmICghY2hlY2tib3gpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSAhY2hlY2tib3guY2hlY2tlZDtcbiAgICAgICAgdGhpcy5fY2hlY2tib3hDaGFuZ2UoY2hlY2tib3gsIGluZGV4KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9maW5kUm93KGVsOiBIVE1MRWxlbWVudCB8IG51bGwpOiBhbnkge1xuICAgICAgICBpZiAoIWVsKSB7XG4gICAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWw/LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdwLXRhYmxlLXJvdycpIHtcbiAgICAgICAgICAgIHJldHVybiBlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kUm93KGVsPy5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9maW5kUm93QWN0aW9uKGVsOiBIVE1MRWxlbWVudCB8IG51bGwpOiBhbnkge1xuICAgICAgICBpZiAoIWVsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pcy1hY3Rpb24nKSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgZWwuZ2V0QXR0cmlidXRlKCdkYXRhLWlzLWFjdGlvbicpICE9PSAnZmFsc2UnXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsPy50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAncC10YWJsZS1yb3cnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kUm93QWN0aW9uKGVsPy5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG59XG4iLCI8cC10YWJsZS1jb250YWluZXI+XG4gICAgPHAtdGFibGUtaGVhZGVyXG4gICAgICAgICpuZ0lmPVwiZW5hYmxlSGVhZGVyXCJcbiAgICAgICAgW3F1aWNrRmlsdGVyc109XCJxdWlja0ZpbHRlcnNcIlxuICAgICAgICBbYWN0aXZlUXVpY2tGaWx0ZXJJZGVudGlmaWVyXT1cImFjdGl2ZVF1aWNrRmlsdGVySWRlbnRpZmllclwiXG4gICAgICAgIChxdWlja0ZpbHRlcik9XCJvblF1aWNrRmlsdGVyKCRldmVudClcIlxuICAgICAgICBbZW5hYmxlU2VhcmNoXT1cImVuYWJsZVNlYXJjaFwiXG4gICAgICAgIFtxdWVyeV09XCJxdWVyeVwiXG4gICAgICAgIChxdWVyeUNoYW5nZSk9XCJvblF1ZXJ5Q2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZW5hYmxlRmlsdGVyXT1cImVuYWJsZUZpbHRlclwiXG4gICAgICAgIFtzZWxlY3RlZEZpbHRlcnNBbW91bnRdPVwic2VsZWN0ZWRGaWx0ZXJzQW1vdW50XCJcbiAgICAgICAgW2ZpbHRlckJ1dHRvblRlbXBsYXRlXT1cImZpbHRlckJ1dHRvblRlbXBsYXRlXCJcbiAgICAgICAgKGZpbHRlcik9XCJmaWx0ZXJNb2RhbFNob3ckLm5leHQodHJ1ZSlcIlxuICAgICAgICBbZW5hYmxlQWN0aW9uXT1cImVuYWJsZUFjdGlvblwiXG4gICAgICAgIFtjYW5Vc2VBY3Rpb25dPVwiYWN0aW9uQnV0dG9uRW5hYmxlZFwiXG4gICAgICAgIFthY3Rpb25CdXR0b25UZW1wbGF0ZV09XCJhY3Rpb25CdXR0b25UZW1wbGF0ZVwiXG4gICAgICAgIFthY3Rpb25Mb2FkaW5nXT1cImFjdGlvbkJ1dHRvbkxvYWRpbmdcIlxuICAgICAgICBbYWN0aW9uVGV4dF09XCJhY3Rpb25CdXR0b25UZXh0XCJcbiAgICAgICAgW2FjdGlvbkljb25dPVwiYWN0aW9uQnV0dG9uSWNvblwiXG4gICAgICAgIChhY3Rpb24pPVwiYWN0aW9uLmVtaXQoKVwiXG4gICAgICAgIFtpdGVtc1NlbGVjdGVkQW1vdW50XT1cInNlbGVjdGVkUm93cy5sZW5ndGhcIlxuICAgICAgICBbbG9hZGluZ109XCJoZWFkZXJMb2FkaW5nXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXJDdXN0b21GaWx0ZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyQ3VzdG9tRmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3AtdGFibGUtaGVhZGVyPlxuXG4gICAgPHAtdGFibGUtcm93IHZhcmlhbnQ9XCJoZWFkZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICA8cC10YWJsZS1jZWxsLW5neFxuICAgICAgICAgICAgICAgIFtkZWZpbml0aW9uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbC5uYW1lXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtjaGVja2JveF09XCJcbiAgICAgICAgICAgICAgICAgICAgKGluZGV4ID09PSAwIHx8IGNvbC5oYXNDaGVja2JveCkgJiYgZW5hYmxlUm93U2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNoZWNrYm94VGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L3AtdGFibGUtY2VsbC1uZ3g+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiX3NlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiX3NlbGVjdGlvbkNvbnRhaW5zQWxsKClcIlxuICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJfc2VsZWN0aW9uSW5kZXRlcm1pbmF0ZSgpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9wLXRhYmxlLXJvdz5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nOyBlbHNlIGNvbnRlbnRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPHAtdGFibGUtcm93XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHIgb2YgbG9hZGluZ1Jvd3M7IGxldCByb3dJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBbZW5hYmxlSG92ZXJdPVwiZW5hYmxlUm93U2VsZWN0aW9uIHx8IGVuYWJsZVJvd0NsaWNrXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAtdGFibGUtY2VsbC1uZ3hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZpbml0aW9uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwibG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tib3hdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluZGV4ID09PSAwIHx8IGNvbC5oYXNDaGVja2JveCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVSb3dTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjaGVja2JveFRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dJbmRleF09XCJyb3dJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgID48L3AtdGFibGUtY2VsbC1uZ3g+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tib3hUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWxvYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLTYgdy02IHJvdW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcC1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3AtdGFibGUtcm93PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2NvbnRlbnRUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtcz8ubGVuZ3RoOyBlbHNlIGVtcHR5U3RhdGVUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxwLXRhYmxlLXJvd1xuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbZW5hYmxlSG92ZXJdPVwiZW5hYmxlUm93U2VsZWN0aW9uIHx8IGVuYWJsZVJvd0NsaWNrXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9yb3dDbGljaygkZXZlbnQsIHJvd0luZGV4KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGxldCBpbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtdGFibGUtY2VsbC1uZ3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVmaW5pdGlvbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2JveF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluZGV4ID09PSAwIHx8IGNvbC5oYXNDaGVja2JveCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlUm93U2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNoZWNrYm94VGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dJbmRleF09XCJyb3dJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlXT1cImNvbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLXRhYmxlLWNlbGwtbmd4PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2hlY2tib3hDaGFuZ2UoJGV2ZW50LnRhcmdldCwgcm93SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJfY2hlY2tib3hEaXNhYmxlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIl9zZWxlY3Rpb25Db250YWlucyhpdGVtLCByb3dJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3AtdGFibGUtcm93PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG5cbiAgICA8cC10YWJsZS1mb290ZXJcbiAgICAgICAgKm5nSWY9XCJlbmFibGVGb290ZXJcIlxuICAgICAgICBbaGlkZU9uU2luZ2xlUGFnZV09XCJoaWRlT25TaW5nbGVQYWdlXCJcbiAgICAgICAgW2VuYWJsZVBhZ2VTaXplXT1cImVuYWJsZVBhZ2VTaXplXCJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxuICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2VuYWJsZVBhZ2luYXRpb25dPVwiZW5hYmxlUGFnaW5hdGlvblwiXG4gICAgICAgIFtwYWdlXT1cInBhZ2VcIlxuICAgICAgICBbdG90YWxdPVwidG90YWxcIlxuICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtlbmFibGVFeHBvcnRdPVwiZW5hYmxlRXhwb3J0XCJcbiAgICAgICAgKGV4cG9ydCk9XCJleHBvcnQuZW1pdCgpXCJcbiAgICAgICAgW2xvYWRpbmddPVwiZm9vdGVyTG9hZGluZ1wiXG4gICAgPjwvcC10YWJsZS1mb290ZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW5hYmxlRmxvYXRpbmdNZW51XCI+XG4gICAgICAgIDxwLWZsb2F0aW5nLW1lbnUtY29udGFpbmVyXG4gICAgICAgICAgICBbY2xhc3MuaW5hY3RpdmVdPVwiIXNlbGVjdGVkUm93cy5sZW5ndGhcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8cC1mbG9hdGluZy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICBob3Zlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhIWZsb2F0aW5nTWVudUNvbnRlbnRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgJ3RhYmxldDpmbGV4JzogISFmbG9hdGluZ01lbnVDb250ZW50VGVtcGxhdGVcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBmbG9hdGluZ01lbnVBbW91bnRTZWxlY3RlZFRleHQgfX1cbiAgICAgICAgICAgIDwvcC1mbG9hdGluZy1tZW51LWl0ZW0+XG4gICAgICAgICAgICA8cC1kaXZpZGVyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJteC0wIHRleHQtc3Rvcm1cIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ2ZXJ0aWNhbFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhIWZsb2F0aW5nTWVudUNvbnRlbnRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgJ3RhYmxldDpmbGV4JzogISFmbG9hdGluZ01lbnVDb250ZW50VGVtcGxhdGVcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmxvYXRpbmdNZW51Q29udGVudFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZsb2F0aW5nTWVudUNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxwLWRpdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteC0wIHRleHQtc3Rvcm1cIlxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwidmVydGljYWxcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxwLWZsb2F0aW5nLW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfc2VsZWN0QWxsQ2hhbmdlKG51bGwsIGZhbHNlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHAtaWNvbiB2YXJpYW50PVwibmVnYXRpdmVcIiAvPlxuICAgICAgICAgICAgPC9wLWZsb2F0aW5nLW1lbnUtaXRlbT5cbiAgICAgICAgPC9wLWZsb2F0aW5nLW1lbnUtY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9wLXRhYmxlLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlck1vZGFsVGVtcGxhdGVcIj5cbiAgICA8cC1tb2RhbFxuICAgICAgICBbaGVhZGVyXT1cImZpbHRlck1vZGFsSGVhZGVyVGV4dFwiXG4gICAgICAgIFtzaG93XT1cImZpbHRlck1vZGFsU2hvdyQgfCBhc3luY1wiXG4gICAgICAgIChjbG9zZWQpPVwiZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKVwiXG4gICAgPlxuICAgICAgICA8ZGl2IHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC02XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJNb2RhbFRlbXBsYXRlXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgc2xvdD1cImZvb3RlclwiIGNsYXNzPVwiZmxleCB3LWZ1bGwganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlck1vZGFsU2hvd1Jlc2V0TW9iaWxlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggdy1mdWxsIHRhYmxldDp3LWF1dG8gZGVza3RvcC14czpoaWRkZW5cIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxSZXNldCh0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZmlsdGVyTW9kYWxSZXNldFRleHQgfX1cbiAgICAgICAgICAgIDwvcC1idXR0b24+XG4gICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlck1vZGFsU2hvd1Jlc2V0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlbiB3LWZ1bGwgdGFibGV0OnctYXV0byBkZXNrdG9wLXhzOmZsZXhcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxSZXNldCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBmaWx0ZXJNb2RhbFJlc2V0VGV4dCB9fVxuICAgICAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtYXV0byB3LWZ1bGwgdGFibGV0OnctYXV0b1wiXG4gICAgICAgICAgICAgICAgaWNvbj1cImNoZWNrbWFya1wiXG4gICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25GaWx0ZXJNb2RhbFNhdmUoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZmlsdGVyTW9kYWxTYXZlVGV4dCB9fVxuICAgICAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9wLW1vZGFsPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlTdGF0ZVRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJlbXB0eVN0YXRlVHlwZSA9PT0gJ2ZpbHRlcmVkJzsgZWxzZSBlbXB0eVN0YXRlTm9uRmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgbWF4LXctWzIwcmVtXVxuICAgICAgICAgICAgZmxleC1jb2xcbiAgICAgICAgICAgIGl0ZW1zLWNlbnRlclxuICAgICAgICAgICAgc2VsZi1jZW50ZXJcbiAgICAgICAgICAgIHB5LTI0XG4gICAgICAgICAgICB0ZXh0LWNlbnRlclxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPHAtaWxsdXN0cmF0aW9uXG4gICAgICAgICAgICBbdmFyaWFudF09XCJlbXB0eVN0YXRlRmlsdGVyZWRJbGx1c3RyYXRpb25cIlxuICAgICAgICAgICAgY2xhc3M9XCJtYi02XCJcbiAgICAgICAgPjwvcC1pbGx1c3RyYXRpb24+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1zdG9ybS1kZWZhdWx0IGZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIHt7IGVtcHR5U3RhdGVGaWx0ZXJlZEhlYWRlciB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwIGNsYXNzPVwibWItMTQgdGV4dC1zbSB0ZXh0LXN0b3JtLW1lZGl1bVwiPlxuICAgICAgICAgICAge3sgZW1wdHlTdGF0ZUZpbHRlcmVkQ29udGVudCB9fVxuICAgICAgICA8L3A+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5U3RhdGVOb25GaWx0ZXJUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICBmbGV4XG4gICAgICAgICAgICBtYXgtdy1bMjByZW1dXG4gICAgICAgICAgICBmbGV4LWNvbFxuICAgICAgICAgICAgaXRlbXMtY2VudGVyXG4gICAgICAgICAgICBzZWxmLWNlbnRlclxuICAgICAgICAgICAgcHktMjRcbiAgICAgICAgICAgIHRleHQtY2VudGVyXG4gICAgICAgIFwiXG4gICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJlbmFibGVFbXB0eVN0YXRlQWN0aW9uXCJcbiAgICAgICAgKGNsaWNrKT1cImVtcHR5U3RhdGVDbGlja2VkKClcIlxuICAgID5cbiAgICAgICAgPHAtaWxsdXN0cmF0aW9uXG4gICAgICAgICAgICBbdmFyaWFudF09XCJlbXB0eVN0YXRlSWxsdXN0cmF0aW9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWItNlwiXG4gICAgICAgID48L3AtaWxsdXN0cmF0aW9uPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtc3Rvcm0tZGVmYXVsdCBmb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICB7eyBlbXB0eVN0YXRlSGVhZGVyIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJtYi02IHRleHQtc20gdGV4dC1zdG9ybS1tZWRpdW1cIj5cbiAgICAgICAgICAgIHt7IGVtcHR5U3RhdGVDb250ZW50IH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZUVtcHR5U3RhdGVBY3Rpb25cIlxuICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBpY29uPVwicGx1c1wiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBlbXB0eVN0YXRlQWN0aW9uIH19XG4gICAgICAgIDwvcC1idXR0b24+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|