@wertzui/ngx-restworld-client 1.0.2 → 2.0.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.
Files changed (31) hide show
  1. package/bundles/wertzui-ngx-restworld-client.umd.js +1101 -301
  2. package/bundles/wertzui-ngx-restworld-client.umd.js.map +1 -1
  3. package/esm2015/lib/models/problem-details.js +2 -2
  4. package/esm2015/lib/pipes/as.pipe.js +25 -0
  5. package/esm2015/lib/pipes/safe-url.pipe.js +23 -0
  6. package/esm2015/lib/restworld-client.module.js +68 -8
  7. package/esm2015/lib/services/avatar-generator.js +2 -2
  8. package/esm2015/lib/services/form.service.js +69 -0
  9. package/esm2015/lib/services/restworld-client-collection.js +1 -1
  10. package/esm2015/lib/services/restworld-client.js +46 -8
  11. package/esm2015/lib/views/restworld-edit-form/restworld-edit-form.component.js +238 -0
  12. package/esm2015/lib/views/restworld-edit-view/restworld-edit-view.component.js +209 -143
  13. package/esm2015/lib/views/restworld-file-view/restworld-file-view.component.js +63 -0
  14. package/esm2015/lib/views/restworld-image-view/restworld-image-view.component.js +107 -0
  15. package/esm2015/lib/views/restworld-list-view/restworld-list-view.component.js +64 -37
  16. package/esm2015/public-api.js +7 -1
  17. package/fesm2015/wertzui-ngx-restworld-client.js +880 -220
  18. package/fesm2015/wertzui-ngx-restworld-client.js.map +1 -1
  19. package/lib/models/problem-details.d.ts +4 -8
  20. package/lib/pipes/as.pipe.d.ts +18 -0
  21. package/lib/pipes/safe-url.pipe.d.ts +10 -0
  22. package/lib/restworld-client.module.d.ts +35 -21
  23. package/lib/services/form.service.d.ts +14 -0
  24. package/lib/services/restworld-client.d.ts +4 -1
  25. package/lib/views/restworld-edit-form/restworld-edit-form.component.d.ts +69 -0
  26. package/lib/views/restworld-edit-view/restworld-edit-view.component.d.ts +53 -32
  27. package/lib/views/restworld-file-view/restworld-file-view.component.d.ts +21 -0
  28. package/lib/views/restworld-image-view/restworld-image-view.component.d.ts +38 -0
  29. package/lib/views/restworld-list-view/restworld-list-view.component.d.ts +20 -8
  30. package/package.json +29 -8
  31. package/public-api.d.ts +6 -0
@@ -17,6 +17,13 @@ import * as i10 from "primeng/tooltip";
17
17
  import * as i11 from "@angular/router";
18
18
  import * as i12 from "primeng/button";
19
19
  import * as i13 from "@angular/forms";
20
+ export var ColumnType;
21
+ (function (ColumnType) {
22
+ ColumnType["text"] = "text";
23
+ ColumnType["numeric"] = "numeric";
24
+ ColumnType["boolean"] = "boolean";
25
+ ColumnType["date"] = "date";
26
+ })(ColumnType || (ColumnType = {}));
20
27
  export class RESTworldListViewComponent {
21
28
  constructor(_clients, _confirmationService, _messageService, avatarGenerator) {
22
29
  this._clients = _clients;
@@ -93,12 +100,12 @@ export class RESTworldListViewComponent {
93
100
  return;
94
101
  this.isLoading = true;
95
102
  this._lastEvent = event;
96
- const parameters = RESTworldListViewComponent.createParametersFromEvent(event);
103
+ const parameters = this.createParametersFromEvent(event);
97
104
  const response = yield this.getClient().getList(this.rel, parameters);
98
105
  if (!response.ok || ProblemDetails.isProblemDetails(response.body) || !response.body) {
99
106
  this._messageService.add({ severity: 'error', summary: 'Error', detail: 'Error while loading the resources from the API.', data: response });
100
107
  }
101
- else {
108
+ else if (response.body) {
102
109
  this.resource = response.body;
103
110
  this.totalRecords = this.resource.totalPages && parameters.$top ? this.resource.totalPages * parameters.$top : undefined;
104
111
  this._columns = this.createColumns();
@@ -125,7 +132,7 @@ export class RESTworldListViewComponent {
125
132
  }
126
133
  createColumns() {
127
134
  if (this.value.length === 0)
128
- return [];
135
+ return this.columns;
129
136
  // Get all distinct properties from all rows
130
137
  // We look at all rows to eliminate possible undefined values
131
138
  const rowsWithProperties = this.value
@@ -134,9 +141,9 @@ export class RESTworldListViewComponent {
134
141
  p[0] !== '_embedded' &&
135
142
  p[0] !== 'id' &&
136
143
  p[0] !== 'timestamp'));
137
- let distinctProperties = rowsWithProperties[0];
138
- for (let propertiesOfRow of rowsWithProperties) {
139
- for (var property of propertiesOfRow) {
144
+ const distinctProperties = rowsWithProperties[0];
145
+ for (const propertiesOfRow of rowsWithProperties) {
146
+ for (const property of propertiesOfRow) {
140
147
  const propertyName = property[0];
141
148
  const propertyValue = property[1];
142
149
  const alreadyFoundPropertyWithSameName = distinctProperties.find(p => p[0] === propertyName);
@@ -174,16 +181,16 @@ export class RESTworldListViewComponent {
174
181
  }
175
182
  static getColumnType(value) {
176
183
  if (value === null || value === undefined)
177
- return 'text';
184
+ return ColumnType.text;
178
185
  if (_.isNumber(value))
179
- return 'numeric';
186
+ return ColumnType.numeric;
180
187
  if (_.isDate(value))
181
- return 'date';
188
+ return ColumnType.date;
182
189
  if (_.isString(value))
183
- return 'text';
190
+ return ColumnType.text;
184
191
  if (_.isBoolean(value))
185
- return 'boolean';
186
- return 'text';
192
+ return ColumnType.boolean;
193
+ return ColumnType.text;
187
194
  }
188
195
  static toTitleCase(anyCase) {
189
196
  return anyCase
@@ -195,9 +202,9 @@ export class RESTworldListViewComponent {
195
202
  .replace(/([a-z]+)([A-Z0-9]+)/g, "$1 $2") // insert space after numbers
196
203
  .replace(/^./, (match) => match.toUpperCase()); // change first letter to be upper case
197
204
  }
198
- static createParametersFromEvent(event) {
205
+ createParametersFromEvent(event) {
199
206
  const oDataParameters = {
200
- $filter: RESTworldListViewComponent.createFilterFromEvent(event),
207
+ $filter: this.createFilterFromEvent(event),
201
208
  $orderby: RESTworldListViewComponent.createOrderByFromEvent(event),
202
209
  $top: RESTworldListViewComponent.createTopFromEvent(event),
203
210
  $skip: RESTworldListViewComponent.createSkipFromEvent(event)
@@ -217,22 +224,33 @@ export class RESTworldListViewComponent {
217
224
  }
218
225
  return undefined;
219
226
  }
220
- static createFilterFromEvent(event) {
227
+ createFilterFromEvent(event) {
221
228
  if (!event.filters)
222
229
  return undefined;
223
230
  const filter = Object.entries(event.filters)
224
- .map(([property, filter]) => RESTworldListViewComponent.createFilterForProperty(property, filter))
225
- .filter(filter => !!filter)
231
+ // The type definition is wrong, event.filters has values of type FilterMetadata[] and not FilterMetadata.
232
+ .map(([property, filter]) => ({ property: property, filters: filter }))
233
+ .map(f => this.createFilterForPropertyArray(f.property, f.filters))
234
+ .filter(f => !!f)
226
235
  .join(' and ');
227
236
  if (filter === '')
228
237
  return undefined;
229
238
  return `(${filter})`;
230
239
  }
231
- static createFilterForProperty(property, filter) {
240
+ createFilterForPropertyArray(property, filters) {
241
+ const filter = filters
242
+ .map(f => this.createFilterForProperty(property, f))
243
+ .filter(f => !!f)
244
+ .join(` ${filters[0].operator} `);
245
+ if (filter === '')
246
+ return undefined;
247
+ return `(${filter})`;
248
+ }
249
+ createFilterForProperty(property, filter) {
232
250
  if (!filter.value)
233
251
  return undefined;
234
252
  const oDataOperator = RESTworldListViewComponent.createODataOperator(filter.matchMode);
235
- const comparisonValue = RESTworldListViewComponent.createComparisonValue(filter.value);
253
+ const comparisonValue = this.createComparisonValue(property, filter.value);
236
254
  switch (oDataOperator) {
237
255
  case 'contains':
238
256
  case 'not contains':
@@ -275,28 +293,37 @@ export class RESTworldListViewComponent {
275
293
  return 'lt';
276
294
  case FilterMatchMode.AFTER:
277
295
  return 'gt';
296
+ case FilterMatchMode.DATE_AFTER:
297
+ return 'ge';
298
+ case FilterMatchMode.DATE_BEFORE:
299
+ return 'lt';
300
+ case FilterMatchMode.DATE_IS:
301
+ return 'eq';
302
+ case FilterMatchMode.DATE_IS_NOT:
303
+ return 'ne';
278
304
  default:
279
305
  throw Error(`Unknown matchMode ${matchMode}`);
280
306
  }
281
307
  }
282
- static createComparisonValue(value) {
308
+ createComparisonValue(property, value) {
283
309
  if (value === null || value === undefined)
284
310
  return 'null';
285
- if (_.isNumber(value))
286
- return `${value}`;
287
- if (_.isDate(value))
288
- return `cast(${value.toISOString()}, Edm.DateTimeOffset)`;
289
- if (_.isString(value)) {
290
- const date = new Date(value);
291
- if (!isNaN(date.valueOf()))
292
- return `cast(${date.toISOString()}, Edm.DateTimeOffset)`;
293
- return `'${value}'`;
311
+ const columns = this.columns.filter(c => c.field === property);
312
+ if (columns.length !== 1)
313
+ throw new Error(`Cannot find the column for the property ${property} which is specified in the filter.`);
314
+ const type = columns[0].type;
315
+ switch (type) {
316
+ case ColumnType.boolean:
317
+ return `${value}`;
318
+ case ColumnType.date:
319
+ return `cast(${value.toISOString()}, Edm.DateTimeOffset)`;
320
+ case ColumnType.numeric:
321
+ return `${value}`;
322
+ case ColumnType.text:
323
+ return `'${value}'`;
324
+ default:
325
+ throw new Error(`Unknown column type '${type}'`);
294
326
  }
295
- if (_.isArray(value))
296
- return `(${value
297
- .map((v) => this.createComparisonValue(v))
298
- .join(',')})`;
299
- throw new Error(`Unknown type of value: ${value}.`);
300
327
  }
301
328
  }
302
329
  RESTworldListViewComponent._dateFormat = new Date(3333, 10, 22)
@@ -306,11 +333,11 @@ RESTworldListViewComponent._dateFormat = new Date(3333, 10, 22)
306
333
  .replace("3333", "y")
307
334
  .replace("33", "yy");
308
335
  RESTworldListViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: RESTworldListViewComponent, deps: [{ token: i1.RESTworldClientCollection }, { token: i2.ConfirmationService }, { token: i2.MessageService }, { token: i3.AvatarGenerator }], target: i0.ɵɵFactoryTarget.Component });
309
- RESTworldListViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.11", type: RESTworldListViewComponent, selector: "restworld-list-view", 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 <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\" pTooltip=\"Create new\" tooltipPosition=\"left\">\r\n <a class=\"p-button-success\" icon=\"fas fa-plus\" pButton [routerLink]=\"['/edit', apiName, newHref]\"></a>\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 </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:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"], components: [{ type: i4.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", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "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", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection"], outputs: ["selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i4.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { type: i4.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: i5.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass"] }, { type: i6.TriStateCheckbox, selector: "p-triStateCheckbox", inputs: ["disabled", "name", "ariaLabelledBy", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon"], outputs: ["onChange"] }, { type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i8.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: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i11.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i12.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "date": i9.DatePipe } });
336
+ RESTworldListViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.11", 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 <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\" pTooltip=\"Create new\" tooltipPosition=\"left\">\r\n <a class=\"p-button-success\" icon=\"fas fa-plus\" pButton [routerLink]=\"['/edit', apiName, newHref]\"></a>\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 </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:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"], components: [{ type: i4.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", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "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", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection"], outputs: ["selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i4.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { type: i4.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: i5.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass"] }, { type: i6.TriStateCheckbox, selector: "p-triStateCheckbox", inputs: ["disabled", "name", "ariaLabelledBy", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon"], outputs: ["onChange"] }, { type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i8.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: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i11.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i12.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "date": i9.DatePipe } });
310
337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: RESTworldListViewComponent, decorators: [{
311
338
  type: Component,
312
339
  args: [{
313
- selector: 'restworld-list-view',
340
+ selector: 'rw-list',
314
341
  templateUrl: './restworld-list-view.component.html',
315
342
  styleUrls: ['./restworld-list-view.component.css']
316
343
  }]
@@ -323,4 +350,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.11", ngImpo
323
350
  }], rowsPerPage: [{
324
351
  type: Input
325
352
  }] } });
326
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7QUFDM0IsT0FBTyxFQUF1QixlQUFlLEVBQWlELE1BQU0sYUFBYSxDQUFBO0FBR2pILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUTlELE1BQU0sT0FBTywwQkFBMEI7SUF1RXJDLFlBQ1UsUUFBbUMsRUFDbkMsb0JBQXlDLEVBQ3pDLGVBQStCLEVBQ2hDLGVBQWdDO1FBSC9CLGFBQVEsR0FBUixRQUFRLENBQTJCO1FBQ25DLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDekMsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXZFakMsYUFBUSxHQUFVLEVBQUUsQ0FBQztRQVNyQixjQUFTLEdBQVcsT0FBTyxDQUFDO1FBd0I3QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBc0NoQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVo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T0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7S0FDcEIsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzt3SEFqRVosMEJBQTBCOzRHQUExQiwwQkFBMEIseUpDZHZDLDRqR0E4REE7NEZEaERhLDBCQUEwQjtrQkFMdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixXQUFXLEVBQUUsc0NBQXNDO29CQUNuRCxTQUFTLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztpQkFDbkQ7Nk1BT1ksUUFBUTtzQkFEbEIsS0FBSztnQkFVSyxPQUFPO3NCQURqQixLQUFLO2dCQVdLLEdBQUc7c0JBRGIsS0FBSztnQkFXQyxXQUFXO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBhZ2VkTGlzdFJlc291cmNlLCBSZXNvdXJjZSB9IGZyb20gJ0B3ZXJ0enVpL25neC1oYWwtY2xpZW50JztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIEZpbHRlck1hdGNoTW9kZSwgRmlsdGVyTWV0YWRhdGEsIExhenlMb2FkRXZlbnQsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknXHJcbmltcG9ydCB7IFJFU1R3b3JsZENsaWVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQnO1xyXG5pbXBvcnQgeyBSRVNUd29ybGRDbGllbnRDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudC1jb2xsZWN0aW9uJztcclxuaW1wb3J0IHsgUHJvYmxlbURldGFpbHMgfSBmcm9tICcuLi8uLi9tb2RlbHMvcHJvYmxlbS1kZXRhaWxzJztcclxuaW1wb3J0IHsgQXZhdGFyR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXZhdGFyLWdlbmVyYXRvcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Jlc3R3b3JsZC1saXN0LXZpZXcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtbGlzdC12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtbGlzdC12aWV3LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQge1xyXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcclxuICB9XHJcbiAgcHJpdmF0ZSBfY29sdW1uczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZWRpdExpbmsodmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbHVlKVxyXG4gICAgICB0aGlzLl9lZGl0TGluayA9IHZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGVkaXRMaW5rKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VkaXRMaW5rO1xyXG4gIH1cclxuICBwcml2YXRlIF9lZGl0TGluazogc3RyaW5nID0gJy9lZGl0JztcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgYXBpTmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9hcGlOYW1lID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5hcGlOYW1lICYmIHRoaXMucmVsICYmIHRoaXMuX2xhc3RFdmVudClcclxuICAgICAgdGhpcy5sb2FkKHRoaXMuX2xhc3RFdmVudCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgYXBpTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FwaU5hbWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FwaU5hbWU/OiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHJlbCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9yZWwgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmFwaU5hbWUgJiYgdGhpcy5yZWwgJiYgdGhpcy5fbGFzdEV2ZW50KVxyXG4gICAgICB0aGlzLmxvYWQodGhpcy5fbGFzdEV2ZW50KTtcclxuICB9XHJcbiAgcHVibGljIGdldCByZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWw7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3JlbD86IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByb3dzUGVyUGFnZTogbnVtYmVyW107XHJcbiAgcHVibGljIHJlc291cmNlPzogUGFnZWRMaXN0UmVzb3VyY2U7XHJcbiAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3RvdGFsUmVjb3JkczogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9sYXN0RXZlbnQ6IExhenlMb2FkRXZlbnQ7XHJcbiAgcHVibGljIGdldCB2YWx1ZSgpOiBSZXNvdXJjZVtdIHtcclxuICAgIHJldHVybiB0aGlzLnJlc291cmNlPy5fZW1iZWRkZWQ/Lml0ZW1zIHx8IFtdO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHJvd3MoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9sYXN0RXZlbnQ/LnJvd3MgfHwgMDtcclxuICB9XHJcbiAgcHVibGljIGdldCB0b3RhbFJlY29yZHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90b3RhbFJlY29yZHM7XHJcbiAgfVxyXG4gIHByaXZhdGUgc2V0IHRvdGFsUmVjb3Jkcyh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl90b3RhbFJlY29yZHMgPSB2YWx1ZSB8fCAwO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHNvcnRPcmRlcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9sYXN0RXZlbnQuc29ydE9yZGVyIHx8IDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG5ld0hyZWYoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnJlc291cmNlPy5maW5kTGluaygnbmV3Jyk/LmhyZWY7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfZGF0ZUZvcm1hdCA9IG5ldyBEYXRlKDMzMzMsIDEwLCAyMilcclxuICAgIC50b0xvY2FsZURhdGVTdHJpbmcoKVxyXG4gICAgLnJlcGxhY2UoXCIyMlwiLCBcImRkXCIpXHJcbiAgICAucmVwbGFjZShcIjExXCIsIFwiTU1cIilcclxuICAgIC5yZXBsYWNlKFwiMzMzM1wiLCBcInlcIilcclxuICAgIC5yZXBsYWNlKFwiMzNcIiwgXCJ5eVwiKTtcclxuXHJcbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuX2RhdGVGb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NsaWVudHM6IFJFU1R3b3JsZENsaWVudENvbGxlY3Rpb24sXHJcbiAgICBwcml2YXRlIF9jb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHVibGljIGF2YXRhckdlbmVyYXRvcjogQXZhdGFyR2VuZXJhdG9yKSB7XHJcbiAgICB0aGlzLnJvd3NQZXJQYWdlID0gWzEwLCAyNSwgNTBdO1xyXG5cclxuICAgIHRoaXMuX2xhc3RFdmVudCA9IHtcclxuICAgICAgcm93czogdGhpcy5yb3dzUGVyUGFnZVswXVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDbGllbnQoKTogUkVTVHdvcmxkQ2xpZW50IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgYSBjbGllbnQsIGJlY2F1c2UgdGhlIGFwaU5hbWUgaXMgbm90IHNldC4nKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50cy5nZXRDbGllbnQodGhpcy5hcGlOYW1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkKGV2ZW50OiBMYXp5TG9hZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuYXBpTmFtZSB8fCAhdGhpcy5yZWwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLl9sYXN0RXZlbnQgPSBldmVudDtcclxuXHJcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuY3JlYXRlUGFyYW1ldGVyc0Zyb21FdmVudChldmVudCk7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuZ2V0TGlzdCh0aGlzLnJlbCwgcGFyYW1ldGVycyk7XHJcbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkgfHwgIXJlc3BvbnNlLmJvZHkpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogJ0Vycm9yIHdoaWxlIGxvYWRpbmcgdGhlIHJlc291cmNlcyBmcm9tIHRoZSBBUEkuJywgIGRhdGE6IHJlc3BvbnNlfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnJlc291cmNlID0gcmVzcG9uc2UuYm9keTtcclxuICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSB0aGlzLnJlc291cmNlIS50b3RhbFBhZ2VzICYmIHBhcmFtZXRlcnMuJHRvcCA/IHRoaXMucmVzb3VyY2UhLnRvdGFsUGFnZXMgKiBwYXJhbWV0ZXJzLiR0b3AgOiB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuX2NvbHVtbnMgPSB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBzaG93RGVsZXRlQ29uZmlybWF0aW9Nb2RhbChyZXNvdXJjZTogUmVzb3VyY2UpIHtcclxuICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIG1lc3NhZ2U6ICdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVzb3VyY2U/JyxcclxuICAgICAgaGVhZGVyOiAnQ29uZmlybSBkZWxldGUnLFxyXG4gICAgICBpY29uOiAnZmFyIGZhLXRyYXNoLWFsdCcsXHJcbiAgICAgIGFjY2VwdDogKCkgPT4gdGhpcy5kZWxldGUocmVzb3VyY2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkZWxldGUocmVzb3VyY2U6IFJlc291cmNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuYXBpTmFtZSB8fCAhdGhpcy5yZWwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmdldENsaWVudCgpLmRlbGV0ZShyZXNvdXJjZSk7XHJcblxyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0RlbGV0ZWQnLCBkZXRhaWw6ICdUaGUgcmVzb3VyY2UgaGFzIGJlZW4gZGVsZXRlZC4nIH0pO1xyXG5cclxuICAgIHRoaXMubG9hZCh0aGlzLl9sYXN0RXZlbnQpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNvbHVtbnMoKTogYW55W10ge1xyXG4gICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoID09PSAwKVxyXG4gICAgICByZXR1cm4gW107XHJcblxyXG4gICAgLy8gR2V0IGFsbCBkaXN0aW5jdCBwcm9wZXJ0aWVzIGZyb20gYWxsIHJvd3NcclxuICAgIC8vIFdlIGxvb2sgYXQgYWxsIHJvd3MgdG8gZWxpbWluYXRlIHBvc3NpYmxlIHVuZGVmaW5lZCB2YWx1ZXNcclxuICAgIGNvbnN0IHJvd3NXaXRoUHJvcGVydGllcyA9IHRoaXMudmFsdWVcclxuICAgICAgLm1hcChyZXNvdXJjZSA9PlxyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc291cmNlKVxyXG4gICAgICAgICAgLmZpbHRlcihwID0+XHJcbiAgICAgICAgICAgIHBbMF0gIT09ICdfbGlua3MnICYmXHJcbiAgICAgICAgICAgIHBbMF0gIT09ICdfZW1iZWRkZWQnICYmXHJcbiAgICAgICAgICAgIHBbMF0gIT09ICdpZCcgJiZcclxuICAgICAgICAgICAgcFswXSAhPT0gJ3RpbWVzdGFtcCcpKTtcclxuXHJcbiAgICBsZXQgZGlzdGluY3RQcm9wZXJ0aWVzID0gcm93c1dpdGhQcm9wZXJ0aWVzWzBdO1xyXG4gICAgZm9yIChsZXQgcHJvcGVydGllc09mUm93IG9mIHJvd3NXaXRoUHJvcGVydGllcykge1xyXG4gICAgICBmb3IgKHZhciBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzT2ZSb3cpIHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eVswXTtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlbMV07XHJcbiAgICAgICAgY29uc3QgYWxyZWFkeUZvdW5kUHJvcGVydHlXaXRoU2FtZU5hbWUgPSBkaXN0aW5jdFByb3BlcnRpZXMuZmluZChwID0+IHBbMF0gPT09IHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgaWYgKCFhbHJlYWR5Rm91bmRQcm9wZXJ0eVdpdGhTYW1lTmFtZSkgLy8gQWRkIG5ldyBwcm9wZXJ0eVxyXG4gICAgICAgICAgZGlzdGluY3RQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xyXG4gICAgICAgIGVsc2UgaWYgKCFhbHJlYWR5Rm91bmRQcm9wZXJ0eVdpdGhTYW1lTmFtZVsxXSAmJiBwcm9wZXJ0eVZhbHVlKSAvLyBVc2UgZGVmaW5lZCB2YWx1ZSBpbnN0ZWFkIG9mIGV4aXN0aW5nIHVuZGVmaW5lZCB2YWx1ZVxyXG4gICAgICAgICAgYWxyZWFkeUZvdW5kUHJvcGVydHlXaXRoU2FtZU5hbWVbMV0gPSBwcm9wZXJ0eVZhbHVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgcm93cyBhcmUgZW50aXRpZXMgd2l0aCBjaGFuZ2UgdHJhY2tpbmdcclxuICAgIGNvbnN0IHdpdGhvdXRDaGFuZ2VUcmFja2luZ1Byb3BlcnRpZXMgPSBkaXN0aW5jdFByb3BlcnRpZXMuZmlsdGVyKHAgPT5cclxuICAgICAgcFswXSAhPT0gJ2NyZWF0ZWRBdCcgJiZcclxuICAgICAgcFswXSAhPT0gJ2NyZWF0ZWRCeScgJiZcclxuICAgICAgcFswXSAhPT0gJ2xhc3RDaGFuZ2VkQXQnICYmXHJcbiAgICAgIHBbMF0gIT09ICdsYXN0Q2hhbmdlZEJ5Jyk7XHJcbiAgICBjb25zdCBoYXNDaGFuZ2VUcmFja2luZ1Byb3BlcnRpZXMgPSB3aXRob3V0Q2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzLmxlbmd0aCA8IGRpc3RpbmN0UHJvcGVydGllcy5sZW5ndGg7XHJcblxyXG4gICAgLy8gRmlyc3QgdGhlIGlkLCB0aGVuIGFsbCBvdGhlciBwcm9wZXJ0aWVzXHJcbiAgICBjb25zdCBzb3J0ZWRQcm9wZXJ0aWVzOiBbc3RyaW5nLCBhbnldW10gPSBbXHJcbiAgICAgIFsnaWQnLCAwXSxcclxuICAgICAgLi4ud2l0aG91dENoYW5nZVRyYWNraW5nUHJvcGVydGllc1xyXG4gICAgXTtcclxuXHJcbiAgICAvLyBBbmQgY2hhbmdlIHRyYWNraW5nIHByb3BlcnRpZXMgYXQgdGhlIGVuZFxyXG4gICAgaWYgKGhhc0NoYW5nZVRyYWNraW5nUHJvcGVydGllcykge1xyXG4gICAgICBzb3J0ZWRQcm9wZXJ0aWVzLnB1c2goWydjcmVhdGVkQXQnLCBuZXcgRGF0ZSgpXSk7XHJcbiAgICAgIHNvcnRlZFByb3BlcnRpZXMucHVzaChbJ2NyZWF0ZWRCeScsICcnXSk7XHJcbiAgICAgIHNvcnRlZFByb3BlcnRpZXMucHVzaChbJ2xhc3RDaGFuZ2VkQXQnLCBuZXcgRGF0ZSgpXSk7XHJcbiAgICAgIHNvcnRlZFByb3BlcnRpZXMucHVzaChbJ2xhc3RDaGFuZ2VkQnknLCAnJ10pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbHVtbnMgPSBzb3J0ZWRQcm9wZXJ0aWVzXHJcbiAgICAgIC5tYXAocCA9PiAoe1xyXG4gICAgICAgIGhlYWRlcjogUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQudG9UaXRsZUNhc2UocFswXSksXHJcbiAgICAgICAgZmllbGQ6IHBbMF0sXHJcbiAgICAgICAgdHlwZTogUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuZ2V0Q29sdW1uVHlwZShwWzFdKSxcclxuICAgICAgfSkpO1xyXG5cclxuICAgIHJldHVybiBjb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Q29sdW1uVHlwZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgcmV0dXJuICd0ZXh0JztcclxuXHJcbiAgICBpZiAoXy5pc051bWJlcih2YWx1ZSkpXHJcbiAgICAgIHJldHVybiAnbnVtZXJpYyc7XHJcblxyXG4gICAgaWYgKF8uaXNEYXRlKHZhbHVlKSlcclxuICAgICAgcmV0dXJuICdkYXRlJ1xyXG5cclxuICAgIGlmIChfLmlzU3RyaW5nKHZhbHVlKSlcclxuICAgICAgcmV0dXJuICd0ZXh0JztcclxuXHJcbiAgICBpZiAoXy5pc0Jvb2xlYW4odmFsdWUpKVxyXG4gICAgICByZXR1cm4gJ2Jvb2xlYW4nO1xyXG5cclxuICAgIHJldHVybiAndGV4dCdcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHRvVGl0bGVDYXNlKGFueUNhc2U6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGFueUNhc2VcclxuICAgICAgLnJlcGxhY2UoLyhfKSsvZywgJyAnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVuZGVyc2NvcmUgdG8gd2hpdGVzcGFjZVxyXG4gICAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXVthLXpdKS9nLCBcIiQxICQyXCIpICAgICAgICAgICAvLyBpbnNlcnQgc3BhY2UgYmVmb3JlIGVhY2ggbmV3IHdvcmQgaWYgdGhlcmUgaXMgbm9uZVxyXG4gICAgICAucmVwbGFjZSgvKFtBLVpdW2Etel0pKFtBLVpdKS9nLCBcIiQxICQyXCIpICAgICAgICAgICAvLyBpbnNlcnQgc3BhY2UgYWZ0ZXIgZWFjaCB3b3JkIGlmIHRoZXJlIGlzIG5vbmVcclxuICAgICAgLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0rW2Etel0pL2csIFwiJDEgJDJcIikgICAgICAgICAgLy8gaW5zZXJ0IHNwYWNlIGFmdGVyIHNpbmdsZSBsZXR0ZXIgd29yZCBpZiB0aGVyZSBpcyBub25lXHJcbiAgICAgIC5yZXBsYWNlKC8oW0EtWl0rKShbQS1aXVthLXpdW2Etel0pL2csIFwiJDEgJDJcIikgICAgIC8vIGluc2VydCBzcGFjZSBiZWZvcmUgc2luZ2xlIGxldHRlciB3b3JkIGlmIHRoZXJlIGlzIG5vbmVcclxuICAgICAgLnJlcGxhY2UoLyhbYS16XSspKFtBLVowLTldKykvZywgXCIkMSAkMlwiKSAgICAgICAgICAgLy8gaW5zZXJ0IHNwYWNlIGFmdGVyIG51bWJlcnNcclxuICAgICAgLnJlcGxhY2UoL14uLywgKG1hdGNoKSA9PiBtYXRjaC50b1VwcGVyQ2FzZSgpKTsgICAgIC8vIGNoYW5nZSBmaXJzdCBsZXR0ZXIgdG8gYmUgdXBwZXIgY2FzZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlUGFyYW1ldGVyc0Zyb21FdmVudChldmVudDogTGF6eUxvYWRFdmVudCkge1xyXG4gICAgY29uc3Qgb0RhdGFQYXJhbWV0ZXJzID0ge1xyXG4gICAgICAkZmlsdGVyOiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5jcmVhdGVGaWx0ZXJGcm9tRXZlbnQoZXZlbnQpLFxyXG4gICAgICAkb3JkZXJieTogUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuY3JlYXRlT3JkZXJCeUZyb21FdmVudChldmVudCksXHJcbiAgICAgICR0b3A6IFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50LmNyZWF0ZVRvcEZyb21FdmVudChldmVudCksXHJcbiAgICAgICRza2lwOiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5jcmVhdGVTa2lwRnJvbUV2ZW50KGV2ZW50KVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gb0RhdGFQYXJhbWV0ZXJzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZVNraXBGcm9tRXZlbnQoZXZlbnQ6IExhenlMb2FkRXZlbnQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGV2ZW50LmZpcnN0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZVRvcEZyb21FdmVudChldmVudDogTGF6eUxvYWRFdmVudCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gZXZlbnQucm93cztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVPcmRlckJ5RnJvbUV2ZW50KGV2ZW50OiBMYXp5TG9hZEV2ZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmIChldmVudC5zb3J0RmllbGQpIHtcclxuICAgICAgY29uc3Qgb3JkZXIgPSAhZXZlbnQuc29ydE9yZGVyIHx8IGV2ZW50LnNvcnRPcmRlciA+IDAgPyAnYXNjJyA6ICdkZXNjJztcclxuICAgICAgcmV0dXJuIGAke2V2ZW50LnNvcnRGaWVsZH0gJHtvcmRlcn1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIHN0YXRpYyBjcmVhdGVGaWx0ZXJGcm9tRXZlbnQoZXZlbnQ6IExhenlMb2FkRXZlbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFldmVudC5maWx0ZXJzKVxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlciA9IE9iamVjdC5lbnRyaWVzKGV2ZW50LmZpbHRlcnMpXHJcbiAgICAgIC5tYXAoKFtwcm9wZXJ0eSwgZmlsdGVyXSkgPT4gUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuY3JlYXRlRmlsdGVyRm9yUHJvcGVydHkocHJvcGVydHksIGZpbHRlcikpXHJcbiAgICAgIC5maWx0ZXIoZmlsdGVyID0+ICEhZmlsdGVyKVxyXG4gICAgICAuam9pbignIGFuZCAnKTtcclxuXHJcbiAgICBpZiAoZmlsdGVyID09PSAnJylcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcbiAgICByZXR1cm4gYCgke2ZpbHRlcn0pYFxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZUZpbHRlckZvclByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIGZpbHRlcjogRmlsdGVyTWV0YWRhdGEpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFmaWx0ZXIudmFsdWUpXHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3Qgb0RhdGFPcGVyYXRvciA9IFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50LmNyZWF0ZU9EYXRhT3BlcmF0b3IoXHJcbiAgICAgIGZpbHRlci5tYXRjaE1vZGUsXHJcbiAgICApO1xyXG4gICAgY29uc3QgY29tcGFyaXNvblZhbHVlID0gUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuY3JlYXRlQ29tcGFyaXNvblZhbHVlKGZpbHRlci52YWx1ZSk7XHJcblxyXG4gICAgc3dpdGNoIChvRGF0YU9wZXJhdG9yKSB7XHJcbiAgICAgIGNhc2UgJ2NvbnRhaW5zJzpcclxuICAgICAgY2FzZSAnbm90IGNvbnRhaW5zJzpcclxuICAgICAgY2FzZSAnc3RhcnRzd2l0aCc6XHJcbiAgICAgIGNhc2UgJ2VuZHN3aXRoJzpcclxuICAgICAgICByZXR1cm4gYCR7b0RhdGFPcGVyYXRvcn0oJHtwcm9wZXJ0eX0sICR7Y29tcGFyaXNvblZhbHVlfSlgO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBgJHtwcm9wZXJ0eX0gJHtvRGF0YU9wZXJhdG9yfSAke2NvbXBhcmlzb25WYWx1ZX1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZU9EYXRhT3BlcmF0b3IobWF0Y2hNb2RlPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAobWF0Y2hNb2RlKSB7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLlNUQVJUU19XSVRIOlxyXG4gICAgICAgIHJldHVybiAnc3RhcnRzd2l0aCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkNPTlRBSU5TOlxyXG4gICAgICAgIHJldHVybiAnY29udGFpbnMnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5OT1RfQ09OVEFJTlM6XHJcbiAgICAgICAgcmV0dXJuICdub3QgY29udGFpbnMnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5FTkRTX1dJVEg6XHJcbiAgICAgICAgcmV0dXJuICdlbmRzd2l0aCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVRVUFMUzpcclxuICAgICAgICByZXR1cm4gJ2VxJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTk9UX0VRVUFMUzpcclxuICAgICAgICByZXR1cm4gJ25lJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuSU46XHJcbiAgICAgICAgcmV0dXJuICdpbic7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkxFU1NfVEhBTjpcclxuICAgICAgICByZXR1cm4gJ2x0JztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTEVTU19USEFOX09SX0VRVUFMX1RPOlxyXG4gICAgICAgIHJldHVybiAnbGUnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5HUkVBVEVSX1RIQU46XHJcbiAgICAgICAgcmV0dXJuICdndCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UTzpcclxuICAgICAgICByZXR1cm4gJ2dlJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuSVM6XHJcbiAgICAgICAgcmV0dXJuICdlcSc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLklTX05PVDpcclxuICAgICAgICByZXR1cm4gJ25lJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQkVGT1JFOlxyXG4gICAgICAgIHJldHVybiAnbHQnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5BRlRFUjpcclxuICAgICAgICByZXR1cm4gJ2d0JztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBFcnJvcihgVW5rbm93biBtYXRjaE1vZGUgJHttYXRjaE1vZGV9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlQ29tcGFyaXNvblZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICByZXR1cm4gJ251bGwnO1xyXG5cclxuICAgIGlmIChfLmlzTnVtYmVyKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIGAke3ZhbHVlfWA7XHJcblxyXG4gICAgaWYgKF8uaXNEYXRlKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIGBjYXN0KCR7dmFsdWUudG9JU09TdHJpbmcoKX0sIEVkbS5EYXRlVGltZU9mZnNldClgO1xyXG5cclxuICAgIGlmIChfLmlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICBpZiAoIWlzTmFOKGRhdGUudmFsdWVPZigpKSlcclxuICAgICAgICByZXR1cm4gYGNhc3QoJHtkYXRlLnRvSVNPU3RyaW5nKCl9LCBFZG0uRGF0ZVRpbWVPZmZzZXQpYDtcclxuXHJcbiAgICAgIHJldHVybiBgJyR7dmFsdWV9J2A7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKF8uaXNBcnJheSh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiBgKCR7dmFsdWVcclxuICAgICAgICAubWFwKCh2KSA9PiB0aGlzLmNyZWF0ZUNvbXBhcmlzb25WYWx1ZSh2KSlcclxuICAgICAgICAuam9pbignLCcpfSlgO1xyXG5cclxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIHZhbHVlOiAke3ZhbHVlfS5gKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxwLXRhYmxlIFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgIFtsYXp5XT1cInRydWVcIlxyXG4gICAgICAgICBbbGF6eUxvYWRPbkluaXRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAob25MYXp5TG9hZCk9XCJsb2FkKCRldmVudClcIlxyXG4gICAgICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcclxuICAgICAgICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAgICAgICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VcIlxyXG4gICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgIFtzaG93SW5pdGlhbFNvcnRCYWRnZV09XCJ0cnVlXCJcclxuICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiPlxyXG5cclxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICA8dHI+XHJcbiAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWQtZmxleCBwLWpjLWJldHdlZW4gcC1haS1jZW50ZXJcIj5cclxuICAgICAgICAgIHt7Y29sLmhlYWRlcn19XHJcbiAgICAgICAgICA8cC1zb3J0SWNvbiBbZmllbGRdPVwiY29sLmZpZWxkXCI+PC9wLXNvcnRJY29uPlxyXG4gICAgICAgICAgPHAtY29sdW1uRmlsdGVyIFt0eXBlXT1cImNvbC50eXBlXCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiIGRpc3BsYXk9XCJtZW51XCI+PC9wLWNvbHVtbkZpbHRlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC90aD5cclxuICAgICAgPHRoPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCIgcFRvb2x0aXA9XCJDcmVhdGUgbmV3XCIgdG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiPlxyXG4gICAgICAgICAgICA8YSBjbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3NcIiBpY29uPVwiZmFzIGZhLXBsdXNcIiBwQnV0dG9uIFtyb3V0ZXJMaW5rXT1cIlsnL2VkaXQnLCBhcGlOYW1lLCBuZXdIcmVmXVwiPjwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RoPlxyXG4gICAgPC90cj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1lbnRpdHkgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCI+XHJcbiAgICA8dHI+XHJcbiAgICAgIDx0ZCBbbmdTd2l0Y2hdPVwiY29sLnR5cGVcIiAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cclxuICAgICAgICAgIDxwLWF2YXRhciAqbmdJZj1cImNvbC5maWVsZCA9PT0gJ2NyZWF0ZWRCeScgfHwgY29sLmZpZWxkID09PSAnbGFzdENoYW5nZWRCeSdcIiBbcFRvb2x0aXBdPVwiZW50aXR5W2NvbC5maWVsZF1cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBbaW1hZ2VdPVwiYXZhdGFyR2VuZXJhdG9yLmdldEltYWdlKGVudGl0eVtjb2wuZmllbGRdKVwiIFtsYWJlbF09XCJhdmF0YXJHZW5lcmF0b3IuZ2V0TGFiZWwoZW50aXR5W2NvbC5maWVsZF0pXCIgW3N0eWxlXT1cImF2YXRhckdlbmVyYXRvci5nZXRTdHlsZShlbnRpdHlbY29sLmZpZWxkXSlcIiBzaGFwZT1cImNpcmNsZVwiPjwvcC1hdmF0YXI+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbC5maWVsZCAhPT0gJ2NyZWF0ZWRCeScgJiYgY29sLmZpZWxkICE9PSAnbGFzdENoYW5nZWRCeSdcIj57e2VudGl0eVtjb2wuZmllbGRdfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1lcmljJ1wiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+e3tlbnRpdHlbY29sLmZpZWxkXX19PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPjxwLXRyaVN0YXRlQ2hlY2tib3ggWyhuZ01vZGVsKV09XCJlbnRpdHlbY29sLmZpZWxkXVwiIFtyZWFkb25seV09XCJ0cnVlXCI+PC9wLXRyaVN0YXRlQ2hlY2tib3g+PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIiBbcFRvb2x0aXBdPVwiZW50aXR5W2NvbC5maWVsZF1cIj57e2VudGl0eVtjb2wuZmllbGRdIHwgZGF0ZTpkYXRlRm9ybWF0fX08L3NwYW4+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDx0ZD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICA8YSBwQnV0dG9uIHBUb29sdGlwPVwiVmlldy9FZGl0XCIgdG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiIFtyb3V0ZXJMaW5rXT1cIltlZGl0TGluaywgYXBpTmFtZSwgZW50aXR5Ll9saW5rcz8uc2VsZlswXS5ocmVmXVwiIGljb249XCJmYXMgZmEtZWRpdFwiPjwvYT5cclxuICAgICAgICAgIDxidXR0b24gcFRvb2x0aXA9XCJEZWxldGVcIiB0b29sdGlwUG9zaXRpb249XCJsZWZ0XCIgcEJ1dHRvbiAqbmdJZj1cImVudGl0eS5fbGlua3MuZGVsZXRlXCIgKGNsaWNrKT1cInNob3dEZWxldGVDb25maXJtYXRpb01vZGFsKGVudGl0eSlcIiBpY29uPVwiZmFzIGZhLXRyYXNoLWFsdFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm14LTIgcC1idXR0b24tZGFuZ2VyXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L3RyPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgIDx0cj5cclxuICAgICAgPHRkIGNvbHNwYW49XCI4XCI+Tm8gZW50cmllcyBmb3VuZC48L3RkPlxyXG4gICAgPC90cj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuPC9wLXRhYmxlPlxyXG5cclxuPHAtdG9hc3Q+PC9wLXRvYXN0PlxyXG48cC1jb25maXJtRGlhbG9nPjwvcC1jb25maXJtRGlhbG9nPlxyXG4iXX0=
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUF1QixlQUFlLEVBQWlELE1BQU0sYUFBYSxDQUFDO0FBR2xILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBRzlELE1BQU0sQ0FBTixJQUFZLFVBS1g7QUFMRCxXQUFZLFVBQVU7SUFDcEIsMkJBQWEsQ0FBQTtJQUNiLGlDQUFtQixDQUFBO0lBQ25CLGlDQUFtQixDQUFBO0lBQ25CLDJCQUFhLENBQUE7QUFDZixDQUFDLEVBTFcsVUFBVSxLQUFWLFVBQVUsUUFLckI7QUFhRCxNQUFNLE9BQU8sMEJBQTBCO0lBd0VyQyxZQUNVLFFBQW1DLEVBQ25DLG9CQUF5QyxFQUN6QyxlQUErQixFQUNoQyxlQUFnQztRQUgvQixhQUFRLEdBQVIsUUFBUSxDQUEyQjtRQUNuQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUF2RWpDLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFTeEIs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LEVBQUUsSUFBSSxDQUFDLENBQUM7d0hBbEVaLDBCQUEwQjs0R0FBMUIsMEJBQTBCLDZJQzNCdkMsNGpHQThEQTs0RkRuQ2EsMEJBQTBCO2tCQUx0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxTQUFTO29CQUNuQixXQUFXLEVBQUUsc0NBQXNDO29CQUNuRCxTQUFTLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztpQkFDbkQ7Nk1BUVksUUFBUTtzQkFEbEIsS0FBSztnQkFVSyxPQUFPO3NCQURqQixLQUFLO2dCQVdLLEdBQUc7c0JBRGIsS0FBSztnQkFXQyxXQUFXO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYWdlZExpc3RSZXNvdXJjZSwgUmVzb3VyY2UgfSBmcm9tICdAd2VydHp1aS9uZ3gtaGFsLWNsaWVudCc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgRmlsdGVyTWF0Y2hNb2RlLCBGaWx0ZXJNZXRhZGF0YSwgTGF6eUxvYWRFdmVudCwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFJFU1R3b3JsZENsaWVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQnO1xyXG5pbXBvcnQgeyBSRVNUd29ybGRDbGllbnRDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudC1jb2xsZWN0aW9uJztcclxuaW1wb3J0IHsgUHJvYmxlbURldGFpbHMgfSBmcm9tICcuLi8uLi9tb2RlbHMvcHJvYmxlbS1kZXRhaWxzJztcclxuaW1wb3J0IHsgQXZhdGFyR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXZhdGFyLWdlbmVyYXRvcic7XHJcblxyXG5leHBvcnQgZW51bSBDb2x1bW5UeXBlIHtcclxuICB0ZXh0ID0gJ3RleHQnLFxyXG4gIG51bWVyaWMgPSAnbnVtZXJpYycsXHJcbiAgYm9vbGVhbiA9ICdib29sZWFuJyxcclxuICBkYXRlID0gJ2RhdGUnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uIHtcclxuICBoZWFkZXI6IHN0cmluZztcclxuICBmaWVsZDogc3RyaW5nO1xyXG4gIHR5cGU6IENvbHVtblR5cGU7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1saXN0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC1saXN0LXZpZXcuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudCB7XHJcblxyXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBDb2x1bW5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcclxuICB9XHJcbiAgcHJpdmF0ZSBfY29sdW1uczogQ29sdW1uW10gPSBbXTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZWRpdExpbmsodmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbHVlKVxyXG4gICAgICB0aGlzLl9lZGl0TGluayA9IHZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGVkaXRMaW5rKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VkaXRMaW5rO1xyXG4gIH1cclxuICBwcml2YXRlIF9lZGl0TGluayA9ICcvZWRpdCc7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGFwaU5hbWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYXBpTmFtZSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuYXBpTmFtZSAmJiB0aGlzLnJlbCAmJiB0aGlzLl9sYXN0RXZlbnQpXHJcbiAgICAgIHRoaXMubG9hZCh0aGlzLl9sYXN0RXZlbnQpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGFwaU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9hcGlOYW1lO1xyXG4gIH1cclxuICBwcml2YXRlIF9hcGlOYW1lPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCByZWwodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fcmVsID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5hcGlOYW1lICYmIHRoaXMucmVsICYmIHRoaXMuX2xhc3RFdmVudClcclxuICAgICAgdGhpcy5sb2FkKHRoaXMuX2xhc3RFdmVudCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgcmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVsO1xyXG4gIH1cclxuICBwcml2YXRlIF9yZWw/OiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcm93c1BlclBhZ2U6IG51bWJlcltdO1xyXG4gIHB1YmxpYyByZXNvdXJjZT86IFBhZ2VkTGlzdFJlc291cmNlO1xyXG4gIHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIF90b3RhbFJlY29yZHMgPSAwO1xyXG4gIHByaXZhdGUgX2xhc3RFdmVudDogTGF6eUxvYWRFdmVudDtcclxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFJlc291cmNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2U/Ll9lbWJlZGRlZD8uaXRlbXMgfHwgW107XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgcm93cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhc3RFdmVudD8ucm93cyB8fCAwO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHRvdGFsUmVjb3JkcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsUmVjb3JkcztcclxuICB9XHJcbiAgcHJpdmF0ZSBzZXQgdG90YWxSZWNvcmRzKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3RvdGFsUmVjb3JkcyA9IHZhbHVlIHx8IDA7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgc29ydE9yZGVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhc3RFdmVudC5zb3J0T3JkZXIgfHwgMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbmV3SHJlZigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2U/LmZpbmRMaW5rKCduZXcnKT8uaHJlZjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIF9kYXRlRm9ybWF0ID0gbmV3IERhdGUoMzMzMywgMTAsIDIyKVxyXG4gICAgLnRvTG9jYWxlRGF0ZVN0cmluZygpXHJcbiAgICAucmVwbGFjZShcIjIyXCIsIFwiZGRcIilcclxuICAgIC5yZXBsYWNlKFwiMTFcIiwgXCJNTVwiKVxyXG4gICAgLnJlcGxhY2UoXCIzMzMzXCIsIFwieVwiKVxyXG4gICAgLnJlcGxhY2UoXCIzM1wiLCBcInl5XCIpO1xyXG5cclxuICBwdWJsaWMgZ2V0IGRhdGVGb3JtYXQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5fZGF0ZUZvcm1hdDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfY2xpZW50czogUkVTVHdvcmxkQ2xpZW50Q29sbGVjdGlvbixcclxuICAgIHByaXZhdGUgX2NvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgYXZhdGFyR2VuZXJhdG9yOiBBdmF0YXJHZW5lcmF0b3IpIHtcclxuICAgIHRoaXMucm93c1BlclBhZ2UgPSBbMTAsIDI1LCA1MF07XHJcblxyXG4gICAgdGhpcy5fbGFzdEV2ZW50ID0ge1xyXG4gICAgICByb3dzOiB0aGlzLnJvd3NQZXJQYWdlWzBdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDbGllbnQoKTogUkVTVHdvcmxkQ2xpZW50IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgYSBjbGllbnQsIGJlY2F1c2UgdGhlIGFwaU5hbWUgaXMgbm90IHNldC4nKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50cy5nZXRDbGllbnQodGhpcy5hcGlOYW1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkKGV2ZW50OiBMYXp5TG9hZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuYXBpTmFtZSB8fCAhdGhpcy5yZWwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLl9sYXN0RXZlbnQgPSBldmVudDtcclxuXHJcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gdGhpcy5jcmVhdGVQYXJhbWV0ZXJzRnJvbUV2ZW50KGV2ZW50KTtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5nZXRMaXN0KHRoaXMucmVsLCBwYXJhbWV0ZXJzKTtcclxuICAgIGlmICghcmVzcG9uc2Uub2sgfHwgUHJvYmxlbURldGFpbHMuaXNQcm9ibGVtRGV0YWlscyhyZXNwb25zZS5ib2R5KSB8fCAhcmVzcG9uc2UuYm9keSkge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiAnRXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgcmVzb3VyY2VzIGZyb20gdGhlIEFQSS4nLCBkYXRhOiByZXNwb25zZSB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJlc3BvbnNlLmJvZHkpIHtcclxuICAgICAgdGhpcy5yZXNvdXJjZSA9IHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gdGhpcy5yZXNvdXJjZS50b3RhbFBhZ2VzICYmIHBhcmFtZXRlcnMuJHRvcCA/IHRoaXMucmVzb3VyY2UudG90YWxQYWdlcyAqIHBhcmFtZXRlcnMuJHRvcCA6IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5fY29sdW1ucyA9IHRoaXMuY3JlYXRlQ29sdW1ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIHNob3dEZWxldGVDb25maXJtYXRpb01vZGFsKHJlc291cmNlOiBSZXNvdXJjZSkge1xyXG4gICAgdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuICAgICAgbWVzc2FnZTogJ0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyByZXNvdXJjZT8nLFxyXG4gICAgICBoZWFkZXI6ICdDb25maXJtIGRlbGV0ZScsXHJcbiAgICAgIGljb246ICdmYXIgZmEtdHJhc2gtYWx0JyxcclxuICAgICAgYWNjZXB0OiAoKSA9PiB0aGlzLmRlbGV0ZShyZXNvdXJjZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRlbGV0ZShyZXNvdXJjZTogUmVzb3VyY2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lIHx8ICF0aGlzLnJlbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuZGVsZXRlKHJlc291cmNlKTtcclxuXHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnRGVsZXRlZCcsIGRldGFpbDogJ1RoZSByZXNvdXJjZSBoYXMgYmVlbiBkZWxldGVkLicgfSk7XHJcblxyXG4gICAgdGhpcy5sb2FkKHRoaXMuX2xhc3RFdmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNvbHVtbnMoKTogQ29sdW1uW10ge1xyXG4gICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoID09PSAwKVxyXG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5zO1xyXG5cclxuICAgIC8vIEdldCBhbGwgZGlzdGluY3QgcHJvcGVydGllcyBmcm9tIGFsbCByb3dzXHJcbiAgICAvLyBXZSBsb29rIGF0IGFsbCByb3dzIHRvIGVsaW1pbmF0ZSBwb3NzaWJsZSB1bmRlZmluZWQgdmFsdWVzXHJcbiAgICBjb25zdCByb3dzV2l0aFByb3BlcnRpZXMgPSB0aGlzLnZhbHVlXHJcbiAgICAgIC5tYXAocmVzb3VyY2UgPT5cclxuICAgICAgICBPYmplY3QuZW50cmllcyhyZXNvdXJjZSlcclxuICAgICAgICAgIC5maWx0ZXIocCA9PlxyXG4gICAgICAgICAgICBwWzBdICE9PSAnX2xpbmtzJyAmJlxyXG4gICAgICAgICAgICBwWzBdICE9PSAnX2VtYmVkZGVkJyAmJlxyXG4gICAgICAgICAgICBwWzBdICE9PSAnaWQnICYmXHJcbiAgICAgICAgICAgIHBbMF0gIT09ICd0aW1lc3RhbXAnKSk7XHJcblxyXG4gICAgY29uc3QgZGlzdGluY3RQcm9wZXJ0aWVzID0gcm93c1dpdGhQcm9wZXJ0aWVzWzBdO1xyXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0aWVzT2ZSb3cgb2Ygcm93c1dpdGhQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllc09mUm93KSB7XHJcbiAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gcHJvcGVydHlbMF07XHJcbiAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5WzFdO1xyXG4gICAgICAgIGNvbnN0IGFscmVhZHlGb3VuZFByb3BlcnR5V2l0aFNhbWVOYW1lID0gZGlzdGluY3RQcm9wZXJ0aWVzLmZpbmQocCA9PiBwWzBdID09PSBwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIGlmICghYWxyZWFkeUZvdW5kUHJvcGVydHlXaXRoU2FtZU5hbWUpIC8vIEFkZCBuZXcgcHJvcGVydHlcclxuICAgICAgICAgIGRpc3RpbmN0UHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcclxuICAgICAgICBlbHNlIGlmICghYWxyZWFkeUZvdW5kUHJvcGVydHlXaXRoU2FtZU5hbWVbMV0gJiYgcHJvcGVydHlWYWx1ZSkgLy8gVXNlIGRlZmluZWQgdmFsdWUgaW5zdGVhZCBvZiBleGlzdGluZyB1bmRlZmluZWQgdmFsdWVcclxuICAgICAgICAgIGFscmVhZHlGb3VuZFByb3BlcnR5V2l0aFNhbWVOYW1lWzFdID0gcHJvcGVydHlWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZSByb3dzIGFyZSBlbnRpdGllcyB3aXRoIGNoYW5nZSB0cmFja2luZ1xyXG4gICAgY29uc3Qgd2l0aG91dENoYW5nZVRyYWNraW5nUHJvcGVydGllcyA9IGRpc3RpbmN0UHJvcGVydGllcy5maWx0ZXIocCA9PlxyXG4gICAgICBwWzBdICE9PSAnY3JlYXRlZEF0JyAmJlxyXG4gICAgICBwWzBdICE9PSAnY3JlYXRlZEJ5JyAmJlxyXG4gICAgICBwWzBdICE9PSAnbGFzdENoYW5nZWRBdCcgJiZcclxuICAgICAgcFswXSAhPT0gJ2xhc3RDaGFuZ2VkQnknKTtcclxuICAgIGNvbnN0IGhhc0NoYW5nZVRyYWNraW5nUHJvcGVydGllcyA9IHdpdGhvdXRDaGFuZ2VUcmFja2luZ1Byb3BlcnRpZXMubGVuZ3RoIDwgZGlzdGluY3RQcm9wZXJ0aWVzLmxlbmd0aDtcclxuXHJcbiAgICAvLyBGaXJzdCB0aGUgaWQsIHRoZW4gYWxsIG90aGVyIHByb3BlcnRpZXNcclxuICAgIGNvbnN0IHNvcnRlZFByb3BlcnRpZXM6IFtzdHJpbmcsIHVua25vd25dW10gPSBbXHJcbiAgICAgIFsnaWQnLCAwXSxcclxuICAgICAgLi4ud2l0aG91dENoYW5nZVRyYWNraW5nUHJvcGVydGllc1xyXG4gICAgXTtcclxuXHJcbiAgICAvLyBBbmQgY2hhbmdlIHRyYWNraW5nIHByb3BlcnRpZXMgYXQgdGhlIGVuZFxyXG4gICAgaWYgKGhhc0NoYW5nZVRyYWNraW5nUHJvcGVydGllcykge1xyXG4gICAgICBzb3J0ZWRQcm9wZXJ0aWVzLnB1c2goWydjcmVhdGVkQXQnLCBuZXcgRGF0ZSgpXSk7XHJcbiAgICAgIHNvcnRlZFByb3BlcnRpZXMucHVzaChbJ2NyZWF0ZWRCeScsICcnXSk7XHJcbiAgICAgIHNvcnRlZFByb3BlcnRpZXMucHVzaChbJ2xhc3RDaGFuZ2VkQXQnLCBuZXcgRGF0ZSgpXSk7XHJcbiAgICAgIHNvcnRlZFByb3BlcnRpZXMucHVzaChbJ2xhc3RDaGFuZ2VkQnknLCAnJ10pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbHVtbnMgPSBzb3J0ZWRQcm9wZXJ0aWVzXHJcbiAgICAgIC5tYXAocCA9PiAoe1xyXG4gICAgICAgIGhlYWRlcjogUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQudG9UaXRsZUNhc2UocFswXSksXHJcbiAgICAgICAgZmllbGQ6IHBbMF0sXHJcbiAgICAgICAgdHlwZTogUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuZ2V0Q29sdW1uVHlwZShwWzFdKSxcclxuICAgICAgfSkpO1xyXG5cclxuICAgIHJldHVybiBjb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Q29sdW1uVHlwZSh2YWx1ZTogdW5rbm93bik6IENvbHVtblR5cGUge1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHJldHVybiBDb2x1bW5UeXBlLnRleHQ7XHJcblxyXG4gICAgaWYgKF8uaXNOdW1iZXIodmFsdWUpKVxyXG4gICAgICByZXR1cm4gQ29sdW1uVHlwZS5udW1lcmljO1xyXG5cclxuICAgIGlmIChfLmlzRGF0ZSh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiBDb2x1bW5UeXBlLmRhdGU7XHJcblxyXG4gICAgaWYgKF8uaXNTdHJpbmcodmFsdWUpKVxyXG4gICAgICByZXR1cm4gQ29sdW1uVHlwZS50ZXh0O1xyXG5cclxuICAgIGlmIChfLmlzQm9vbGVhbih2YWx1ZSkpXHJcbiAgICAgIHJldHVybiBDb2x1bW5UeXBlLmJvb2xlYW47XHJcblxyXG4gICAgcmV0dXJuIENvbHVtblR5cGUudGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHRvVGl0bGVDYXNlKGFueUNhc2U6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGFueUNhc2VcclxuICAgICAgLnJlcGxhY2UoLyhfKSsvZywgJyAnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVuZGVyc2NvcmUgdG8gd2hpdGVzcGFjZVxyXG4gICAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXVthLXpdKS9nLCBcIiQxICQyXCIpICAgICAgICAgICAvLyBpbnNlcnQgc3BhY2UgYmVmb3JlIGVhY2ggbmV3IHdvcmQgaWYgdGhlcmUgaXMgbm9uZVxyXG4gICAgICAucmVwbGFjZSgvKFtBLVpdW2Etel0pKFtBLVpdKS9nLCBcIiQxICQyXCIpICAgICAgICAgICAvLyBpbnNlcnQgc3BhY2UgYWZ0ZXIgZWFjaCB3b3JkIGlmIHRoZXJlIGlzIG5vbmVcclxuICAgICAgLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0rW2Etel0pL2csIFwiJDEgJDJcIikgICAgICAgICAgLy8gaW5zZXJ0IHNwYWNlIGFmdGVyIHNpbmdsZSBsZXR0ZXIgd29yZCBpZiB0aGVyZSBpcyBub25lXHJcbiAgICAgIC5yZXBsYWNlKC8oW0EtWl0rKShbQS1aXVthLXpdW2Etel0pL2csIFwiJDEgJDJcIikgICAgIC8vIGluc2VydCBzcGFjZSBiZWZvcmUgc2luZ2xlIGxldHRlciB3b3JkIGlmIHRoZXJlIGlzIG5vbmVcclxuICAgICAgLnJlcGxhY2UoLyhbYS16XSspKFtBLVowLTldKykvZywgXCIkMSAkMlwiKSAgICAgICAgICAgLy8gaW5zZXJ0IHNwYWNlIGFmdGVyIG51bWJlcnNcclxuICAgICAgLnJlcGxhY2UoL14uLywgKG1hdGNoKSA9PiBtYXRjaC50b1VwcGVyQ2FzZSgpKTsgICAgIC8vIGNoYW5nZSBmaXJzdCBsZXR0ZXIgdG8gYmUgdXBwZXIgY2FzZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVQYXJhbWV0ZXJzRnJvbUV2ZW50KGV2ZW50OiBMYXp5TG9hZEV2ZW50KSB7XHJcbiAgICBjb25zdCBvRGF0YVBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICRmaWx0ZXI6IHRoaXMuY3JlYXRlRmlsdGVyRnJvbUV2ZW50KGV2ZW50KSxcclxuICAgICAgJG9yZGVyYnk6IFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50LmNyZWF0ZU9yZGVyQnlGcm9tRXZlbnQoZXZlbnQpLFxyXG4gICAgICAkdG9wOiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5jcmVhdGVUb3BGcm9tRXZlbnQoZXZlbnQpLFxyXG4gICAgICAkc2tpcDogUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuY3JlYXRlU2tpcEZyb21FdmVudChldmVudClcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG9EYXRhUGFyYW1ldGVycztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVTa2lwRnJvbUV2ZW50KGV2ZW50OiBMYXp5TG9hZEV2ZW50KTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBldmVudC5maXJzdDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVUb3BGcm9tRXZlbnQoZXZlbnQ6IExhenlMb2FkRXZlbnQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGV2ZW50LnJvd3M7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlT3JkZXJCeUZyb21FdmVudChldmVudDogTGF6eUxvYWRFdmVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoZXZlbnQuc29ydEZpZWxkKSB7XHJcbiAgICAgIGNvbnN0IG9yZGVyID0gIWV2ZW50LnNvcnRPcmRlciB8fCBldmVudC5zb3J0T3JkZXIgPiAwID8gJ2FzYycgOiAnZGVzYyc7XHJcbiAgICAgIHJldHVybiBgJHtldmVudC5zb3J0RmllbGR9ICR7b3JkZXJ9YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWx0ZXJGcm9tRXZlbnQoZXZlbnQ6IExhenlMb2FkRXZlbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFldmVudC5maWx0ZXJzKVxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlciA9IE9iamVjdC5lbnRyaWVzKGV2ZW50LmZpbHRlcnMpXHJcbiAgICAgIC8vIFRoZSB0eXBlIGRlZmluaXRpb24gaXMgd3JvbmcsIGV2ZW50LmZpbHRlcnMgaGFzIHZhbHVlcyBvZiB0eXBlIEZpbHRlck1ldGFkYXRhW10gYW5kIG5vdCBGaWx0ZXJNZXRhZGF0YS5cclxuICAgICAgLm1hcCgoW3Byb3BlcnR5LCBmaWx0ZXJdKSA9PiAoeyBwcm9wZXJ0eTogcHJvcGVydHksIGZpbHRlcnM6IGZpbHRlciBhcyBGaWx0ZXJNZXRhZGF0YVtdIH0pKVxyXG4gICAgICAubWFwKGYgPT4gdGhpcy5jcmVhdGVGaWx0ZXJGb3JQcm9wZXJ0eUFycmF5KGYucHJvcGVydHksIGYuZmlsdGVycykpXHJcbiAgICAgIC5maWx0ZXIoZiA9PiAhIWYpXHJcbiAgICAgIC5qb2luKCcgYW5kICcpO1xyXG5cclxuICAgIGlmIChmaWx0ZXIgPT09ICcnKVxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIHJldHVybiBgKCR7ZmlsdGVyfSlgO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWx0ZXJGb3JQcm9wZXJ0eUFycmF5KHByb3BlcnR5OiBzdHJpbmcsIGZpbHRlcnM6IEZpbHRlck1ldGFkYXRhW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgZmlsdGVyID0gZmlsdGVyc1xyXG4gICAgICAubWFwKGYgPT4gdGhpcy5jcmVhdGVGaWx0ZXJGb3JQcm9wZXJ0eShwcm9wZXJ0eSwgZikpXHJcbiAgICAgIC5maWx0ZXIoZiA9PiAhIWYpXHJcbiAgICAgIC5qb2luKGAgJHtmaWx0ZXJzWzBdLm9wZXJhdG9yfSBgKTtcclxuXHJcbiAgICBpZiAoZmlsdGVyID09PSAnJylcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcbiAgICByZXR1cm4gYCgke2ZpbHRlcn0pYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRmlsdGVyRm9yUHJvcGVydHkocHJvcGVydHk6IHN0cmluZywgZmlsdGVyOiBGaWx0ZXJNZXRhZGF0YSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIWZpbHRlci52YWx1ZSlcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdCBvRGF0YU9wZXJhdG9yID0gUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuY3JlYXRlT0RhdGFPcGVyYXRvcihcclxuICAgICAgZmlsdGVyLm1hdGNoTW9kZSxcclxuICAgICk7XHJcbiAgICBjb25zdCBjb21wYXJpc29uVmFsdWUgPSB0aGlzLmNyZWF0ZUNvbXBhcmlzb25WYWx1ZShwcm9wZXJ0eSwgZmlsdGVyLnZhbHVlKTtcclxuXHJcbiAgICBzd2l0Y2ggKG9EYXRhT3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSAnY29udGFpbnMnOlxyXG4gICAgICBjYXNlICdub3QgY29udGFpbnMnOlxyXG4gICAgICBjYXNlICdzdGFydHN3aXRoJzpcclxuICAgICAgY2FzZSAnZW5kc3dpdGgnOlxyXG4gICAgICAgIHJldHVybiBgJHtvRGF0YU9wZXJhdG9yfSgke3Byb3BlcnR5fSwgJHtjb21wYXJpc29uVmFsdWV9KWA7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGAke3Byb3BlcnR5fSAke29EYXRhT3BlcmF0b3J9ICR7Y29tcGFyaXNvblZhbHVlfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVPRGF0YU9wZXJhdG9yKG1hdGNoTW9kZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKG1hdGNoTW9kZSkge1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5TVEFSVFNfV0lUSDpcclxuICAgICAgICByZXR1cm4gJ3N0YXJ0c3dpdGgnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5DT05UQUlOUzpcclxuICAgICAgICByZXR1cm4gJ2NvbnRhaW5zJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTk9UX0NPTlRBSU5TOlxyXG4gICAgICAgIHJldHVybiAnbm90IGNvbnRhaW5zJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuRU5EU19XSVRIOlxyXG4gICAgICAgIHJldHVybiAnZW5kc3dpdGgnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5FUVVBTFM6XHJcbiAgICAgICAgcmV0dXJuICdlcSc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLk5PVF9FUVVBTFM6XHJcbiAgICAgICAgcmV0dXJuICduZSc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLklOOlxyXG4gICAgICAgIHJldHVybiAnaW4nO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5MRVNTX1RIQU46XHJcbiAgICAgICAgcmV0dXJuICdsdCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkxFU1NfVEhBTl9PUl9FUVVBTF9UTzpcclxuICAgICAgICByZXR1cm4gJ2xlJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuR1JFQVRFUl9USEFOOlxyXG4gICAgICAgIHJldHVybiAnZ3QnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE86XHJcbiAgICAgICAgcmV0dXJuICdnZSc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLklTOlxyXG4gICAgICAgIHJldHVybiAnZXEnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5JU19OT1Q6XHJcbiAgICAgICAgcmV0dXJuICduZSc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkJFRk9SRTpcclxuICAgICAgICByZXR1cm4gJ2x0JztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQUZURVI6XHJcbiAgICAgICAgcmV0dXJuICdndCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRBVEVfQUZURVI6XHJcbiAgICAgICAgcmV0dXJuICdnZSc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRBVEVfQkVGT1JFOlxyXG4gICAgICAgIHJldHVybiAnbHQnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5EQVRFX0lTOlxyXG4gICAgICAgIHJldHVybiAnZXEnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5EQVRFX0lTX05PVDpcclxuICAgICAgICByZXR1cm4gJ25lJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBFcnJvcihgVW5rbm93biBtYXRjaE1vZGUgJHttYXRjaE1vZGV9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNvbXBhcmlzb25WYWx1ZShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgcmV0dXJuICdudWxsJztcclxuXHJcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+IGMuZmllbGQgPT09IHByb3BlcnR5KTtcclxuICAgIGlmIChjb2x1bW5zLmxlbmd0aCAhPT0gMSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgY29sdW1uIGZvciB0aGUgcHJvcGVydHkgJHtwcm9wZXJ0eX0gd2hpY2ggaXMgc3BlY2lmaWVkIGluIHRoZSBmaWx0ZXIuYCk7XHJcblxyXG4gICAgY29uc3QgdHlwZSA9IGNvbHVtbnNbMF0udHlwZTtcclxuXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBDb2x1bW5UeXBlLmJvb2xlYW46XHJcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWA7XHJcbiAgICAgIGNhc2UgQ29sdW1uVHlwZS5kYXRlOlxyXG4gICAgICAgIHJldHVybiBgY2FzdCgkeyh2YWx1ZSBhcyBEYXRlKS50b0lTT1N0cmluZygpfSwgRWRtLkRhdGVUaW1lT2Zmc2V0KWA7XHJcbiAgICAgIGNhc2UgQ29sdW1uVHlwZS5udW1lcmljOlxyXG4gICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xyXG4gICAgICBjYXNlIENvbHVtblR5cGUudGV4dDpcclxuICAgICAgICByZXR1cm4gYCcke3ZhbHVlfSdgO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjb2x1bW4gdHlwZSAnJHt0eXBlfSdgKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPHAtdGFibGUgW3ZhbHVlXT1cInZhbHVlXCJcclxuICAgICAgICAgW2xhenldPVwidHJ1ZVwiXHJcbiAgICAgICAgIFtsYXp5TG9hZE9uSW5pdF09XCJmYWxzZVwiXHJcbiAgICAgICAgIChvbkxhenlMb2FkKT1cImxvYWQoJGV2ZW50KVwiXHJcbiAgICAgICAgIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIlxyXG4gICAgICAgICBbcGFnaW5hdG9yXT1cInRydWVcIlxyXG4gICAgICAgICBbcm93c109XCJyb3dzXCJcclxuICAgICAgICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZVwiXHJcbiAgICAgICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICAgICAgICAgW2xvYWRpbmddPVwiaXNMb2FkaW5nXCJcclxuICAgICAgICAgW3Nob3dJbml0aWFsU29ydEJhZGdlXT1cInRydWVcIlxyXG4gICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCI+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgIDx0cj5cclxuICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLmZpZWxkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInAtZC1mbGV4IHAtamMtYmV0d2VlbiBwLWFpLWNlbnRlclwiPlxyXG4gICAgICAgICAge3tjb2wuaGVhZGVyfX1cclxuICAgICAgICAgIDxwLXNvcnRJY29uIFtmaWVsZF09XCJjb2wuZmllbGRcIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgW3R5cGVdPVwiY29sLnR5cGVcIiBbZmllbGRdPVwiY29sLmZpZWxkXCIgZGlzcGxheT1cIm1lbnVcIj48L3AtY29sdW1uRmlsdGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RoPlxyXG4gICAgICA8dGg+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTJcIiBwVG9vbHRpcD1cIkNyZWF0ZSBuZXdcIiB0b29sdGlwUG9zaXRpb249XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwicC1idXR0b24tc3VjY2Vzc1wiIGljb249XCJmYXMgZmEtcGx1c1wiIHBCdXR0b24gW3JvdXRlckxpbmtdPVwiWycvZWRpdCcsIGFwaU5hbWUsIG5ld0hyZWZdXCI+PC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGg+XHJcbiAgICA8L3RyPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWVudGl0eSBsZXQtY29sdW1ucz1cImNvbHVtbnNcIj5cclxuICAgIDx0cj5cclxuICAgICAgPHRkIFtuZ1N3aXRjaF09XCJjb2wudHlwZVwiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPlxyXG4gICAgICAgICAgPHAtYXZhdGFyICpuZ0lmPVwiY29sLmZpZWxkID09PSAnY3JlYXRlZEJ5JyB8fCBjb2wuZmllbGQgPT09ICdsYXN0Q2hhbmdlZEJ5J1wiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLmZpZWxkXVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIFtpbWFnZV09XCJhdmF0YXJHZW5lcmF0b3IuZ2V0SW1hZ2UoZW50aXR5W2NvbC5maWVsZF0pXCIgW2xhYmVsXT1cImF2YXRhckdlbmVyYXRvci5nZXRMYWJlbChlbnRpdHlbY29sLmZpZWxkXSlcIiBbc3R5bGVdPVwiYXZhdGFyR2VuZXJhdG9yLmdldFN0eWxlKGVudGl0eVtjb2wuZmllbGRdKVwiIHNoYXBlPVwiY2lyY2xlXCI+PC9wLWF2YXRhcj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLmZpZWxkICE9PSAnY3JlYXRlZEJ5JyAmJiBjb2wuZmllbGQgIT09ICdsYXN0Q2hhbmdlZEJ5J1wiPnt7ZW50aXR5W2NvbC5maWVsZF19fTwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWVyaWMnXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj57e2VudGl0eVtjb2wuZmllbGRdfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+PHAtdHJpU3RhdGVDaGVja2JveCBbKG5nTW9kZWwpXT1cImVudGl0eVtjb2wuZmllbGRdXCIgW3JlYWRvbmx5XT1cInRydWVcIj48L3AtdHJpU3RhdGVDaGVja2JveD48L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLmZpZWxkXVwiPnt7ZW50aXR5W2NvbC5maWVsZF0gfCBkYXRlOmRhdGVGb3JtYXR9fTwvc3Bhbj5cclxuICAgICAgPC90ZD5cclxuICAgICAgPHRkPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgIDxhIHBCdXR0b24gcFRvb2x0aXA9XCJWaWV3L0VkaXRcIiB0b29sdGlwUG9zaXRpb249XCJsZWZ0XCIgW3JvdXRlckxpbmtdPVwiW2VkaXRMaW5rLCBhcGlOYW1lLCBlbnRpdHkuX2xpbmtzPy5zZWxmWzBdLmhyZWZdXCIgaWNvbj1cImZhcyBmYS1lZGl0XCI+PC9hPlxyXG4gICAgICAgICAgPGJ1dHRvbiBwVG9vbHRpcD1cIkRlbGV0ZVwiIHRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIiBwQnV0dG9uICpuZ0lmPVwiZW50aXR5Ll9saW5rcy5kZWxldGVcIiAoY2xpY2spPVwic2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwoZW50aXR5KVwiIGljb249XCJmYXMgZmEtdHJhc2gtYWx0XCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibXgtMiBwLWJ1dHRvbi1kYW5nZXJcIj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC90ZD5cclxuICAgIDwvdHI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgPHRyPlxyXG4gICAgICA8dGQgY29sc3Bhbj1cIjhcIj5ObyBlbnRyaWVzIGZvdW5kLjwvdGQ+XHJcbiAgICA8L3RyPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG48L3AtdGFibGU+XHJcblxyXG48cC10b2FzdD48L3AtdG9hc3Q+XHJcbjxwLWNvbmZpcm1EaWFsb2c+PC9wLWNvbmZpcm1EaWFsb2c+XHJcbiJdfQ==
@@ -6,11 +6,17 @@ export * from './lib/models/api-url';
6
6
  export * from './lib/models/client-settings';
7
7
  export * from './lib/models/problem-details';
8
8
  export * from './lib/models/restworld-options';
9
+ export * from './lib/pipes/safe-url.pipe';
10
+ export * from './lib/pipes/as.pipe';
9
11
  export * from './lib/services/avatar-generator';
12
+ export * from './lib/services/form.service';
10
13
  export * from './lib/services/restworld-client';
11
14
  export * from './lib/services/restworld-client-collection';
12
15
  export * from './lib/services/settings.service';
16
+ export * from './lib/views/restworld-edit-form/restworld-edit-form.component';
13
17
  export * from './lib/views/restworld-edit-view/restworld-edit-view.component';
18
+ export * from './lib/views/restworld-file-view/restworld-file-view.component';
19
+ export * from './lib/views/restworld-image-view/restworld-image-view.component';
14
20
  export * from './lib/views/restworld-list-view/restworld-list-view.component';
15
21
  export * from './lib/restworld-client.module';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGdDQUFnQyxDQUFDO0FBRS9DLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsaUNBQWlDLENBQUM7QUFFaEQsY0FBYywrREFBK0QsQ0FBQTtBQUM3RSxjQUFjLCtEQUErRCxDQUFBO0FBRTdFLGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5neC1yZXN0d29ybGQtY2xpZW50XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29uc3RhbnRzL2xpbmstbmFtZXMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvYXBpLXVybCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvY2xpZW50LXNldHRpbmdzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9wcm9ibGVtLWRldGFpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL3Jlc3R3b3JsZC1vcHRpb25zJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvYXZhdGFyLWdlbmVyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQtY29sbGVjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdmlld3MvcmVzdHdvcmxkLWVkaXQtdmlldy9yZXN0d29ybGQtZWRpdC12aWV3LmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQnXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3Jlc3R3b3JsZC1jbGllbnQubW9kdWxlJzsiXX0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGdDQUFnQyxDQUFDO0FBRS9DLGNBQWMsMkJBQTJCLENBQUE7QUFDekMsY0FBYyxxQkFBcUIsQ0FBQTtBQUVuQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsaUNBQWlDLENBQUM7QUFFaEQsY0FBYywrREFBK0QsQ0FBQztBQUM5RSxjQUFjLCtEQUErRCxDQUFDO0FBQzlFLGNBQWMsK0RBQStELENBQUE7QUFDN0UsY0FBYyxpRUFBaUUsQ0FBQTtBQUMvRSxjQUFjLCtEQUErRCxDQUFBO0FBRTdFLGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5neC1yZXN0d29ybGQtY2xpZW50XG4gKi9cclxuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25zdGFudHMvbGluay1uYW1lcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9hcGktdXJsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9jbGllbnQtc2V0dGluZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL3Byb2JsZW0tZGV0YWlscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvcmVzdHdvcmxkLW9wdGlvbnMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy9zYWZlLXVybC5waXBlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvYXMucGlwZSdcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvYXZhdGFyLWdlbmVyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50LWNvbGxlY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvc2V0dGluZ3Muc2VydmljZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZpZXdzL3Jlc3R3b3JsZC1lZGl0LWZvcm0vcmVzdHdvcmxkLWVkaXQtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmlld3MvcmVzdHdvcmxkLWVkaXQtdmlldy9yZXN0d29ybGQtZWRpdC12aWV3LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92aWV3cy9yZXN0d29ybGQtZmlsZS12aWV3L3Jlc3R3b3JsZC1maWxlLXZpZXcuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmlld3MvcmVzdHdvcmxkLWltYWdlLXZpZXcvcmVzdHdvcmxkLWltYWdlLXZpZXcuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmlld3MvcmVzdHdvcmxkLWxpc3Qtdmlldy9yZXN0d29ybGQtbGlzdC12aWV3LmNvbXBvbmVudCdcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzdHdvcmxkLWNsaWVudC5tb2R1bGUnOyJdfQ==