@wertzui/ngx-restworld-client 3.1.0 → 3.3.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/restworld-client.module.mjs +8 -4
- package/esm2020/lib/services/restworld-client.mjs +29 -5
- package/esm2020/lib/views/restworld-list-view/restworld-list-view.component.mjs +64 -23
- package/fesm2015/wertzui-ngx-restworld-client.mjs +93 -22
- package/fesm2015/wertzui-ngx-restworld-client.mjs.map +1 -1
- package/fesm2020/wertzui-ngx-restworld-client.mjs +91 -22
- package/fesm2020/wertzui-ngx-restworld-client.mjs.map +1 -1
- package/lib/restworld-client.module.d.ts +2 -1
- package/lib/services/restworld-client.d.ts +1 -0
- package/lib/views/restworld-list-view/restworld-list-view.component.d.ts +24 -7
- package/package.json +2 -2
|
@@ -6,33 +6,40 @@ import * as i0 from "@angular/core";
|
|
|
6
6
|
import * as i1 from "../../services/restworld-client-collection";
|
|
7
7
|
import * as i2 from "primeng/api";
|
|
8
8
|
import * as i3 from "../../services/avatar-generator";
|
|
9
|
-
import * as i4 from "
|
|
10
|
-
import * as i5 from "primeng/
|
|
11
|
-
import * as i6 from "primeng/
|
|
12
|
-
import * as i7 from "primeng/
|
|
13
|
-
import * as i8 from "primeng/
|
|
14
|
-
import * as i9 from "
|
|
15
|
-
import * as i10 from "primeng/
|
|
16
|
-
import * as i11 from "@angular/
|
|
9
|
+
import * as i4 from "@angular/router";
|
|
10
|
+
import * as i5 from "primeng/table";
|
|
11
|
+
import * as i6 from "primeng/splitbutton";
|
|
12
|
+
import * as i7 from "primeng/avatar";
|
|
13
|
+
import * as i8 from "primeng/tristatecheckbox";
|
|
14
|
+
import * as i9 from "primeng/toast";
|
|
15
|
+
import * as i10 from "primeng/confirmdialog";
|
|
16
|
+
import * as i11 from "@angular/common";
|
|
17
17
|
import * as i12 from "primeng/button";
|
|
18
|
-
import * as i13 from "
|
|
18
|
+
import * as i13 from "primeng/tooltip";
|
|
19
|
+
import * as i14 from "@angular/forms";
|
|
19
20
|
export var ColumnType;
|
|
20
21
|
(function (ColumnType) {
|
|
21
22
|
ColumnType["text"] = "text";
|
|
22
23
|
ColumnType["numeric"] = "numeric";
|
|
23
24
|
ColumnType["boolean"] = "boolean";
|
|
24
25
|
ColumnType["date"] = "date";
|
|
26
|
+
ColumnType["array"] = "array";
|
|
27
|
+
ColumnType["object"] = "object";
|
|
25
28
|
})(ColumnType || (ColumnType = {}));
|
|
26
29
|
export class RESTworldListViewComponent {
|
|
27
|
-
constructor(_clients, _confirmationService, _messageService, avatarGenerator) {
|
|
30
|
+
constructor(_clients, _confirmationService, _messageService, avatarGenerator, _router) {
|
|
28
31
|
this._clients = _clients;
|
|
29
32
|
this._confirmationService = _confirmationService;
|
|
30
33
|
this._messageService = _messageService;
|
|
31
34
|
this.avatarGenerator = avatarGenerator;
|
|
35
|
+
this._router = _router;
|
|
32
36
|
this._columns = [];
|
|
33
37
|
this._editLink = '/edit';
|
|
38
|
+
this._sortField = '';
|
|
39
|
+
this._sortOrder = 1;
|
|
34
40
|
this.isLoading = false;
|
|
35
41
|
this._totalRecords = 0;
|
|
42
|
+
this.load = _.debounce(this.load2, 100);
|
|
36
43
|
this.rowsPerPage = [10, 25, 50];
|
|
37
44
|
this._lastEvent = {
|
|
38
45
|
rows: this.rowsPerPage[0]
|
|
@@ -50,20 +57,34 @@ export class RESTworldListViewComponent {
|
|
|
50
57
|
}
|
|
51
58
|
set apiName(value) {
|
|
52
59
|
this._apiName = value;
|
|
53
|
-
|
|
54
|
-
this.load(this._lastEvent);
|
|
60
|
+
this.load(this._lastEvent);
|
|
55
61
|
}
|
|
56
62
|
get apiName() {
|
|
57
63
|
return this._apiName;
|
|
58
64
|
}
|
|
59
65
|
set rel(value) {
|
|
60
66
|
this._rel = value;
|
|
61
|
-
|
|
62
|
-
this.load(this._lastEvent);
|
|
67
|
+
this.load(this._lastEvent);
|
|
63
68
|
}
|
|
64
69
|
get rel() {
|
|
65
70
|
return this._rel;
|
|
66
71
|
}
|
|
72
|
+
set sortField(value) {
|
|
73
|
+
this._sortField = value ?? '';
|
|
74
|
+
this._lastEvent.sortField = value;
|
|
75
|
+
this.load(this._lastEvent);
|
|
76
|
+
}
|
|
77
|
+
get sortField() {
|
|
78
|
+
return this._sortField;
|
|
79
|
+
}
|
|
80
|
+
set sortOrder(value) {
|
|
81
|
+
this._sortOrder = value ?? 1;
|
|
82
|
+
this._lastEvent.sortOrder = value;
|
|
83
|
+
this.load(this._lastEvent);
|
|
84
|
+
}
|
|
85
|
+
get sortOrder() {
|
|
86
|
+
return this._sortOrder;
|
|
87
|
+
}
|
|
67
88
|
get value() {
|
|
68
89
|
return this.resource?._embedded?.items || [];
|
|
69
90
|
}
|
|
@@ -76,21 +97,31 @@ export class RESTworldListViewComponent {
|
|
|
76
97
|
set totalRecords(value) {
|
|
77
98
|
this._totalRecords = value || 0;
|
|
78
99
|
}
|
|
79
|
-
get sortOrder() {
|
|
80
|
-
return this._lastEvent.sortOrder || 0;
|
|
81
|
-
}
|
|
82
100
|
get newHref() {
|
|
83
101
|
return this.resource?.findLink('new')?.href;
|
|
84
102
|
}
|
|
85
103
|
get dateFormat() {
|
|
86
104
|
return RESTworldListViewComponent._dateFormat;
|
|
87
105
|
}
|
|
106
|
+
ngOnChanges(changes) {
|
|
107
|
+
console.log("ngOnChanges " + changes);
|
|
108
|
+
}
|
|
109
|
+
ngOnInit() {
|
|
110
|
+
console.log("ngOnInit");
|
|
111
|
+
}
|
|
112
|
+
async ngAfterViewInit() {
|
|
113
|
+
console.log("ngAfterViewInit");
|
|
114
|
+
//await this.load(this._lastEvent);
|
|
115
|
+
}
|
|
116
|
+
createNew() {
|
|
117
|
+
return this._router.navigate([this.editLink, this.apiName, this.newHref]);
|
|
118
|
+
}
|
|
88
119
|
getClient() {
|
|
89
120
|
if (!this.apiName)
|
|
90
121
|
throw new Error('Cannot get a client, because the apiName is not set.');
|
|
91
122
|
return this._clients.getClient(this.apiName);
|
|
92
123
|
}
|
|
93
|
-
async
|
|
124
|
+
async load2(event) {
|
|
94
125
|
if (!this.apiName || !this.rel)
|
|
95
126
|
return;
|
|
96
127
|
this.isLoading = true;
|
|
@@ -182,6 +213,10 @@ export class RESTworldListViewComponent {
|
|
|
182
213
|
return ColumnType.text;
|
|
183
214
|
if (_.isBoolean(value))
|
|
184
215
|
return ColumnType.boolean;
|
|
216
|
+
if (_.isArrayLike(value))
|
|
217
|
+
return ColumnType.array;
|
|
218
|
+
if (_.isObjectLike(value))
|
|
219
|
+
return ColumnType.object;
|
|
185
220
|
return ColumnType.text;
|
|
186
221
|
}
|
|
187
222
|
static toTitleCase(anyCase) {
|
|
@@ -324,18 +359,24 @@ RESTworldListViewComponent._dateFormat = new Date(3333, 10, 22)
|
|
|
324
359
|
.replace("11", "MM")
|
|
325
360
|
.replace("3333", "y")
|
|
326
361
|
.replace("33", "yy");
|
|
327
|
-
RESTworldListViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: RESTworldListViewComponent, deps: [{ token: i1.RESTworldClientCollection }, { token: i2.ConfirmationService }, { token: i2.MessageService }, { token: i3.AvatarGenerator }], target: i0.ɵɵFactoryTarget.Component });
|
|
328
|
-
RESTworldListViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: RESTworldListViewComponent, selector: "rw-list", inputs: { editLink: "editLink", apiName: "apiName", rel: "rel", rowsPerPage: "rowsPerPage" }, ngImport: i0, template: "<p-table [value]=\"value\"\r\n [lazy]=\"true\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"true\"\r\n [rows]=\"rows\"\r\n [rowsPerPageOptions]=\"rowsPerPage\"\r\n [totalRecords]=\"totalRecords\"\r\n [loading]=\"isLoading\"\r\n [showInitialSortBadge]=\"true\"\r\n [columns]=\"columns\">\r\n\r\n
|
|
362
|
+
RESTworldListViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: RESTworldListViewComponent, deps: [{ token: i1.RESTworldClientCollection }, { token: i2.ConfirmationService }, { token: i2.MessageService }, { token: i3.AvatarGenerator }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
363
|
+
RESTworldListViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: RESTworldListViewComponent, selector: "rw-list", inputs: { editLink: "editLink", apiName: "apiName", rel: "rel", sortField: "sortField", sortOrder: "sortOrder", rowsPerPage: "rowsPerPage", createButtonMenu: "createButtonMenu" }, usesOnChanges: true, ngImport: i0, template: "<p-table [value]=\"value\"\r\n [lazy]=\"true\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"true\"\r\n [rows]=\"rows\"\r\n [rowsPerPageOptions]=\"rowsPerPage\"\r\n [totalRecords]=\"totalRecords\"\r\n [loading]=\"isLoading\"\r\n [showInitialSortBadge]=\"true\"\r\n [columns]=\"columns\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\">\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.field\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center\">\r\n {{col.header}}\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n <p-columnFilter [type]=\"col.type\" [field]=\"col.field\" display=\"menu\"></p-columnFilter>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"mx-2\">\r\n <a *ngIf=\"!createButtonMenu\" class=\"p-button-success\" icon=\"fas fa-plus\" pButton [routerLink]=\"[editLink, apiName, newHref]\" pTooltip=\"Create new\" tooltipPosition=\"left\"></a>\r\n <p-splitButton *ngIf=\"createButtonMenu\" styleClass=\"p-button-success\" icon=\"fas fa-plus\" pTooltip=\"Create new\" tooltipPosition=\"left\" (onClick)=\"createNew()\" [model]=\"createButtonMenu\" appendTo=\"body\"></p-splitButton>\r\n </div>\r\n </div>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\">\r\n <tr>\r\n <td [ngSwitch]=\"col.type\" *ngFor=\"let col of columns\">\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <p-avatar *ngIf=\"col.field === 'createdBy' || col.field === 'lastChangedBy'\" [pTooltip]=\"entity[col.field]\" tooltipPosition=\"top\" [image]=\"avatarGenerator.getImage(entity[col.field])\" [label]=\"avatarGenerator.getLabel(entity[col.field])\" [style]=\"avatarGenerator.getStyle(entity[col.field])\" shape=\"circle\"></p-avatar>\r\n <span *ngIf=\"col.field !== 'createdBy' && col.field !== 'lastChangedBy'\">{{entity[col.field]}}</span>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'numeric'\" class=\"flex justify-content-end\">{{entity[col.field]}}</span>\r\n <span *ngSwitchCase=\"'boolean'\" class=\"flex justify-content-center\"><p-triStateCheckbox [(ngModel)]=\"entity[col.field]\" [readonly]=\"true\"></p-triStateCheckbox></span>\r\n <span *ngSwitchCase=\"'date'\" [pTooltip]=\"entity[col.field]\">{{entity[col.field] | date:dateFormat}}</span>\r\n <span *ngSwitchCase=\"'array'\" class=\"flex justify-content-end\"><p *ngFor=\"let arrayElement of entity[col.field]\">{{arrayElement | json}}</p></span>\r\n <span *ngSwitchCase=\"'object'\" class=\"flex justify-content-end\">{{entity[col.field] | json}}</span>\r\n </td>\r\n <td>\r\n <div class=\"flex justify-content-end\">\r\n <a pButton pTooltip=\"View/Edit\" tooltipPosition=\"left\" [routerLink]=\"[editLink, apiName, entity._links?.self[0].href]\" icon=\"fas fa-edit\"></a>\r\n <button pTooltip=\"Delete\" tooltipPosition=\"left\" pButton *ngIf=\"entity._links.delete\" (click)=\"showDeleteConfirmatioModal(entity)\" icon=\"fas fa-trash-alt\" type=\"button\" class=\"mx-2 p-button-danger\"></button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"8\">No entries found.</td>\r\n </tr>\r\n </ng-template>\r\n\r\n</p-table>\r\n\r\n<p-toast></p-toast>\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"], components: [{ type: i5.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i5.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { type: i5.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping"] }, { type: i6.SplitButton, selector: "p-splitButton", inputs: ["model", "icon", "iconPos", "label", "style", "styleClass", "menuStyle", "menuStyleClass", "disabled", "tabindex", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onClick", "onDropdownClick"] }, { type: i7.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass"] }, { type: i8.TriStateCheckbox, selector: "p-triStateCheckbox", inputs: ["disabled", "name", "ariaLabelledBy", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon"], outputs: ["onChange"] }, { type: i9.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i10.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }], directives: [{ type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i12.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i13.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i11.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i11.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "date": i11.DatePipe, "json": i11.JsonPipe } });
|
|
329
364
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: RESTworldListViewComponent, decorators: [{
|
|
330
365
|
type: Component,
|
|
331
|
-
args: [{ selector: 'rw-list', template: "<p-table [value]=\"value\"\r\n [lazy]=\"true\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"true\"\r\n [rows]=\"rows\"\r\n [rowsPerPageOptions]=\"rowsPerPage\"\r\n [totalRecords]=\"totalRecords\"\r\n [loading]=\"isLoading\"\r\n [showInitialSortBadge]=\"true\"\r\n [columns]=\"columns\">\r\n\r\n
|
|
332
|
-
}], ctorParameters: function () { return [{ type: i1.RESTworldClientCollection }, { type: i2.ConfirmationService }, { type: i2.MessageService }, { type: i3.AvatarGenerator }]; }, propDecorators: { editLink: [{
|
|
366
|
+
args: [{ selector: 'rw-list', template: "<p-table [value]=\"value\"\r\n [lazy]=\"true\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"true\"\r\n [rows]=\"rows\"\r\n [rowsPerPageOptions]=\"rowsPerPage\"\r\n [totalRecords]=\"totalRecords\"\r\n [loading]=\"isLoading\"\r\n [showInitialSortBadge]=\"true\"\r\n [columns]=\"columns\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\">\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.field\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center\">\r\n {{col.header}}\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n <p-columnFilter [type]=\"col.type\" [field]=\"col.field\" display=\"menu\"></p-columnFilter>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"mx-2\">\r\n <a *ngIf=\"!createButtonMenu\" class=\"p-button-success\" icon=\"fas fa-plus\" pButton [routerLink]=\"[editLink, apiName, newHref]\" pTooltip=\"Create new\" tooltipPosition=\"left\"></a>\r\n <p-splitButton *ngIf=\"createButtonMenu\" styleClass=\"p-button-success\" icon=\"fas fa-plus\" pTooltip=\"Create new\" tooltipPosition=\"left\" (onClick)=\"createNew()\" [model]=\"createButtonMenu\" appendTo=\"body\"></p-splitButton>\r\n </div>\r\n </div>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\">\r\n <tr>\r\n <td [ngSwitch]=\"col.type\" *ngFor=\"let col of columns\">\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <p-avatar *ngIf=\"col.field === 'createdBy' || col.field === 'lastChangedBy'\" [pTooltip]=\"entity[col.field]\" tooltipPosition=\"top\" [image]=\"avatarGenerator.getImage(entity[col.field])\" [label]=\"avatarGenerator.getLabel(entity[col.field])\" [style]=\"avatarGenerator.getStyle(entity[col.field])\" shape=\"circle\"></p-avatar>\r\n <span *ngIf=\"col.field !== 'createdBy' && col.field !== 'lastChangedBy'\">{{entity[col.field]}}</span>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'numeric'\" class=\"flex justify-content-end\">{{entity[col.field]}}</span>\r\n <span *ngSwitchCase=\"'boolean'\" class=\"flex justify-content-center\"><p-triStateCheckbox [(ngModel)]=\"entity[col.field]\" [readonly]=\"true\"></p-triStateCheckbox></span>\r\n <span *ngSwitchCase=\"'date'\" [pTooltip]=\"entity[col.field]\">{{entity[col.field] | date:dateFormat}}</span>\r\n <span *ngSwitchCase=\"'array'\" class=\"flex justify-content-end\"><p *ngFor=\"let arrayElement of entity[col.field]\">{{arrayElement | json}}</p></span>\r\n <span *ngSwitchCase=\"'object'\" class=\"flex justify-content-end\">{{entity[col.field] | json}}</span>\r\n </td>\r\n <td>\r\n <div class=\"flex justify-content-end\">\r\n <a pButton pTooltip=\"View/Edit\" tooltipPosition=\"left\" [routerLink]=\"[editLink, apiName, entity._links?.self[0].href]\" icon=\"fas fa-edit\"></a>\r\n <button pTooltip=\"Delete\" tooltipPosition=\"left\" pButton *ngIf=\"entity._links.delete\" (click)=\"showDeleteConfirmatioModal(entity)\" icon=\"fas fa-trash-alt\" type=\"button\" class=\"mx-2 p-button-danger\"></button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"8\">No entries found.</td>\r\n </tr>\r\n </ng-template>\r\n\r\n</p-table>\r\n\r\n<p-toast></p-toast>\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"] }]
|
|
367
|
+
}], ctorParameters: function () { return [{ type: i1.RESTworldClientCollection }, { type: i2.ConfirmationService }, { type: i2.MessageService }, { type: i3.AvatarGenerator }, { type: i4.Router }]; }, propDecorators: { editLink: [{
|
|
333
368
|
type: Input
|
|
334
369
|
}], apiName: [{
|
|
335
370
|
type: Input
|
|
336
371
|
}], rel: [{
|
|
337
372
|
type: Input
|
|
373
|
+
}], sortField: [{
|
|
374
|
+
type: Input
|
|
375
|
+
}], sortOrder: [{
|
|
376
|
+
type: Input
|
|
338
377
|
}], rowsPerPage: [{
|
|
339
378
|
type: Input
|
|
379
|
+
}], createButtonMenu: [{
|
|
380
|
+
type: Input
|
|
340
381
|
}] } });
|
|
341
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQXVCLGVBQWUsRUFBaUQsTUFBTSxhQUFhLENBQUM7QUFHbEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFHOUQsTUFBTSxDQUFOLElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQiwyQkFBYSxDQUFBO0lBQ2IsaUNBQW1CLENBQUE7SUFDbkIsaUNBQW1CLENBQUE7SUFDbkIsMkJBQWEsQ0FBQTtBQUNmLENBQUMsRUFMVyxVQUFVLEtBQVYsVUFBVSxRQUtyQjtBQWFELE1BQU0sT0FBTywwQkFBMEI7SUF3RXJDLFlBQ1UsUUFBbUMsRUFDbkMsb0JBQXlDLEVBQ3pDLGVBQStCLEVBQ2hDLGVBQWdDO1FBSC9CLGFBQVEsR0FBUixRQUFRLENBQTJCO1FBQ25DLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDekMsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXZFakMsYUFBUSxHQUFhLEVBQUUsQ0FBQztRQVN4Qixj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QkFBMEIsNklDM0J2Qyw0akdBOERBOzJGRG5DYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UsU0FBUzs2TUFXUixRQUFRO3NCQURsQixLQUFLO2dCQVVLLE9BQU87c0JBRGpCLEtBQUs7Z0JBV0ssR0FBRztzQkFEYixLQUFLO2dCQVdDLFdBQVc7c0JBRGpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBhZ2VkTGlzdFJlc291cmNlLCBSZXNvdXJjZSB9IGZyb20gJ0B3ZXJ0enVpL25neC1oYWwtY2xpZW50JztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBGaWx0ZXJNYXRjaE1vZGUsIEZpbHRlck1ldGFkYXRhLCBMYXp5TG9hZEV2ZW50LCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgUkVTVHdvcmxkQ2xpZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudCc7XHJcbmltcG9ydCB7IFJFU1R3b3JsZENsaWVudENvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50LWNvbGxlY3Rpb24nO1xyXG5pbXBvcnQgeyBQcm9ibGVtRGV0YWlscyB9IGZyb20gJy4uLy4uL21vZGVscy9wcm9ibGVtLWRldGFpbHMnO1xyXG5pbXBvcnQgeyBBdmF0YXJHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdmF0YXItZ2VuZXJhdG9yJztcclxuXHJcbmV4cG9ydCBlbnVtIENvbHVtblR5cGUge1xyXG4gIHRleHQgPSAndGV4dCcsXHJcbiAgbnVtZXJpYyA9ICdudW1lcmljJyxcclxuICBib29sZWFuID0gJ2Jvb2xlYW4nLFxyXG4gIGRhdGUgPSAnZGF0ZSdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW4ge1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgdHlwZTogQ29sdW1uVHlwZTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdydy1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50IHtcclxuXHJcbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IENvbHVtbltdIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xyXG4gIH1cclxuICBwcml2YXRlIF9jb2x1bW5zOiBDb2x1bW5bXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBlZGl0TGluayh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsdWUpXHJcbiAgICAgIHRoaXMuX2VkaXRMaW5rID0gdmFsdWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgZWRpdExpbmsoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWRpdExpbms7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2VkaXRMaW5rID0gJy9lZGl0JztcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgYXBpTmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9hcGlOYW1lID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5hcGlOYW1lICYmIHRoaXMucmVsICYmIHRoaXMuX2xhc3RFdmVudClcclxuICAgICAgdGhpcy5sb2FkKHRoaXMuX2xhc3RFdmVudCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgYXBpTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FwaU5hbWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FwaU5hbWU/OiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHJlbCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9yZWwgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmFwaU5hbWUgJiYgdGhpcy5yZWwgJiYgdGhpcy5fbGFzdEV2ZW50KVxyXG4gICAgICB0aGlzLmxvYWQodGhpcy5fbGFzdEV2ZW50KTtcclxuICB9XHJcbiAgcHVibGljIGdldCByZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWw7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3JlbD86IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByb3dzUGVyUGFnZTogbnVtYmVyW107XHJcbiAgcHVibGljIHJlc291cmNlPzogUGFnZWRMaXN0UmVzb3VyY2U7XHJcbiAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3RvdGFsUmVjb3JkcyA9IDA7XHJcbiAgcHJpdmF0ZSBfbGFzdEV2ZW50OiBMYXp5TG9hZEV2ZW50O1xyXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogUmVzb3VyY2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZT8uX2VtYmVkZGVkPy5pdGVtcyB8fCBbXTtcclxuICB9XHJcbiAgcHVibGljIGdldCByb3dzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGFzdEV2ZW50Py5yb3dzIHx8IDA7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgdG90YWxSZWNvcmRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fdG90YWxSZWNvcmRzO1xyXG4gIH1cclxuICBwcml2YXRlIHNldCB0b3RhbFJlY29yZHModmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fdG90YWxSZWNvcmRzID0gdmFsdWUgfHwgMDtcclxuICB9XHJcbiAgcHVibGljIGdldCBzb3J0T3JkZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGFzdEV2ZW50LnNvcnRPcmRlciB8fCAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBuZXdIcmVmKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZT8uZmluZExpbmsoJ25ldycpPy5ocmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2RhdGVGb3JtYXQgPSBuZXcgRGF0ZSgzMzMzLCAxMCwgMjIpXHJcbiAgICAudG9Mb2NhbGVEYXRlU3RyaW5nKClcclxuICAgIC5yZXBsYWNlKFwiMjJcIiwgXCJkZFwiKVxyXG4gICAgLnJlcGxhY2UoXCIxMVwiLCBcIk1NXCIpXHJcbiAgICAucmVwbGFjZShcIjMzMzNcIiwgXCJ5XCIpXHJcbiAgICAucmVwbGFjZShcIjMzXCIsIFwieXlcIik7XHJcblxyXG4gIHB1YmxpYyBnZXQgZGF0ZUZvcm1hdCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50Ll9kYXRlRm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jbGllbnRzOiBSRVNUd29ybGRDbGllbnRDb2xsZWN0aW9uLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHB1YmxpYyBhdmF0YXJHZW5lcmF0b3I6IEF2YXRhckdlbmVyYXRvcikge1xyXG4gICAgdGhpcy5yb3dzUGVyUGFnZSA9IFsxMCwgMjUsIDUwXTtcclxuXHJcbiAgICB0aGlzLl9sYXN0RXZlbnQgPSB7XHJcbiAgICAgIHJvd3M6IHRoaXMucm93c1BlclBhZ2VbMF1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENsaWVudCgpOiBSRVNUd29ybGRDbGllbnQge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBhIGNsaWVudCwgYmVjYXVzZSB0aGUgYXBpTmFtZSBpcyBub3Qgc2V0LicpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9jbGllbnRzLmdldENsaWVudCh0aGlzLmFwaU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWQoZXZlbnQ6IExhenlMb2FkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lIHx8ICF0aGlzLnJlbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuX2xhc3RFdmVudCA9IGV2ZW50O1xyXG5cclxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmNyZWF0ZVBhcmFtZXRlcnNGcm9tRXZlbnQoZXZlbnQpO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLmdldExpc3QodGhpcy5yZWwsIHBhcmFtZXRlcnMpO1xyXG4gICAgaWYgKCFyZXNwb25zZS5vayB8fCBQcm9ibGVtRGV0YWlscy5pc1Byb2JsZW1EZXRhaWxzKHJlc3BvbnNlLmJvZHkpIHx8ICFyZXNwb25zZS5ib2R5KSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6ICdFcnJvciB3aGlsZSBsb2FkaW5nIHRoZSByZXNvdXJjZXMgZnJvbSB0aGUgQVBJLicsIGRhdGE6IHJlc3BvbnNlIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocmVzcG9uc2UuYm9keSkge1xyXG4gICAgICB0aGlzLnJlc291cmNlID0gcmVzcG9uc2UuYm9keTtcclxuICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSB0aGlzLnJlc291cmNlLnRvdGFsUGFnZXMgJiYgcGFyYW1ldGVycy4kdG9wID8gdGhpcy5yZXNvdXJjZS50b3RhbFBhZ2VzICogcGFyYW1ldGVycy4kdG9wIDogdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLl9jb2x1bW5zID0gdGhpcy5jcmVhdGVDb2x1bW5zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgc2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwocmVzb3VyY2U6IFJlc291cmNlKSB7XHJcbiAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG4gICAgICBtZXNzYWdlOiAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlc291cmNlPycsXHJcbiAgICAgIGhlYWRlcjogJ0NvbmZpcm0gZGVsZXRlJyxcclxuICAgICAgaWNvbjogJ2ZhciBmYS10cmFzaC1hbHQnLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHRoaXMuZGVsZXRlKHJlc291cmNlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGVsZXRlKHJlc291cmNlOiBSZXNvdXJjZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUgfHwgIXRoaXMucmVsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5kZWxldGUocmVzb3VyY2UpO1xyXG5cclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdEZWxldGVkJywgZGV0YWlsOiAnVGhlIHJlc291cmNlIGhhcyBiZWVuIGRlbGV0ZWQuJyB9KTtcclxuXHJcbiAgICB0aGlzLmxvYWQodGhpcy5fbGFzdEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ29sdW1ucygpOiBDb2x1bW5bXSB7XHJcbiAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPT09IDApXHJcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnM7XHJcblxyXG4gICAgLy8gR2V0IGFsbCBkaXN0aW5jdCBwcm9wZXJ0aWVzIGZyb20gYWxsIHJvd3NcclxuICAgIC8vIFdlIGxvb2sgYXQgYWxsIHJvd3MgdG8gZWxpbWluYXRlIHBvc3NpYmxlIHVuZGVmaW5lZCB2YWx1ZXNcclxuICAgIGNvbnN0IHJvd3NXaXRoUHJvcGVydGllcyA9IHRoaXMudmFsdWVcclxuICAgICAgLm1hcChyZXNvdXJjZSA9PlxyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc291cmNlKVxyXG4gICAgICAgICAgLmZpbHRlcihwID0+XHJcbiAgICAgICAgICAgIHBbMF0gIT09ICdfbGlua3MnICYmXHJcbiAgICAgICAgICAgIHBbMF0gIT09ICdfZW1iZWRkZWQnICYmXHJcbiAgICAgICAgICAgIHBbMF0gIT09ICdpZCcgJiZcclxuICAgICAgICAgICAgcFswXSAhPT0gJ3RpbWVzdGFtcCcpKTtcclxuXHJcbiAgICBjb25zdCBkaXN0aW5jdFByb3BlcnRpZXMgPSByb3dzV2l0aFByb3BlcnRpZXNbMF07XHJcbiAgICBmb3IgKGNvbnN0IHByb3BlcnRpZXNPZlJvdyBvZiByb3dzV2l0aFByb3BlcnRpZXMpIHtcclxuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzT2ZSb3cpIHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eVswXTtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlbMV07XHJcbiAgICAgICAgY29uc3QgYWxyZWFkeUZvdW5kUHJvcGVydHlXaXRoU2FtZU5hbWUgPSBkaXN0aW5jdFByb3BlcnRpZXMuZmluZChwID0+IHBbMF0gPT09IHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgaWYgKCFhbHJlYWR5Rm91bmRQcm9wZXJ0eVdpdGhTYW1lTmFtZSkgLy8gQWRkIG5ldyBwcm9wZXJ0eVxyXG4gICAgICAgICAgZGlzdGluY3RQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xyXG4gICAgICAgIGVsc2UgaWYgKCFhbHJlYWR5Rm91bmRQcm9wZXJ0eVdpdGhTYW1lTmFtZVsxXSAmJiBwcm9wZXJ0eVZhbHVlKSAvLyBVc2UgZGVmaW5lZCB2YWx1ZSBpbnN0ZWFkIG9mIGV4aXN0aW5nIHVuZGVmaW5lZCB2YWx1ZVxyXG4gICAgICAgICAgYWxyZWFkeUZvdW5kUHJvcGVydHlXaXRoU2FtZU5hbWVbMV0gPSBwcm9wZXJ0eVZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHJvd3MgYXJlIGVudGl0aWVzIHdpdGggY2hhbmdlIHRyYWNraW5nXHJcbiAgICBjb25zdCB3aXRob3V0Q2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzID0gZGlzdGluY3RQcm9wZXJ0aWVzLmZpbHRlcihwID0+XHJcbiAgICAgIHBbMF0gIT09ICdjcmVhdGVkQXQnICYmXHJcbiAgICAgIHBbMF0gIT09ICdjcmVhdGVkQnknICYmXHJcbiAgICAgIHBbMF0gIT09ICdsYXN0Q2hhbmdlZEF0JyAmJlxyXG4gICAgICBwWzBdICE9PSAnbGFzdENoYW5nZWRCeScpO1xyXG4gICAgY29uc3QgaGFzQ2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzID0gd2l0aG91dENoYW5nZVRyYWNraW5nUHJvcGVydGllcy5sZW5ndGggPCBkaXN0aW5jdFByb3BlcnRpZXMubGVuZ3RoO1xyXG5cclxuICAgIC8vIEZpcnN0IHRoZSBpZCwgdGhlbiBhbGwgb3RoZXIgcHJvcGVydGllc1xyXG4gICAgY29uc3Qgc29ydGVkUHJvcGVydGllczogW3N0cmluZywgdW5rbm93bl1bXSA9IFtcclxuICAgICAgWydpZCcsIDBdLFxyXG4gICAgICAuLi53aXRob3V0Q2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIEFuZCBjaGFuZ2UgdHJhY2tpbmcgcHJvcGVydGllcyBhdCB0aGUgZW5kXHJcbiAgICBpZiAoaGFzQ2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHNvcnRlZFByb3BlcnRpZXMucHVzaChbJ2NyZWF0ZWRBdCcsIG5ldyBEYXRlKCldKTtcclxuICAgICAgc29ydGVkUHJvcGVydGllcy5wdXNoKFsnY3JlYXRlZEJ5JywgJyddKTtcclxuICAgICAgc29ydGVkUHJvcGVydGllcy5wdXNoKFsnbGFzdENoYW5nZWRBdCcsIG5ldyBEYXRlKCldKTtcclxuICAgICAgc29ydGVkUHJvcGVydGllcy5wdXNoKFsnbGFzdENoYW5nZWRCeScsICcnXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29sdW1ucyA9IHNvcnRlZFByb3BlcnRpZXNcclxuICAgICAgLm1hcChwID0+ICh7XHJcbiAgICAgICAgaGVhZGVyOiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC50b1RpdGxlQ2FzZShwWzBdKSxcclxuICAgICAgICBmaWVsZDogcFswXSxcclxuICAgICAgICB0eXBlOiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5nZXRDb2x1bW5UeXBlKHBbMV0pLFxyXG4gICAgICB9KSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRDb2x1bW5UeXBlKHZhbHVlOiB1bmtub3duKTogQ29sdW1uVHlwZSB7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgcmV0dXJuIENvbHVtblR5cGUudGV4dDtcclxuXHJcbiAgICBpZiAoXy5pc051bWJlcih2YWx1ZSkpXHJcbiAgICAgIHJldHVybiBDb2x1bW5UeXBlLm51bWVyaWM7XHJcblxyXG4gICAgaWYgKF8uaXNEYXRlKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIENvbHVtblR5cGUuZGF0ZTtcclxuXHJcbiAgICBpZiAoXy5pc1N0cmluZyh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiBDb2x1bW5UeXBlLnRleHQ7XHJcblxyXG4gICAgaWYgKF8uaXNCb29sZWFuKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIENvbHVtblR5cGUuYm9vbGVhbjtcclxuXHJcbiAgICByZXR1cm4gQ29sdW1uVHlwZS50ZXh0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgdG9UaXRsZUNhc2UoYW55Q2FzZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gYW55Q2FzZVxyXG4gICAgICAucmVwbGFjZSgvKF8pKy9nLCAnICcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdW5kZXJzY29yZSB0byB3aGl0ZXNwYWNlXHJcbiAgICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdW2Etel0pL2csIFwiJDEgJDJcIikgICAgICAgICAgIC8vIGluc2VydCBzcGFjZSBiZWZvcmUgZWFjaCBuZXcgd29yZCBpZiB0aGVyZSBpcyBub25lXHJcbiAgICAgIC5yZXBsYWNlKC8oW0EtWl1bYS16XSkoW0EtWl0pL2csIFwiJDEgJDJcIikgICAgICAgICAgIC8vIGluc2VydCBzcGFjZSBhZnRlciBlYWNoIHdvcmQgaWYgdGhlcmUgaXMgbm9uZVxyXG4gICAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXStbYS16XSkvZywgXCIkMSAkMlwiKSAgICAgICAgICAvLyBpbnNlcnQgc3BhY2UgYWZ0ZXIgc2luZ2xlIGxldHRlciB3b3JkIGlmIHRoZXJlIGlzIG5vbmVcclxuICAgICAgLnJlcGxhY2UoLyhbQS1aXSspKFtBLVpdW2Etel1bYS16XSkvZywgXCIkMSAkMlwiKSAgICAgLy8gaW5zZXJ0IHNwYWNlIGJlZm9yZSBzaW5nbGUgbGV0dGVyIHdvcmQgaWYgdGhlcmUgaXMgbm9uZVxyXG4gICAgICAucmVwbGFjZSgvKFthLXpdKykoW0EtWjAtOV0rKS9nLCBcIiQxICQyXCIpICAgICAgICAgICAvLyBpbnNlcnQgc3BhY2UgYWZ0ZXIgbnVtYmVyc1xyXG4gICAgICAucmVwbGFjZSgvXi4vLCAobWF0Y2gpID0+IG1hdGNoLnRvVXBwZXJDYXNlKCkpOyAgICAgLy8gY2hhbmdlIGZpcnN0IGxldHRlciB0byBiZSB1cHBlciBjYXNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVBhcmFtZXRlcnNGcm9tRXZlbnQoZXZlbnQ6IExhenlMb2FkRXZlbnQpIHtcclxuICAgIGNvbnN0IG9EYXRhUGFyYW1ldGVycyA9IHtcclxuICAgICAgJGZpbHRlcjogdGhpcy5jcmVhdGVGaWx0ZXJGcm9tRXZlbnQoZXZlbnQpLFxyXG4gICAgICAkb3JkZXJieTogUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuY3JlYXRlT3JkZXJCeUZyb21FdmVudChldmVudCksXHJcbiAgICAgICR0b3A6IFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50LmNyZWF0ZVRvcEZyb21FdmVudChldmVudCksXHJcbiAgICAgICRza2lwOiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5jcmVhdGVTa2lwRnJvbUV2ZW50KGV2ZW50KVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gb0RhdGFQYXJhbWV0ZXJzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZVNraXBGcm9tRXZlbnQoZXZlbnQ6IExhenlMb2FkRXZlbnQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGV2ZW50LmZpcnN0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZVRvcEZyb21FdmVudChldmVudDogTGF6eUxvYWRFdmVudCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gZXZlbnQucm93cztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVPcmRlckJ5RnJvbUV2ZW50KGV2ZW50OiBMYXp5TG9hZEV2ZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmIChldmVudC5zb3J0RmllbGQpIHtcclxuICAgICAgY29uc3Qgb3JkZXIgPSAhZXZlbnQuc29ydE9yZGVyIHx8IGV2ZW50LnNvcnRPcmRlciA+IDAgPyAnYXNjJyA6ICdkZXNjJztcclxuICAgICAgcmV0dXJuIGAke2V2ZW50LnNvcnRGaWVsZH0gJHtvcmRlcn1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZpbHRlckZyb21FdmVudChldmVudDogTGF6eUxvYWRFdmVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIWV2ZW50LmZpbHRlcnMpXHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3QgZmlsdGVyID0gT2JqZWN0LmVudHJpZXMoZXZlbnQuZmlsdGVycylcclxuICAgICAgLy8gVGhlIHR5cGUgZGVmaW5pdGlvbiBpcyB3cm9uZywgZXZlbnQuZmlsdGVycyBoYXMgdmFsdWVzIG9mIHR5cGUgRmlsdGVyTWV0YWRhdGFbXSBhbmQgbm90IEZpbHRlck1ldGFkYXRhLlxyXG4gICAgICAubWFwKChbcHJvcGVydHksIGZpbHRlcl0pID0+ICh7IHByb3BlcnR5OiBwcm9wZXJ0eSwgZmlsdGVyczogZmlsdGVyIGFzIEZpbHRlck1ldGFkYXRhW10gfSkpXHJcbiAgICAgIC5tYXAoZiA9PiB0aGlzLmNyZWF0ZUZpbHRlckZvclByb3BlcnR5QXJyYXkoZi5wcm9wZXJ0eSwgZi5maWx0ZXJzKSlcclxuICAgICAgLmZpbHRlcihmID0+ICEhZilcclxuICAgICAgLmpvaW4oJyBhbmQgJyk7XHJcblxyXG4gICAgaWYgKGZpbHRlciA9PT0gJycpXHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgcmV0dXJuIGAoJHtmaWx0ZXJ9KWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZpbHRlckZvclByb3BlcnR5QXJyYXkocHJvcGVydHk6IHN0cmluZywgZmlsdGVyczogRmlsdGVyTWV0YWRhdGFbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJzXHJcbiAgICAgIC5tYXAoZiA9PiB0aGlzLmNyZWF0ZUZpbHRlckZvclByb3BlcnR5KHByb3BlcnR5LCBmKSlcclxuICAgICAgLmZpbHRlcihmID0+ICEhZilcclxuICAgICAgLmpvaW4oYCAke2ZpbHRlcnNbMF0ub3BlcmF0b3J9IGApO1xyXG5cclxuICAgIGlmIChmaWx0ZXIgPT09ICcnKVxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIHJldHVybiBgKCR7ZmlsdGVyfSlgO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWx0ZXJGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nLCBmaWx0ZXI6IEZpbHRlck1ldGFkYXRhKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghZmlsdGVyLnZhbHVlKVxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0IG9EYXRhT3BlcmF0b3IgPSBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5jcmVhdGVPRGF0YU9wZXJhdG9yKFxyXG4gICAgICBmaWx0ZXIubWF0Y2hNb2RlLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNvbXBhcmlzb25WYWx1ZSA9IHRoaXMuY3JlYXRlQ29tcGFyaXNvblZhbHVlKHByb3BlcnR5LCBmaWx0ZXIudmFsdWUpO1xyXG5cclxuICAgIHN3aXRjaCAob0RhdGFPcGVyYXRvcikge1xyXG4gICAgICBjYXNlICdjb250YWlucyc6XHJcbiAgICAgIGNhc2UgJ25vdCBjb250YWlucyc6XHJcbiAgICAgIGNhc2UgJ3N0YXJ0c3dpdGgnOlxyXG4gICAgICBjYXNlICdlbmRzd2l0aCc6XHJcbiAgICAgICAgcmV0dXJuIGAke29EYXRhT3BlcmF0b3J9KCR7cHJvcGVydHl9LCAke2NvbXBhcmlzb25WYWx1ZX0pYDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gYCR7cHJvcGVydHl9ICR7b0RhdGFPcGVyYXRvcn0gJHtjb21wYXJpc29uVmFsdWV9YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZU9EYXRhT3BlcmF0b3IobWF0Y2hNb2RlPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAobWF0Y2hNb2RlKSB7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLlNUQVJUU19XSVRIOlxyXG4gICAgICAgIHJldHVybiAnc3RhcnRzd2l0aCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkNPTlRBSU5TOlxyXG4gICAgICAgIHJldHVybiAnY29udGFpbnMnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5OT1RfQ09OVEFJTlM6XHJcbiAgICAgICAgcmV0dXJuICdub3QgY29udGFpbnMnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5FTkRTX1dJVEg6XHJcbiAgICAgICAgcmV0dXJuICdlbmRzd2l0aCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVRVUFMUzpcclxuICAgICAgICByZXR1cm4gJ2VxJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTk9UX0VRVUFMUzpcclxuICAgICAgICByZXR1cm4gJ25lJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuSU46XHJcbiAgICAgICAgcmV0dXJuICdpbic7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkxFU1NfVEhBTjpcclxuICAgICAgICByZXR1cm4gJ2x0JztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTEVTU19USEFOX09SX0VRVUFMX1RPOlxyXG4gICAgICAgIHJldHVybiAnbGUnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5HUkVBVEVSX1RIQU46XHJcbiAgICAgICAgcmV0dXJuICdndCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UTzpcclxuICAgICAgICByZXR1cm4gJ2dlJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuSVM6XHJcbiAgICAgICAgcmV0dXJuICdlcSc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLklTX05PVDpcclxuICAgICAgICByZXR1cm4gJ25lJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQkVGT1JFOlxyXG4gICAgICAgIHJldHVybiAnbHQnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5BRlRFUjpcclxuICAgICAgICByZXR1cm4gJ2d0JztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuREFURV9BRlRFUjpcclxuICAgICAgICByZXR1cm4gJ2dlJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuREFURV9CRUZPUkU6XHJcbiAgICAgICAgcmV0dXJuICdsdCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVM6XHJcbiAgICAgICAgcmV0dXJuICdlcSc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVNfTk9UOlxyXG4gICAgICAgIHJldHVybiAnbmUnO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IEVycm9yKGBVbmtub3duIG1hdGNoTW9kZSAke21hdGNoTW9kZX1gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ29tcGFyaXNvblZhbHVlKHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICByZXR1cm4gJ251bGwnO1xyXG5cclxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy5maWVsZCA9PT0gcHJvcGVydHkpO1xyXG4gICAgaWYgKGNvbHVtbnMubGVuZ3RoICE9PSAxKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBjb2x1bW4gZm9yIHRoZSBwcm9wZXJ0eSAke3Byb3BlcnR5fSB3aGljaCBpcyBzcGVjaWZpZWQgaW4gdGhlIGZpbHRlci5gKTtcclxuXHJcbiAgICBjb25zdCB0eXBlID0gY29sdW1uc1swXS50eXBlO1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIENvbHVtblR5cGUuYm9vbGVhbjpcclxuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcclxuICAgICAgY2FzZSBDb2x1bW5UeXBlLmRhdGU6XHJcbiAgICAgICAgcmV0dXJuIGBjYXN0KCR7KHZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCl9LCBFZG0uRGF0ZVRpbWVPZmZzZXQpYDtcclxuICAgICAgY2FzZSBDb2x1bW5UeXBlLm51bWVyaWM6XHJcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWA7XHJcbiAgICAgIGNhc2UgQ29sdW1uVHlwZS50ZXh0OlxyXG4gICAgICAgIHJldHVybiBgJyR7dmFsdWV9J2A7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbHVtbiB0eXBlICcke3R5cGV9J2ApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8cC10YWJsZSBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgICBbbGF6eV09XCJ0cnVlXCJcclxuICAgICAgICAgW2xhenlMb2FkT25Jbml0XT1cImZhbHNlXCJcclxuICAgICAgICAgKG9uTGF6eUxvYWQpPVwibG9hZCgkZXZlbnQpXCJcclxuICAgICAgICAgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXHJcbiAgICAgICAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXHJcbiAgICAgICAgIFtyb3dzXT1cInJvd3NcIlxyXG4gICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cInJvd3NQZXJQYWdlXCJcclxuICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICBbc2hvd0luaXRpYWxTb3J0QmFkZ2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG4gICAgPHRyPlxyXG4gICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCIgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wuZmllbGRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1kLWZsZXggcC1qYy1iZXR3ZWVuIHAtYWktY2VudGVyXCI+XHJcbiAgICAgICAgICB7e2NvbC5oZWFkZXJ9fVxyXG4gICAgICAgICAgPHAtc29ydEljb24gW2ZpZWxkXT1cImNvbC5maWVsZFwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBbdHlwZV09XCJjb2wudHlwZVwiIFtmaWVsZF09XCJjb2wuZmllbGRcIiBkaXNwbGF5PVwibWVudVwiPjwvcC1jb2x1bW5GaWx0ZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGg+XHJcbiAgICAgIDx0aD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiIHBUb29sdGlwPVwiQ3JlYXRlIG5ld1wiIHRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzXCIgaWNvbj1cImZhcyBmYS1wbHVzXCIgcEJ1dHRvbiBbcm91dGVyTGlua109XCJbJy9lZGl0JywgYXBpTmFtZSwgbmV3SHJlZl1cIj48L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC90aD5cclxuICAgIDwvdHI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtZW50aXR5IGxldC1jb2x1bW5zPVwiY29sdW1uc1wiPlxyXG4gICAgPHRyPlxyXG4gICAgICA8dGQgW25nU3dpdGNoXT1cImNvbC50eXBlXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XHJcbiAgICAgICAgICA8cC1hdmF0YXIgKm5nSWY9XCJjb2wuZmllbGQgPT09ICdjcmVhdGVkQnknIHx8IGNvbC5maWVsZCA9PT0gJ2xhc3RDaGFuZ2VkQnknXCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wuZmllbGRdXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgW2ltYWdlXT1cImF2YXRhckdlbmVyYXRvci5nZXRJbWFnZShlbnRpdHlbY29sLmZpZWxkXSlcIiBbbGFiZWxdPVwiYXZhdGFyR2VuZXJhdG9yLmdldExhYmVsKGVudGl0eVtjb2wuZmllbGRdKVwiIFtzdHlsZV09XCJhdmF0YXJHZW5lcmF0b3IuZ2V0U3R5bGUoZW50aXR5W2NvbC5maWVsZF0pXCIgc2hhcGU9XCJjaXJjbGVcIj48L3AtYXZhdGFyPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2wuZmllbGQgIT09ICdjcmVhdGVkQnknICYmIGNvbC5maWVsZCAhPT0gJ2xhc3RDaGFuZ2VkQnknXCI+e3tlbnRpdHlbY29sLmZpZWxkXX19PC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtZXJpYydcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPnt7ZW50aXR5W2NvbC5maWVsZF19fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj48cC10cmlTdGF0ZUNoZWNrYm94IFsobmdNb2RlbCldPVwiZW50aXR5W2NvbC5maWVsZF1cIiBbcmVhZG9ubHldPVwidHJ1ZVwiPjwvcC10cmlTdGF0ZUNoZWNrYm94Pjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wuZmllbGRdXCI+e3tlbnRpdHlbY29sLmZpZWxkXSB8IGRhdGU6ZGF0ZUZvcm1hdH19PC9zcGFuPlxyXG4gICAgICA8L3RkPlxyXG4gICAgICA8dGQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgPGEgcEJ1dHRvbiBwVG9vbHRpcD1cIlZpZXcvRWRpdFwiIHRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIiBbcm91dGVyTGlua109XCJbZWRpdExpbmssIGFwaU5hbWUsIGVudGl0eS5fbGlua3M/LnNlbGZbMF0uaHJlZl1cIiBpY29uPVwiZmFzIGZhLWVkaXRcIj48L2E+XHJcbiAgICAgICAgICA8YnV0dG9uIHBUb29sdGlwPVwiRGVsZXRlXCIgdG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiIHBCdXR0b24gKm5nSWY9XCJlbnRpdHkuX2xpbmtzLmRlbGV0ZVwiIChjbGljayk9XCJzaG93RGVsZXRlQ29uZmlybWF0aW9Nb2RhbChlbnRpdHkpXCIgaWNvbj1cImZhcyBmYS10cmFzaC1hbHRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJteC0yIHAtYnV0dG9uLWRhbmdlclwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RkPlxyXG4gICAgPC90cj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICA8dHI+XHJcbiAgICAgIDx0ZCBjb2xzcGFuPVwiOFwiPk5vIGVudHJpZXMgZm91bmQuPC90ZD5cclxuICAgIDwvdHI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwvcC10YWJsZT5cclxuXHJcbjxwLXRvYXN0PjwvcC10b2FzdD5cclxuPHAtY29uZmlybURpYWxvZz48L3AtY29uZmlybURpYWxvZz5cclxuIl19
|
|
382
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxLQUFLLEVBQW9DLE1BQU0sZUFBZSxDQUFDO0FBRWxHLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBdUIsZUFBZSxFQUFxRSxNQUFNLGFBQWEsQ0FBQztBQUd0SSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJOUQsTUFBTSxDQUFOLElBQVksVUFPWDtBQVBELFdBQVksVUFBVTtJQUNwQiwyQkFBYSxDQUFBO0lBQ2IsaUNBQW1CLENBQUE7SUFDbkIsaUNBQW1CLENBQUE7SUFDbkIsMkJBQWEsQ0FBQTtJQUNiLDZCQUFlLENBQUE7SUFDZiwrQkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBUFcsVUFBVSxLQUFWLFVBQVUsUUFPckI7QUFhRCxNQUFNLE9BQU8sMEJBQTBCO0lBOEZyQyxZQUNVLFFBQW1DLEVBQ25DLG9CQUF5QyxFQUN6QyxlQUErQixFQUNoQyxlQUFnQyxFQUN0QixPQUFlO1FBSnhCLGFBQVEsR0FBUixRQUFRLENBQTJCO1FBQ25DLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDekMsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQ2hDLG9CQUFlLEdB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LEdBQUcsQ0FBQztLQUNwQixPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBRSxDQUFBO3VIQXhGWiwwQkFBMEI7MkdBQTFCLDBCQUEwQix3UEM5QnZDLDArSEFtRUE7MkZEckNhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSxTQUFTO2tPQVdSLFFBQVE7c0JBRGxCLEtBQUs7Z0JBVUssT0FBTztzQkFEakIsS0FBSztnQkFVSyxHQUFHO3NCQURiLEtBQUs7Z0JBV0ssU0FBUztzQkFEbkIsS0FBSztnQkFZSyxTQUFTO3NCQURuQixLQUFLO2dCQVlDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsZ0JBQWdCO3NCQUR0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFnZWRMaXN0UmVzb3VyY2UsIFJlc291cmNlIH0gZnJvbSAnQHdlcnR6dWkvbmd4LWhhbC1jbGllbnQnO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIEZpbHRlck1hdGNoTW9kZSwgRmlsdGVyTWV0YWRhdGEsIExhenlMb2FkRXZlbnQsIE1lbnVJdGVtLCBNZXNzYWdlU2VydmljZSwgU29ydE1ldGEgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFJFU1R3b3JsZENsaWVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQnO1xyXG5pbXBvcnQgeyBSRVNUd29ybGRDbGllbnRDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudC1jb2xsZWN0aW9uJztcclxuaW1wb3J0IHsgUHJvYmxlbURldGFpbHMgfSBmcm9tICcuLi8uLi9tb2RlbHMvcHJvYmxlbS1kZXRhaWxzJztcclxuaW1wb3J0IHsgQXZhdGFyR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXZhdGFyLWdlbmVyYXRvcic7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5leHBvcnQgZW51bSBDb2x1bW5UeXBlIHtcclxuICB0ZXh0ID0gJ3RleHQnLFxyXG4gIG51bWVyaWMgPSAnbnVtZXJpYycsXHJcbiAgYm9vbGVhbiA9ICdib29sZWFuJyxcclxuICBkYXRlID0gJ2RhdGUnLFxyXG4gIGFycmF5ID0gJ2FycmF5JyxcclxuICBvYmplY3QgPSAnb2JqZWN0J1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XHJcbiAgaGVhZGVyOiBzdHJpbmc7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICB0eXBlOiBDb2x1bW5UeXBlO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3J3LWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtbGlzdC12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtbGlzdC12aWV3LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBDb2x1bW5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcclxuICB9XHJcbiAgcHJpdmF0ZSBfY29sdW1uczogQ29sdW1uW10gPSBbXTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZWRpdExpbmsodmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbHVlKVxyXG4gICAgICB0aGlzLl9lZGl0TGluayA9IHZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGVkaXRMaW5rKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VkaXRMaW5rO1xyXG4gIH1cclxuICBwcml2YXRlIF9lZGl0TGluayA9ICcvZWRpdCc7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGFwaU5hbWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYXBpTmFtZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkKHRoaXMuX2xhc3RFdmVudCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgYXBpTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FwaU5hbWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FwaU5hbWU/OiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHJlbCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9yZWwgPSB2YWx1ZTtcclxuICAgIHRoaXMubG9hZCh0aGlzLl9sYXN0RXZlbnQpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcmVsPzogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgc29ydEZpZWxkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3NvcnRGaWVsZCA9IHZhbHVlID8/ICcnO1xyXG4gICAgdGhpcy5fbGFzdEV2ZW50LnNvcnRGaWVsZCA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkKHRoaXMuX2xhc3RFdmVudCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgc29ydEZpZWxkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydEZpZWxkO1xyXG4gIH1cclxuICBwcml2YXRlIF9zb3J0RmllbGQgPSAnJztcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHNvcnRPcmRlcih2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9zb3J0T3JkZXIgPSB2YWx1ZSA/PyAxO1xyXG4gICAgdGhpcy5fbGFzdEV2ZW50LnNvcnRPcmRlciA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkKHRoaXMuX2xhc3RFdmVudCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgc29ydE9yZGVyKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydE9yZGVyO1xyXG4gIH1cclxuICBwcml2YXRlIF9zb3J0T3JkZXIgPSAxO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByb3dzUGVyUGFnZTogbnVtYmVyW107XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNyZWF0ZUJ1dHRvbk1lbnU/OiBNZW51SXRlbVtdO1xyXG5cclxuICBwdWJsaWMgcmVzb3VyY2U/OiBQYWdlZExpc3RSZXNvdXJjZTtcclxuICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfdG90YWxSZWNvcmRzID0gMDtcclxuICBwcml2YXRlIF9sYXN0RXZlbnQ6IExhenlMb2FkRXZlbnQ7XHJcbiAgcHVibGljIGdldCB2YWx1ZSgpOiBSZXNvdXJjZVtdIHtcclxuICAgIHJldHVybiB0aGlzLnJlc291cmNlPy5fZW1iZWRkZWQ/Lml0ZW1zIHx8IFtdO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHJvd3MoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9sYXN0RXZlbnQ/LnJvd3MgfHwgMDtcclxuICB9XHJcbiAgcHVibGljIGdldCB0b3RhbFJlY29yZHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90b3RhbFJlY29yZHM7XHJcbiAgfVxyXG4gIHByaXZhdGUgc2V0IHRvdGFsUmVjb3Jkcyh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl90b3RhbFJlY29yZHMgPSB2YWx1ZSB8fCAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBuZXdIcmVmKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZT8uZmluZExpbmsoJ25ldycpPy5ocmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2RhdGVGb3JtYXQgPSBuZXcgRGF0ZSgzMzMzLCAxMCwgMjIpXHJcbiAgICAudG9Mb2NhbGVEYXRlU3RyaW5nKClcclxuICAgIC5yZXBsYWNlKFwiMjJcIiwgXCJkZFwiKVxyXG4gICAgLnJlcGxhY2UoXCIxMVwiLCBcIk1NXCIpXHJcbiAgICAucmVwbGFjZShcIjMzMzNcIiwgXCJ5XCIpXHJcbiAgICAucmVwbGFjZShcIjMzXCIsIFwieXlcIik7XHJcblxyXG4gIHB1YmxpYyBnZXQgZGF0ZUZvcm1hdCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50Ll9kYXRlRm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jbGllbnRzOiBSRVNUd29ybGRDbGllbnRDb2xsZWN0aW9uLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHB1YmxpYyBhdmF0YXJHZW5lcmF0b3I6IEF2YXRhckdlbmVyYXRvcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlcjogUm91dGVyKSB7XHJcbiAgICB0aGlzLnJvd3NQZXJQYWdlID0gWzEwLCAyNSwgNTBdO1xyXG5cclxuICAgIHRoaXMuX2xhc3RFdmVudCA9IHtcclxuICAgICAgcm93czogdGhpcy5yb3dzUGVyUGFnZVswXVxyXG4gICAgfTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJuZ09uQ2hhbmdlcyBcIiArIGNoYW5nZXMpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwibmdPbkluaXRcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc29sZS5sb2coXCJuZ0FmdGVyVmlld0luaXRcIik7XHJcbiAgICAvL2F3YWl0IHRoaXMubG9hZCh0aGlzLl9sYXN0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZU5ldygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZWRpdExpbmssIHRoaXMuYXBpTmFtZSwgdGhpcy5uZXdIcmVmXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENsaWVudCgpOiBSRVNUd29ybGRDbGllbnQge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBhIGNsaWVudCwgYmVjYXVzZSB0aGUgYXBpTmFtZSBpcyBub3Qgc2V0LicpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9jbGllbnRzLmdldENsaWVudCh0aGlzLmFwaU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWQgPSBfLmRlYm91bmNlKHRoaXMubG9hZDIsIDEwMCk7XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkMihldmVudDogTGF6eUxvYWRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUgfHwgIXRoaXMucmVsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fbGFzdEV2ZW50ID0gZXZlbnQ7XHJcblxyXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHRoaXMuY3JlYXRlUGFyYW1ldGVyc0Zyb21FdmVudChldmVudCk7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuZ2V0TGlzdCh0aGlzLnJlbCwgcGFyYW1ldGVycyk7XHJcbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkgfHwgIXJlc3BvbnNlLmJvZHkpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogJ0Vycm9yIHdoaWxlIGxvYWRpbmcgdGhlIHJlc291cmNlcyBmcm9tIHRoZSBBUEkuJywgZGF0YTogcmVzcG9uc2UgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChyZXNwb25zZS5ib2R5KSB7XHJcbiAgICAgIHRoaXMucmVzb3VyY2UgPSByZXNwb25zZS5ib2R5O1xyXG4gICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHRoaXMucmVzb3VyY2UudG90YWxQYWdlcyAmJiBwYXJhbWV0ZXJzLiR0b3AgPyB0aGlzLnJlc291cmNlLnRvdGFsUGFnZXMgKiBwYXJhbWV0ZXJzLiR0b3AgOiB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuX2NvbHVtbnMgPSB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBzaG93RGVsZXRlQ29uZmlybWF0aW9Nb2RhbChyZXNvdXJjZTogUmVzb3VyY2UpIHtcclxuICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIG1lc3NhZ2U6ICdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVzb3VyY2U/JyxcclxuICAgICAgaGVhZGVyOiAnQ29uZmlybSBkZWxldGUnLFxyXG4gICAgICBpY29uOiAnZmFyIGZhLXRyYXNoLWFsdCcsXHJcbiAgICAgIGFjY2VwdDogKCkgPT4gdGhpcy5kZWxldGUocmVzb3VyY2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkZWxldGUocmVzb3VyY2U6IFJlc291cmNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuYXBpTmFtZSB8fCAhdGhpcy5yZWwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmdldENsaWVudCgpLmRlbGV0ZShyZXNvdXJjZSk7XHJcblxyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0RlbGV0ZWQnLCBkZXRhaWw6ICdUaGUgcmVzb3VyY2UgaGFzIGJlZW4gZGVsZXRlZC4nIH0pO1xyXG5cclxuICAgIHRoaXMubG9hZCh0aGlzLl9sYXN0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDb2x1bW5zKCk6IENvbHVtbltdIHtcclxuICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMClcclxuICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucztcclxuXHJcbiAgICAvLyBHZXQgYWxsIGRpc3RpbmN0IHByb3BlcnRpZXMgZnJvbSBhbGwgcm93c1xyXG4gICAgLy8gV2UgbG9vayBhdCBhbGwgcm93cyB0byBlbGltaW5hdGUgcG9zc2libGUgdW5kZWZpbmVkIHZhbHVlc1xyXG4gICAgY29uc3Qgcm93c1dpdGhQcm9wZXJ0aWVzID0gdGhpcy52YWx1ZVxyXG4gICAgICAubWFwKHJlc291cmNlID0+XHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzb3VyY2UpXHJcbiAgICAgICAgICAuZmlsdGVyKHAgPT5cclxuICAgICAgICAgICAgcFswXSAhPT0gJ19saW5rcycgJiZcclxuICAgICAgICAgICAgcFswXSAhPT0gJ19lbWJlZGRlZCcgJiZcclxuICAgICAgICAgICAgcFswXSAhPT0gJ2lkJyAmJlxyXG4gICAgICAgICAgICBwWzBdICE9PSAndGltZXN0YW1wJykpO1xyXG5cclxuICAgIGNvbnN0IGRpc3RpbmN0UHJvcGVydGllcyA9IHJvd3NXaXRoUHJvcGVydGllc1swXTtcclxuICAgIGZvciAoY29uc3QgcHJvcGVydGllc09mUm93IG9mIHJvd3NXaXRoUHJvcGVydGllcykge1xyXG4gICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXNPZlJvdykge1xyXG4gICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IHByb3BlcnR5WzBdO1xyXG4gICAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVsxXTtcclxuICAgICAgICBjb25zdCBhbHJlYWR5Rm91bmRQcm9wZXJ0eVdpdGhTYW1lTmFtZSA9IGRpc3RpbmN0UHJvcGVydGllcy5maW5kKHAgPT4gcFswXSA9PT0gcHJvcGVydHlOYW1lKTtcclxuICAgICAgICBpZiAoIWFscmVhZHlGb3VuZFByb3BlcnR5V2l0aFNhbWVOYW1lKSAvLyBBZGQgbmV3IHByb3BlcnR5XHJcbiAgICAgICAgICBkaXN0aW5jdFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XHJcbiAgICAgICAgZWxzZSBpZiAoIWFscmVhZHlGb3VuZFByb3BlcnR5V2l0aFNhbWVOYW1lWzFdICYmIHByb3BlcnR5VmFsdWUpIC8vIFVzZSBkZWZpbmVkIHZhbHVlIGluc3RlYWQgb2YgZXhpc3RpbmcgdW5kZWZpbmVkIHZhbHVlXHJcbiAgICAgICAgICBhbHJlYWR5Rm91bmRQcm9wZXJ0eVdpdGhTYW1lTmFtZVsxXSA9IHByb3BlcnR5VmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgcm93cyBhcmUgZW50aXRpZXMgd2l0aCBjaGFuZ2UgdHJhY2tpbmdcclxuICAgIGNvbnN0IHdpdGhvdXRDaGFuZ2VUcmFja2luZ1Byb3BlcnRpZXMgPSBkaXN0aW5jdFByb3BlcnRpZXMuZmlsdGVyKHAgPT5cclxuICAgICAgcFswXSAhPT0gJ2NyZWF0ZWRBdCcgJiZcclxuICAgICAgcFswXSAhPT0gJ2NyZWF0ZWRCeScgJiZcclxuICAgICAgcFswXSAhPT0gJ2xhc3RDaGFuZ2VkQXQnICYmXHJcbiAgICAgIHBbMF0gIT09ICdsYXN0Q2hhbmdlZEJ5Jyk7XHJcbiAgICBjb25zdCBoYXNDaGFuZ2VUcmFja2luZ1Byb3BlcnRpZXMgPSB3aXRob3V0Q2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzLmxlbmd0aCA8IGRpc3RpbmN0UHJvcGVydGllcy5sZW5ndGg7XHJcblxyXG4gICAgLy8gRmlyc3QgdGhlIGlkLCB0aGVuIGFsbCBvdGhlciBwcm9wZXJ0aWVzXHJcbiAgICBjb25zdCBzb3J0ZWRQcm9wZXJ0aWVzOiBbc3RyaW5nLCB1bmtub3duXVtdID0gW1xyXG4gICAgICBbJ2lkJywgMF0sXHJcbiAgICAgIC4uLndpdGhvdXRDaGFuZ2VUcmFja2luZ1Byb3BlcnRpZXNcclxuICAgIF07XHJcblxyXG4gICAgLy8gQW5kIGNoYW5nZSB0cmFja2luZyBwcm9wZXJ0aWVzIGF0IHRoZSBlbmRcclxuICAgIGlmIChoYXNDaGFuZ2VUcmFja2luZ1Byb3BlcnRpZXMpIHtcclxuICAgICAgc29ydGVkUHJvcGVydGllcy5wdXNoKFsnY3JlYXRlZEF0JywgbmV3IERhdGUoKV0pO1xyXG4gICAgICBzb3J0ZWRQcm9wZXJ0aWVzLnB1c2goWydjcmVhdGVkQnknLCAnJ10pO1xyXG4gICAgICBzb3J0ZWRQcm9wZXJ0aWVzLnB1c2goWydsYXN0Q2hhbmdlZEF0JywgbmV3IERhdGUoKV0pO1xyXG4gICAgICBzb3J0ZWRQcm9wZXJ0aWVzLnB1c2goWydsYXN0Q2hhbmdlZEJ5JywgJyddKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb2x1bW5zID0gc29ydGVkUHJvcGVydGllc1xyXG4gICAgICAubWFwKHAgPT4gKHtcclxuICAgICAgICBoZWFkZXI6IFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50LnRvVGl0bGVDYXNlKHBbMF0pLFxyXG4gICAgICAgIGZpZWxkOiBwWzBdLFxyXG4gICAgICAgIHR5cGU6IFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50LmdldENvbHVtblR5cGUocFsxXSksXHJcbiAgICAgIH0pKTtcclxuXHJcbiAgICByZXR1cm4gY29sdW1ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGdldENvbHVtblR5cGUodmFsdWU6IHVua25vd24pOiBDb2x1bW5UeXBlIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICByZXR1cm4gQ29sdW1uVHlwZS50ZXh0O1xyXG5cclxuICAgIGlmIChfLmlzTnVtYmVyKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIENvbHVtblR5cGUubnVtZXJpYztcclxuXHJcbiAgICBpZiAoXy5pc0RhdGUodmFsdWUpKVxyXG4gICAgICByZXR1cm4gQ29sdW1uVHlwZS5kYXRlO1xyXG5cclxuICAgIGlmIChfLmlzU3RyaW5nKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIENvbHVtblR5cGUudGV4dDtcclxuXHJcbiAgICBpZiAoXy5pc0Jvb2xlYW4odmFsdWUpKVxyXG4gICAgICByZXR1cm4gQ29sdW1uVHlwZS5ib29sZWFuO1xyXG5cclxuICAgIGlmIChfLmlzQXJyYXlMaWtlKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIENvbHVtblR5cGUuYXJyYXk7XHJcblxyXG4gICAgaWYgKF8uaXNPYmplY3RMaWtlKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIENvbHVtblR5cGUub2JqZWN0O1xyXG5cclxuICAgIHJldHVybiBDb2x1bW5UeXBlLnRleHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyB0b1RpdGxlQ2FzZShhbnlDYXNlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBhbnlDYXNlXHJcbiAgICAgIC5yZXBsYWNlKC8oXykrL2csICcgJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1bmRlcnNjb3JlIHRvIHdoaXRlc3BhY2VcclxuICAgICAgLnJlcGxhY2UoLyhbYS16XSkoW0EtWl1bYS16XSkvZywgXCIkMSAkMlwiKSAgICAgICAgICAgLy8gaW5zZXJ0IHNwYWNlIGJlZm9yZSBlYWNoIG5ldyB3b3JkIGlmIHRoZXJlIGlzIG5vbmVcclxuICAgICAgLnJlcGxhY2UoLyhbQS1aXVthLXpdKShbQS1aXSkvZywgXCIkMSAkMlwiKSAgICAgICAgICAgLy8gaW5zZXJ0IHNwYWNlIGFmdGVyIGVhY2ggd29yZCBpZiB0aGVyZSBpcyBub25lXHJcbiAgICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdK1thLXpdKS9nLCBcIiQxICQyXCIpICAgICAgICAgIC8vIGluc2VydCBzcGFjZSBhZnRlciBzaW5nbGUgbGV0dGVyIHdvcmQgaWYgdGhlcmUgaXMgbm9uZVxyXG4gICAgICAucmVwbGFjZSgvKFtBLVpdKykoW0EtWl1bYS16XVthLXpdKS9nLCBcIiQxICQyXCIpICAgICAvLyBpbnNlcnQgc3BhY2UgYmVmb3JlIHNpbmdsZSBsZXR0ZXIgd29yZCBpZiB0aGVyZSBpcyBub25lXHJcbiAgICAgIC5yZXBsYWNlKC8oW2Etel0rKShbQS1aMC05XSspL2csIFwiJDEgJDJcIikgICAgICAgICAgIC8vIGluc2VydCBzcGFjZSBhZnRlciBudW1iZXJzXHJcbiAgICAgIC5yZXBsYWNlKC9eLi8sIChtYXRjaCkgPT4gbWF0Y2gudG9VcHBlckNhc2UoKSk7ICAgICAvLyBjaGFuZ2UgZmlyc3QgbGV0dGVyIHRvIGJlIHVwcGVyIGNhc2VcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlUGFyYW1ldGVyc0Zyb21FdmVudChldmVudDogTGF6eUxvYWRFdmVudCkge1xyXG4gICAgY29uc3Qgb0RhdGFQYXJhbWV0ZXJzID0ge1xyXG4gICAgICAkZmlsdGVyOiB0aGlzLmNyZWF0ZUZpbHRlckZyb21FdmVudChldmVudCksXHJcbiAgICAgICRvcmRlcmJ5OiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5jcmVhdGVPcmRlckJ5RnJvbUV2ZW50KGV2ZW50KSxcclxuICAgICAgJHRvcDogUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuY3JlYXRlVG9wRnJvbUV2ZW50KGV2ZW50KSxcclxuICAgICAgJHNraXA6IFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50LmNyZWF0ZVNraXBGcm9tRXZlbnQoZXZlbnQpXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBvRGF0YVBhcmFtZXRlcnM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlU2tpcEZyb21FdmVudChldmVudDogTGF6eUxvYWRFdmVudCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gZXZlbnQuZmlyc3Q7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlVG9wRnJvbUV2ZW50KGV2ZW50OiBMYXp5TG9hZEV2ZW50KTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBldmVudC5yb3dzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZU9yZGVyQnlGcm9tRXZlbnQoZXZlbnQ6IExhenlMb2FkRXZlbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKGV2ZW50LnNvcnRGaWVsZCkge1xyXG4gICAgICBjb25zdCBvcmRlciA9ICFldmVudC5zb3J0T3JkZXIgfHwgZXZlbnQuc29ydE9yZGVyID4gMCA/ICdhc2MnIDogJ2Rlc2MnO1xyXG4gICAgICByZXR1cm4gYCR7ZXZlbnQuc29ydEZpZWxkfSAke29yZGVyfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRmlsdGVyRnJvbUV2ZW50KGV2ZW50OiBMYXp5TG9hZEV2ZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghZXZlbnQuZmlsdGVycylcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXIgPSBPYmplY3QuZW50cmllcyhldmVudC5maWx0ZXJzKVxyXG4gICAgICAvLyBUaGUgdHlwZSBkZWZpbml0aW9uIGlzIHdyb25nLCBldmVudC5maWx0ZXJzIGhhcyB2YWx1ZXMgb2YgdHlwZSBGaWx0ZXJNZXRhZGF0YVtdIGFuZCBub3QgRmlsdGVyTWV0YWRhdGEuXHJcbiAgICAgIC5tYXAoKFtwcm9wZXJ0eSwgZmlsdGVyXSkgPT4gKHsgcHJvcGVydHk6IHByb3BlcnR5LCBmaWx0ZXJzOiBmaWx0ZXIgYXMgRmlsdGVyTWV0YWRhdGFbXSB9KSlcclxuICAgICAgLm1hcChmID0+IHRoaXMuY3JlYXRlRmlsdGVyRm9yUHJvcGVydHlBcnJheShmLnByb3BlcnR5LCBmLmZpbHRlcnMpKVxyXG4gICAgICAuZmlsdGVyKGYgPT4gISFmKVxyXG4gICAgICAuam9pbignIGFuZCAnKTtcclxuXHJcbiAgICBpZiAoZmlsdGVyID09PSAnJylcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcbiAgICByZXR1cm4gYCgke2ZpbHRlcn0pYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRmlsdGVyRm9yUHJvcGVydHlBcnJheShwcm9wZXJ0eTogc3RyaW5nLCBmaWx0ZXJzOiBGaWx0ZXJNZXRhZGF0YVtdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IGZpbHRlciA9IGZpbHRlcnNcclxuICAgICAgLm1hcChmID0+IHRoaXMuY3JlYXRlRmlsdGVyRm9yUHJvcGVydHkocHJvcGVydHksIGYpKVxyXG4gICAgICAuZmlsdGVyKGYgPT4gISFmKVxyXG4gICAgICAuam9pbihgICR7ZmlsdGVyc1swXS5vcGVyYXRvcn0gYCk7XHJcblxyXG4gICAgaWYgKGZpbHRlciA9PT0gJycpXHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgcmV0dXJuIGAoJHtmaWx0ZXJ9KWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZpbHRlckZvclByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIGZpbHRlcjogRmlsdGVyTWV0YWRhdGEpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFmaWx0ZXIudmFsdWUpXHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3Qgb0RhdGFPcGVyYXRvciA9IFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50LmNyZWF0ZU9EYXRhT3BlcmF0b3IoXHJcbiAgICAgIGZpbHRlci5tYXRjaE1vZGUsXHJcbiAgICApO1xyXG4gICAgY29uc3QgY29tcGFyaXNvblZhbHVlID0gdGhpcy5jcmVhdGVDb21wYXJpc29uVmFsdWUocHJvcGVydHksIGZpbHRlci52YWx1ZSk7XHJcblxyXG4gICAgc3dpdGNoIChvRGF0YU9wZXJhdG9yKSB7XHJcbiAgICAgIGNhc2UgJ2NvbnRhaW5zJzpcclxuICAgICAgY2FzZSAnbm90IGNvbnRhaW5zJzpcclxuICAgICAgY2FzZSAnc3RhcnRzd2l0aCc6XHJcbiAgICAgIGNhc2UgJ2VuZHN3aXRoJzpcclxuICAgICAgICByZXR1cm4gYCR7b0RhdGFPcGVyYXRvcn0oJHtwcm9wZXJ0eX0sICR7Y29tcGFyaXNvblZhbHVlfSlgO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBgJHtwcm9wZXJ0eX0gJHtvRGF0YU9wZXJhdG9yfSAke2NvbXBhcmlzb25WYWx1ZX1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlT0RhdGFPcGVyYXRvcihtYXRjaE1vZGU/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChtYXRjaE1vZGUpIHtcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuU1RBUlRTX1dJVEg6XHJcbiAgICAgICAgcmV0dXJuICdzdGFydHN3aXRoJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQ09OVEFJTlM6XHJcbiAgICAgICAgcmV0dXJuICdjb250YWlucyc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLk5PVF9DT05UQUlOUzpcclxuICAgICAgICByZXR1cm4gJ25vdCBjb250YWlucyc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVORFNfV0lUSDpcclxuICAgICAgICByZXR1cm4gJ2VuZHN3aXRoJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuRVFVQUxTOlxyXG4gICAgICAgIHJldHVybiAnZXEnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5OT1RfRVFVQUxTOlxyXG4gICAgICAgIHJldHVybiAnbmUnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5JTjpcclxuICAgICAgICByZXR1cm4gJ2luJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTEVTU19USEFOOlxyXG4gICAgICAgIHJldHVybiAnbHQnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5MRVNTX1RIQU5fT1JfRVFVQUxfVE86XHJcbiAgICAgICAgcmV0dXJuICdsZSc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkdSRUFURVJfVEhBTjpcclxuICAgICAgICByZXR1cm4gJ2d0JztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPOlxyXG4gICAgICAgIHJldHVybiAnZ2UnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5JUzpcclxuICAgICAgICByZXR1cm4gJ2VxJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuSVNfTk9UOlxyXG4gICAgICAgIHJldHVybiAnbmUnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5CRUZPUkU6XHJcbiAgICAgICAgcmV0dXJuICdsdCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkFGVEVSOlxyXG4gICAgICAgIHJldHVybiAnZ3QnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5EQVRFX0FGVEVSOlxyXG4gICAgICAgIHJldHVybiAnZ2UnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5EQVRFX0JFRk9SRTpcclxuICAgICAgICByZXR1cm4gJ2x0JztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuREFURV9JUzpcclxuICAgICAgICByZXR1cm4gJ2VxJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuREFURV9JU19OT1Q6XHJcbiAgICAgICAgcmV0dXJuICduZSc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoYFVua25vd24gbWF0Y2hNb2RlICR7bWF0Y2hNb2RlfWApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDb21wYXJpc29uVmFsdWUocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHJldHVybiAnbnVsbCc7XHJcblxyXG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLmZpZWxkID09PSBwcm9wZXJ0eSk7XHJcbiAgICBpZiAoY29sdW1ucy5sZW5ndGggIT09IDEpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgdGhlIGNvbHVtbiBmb3IgdGhlIHByb3BlcnR5ICR7cHJvcGVydHl9IHdoaWNoIGlzIHNwZWNpZmllZCBpbiB0aGUgZmlsdGVyLmApO1xyXG5cclxuICAgIGNvbnN0IHR5cGUgPSBjb2x1bW5zWzBdLnR5cGU7XHJcblxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgQ29sdW1uVHlwZS5ib29sZWFuOlxyXG4gICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xyXG4gICAgICBjYXNlIENvbHVtblR5cGUuZGF0ZTpcclxuICAgICAgICByZXR1cm4gYGNhc3QoJHsodmFsdWUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKX0sIEVkbS5EYXRlVGltZU9mZnNldClgO1xyXG4gICAgICBjYXNlIENvbHVtblR5cGUubnVtZXJpYzpcclxuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcclxuICAgICAgY2FzZSBDb2x1bW5UeXBlLnRleHQ6XHJcbiAgICAgICAgcmV0dXJuIGAnJHt2YWx1ZX0nYDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29sdW1uIHR5cGUgJyR7dHlwZX0nYCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxwLXRhYmxlIFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgIFtsYXp5XT1cInRydWVcIlxyXG4gICAgICAgICBbbGF6eUxvYWRPbkluaXRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAob25MYXp5TG9hZCk9XCJsb2FkKCRldmVudClcIlxyXG4gICAgICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcclxuICAgICAgICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAgICAgICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VcIlxyXG4gICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgIFtzaG93SW5pdGlhbFNvcnRCYWRnZV09XCJ0cnVlXCJcclxuICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgICAgIFtzb3J0RmllbGRdPVwic29ydEZpZWxkXCJcclxuICAgICAgICAgW3NvcnRPcmRlcl09XCJzb3J0T3JkZXJcIj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCIgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wuZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWQtZmxleCBwLWpjLWJldHdlZW4gcC1haS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2NvbC5oZWFkZXJ9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxwLXNvcnRJY29uIFtmaWVsZF09XCJjb2wuZmllbGRcIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIFt0eXBlXT1cImNvbC50eXBlXCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiIGRpc3BsYXk9XCJtZW51XCI+PC9wLWNvbHVtbkZpbHRlcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhY3JlYXRlQnV0dG9uTWVudVwiIGNsYXNzPVwicC1idXR0b24tc3VjY2Vzc1wiIGljb249XCJmYXMgZmEtcGx1c1wiIHBCdXR0b24gW3JvdXRlckxpbmtdPVwiW2VkaXRMaW5rLCBhcGlOYW1lLCBuZXdIcmVmXVwiIHBUb29sdGlwPVwiQ3JlYXRlIG5ld1wiIHRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIj48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLXNwbGl0QnV0dG9uICpuZ0lmPVwiY3JlYXRlQnV0dG9uTWVudVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzXCIgaWNvbj1cImZhcyBmYS1wbHVzXCIgcFRvb2x0aXA9XCJDcmVhdGUgbmV3XCIgdG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiIChvbkNsaWNrKT1cImNyZWF0ZU5ldygpXCIgW21vZGVsXT1cImNyZWF0ZUJ1dHRvbk1lbnVcIiBhcHBlbmRUbz1cImJvZHlcIj48L3Atc3BsaXRCdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1lbnRpdHkgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICA8dGQgW25nU3dpdGNoXT1cImNvbC50eXBlXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1hdmF0YXIgKm5nSWY9XCJjb2wuZmllbGQgPT09ICdjcmVhdGVkQnknIHx8IGNvbC5maWVsZCA9PT0gJ2xhc3RDaGFuZ2VkQnknXCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wuZmllbGRdXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgW2ltYWdlXT1cImF2YXRhckdlbmVyYXRvci5nZXRJbWFnZShlbnRpdHlbY29sLmZpZWxkXSlcIiBbbGFiZWxdPVwiYXZhdGFyR2VuZXJhdG9yLmdldExhYmVsKGVudGl0eVtjb2wuZmllbGRdKVwiIFtzdHlsZV09XCJhdmF0YXJHZW5lcmF0b3IuZ2V0U3R5bGUoZW50aXR5W2NvbC5maWVsZF0pXCIgc2hhcGU9XCJjaXJjbGVcIj48L3AtYXZhdGFyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLmZpZWxkICE9PSAnY3JlYXRlZEJ5JyAmJiBjb2wuZmllbGQgIT09ICdsYXN0Q2hhbmdlZEJ5J1wiPnt7ZW50aXR5W2NvbC5maWVsZF19fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1lcmljJ1wiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+e3tlbnRpdHlbY29sLmZpZWxkXX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+PHAtdHJpU3RhdGVDaGVja2JveCBbKG5nTW9kZWwpXT1cImVudGl0eVtjb2wuZmllbGRdXCIgW3JlYWRvbmx5XT1cInRydWVcIj48L3AtdHJpU3RhdGVDaGVja2JveD48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wuZmllbGRdXCI+e3tlbnRpdHlbY29sLmZpZWxkXSB8IGRhdGU6ZGF0ZUZvcm1hdH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidhcnJheSdcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPjxwICpuZ0Zvcj1cImxldCBhcnJheUVsZW1lbnQgb2YgZW50aXR5W2NvbC5maWVsZF1cIj57e2FycmF5RWxlbWVudCB8IGpzb259fTwvcD48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ29iamVjdCdcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPnt7ZW50aXR5W2NvbC5maWVsZF0gfCBqc29ufX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBwQnV0dG9uIHBUb29sdGlwPVwiVmlldy9FZGl0XCIgdG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiIFtyb3V0ZXJMaW5rXT1cIltlZGl0TGluaywgYXBpTmFtZSwgZW50aXR5Ll9saW5rcz8uc2VsZlswXS5ocmVmXVwiIGljb249XCJmYXMgZmEtZWRpdFwiPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBUb29sdGlwPVwiRGVsZXRlXCIgdG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiIHBCdXR0b24gKm5nSWY9XCJlbnRpdHkuX2xpbmtzLmRlbGV0ZVwiIChjbGljayk9XCJzaG93RGVsZXRlQ29uZmlybWF0aW9Nb2RhbChlbnRpdHkpXCIgaWNvbj1cImZhcyBmYS10cmFzaC1hbHRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJteC0yIHAtYnV0dG9uLWRhbmdlclwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI4XCI+Tm8gZW50cmllcyBmb3VuZC48L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuPC9wLXRhYmxlPlxyXG5cclxuPHAtdG9hc3Q+PC9wLXRvYXN0PlxyXG48cC1jb25maXJtRGlhbG9nPjwvcC1jb25maXJtRGlhbG9nPlxyXG4iXX0=
|