verben-authentication-ui 0.4.8 → 0.4.9

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.
@@ -39,6 +39,8 @@ export class RoleControlComponent {
39
39
  isGlobal = true;
40
40
  serviceName = null;
41
41
  application = null;
42
+ pageSize = 10;
43
+ pageState = null;
42
44
  sourceData = [];
43
45
  visibleColumns = [];
44
46
  filterArray = [
@@ -153,16 +155,35 @@ export class RoleControlComponent {
153
155
  // }
154
156
  // ]
155
157
  this.utilService.sendBI(true);
156
- const res = await this.server.get(`Role/GetRolesWithParam/${this.envSvc.environment.APIKey}/0/0`);
158
+ const res = await this.server.get(`Role/GetRolesWithParam/${this.envSvc.environment.APIKey}/0/${this.pageSize}`);
157
159
  this.utilService.sendBI(false);
158
160
  if (res instanceof ErrorResponse) {
159
161
  return undefined;
160
162
  }
161
163
  else {
164
+ this.pageState = res;
162
165
  var result = res.Result;
163
166
  return result;
164
167
  }
165
168
  }
169
+ async loadMore() {
170
+ if (!this.pageState) {
171
+ return;
172
+ }
173
+ this.utilService.sendBI(true);
174
+ const res = await this.server.get(`Role/GetRolesWithParam/${this.envSvc.environment.APIKey}/${this.pageState.Skip}/${this.pageSize}`);
175
+ this.utilService.sendBI(false);
176
+ if (res instanceof ErrorResponse) {
177
+ return;
178
+ }
179
+ else {
180
+ this.pageState = res;
181
+ var result = res.Result;
182
+ const data = this.setUpMappedDataExtra(result);
183
+ this.data = this.data.concat(data);
184
+ this.setUpCardDataExtra(data);
185
+ }
186
+ }
166
187
  getApplicationContextCode(name) {
167
188
  const item = this.roleContextsStore.find((x) => x.Name == name);
168
189
  return item ? item.Code : '';
@@ -261,6 +282,72 @@ export class RoleControlComponent {
261
282
  };
262
283
  });
263
284
  }
285
+ setUpMappedDataExtra(data) {
286
+ return data.map((x) => {
287
+ return {
288
+ ...x,
289
+ id: x.Id,
290
+ ChildrenType: ChildrenType.Permission,
291
+ RoleContexts: this.sourceData.map((config) => {
292
+ const existingId = x.RoleContexts.findIndex((y) => y.Name == config.Name);
293
+ var context = {
294
+ ChildrenType: ChildrenType.Action,
295
+ Selected: existingId > -1 ? true : false,
296
+ RoleActions: config.Actions.map((action) => {
297
+ const existingAction = existingId > -1
298
+ ? x.RoleContexts[existingId].RoleActions.findIndex((c) => c.Name == action)
299
+ : -1;
300
+ var act = {
301
+ Selected: existingAction > -1 ? true : false,
302
+ Name: action,
303
+ Role: x.Code,
304
+ Context: '',
305
+ id: existingAction > -1
306
+ ? x.RoleContexts[existingId].RoleActions[existingAction].id
307
+ : '',
308
+ Id: existingAction > -1
309
+ ? x.RoleContexts[existingId].RoleActions[existingAction].Id
310
+ : '',
311
+ CreatedAt: new Date(),
312
+ UpdatedAt: new Date(),
313
+ DataState: ObjectState.New,
314
+ TenantId: x.TenantId,
315
+ Code: existingAction > -1
316
+ ? x.RoleContexts[existingId].RoleActions[existingAction]
317
+ .Code
318
+ : '',
319
+ ServiceName: existingAction > -1
320
+ ? x.RoleContexts[existingId].RoleActions[existingAction]
321
+ .ServiceName
322
+ : '',
323
+ APIKey: existingAction > -1
324
+ ? x.RoleContexts[existingId].RoleActions[existingAction]
325
+ .APIKey
326
+ : this.envSvc.environment.APIKey,
327
+ ApplicationRoleAction: this.getApplicationActionCode(action),
328
+ };
329
+ return act;
330
+ }),
331
+ Name: config.Name,
332
+ Role: x.Code,
333
+ id: existingId > -1 ? x.RoleContexts[existingId].id : '',
334
+ Id: existingId > -1 ? x.RoleContexts[existingId].Id : '',
335
+ CreatedAt: new Date(),
336
+ UpdatedAt: new Date(),
337
+ DataState: ObjectState.New,
338
+ TenantId: x.TenantId,
339
+ Code: existingId > -1 ? x.RoleContexts[existingId].Code : '',
340
+ ServiceName: existingId > -1 ? x.RoleContexts[existingId].ServiceName : '',
341
+ APIKey: existingId > -1
342
+ ? x.RoleContexts[existingId].APIKey
343
+ : this.envSvc.environment.APIKey,
344
+ ApplicationRoleContext: this.getApplicationContextCode(config.Name),
345
+ };
346
+ return context;
347
+ }),
348
+ };
349
+ });
350
+ }
264
351
  setUpCardData() {
265
352
  const cardData = this.data.map((x) => {
266
353
  return {
@@ -289,6 +376,34 @@ export class RoleControlComponent {
289
376
  });
290
377
  this.cardData = cardData;
291
378
  }
379
+ setUpCardDataExtra(baseData) {
380
+ const cardData = baseData.map((x) => {
381
+ return {
382
+ selected: false,
383
+ title: x.Name,
384
+ data: x,
385
+ body: [],
386
+ children: x.RoleContexts.map((c) => {
387
+ return {
388
+ selected: false,
389
+ title: this.getFormattedName(c.Name),
390
+ data: c,
391
+ body: [],
392
+ children: c.RoleActions.map((a) => {
393
+ return {
394
+ selected: false,
395
+ title: this.getFormattedName(a.Name),
396
+ data: a,
397
+ body: [],
398
+ children: [],
399
+ };
400
+ }),
401
+ };
402
+ }),
403
+ };
404
+ });
405
+ this.cardData = this.cardData.concat(cardData);
406
+ }
292
407
  getFormattedName(name) {
293
408
  // Split the key on capital letters, handling "And" as lowercase
294
409
  const words = name
@@ -888,11 +1003,11 @@ export class RoleControlComponent {
888
1003
  }
889
1004
  }
890
1005
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RoleControlComponent, deps: [{ token: i1.AuthorizationService }, { token: i2.RoleControlService }, { token: i3.UtilService }, { token: i4.HttpWebRequestService }, { token: i0.ChangeDetectorRef }, { token: i5.FormBuilder }, { token: i6.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
891
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RoleControlComponent, selector: "lib-role-control", inputs: { isGlobal: "isGlobal", serviceName: "serviceName", application: "application" }, viewQueries: [{ propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }], ngImport: i0, template: "<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <div *ngIf=\"this.cardContextHistory.length > 0\"\n class=\"context-banner py-3 px-4 rounded-xl flex item-center justify-space-between gap-3\">\n <div class=\"flex gap-2 flex-1 context-banner-content\">\n <div class=\"context-content items-center flex gap-2\" *ngFor=\"let context of this.cardContextHistory; index as i\">\n <div class=\"context-main-content-container flex gap-4\">\n <span class=\"context-caption font-bold text-[#404040]\">{{context.data.ChildrenType &&\n context.data.ChildrenType == childPermissionRef? context.data.Name: context.title}}</span>\n <span *ngIf=\"i == this.cardContextHistory.length -1\"\n class=\"context-subcaption\">{{this.getCardSubCaption(context)}}</span>\n </div>\n <div *ngIf=\"i < this.cardContextHistory.length -1\">/</div>\n </div>\n </div>\n <div class=\"flex justify-end\">\n <verben-svg (click)=\"closeDetails()\" class=\"cursor-pointer\" icon=\"close-circle-full\" [width]=\"20\"\n [height]=\"20\"></verben-svg>\n </div>\n </div>\n <verben-data-view #vdv [viewState]=\"{\n isSearch: this.cardContextHistory.length == 0,\n isColumn: this.cardContextHistory.length == 0,\n isFilter: this.cardContextHistory.length == 0,\n isSort: this.cardContextHistory.length == 0,\n isExport: this.cardContextHistory.length == 0,\n isSelect: this.cardContextHistory.length == 0,\n isCreate: this.cardContextHistory.length == 0,\n isToggle:this.cardContextHistory.length == 0,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [isTableView]=\"this.cardContextHistory.length == 0\"\n [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\" [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\">\n <div class=\"mt-2\" table-content>\n <lib-data-table [data]=\"data\" [columns]=\"visibleColumnDef\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"updatedAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value>\n <div class=\"flex gap-4 items-center\">\n <verben-svg (click)=\"editValue(value)\" icon=\"edit\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n <span (click)=\"viewDetailsFromTable(value)\" class=\"view-links view-details\">view details</span>\n <span class=\"view-links view-users\">view users</span>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" #vdcv dataId=\"Id\" border=\"5px\" [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\" mg=\"0px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData\">\n <ng-template #card let-item>\n <div (click)=\"roleCardClicked(item)\"\n *ngIf=\"item.data.ChildrenType && item.data.ChildrenType == childPermissionRef\"\n class=\"flex cursor-pointer h-[max-content]\">\n <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 min-h-[50px] justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.data.Name\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item); $event.stopPropagation()\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item.data.ChildrenType || item.data.ChildrenType !== childPermissionRef\"\n class=\"flex h-[max-content]\">\n <verben-svg [ngClass]=\"item.children && item.children.length?'visible':'invisible'\" [width]=\"15\"\n [height]=\"15\" (click)=\"toggleChildren(item)\" class=\"items-center flex pr-1 cursor-pointer\"\n [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 min-h-[50px] justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template #cardChild let-item>\n <div class=\"flex h-[max-content]\">\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 min-h-[50px] justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetailsChild(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view *ngIf=\"this.cardContextHistory.length == 0\">\n <ng-template #parent>\n <div *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full justify-between relative space-y-4\">\n <verbena-input name=\"Name\" label=\"Name\" (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.Name\" />\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0\">\n <verbena-button text=\"Delete\" bgColor=\"#999999\" textColor=\"white\"\n border=\"1px solid #999999\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button (click)=\"vdv.toggleView()\" text=\"Switch To Table\"\n styleType=\"ylw-outline\"></verbena-button>\n <verbena-button (click)=\"this.saveRole()\" text=\"Save\" bgColor=\"#FFE681\" textColor=\"#404040\"\n border=\"1px solid #FFE681\"></verbena-button>\n </div>\n </div>\n </div>\n\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer class=\"float-right\">\n <div class=\"flex gap-2\">\n <!-- <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span> -->\n <button class=\"load-more\">Load more</button>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column (columnsUpdated)=\"onColumnsUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter [border]=\"'1px solid rgba(212, 160, 7, 1)'\" borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table (selectedOptions)=\"onSortUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i8.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i8.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "size"] }, { kind: "component", type: i8.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "exportCustomClass", "selectCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "columnTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "showColumnChild", "showSortChild", "showFilterChild", "showExportChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i8.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "onItemClick", "onCardChildClick"], outputs: ["loadMoreClick"] }, { kind: "component", type: i8.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i8.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i8.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i8.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i8.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions"] }, { kind: "component", type: i8.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated"] }, { kind: "component", type: i8.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied"] }, { kind: "component", type: i8.DataExportComponent, selector: "lib-data-export", inputs: ["data"], outputs: ["exportDataEvent"] }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i8.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
1006
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RoleControlComponent, selector: "lib-role-control", inputs: { isGlobal: "isGlobal", serviceName: "serviceName", application: "application", pageSize: "pageSize" }, viewQueries: [{ propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }], ngImport: i0, template: "<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <div *ngIf=\"this.cardContextHistory.length > 0\"\n class=\"context-banner py-3 px-4 rounded-xl flex item-center justify-space-between gap-3\">\n <div class=\"flex gap-2 flex-1 context-banner-content\">\n <div class=\"context-content items-center flex gap-2\" *ngFor=\"let context of this.cardContextHistory; index as i\">\n <div class=\"context-main-content-container flex gap-4\">\n <span class=\"context-caption font-bold text-[#404040]\">{{context.data.ChildrenType &&\n context.data.ChildrenType == childPermissionRef? context.data.Name: context.title}}</span>\n <span *ngIf=\"i == this.cardContextHistory.length -1\"\n class=\"context-subcaption\">{{this.getCardSubCaption(context)}}</span>\n </div>\n <div *ngIf=\"i < this.cardContextHistory.length -1\">/</div>\n </div>\n </div>\n <div class=\"flex justify-end\">\n <verben-svg (click)=\"closeDetails()\" class=\"cursor-pointer\" icon=\"close-circle-full\" [width]=\"20\"\n [height]=\"20\"></verben-svg>\n </div>\n </div>\n <verben-data-view #vdv [viewState]=\"{\n isSearch: this.cardContextHistory.length == 0,\n isColumn: this.cardContextHistory.length == 0,\n isFilter: this.cardContextHistory.length == 0,\n isSort: this.cardContextHistory.length == 0,\n isExport: this.cardContextHistory.length == 0,\n isSelect: this.cardContextHistory.length == 0,\n isCreate: this.cardContextHistory.length == 0,\n isToggle:this.cardContextHistory.length == 0,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [isTableView]=\"this.cardContextHistory.length == 0\"\n [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\" [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\">\n <div class=\"mt-2\" table-content>\n <lib-data-table [data]=\"data\" [columns]=\"visibleColumnDef\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"updatedAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value>\n <div class=\"flex gap-4 items-center\">\n <verben-svg (click)=\"editValue(value)\" icon=\"edit\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n <span (click)=\"viewDetailsFromTable(value)\" class=\"view-links view-details\">view details</span>\n <span class=\"view-links view-users\">view users</span>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" #vdcv dataId=\"Id\" border=\"5px\" [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\" mg=\"0px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData\">\n <ng-template #card let-item>\n <div (click)=\"roleCardClicked(item)\"\n *ngIf=\"item.data.ChildrenType && item.data.ChildrenType == childPermissionRef\"\n class=\"flex cursor-pointer h-[max-content]\">\n <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 min-h-[50px] justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.data.Name\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item); $event.stopPropagation()\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item.data.ChildrenType || item.data.ChildrenType !== childPermissionRef\"\n class=\"flex h-[max-content]\">\n <verben-svg [ngClass]=\"item.children && item.children.length?'visible':'invisible'\" [width]=\"15\"\n [height]=\"15\" (click)=\"toggleChildren(item)\" class=\"items-center flex pr-1 cursor-pointer\"\n [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 min-h-[50px] justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template #cardChild let-item>\n <div class=\"flex h-[max-content]\">\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 min-h-[50px] justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetailsChild(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view *ngIf=\"this.cardContextHistory.length == 0\">\n <ng-template #parent>\n <div *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full justify-between relative space-y-4\">\n <verbena-input name=\"Name\" label=\"Name\" (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.Name\" />\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0\">\n <verbena-button class=\"verben-delete-button\" text=\"Delete\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button class=\"verben-switch-button\" (click)=\"vdv.toggleView()\"\n text=\"Switch To Table\"></verbena-button>\n <verbena-button class=\"verben-primary-button\" (click)=\"this.saveRole()\" text=\"Save\"></verbena-button>\n </div>\n </div>\n </div>\n\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer *ngIf=\"this.cardContextHistory.length == 0\">\n <div class=\"flex gap-2 justify-between\">\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex {{vdcv.hasCurrentItem()?'flex-1':''}} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">Load more</button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column (columnsUpdated)=\"onColumnsUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter [border]=\"'1px solid rgba(212, 160, 7, 1)'\" borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table (selectedOptions)=\"onSortUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">Load more</button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i8.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i8.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "size"] }, { kind: "component", type: i8.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "exportCustomClass", "selectCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "columnTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "showColumnChild", "showSortChild", "showFilterChild", "showExportChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i8.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "onItemClick", "onCardChildClick"], outputs: ["loadMoreClick"] }, { kind: "component", type: i8.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i8.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i8.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i8.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i8.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions"] }, { kind: "component", type: i8.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated"] }, { kind: "component", type: i8.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied"] }, { kind: "component", type: i8.DataExportComponent, selector: "lib-data-export", inputs: ["data"], outputs: ["exportDataEvent"] }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i8.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
892
1007
  }
893
1008
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RoleControlComponent, decorators: [{
894
1009
  type: Component,
895
- args: [{ selector: 'lib-role-control', template: "<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <div *ngIf=\"this.cardContextHistory.length > 0\"\n class=\"context-banner py-3 px-4 rounded-xl flex item-center justify-space-between gap-3\">\n <div class=\"flex gap-2 flex-1 context-banner-content\">\n <div class=\"context-content items-center flex gap-2\" *ngFor=\"let context of this.cardContextHistory; index as i\">\n <div class=\"context-main-content-container flex gap-4\">\n <span class=\"context-caption font-bold text-[#404040]\">{{context.data.ChildrenType &&\n context.data.ChildrenType == childPermissionRef? context.data.Name: context.title}}</span>\n <span *ngIf=\"i == this.cardContextHistory.length -1\"\n class=\"context-subcaption\">{{this.getCardSubCaption(context)}}</span>\n </div>\n <div *ngIf=\"i < this.cardContextHistory.length -1\">/</div>\n </div>\n </div>\n <div class=\"flex justify-end\">\n <verben-svg (click)=\"closeDetails()\" class=\"cursor-pointer\" icon=\"close-circle-full\" [width]=\"20\"\n [height]=\"20\"></verben-svg>\n </div>\n </div>\n <verben-data-view #vdv [viewState]=\"{\n isSearch: this.cardContextHistory.length == 0,\n isColumn: this.cardContextHistory.length == 0,\n isFilter: this.cardContextHistory.length == 0,\n isSort: this.cardContextHistory.length == 0,\n isExport: this.cardContextHistory.length == 0,\n isSelect: this.cardContextHistory.length == 0,\n isCreate: this.cardContextHistory.length == 0,\n isToggle:this.cardContextHistory.length == 0,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [isTableView]=\"this.cardContextHistory.length == 0\"\n [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\" [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\">\n <div class=\"mt-2\" table-content>\n <lib-data-table [data]=\"data\" [columns]=\"visibleColumnDef\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"updatedAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value>\n <div class=\"flex gap-4 items-center\">\n <verben-svg (click)=\"editValue(value)\" icon=\"edit\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n <span (click)=\"viewDetailsFromTable(value)\" class=\"view-links view-details\">view details</span>\n <span class=\"view-links view-users\">view users</span>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" #vdcv dataId=\"Id\" border=\"5px\" [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\" mg=\"0px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData\">\n <ng-template #card let-item>\n <div (click)=\"roleCardClicked(item)\"\n *ngIf=\"item.data.ChildrenType && item.data.ChildrenType == childPermissionRef\"\n class=\"flex cursor-pointer h-[max-content]\">\n <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 min-h-[50px] justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.data.Name\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item); $event.stopPropagation()\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item.data.ChildrenType || item.data.ChildrenType !== childPermissionRef\"\n class=\"flex h-[max-content]\">\n <verben-svg [ngClass]=\"item.children && item.children.length?'visible':'invisible'\" [width]=\"15\"\n [height]=\"15\" (click)=\"toggleChildren(item)\" class=\"items-center flex pr-1 cursor-pointer\"\n [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 min-h-[50px] justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template #cardChild let-item>\n <div class=\"flex h-[max-content]\">\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 min-h-[50px] justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetailsChild(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view *ngIf=\"this.cardContextHistory.length == 0\">\n <ng-template #parent>\n <div *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full justify-between relative space-y-4\">\n <verbena-input name=\"Name\" label=\"Name\" (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.Name\" />\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0\">\n <verbena-button text=\"Delete\" bgColor=\"#999999\" textColor=\"white\"\n border=\"1px solid #999999\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button (click)=\"vdv.toggleView()\" text=\"Switch To Table\"\n styleType=\"ylw-outline\"></verbena-button>\n <verbena-button (click)=\"this.saveRole()\" text=\"Save\" bgColor=\"#FFE681\" textColor=\"#404040\"\n border=\"1px solid #FFE681\"></verbena-button>\n </div>\n </div>\n </div>\n\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer class=\"float-right\">\n <div class=\"flex gap-2\">\n <!-- <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span> -->\n <button class=\"load-more\">Load more</button>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column (columnsUpdated)=\"onColumnsUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter [border]=\"'1px solid rgba(212, 160, 7, 1)'\" borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table (selectedOptions)=\"onSortUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}\n"] }]
1010
+ args: [{ selector: 'lib-role-control', template: "<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <div *ngIf=\"this.cardContextHistory.length > 0\"\n class=\"context-banner py-3 px-4 rounded-xl flex item-center justify-space-between gap-3\">\n <div class=\"flex gap-2 flex-1 context-banner-content\">\n <div class=\"context-content items-center flex gap-2\" *ngFor=\"let context of this.cardContextHistory; index as i\">\n <div class=\"context-main-content-container flex gap-4\">\n <span class=\"context-caption font-bold text-[#404040]\">{{context.data.ChildrenType &&\n context.data.ChildrenType == childPermissionRef? context.data.Name: context.title}}</span>\n <span *ngIf=\"i == this.cardContextHistory.length -1\"\n class=\"context-subcaption\">{{this.getCardSubCaption(context)}}</span>\n </div>\n <div *ngIf=\"i < this.cardContextHistory.length -1\">/</div>\n </div>\n </div>\n <div class=\"flex justify-end\">\n <verben-svg (click)=\"closeDetails()\" class=\"cursor-pointer\" icon=\"close-circle-full\" [width]=\"20\"\n [height]=\"20\"></verben-svg>\n </div>\n </div>\n <verben-data-view #vdv [viewState]=\"{\n isSearch: this.cardContextHistory.length == 0,\n isColumn: this.cardContextHistory.length == 0,\n isFilter: this.cardContextHistory.length == 0,\n isSort: this.cardContextHistory.length == 0,\n isExport: this.cardContextHistory.length == 0,\n isSelect: this.cardContextHistory.length == 0,\n isCreate: this.cardContextHistory.length == 0,\n isToggle:this.cardContextHistory.length == 0,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [isTableView]=\"this.cardContextHistory.length == 0\"\n [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\" [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\">\n <div class=\"mt-2\" table-content>\n <lib-data-table [data]=\"data\" [columns]=\"visibleColumnDef\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"updatedAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value>\n <div class=\"flex gap-4 items-center\">\n <verben-svg (click)=\"editValue(value)\" icon=\"edit\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n <span (click)=\"viewDetailsFromTable(value)\" class=\"view-links view-details\">view details</span>\n <span class=\"view-links view-users\">view users</span>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" #vdcv dataId=\"Id\" border=\"5px\" [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\" mg=\"0px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData\">\n <ng-template #card let-item>\n <div (click)=\"roleCardClicked(item)\"\n *ngIf=\"item.data.ChildrenType && item.data.ChildrenType == childPermissionRef\"\n class=\"flex cursor-pointer h-[max-content]\">\n <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 min-h-[50px] justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.data.Name\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item); $event.stopPropagation()\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item.data.ChildrenType || item.data.ChildrenType !== childPermissionRef\"\n class=\"flex h-[max-content]\">\n <verben-svg [ngClass]=\"item.children && item.children.length?'visible':'invisible'\" [width]=\"15\"\n [height]=\"15\" (click)=\"toggleChildren(item)\" class=\"items-center flex pr-1 cursor-pointer\"\n [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 min-h-[50px] justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template #cardChild let-item>\n <div class=\"flex h-[max-content]\">\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 min-h-[50px] justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetailsChild(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view *ngIf=\"this.cardContextHistory.length == 0\">\n <ng-template #parent>\n <div *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full justify-between relative space-y-4\">\n <verbena-input name=\"Name\" label=\"Name\" (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.Name\" />\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0\">\n <verbena-button class=\"verben-delete-button\" text=\"Delete\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button class=\"verben-switch-button\" (click)=\"vdv.toggleView()\"\n text=\"Switch To Table\"></verbena-button>\n <verbena-button class=\"verben-primary-button\" (click)=\"this.saveRole()\" text=\"Save\"></verbena-button>\n </div>\n </div>\n </div>\n\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer *ngIf=\"this.cardContextHistory.length == 0\">\n <div class=\"flex gap-2 justify-between\">\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex {{vdcv.hasCurrentItem()?'flex-1':''}} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">Load more</button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column (columnsUpdated)=\"onColumnsUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter [border]=\"'1px solid rgba(212, 160, 7, 1)'\" borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table (selectedOptions)=\"onSortUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">Load more</button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}\n"] }]
896
1011
  }], ctorParameters: () => [{ type: i1.AuthorizationService }, { type: i2.RoleControlService }, { type: i3.UtilService }, { type: i4.HttpWebRequestService }, { type: i0.ChangeDetectorRef }, { type: i5.FormBuilder }, { type: i6.EnvironmentService }], propDecorators: { cardDataView: [{
897
1012
  type: ViewChild,
898
1013
  args: ['vdcv']
@@ -905,5 +1020,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
905
1020
  type: Input
906
1021
  }], application: [{
907
1022
  type: Input
1023
+ }], pageSize: [{
1024
+ type: Input
908
1025
  }] } });
909
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1jb250cm9sL3JvbGUtY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL3JvbGUtY29udHJvbC9yb2xlLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFJTCxjQUFjLEdBR2YsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFReEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUczRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7QUFVckUsTUFBTSxPQUFPLG9CQUFvQjtJQW9EckI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF6RFYsZ0JBQWdCLEdBQW1DLEVBQUUsQ0FBQztJQUN0RCxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ25CLElB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LHNFQUFzRTtZQUN0RSxJQUFJO1FBQ04sQ0FBQztJQUNILENBQUM7d0dBcCtCVSxvQkFBb0I7NEZBQXBCLG9CQUFvQiwwVUNyRGpDLGd1YkE4T0E7OzRGRHpMYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCO21SQWNULFlBQVk7c0JBQTlCLFNBQVM7dUJBQUMsTUFBTTtnQkFDQyxRQUFRO3NCQUF6QixTQUFTO3VCQUFDLEtBQUs7Z0JBQ1AsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm9sZUNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi9yb2xlLWNvbnRyb2wuc2VydmljZSc7XG5pbXBvcnQge1xuICBDYXJkRGF0YSxcbiAgQ2FyZERhdGFWaWV3Q29tcG9uZW50LFxuICBDb2x1bW5EZWZpbml0aW9uLFxuICBEYXRhRmlsdGVyVHlwZSxcbiAgRGF0YVZpZXdDb21wb25lbnQsXG4gIElEYXRhRmlsdGVyLFxufSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgUm9sZSB9IGZyb20gJy4uLy4uL21vZGVscy9Sb2xlJztcbmltcG9ydCB7IGJhc2VTdHlsZSB9IGZyb20gJy4vYmFzZS10YWJsZS1zdHlsZSc7XG5pbXBvcnQgeyBPYmplY3RTdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy9vYmplY3Qtc3RhdGUnO1xuaW1wb3J0IHsgUm9sZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvUm9sZUNvbnRleHQnO1xuaW1wb3J0IHsgVUlzIH0gZnJvbSAnLi9VSXMnO1xuaW1wb3J0IHsgUm9sZUFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9Sb2xlQWN0aW9uJztcbmltcG9ydCB7IFVJQWN0aW9ucyB9IGZyb20gJy4vVUlBY3Rpb25zJztcbmltcG9ydCB7IE1hcHBlZFJvbGUgfSBmcm9tICcuL01hcHBlZFJvbGUnO1xuaW1wb3J0IHtcbiAgQXV0aG9yaXphdGlvbkNvbmZpZyxcbiAgQXV0aG9yaXphdGlvblNlcnZpY2UsXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBNYXBwZWRSb2xlQ29udGV4dCB9IGZyb20gJy4vTWFwcGVkUm9sZUNvbnRleHQnO1xuaW1wb3J0IHsgTWFwcGVkUm9sZUFjdGlvbiB9IGZyb20gJy4vTWFwcGVkUm9sZUFjdGlvbic7XG5pbXBvcnQgeyBDaGlsZHJlblR5cGUgfSBmcm9tICcuL0NoaWxkcmVuVHlwZSc7XG5pbXBvcnQge1xuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91dGlsLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cFdlYlJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC13ZWItcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvRXJyb3JSZXNwb25zZSc7XG5pbXBvcnQgeyBQYWdlZFJlc3VsdCB9IGZyb20gJy4uLy4uL21vZGVscy9QYWdlZFJlc3VsdCc7XG5pbXBvcnQgeyBTZWFyY2hQcm9wZXJ0eVZhbHVlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1NlYXJjaFByb3BlcnR5VmFsdWUnO1xuaW1wb3J0IHsgU2VhcmNoT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9tb2RlbHMvU2VhcmNoT3BlcmF0b3InO1xuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlTaWduIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1NlYXJjaFByb3BlcnR5U2lnbic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUm9sZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvQXBwbGljYXRpb25Sb2xlQ29udGV4dCc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblJvbGVBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvQXBwbGljYXRpb25Sb2xlQWN0aW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXJvbGUtY29udHJvbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yb2xlLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcm9sZS1jb250cm9sLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBSb2xlQ29udHJvbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHZpc2libGVDb2x1bW5EZWY6IENvbHVtbkRlZmluaXRpb248TWFwcGVkUm9sZT5bXSA9IFtdO1xuICBzdHlsZXMgPSBiYXNlU3R5bGU7XG4gIGRhdGE6IE1hcHBlZFJvbGVbXSA9IFtdO1xuICBjYXJkRGF0YTogQ2FyZERhdGFbXSA9IFtdO1xuICBjdXJyZW50RGF0YTogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcbiAgY3VycmVudEV4cGFuZGVkQ2FyZDogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcbiAgY2FyZENvbnRleHQ6IENhcmREYXRhIHwgbnVsbCA9IG51bGw7XG4gIGNhcmRDb250ZXh0SGlzdG9yeTogQ2FyZERhdGFbXSA9IFtdO1xuICBjYXJkQ29udGV4dEhpc3RvcnlEYXRhOiBDYXJkRGF0YVtdW10gPSBbXTtcbiAgQFZpZXdDaGlsZCgndmRjdicpIGNhcmREYXRhVmlldyE6IENhcmREYXRhVmlld0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndmR2JykgZGF0YVZpZXchOiBEYXRhVmlld0NvbXBvbmVudDtcbiAgQElucHV0KCkgaXNHbG9iYWw6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzZXJ2aWNlTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGFwcGxpY2F0aW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgc291cmNlRGF0YTogQXV0aG9yaXphdGlvbkNvbmZpZ1tdID0gW107XG5cbiAgdmlzaWJsZUNvbHVtbnM6IElEYXRhRmlsdGVyW10gPSBbXTtcblxuICBmaWx0ZXJBcnJheTogSURhdGFGaWx0ZXJbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnQ3JlYXRlZEF0JyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdVcGRhdGVkQXQnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gIF07XG5cbiAgc29ydE9wdGlvbnM6IElEYXRhRmlsdGVyW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ0NyZWF0ZWRBdCcsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5EYXRlLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnVXBkYXRlZEF0JyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICBdO1xuXG4gIC8vIGZvcm06IEZvcm1Hcm91cDtcbiAgY2hpbGRQZXJtaXNzaW9uUmVmOiBDaGlsZHJlblR5cGUgPSBDaGlsZHJlblR5cGUuUGVybWlzc2lvbjtcblxuICByb2xlQ29udGV4dHNTdG9yZTogQXBwbGljYXRpb25Sb2xlQ29udGV4dFtdID0gW107XG4gIHJvbGVBY3Rpb25zU3RvcmU6IEFwcGxpY2F0aW9uUm9sZUFjdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb2xlQ29udHJvbFN2YzogUm9sZUNvbnRyb2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXRpbFNlcnZpY2U6IFV0aWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VydmVyOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZW52U3ZjOiBFbnZpcm9ubWVudFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uRGVmID0gcm9sZUNvbnRyb2xTdmMucm9sZUNvbHVtbnM7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHJvbGVDb250cm9sU3ZjLnJvbGVDb2x1bW5zLm1hcCgoY29sKSA9PiAoe1xuICAgICAgY2hlY2tlZDogdHJ1ZSxcbiAgICAgIG5hbWU6IHR5cGVvZiBjb2wuaGVhZGVyID09PSAnc3RyaW5nJyA/IGNvbC5oZWFkZXIgOiBjb2wuaWQsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5Cb29sLFxuICAgIH0pKTtcbiAgICAvLyB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAvLyAgIE5hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAvLyB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1vY2tEYXRhID0gdGhpcy5nZXRNb2NrUm9sZXMoKTtcbiAgICBjb25zdCByb2xlcyA9IGF3YWl0IHRoaXMuZ2V0QWxsUm9sZXMoKTtcbiAgICBpZiAodGhpcy5pc0dsb2JhbCkge1xuICAgICAgY29uc3QgY29udGV4dHNSZXMgPSBhd2FpdCB0aGlzLmdldFNhdmVkQ29udGV4dHMoKTtcbiAgICAgIGlmIChjb250ZXh0c1Jlcykge1xuICAgICAgICB0aGlzLnJvbGVDb250ZXh0c1N0b3JlID0gY29udGV4dHNSZXM7XG4gICAgICAgIHRoaXMucm9sZUFjdGlvbnNTdG9yZSA9IGNvbnRleHRzUmVzLmZsYXRNYXAoKHgpID0+IHguUm9sZUFjdGlvbnMpO1xuICAgICAgICBjb25zdCBhdXRoQ29uZmlnOiBBdXRob3JpemF0aW9uQ29uZmlnW10gPSBjb250ZXh0c1Jlcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgTmFtZTogeC5OYW1lLFxuICAgICAgICAgICAgQWN0aW9uczogeC5Sb2xlQWN0aW9ucy5tYXAoKHkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHkuTmFtZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNvdXJjZURhdGEgPSBhdXRoQ29uZmlnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNvdXJjZURhdGEgPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25Db25maWc7XG4gICAgfVxuICAgIGlmIChyb2xlcykge1xuICAgICAgdGhpcy5zZXRVcE1hcHBlZERhdGEocm9sZXMpO1xuICAgICAgdGhpcy5zZXRVcENhcmREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0U2F2ZWRDb250ZXh0cygpOiBQcm9taXNlPEFwcGxpY2F0aW9uUm9sZUNvbnRleHRbXSB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5pc0dsb2JhbCB8fCAhdGhpcy5zZXJ2aWNlTmFtZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgUHJvcGVydHlOYW1lOiAnU2VydmljZU5hbWUnLFxuICAgICAgICBFbnRpdHlWYWx1ZTogdGhpcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgUHJvcGVydHlOYW1lOiAnQVBJS2V5JyxcbiAgICAgICAgRW50aXR5VmFsdWU6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgICAgfSxcbiAgICBdO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICBgQXBwbGljYXRpb24vU2VhcmNoQXBwbGljYXRpb25Sb2xlQ29udGV4dHMvMC8wYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8QXBwbGljYXRpb25Sb2xlQ29udGV4dD4pLlJlc3VsdDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG4gIGFzeW5jIGdldEFsbFJvbGVzKCk6IFByb21pc2U8Um9sZVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gICB2YXIgcGF5bG9hZDogU2VhcmNoUHJvcGVydHlWYWx1ZVtdID0gW1xuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgUHJvcGVydHlOYW1lOiAnQVBJS2V5JyxcbiAgICAvLyAgICAgICBFbnRpdHlWYWx1ZTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgIC8vICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgLy8gICAgICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRXG4gICAgLy8gICAgIH1cbiAgICAvLyBdXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgYFJvbGUvR2V0Um9sZXNXaXRoUGFyYW0vJHt0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXl9LzAvMGBcbiAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8Um9sZT4pLlJlc3VsdDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXBwbGljYXRpb25Db250ZXh0Q29kZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJvbGVDb250ZXh0c1N0b3JlLmZpbmQoKHgpID0+IHguTmFtZSA9PSBuYW1lKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0uQ29kZSA6ICcnO1xuICB9XG4gIGdldEFwcGxpY2F0aW9uQWN0aW9uQ29kZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJvbGVBY3Rpb25zU3RvcmUuZmluZCgoeCkgPT4geC5OYW1lID09IG5hbWUpO1xuICAgIHJldHVybiBpdGVtID8gaXRlbS5Db2RlIDogJyc7XG4gIH1cblxuICBmaW5kUGFyZW50KGNhcmREYXRhOiBDYXJkRGF0YVtdLCB0YXJnZXQ6IENhcmREYXRhKTogQ2FyZERhdGEgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2FyZERhdGEpIHtcbiAgICAgIGlmIChpdGVtLmNoaWxkcmVuLmluY2x1ZGVzKHRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07IC8vIEltbWVkaWF0ZSBwYXJlbnQgZm91bmRcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudChpdGVtLmNoaWxkcmVuLCB0YXJnZXQpO1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDsgLy8gTm90IGZvdW5kXG4gIH1cblxuICBpc0NoZWNrYm94RGlzYWJsZWQoaXRlbTogQ2FyZERhdGEpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYXJlbnQgPVxuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmZpbmRQYXJlbnQodGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhWzBdLCBpdGVtKVxuICAgICAgICA6IHRoaXMuZmluZFBhcmVudCh0aGlzLmNhcmREYXRhLCBpdGVtKTtcbiAgICBpZiAoXG4gICAgICBwYXJlbnQgJiZcbiAgICAgIHBhcmVudC5kYXRhLkNoaWxkcmVuVHlwZSAmJlxuICAgICAgcGFyZW50LmRhdGEuQ2hpbGRyZW5UeXBlID09IENoaWxkcmVuVHlwZS5BY3Rpb24gJiZcbiAgICAgIHBhcmVudC5kYXRhLlNlbGVjdGVkID09IGZhbHNlXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2V0VXBNYXBwZWREYXRhKGRhdGE6IFJvbGVbXSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi54LFxuICAgICAgICBpZDogeC5JZCxcbiAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuUGVybWlzc2lvbixcbiAgICAgICAgUm9sZUNvbnRleHRzOiB0aGlzLnNvdXJjZURhdGEubWFwKChjb25maWcpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkID0geC5Sb2xlQ29udGV4dHMuZmluZEluZGV4KFxuICAgICAgICAgICAgKHkpID0+IHkuTmFtZSA9PSBjb25maWcuTmFtZVxuICAgICAgICAgICk7XG4gICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuQWN0aW9uLFxuICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgIFJvbGVBY3Rpb25zOiBjb25maWcuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0FjdGlvbiA9XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAoYykgPT4gYy5OYW1lID09IGFjdGlvblxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IC0xO1xuXG4gICAgICAgICAgICAgIHZhciBhY3Q6IE1hcHBlZFJvbGVBY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nQWN0aW9uID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgTmFtZTogYWN0aW9uLFxuICAgICAgICAgICAgICAgIFJvbGU6IHguQ29kZSxcbiAgICAgICAgICAgICAgICBDb250ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICBpZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl0uaWRcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl0uSWRcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgIFRlbmFudElkOiB4LlRlbmFudElkLFxuICAgICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dXG4gICAgICAgICAgICAgICAgICAgICAgICAuQ29kZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246IHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJldHVybiBhY3Q7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgUm9sZTogeC5Db2RlLFxuICAgICAgICAgICAgaWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLmlkIDogJycsXG4gICAgICAgICAgICBJZDogZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uSWQgOiAnJyxcbiAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgVGVuYW50SWQ6IHguVGVuYW50SWQsXG4gICAgICAgICAgICBDb2RlOiBleGlzdGluZ0lkID4gLTEgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uU2VydmljZU5hbWUgOiAnJyxcbiAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5BUElLZXlcbiAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUNvbnRleHQ6IHRoaXMuZ2V0QXBwbGljYXRpb25Db250ZXh0Q29kZShjb25maWcuTmFtZSksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzZXRVcENhcmREYXRhKCkge1xuICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YVtdID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICB0aXRsZTogeC5OYW1lLFxuICAgICAgICBkYXRhOiB4LFxuICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgY2hpbGRyZW46IHguUm9sZUNvbnRleHRzLm1hcCgoYykgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGMuTmFtZSksXG4gICAgICAgICAgICBkYXRhOiBjLFxuICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICBjaGlsZHJlbjogYy5Sb2xlQWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShhLk5hbWUpLFxuICAgICAgICAgICAgICAgIGRhdGE6IGEsXG4gICAgICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2FyZERhdGEgPSBjYXJkRGF0YTtcbiAgfVxuXG4gIGdldEZvcm1hdHRlZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBTcGxpdCB0aGUga2V5IG9uIGNhcGl0YWwgbGV0dGVycywgaGFuZGxpbmcgXCJBbmRcIiBhcyBsb3dlcmNhc2VcbiAgICBjb25zdCB3b3JkcyA9IG5hbWVcbiAgICAgIC5zcGxpdCgvKD89W0EtWl0pLylcbiAgICAgIC5tYXAoKHdvcmQpID0+ICh3b3JkID09PSAnQW5kJyA/ICdhbmQnIDogd29yZCkpO1xuICAgIC8vIEpvaW4gdGhlIHdvcmRzIHdpdGggc3BhY2VzXG4gICAgcmV0dXJuIHdvcmRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZpZXdEZXRhaWxzRnJvbVRhYmxlKGRhdGE6IE1hcHBlZFJvbGUpIHtcbiAgICBjb25zdCBjYXJkRGF0YSA9IHRoaXMuY2FyZERhdGEuZmluZCgoeCkgPT4geC5kYXRhID09IGRhdGEpO1xuICAgIGlmIChjYXJkRGF0YSkge1xuICAgICAgdGhpcy52aWV3RGV0YWlscyhjYXJkRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgdmlld0RldGFpbHMoY29udGV4dDogQ2FyZERhdGEpIHtcbiAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5wdXNoKGNvbnRleHQpO1xuICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5wdXNoKHRoaXMuY2FyZERhdGEpO1xuICAgIHRoaXMuY2FyZERhdGEgPSBjb250ZXh0LmNoaWxkcmVuO1xuICAgIHRoaXMuY2FyZERhdGFWaWV3LmNsZWFyRGF0YSgpO1xuICB9XG4gIHZpZXdEZXRhaWxzQ2hpbGQoY29udGV4dDogQ2FyZERhdGEpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkKSB7XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5wdXNoKHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZCk7XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5wdXNoKGNvbnRleHQpO1xuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLnB1c2godGhpcy5jYXJkRGF0YSk7XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGEucHVzaCh0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmQuY2hpbGRyZW4pO1xuICAgICAgdGhpcy5jYXJkRGF0YSA9IGNvbnRleHQuY2hpbGRyZW47XG4gICAgICB0aGlzLmNhcmREYXRhVmlldy5jbGVhckRhdGEoKTtcbiAgICB9XG4gIH1cblxuICByb2xlQ2FyZENsaWNrZWQoaXRlbTogQ2FyZERhdGEpIHtcbiAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2soaXRlbSk7XG4gICAgLy8gaWYgKHRoaXMuY3VycmVudERhdGEpIHtcbiAgICAvLyAgIHRoaXMuZm9ybS5jb250cm9sc1snTmFtZSddLnNldFZhbHVlKHRoaXMuY3VycmVudERhdGEuZGF0YT8uTmFtZSk7XG4gICAgLy8gfVxuICB9XG5cbiAgdG9nZ2xlQ2hpbGRyZW4oaXRlbTogQ2FyZERhdGEpIHtcbiAgICB2YXIgY3VyclRvZ2dsZVN0YXRlID0gaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQ7XG4gICAgdGhpcy5jYXJkRGF0YS5mb3JFYWNoKChfKSA9PiB7XG4gICAgICBfLmlzQ2hpbGRyZW5FeHBhbmRlZCA9IGZhbHNlO1xuICAgIH0pO1xuICAgIGl0ZW0uaXNDaGlsZHJlbkV4cGFuZGVkID0gIWN1cnJUb2dnbGVTdGF0ZTtcbiAgICBpZiAoaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZCA9IGl0ZW07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VEZXRhaWxzKCkge1xuICAgIHRoaXMuY2FyZERhdGEgPVxuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhW3RoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5sZW5ndGggLSAxXTtcbiAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGEucG9wKCk7XG4gICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkucG9wKCk7XG4gICAgLy8gdGhpcy5kYXRhVmlldy5pc1RhYmxlVmlldyA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0Q2FyZFN1YkNhcHRpb24oaXRlbTogQ2FyZERhdGEpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGl0ZW0uY2hpbGRyZW4uZmlsdGVyKCh4KSA9PiB4LmRhdGEuU2VsZWN0ZWQpLmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbCA9IGl0ZW0uY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHJldHVybiBgJHtzZWxlY3RlZH0gb2YgJHt0b3RhbH0gJHtcbiAgICAgIHRvdGFsID4gMSA/IGl0ZW0uZGF0YS5DaGlsZHJlblR5cGUgKyAncycgOiBpdGVtLmRhdGEuQ2hpbGRyZW5UeXBlXG4gICAgfWA7XG4gIH1cblxuICBnZXRVcGRhdGVkUm9sZShyb2xlOiBNYXBwZWRSb2xlKTogUm9sZSB7XG4gICAgY29uc3QgbmV3Um9sZSA9IHJvbGU7XG4gICAgbmV3Um9sZS5Sb2xlQ29udGV4dHMgPSByb2xlLlJvbGVDb250ZXh0cy5maWx0ZXIoKHgpID0+IHguU2VsZWN0ZWQpLm1hcChcbiAgICAgICh5KSA9PiB7XG4gICAgICAgIHkuUm9sZUFjdGlvbnMgPSB5LlJvbGVBY3Rpb25zLmZpbHRlcigoeikgPT4gei5TZWxlY3RlZCk7XG4gICAgICAgIHJldHVybiB5O1xuICAgICAgfVxuICAgICk7XG4gICAgbmV3Um9sZS5EYXRhU3RhdGUgPVxuICAgICAgbmV3Um9sZS5EYXRhU3RhdGUgPT0gT2JqZWN0U3RhdGUuTmV3XG4gICAgICAgID8gT2JqZWN0U3RhdGUuTmV3XG4gICAgICAgIDogT2JqZWN0U3RhdGUuQ2hhbmdlZDtcbiAgICBuZXdSb2xlLklkID0gbmV3Um9sZS5EYXRhU3RhdGUgPT0gT2JqZWN0U3RhdGUuTmV3ID8gJycgOiBuZXdSb2xlLklkO1xuICAgIHJldHVybiBuZXdSb2xlIGFzIFJvbGU7XG4gIH1cbiAgYXN5bmMgc2F2ZVJvbGUoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudERhdGEpIHtcbiAgICAgIHZhciByb2xlOiBNYXBwZWRSb2xlID0gdGhpcy5jdXJyZW50RGF0YS5kYXRhIGFzIE1hcHBlZFJvbGU7XG4gICAgICAvLyByb2xlLk5hbWUgPSB0aGlzLmZvcm0uY29udHJvbHNbJ05hbWUnXS52YWx1ZTtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnREYXRhLmRhdGEuTmFtZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93SW5mbygnUm9sZSBuYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtYXBwZWRSb2xlID0gdGhpcy5nZXRVcGRhdGVkUm9sZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJvbGUpKSk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoYFJvbGUvU2F2ZVJvbGVzYCwgW21hcHBlZFJvbGVdKTtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgUm9sZVtdO1xuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgcm9sZVJlc3VsdCA9IHJlc3VsdFswXTtcbiAgICAgICAgICB2YXIgbWFwcGVkUm9sZVNhdmU6IE1hcHBlZFJvbGUgPSB7XG4gICAgICAgICAgICAuLi5yb2xlUmVzdWx0LFxuICAgICAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuUGVybWlzc2lvbixcbiAgICAgICAgICAgIFJvbGVDb250ZXh0czogdGhpcy5zb3VyY2VEYXRhLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWQgPSByb2xlUmVzdWx0LlJvbGVDb250ZXh0cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgKHkpID0+IHkuTmFtZSA9PSBjb25maWcuTmFtZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB2YXIgY29udGV4dDogTWFwcGVkUm9sZUNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuQWN0aW9uLFxuICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0lkID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgUm9sZUFjdGlvbnM6IGNvbmZpZy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0FjdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWRcbiAgICAgICAgICAgICAgICAgICAgICAgIF0uUm9sZUFjdGlvbnMuZmluZEluZGV4KChjKSA9PiBjLk5hbWUgPT0gYWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgICAgICAgIHZhciBhY3Q6IE1hcHBlZFJvbGVBY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0FjdGlvbiA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBOYW1lOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIFJvbGU6IHJvbGVSZXN1bHQuQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgICAgIGlkOlxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLklkXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgICAgICAgICAgIFRlbmFudElkOiByb2xlUmVzdWx0LlRlbmFudElkLFxuICAgICAgICAgICAgICAgICAgICBDb2RlOlxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS5Db2RlXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0uU2VydmljZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0uQVBJS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQWN0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBOYW1lOiBjb25maWcuTmFtZSxcbiAgICAgICAgICAgICAgICBSb2xlOiByb2xlUmVzdWx0LkNvZGUsXG4gICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5pZCA6ICcnLFxuICAgICAgICAgICAgICAgIElkOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uSWQgOiAnJyxcbiAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgIFRlbmFudElkOiByb2xlUmVzdWx0LlRlbmFudElkLFxuICAgICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgU2VydmljZU5hbWU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoXG4gICAgICAgICAgICAgICAgICBjb25maWcuTmFtZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleChcbiAgICAgICAgICAgICh4KSA9PiB4ID09IHRoaXMuY3VycmVudERhdGE/LmRhdGFcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpdGVtSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uQ29kZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5JZCA9IG1hcHBlZFJvbGVTYXZlLklkO1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uRGF0YVN0YXRlID0gbWFwcGVkUm9sZVNhdmUuRGF0YVN0YXRlO1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uVGVuYW50SWQgPSBtYXBwZWRSb2xlU2F2ZS5UZW5hbnRJZDtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlNlcnZpY2VOYW1lID0gbWFwcGVkUm9sZVNhdmUuU2VydmljZU5hbWU7XG4gICAgICAgICAgICBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHMuZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Db2RlID0geC5Db2RlO1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uU2VydmljZU5hbWUgPSB4LlNlcnZpY2VOYW1lO1xuICAgICAgICAgICAgICB4LlJvbGVBY3Rpb25zLmZvckVhY2goKHksIGopID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZUFjdGlvbnNbal0uUm9sZSA9XG4gICAgICAgICAgICAgICAgICBtYXBwZWRSb2xlU2F2ZS5Db2RlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tqXS5Db2RlID1cbiAgICAgICAgICAgICAgICAgIHkuQ29kZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICBqXG4gICAgICAgICAgICAgICAgXS5TZXJ2aWNlTmFtZSA9IHkuU2VydmljZU5hbWU7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB4KTtcbiAgICAgICAgICAgIC8vIHRoaXMuY3VycmVudERhdGEgPSB7XG4gICAgICAgICAgICAvLyAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgLy8gICB0aXRsZTogbWFwcGVkUm9sZVNhdmUuTmFtZSxcbiAgICAgICAgICAgIC8vICAgZGF0YTogbWFwcGVkUm9sZVNhdmUsXG4gICAgICAgICAgICAvLyAgIGlzQ2hpbGRyZW5FeHBhbmRlZDogdGhpcy5jdXJyZW50RGF0YS5pc0NoaWxkcmVuRXhwYW5kZWQsXG4gICAgICAgICAgICAvLyAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgLy8gICBjaGlsZHJlbjogbWFwcGVkUm9sZVNhdmUuUm9sZUNvbnRleHRzLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiB7XG4gICAgICAgICAgICAvLyAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAvLyAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGMuTmFtZSksXG4gICAgICAgICAgICAvLyAgICAgICBkYXRhOiBjLFxuICAgICAgICAgICAgLy8gICAgICAgYm9keTogW10sXG4gICAgICAgICAgICAvLyAgICAgICBjaGlsZHJlbjogYy5Sb2xlQWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShhLk5hbWUpLFxuICAgICAgICAgICAgLy8gICAgICAgICAgIGRhdGE6IGEsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICAvLyAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgLy8gICAgICAgICB9O1xuICAgICAgICAgICAgLy8gICAgICAgfSksXG4gICAgICAgICAgICAvLyAgICAgfTtcbiAgICAgICAgICAgIC8vICAgfSksXG4gICAgICAgICAgICAvLyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVSb2xlRHluYW1pYyhpdGVtOiBDYXJkRGF0YSkge1xuICAgIGlmICh0aGlzLmlzQ2hlY2tib3hEaXNhYmxlZChpdGVtKSkge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93SW5mbygnUGFyZW50IFVJIG5vdCBzZWxlY3RlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByb2xlOiBDYXJkRGF0YSB8IG51bGwgPVxuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5WzBdXG4gICAgICAgIDogdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkXG4gICAgICAgID8gdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgY2FyZERhdGFSZWY6IENhcmREYXRhW10gfCBudWxsID1cbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhWzBdXG4gICAgICAgIDogdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkXG4gICAgICAgID8gdGhpcy5jYXJkRGF0YVxuICAgICAgICA6IG51bGw7XG4gICAgLy8gY29uc3QgaXNFeHBhbmRlZENhcmQ6IGJvb2xlYW4gPVxuICAgIC8vICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID4gMFxuICAgIC8vICAgICA/IGZhbHNlXG4gICAgLy8gICAgIDogdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkXG4gICAgLy8gICAgID8gdHJ1ZVxuICAgIC8vICAgICA6IGZhbHNlO1xuICAgIGlmICghcm9sZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocm9sZS5kYXRhLk5hbWUudHJpbSgpLmxlbmd0aCA9PSAwKSB7XG4gICAgICBpdGVtLmRhdGEuU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oJ1JvbGUgbmFtZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbS5kYXRhLlNlbGVjdGVkID0gIWl0ZW0uZGF0YS5TZWxlY3RlZDtcbiAgICBjb25zdCBtYXBwZWRSb2xlID0gdGhpcy5nZXRVcGRhdGVkUm9sZShcbiAgICAgIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocm9sZS5kYXRhKSlcbiAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoYFJvbGUvU2F2ZVJvbGVzYCwgW21hcHBlZFJvbGVdKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIGl0ZW0uZGF0YS5TZWxlY3RlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgUm9sZVtdO1xuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciByb2xlUmVzdWx0ID0gcmVzdWx0WzBdO1xuICAgICAgICB2YXIgbWFwcGVkUm9sZVNhdmU6IE1hcHBlZFJvbGUgPSB7XG4gICAgICAgICAgLi4ucm9sZVJlc3VsdCxcbiAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uLFxuICAgICAgICAgIFJvbGVDb250ZXh0czogdGhpcy5zb3VyY2VEYXRhLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkID0gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAoeSkgPT4geS5OYW1lID09IGNvbmZpZy5OYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0lkID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgIFJvbGVBY3Rpb25zOiBjb25maWcuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAgIChjKSA9PiBjLk5hbWUgPT0gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IC0xO1xuICAgICAgICAgICAgICAgIHZhciBhY3Q6IE1hcHBlZFJvbGVBY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICBTZWxlY3RlZDogZXhpc3RpbmdBY3Rpb24gPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIFJvbGU6IHJvbGVSZXN1bHQuQ29kZSxcbiAgICAgICAgICAgICAgICAgIENvbnRleHQ6ICcnLFxuICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgXS5pZFxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLklkXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICBDb2RlOlxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIF0uQ29kZVxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQWN0aW9uOiB0aGlzLmdldEFwcGxpY2F0aW9uQWN0aW9uQ29kZShhY3Rpb24pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdDtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgICBSb2xlOiByb2xlUmVzdWx0LkNvZGUsXG4gICAgICAgICAgICAgIGlkOiBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5pZCA6ICcnLFxuICAgICAgICAgICAgICBJZDogZXhpc3RpbmdJZCA+IC0xID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uSWQgOiAnJyxcbiAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICBUZW5hbnRJZDogcm9sZVJlc3VsdC5UZW5hbnRJZCxcbiAgICAgICAgICAgICAgQ29kZTpcbiAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5BUElLZXlcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoXG4gICAgICAgICAgICAgICAgY29uZmlnLk5hbWVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gY2FyZERhdGFSZWZcbiAgICAgICAgICA/IGNhcmREYXRhUmVmLmZpbmRJbmRleCgoeCkgPT4geC5kYXRhID09IHJvbGU/LmRhdGEpXG4gICAgICAgICAgOiAtMTtcbiAgICAgICAgaWYgKGl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uQ29kZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uSWQgPSBtYXBwZWRSb2xlU2F2ZS5JZDtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5EYXRhU3RhdGUgPSBtYXBwZWRSb2xlU2F2ZS5EYXRhU3RhdGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uVGVuYW50SWQgPSBtYXBwZWRSb2xlU2F2ZS5UZW5hbnRJZDtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5TZXJ2aWNlTmFtZSA9IG1hcHBlZFJvbGVTYXZlLlNlcnZpY2VOYW1lO1xuICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLlJvbGVDb250ZXh0cy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uQ29kZSA9IHguQ29kZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5TZXJ2aWNlTmFtZSA9IHguU2VydmljZU5hbWU7XG4gICAgICAgICAgICB4LlJvbGVBY3Rpb25zLmZvckVhY2goKHksIGopID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGVBY3Rpb25zW2pdLlJvbGUgPVxuICAgICAgICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tqXS5Db2RlID0geS5Db2RlO1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZUFjdGlvbnNbal0uU2VydmljZU5hbWUgPVxuICAgICAgICAgICAgICAgIHkuU2VydmljZU5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHMgPSBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHM7XG5cbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB4KTtcbiAgICAgICAgICAvLyBpZiAoY2FyZERhdGFSZWYpIHtcbiAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgICAvLyAgICAgWERhdGFJc0hlcmU6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2FyZERhdGFSZWYpKSxcbiAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vICAgY2FyZERhdGFSZWZbaXRlbUluZGV4XSA9IHtcbiAgICAgICAgICAvLyAgICAgc2VsZWN0ZWQ6IGNhcmREYXRhUmVmW2l0ZW1JbmRleF0uc2VsZWN0ZWQsXG4gICAgICAgICAgLy8gICAgIGlzQ2hpbGRyZW5FeHBhbmRlZDogY2FyZERhdGFSZWZbaXRlbUluZGV4XS5pc0NoaWxkcmVuRXhwYW5kZWQsXG4gICAgICAgICAgLy8gICAgIHRpdGxlOiBtYXBwZWRSb2xlU2F2ZS5OYW1lLFxuICAgICAgICAgIC8vICAgICBkYXRhOiBtYXBwZWRSb2xlU2F2ZSxcbiAgICAgICAgICAvLyAgICAgYm9keTogW10sXG4gICAgICAgICAgLy8gICAgIGNoaWxkcmVuOiBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHMubWFwKChjKSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAvLyAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAvLyAgICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYy5OYW1lKSxcbiAgICAgICAgICAvLyAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgLy8gICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAvLyAgICAgICAgIGNoaWxkcmVuOiBjLlJvbGVBY3Rpb25zLm1hcCgoYSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGEuTmFtZSksXG4gICAgICAgICAgLy8gICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgLy8gICAgICAgICAgIH07XG4gICAgICAgICAgLy8gICAgICAgICB9KSxcbiAgICAgICAgICAvLyAgICAgICB9O1xuICAgICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgICAvLyAgIH07XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2F2ZURhdGFBbGwoKSB7XG4gICAgY29uc3Qgcm9sZXM6IFJvbGVbXSA9IHRoaXMuZGF0YS5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLngsXG4gICAgICAgIFJvbGVDb250ZXh0czogeC5Sb2xlQ29udGV4dHMuZmlsdGVyKCh5KSA9PiB5LlNlbGVjdGVkKS5tYXAoKHopID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ueixcbiAgICAgICAgICAgIFJvbGVBY3Rpb25zOiB6LlJvbGVBY3Rpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgKGEpID0+IGEuU2VsZWN0ZWRcbiAgICAgICAgICAgICkgYXMgUm9sZUFjdGlvbltdLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pIGFzIFJvbGVDb250ZXh0W10sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlVGFibGUoKSB7XG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4geCk7XG4gIH1cblxuICBvblZpZXdDaGFuZ2UoaXNHcmlkVmlldzogYm9vbGVhbik6IHZvaWQge31cbiAgb25TdGF0ZUNoYW5nZShldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICB2YXIgbmV3TWFwcGVkUm9sZTogTWFwcGVkUm9sZSA9IHtcbiAgICAgICAgICBSb2xlQ29udGV4dHM6IHRoaXMuc291cmNlRGF0YS5tYXAoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICAgIFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgUm9sZUFjdGlvbnM6IGNvbmZpZy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGFjdDogTWFwcGVkUm9sZUFjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIFJvbGU6ICcnLFxuICAgICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgICAgICBJZDogJycsXG4gICAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgQVBJS2V5OiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246IHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgTmFtZTogY29uZmlnLk5hbWUsXG4gICAgICAgICAgICAgIFJvbGU6ICcnLFxuICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgIElkOiAnJyxcbiAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgICAgIEFQSUtleTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoXG4gICAgICAgICAgICAgICAgY29uZmlnLk5hbWVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLlBlcm1pc3Npb24sXG4gICAgICAgICAgTmFtZTogJycsXG4gICAgICAgICAgaWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgSWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgQ29kZTogJycsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgIEFwcGxpY2F0aW9uOiB0aGlzLmFwcGxpY2F0aW9uID8gdGhpcy5hcHBsaWNhdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBBUElLZXk6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhID0ge1xuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB0aXRsZTogbmV3TWFwcGVkUm9sZS5OYW1lLFxuICAgICAgICAgIGRhdGE6IG5ld01hcHBlZFJvbGUsXG4gICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgY2hpbGRyZW46IG5ld01hcHBlZFJvbGUuUm9sZUNvbnRleHRzLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGMuTmFtZSksXG4gICAgICAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogYy5Sb2xlQWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShhLk5hbWUpLFxuICAgICAgICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChbbmV3TWFwcGVkUm9sZV0pO1xuICAgICAgICB0aGlzLmNhcmREYXRhLnB1c2goY2FyZERhdGEpO1xuICAgICAgICB0aGlzLnJvbGVDYXJkQ2xpY2tlZChjYXJkRGF0YSk7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuaXNUYWJsZVZpZXcgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzaG93VGFibGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkUm93czogUm9sZVtdKSB7fVxuICByZXRyeU1lc3NhZ2UoKSB7fVxuICBvbkNvbHVtbnNVcGRhdGVkKHVwZGF0ZWRDb2x1bW5zOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgY29uc3QgdXBkYXRlZENvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbjxNYXBwZWRSb2xlPltdID0gW107XG4gICAgdXBkYXRlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ0NvbCA9IHRoaXMucm9sZUNvbnRyb2xTdmMucm9sZUNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmhlYWRlciA9PT0gY29sLm5hbWUgfHwgY29sdW1uLmlkID09PSBjb2wubmFtZVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGluZ0NvbCkge1xuICAgICAgICB1cGRhdGVkQ29sdW1uRGVmLnB1c2gobWF0Y2hpbmdDb2wpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy52aXNpYmxlQ29sdW1uRGVmID0gWy4uLnVwZGF0ZWRDb2x1bW5EZWZdO1xuICB9XG4gIG9uU29ydFVwZGF0ZWQodXBkYXRlZFNvcnRzOiBJRGF0YUZpbHRlcltdKSB7fVxuICBoYW5kbGVFeHBvcnQoZXhwb3J0ZWREYXRhOiBQYXJ0aWFsPGFueT5bXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdFeHBvcnRlZCBkYXRhOicsIGV4cG9ydGVkRGF0YSk7XG4gICAgdGhpcy5kb3dubG9hZENTVihleHBvcnRlZERhdGEpO1xuICB9XG4gIHByaXZhdGUgZG93bmxvYWRDU1YoZGF0YTogUGFydGlhbDxhbnk+W10pIHtcbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmtleXMoZGF0YVswXSk7XG4gICAgY29uc3QgY3N2Q29udGVudCA9IFtcbiAgICAgIGhlYWRlcnMuam9pbignLCcpLFxuICAgICAgLi4uZGF0YS5tYXAoKHJvdykgPT4gaGVhZGVycy5tYXAoKGhlYWRlcikgPT4gcm93W2hlYWRlcl0pLmpvaW4oJywnKSksXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGlmIChsaW5rLmRvd25sb2FkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCAnZXhwb3J0LmNzdicpO1xuICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5jbGljaygpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICB9XG4gIH1cblxuICBnZXRNb2NrUm9sZXMoKTogUm9sZVtdIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KDEwKS5maWxsKDEpLm1hcCgoaWQsIGkpID0+ICh7XG4gICAgICBJZDogaWQgKyBpLFxuICAgICAgaWQ6IChpZCArIGkpLnRvU3RyaW5nKCksXG4gICAgICBOYW1lOiB0aGlzLm1vY2tOYW1lc1tpXSB8fCAnJyxcbiAgICAgIFJvbGVDb250ZXh0czogdGhpcy5yYW5kb21Db250ZXh0cygpLFxuICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICBUZW5hbnRJZDogYFRlbmFudCR7aWQgKyBpfWAsXG4gICAgICBDb2RlOiAnJyxcbiAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgIEFQSUtleTogJycsXG4gICAgfSkpO1xuICB9XG5cbiAgbW9ja05hbWVzOiBzdHJpbmdbXSA9IFtcbiAgICAnQWRtaW4nLFxuICAgICdTdXBlciBBZG1pbicsXG4gICAgJ01hbmFnZXInLFxuICAgICdJbnRlcm4nLFxuICAgICdQcm9kdWN0aW9uIE1hbmFnZXInLFxuICAgICdDRU8nLFxuICAgICdDVE8nLFxuICAgICdDT08nLFxuICAgICdEZXZlbG9wZXInLFxuICAgICdFbmdpbmVlcicsXG4gIF07XG5cbiAgcmFuZG9tTmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5tb2NrTmFtZXMubGVuZ3RoKTtcbiAgICByZXR1cm4gdGhpcy5tb2NrTmFtZXNbcmFuZG9tSW5kZXhdO1xuICB9XG5cbiAgcmFuZG9tQ29udGV4dHMoKTogUm9sZUNvbnRleHRbXSB7XG4gICAgY29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5mbG9vcihcbiAgICAgIE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSXMpLmxlbmd0aCArIDFcbiAgICApO1xuICAgIHZhciByZXR1cm5BcnJheTogUm9sZUNvbnRleHRbXSA9IFtdO1xuICAgIGNvbnN0IHVzZWRMaXN0OiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZG9tTnVtYmVyOyBpKyspIHtcbiAgICAgIGxldCByYW5kb21JbmRleDtcbiAgICAgIGRvIHtcbiAgICAgICAgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSXMpLmxlbmd0aCk7XG4gICAgICB9IHdoaWxlICh1c2VkTGlzdC5pbmNsdWRlcyhyYW5kb21JbmRleCkpO1xuXG4gICAgICByZXR1cm5BcnJheS5wdXNoKHtcbiAgICAgICAgSWQ6ICdjb250ZXh0JyArIGksXG4gICAgICAgIGlkOiAoJ2NvbnRleHQnICsgaSkudG9TdHJpbmcoKSxcbiAgICAgICAgTmFtZTogT2JqZWN0LmtleXMoVUlzKVtyYW5kb21JbmRleF0sXG4gICAgICAgIFJvbGU6ICcnLFxuICAgICAgICBSb2xlQWN0aW9uczogdGhpcy5yYW5kb21BY3Rpb25zKCksXG4gICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgVGVuYW50SWQ6IGBUZW5hbnQkeydjb250ZXh0JyArIGl9YCxcbiAgICAgICAgQ29kZTogJycsXG4gICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgQVBJS2V5OiAnJyxcbiAgICAgICAgQXBwbGljYXRpb25Sb2xlQ29udGV4dDogJycsXG4gICAgICB9KTtcbiAgICAgIHVzZWRMaXN0LnB1c2gocmFuZG9tSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuQXJyYXk7XG4gIH1cblxuICByYW5kb21BY3Rpb25zKCk6IFJvbGVBY3Rpb25bXSB7XG4gICAgY29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5mbG9vcihcbiAgICAgIE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSUFjdGlvbnMpLmxlbmd0aCArIDFcbiAgICApO1xuICAgIHZhciByZXR1cm5BcnJheTogUm9sZUFjdGlvbltdID0gW107XG4gICAgY29uc3QgdXNlZExpc3Q6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5kb21OdW1iZXI7IGkrKykge1xuICAgICAgbGV0IHJhbmRvbUluZGV4O1xuICAgICAgZG8ge1xuICAgICAgICByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE9iamVjdC5rZXlzKFVJQWN0aW9ucykubGVuZ3RoKTtcbiAgICAgIH0gd2hpbGUgKHVzZWRMaXN0LmluY2x1ZGVzKHJhbmRvbUluZGV4KSk7XG5cbiAgICAgIHJldHVybkFycmF5LnB1c2goe1xuICAgICAgICBJZDogJ2FjdGlvbicgKyBpLFxuICAgICAgICBpZDogKCdhY3Rpb24nICsgaSkudG9TdHJpbmcoKSxcbiAgICAgICAgTmFtZTogT2JqZWN0LmtleXMoVUlBY3Rpb25zKVtyYW5kb21JbmRleF0sXG4gICAgICAgIFJvbGU6ICcnLFxuICAgICAgICBDb250ZXh0OiAnJyxcbiAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICBUZW5hbnRJZDogYFRlbmFudCR7J2FjdGlvbicgKyBpfWAsXG4gICAgICAgIENvZGU6ICcnLFxuICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgIEFQSUtleTogJycsXG4gICAgICAgIEFwcGxpY2F0aW9uUm9sZUFjdGlvbjogJycsXG4gICAgICB9KTtcbiAgICAgIHVzZWRMaXN0LnB1c2gocmFuZG9tSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuQXJyYXk7XG4gIH1cblxuICBlZGl0VmFsdWUodmFsdWU6IE1hcHBlZFJvbGUpIHtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGF0YS5maW5kKCh4KSA9PiB4LmRhdGEuSWQgPT0gdmFsdWUuSWQpO1xuICAgIGlmIChjYXJkICYmIHRoaXMuY2FyZERhdGFWaWV3KSB7XG4gICAgICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICAgIGNhcmQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jdXJyZW50RGF0YSA9IHRoaXMuY2FyZERhdGFWaWV3Lm9uSXRlbUNsaWNrKGNhcmQpO1xuICAgICAgLy8gaWYgKHRoaXMuY3VycmVudERhdGEpIHtcbiAgICAgIC8vICAgdGhpcy5mb3JtLmNvbnRyb2xzWydOYW1lJ10uc2V0VmFsdWUodGhpcy5jdXJyZW50RGF0YS5kYXRhPy5OYW1lKTtcbiAgICAgIC8vIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgI21lc3NhZ2VMb2cgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IG1lc3NhZ2UtbG9nLWNvbnRhaW5lclwiPlxuICA8ZGl2ICpuZ0lmPVwidGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID4gMFwiXG4gICAgY2xhc3M9XCJjb250ZXh0LWJhbm5lciBweS0zIHB4LTQgcm91bmRlZC14bCBmbGV4IGl0ZW0tY2VudGVyIGp1c3RpZnktc3BhY2UtYmV0d2VlbiBnYXAtM1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGZsZXgtMSBjb250ZXh0LWJhbm5lci1jb250ZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGV4dC1jb250ZW50IGl0ZW1zLWNlbnRlciBmbGV4IGdhcC0yXCIgKm5nRm9yPVwibGV0IGNvbnRleHQgb2YgdGhpcy5jYXJkQ29udGV4dEhpc3Rvcnk7IGluZGV4IGFzIGlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRleHQtbWFpbi1jb250ZW50LWNvbnRhaW5lciBmbGV4IGdhcC00XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb250ZXh0LWNhcHRpb24gZm9udC1ib2xkIHRleHQtWyM0MDQwNDBdXCI+e3tjb250ZXh0LmRhdGEuQ2hpbGRyZW5UeXBlICYmXG4gICAgICAgICAgICBjb250ZXh0LmRhdGEuQ2hpbGRyZW5UeXBlID09IGNoaWxkUGVybWlzc2lvblJlZj8gY29udGV4dC5kYXRhLk5hbWU6IGNvbnRleHQudGl0bGV9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPT0gdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoIC0xXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29udGV4dC1zdWJjYXB0aW9uXCI+e3t0aGlzLmdldENhcmRTdWJDYXB0aW9uKGNvbnRleHQpfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA8IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCAtMVwiPi88L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kXCI+XG4gICAgICA8dmVyYmVuLXN2ZyAoY2xpY2spPVwiY2xvc2VEZXRhaWxzKClcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgaWNvbj1cImNsb3NlLWNpcmNsZS1mdWxsXCIgW3dpZHRoXT1cIjIwXCJcbiAgICAgICAgW2hlaWdodF09XCIyMFwiPjwvdmVyYmVuLXN2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx2ZXJiZW4tZGF0YS12aWV3ICN2ZHYgW3ZpZXdTdGF0ZV09XCJ7XG4gICAgICBpc1NlYXJjaDogdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgICBpc0NvbHVtbjogdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgICBpc0ZpbHRlcjogdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgICBpc1NvcnQ6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNFeHBvcnQ6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNTZWxlY3Q6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNDcmVhdGU6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNUb2dnbGU6dGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgfVwiIFtidXR0b25DbGFzc109XCInbXktY3VzdG9tLWJ1dHRvbi1jbGFzcydcIiBbaWNvbkNsYXNzXT1cIidteS1pY29uLWNsYXNzJ1wiXG4gICAgW2FjdGl2ZUljb25DbGFzc109XCInbXktYWN0aXZlLWljb24tY2xhc3MnXCIgW2lzVGFibGVWaWV3XT1cInRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwXCJcbiAgICBbc2VsZWN0ZWRDb2x1bW5Db3VudF09XCIwXCIgW3NlbGVjdGVkU29ydENvdW50XT1cIjBcIiBbc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XT1cIjBcIiAodmlld0NoYW5nZSk9XCJvblZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHN0YXRlQ2hhbmdlKT1cIm9uU3RhdGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgdGFibGUtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS10YWJsZSBbZGF0YV09XCJkYXRhXCIgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbkRlZlwiIFtzdHlsZUNvbmZpZ109XCJzdHlsZXNcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJzZWxlY3RcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LWlzU2VsZWN0ZWQ9XCJpc1NlbGVjdGVkXCIgbGV0LXRvZ2dsZVJvd1NlbGVjdGlvbj1cInRvZ2dsZVJvd1NlbGVjdGlvblwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzU2VsZWN0ZWRcIiAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbigpXCIgLz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyIGxldC1hbGxSb3dzU2VsZWN0ZWQ9XCJhbGxSb3dzU2VsZWN0ZWRcIiBsZXQtc29tZVJvd3NTZWxlY3RlZD1cInNvbWVSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LXRvZ2dsZUFsbFJvd3M9XCJ0b2dnbGVBbGxSb3dzXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiYWxsUm93c1NlbGVjdGVkKClcIiBbaW5kZXRlcm1pbmF0ZV09XCJzb21lUm93c1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbFJvd3MoKVwiIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiY3JlYXRlZEF0XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlIHwgZGF0ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cInVwZGF0ZWRBdFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB8IGRhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTQgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIChjbGljayk9XCJlZGl0VmFsdWUodmFsdWUpXCIgaWNvbj1cImVkaXRcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwidmlld0RldGFpbHNGcm9tVGFibGUodmFsdWUpXCIgY2xhc3M9XCJ2aWV3LWxpbmtzIHZpZXctZGV0YWlsc1wiPnZpZXcgZGV0YWlsczwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aWV3LWxpbmtzIHZpZXctdXNlcnNcIj52aWV3IHVzZXJzPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2xpYi1kYXRhLXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2FyZC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldyBib3JkZXJSYWRpdXM9XCIxMnB4XCIgI3ZkY3YgZGF0YUlkPVwiSWRcIiBib3JkZXI9XCI1cHhcIiBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhXCJcbiAgICAgICAgcmJnQ29sb3I9XCIjZjVmNmY5XCIgbWc9XCIwcHhcIj5cbiAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3IGNsYXNzPVwic3BhY2UteS03XCI+XG4gICAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YSAjdmxjZCBbcGFyZW50XT1cInZkY3ZcIiBkYXRhSWQ9XCJNYWlsQWRkcmVzc1wiXG4gICAgICAgICAgICBjbGFzcz1cImJnLXNlY29uZGFyeS0xMDAgcm91bmRlZC14bCBib3JkZXItcHJpbWFyeSBib3JkZXItWzFweF1cIiBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcmQgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInJvbGVDYXJkQ2xpY2tlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmRhdGEuQ2hpbGRyZW5UeXBlICYmIGl0ZW0uZGF0YS5DaGlsZHJlblR5cGUgPT0gY2hpbGRQZXJtaXNzaW9uUmVmXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggY3Vyc29yLXBvaW50ZXIgaC1bbWF4LWNvbnRlbnRdXCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiIChjbGljayk9XCJ0b2dnbGVDaGlsZHJlbihpdGVtKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGg/J3Zpc2libGUnOidpbnZpc2libGUnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbXMtY2VudGVyIGZsZXggIHByLTEgY3Vyc29yLXBvaW50ZXJcIiBbaWNvbl09XCJpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZD8nbWludXMnOidwbHVzJ1wiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggIHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTMgcHgtNCBmbGV4LTEgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZmxleC0xIGdhcC0xIGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBtaW4taC1bNTBweF0ganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJteS0wIGZvbnQtYm9sZCB0ZXh0LVsjNDA0MDQwXSBsZWFkaW5nLVsxOS41cHhdXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRhLk5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTBweF0gZm9udC1saWdodCB0ZXh0LVsjNDA0MDQwXSBsZWFkaW5nLVsxMi4xcHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldENhcmRTdWJDYXB0aW9uKGl0ZW0pfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBpdGVtcy1lbmQgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIChjbGljayk9XCJ2aWV3RGV0YWlscyhpdGVtKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS0wIHVuZGVybGluZSB0ZXh0LVsjMzQ3OUU5XSB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxNi42cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgZGV0YWlsczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbS5kYXRhLkNoaWxkcmVuVHlwZSB8fCBpdGVtLmRhdGEuQ2hpbGRyZW5UeXBlICE9PSBjaGlsZFBlcm1pc3Npb25SZWZcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBoLVttYXgtY29udGVudF1cIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBbbmdDbGFzc109XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoPyd2aXNpYmxlJzonaW52aXNpYmxlJ1wiIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCIgKGNsaWNrKT1cInRvZ2dsZUNoaWxkcmVuKGl0ZW0pXCIgY2xhc3M9XCJpdGVtcy1jZW50ZXIgZmxleCAgcHItMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZD8nbWludXMnOidwbHVzJ1wiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggIHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTMgcHgtNCBmbGV4LTEgZmxleCBnYXAtMiBoLVsxMDAlXSBpdGVtcy1zdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJpdGVtLmRhdGE/LlNlbGVjdGVkICE9IHVuZGVmaW5lZFwiIFtkaXNhYmxlZF09XCJ0aGlzLmlzQ2hlY2tib3hEaXNhYmxlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJtdC0xIGN1cnNvci1wb2ludGVyXCIgWyhuZ01vZGVsKV09XCJpdGVtLmRhdGEuU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgdGhpcy5zYXZlUm9sZUR5bmFtaWMoaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydCBmbGV4LTEgZ2FwLTEganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC0xIG1pbi1oLVs1MHB4XSBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm15LTAgZm9udC1ib2xkIHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzE5LjVweF1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXRleHQtWzEwcHhdIGZvbnQtbGlnaHQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTIuMXB4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRDYXJkU3ViQ2FwdGlvbihpdGVtKX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXggaXRlbXMtZW5kIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAoY2xpY2spPVwidmlld0RldGFpbHMoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTAgdW5kZXJsaW5lIHRleHQtWyMzNDc5RTldIHRleHQtWzEycHhdIGxlYWRpbmctWzE2LjZweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldyBkZXRhaWxzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcmRDaGlsZCBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC1bbWF4LWNvbnRlbnRdXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggIHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTMgcHgtNCBmbGV4LTEgZmxleCBnYXAtMiBoLVsxMDAlXSBpdGVtcy1zdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJpdGVtLmRhdGE/LlNlbGVjdGVkICE9IHVuZGVmaW5lZFwiIFtkaXNhYmxlZF09XCJ0aGlzLmlzQ2hlY2tib3hEaXNhYmxlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJtdC0xIGN1cnNvci1wb2ludGVyXCIgWyhuZ01vZGVsKV09XCJpdGVtLmRhdGEuU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgdGhpcy5zYXZlUm9sZUR5bmFtaWMoaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydCBmbGV4LTEgZ2FwLTEganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC0xIG1pbi1oLVs1MHB4XSBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm15LTAgZm9udC1ib2xkIHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzE5LjVweF1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXRleHQtWzEwcHhdIGZvbnQtbGlnaHQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTIuMXB4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRDYXJkU3ViQ2FwdGlvbihpdGVtKX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXggaXRlbXMtZW5kIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAoY2xpY2spPVwidmlld0RldGFpbHNDaGlsZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXktMCB1bmRlcmxpbmUgdGV4dC1bIzM0NzlFOV0gdGV4dC1bMTJweF0gbGVhZGluZy1bMTYuNnB4XSBjdXJzb3ItcG9pbnRlciBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3IGRldGFpbHM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YT5cbiAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgPHZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldyAqbmdJZj1cInRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwYXJlbnQ+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGhpcy5jdXJyZW50RGF0YVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCByb3VuZGVkLXhsIGgtZnVsbCB3LWZ1bGwganVzdGlmeS1iZXR3ZWVuIHJlbGF0aXZlIHNwYWNlLXktNFwiPlxuICAgICAgICAgICAgICA8dmVyYmVuYS1pbnB1dCBuYW1lPVwiTmFtZVwiIGxhYmVsPVwiTmFtZVwiIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVRhYmxlKClcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGhpcy5jdXJyZW50RGF0YS5kYXRhLk5hbWVcIiAvPlxuXG4gICAgICAgICAgICAgIDwhLS0gYnV0dG9ucyAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGJvdHRvbS04IGxlZnQtMCByaWdodC0wXCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIHRleHQ9XCJEZWxldGVcIiBiZ0NvbG9yPVwiIzk5OTk5OVwiIHRleHRDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCAjOTk5OTk5XCI+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIChjbGljayk9XCJ2ZHYudG9nZ2xlVmlldygpXCIgdGV4dD1cIlN3aXRjaCBUbyBUYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlVHlwZT1cInlsdy1vdXRsaW5lXCI+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvbiAoY2xpY2spPVwidGhpcy5zYXZlUm9sZSgpXCIgdGV4dD1cIlNhdmVcIiBiZ0NvbG9yPVwiI0ZGRTY4MVwiIHRleHRDb2xvcj1cIiM0MDQwNDBcIlxuICAgICAgICAgICAgICAgICAgICBib3JkZXI9XCIxcHggc29saWQgI0ZGRTY4MVwiPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgPCEtLSA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgIHllc2hoaGhoaFxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz4gLS0+XG5cbiAgICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXIgY2xhc3M9XCJmbG9hdC1yaWdodFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIlxuICAgICAgICAgICAgICA+e3sgY2FyZERhdGEubGVuZ3RoIH19IHJlY29yZHMgbG9hZGVkPC9zcGFuPiAtLT5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJsb2FkLW1vcmVcIj5Mb2FkIG1vcmU8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92ZXJiZW4tY2FyZC1kYXRhLXZpZXctZm9vdGVyPlxuICAgICAgPC92ZXJiZW4tY2FyZC1kYXRhLXZpZXc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjb2x1bW4tY29udGVudD5cbiAgICAgIDx2ZXJiZW4tdmlzaWJsZS1jb2x1bW4gKGNvbHVtbnNVcGRhdGVkKT1cIm9uQ29sdW1uc1VwZGF0ZWQoJGV2ZW50KVwiIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCIgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiIGJnQ29sb3I9XCJ3aGl0ZVwiIHdpZHRoPVwiNDAwcHhcIiB0ZXh0Q29sb3I9XCJibGFja1wiIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIiBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIiBbY29sdW1uc109XCJ2aXNpYmxlQ29sdW1uc1wiXG4gICAgICAgIFtkaXNwbGF5ZWRDb2x1bW5zXT1cIjVcIj48L3ZlcmJlbi12aXNpYmxlLWNvbHVtbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGZpbHRlci1jb250ZW50PlxuICAgICAgPHZlcmJlbi10YWJsZS1maWx0ZXIgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgICBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCIgYmdDb2xvcj1cIndoaXRlXCIgd2lkdGg9XCI0MjBweFwiIHRleHRDb2xvcj1cImJsYWNrXCIgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCIgW2ZpbHRlck9wdGlvbnNdPVwiZmlsdGVyQXJyYXlcIlxuICAgICAgICBbbWF4RmlsdGVyTGVuZ3RoXT1cIjNcIj48L3ZlcmJlbi10YWJsZS1maWx0ZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzb3J0LWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXNvcnQtdGFibGUgKHNlbGVjdGVkT3B0aW9ucyk9XCJvblNvcnRVcGRhdGVkKCRldmVudClcIiBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIiBiZ0NvbG9yPVwid2hpdGVcIiB3aWR0aD1cIjQwMHB4XCIgdGV4dENvbG9yPVwiYmxhY2tcIiBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCIgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCIgdGVydGlhcnlDb2xvcj1cIiM0MDQwNDBcIiBbZW5hYmxlRHJhZ0FuZERyb3BdPVwidHJ1ZVwiXG4gICAgICAgIFtzb3J0T3B0aW9uc109XCJzb3J0T3B0aW9uc1wiPjwvdmVyYmVuLXNvcnQtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBleHBvcnQtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS1leHBvcnQgW2RhdGFdPVwiZGF0YVwiIChleHBvcnREYXRhRXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIj5cbiAgICAgIDwvbGliLWRhdGEtZXhwb3J0PlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1kYXRhLXZpZXc+XG4gIDxkaXYgKm5nSWY9XCIhdmRjdi5oYXNDdXJyZW50SXRlbSgpICYmIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwXCJcbiAgICBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICA8dmVyYmVuYS1idXR0b24gW2ZvbnRXZWlnaHRdPVwiJ2JvbGQnXCIgW2JnQ29sb3JdPVwiJyM4RThEODcnXCIgW2JvcmRlclJhZGl1c109XCInNHB4J1wiIFt0ZXh0Q29sb3JdPVwiJyNmZmYnXCJcbiAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCI+XG4gICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
1026
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1jb250cm9sL3JvbGUtY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL3JvbGUtY29udHJvbC9yb2xlLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFJTCxjQUFjLEdBR2YsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFReEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUczRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7QUFVckUsTUFBTSxPQUFPLG9CQUFvQjtJQXNEckI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUEzRFYsZ0JBQWdCLEdBQW1DLEVBQUUsQ0FBQztJQUN0RCxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ25CLElB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UzsrQkFDRSxrQkFBa0I7bVJBY1QsWUFBWTtzQkFBOUIsU0FBUzt1QkFBQyxNQUFNO2dCQUNDLFFBQVE7c0JBQXpCLFNBQVM7dUJBQUMsS0FBSztnQkFDUCxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvbGVDb250cm9sU2VydmljZSB9IGZyb20gJy4vcm9sZS1jb250cm9sLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2FyZERhdGEsXG4gIENhcmREYXRhVmlld0NvbXBvbmVudCxcbiAgQ29sdW1uRGVmaW5pdGlvbixcbiAgRGF0YUZpbHRlclR5cGUsXG4gIERhdGFWaWV3Q29tcG9uZW50LFxuICBJRGF0YUZpbHRlcixcbn0gZnJvbSAndmVyYmVuLW5nLXVpJztcbmltcG9ydCB7IFJvbGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvUm9sZSc7XG5pbXBvcnQgeyBiYXNlU3R5bGUgfSBmcm9tICcuL2Jhc2UtdGFibGUtc3R5bGUnO1xuaW1wb3J0IHsgT2JqZWN0U3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvb2JqZWN0LXN0YXRlJztcbmltcG9ydCB7IFJvbGVDb250ZXh0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL1JvbGVDb250ZXh0JztcbmltcG9ydCB7IFVJcyB9IGZyb20gJy4vVUlzJztcbmltcG9ydCB7IFJvbGVBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvUm9sZUFjdGlvbic7XG5pbXBvcnQgeyBVSUFjdGlvbnMgfSBmcm9tICcuL1VJQWN0aW9ucyc7XG5pbXBvcnQgeyBNYXBwZWRSb2xlIH0gZnJvbSAnLi9NYXBwZWRSb2xlJztcbmltcG9ydCB7XG4gIEF1dGhvcml6YXRpb25Db25maWcsXG4gIEF1dGhvcml6YXRpb25TZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRob3JpemF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFwcGVkUm9sZUNvbnRleHQgfSBmcm9tICcuL01hcHBlZFJvbGVDb250ZXh0JztcbmltcG9ydCB7IE1hcHBlZFJvbGVBY3Rpb24gfSBmcm9tICcuL01hcHBlZFJvbGVBY3Rpb24nO1xuaW1wb3J0IHsgQ2hpbGRyZW5UeXBlIH0gZnJvbSAnLi9DaGlsZHJlblR5cGUnO1xuaW1wb3J0IHtcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IEh0dHBXZWJSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAtd2ViLXJlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0Vycm9yUmVzcG9uc2UnO1xuaW1wb3J0IHsgUGFnZWRSZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvUGFnZWRSZXN1bHQnO1xuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlWYWx1ZSB9IGZyb20gJy4uLy4uL21vZGVscy9TZWFyY2hQcm9wZXJ0eVZhbHVlJztcbmltcG9ydCB7IFNlYXJjaE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1NlYXJjaE9wZXJhdG9yJztcbmltcG9ydCB7IFNlYXJjaFByb3BlcnR5U2lnbiB9IGZyb20gJy4uLy4uL21vZGVscy9TZWFyY2hQcm9wZXJ0eVNpZ24nO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW52aXJvbm1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblJvbGVDb250ZXh0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL0FwcGxpY2F0aW9uUm9sZUNvbnRleHQnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Sb2xlQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0FwcGxpY2F0aW9uUm9sZUFjdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1yb2xlLWNvbnRyb2wnLFxuICB0ZW1wbGF0ZVVybDogJy4vcm9sZS1jb250cm9sLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3JvbGUtY29udHJvbC5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgUm9sZUNvbnRyb2xDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB2aXNpYmxlQ29sdW1uRGVmOiBDb2x1bW5EZWZpbml0aW9uPE1hcHBlZFJvbGU+W10gPSBbXTtcbiAgc3R5bGVzID0gYmFzZVN0eWxlO1xuICBkYXRhOiBNYXBwZWRSb2xlW10gPSBbXTtcbiAgY2FyZERhdGE6IENhcmREYXRhW10gPSBbXTtcbiAgY3VycmVudERhdGE6IENhcmREYXRhIHwgbnVsbCA9IG51bGw7XG4gIGN1cnJlbnRFeHBhbmRlZENhcmQ6IENhcmREYXRhIHwgbnVsbCA9IG51bGw7XG4gIGNhcmRDb250ZXh0OiBDYXJkRGF0YSB8IG51bGwgPSBudWxsO1xuICBjYXJkQ29udGV4dEhpc3Rvcnk6IENhcmREYXRhW10gPSBbXTtcbiAgY2FyZENvbnRleHRIaXN0b3J5RGF0YTogQ2FyZERhdGFbXVtdID0gW107XG4gIEBWaWV3Q2hpbGQoJ3ZkY3YnKSBjYXJkRGF0YVZpZXchOiBDYXJkRGF0YVZpZXdDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3ZkdicpIGRhdGFWaWV3ITogRGF0YVZpZXdDb21wb25lbnQ7XG4gIEBJbnB1dCgpIGlzR2xvYmFsOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2VydmljZU5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBhcHBsaWNhdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgcGFnZVN0YXRlOiBQYWdlZFJlc3VsdDxSb2xlPiB8IG51bGwgPSBudWxsO1xuICBzb3VyY2VEYXRhOiBBdXRob3JpemF0aW9uQ29uZmlnW10gPSBbXTtcblxuICB2aXNpYmxlQ29sdW1uczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuXG4gIGZpbHRlckFycmF5OiBJRGF0YUZpbHRlcltdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdDcmVhdGVkQXQnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ1VwZGF0ZWRBdCcsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5EYXRlLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgXTtcblxuICBzb3J0T3B0aW9uczogSURhdGFGaWx0ZXJbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnQ3JlYXRlZEF0JyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdVcGRhdGVkQXQnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gIF07XG5cbiAgLy8gZm9ybTogRm9ybUdyb3VwO1xuICBjaGlsZFBlcm1pc3Npb25SZWY6IENoaWxkcmVuVHlwZSA9IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uO1xuXG4gIHJvbGVDb250ZXh0c1N0b3JlOiBBcHBsaWNhdGlvblJvbGVDb250ZXh0W10gPSBbXTtcbiAgcm9sZUFjdGlvbnNTdG9yZTogQXBwbGljYXRpb25Sb2xlQWN0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJvbGVDb250cm9sU3ZjOiBSb2xlQ29udHJvbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1dGlsU2VydmljZTogVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXJ2ZXI6IEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZVxuICApIHtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5EZWYgPSByb2xlQ29udHJvbFN2Yy5yb2xlQ29sdW1ucztcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gcm9sZUNvbnRyb2xTdmMucm9sZUNvbHVtbnMubWFwKChjb2wpID0+ICh7XG4gICAgICBjaGVja2VkOiB0cnVlLFxuICAgICAgbmFtZTogdHlwZW9mIGNvbC5oZWFkZXIgPT09ICdzdHJpbmcnID8gY29sLmhlYWRlciA6IGNvbC5pZCxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkJvb2wsXG4gICAgfSkpO1xuICAgIC8vIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgIC8vICAgTmFtZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIC8vIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbW9ja0RhdGEgPSB0aGlzLmdldE1vY2tSb2xlcygpO1xuICAgIGNvbnN0IHJvbGVzID0gYXdhaXQgdGhpcy5nZXRBbGxSb2xlcygpO1xuICAgIGlmICh0aGlzLmlzR2xvYmFsKSB7XG4gICAgICBjb25zdCBjb250ZXh0c1JlcyA9IGF3YWl0IHRoaXMuZ2V0U2F2ZWRDb250ZXh0cygpO1xuICAgICAgaWYgKGNvbnRleHRzUmVzKSB7XG4gICAgICAgIHRoaXMucm9sZUNvbnRleHRzU3RvcmUgPSBjb250ZXh0c1JlcztcbiAgICAgICAgdGhpcy5yb2xlQWN0aW9uc1N0b3JlID0gY29udGV4dHNSZXMuZmxhdE1hcCgoeCkgPT4geC5Sb2xlQWN0aW9ucyk7XG4gICAgICAgIGNvbnN0IGF1dGhDb25maWc6IEF1dGhvcml6YXRpb25Db25maWdbXSA9IGNvbnRleHRzUmVzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBOYW1lOiB4Lk5hbWUsXG4gICAgICAgICAgICBBY3Rpb25zOiB4LlJvbGVBY3Rpb25zLm1hcCgoeSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4geS5OYW1lO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc291cmNlRGF0YSA9IGF1dGhDb25maWc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc291cmNlRGF0YSA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkNvbmZpZztcbiAgICB9XG4gICAgaWYgKHJvbGVzKSB7XG4gICAgICB0aGlzLnNldFVwTWFwcGVkRGF0YShyb2xlcyk7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRTYXZlZENvbnRleHRzKCk6IFByb21pc2U8QXBwbGljYXRpb25Sb2xlQ29udGV4dFtdIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLmlzR2xvYmFsIHx8ICF0aGlzLnNlcnZpY2VOYW1lKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgcGF5bG9hZDogU2VhcmNoUHJvcGVydHlWYWx1ZVtdID0gW1xuICAgICAge1xuICAgICAgICBQcm9wZXJ0eU5hbWU6ICdTZXJ2aWNlTmFtZScsXG4gICAgICAgIEVudGl0eVZhbHVlOiB0aGlzLnNlcnZpY2VOYW1lLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBQcm9wZXJ0eU5hbWU6ICdBUElLZXknLFxuICAgICAgICBFbnRpdHlWYWx1ZTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICB9LFxuICAgIF07XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChcbiAgICAgIGBBcHBsaWNhdGlvbi9TZWFyY2hBcHBsaWNhdGlvblJvbGVDb250ZXh0cy8wLzBgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxBcHBsaWNhdGlvblJvbGVDb250ZXh0PikuUmVzdWx0O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgYXN5bmMgZ2V0QWxsUm9sZXMoKTogUHJvbWlzZTxSb2xlW10gfCB1bmRlZmluZWQ+IHtcbiAgICAvLyAgIHZhciBwYXlsb2FkOiBTZWFyY2hQcm9wZXJ0eVZhbHVlW10gPSBbXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICBQcm9wZXJ0eU5hbWU6ICdBUElLZXknLFxuICAgIC8vICAgICAgIEVudGl0eVZhbHVlOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgLy8gICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAvLyAgICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVFcbiAgICAvLyAgICAgfVxuICAgIC8vIF1cbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICBgUm9sZS9HZXRSb2xlc1dpdGhQYXJhbS8ke3RoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleX0vMC8ke3RoaXMucGFnZVNpemV9YFxuICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VTdGF0ZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxSb2xlPjtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PFJvbGU+KS5SZXN1bHQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRNb3JlKCkge1xuICAgIGlmICghdGhpcy5wYWdlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgYFJvbGUvR2V0Um9sZXNXaXRoUGFyYW0vJHt0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXl9LyR7dGhpcy5wYWdlU3RhdGUuU2tpcH0vJHt0aGlzLnBhZ2VTaXplfWBcbiAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VTdGF0ZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxSb2xlPjtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PFJvbGU+KS5SZXN1bHQ7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5zZXRVcE1hcHBlZERhdGFFeHRyYShyZXN1bHQpO1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChkYXRhKTtcbiAgICAgIHRoaXMuc2V0VXBDYXJkRGF0YUV4dHJhKGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5yb2xlQ29udGV4dHNTdG9yZS5maW5kKCh4KSA9PiB4Lk5hbWUgPT0gbmFtZSk7XG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLkNvZGUgOiAnJztcbiAgfVxuICBnZXRBcHBsaWNhdGlvbkFjdGlvbkNvZGUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5yb2xlQWN0aW9uc1N0b3JlLmZpbmQoKHgpID0+IHguTmFtZSA9PSBuYW1lKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0uQ29kZSA6ICcnO1xuICB9XG5cbiAgZmluZFBhcmVudChjYXJkRGF0YTogQ2FyZERhdGFbXSwgdGFyZ2V0OiBDYXJkRGF0YSk6IENhcmREYXRhIHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNhcmREYXRhKSB7XG4gICAgICBpZiAoaXRlbS5jaGlsZHJlbi5pbmNsdWRlcyh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVybiBpdGVtOyAvLyBJbW1lZGlhdGUgcGFyZW50IGZvdW5kXG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnQoaXRlbS5jaGlsZHJlbiwgdGFyZ2V0KTtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7IC8vIE5vdCBmb3VuZFxuICB9XG5cbiAgaXNDaGVja2JveERpc2FibGVkKGl0ZW06IENhcmREYXRhKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFyZW50ID1cbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5maW5kUGFyZW50KHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YVswXSwgaXRlbSlcbiAgICAgICAgOiB0aGlzLmZpbmRQYXJlbnQodGhpcy5jYXJkRGF0YSwgaXRlbSk7XG4gICAgaWYgKFxuICAgICAgcGFyZW50ICYmXG4gICAgICBwYXJlbnQuZGF0YS5DaGlsZHJlblR5cGUgJiZcbiAgICAgIHBhcmVudC5kYXRhLkNoaWxkcmVuVHlwZSA9PSBDaGlsZHJlblR5cGUuQWN0aW9uICYmXG4gICAgICBwYXJlbnQuZGF0YS5TZWxlY3RlZCA9PSBmYWxzZVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNldFVwTWFwcGVkRGF0YShkYXRhOiBSb2xlW10pIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ueCxcbiAgICAgICAgaWQ6IHguSWQsXG4gICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLlBlcm1pc3Npb24sXG4gICAgICAgIFJvbGVDb250ZXh0czogdGhpcy5zb3VyY2VEYXRhLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdJZCA9IHguUm9sZUNvbnRleHRzLmZpbmRJbmRleChcbiAgICAgICAgICAgICh5KSA9PiB5Lk5hbWUgPT0gY29uZmlnLk5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHZhciBjb250ZXh0OiBNYXBwZWRSb2xlQ29udGV4dCA9IHtcbiAgICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLkFjdGlvbixcbiAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0lkID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICBSb2xlQWN0aW9uczogY29uZmlnLkFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdBY3Rpb24gPVxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGMpID0+IGMuTmFtZSA9PSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgICB2YXIgYWN0OiBNYXBwZWRSb2xlQWN0aW9uID0ge1xuICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0FjdGlvbiA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICBSb2xlOiB4LkNvZGUsXG4gICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dLmlkXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgSWQ6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dLklkXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgICBUZW5hbnRJZDogeC5UZW5hbnRJZCxcbiAgICAgICAgICAgICAgICBDb2RlOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5BUElLZXlcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQWN0aW9uOiB0aGlzLmdldEFwcGxpY2F0aW9uQWN0aW9uQ29kZShhY3Rpb24pLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZXR1cm4gYWN0O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBOYW1lOiBjb25maWcuTmFtZSxcbiAgICAgICAgICAgIFJvbGU6IHguQ29kZSxcbiAgICAgICAgICAgIGlkOiBleGlzdGluZ0lkID4gLTEgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5pZCA6ICcnLFxuICAgICAgICAgICAgSWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLklkIDogJycsXG4gICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgIFRlbmFudElkOiB4LlRlbmFudElkLFxuICAgICAgICAgICAgQ29kZTogZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQ29kZSA6ICcnLFxuICAgICAgICAgICAgU2VydmljZU5hbWU6XG4gICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlNlcnZpY2VOYW1lIDogJycsXG4gICAgICAgICAgICBBUElLZXk6XG4gICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQVBJS2V5XG4gICAgICAgICAgICAgICAgOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoY29uZmlnLk5hbWUpLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHNldFVwTWFwcGVkRGF0YUV4dHJhKGRhdGE6IFJvbGVbXSk6IE1hcHBlZFJvbGVbXSB7XG4gICAgcmV0dXJuIGRhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi54LFxuICAgICAgICBpZDogeC5JZCxcbiAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuUGVybWlzc2lvbixcbiAgICAgICAgUm9sZUNvbnRleHRzOiB0aGlzLnNvdXJjZURhdGEubWFwKChjb25maWcpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkID0geC5Sb2xlQ29udGV4dHMuZmluZEluZGV4KFxuICAgICAgICAgICAgKHkpID0+IHkuTmFtZSA9PSBjb25maWcuTmFtZVxuICAgICAgICAgICk7XG4gICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuQWN0aW9uLFxuICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgIFJvbGVBY3Rpb25zOiBjb25maWcuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0FjdGlvbiA9XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAoYykgPT4gYy5OYW1lID09IGFjdGlvblxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IC0xO1xuXG4gICAgICAgICAgICAgIHZhciBhY3Q6IE1hcHBlZFJvbGVBY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nQWN0aW9uID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgTmFtZTogYWN0aW9uLFxuICAgICAgICAgICAgICAgIFJvbGU6IHguQ29kZSxcbiAgICAgICAgICAgICAgICBDb250ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICBpZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl0uaWRcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl0uSWRcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgIFRlbmFudElkOiB4LlRlbmFudElkLFxuICAgICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dXG4gICAgICAgICAgICAgICAgICAgICAgICAuQ29kZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246IHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJldHVybiBhY3Q7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgUm9sZTogeC5Db2RlLFxuICAgICAgICAgICAgaWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLmlkIDogJycsXG4gICAgICAgICAgICBJZDogZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uSWQgOiAnJyxcbiAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgVGVuYW50SWQ6IHguVGVuYW50SWQsXG4gICAgICAgICAgICBDb2RlOiBleGlzdGluZ0lkID4gLTEgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uU2VydmljZU5hbWUgOiAnJyxcbiAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5BUElLZXlcbiAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUNvbnRleHQ6IHRoaXMuZ2V0QXBwbGljYXRpb25Db250ZXh0Q29kZShjb25maWcuTmFtZSksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzZXRVcENhcmREYXRhKCkge1xuICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YVtdID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICB0aXRsZTogeC5OYW1lLFxuICAgICAgICBkYXRhOiB4LFxuICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgY2hpbGRyZW46IHguUm9sZUNvbnRleHRzLm1hcCgoYykgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGMuTmFtZSksXG4gICAgICAgICAgICBkYXRhOiBjLFxuICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICBjaGlsZHJlbjogYy5Sb2xlQWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShhLk5hbWUpLFxuICAgICAgICAgICAgICAgIGRhdGE6IGEsXG4gICAgICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2FyZERhdGEgPSBjYXJkRGF0YTtcbiAgfVxuICBzZXRVcENhcmREYXRhRXh0cmEoYmFzZURhdGE6IE1hcHBlZFJvbGVbXSkge1xuICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YVtdID0gYmFzZURhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHRpdGxlOiB4Lk5hbWUsXG4gICAgICAgIGRhdGE6IHgsXG4gICAgICAgIGJvZHk6IFtdLFxuICAgICAgICBjaGlsZHJlbjogeC5Sb2xlQ29udGV4dHMubWFwKChjKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYy5OYW1lKSxcbiAgICAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjLlJvbGVBY3Rpb25zLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGEuTmFtZSksXG4gICAgICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jYXJkRGF0YSA9IHRoaXMuY2FyZERhdGEuY29uY2F0KGNhcmREYXRhKTtcbiAgfVxuXG4gIGdldEZvcm1hdHRlZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBTcGxpdCB0aGUga2V5IG9uIGNhcGl0YWwgbGV0dGVycywgaGFuZGxpbmcgXCJBbmRcIiBhcyBsb3dlcmNhc2VcbiAgICBjb25zdCB3b3JkcyA9IG5hbWVcbiAgICAgIC5zcGxpdCgvKD89W0EtWl0pLylcbiAgICAgIC5tYXAoKHdvcmQpID0+ICh3b3JkID09PSAnQW5kJyA/ICdhbmQnIDogd29yZCkpO1xuICAgIC8vIEpvaW4gdGhlIHdvcmRzIHdpdGggc3BhY2VzXG4gICAgcmV0dXJuIHdvcmRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZpZXdEZXRhaWxzRnJvbVRhYmxlKGRhdGE6IE1hcHBlZFJvbGUpIHtcbiAgICBjb25zdCBjYXJkRGF0YSA9IHRoaXMuY2FyZERhdGEuZmluZCgoeCkgPT4geC5kYXRhID09IGRhdGEpO1xuICAgIGlmIChjYXJkRGF0YSkge1xuICAgICAgdGhpcy52aWV3RGV0YWlscyhjYXJkRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgdmlld0RldGFpbHMoY29udGV4dDogQ2FyZERhdGEpIHtcbiAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5wdXNoKGNvbnRleHQpO1xuICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5wdXNoKHRoaXMuY2FyZERhdGEpO1xuICAgIHRoaXMuY2FyZERhdGEgPSBjb250ZXh0LmNoaWxkcmVuO1xuICAgIHRoaXMuY2FyZERhdGFWaWV3LmNsZWFyRGF0YSgpO1xuICB9XG4gIHZpZXdEZXRhaWxzQ2hpbGQoY29udGV4dDogQ2FyZERhdGEpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkKSB7XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5wdXNoKHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZCk7XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5wdXNoKGNvbnRleHQpO1xuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLnB1c2godGhpcy5jYXJkRGF0YSk7XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGEucHVzaCh0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmQuY2hpbGRyZW4pO1xuICAgICAgdGhpcy5jYXJkRGF0YSA9IGNvbnRleHQuY2hpbGRyZW47XG4gICAgICB0aGlzLmNhcmREYXRhVmlldy5jbGVhckRhdGEoKTtcbiAgICB9XG4gIH1cblxuICByb2xlQ2FyZENsaWNrZWQoaXRlbTogQ2FyZERhdGEpIHtcbiAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2soaXRlbSk7XG4gICAgLy8gaWYgKHRoaXMuY3VycmVudERhdGEpIHtcbiAgICAvLyAgIHRoaXMuZm9ybS5jb250cm9sc1snTmFtZSddLnNldFZhbHVlKHRoaXMuY3VycmVudERhdGEuZGF0YT8uTmFtZSk7XG4gICAgLy8gfVxuICB9XG5cbiAgdG9nZ2xlQ2hpbGRyZW4oaXRlbTogQ2FyZERhdGEpIHtcbiAgICB2YXIgY3VyclRvZ2dsZVN0YXRlID0gaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQ7XG4gICAgdGhpcy5jYXJkRGF0YS5mb3JFYWNoKChfKSA9PiB7XG4gICAgICBfLmlzQ2hpbGRyZW5FeHBhbmRlZCA9IGZhbHNlO1xuICAgIH0pO1xuICAgIGl0ZW0uaXNDaGlsZHJlbkV4cGFuZGVkID0gIWN1cnJUb2dnbGVTdGF0ZTtcbiAgICBpZiAoaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZCA9IGl0ZW07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VEZXRhaWxzKCkge1xuICAgIHRoaXMuY2FyZERhdGEgPVxuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhW3RoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5sZW5ndGggLSAxXTtcbiAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGEucG9wKCk7XG4gICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkucG9wKCk7XG4gICAgLy8gdGhpcy5kYXRhVmlldy5pc1RhYmxlVmlldyA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0Q2FyZFN1YkNhcHRpb24oaXRlbTogQ2FyZERhdGEpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGl0ZW0uY2hpbGRyZW4uZmlsdGVyKCh4KSA9PiB4LmRhdGEuU2VsZWN0ZWQpLmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbCA9IGl0ZW0uY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHJldHVybiBgJHtzZWxlY3RlZH0gb2YgJHt0b3RhbH0gJHtcbiAgICAgIHRvdGFsID4gMSA/IGl0ZW0uZGF0YS5DaGlsZHJlblR5cGUgKyAncycgOiBpdGVtLmRhdGEuQ2hpbGRyZW5UeXBlXG4gICAgfWA7XG4gIH1cblxuICBnZXRVcGRhdGVkUm9sZShyb2xlOiBNYXBwZWRSb2xlKTogUm9sZSB7XG4gICAgY29uc3QgbmV3Um9sZSA9IHJvbGU7XG4gICAgbmV3Um9sZS5Sb2xlQ29udGV4dHMgPSByb2xlLlJvbGVDb250ZXh0cy5maWx0ZXIoKHgpID0+IHguU2VsZWN0ZWQpLm1hcChcbiAgICAgICh5KSA9PiB7XG4gICAgICAgIHkuUm9sZUFjdGlvbnMgPSB5LlJvbGVBY3Rpb25zLmZpbHRlcigoeikgPT4gei5TZWxlY3RlZCk7XG4gICAgICAgIHJldHVybiB5O1xuICAgICAgfVxuICAgICk7XG4gICAgbmV3Um9sZS5EYXRhU3RhdGUgPVxuICAgICAgbmV3Um9sZS5EYXRhU3RhdGUgPT0gT2JqZWN0U3RhdGUuTmV3XG4gICAgICAgID8gT2JqZWN0U3RhdGUuTmV3XG4gICAgICAgIDogT2JqZWN0U3RhdGUuQ2hhbmdlZDtcbiAgICBuZXdSb2xlLklkID0gbmV3Um9sZS5EYXRhU3RhdGUgPT0gT2JqZWN0U3RhdGUuTmV3ID8gJycgOiBuZXdSb2xlLklkO1xuICAgIHJldHVybiBuZXdSb2xlIGFzIFJvbGU7XG4gIH1cbiAgYXN5bmMgc2F2ZVJvbGUoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudERhdGEpIHtcbiAgICAgIHZhciByb2xlOiBNYXBwZWRSb2xlID0gdGhpcy5jdXJyZW50RGF0YS5kYXRhIGFzIE1hcHBlZFJvbGU7XG4gICAgICAvLyByb2xlLk5hbWUgPSB0aGlzLmZvcm0uY29udHJvbHNbJ05hbWUnXS52YWx1ZTtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnREYXRhLmRhdGEuTmFtZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93SW5mbygnUm9sZSBuYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtYXBwZWRSb2xlID0gdGhpcy5nZXRVcGRhdGVkUm9sZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJvbGUpKSk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoYFJvbGUvU2F2ZVJvbGVzYCwgW21hcHBlZFJvbGVdKTtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgUm9sZVtdO1xuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgcm9sZVJlc3VsdCA9IHJlc3VsdFswXTtcbiAgICAgICAgICB2YXIgbWFwcGVkUm9sZVNhdmU6IE1hcHBlZFJvbGUgPSB7XG4gICAgICAgICAgICAuLi5yb2xlUmVzdWx0LFxuICAgICAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuUGVybWlzc2lvbixcbiAgICAgICAgICAgIFJvbGVDb250ZXh0czogdGhpcy5zb3VyY2VEYXRhLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWQgPSByb2xlUmVzdWx0LlJvbGVDb250ZXh0cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgKHkpID0+IHkuTmFtZSA9PSBjb25maWcuTmFtZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB2YXIgY29udGV4dDogTWFwcGVkUm9sZUNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuQWN0aW9uLFxuICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0lkID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgUm9sZUFjdGlvbnM6IGNvbmZpZy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0FjdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWRcbiAgICAgICAgICAgICAgICAgICAgICAgIF0uUm9sZUFjdGlvbnMuZmluZEluZGV4KChjKSA9PiBjLk5hbWUgPT0gYWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgICAgICAgIHZhciBhY3Q6IE1hcHBlZFJvbGVBY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0FjdGlvbiA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBOYW1lOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIFJvbGU6IHJvbGVSZXN1bHQuQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgICAgIGlkOlxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLklkXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgICAgICAgICAgIFRlbmFudElkOiByb2xlUmVzdWx0LlRlbmFudElkLFxuICAgICAgICAgICAgICAgICAgICBDb2RlOlxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS5Db2RlXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0uU2VydmljZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0uQVBJS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQWN0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBOYW1lOiBjb25maWcuTmFtZSxcbiAgICAgICAgICAgICAgICBSb2xlOiByb2xlUmVzdWx0LkNvZGUsXG4gICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5pZCA6ICcnLFxuICAgICAgICAgICAgICAgIElkOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uSWQgOiAnJyxcbiAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgIFRlbmFudElkOiByb2xlUmVzdWx0LlRlbmFudElkLFxuICAgICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgU2VydmljZU5hbWU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoXG4gICAgICAgICAgICAgICAgICBjb25maWcuTmFtZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleChcbiAgICAgICAgICAgICh4KSA9PiB4ID09IHRoaXMuY3VycmVudERhdGE/LmRhdGFcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpdGVtSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uQ29kZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5JZCA9IG1hcHBlZFJvbGVTYXZlLklkO1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uRGF0YVN0YXRlID0gbWFwcGVkUm9sZVNhdmUuRGF0YVN0YXRlO1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uVGVuYW50SWQgPSBtYXBwZWRSb2xlU2F2ZS5UZW5hbnRJZDtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlNlcnZpY2VOYW1lID0gbWFwcGVkUm9sZVNhdmUuU2VydmljZU5hbWU7XG4gICAgICAgICAgICBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHMuZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Db2RlID0geC5Db2RlO1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uU2VydmljZU5hbWUgPSB4LlNlcnZpY2VOYW1lO1xuICAgICAgICAgICAgICB4LlJvbGVBY3Rpb25zLmZvckVhY2goKHksIGopID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZUFjdGlvbnNbal0uUm9sZSA9XG4gICAgICAgICAgICAgICAgICBtYXBwZWRSb2xlU2F2ZS5Db2RlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tqXS5Db2RlID1cbiAgICAgICAgICAgICAgICAgIHkuQ29kZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICBqXG4gICAgICAgICAgICAgICAgXS5TZXJ2aWNlTmFtZSA9IHkuU2VydmljZU5hbWU7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB4KTtcbiAgICAgICAgICAgIC8vIHRoaXMuY3VycmVudERhdGEgPSB7XG4gICAgICAgICAgICAvLyAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgLy8gICB0aXRsZTogbWFwcGVkUm9sZVNhdmUuTmFtZSxcbiAgICAgICAgICAgIC8vICAgZGF0YTogbWFwcGVkUm9sZVNhdmUsXG4gICAgICAgICAgICAvLyAgIGlzQ2hpbGRyZW5FeHBhbmRlZDogdGhpcy5jdXJyZW50RGF0YS5pc0NoaWxkcmVuRXhwYW5kZWQsXG4gICAgICAgICAgICAvLyAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgLy8gICBjaGlsZHJlbjogbWFwcGVkUm9sZVNhdmUuUm9sZUNvbnRleHRzLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiB7XG4gICAgICAgICAgICAvLyAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAvLyAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGMuTmFtZSksXG4gICAgICAgICAgICAvLyAgICAgICBkYXRhOiBjLFxuICAgICAgICAgICAgLy8gICAgICAgYm9keTogW10sXG4gICAgICAgICAgICAvLyAgICAgICBjaGlsZHJlbjogYy5Sb2xlQWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShhLk5hbWUpLFxuICAgICAgICAgICAgLy8gICAgICAgICAgIGRhdGE6IGEsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICAvLyAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgLy8gICAgICAgICB9O1xuICAgICAgICAgICAgLy8gICAgICAgfSksXG4gICAgICAgICAgICAvLyAgICAgfTtcbiAgICAgICAgICAgIC8vICAgfSksXG4gICAgICAgICAgICAvLyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVSb2xlRHluYW1pYyhpdGVtOiBDYXJkRGF0YSkge1xuICAgIGlmICh0aGlzLmlzQ2hlY2tib3hEaXNhYmxlZChpdGVtKSkge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93SW5mbygnUGFyZW50IFVJIG5vdCBzZWxlY3RlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByb2xlOiBDYXJkRGF0YSB8IG51bGwgPVxuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5WzBdXG4gICAgICAgIDogdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkXG4gICAgICAgID8gdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgY2FyZERhdGFSZWY6IENhcmREYXRhW10gfCBudWxsID1cbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhWzBdXG4gICAgICAgIDogdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkXG4gICAgICAgID8gdGhpcy5jYXJkRGF0YVxuICAgICAgICA6IG51bGw7XG4gICAgLy8gY29uc3QgaXNFeHBhbmRlZENhcmQ6IGJvb2xlYW4gPVxuICAgIC8vICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID4gMFxuICAgIC8vICAgICA/IGZhbHNlXG4gICAgLy8gICAgIDogdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkXG4gICAgLy8gICAgID8gdHJ1ZVxuICAgIC8vICAgICA6IGZhbHNlO1xuICAgIGlmICghcm9sZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocm9sZS5kYXRhLk5hbWUudHJpbSgpLmxlbmd0aCA9PSAwKSB7XG4gICAgICBpdGVtLmRhdGEuU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oJ1JvbGUgbmFtZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbS5kYXRhLlNlbGVjdGVkID0gIWl0ZW0uZGF0YS5TZWxlY3RlZDtcbiAgICBjb25zdCBtYXBwZWRSb2xlID0gdGhpcy5nZXRVcGRhdGVkUm9sZShcbiAgICAgIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocm9sZS5kYXRhKSlcbiAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoYFJvbGUvU2F2ZVJvbGVzYCwgW21hcHBlZFJvbGVdKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIGl0ZW0uZGF0YS5TZWxlY3RlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgUm9sZVtdO1xuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciByb2xlUmVzdWx0ID0gcmVzdWx0WzBdO1xuICAgICAgICB2YXIgbWFwcGVkUm9sZVNhdmU6IE1hcHBlZFJvbGUgPSB7XG4gICAgICAgICAgLi4ucm9sZVJlc3VsdCxcbiAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uLFxuICAgICAgICAgIFJvbGVDb250ZXh0czogdGhpcy5zb3VyY2VEYXRhLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkID0gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAoeSkgPT4geS5OYW1lID09IGNvbmZpZy5OYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0lkID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgIFJvbGVBY3Rpb25zOiBjb25maWcuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAgIChjKSA9PiBjLk5hbWUgPT0gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IC0xO1xuICAgICAgICAgICAgICAgIHZhciBhY3Q6IE1hcHBlZFJvbGVBY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICBTZWxlY3RlZDogZXhpc3RpbmdBY3Rpb24gPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIFJvbGU6IHJvbGVSZXN1bHQuQ29kZSxcbiAgICAgICAgICAgICAgICAgIENvbnRleHQ6ICcnLFxuICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgXS5pZFxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLklkXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICBDb2RlOlxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIF0uQ29kZVxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQWN0aW9uOiB0aGlzLmdldEFwcGxpY2F0aW9uQWN0aW9uQ29kZShhY3Rpb24pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdDtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgICBSb2xlOiByb2xlUmVzdWx0LkNvZGUsXG4gICAgICAgICAgICAgIGlkOiBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5pZCA6ICcnLFxuICAgICAgICAgICAgICBJZDogZXhpc3RpbmdJZCA+IC0xID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uSWQgOiAnJyxcbiAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICBUZW5hbnRJZDogcm9sZVJlc3VsdC5UZW5hbnRJZCxcbiAgICAgICAgICAgICAgQ29kZTpcbiAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5BUElLZXlcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoXG4gICAgICAgICAgICAgICAgY29uZmlnLk5hbWVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gY2FyZERhdGFSZWZcbiAgICAgICAgICA/IGNhcmREYXRhUmVmLmZpbmRJbmRleCgoeCkgPT4geC5kYXRhID09IHJvbGU/LmRhdGEpXG4gICAgICAgICAgOiAtMTtcbiAgICAgICAgaWYgKGl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uQ29kZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uSWQgPSBtYXBwZWRSb2xlU2F2ZS5JZDtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5EYXRhU3RhdGUgPSBtYXBwZWRSb2xlU2F2ZS5EYXRhU3RhdGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uVGVuYW50SWQgPSBtYXBwZWRSb2xlU2F2ZS5UZW5hbnRJZDtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5TZXJ2aWNlTmFtZSA9IG1hcHBlZFJvbGVTYXZlLlNlcnZpY2VOYW1lO1xuICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLlJvbGVDb250ZXh0cy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uQ29kZSA9IHguQ29kZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5TZXJ2aWNlTmFtZSA9IHguU2VydmljZU5hbWU7XG4gICAgICAgICAgICB4LlJvbGVBY3Rpb25zLmZvckVhY2goKHksIGopID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGVBY3Rpb25zW2pdLlJvbGUgPVxuICAgICAgICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tqXS5Db2RlID0geS5Db2RlO1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZUFjdGlvbnNbal0uU2VydmljZU5hbWUgPVxuICAgICAgICAgICAgICAgIHkuU2VydmljZU5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHMgPSBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHM7XG5cbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB4KTtcbiAgICAgICAgICAvLyBpZiAoY2FyZERhdGFSZWYpIHtcbiAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgICAvLyAgICAgWERhdGFJc0hlcmU6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2FyZERhdGFSZWYpKSxcbiAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vICAgY2FyZERhdGFSZWZbaXRlbUluZGV4XSA9IHtcbiAgICAgICAgICAvLyAgICAgc2VsZWN0ZWQ6IGNhcmREYXRhUmVmW2l0ZW1JbmRleF0uc2VsZWN0ZWQsXG4gICAgICAgICAgLy8gICAgIGlzQ2hpbGRyZW5FeHBhbmRlZDogY2FyZERhdGFSZWZbaXRlbUluZGV4XS5pc0NoaWxkcmVuRXhwYW5kZWQsXG4gICAgICAgICAgLy8gICAgIHRpdGxlOiBtYXBwZWRSb2xlU2F2ZS5OYW1lLFxuICAgICAgICAgIC8vICAgICBkYXRhOiBtYXBwZWRSb2xlU2F2ZSxcbiAgICAgICAgICAvLyAgICAgYm9keTogW10sXG4gICAgICAgICAgLy8gICAgIGNoaWxkcmVuOiBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHMubWFwKChjKSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAvLyAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAvLyAgICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYy5OYW1lKSxcbiAgICAgICAgICAvLyAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgLy8gICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAvLyAgICAgICAgIGNoaWxkcmVuOiBjLlJvbGVBY3Rpb25zLm1hcCgoYSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGEuTmFtZSksXG4gICAgICAgICAgLy8gICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgLy8gICAgICAgICAgIH07XG4gICAgICAgICAgLy8gICAgICAgICB9KSxcbiAgICAgICAgICAvLyAgICAgICB9O1xuICAgICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgICAvLyAgIH07XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2F2ZURhdGFBbGwoKSB7XG4gICAgY29uc3Qgcm9sZXM6IFJvbGVbXSA9IHRoaXMuZGF0YS5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLngsXG4gICAgICAgIFJvbGVDb250ZXh0czogeC5Sb2xlQ29udGV4dHMuZmlsdGVyKCh5KSA9PiB5LlNlbGVjdGVkKS5tYXAoKHopID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ueixcbiAgICAgICAgICAgIFJvbGVBY3Rpb25zOiB6LlJvbGVBY3Rpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgKGEpID0+IGEuU2VsZWN0ZWRcbiAgICAgICAgICAgICkgYXMgUm9sZUFjdGlvbltdLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pIGFzIFJvbGVDb250ZXh0W10sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlVGFibGUoKSB7XG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4geCk7XG4gIH1cblxuICBvblZpZXdDaGFuZ2UoaXNHcmlkVmlldzogYm9vbGVhbik6IHZvaWQge31cbiAgb25TdGF0ZUNoYW5nZShldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICB2YXIgbmV3TWFwcGVkUm9sZTogTWFwcGVkUm9sZSA9IHtcbiAgICAgICAgICBSb2xlQ29udGV4dHM6IHRoaXMuc291cmNlRGF0YS5tYXAoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICAgIFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgUm9sZUFjdGlvbnM6IGNvbmZpZy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGFjdDogTWFwcGVkUm9sZUFjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIFJvbGU6ICcnLFxuICAgICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgICAgICBJZDogJycsXG4gICAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgQVBJS2V5OiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246IHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgTmFtZTogY29uZmlnLk5hbWUsXG4gICAgICAgICAgICAgIFJvbGU6ICcnLFxuICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgIElkOiAnJyxcbiAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgICAgIEFQSUtleTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoXG4gICAgICAgICAgICAgICAgY29uZmlnLk5hbWVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLlBlcm1pc3Npb24sXG4gICAgICAgICAgTmFtZTogJycsXG4gICAgICAgICAgaWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgSWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgQ29kZTogJycsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgIEFwcGxpY2F0aW9uOiB0aGlzLmFwcGxpY2F0aW9uID8gdGhpcy5hcHBsaWNhdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBBUElLZXk6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhID0ge1xuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB0aXRsZTogbmV3TWFwcGVkUm9sZS5OYW1lLFxuICAgICAgICAgIGRhdGE6IG5ld01hcHBlZFJvbGUsXG4gICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgY2hpbGRyZW46IG5ld01hcHBlZFJvbGUuUm9sZUNvbnRleHRzLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGMuTmFtZSksXG4gICAgICAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogYy5Sb2xlQWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShhLk5hbWUpLFxuICAgICAgICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChbbmV3TWFwcGVkUm9sZV0pO1xuICAgICAgICB0aGlzLmNhcmREYXRhLnB1c2goY2FyZERhdGEpO1xuICAgICAgICB0aGlzLnJvbGVDYXJkQ2xpY2tlZChjYXJkRGF0YSk7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuaXNUYWJsZVZpZXcgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzaG93VGFibGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkUm93czogUm9sZVtdKSB7fVxuICByZXRyeU1lc3NhZ2UoKSB7fVxuICBvbkNvbHVtbnNVcGRhdGVkKHVwZGF0ZWRDb2x1bW5zOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgY29uc3QgdXBkYXRlZENvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbjxNYXBwZWRSb2xlPltdID0gW107XG4gICAgdXBkYXRlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ0NvbCA9IHRoaXMucm9sZUNvbnRyb2xTdmMucm9sZUNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmhlYWRlciA9PT0gY29sLm5hbWUgfHwgY29sdW1uLmlkID09PSBjb2wubmFtZVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGluZ0NvbCkge1xuICAgICAgICB1cGRhdGVkQ29sdW1uRGVmLnB1c2gobWF0Y2hpbmdDb2wpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy52aXNpYmxlQ29sdW1uRGVmID0gWy4uLnVwZGF0ZWRDb2x1bW5EZWZdO1xuICB9XG4gIG9uU29ydFVwZGF0ZWQodXBkYXRlZFNvcnRzOiBJRGF0YUZpbHRlcltdKSB7fVxuICBoYW5kbGVFeHBvcnQoZXhwb3J0ZWREYXRhOiBQYXJ0aWFsPGFueT5bXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdFeHBvcnRlZCBkYXRhOicsIGV4cG9ydGVkRGF0YSk7XG4gICAgdGhpcy5kb3dubG9hZENTVihleHBvcnRlZERhdGEpO1xuICB9XG4gIHByaXZhdGUgZG93bmxvYWRDU1YoZGF0YTogUGFydGlhbDxhbnk+W10pIHtcbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmtleXMoZGF0YVswXSk7XG4gICAgY29uc3QgY3N2Q29udGVudCA9IFtcbiAgICAgIGhlYWRlcnMuam9pbignLCcpLFxuICAgICAgLi4uZGF0YS5tYXAoKHJvdykgPT4gaGVhZGVycy5tYXAoKGhlYWRlcikgPT4gcm93W2hlYWRlcl0pLmpvaW4oJywnKSksXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGlmIChsaW5rLmRvd25sb2FkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCAnZXhwb3J0LmNzdicpO1xuICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5jbGljaygpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICB9XG4gIH1cblxuICBnZXRNb2NrUm9sZXMoKTogUm9sZVtdIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KDEwKS5maWxsKDEpLm1hcCgoaWQsIGkpID0+ICh7XG4gICAgICBJZDogaWQgKyBpLFxuICAgICAgaWQ6IChpZCArIGkpLnRvU3RyaW5nKCksXG4gICAgICBOYW1lOiB0aGlzLm1vY2tOYW1lc1tpXSB8fCAnJyxcbiAgICAgIFJvbGVDb250ZXh0czogdGhpcy5yYW5kb21Db250ZXh0cygpLFxuICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICBUZW5hbnRJZDogYFRlbmFudCR7aWQgKyBpfWAsXG4gICAgICBDb2RlOiAnJyxcbiAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgIEFQSUtleTogJycsXG4gICAgfSkpO1xuICB9XG5cbiAgbW9ja05hbWVzOiBzdHJpbmdbXSA9IFtcbiAgICAnQWRtaW4nLFxuICAgICdTdXBlciBBZG1pbicsXG4gICAgJ01hbmFnZXInLFxuICAgICdJbnRlcm4nLFxuICAgICdQcm9kdWN0aW9uIE1hbmFnZXInLFxuICAgICdDRU8nLFxuICAgICdDVE8nLFxuICAgICdDT08nLFxuICAgICdEZXZlbG9wZXInLFxuICAgICdFbmdpbmVlcicsXG4gIF07XG5cbiAgcmFuZG9tTmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5tb2NrTmFtZXMubGVuZ3RoKTtcbiAgICByZXR1cm4gdGhpcy5tb2NrTmFtZXNbcmFuZG9tSW5kZXhdO1xuICB9XG5cbiAgcmFuZG9tQ29udGV4dHMoKTogUm9sZUNvbnRleHRbXSB7XG4gICAgY29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5mbG9vcihcbiAgICAgIE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSXMpLmxlbmd0aCArIDFcbiAgICApO1xuICAgIHZhciByZXR1cm5BcnJheTogUm9sZUNvbnRleHRbXSA9IFtdO1xuICAgIGNvbnN0IHVzZWRMaXN0OiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZG9tTnVtYmVyOyBpKyspIHtcbiAgICAgIGxldCByYW5kb21JbmRleDtcbiAgICAgIGRvIHtcbiAgICAgICAgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSXMpLmxlbmd0aCk7XG4gICAgICB9IHdoaWxlICh1c2VkTGlzdC5pbmNsdWRlcyhyYW5kb21JbmRleCkpO1xuXG4gICAgICByZXR1cm5BcnJheS5wdXNoKHtcbiAgICAgICAgSWQ6ICdjb250ZXh0JyArIGksXG4gICAgICAgIGlkOiAoJ2NvbnRleHQnICsgaSkudG9TdHJpbmcoKSxcbiAgICAgICAgTmFtZTogT2JqZWN0LmtleXMoVUlzKVtyYW5kb21JbmRleF0sXG4gICAgICAgIFJvbGU6ICcnLFxuICAgICAgICBSb2xlQWN0aW9uczogdGhpcy5yYW5kb21BY3Rpb25zKCksXG4gICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgVGVuYW50SWQ6IGBUZW5hbnQkeydjb250ZXh0JyArIGl9YCxcbiAgICAgICAgQ29kZTogJycsXG4gICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgQVBJS2V5OiAnJyxcbiAgICAgICAgQXBwbGljYXRpb25Sb2xlQ29udGV4dDogJycsXG4gICAgICB9KTtcbiAgICAgIHVzZWRMaXN0LnB1c2gocmFuZG9tSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuQXJyYXk7XG4gIH1cblxuICByYW5kb21BY3Rpb25zKCk6IFJvbGVBY3Rpb25bXSB7XG4gICAgY29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5mbG9vcihcbiAgICAgIE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSUFjdGlvbnMpLmxlbmd0aCArIDFcbiAgICApO1xuICAgIHZhciByZXR1cm5BcnJheTogUm9sZUFjdGlvbltdID0gW107XG4gICAgY29uc3QgdXNlZExpc3Q6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5kb21OdW1iZXI7IGkrKykge1xuICAgICAgbGV0IHJhbmRvbUluZGV4O1xuICAgICAgZG8ge1xuICAgICAgICByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE9iamVjdC5rZXlzKFVJQWN0aW9ucykubGVuZ3RoKTtcbiAgICAgIH0gd2hpbGUgKHVzZWRMaXN0LmluY2x1ZGVzKHJhbmRvbUluZGV4KSk7XG5cbiAgICAgIHJldHVybkFycmF5LnB1c2goe1xuICAgICAgICBJZDogJ2FjdGlvbicgKyBpLFxuICAgICAgICBpZDogKCdhY3Rpb24nICsgaSkudG9TdHJpbmcoKSxcbiAgICAgICAgTmFtZTogT2JqZWN0LmtleXMoVUlBY3Rpb25zKVtyYW5kb21JbmRleF0sXG4gICAgICAgIFJvbGU6ICcnLFxuICAgICAgICBDb250ZXh0OiAnJyxcbiAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICBUZW5hbnRJZDogYFRlbmFudCR7J2FjdGlvbicgKyBpfWAsXG4gICAgICAgIENvZGU6ICcnLFxuICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgIEFQSUtleTogJycsXG4gICAgICAgIEFwcGxpY2F0aW9uUm9sZUFjdGlvbjogJycsXG4gICAgICB9KTtcbiAgICAgIHVzZWRMaXN0LnB1c2gocmFuZG9tSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuQXJyYXk7XG4gIH1cblxuICBlZGl0VmFsdWUodmFsdWU6IE1hcHBlZFJvbGUpIHtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGF0YS5maW5kKCh4KSA9PiB4LmRhdGEuSWQgPT0gdmFsdWUuSWQpO1xuICAgIGlmIChjYXJkICYmIHRoaXMuY2FyZERhdGFWaWV3KSB7XG4gICAgICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICAgIGNhcmQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jdXJyZW50RGF0YSA9IHRoaXMuY2FyZERhdGFWaWV3Lm9uSXRlbUNsaWNrKGNhcmQpO1xuICAgICAgLy8gaWYgKHRoaXMuY3VycmVudERhdGEpIHtcbiAgICAgIC8vICAgdGhpcy5mb3JtLmNvbnRyb2xzWydOYW1lJ10uc2V0VmFsdWUodGhpcy5jdXJyZW50RGF0YS5kYXRhPy5OYW1lKTtcbiAgICAgIC8vIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgI21lc3NhZ2VMb2cgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IG1lc3NhZ2UtbG9nLWNvbnRhaW5lclwiPlxuICA8ZGl2ICpuZ0lmPVwidGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID4gMFwiXG4gICAgY2xhc3M9XCJjb250ZXh0LWJhbm5lciBweS0zIHB4LTQgcm91bmRlZC14bCBmbGV4IGl0ZW0tY2VudGVyIGp1c3RpZnktc3BhY2UtYmV0d2VlbiBnYXAtM1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGZsZXgtMSBjb250ZXh0LWJhbm5lci1jb250ZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGV4dC1jb250ZW50IGl0ZW1zLWNlbnRlciBmbGV4IGdhcC0yXCIgKm5nRm9yPVwibGV0IGNvbnRleHQgb2YgdGhpcy5jYXJkQ29udGV4dEhpc3Rvcnk7IGluZGV4IGFzIGlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRleHQtbWFpbi1jb250ZW50LWNvbnRhaW5lciBmbGV4IGdhcC00XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb250ZXh0LWNhcHRpb24gZm9udC1ib2xkIHRleHQtWyM0MDQwNDBdXCI+e3tjb250ZXh0LmRhdGEuQ2hpbGRyZW5UeXBlICYmXG4gICAgICAgICAgICBjb250ZXh0LmRhdGEuQ2hpbGRyZW5UeXBlID09IGNoaWxkUGVybWlzc2lvblJlZj8gY29udGV4dC5kYXRhLk5hbWU6IGNvbnRleHQudGl0bGV9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPT0gdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoIC0xXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29udGV4dC1zdWJjYXB0aW9uXCI+e3t0aGlzLmdldENhcmRTdWJDYXB0aW9uKGNvbnRleHQpfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA8IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCAtMVwiPi88L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kXCI+XG4gICAgICA8dmVyYmVuLXN2ZyAoY2xpY2spPVwiY2xvc2VEZXRhaWxzKClcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgaWNvbj1cImNsb3NlLWNpcmNsZS1mdWxsXCIgW3dpZHRoXT1cIjIwXCJcbiAgICAgICAgW2hlaWdodF09XCIyMFwiPjwvdmVyYmVuLXN2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx2ZXJiZW4tZGF0YS12aWV3ICN2ZHYgW3ZpZXdTdGF0ZV09XCJ7XG4gICAgICBpc1NlYXJjaDogdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgICBpc0NvbHVtbjogdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgICBpc0ZpbHRlcjogdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgICBpc1NvcnQ6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNFeHBvcnQ6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNTZWxlY3Q6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNDcmVhdGU6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNUb2dnbGU6dGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgfVwiIFtidXR0b25DbGFzc109XCInbXktY3VzdG9tLWJ1dHRvbi1jbGFzcydcIiBbaWNvbkNsYXNzXT1cIidteS1pY29uLWNsYXNzJ1wiXG4gICAgW2FjdGl2ZUljb25DbGFzc109XCInbXktYWN0aXZlLWljb24tY2xhc3MnXCIgW2lzVGFibGVWaWV3XT1cInRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwXCJcbiAgICBbc2VsZWN0ZWRDb2x1bW5Db3VudF09XCIwXCIgW3NlbGVjdGVkU29ydENvdW50XT1cIjBcIiBbc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XT1cIjBcIiAodmlld0NoYW5nZSk9XCJvblZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHN0YXRlQ2hhbmdlKT1cIm9uU3RhdGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgdGFibGUtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS10YWJsZSBbZGF0YV09XCJkYXRhXCIgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbkRlZlwiIFtzdHlsZUNvbmZpZ109XCJzdHlsZXNcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJzZWxlY3RcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LWlzU2VsZWN0ZWQ9XCJpc1NlbGVjdGVkXCIgbGV0LXRvZ2dsZVJvd1NlbGVjdGlvbj1cInRvZ2dsZVJvd1NlbGVjdGlvblwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzU2VsZWN0ZWRcIiAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbigpXCIgLz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyIGxldC1hbGxSb3dzU2VsZWN0ZWQ9XCJhbGxSb3dzU2VsZWN0ZWRcIiBsZXQtc29tZVJvd3NTZWxlY3RlZD1cInNvbWVSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LXRvZ2dsZUFsbFJvd3M9XCJ0b2dnbGVBbGxSb3dzXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiYWxsUm93c1NlbGVjdGVkKClcIiBbaW5kZXRlcm1pbmF0ZV09XCJzb21lUm93c1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbFJvd3MoKVwiIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiY3JlYXRlZEF0XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlIHwgZGF0ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cInVwZGF0ZWRBdFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB8IGRhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTQgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIChjbGljayk9XCJlZGl0VmFsdWUodmFsdWUpXCIgaWNvbj1cImVkaXRcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwidmlld0RldGFpbHNGcm9tVGFibGUodmFsdWUpXCIgY2xhc3M9XCJ2aWV3LWxpbmtzIHZpZXctZGV0YWlsc1wiPnZpZXcgZGV0YWlsczwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aWV3LWxpbmtzIHZpZXctdXNlcnNcIj52aWV3IHVzZXJzPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2xpYi1kYXRhLXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2FyZC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldyBib3JkZXJSYWRpdXM9XCIxMnB4XCIgI3ZkY3YgZGF0YUlkPVwiSWRcIiBib3JkZXI9XCI1cHhcIiBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhXCJcbiAgICAgICAgcmJnQ29sb3I9XCIjZjVmNmY5XCIgbWc9XCIwcHhcIj5cbiAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3IGNsYXNzPVwic3BhY2UteS03XCI+XG4gICAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YSAjdmxjZCBbcGFyZW50XT1cInZkY3ZcIiBkYXRhSWQ9XCJNYWlsQWRkcmVzc1wiXG4gICAgICAgICAgICBjbGFzcz1cImJnLXNlY29uZGFyeS0xMDAgcm91bmRlZC14bCBib3JkZXItcHJpbWFyeSBib3JkZXItWzFweF1cIiBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcmQgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInJvbGVDYXJkQ2xpY2tlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmRhdGEuQ2hpbGRyZW5UeXBlICYmIGl0ZW0uZGF0YS5DaGlsZHJlblR5cGUgPT0gY2hpbGRQZXJtaXNzaW9uUmVmXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggY3Vyc29yLXBvaW50ZXIgaC1bbWF4LWNvbnRlbnRdXCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiIChjbGljayk9XCJ0b2dnbGVDaGlsZHJlbihpdGVtKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGg/J3Zpc2libGUnOidpbnZpc2libGUnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbXMtY2VudGVyIGZsZXggIHByLTEgY3Vyc29yLXBvaW50ZXJcIiBbaWNvbl09XCJpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZD8nbWludXMnOidwbHVzJ1wiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggIHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTMgcHgtNCBmbGV4LTEgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZmxleC0xIGdhcC0xIGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBtaW4taC1bNTBweF0ganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJteS0wIGZvbnQtYm9sZCB0ZXh0LVsjNDA0MDQwXSBsZWFkaW5nLVsxOS41cHhdXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRhLk5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTBweF0gZm9udC1saWdodCB0ZXh0LVsjNDA0MDQwXSBsZWFkaW5nLVsxMi4xcHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldENhcmRTdWJDYXB0aW9uKGl0ZW0pfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBpdGVtcy1lbmQgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIChjbGljayk9XCJ2aWV3RGV0YWlscyhpdGVtKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS0wIHVuZGVybGluZSB0ZXh0LVsjMzQ3OUU5XSB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxNi42cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgZGV0YWlsczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbS5kYXRhLkNoaWxkcmVuVHlwZSB8fCBpdGVtLmRhdGEuQ2hpbGRyZW5UeXBlICE9PSBjaGlsZFBlcm1pc3Npb25SZWZcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBoLVttYXgtY29udGVudF1cIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBbbmdDbGFzc109XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoPyd2aXNpYmxlJzonaW52aXNpYmxlJ1wiIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCIgKGNsaWNrKT1cInRvZ2dsZUNoaWxkcmVuKGl0ZW0pXCIgY2xhc3M9XCJpdGVtcy1jZW50ZXIgZmxleCAgcHItMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZD8nbWludXMnOidwbHVzJ1wiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggIHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTMgcHgtNCBmbGV4LTEgZmxleCBnYXAtMiBoLVsxMDAlXSBpdGVtcy1zdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJpdGVtLmRhdGE/LlNlbGVjdGVkICE9IHVuZGVmaW5lZFwiIFtkaXNhYmxlZF09XCJ0aGlzLmlzQ2hlY2tib3hEaXNhYmxlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJtdC0xIGN1cnNvci1wb2ludGVyXCIgWyhuZ01vZGVsKV09XCJpdGVtLmRhdGEuU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgdGhpcy5zYXZlUm9sZUR5bmFtaWMoaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydCBmbGV4LTEgZ2FwLTEganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC0xIG1pbi1oLVs1MHB4XSBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm15LTAgZm9udC1ib2xkIHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzE5LjVweF1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXRleHQtWzEwcHhdIGZvbnQtbGlnaHQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTIuMXB4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRDYXJkU3ViQ2FwdGlvbihpdGVtKX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXggaXRlbXMtZW5kIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAoY2xpY2spPVwidmlld0RldGFpbHMoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTAgdW5kZXJsaW5lIHRleHQtWyMzNDc5RTldIHRleHQtWzEycHhdIGxlYWRpbmctWzE2LjZweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldyBkZXRhaWxzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcmRDaGlsZCBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC1bbWF4LWNvbnRlbnRdXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggIHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTMgcHgtNCBmbGV4LTEgZmxleCBnYXAtMiBoLVsxMDAlXSBpdGVtcy1zdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJpdGVtLmRhdGE/LlNlbGVjdGVkICE9IHVuZGVmaW5lZFwiIFtkaXNhYmxlZF09XCJ0aGlzLmlzQ2hlY2tib3hEaXNhYmxlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJtdC0xIGN1cnNvci1wb2ludGVyXCIgWyhuZ01vZGVsKV09XCJpdGVtLmRhdGEuU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgdGhpcy5zYXZlUm9sZUR5bmFtaWMoaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydCBmbGV4LTEgZ2FwLTEganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC0xIG1pbi1oLVs1MHB4XSBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm15LTAgZm9udC1ib2xkIHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzE5LjVweF1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXRleHQtWzEwcHhdIGZvbnQtbGlnaHQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTIuMXB4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRDYXJkU3ViQ2FwdGlvbihpdGVtKX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXggaXRlbXMtZW5kIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAoY2xpY2spPVwidmlld0RldGFpbHNDaGlsZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXktMCB1bmRlcmxpbmUgdGV4dC1bIzM0NzlFOV0gdGV4dC1bMTJweF0gbGVhZGluZy1bMTYuNnB4XSBjdXJzb3ItcG9pbnRlciBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3IGRldGFpbHM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YT5cbiAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgPHZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldyAqbmdJZj1cInRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwYXJlbnQ+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGhpcy5jdXJyZW50RGF0YVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCByb3VuZGVkLXhsIGgtZnVsbCB3LWZ1bGwganVzdGlmeS1iZXR3ZWVuIHJlbGF0aXZlIHNwYWNlLXktNFwiPlxuICAgICAgICAgICAgICA8dmVyYmVuYS1pbnB1dCBuYW1lPVwiTmFtZVwiIGxhYmVsPVwiTmFtZVwiIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVRhYmxlKClcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGhpcy5jdXJyZW50RGF0YS5kYXRhLk5hbWVcIiAvPlxuXG4gICAgICAgICAgICAgIDwhLS0gYnV0dG9ucyAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGJvdHRvbS04IGxlZnQtMCByaWdodC0wXCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIGNsYXNzPVwidmVyYmVuLWRlbGV0ZS1idXR0b25cIiB0ZXh0PVwiRGVsZXRlXCI+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIGNsYXNzPVwidmVyYmVuLXN3aXRjaC1idXR0b25cIiAoY2xpY2spPVwidmR2LnRvZ2dsZVZpZXcoKVwiXG4gICAgICAgICAgICAgICAgICAgIHRleHQ9XCJTd2l0Y2ggVG8gVGFibGVcIj48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIGNsYXNzPVwidmVyYmVuLXByaW1hcnktYnV0dG9uXCIgKGNsaWNrKT1cInRoaXMuc2F2ZVJvbGUoKVwiIHRleHQ9XCJTYXZlXCI+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICA8IS0tIDx2ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgICAgeWVzaGhoaGhoXG4gICAgICAgIDwvdmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PiAtLT5cblxuICAgICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3RlciAqbmdJZj1cInRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXZkY3YuaGFzQ3VycmVudEl0ZW0oKSAmJiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibWVzc2FnZS1sb2ctYnV0dG9uLWNvbnRhaW5lciBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b24gW2ZvbnRXZWlnaHRdPVwiJ2JvbGQnXCIgW2JnQ29sb3JdPVwiJyM4RThEODcnXCIgW2JvcmRlclJhZGl1c109XCInNHB4J1wiIFt0ZXh0Q29sb3JdPVwiJyNmZmYnXCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCInRGVsZXRlJ1wiPlxuICAgICAgICAgICAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB7e3ZkY3YuaGFzQ3VycmVudEl0ZW0oKT8nZmxleC0xJzonJ319IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCI+e3sgY2FyZERhdGEubGVuZ3RoIH19IHJlY29yZHMgbG9hZGVkPC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZSgpXCIgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rc1wiPkxvYWQgbW9yZTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3Rlcj5cbiAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY29sdW1uLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXZpc2libGUtY29sdW1uIChjb2x1bW5zVXBkYXRlZCk9XCJvbkNvbHVtbnNVcGRhdGVkKCRldmVudClcIiBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIiBiZ0NvbG9yPVwid2hpdGVcIiB3aWR0aD1cIjQwMHB4XCIgdGV4dENvbG9yPVwiYmxhY2tcIiBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCIgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCIgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbnNcIlxuICAgICAgICBbZGlzcGxheWVkQ29sdW1uc109XCI1XCI+PC92ZXJiZW4tdmlzaWJsZS1jb2x1bW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBmaWx0ZXItY29udGVudD5cbiAgICAgIDx2ZXJiZW4tdGFibGUtZmlsdGVyIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIiBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiIGJnQ29sb3I9XCJ3aGl0ZVwiIHdpZHRoPVwiNDIwcHhcIiB0ZXh0Q29sb3I9XCJibGFja1wiIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIiBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIiB0ZXJ0aWFyeUNvbG9yPVwiIzQwNDA0MFwiIFtmaWx0ZXJPcHRpb25zXT1cImZpbHRlckFycmF5XCJcbiAgICAgICAgW21heEZpbHRlckxlbmd0aF09XCIzXCI+PC92ZXJiZW4tdGFibGUtZmlsdGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc29ydC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1zb3J0LXRhYmxlIChzZWxlY3RlZE9wdGlvbnMpPVwib25Tb3J0VXBkYXRlZCgkZXZlbnQpXCIgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIiBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCIgYmdDb2xvcj1cIndoaXRlXCIgd2lkdGg9XCI0MDBweFwiIHRleHRDb2xvcj1cImJsYWNrXCIgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCIgW2VuYWJsZURyYWdBbmREcm9wXT1cInRydWVcIlxuICAgICAgICBbc29ydE9wdGlvbnNdPVwic29ydE9wdGlvbnNcIj48L3ZlcmJlbi1zb3J0LXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZXhwb3J0LWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtZXhwb3J0IFtkYXRhXT1cImRhdGFcIiAoZXhwb3J0RGF0YUV2ZW50KT1cImhhbmRsZUV4cG9ydCgkZXZlbnQpXCI+XG4gICAgICA8L2xpYi1kYXRhLWV4cG9ydD5cbiAgICA8L2Rpdj5cbiAgPC92ZXJiZW4tZGF0YS12aWV3PlxuICA8ZGl2ICpuZ0lmPVwidmR2LmlzVGFibGVWaWV3XCIgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlLWxvZy1idXR0b24tY29udGFpbmVyIGZsZXgganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICA8dmVyYmVuYS1idXR0b24gW2ZvbnRXZWlnaHRdPVwiJ2JvbGQnXCIgW2JnQ29sb3JdPVwiJyM4RThEODcnXCIgW2JvcmRlclJhZGl1c109XCInNHB4J1wiIFt0ZXh0Q29sb3JdPVwiJyNmZmYnXCJcbiAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIj5cbiAgICAgIDwvdmVyYmVuYS1idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCI+e3sgY2FyZERhdGEubGVuZ3RoIH19IHJlY29yZHMgbG9hZGVkPC9zcGFuPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3NcIj5Mb2FkIG1vcmU8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==