verben-workflow-ui 0.5.38 → 0.5.40

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.
@@ -1,4 +1,4 @@
1
- import { Component, input, Input } from '@angular/core';
1
+ import { Component, input, Input, ViewChildren } from '@angular/core';
2
2
  import { BehaviorSubject } from 'rxjs';
3
3
  import { TaskModel } from 'verben-workflow-ui/src/lib/components/tasks';
4
4
  import { DataType, ObjectState, TaskStatus } from 'verben-workflow-ui/src/lib/models';
@@ -36,6 +36,7 @@ export class MyQueueComponent extends BaseDataViewComponent {
36
36
  // Custom detail view logic
37
37
  },
38
38
  };
39
+ popups;
39
40
  selectedTaskCode = null;
40
41
  activeActionType = null;
41
42
  comment = '';
@@ -177,6 +178,16 @@ export class MyQueueComponent extends BaseDataViewComponent {
177
178
  this.selectedTaskCode = null;
178
179
  }
179
180
  }
181
+ onPopupToggled(isOpen, currentPopup) {
182
+ if (isOpen) {
183
+ this.popups.forEach((popup) => {
184
+ if (popup !== currentPopup && popup.dropdownOpen) {
185
+ popup.toggleDropdown();
186
+ }
187
+ });
188
+ }
189
+ this.handlePopupClose(!isOpen);
190
+ }
180
191
  checkForFormThenPassOn(task, popup) {
181
192
  this.currentTask = task;
182
193
  if (this.stageForm) {
@@ -341,13 +352,16 @@ export class MyQueueComponent extends BaseDataViewComponent {
341
352
  }
342
353
  }
343
354
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MyQueueComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.MyQueueFacade }], target: i0.ɵɵFactoryTarget.Component });
344
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MyQueueComponent, selector: "lib-my-queue", inputs: { isGeneral: { classPropertyName: "isGeneral", publicName: "isGeneral", isSignal: true, isRequired: false, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: false, isRequired: false, transformFunction: null } }, providers: [MyQueueService, MyQueueState, MyQueueFacade], usesInheritance: true, ngImport: i0, template: "<div class=\"space-y-8\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: isGeneral(),\n isToggle: true,\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div table-content>\n <lib-data-table\n [data]=\"data()\"\n [columns]=\"config.columns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n [groupBy]=\"groupByWorkflowCode\"\n >\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value let-deleteRow>\n <a\n [routerLink]=\"['/workflow/task-history', value]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\"\n >view history</a\n >\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"workflow\">\n <ng-template #cell let-value>\n <a\n [routerLink]=\"['/workflow/workflows', value]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\"\n >view Workflow</a\n >\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <verben-pop-Up\n #popup\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\"\n (dropdownOpenChange)=\"handlePopupClose($event)\"\n >\n <verben-svg\n dropdown-trigger\n icon=\"dots\"\n [width]=\"4\"\n [height]=\"24\"\n class=\"cursor-pointer w-auto\"\n ></verben-svg>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @if (selectedTaskCode && activeActionType) {\n <div style=\"width: 16rem\">\n <div\n class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g opacity=\"0.6\">\n <path\n d=\"M6.74649 8.00338C6.91483 8.1347 7.0252 8.20455 7.11531 8.29396C7.98846 9.16222 8.85742 10.0347 9.72917 10.905C9.87167 11.0475 9.99391 11.1921 9.99321 11.4129C9.99251 11.6462 9.89472 11.8152 9.69564 11.9256C9.49307 12.038 9.2926 12.0206 9.10469 11.8899C9.03833 11.8438 8.98175 11.7845 8.92378 11.7272C7.85574 10.6592 6.79678 9.58203 5.71477 8.52867C5.3711 8.19407 5.38437 7.79173 5.70779 7.47599C6.7884 6.42123 7.84875 5.34551 8.91539 4.27607C9.11377 4.07769 9.32054 3.92262 9.623 4.04137C9.97924 4.18107 10.112 4.58901 9.89472 4.90335C9.82976 4.99765 9.74174 5.07728 9.66002 5.1597C8.80642 6.01469 7.95283 6.86968 7.09645 7.72257C7.01472 7.8043 6.91553 7.86856 6.74579 8.00408L6.74649 8.00338Z\"\n fill=\"black\"\n />\n </g>\n </svg>\n\n <h3 class=\"text-sm font-medium\">Select Assignee</h3>\n </div>\n\n <div class=\"grid gap-2 max-h-96 overflow-y-auto p-2\">\n <verben-drop-down\n label=\"Action\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"Select Action\"\n [(options)]=\"nextActions\"\n id=\"actions\"\n optionLabel=\"Name\"\n [ngModel]=\"selectedAction | async\"\n (ngModelChange)=\"selectedAction.next($event)\"\n class=\"form-control\"\n >\n </verben-drop-down>\n\n <verben-drop-down\n label=\"Actors\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"Select Actor\"\n [(options)]=\"nextActors\"\n id=\"actors\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n [(ngModel)]=\"recipientCode\"\n class=\"form-control\"\n >\n </verben-drop-down>\n\n <textarea\n [(ngModel)]=\"comment\"\n placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\"\n style=\"height: 8rem\"\n [cols]=\"8\"\n ></textarea>\n\n <verbena-button\n [disable]=\"!comment\"\n [text]=\"activeActionType\"\n (click)=\"handleAction(row, popup)\"\n class=\"text-xs w-full\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n fontSize=\"14px\"\n pd=\"10px 20px\"\n width=\"100%\"\n height=\"32px\"\n >\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n } @else { @for (item of getTableActions(row); track item.label)\n {\n <div\n (click)=\"item.action(row)\"\n class=\"cursor-pointer py-2 px-3 text-sm hover:bg-primary\"\n >\n {{ item.label }}\n </div>\n @if (item.divider) {\n <hr class=\"bg-[#FFE681] h-1 rounded-xl border-0\" />\n } } }\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template #header>\n <strong class=\"text-center\">Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData()\"\n rbgColor=\"#f5f6f9\"\n mg=\"20px\"\n >\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"Id\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData()\"\n >\n <ng-template #card let-item>\n <div\n (click)=\"\n currentData = isGeneral() ? vdcv.onItemClick(item) : null\n \"\n class=\"flex\"\n >\n <div\n (click)=\"\n currentData = isGeneral() ? vdcv.onItemClick(item) : null\n \"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\"\n >\n <div\n class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"flex flex-col py-2 px-4 w-full\">\n <div class=\"flex items-center gap-4 justify-between\">\n <div class=\"grid gap-y-2\">\n <span class=\"font-semibold text-[#404040]\">{{\n item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Status:</label\n >\n <span id=\"phone\" class=\"text-sm\">{{\n item.data.Status\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n item.data.WorkflowCode\n }}</span>\n <a\n [routerLink]=\"[\n '/workflow/task-history',\n item.data.Code\n ]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF] text-xs\"\n >view history</a\n >\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <!-- <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n (onApproval)=\"onApprove($event)\"\n ></lib-user-request-form> -->\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div\n [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-end': true,\n }\"\n >\n <!-- <verbena-button\n *ngIf=\"!vdcv.hasCurrentItem()\"\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n <div\n class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\"\n >{{ cardData().length }} records loaded</span\n >\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <lib-data-columns\n [columns]=\"config.columns\"\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n ></lib-data-columns>\n </div>\n <div filter-content>\n <verben-table-filter\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <lib-data-sort\n [columns]=\"config.columns\"\n [data]=\"data()\"\n (sortApplied)=\"onSortUpdated($event)\"\n ></lib-data-sort>\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\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-end\">\n\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n</div>\n\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [mode]=\"'drawer'\"\n [padding]=\"'0px'\"\n [drawerWidth]=\"'400px'\"\n [disableFooter]=\"false\"\n [isVisible]=\"isModalVisible\"\n [modalData]=\"stageForm\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [showCloseIcon]=\"false\"\n>\n</verben-dialogue>\n<ng-template #headerTemplate>\n <div class=\"bg-[#FFE681] px-6 py-4 flex justify-between items-center\">\n <h1>Form</h1>\n <verben-svg\n class=\"cursor-pointer\"\n [icon]=\"'close-circle'\"\n (click)=\"isModalVisible = false\"\n [width]=\"15\"\n [height]=\"15\"\n [stroke]=\"'#fff'\"\n ></verben-svg>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div>\n <div *ngIf=\"stageForm?.Entities?.[active]; else emptyState\" class=\"mt-4\">\n <form-control\n [dataType]=\"dataType\"\n [formProperties]=\"stageForm?.Entities?.[active]?.Properties ?? []\"\n ></form-control>\n\n <div class=\"flex gap-3 justify-end\">\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"submitForm()\"\n [disable]=\"!areRequiredPropertiesFilled()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n\n <!-- Empty state template -->\n <ng-template #emptyState>\n <p class=\"mt-4 p-4 text-gray-600 text-center\">\n No entries available for the selected form group.\n </p>\n </ng-template>\n </div>\n</ng-template>\n", styles: [".view-links{color:#3479e9;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i3.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i3.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "extendCustomClass", "exportCustomClass", "selectCustomClass", "importCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "importTemplate", "columnTemplate", "extendTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showImportChild", "showExportChild", "showExtendChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i3.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", "showEditIcon", "onItemClick", "onCardChildClick"], outputs: ["editClicked", "loadMoreClick"] }, { kind: "component", type: i3.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i3.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i3.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i3.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i3.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied", "resetSortData"] }, { kind: "component", type: i3.DataExportComponent, selector: "lib-data-export", inputs: ["columns", "data", "dataFetchUrl", "dataQueryParameters"], outputs: ["exportDataEvent"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i3.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "component", type: i3.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i3.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave", "cdkPosition"], outputs: ["dropdownOpenChange", "close"] }, { kind: "component", type: i3.DataColumnsComponent, selector: "lib-data-columns", inputs: ["columns", "enableDragAndDrop", "maxVisibleItems"], outputs: ["columnsUpdated"] }, { kind: "component", type: i3.DataSortComponent, selector: "lib-data-sort", inputs: ["columns", "data", "enableDragAndDrop"], outputs: ["sortApplied", "resetFilter"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i6.FormControlComponent, selector: "form-control", inputs: ["dataType", "value", "boolInputType", "formProperties"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
355
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MyQueueComponent, selector: "lib-my-queue", inputs: { isGeneral: { classPropertyName: "isGeneral", publicName: "isGeneral", isSignal: true, isRequired: false, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: false, isRequired: false, transformFunction: null } }, providers: [MyQueueService, MyQueueState, MyQueueFacade], viewQueries: [{ propertyName: "popups", predicate: ["popup"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"space-y-8\">\n <verben-data-view #vdv [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: isGeneral(),\n isToggle: true,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\" (stateChange)=\"onStateChange($event)\">\n <div table-content>\n <lib-data-table [data]=\"data()\" [columns]=\"config.columns\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\" [groupBy]=\"groupByWorkflowCode\">\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value let-deleteRow>\n <a [routerLink]=\"['/workflow/task-history', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\">view history</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"workflow\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/workflows', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\">view Workflow</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <verben-pop-Up #popup [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\" [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"onPopupToggled($event, popup)\">\n <div dropdown-trigger class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @for (item of getTableActions(row); track item.label) {\n\n <verben-pop-Up #popup2 [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\" [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"handlePopupClose($event)\">\n <div (click)=\"item.action(row)\" dropdown-trigger class=\"cursor-pointer py-2 px-3 hover:bg-primary\">\n {{ item.label }}\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n <div style=\"width: 16rem\">\n <div class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g opacity=\"0.6\">\n <path\n d=\"M6.74649 8.00338C6.91483 8.1347 7.0252 8.20455 7.11531 8.29396C7.98846 9.16222 8.85742 10.0347 9.72917 10.905C9.87167 11.0475 9.99391 11.1921 9.99321 11.4129C9.99251 11.6462 9.89472 11.8152 9.69564 11.9256C9.49307 12.038 9.2926 12.0206 9.10469 11.8899C9.03833 11.8438 8.98175 11.7845 8.92378 11.7272C7.85574 10.6592 6.79678 9.58203 5.71477 8.52867C5.3711 8.19407 5.38437 7.79173 5.70779 7.47599C6.7884 6.42123 7.84875 5.34551 8.91539 4.27607C9.11377 4.07769 9.32054 3.92262 9.623 4.04137C9.97924 4.18107 10.112 4.58901 9.89472 4.90335C9.82976 4.99765 9.74174 5.07728 9.66002 5.1597C8.80642 6.01469 7.95283 6.86968 7.09645 7.72257C7.01472 7.8043 6.91553 7.86856 6.74579 8.00408L6.74649 8.00338Z\"\n fill=\"black\" />\n </g>\n </svg>\n\n <h3 class=\"text-sm font-medium\">Select Assignee</h3>\n </div>\n\n <div class=\"grid gap-2 max-h-96 overflow-y-auto p-2\">\n <verben-drop-down label=\"Action\" styleClass=\"w-full\" width=\"100%\" [multiselect]=\"false\"\n [filter]=\"true\" [showClear]=\"true\" placeholder=\"Select Action\" [(options)]=\"nextActions\"\n id=\"actions\" optionLabel=\"Name\" [ngModel]=\"selectedAction | async\"\n (ngModelChange)=\"selectedAction.next($event)\" class=\"form-control\">\n </verben-drop-down>\n\n <verben-drop-down label=\"Actors\" styleClass=\"w-full\" width=\"100%\" [multiselect]=\"false\"\n [filter]=\"true\" [showClear]=\"true\" placeholder=\"Select Actor\" [(options)]=\"nextActors\"\n id=\"actors\" optionLabel=\"Name\" optionValue=\"Code\" [(ngModel)]=\"recipientCode\"\n class=\"form-control\">\n </verben-drop-down>\n\n <textarea [(ngModel)]=\"comment\" placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\" style=\"height: 8rem\"\n [cols]=\"8\"></textarea>\n\n <verbena-button [disable]=\"!comment\" [text]=\"activeActionType ?? ''\"\n (click)=\"handleAction(row, popup)\" class=\"text-xs w-full\" bgColor=\"#FFE681\"\n textColor=\"#404040\" borderRadius=\"10px\" fontSize=\"14px\" pd=\"10px 20px\" width=\"100%\"\n height=\"32px\">\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n </div>\n </verben-pop-Up>\n\n @if (item.divider) {\n <hr class=\"bg-[#FFE681] h-1 rounded-xl border-0\" />\n } }\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template #header>\n <strong class=\"text-center\">Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" (loadMoreClick)=\"loadMore()\" #vdcv dataId=\"Id\" border=\"5px\"\n [cardDataList]=\"cardData()\" rbgColor=\"#f5f6f9\" mg=\"20px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"Code\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData()\">\n <ng-template #card let-item>\n <div (click)=\"\n currentData = isGeneral() ? vdcv.onItemClick(item) : null\n \" class=\"flex\">\n <div (click)=\"\n currentData = isGeneral() ? vdcv.onItemClick(item) : null\n \" class=\"flex cursor-pointer 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=\"flex flex-col py-2 px-4 w-full\">\n <div class=\"flex items-center gap-4 justify-between\">\n <div class=\"grid gap-y-2\">\n <span class=\"font-semibold text-[#404040]\">{{\n item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\">Status:</label>\n <span id=\"phone\" class=\"text-sm\">{{\n item.data.Status\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n item.data.Code\n }}</span>\n\n <div (click)=\"$event.stopPropagation();\" class=\"flex items-end gap-4\">\n <a [routerLink]=\"[\n '/workflow/task-history',\n item.data.Code\n ]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF] text-xs relative z-10\">view\n history</a>\n\n <verben-pop-Up #popup [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"onPopupToggled($event, popup)\">\n <div dropdown-trigger\n class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @for (actionItem of getTableActions(item.data); track actionItem.label) {\n\n <verben-pop-Up #popup2 [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"handlePopupClose($event)\">\n <div (click)=\"actionItem.action(item.data)\" dropdown-trigger\n class=\"cursor-pointer py-2 px-3 hover:bg-primary\">\n {{ actionItem.label }}\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n <div style=\"width: 16rem\">\n <div class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g opacity=\"0.6\">\n <path\n d=\"M6.74649 8.00338C6.91483 8.1347 7.0252 8.20455 7.11531 8.29396C7.98846 9.16222 8.85742 10.0347 9.72917 10.905C9.87167 11.0475 9.99391 11.1921 9.99321 11.4129C9.99251 11.6462 9.89472 11.8152 9.69564 11.9256C9.49307 12.038 9.2926 12.0206 9.10469 11.8899C9.03833 11.8438 8.98175 11.7845 8.92378 11.7272C7.85574 10.6592 6.79678 9.58203 5.71477 8.52867C5.3711 8.19407 5.38437 7.79173 5.70779 7.47599C6.7884 6.42123 7.84875 5.34551 8.91539 4.27607C9.11377 4.07769 9.32054 3.92262 9.623 4.04137C9.97924 4.18107 10.112 4.58901 9.89472 4.90335C9.82976 4.99765 9.74174 5.07728 9.66002 5.1597C8.80642 6.01469 7.95283 6.86968 7.09645 7.72257C7.01472 7.8043 6.91553 7.86856 6.74579 8.00408L6.74649 8.00338Z\"\n fill=\"black\" />\n </g>\n </svg>\n\n <h3 class=\"text-sm font-medium\">Select Assignee</h3>\n </div>\n\n <div class=\"grid gap-2 max-h-96 overflow-y-auto p-2\">\n <verben-drop-down label=\"Action\" styleClass=\"w-full\" width=\"100%\"\n [multiselect]=\"false\" [filter]=\"true\" [showClear]=\"true\"\n placeholder=\"Select Action\" [(options)]=\"nextActions\" id=\"actions\"\n optionLabel=\"Name\" [ngModel]=\"selectedAction | async\"\n (ngModelChange)=\"selectedAction.next($event)\" class=\"form-control\">\n </verben-drop-down>\n\n <verben-drop-down label=\"Actors\" styleClass=\"w-full\" width=\"100%\"\n [multiselect]=\"false\" [filter]=\"true\" [showClear]=\"true\"\n placeholder=\"Select Actor\" [(options)]=\"nextActors\" id=\"actors\"\n optionLabel=\"Name\" optionValue=\"Code\" [(ngModel)]=\"recipientCode\"\n class=\"form-control\">\n </verben-drop-down>\n\n <textarea [(ngModel)]=\"comment\" placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\" style=\"height: 8rem\"\n [cols]=\"8\"></textarea>\n\n <verbena-button [disable]=\"!comment\" [text]=\"activeActionType ?? ''\"\n (click)=\"handleAction(item.data, popup)\" class=\"text-xs w-full\"\n bgColor=\"#FFE681\" textColor=\"#404040\" borderRadius=\"10px\" fontSize=\"14px\"\n pd=\"10px 20px\" width=\"100%\" height=\"32px\">\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n </div>\n </verben-pop-Up>\n\n @if (actionItem.divider) {\n <hr class=\"bg-[#FFE681] h-1 rounded-xl border-0\" />\n } }\n </div>\n </verben-pop-Up>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <!-- <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n (onApproval)=\"onApprove($event)\"\n ></lib-user-request-form> -->\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-end': true,\n }\">\n <!-- <verbena-button\n *ngIf=\"!vdcv.hasCurrentItem()\"\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n <div class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} 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 text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <lib-data-columns [columns]=\"config.columns\" (columnsUpdated)=\"onColumnsUpdated($event)\"></lib-data-columns>\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 <lib-data-sort [columns]=\"config.columns\" [data]=\"data()\" (sortApplied)=\"onSortUpdated($event)\"></lib-data-sort>\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\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-end\">\n\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 text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n</div>\n\n<verben-dialogue [showCloseIcon]=\"true\" [dismissOutsideClick]=\"true\" [closeOnEscape]=\"true\" [mode]=\"'drawer'\"\n [padding]=\"'0px'\" [drawerWidth]=\"'400px'\" [disableFooter]=\"false\" [isVisible]=\"isModalVisible\" [modalData]=\"stageForm\"\n [headerTemplate]=\"headerTemplate\" [bodyTemplate]=\"bodyTemplate\" [showCloseIcon]=\"false\">\n</verben-dialogue>\n<ng-template #headerTemplate>\n <div class=\"bg-[#FFE681] px-6 py-4 flex justify-between items-center\">\n <h1>Form</h1>\n <verben-svg class=\"cursor-pointer\" [icon]=\"'close-circle'\" (click)=\"isModalVisible = false\" [width]=\"15\"\n [height]=\"15\" [stroke]=\"'#fff'\"></verben-svg>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div>\n <div *ngIf=\"stageForm?.Entities?.[active]; else emptyState\" class=\"mt-4\">\n <form-control [dataType]=\"dataType\"\n [formProperties]=\"stageForm?.Entities?.[active]?.Properties ?? []\"></form-control>\n\n <div class=\"flex gap-3 justify-end\">\n <verbena-button class=\"verben-primary-button\" (click)=\"submitForm()\" [disable]=\"!areRequiredPropertiesFilled()\"\n text=\"Save\"></verbena-button>\n </div>\n </div>\n\n <!-- Empty state template -->\n <ng-template #emptyState>\n <p class=\"mt-4 p-4 text-gray-600 text-center\">\n No entries available for the selected form group.\n </p>\n </ng-template>\n </div>\n</ng-template>\n", styles: [".view-links{color:#3479e9;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i3.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i3.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "extendCustomClass", "exportCustomClass", "selectCustomClass", "importCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "importTemplate", "columnTemplate", "extendTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showImportChild", "showExportChild", "showExtendChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i3.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", "showEditIcon", "onItemClick", "onCardChildClick"], outputs: ["editClicked", "loadMoreClick"] }, { kind: "component", type: i3.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i3.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i3.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i3.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i3.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied", "resetSortData"] }, { kind: "component", type: i3.DataExportComponent, selector: "lib-data-export", inputs: ["columns", "data", "dataFetchUrl", "dataQueryParameters"], outputs: ["exportDataEvent"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i3.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "component", type: i3.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i3.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave", "cdkPosition"], outputs: ["dropdownOpenChange", "close"] }, { kind: "component", type: i3.DataColumnsComponent, selector: "lib-data-columns", inputs: ["columns", "enableDragAndDrop", "maxVisibleItems"], outputs: ["columnsUpdated"] }, { kind: "component", type: i3.DataSortComponent, selector: "lib-data-sort", inputs: ["columns", "data", "enableDragAndDrop"], outputs: ["sortApplied", "resetFilter"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i6.FormControlComponent, selector: "form-control", inputs: ["dataType", "value", "boolInputType", "formProperties"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
345
356
  }
346
357
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MyQueueComponent, decorators: [{
347
358
  type: Component,
348
- args: [{ selector: 'lib-my-queue', providers: [MyQueueService, MyQueueState, MyQueueFacade], template: "<div class=\"space-y-8\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: isGeneral(),\n isToggle: true,\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div table-content>\n <lib-data-table\n [data]=\"data()\"\n [columns]=\"config.columns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n [groupBy]=\"groupByWorkflowCode\"\n >\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value let-deleteRow>\n <a\n [routerLink]=\"['/workflow/task-history', value]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\"\n >view history</a\n >\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"workflow\">\n <ng-template #cell let-value>\n <a\n [routerLink]=\"['/workflow/workflows', value]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\"\n >view Workflow</a\n >\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <verben-pop-Up\n #popup\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\"\n (dropdownOpenChange)=\"handlePopupClose($event)\"\n >\n <verben-svg\n dropdown-trigger\n icon=\"dots\"\n [width]=\"4\"\n [height]=\"24\"\n class=\"cursor-pointer w-auto\"\n ></verben-svg>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @if (selectedTaskCode && activeActionType) {\n <div style=\"width: 16rem\">\n <div\n class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g opacity=\"0.6\">\n <path\n d=\"M6.74649 8.00338C6.91483 8.1347 7.0252 8.20455 7.11531 8.29396C7.98846 9.16222 8.85742 10.0347 9.72917 10.905C9.87167 11.0475 9.99391 11.1921 9.99321 11.4129C9.99251 11.6462 9.89472 11.8152 9.69564 11.9256C9.49307 12.038 9.2926 12.0206 9.10469 11.8899C9.03833 11.8438 8.98175 11.7845 8.92378 11.7272C7.85574 10.6592 6.79678 9.58203 5.71477 8.52867C5.3711 8.19407 5.38437 7.79173 5.70779 7.47599C6.7884 6.42123 7.84875 5.34551 8.91539 4.27607C9.11377 4.07769 9.32054 3.92262 9.623 4.04137C9.97924 4.18107 10.112 4.58901 9.89472 4.90335C9.82976 4.99765 9.74174 5.07728 9.66002 5.1597C8.80642 6.01469 7.95283 6.86968 7.09645 7.72257C7.01472 7.8043 6.91553 7.86856 6.74579 8.00408L6.74649 8.00338Z\"\n fill=\"black\"\n />\n </g>\n </svg>\n\n <h3 class=\"text-sm font-medium\">Select Assignee</h3>\n </div>\n\n <div class=\"grid gap-2 max-h-96 overflow-y-auto p-2\">\n <verben-drop-down\n label=\"Action\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"Select Action\"\n [(options)]=\"nextActions\"\n id=\"actions\"\n optionLabel=\"Name\"\n [ngModel]=\"selectedAction | async\"\n (ngModelChange)=\"selectedAction.next($event)\"\n class=\"form-control\"\n >\n </verben-drop-down>\n\n <verben-drop-down\n label=\"Actors\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"Select Actor\"\n [(options)]=\"nextActors\"\n id=\"actors\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n [(ngModel)]=\"recipientCode\"\n class=\"form-control\"\n >\n </verben-drop-down>\n\n <textarea\n [(ngModel)]=\"comment\"\n placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\"\n style=\"height: 8rem\"\n [cols]=\"8\"\n ></textarea>\n\n <verbena-button\n [disable]=\"!comment\"\n [text]=\"activeActionType\"\n (click)=\"handleAction(row, popup)\"\n class=\"text-xs w-full\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n fontSize=\"14px\"\n pd=\"10px 20px\"\n width=\"100%\"\n height=\"32px\"\n >\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n } @else { @for (item of getTableActions(row); track item.label)\n {\n <div\n (click)=\"item.action(row)\"\n class=\"cursor-pointer py-2 px-3 text-sm hover:bg-primary\"\n >\n {{ item.label }}\n </div>\n @if (item.divider) {\n <hr class=\"bg-[#FFE681] h-1 rounded-xl border-0\" />\n } } }\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template #header>\n <strong class=\"text-center\">Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData()\"\n rbgColor=\"#f5f6f9\"\n mg=\"20px\"\n >\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"Id\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData()\"\n >\n <ng-template #card let-item>\n <div\n (click)=\"\n currentData = isGeneral() ? vdcv.onItemClick(item) : null\n \"\n class=\"flex\"\n >\n <div\n (click)=\"\n currentData = isGeneral() ? vdcv.onItemClick(item) : null\n \"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\"\n >\n <div\n class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"flex flex-col py-2 px-4 w-full\">\n <div class=\"flex items-center gap-4 justify-between\">\n <div class=\"grid gap-y-2\">\n <span class=\"font-semibold text-[#404040]\">{{\n item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Status:</label\n >\n <span id=\"phone\" class=\"text-sm\">{{\n item.data.Status\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n item.data.WorkflowCode\n }}</span>\n <a\n [routerLink]=\"[\n '/workflow/task-history',\n item.data.Code\n ]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF] text-xs\"\n >view history</a\n >\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <!-- <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n (onApproval)=\"onApprove($event)\"\n ></lib-user-request-form> -->\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div\n [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-end': true,\n }\"\n >\n <!-- <verbena-button\n *ngIf=\"!vdcv.hasCurrentItem()\"\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n <div\n class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\"\n >{{ cardData().length }} records loaded</span\n >\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <lib-data-columns\n [columns]=\"config.columns\"\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n ></lib-data-columns>\n </div>\n <div filter-content>\n <verben-table-filter\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <lib-data-sort\n [columns]=\"config.columns\"\n [data]=\"data()\"\n (sortApplied)=\"onSortUpdated($event)\"\n ></lib-data-sort>\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\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-end\">\n\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n</div>\n\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [mode]=\"'drawer'\"\n [padding]=\"'0px'\"\n [drawerWidth]=\"'400px'\"\n [disableFooter]=\"false\"\n [isVisible]=\"isModalVisible\"\n [modalData]=\"stageForm\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [showCloseIcon]=\"false\"\n>\n</verben-dialogue>\n<ng-template #headerTemplate>\n <div class=\"bg-[#FFE681] px-6 py-4 flex justify-between items-center\">\n <h1>Form</h1>\n <verben-svg\n class=\"cursor-pointer\"\n [icon]=\"'close-circle'\"\n (click)=\"isModalVisible = false\"\n [width]=\"15\"\n [height]=\"15\"\n [stroke]=\"'#fff'\"\n ></verben-svg>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div>\n <div *ngIf=\"stageForm?.Entities?.[active]; else emptyState\" class=\"mt-4\">\n <form-control\n [dataType]=\"dataType\"\n [formProperties]=\"stageForm?.Entities?.[active]?.Properties ?? []\"\n ></form-control>\n\n <div class=\"flex gap-3 justify-end\">\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"submitForm()\"\n [disable]=\"!areRequiredPropertiesFilled()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n\n <!-- Empty state template -->\n <ng-template #emptyState>\n <p class=\"mt-4 p-4 text-gray-600 text-center\">\n No entries available for the selected form group.\n </p>\n </ng-template>\n </div>\n</ng-template>\n", styles: [".view-links{color:#3479e9;cursor:pointer}\n"] }]
359
+ args: [{ selector: 'lib-my-queue', providers: [MyQueueService, MyQueueState, MyQueueFacade], template: "<div class=\"space-y-8\">\n <verben-data-view #vdv [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: isGeneral(),\n isToggle: true,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\" (stateChange)=\"onStateChange($event)\">\n <div table-content>\n <lib-data-table [data]=\"data()\" [columns]=\"config.columns\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\" [groupBy]=\"groupByWorkflowCode\">\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value let-deleteRow>\n <a [routerLink]=\"['/workflow/task-history', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\">view history</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"workflow\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/workflows', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\">view Workflow</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <verben-pop-Up #popup [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\" [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"onPopupToggled($event, popup)\">\n <div dropdown-trigger class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @for (item of getTableActions(row); track item.label) {\n\n <verben-pop-Up #popup2 [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\" [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"handlePopupClose($event)\">\n <div (click)=\"item.action(row)\" dropdown-trigger class=\"cursor-pointer py-2 px-3 hover:bg-primary\">\n {{ item.label }}\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n <div style=\"width: 16rem\">\n <div class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g opacity=\"0.6\">\n <path\n d=\"M6.74649 8.00338C6.91483 8.1347 7.0252 8.20455 7.11531 8.29396C7.98846 9.16222 8.85742 10.0347 9.72917 10.905C9.87167 11.0475 9.99391 11.1921 9.99321 11.4129C9.99251 11.6462 9.89472 11.8152 9.69564 11.9256C9.49307 12.038 9.2926 12.0206 9.10469 11.8899C9.03833 11.8438 8.98175 11.7845 8.92378 11.7272C7.85574 10.6592 6.79678 9.58203 5.71477 8.52867C5.3711 8.19407 5.38437 7.79173 5.70779 7.47599C6.7884 6.42123 7.84875 5.34551 8.91539 4.27607C9.11377 4.07769 9.32054 3.92262 9.623 4.04137C9.97924 4.18107 10.112 4.58901 9.89472 4.90335C9.82976 4.99765 9.74174 5.07728 9.66002 5.1597C8.80642 6.01469 7.95283 6.86968 7.09645 7.72257C7.01472 7.8043 6.91553 7.86856 6.74579 8.00408L6.74649 8.00338Z\"\n fill=\"black\" />\n </g>\n </svg>\n\n <h3 class=\"text-sm font-medium\">Select Assignee</h3>\n </div>\n\n <div class=\"grid gap-2 max-h-96 overflow-y-auto p-2\">\n <verben-drop-down label=\"Action\" styleClass=\"w-full\" width=\"100%\" [multiselect]=\"false\"\n [filter]=\"true\" [showClear]=\"true\" placeholder=\"Select Action\" [(options)]=\"nextActions\"\n id=\"actions\" optionLabel=\"Name\" [ngModel]=\"selectedAction | async\"\n (ngModelChange)=\"selectedAction.next($event)\" class=\"form-control\">\n </verben-drop-down>\n\n <verben-drop-down label=\"Actors\" styleClass=\"w-full\" width=\"100%\" [multiselect]=\"false\"\n [filter]=\"true\" [showClear]=\"true\" placeholder=\"Select Actor\" [(options)]=\"nextActors\"\n id=\"actors\" optionLabel=\"Name\" optionValue=\"Code\" [(ngModel)]=\"recipientCode\"\n class=\"form-control\">\n </verben-drop-down>\n\n <textarea [(ngModel)]=\"comment\" placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\" style=\"height: 8rem\"\n [cols]=\"8\"></textarea>\n\n <verbena-button [disable]=\"!comment\" [text]=\"activeActionType ?? ''\"\n (click)=\"handleAction(row, popup)\" class=\"text-xs w-full\" bgColor=\"#FFE681\"\n textColor=\"#404040\" borderRadius=\"10px\" fontSize=\"14px\" pd=\"10px 20px\" width=\"100%\"\n height=\"32px\">\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n </div>\n </verben-pop-Up>\n\n @if (item.divider) {\n <hr class=\"bg-[#FFE681] h-1 rounded-xl border-0\" />\n } }\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template #header>\n <strong class=\"text-center\">Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" (loadMoreClick)=\"loadMore()\" #vdcv dataId=\"Id\" border=\"5px\"\n [cardDataList]=\"cardData()\" rbgColor=\"#f5f6f9\" mg=\"20px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"Code\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData()\">\n <ng-template #card let-item>\n <div (click)=\"\n currentData = isGeneral() ? vdcv.onItemClick(item) : null\n \" class=\"flex\">\n <div (click)=\"\n currentData = isGeneral() ? vdcv.onItemClick(item) : null\n \" class=\"flex cursor-pointer 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=\"flex flex-col py-2 px-4 w-full\">\n <div class=\"flex items-center gap-4 justify-between\">\n <div class=\"grid gap-y-2\">\n <span class=\"font-semibold text-[#404040]\">{{\n item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\">Status:</label>\n <span id=\"phone\" class=\"text-sm\">{{\n item.data.Status\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n item.data.Code\n }}</span>\n\n <div (click)=\"$event.stopPropagation();\" class=\"flex items-end gap-4\">\n <a [routerLink]=\"[\n '/workflow/task-history',\n item.data.Code\n ]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF] text-xs relative z-10\">view\n history</a>\n\n <verben-pop-Up #popup [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"onPopupToggled($event, popup)\">\n <div dropdown-trigger\n class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @for (actionItem of getTableActions(item.data); track actionItem.label) {\n\n <verben-pop-Up #popup2 [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"handlePopupClose($event)\">\n <div (click)=\"actionItem.action(item.data)\" dropdown-trigger\n class=\"cursor-pointer py-2 px-3 hover:bg-primary\">\n {{ actionItem.label }}\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n <div style=\"width: 16rem\">\n <div class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g opacity=\"0.6\">\n <path\n d=\"M6.74649 8.00338C6.91483 8.1347 7.0252 8.20455 7.11531 8.29396C7.98846 9.16222 8.85742 10.0347 9.72917 10.905C9.87167 11.0475 9.99391 11.1921 9.99321 11.4129C9.99251 11.6462 9.89472 11.8152 9.69564 11.9256C9.49307 12.038 9.2926 12.0206 9.10469 11.8899C9.03833 11.8438 8.98175 11.7845 8.92378 11.7272C7.85574 10.6592 6.79678 9.58203 5.71477 8.52867C5.3711 8.19407 5.38437 7.79173 5.70779 7.47599C6.7884 6.42123 7.84875 5.34551 8.91539 4.27607C9.11377 4.07769 9.32054 3.92262 9.623 4.04137C9.97924 4.18107 10.112 4.58901 9.89472 4.90335C9.82976 4.99765 9.74174 5.07728 9.66002 5.1597C8.80642 6.01469 7.95283 6.86968 7.09645 7.72257C7.01472 7.8043 6.91553 7.86856 6.74579 8.00408L6.74649 8.00338Z\"\n fill=\"black\" />\n </g>\n </svg>\n\n <h3 class=\"text-sm font-medium\">Select Assignee</h3>\n </div>\n\n <div class=\"grid gap-2 max-h-96 overflow-y-auto p-2\">\n <verben-drop-down label=\"Action\" styleClass=\"w-full\" width=\"100%\"\n [multiselect]=\"false\" [filter]=\"true\" [showClear]=\"true\"\n placeholder=\"Select Action\" [(options)]=\"nextActions\" id=\"actions\"\n optionLabel=\"Name\" [ngModel]=\"selectedAction | async\"\n (ngModelChange)=\"selectedAction.next($event)\" class=\"form-control\">\n </verben-drop-down>\n\n <verben-drop-down label=\"Actors\" styleClass=\"w-full\" width=\"100%\"\n [multiselect]=\"false\" [filter]=\"true\" [showClear]=\"true\"\n placeholder=\"Select Actor\" [(options)]=\"nextActors\" id=\"actors\"\n optionLabel=\"Name\" optionValue=\"Code\" [(ngModel)]=\"recipientCode\"\n class=\"form-control\">\n </verben-drop-down>\n\n <textarea [(ngModel)]=\"comment\" placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\" style=\"height: 8rem\"\n [cols]=\"8\"></textarea>\n\n <verbena-button [disable]=\"!comment\" [text]=\"activeActionType ?? ''\"\n (click)=\"handleAction(item.data, popup)\" class=\"text-xs w-full\"\n bgColor=\"#FFE681\" textColor=\"#404040\" borderRadius=\"10px\" fontSize=\"14px\"\n pd=\"10px 20px\" width=\"100%\" height=\"32px\">\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n </div>\n </verben-pop-Up>\n\n @if (actionItem.divider) {\n <hr class=\"bg-[#FFE681] h-1 rounded-xl border-0\" />\n } }\n </div>\n </verben-pop-Up>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <!-- <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n (onApproval)=\"onApprove($event)\"\n ></lib-user-request-form> -->\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-end': true,\n }\">\n <!-- <verbena-button\n *ngIf=\"!vdcv.hasCurrentItem()\"\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n <div class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} 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 text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <lib-data-columns [columns]=\"config.columns\" (columnsUpdated)=\"onColumnsUpdated($event)\"></lib-data-columns>\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 <lib-data-sort [columns]=\"config.columns\" [data]=\"data()\" (sortApplied)=\"onSortUpdated($event)\"></lib-data-sort>\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\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-end\">\n\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 text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n</div>\n\n<verben-dialogue [showCloseIcon]=\"true\" [dismissOutsideClick]=\"true\" [closeOnEscape]=\"true\" [mode]=\"'drawer'\"\n [padding]=\"'0px'\" [drawerWidth]=\"'400px'\" [disableFooter]=\"false\" [isVisible]=\"isModalVisible\" [modalData]=\"stageForm\"\n [headerTemplate]=\"headerTemplate\" [bodyTemplate]=\"bodyTemplate\" [showCloseIcon]=\"false\">\n</verben-dialogue>\n<ng-template #headerTemplate>\n <div class=\"bg-[#FFE681] px-6 py-4 flex justify-between items-center\">\n <h1>Form</h1>\n <verben-svg class=\"cursor-pointer\" [icon]=\"'close-circle'\" (click)=\"isModalVisible = false\" [width]=\"15\"\n [height]=\"15\" [stroke]=\"'#fff'\"></verben-svg>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div>\n <div *ngIf=\"stageForm?.Entities?.[active]; else emptyState\" class=\"mt-4\">\n <form-control [dataType]=\"dataType\"\n [formProperties]=\"stageForm?.Entities?.[active]?.Properties ?? []\"></form-control>\n\n <div class=\"flex gap-3 justify-end\">\n <verbena-button class=\"verben-primary-button\" (click)=\"submitForm()\" [disable]=\"!areRequiredPropertiesFilled()\"\n text=\"Save\"></verbena-button>\n </div>\n </div>\n\n <!-- Empty state template -->\n <ng-template #emptyState>\n <p class=\"mt-4 p-4 text-gray-600 text-center\">\n No entries available for the selected form group.\n </p>\n </ng-template>\n </div>\n</ng-template>\n", styles: [".view-links{color:#3479e9;cursor:pointer}\n"] }]
349
360
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.MyQueueFacade }], propDecorators: { user: [{
350
361
  type: Input
362
+ }], popups: [{
363
+ type: ViewChildren,
364
+ args: ['popup']
351
365
  }] } });
352
366
  var ActionType;
353
367
  (function (ActionType) {
@@ -360,4 +374,4 @@ var ActionType;
360
374
  ActionType["UnfollowTask"] = "UnfollowTask";
361
375
  ActionType["SkipTo"] = "SkipTo";
362
376
  })(ActionType || (ActionType = {}));
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXktcXVldWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy9teS1xdWV1ZS9teS1xdWV1ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL215LXF1ZXVlL215LXF1ZXVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDeEUsT0FBTyxFQUFTLFFBQVEsRUFBUSxXQUFXLEVBQVEsVUFBVSxFQUFrQixNQUFNLG1DQUFtQyxDQUFDO0FBQ3pILE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7O0FBUWhELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxxQkFBMkI7SUE0RjNDO0lBQWdDO0lBM0ZwRCxTQUFTLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLElBQUksQ0FBVTtJQUN2QixNQUFNLEdBQXlCO1FBQzdCLFVBQVUsRUFBRSxFQUFFLEVBQUUsd0JBQXdCO1FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsbUNBQW1DO1FBQ3JELGNBQWMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6QixRQUFRLEVBQUUsS0FBSztZQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNoQixJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRTtnQkFDSixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ25DLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTthQUN4QztZQUNELFFBQVEsRUFBRSxFQUFFO1NBQ2IsQ0FBQztRQUNGLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3JCLDJCQUEyQjtRQUM3QixDQUFDO0tBQ0YsQ0FBQztJQUVGLGdCQUFnQixHQUFrQixJQUFJLENBQUM7SUFDdkMsZ0JBQWdCLEdBQXNCLElBQUksQ0FBQztJQUMzQyxPQUFPLEdBQVcsRUFBRSxDQUFDO0lBQ3JCLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEMsZUFBZSxHQUFHO1FBQ2hCLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFVLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1FBQ25FLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFVLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1FBQ3RFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFVLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1FBQ3BFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFVLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1FBRXRFO1lBQ0UsS0FBSyxFQUFFLFNBQVM7WUFDaEIsTUFBTSxFQUFFLENBQUMsSUFBVSxFQUFFLEVBQUU7Z0JBQ3JCLHFCQUFxQjtnQkFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLHVCQUF1QjtnQkFDdkIsZ0NBQWdDO2dCQUNoQyx3Q0FBd0M7Z0JBQ3hDLGtCQUFrQjtnQkFDbEIsOERBQThEO2dCQUM5RCwrQkFBK0I7Z0JBQy9CLE1BQU07Z0JBQ04sTUFBTTtnQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JDLHNDQUFzQztZQUN4QyxDQUFDO1lBQ0QsT0FBTyxFQUFFLEtBQUs7U0FDZjtRQUNEO1lBQ0UsS0FBSyxFQUFFLFdBQVc7WUFDbEIsTUFBTSxFQUFFLENBQUMsSUFBVSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELE9BQU8sRUFBRSxLQUFLO1NBQ2Y7UUFDRDtZQUNFLEtBQUssRUFBRSxTQUFTO1lBQ2hCLE1BQU0sRUFBRSxDQUFDLElBQVUsRUFBRSxFQUFFO2dCQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFDRCxPQUFPLEVBQUUsS0FBSztTQUNmO1FBQ0Q7WUFDRSxLQUFLLEVBQUUsV0FBVztZQUNsQixNQUFNLEVBQUUsQ0FBQyxJQUFVLEVBQUUsRUFBRTtnQkFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3BDLENBQUM7WUFDRCxPQUFPLEVBQUUsSUFBSTtTQUNkO1FBQ0QsMkVBQTJFO0tBQzVFLENBQUM7SUFFRixXQUFXLEdBQXFCLEVBQUUsQ0FBQztJQUNuQyxVQUFVLEdBQVksRUFBRSxDQUFDO0lBQ3pCLFNBQVMsR0FBZ0IsSUFBSSxDQUFDO0lBQzlCLE1BQU0sR0FBVyxDQUFDLENBQUM7SUFDbkIsUUFBUSxHQUFhLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFFbkMsYUFBYSxHQUFrQixJQUFJLENBQUM7SUFDcEMsY0FBYyxHQUNaLElBQUksZUFBZSxDQUF3QixJQUFJLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQWdCLElBQUksQ0FBQztJQUVoQyxZQUFvQixHQUFzQixFQUFVLE1BQXFCO1FBQ3ZFLEtBQUssRUFBRSxDQUFDO1FBRFUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBR3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM5QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3ZDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFpQixFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUSxlQUFlO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQWU7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxpRkFBaUY7SUFDakYsaUZBQWlGO0lBQ2pGLElBQUk7SUFFSixLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQWU7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsSUFBVTtRQUN4QixNQUFNLE9BQU8sR0FBRyxFQUFpQyxDQUFDO1FBQ2xELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDckIsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLFdBQVc7Z0JBQ1gsY0FBYztnQkFDZCxhQUFhO2dCQUNiLGVBQWU7YUFDaEIsQ0FBQztZQUNGLE9BQU8sQ0FBQyxJQUFJLENBQ1YsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUMzQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUM1QixDQUNGLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sV0FBVyxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDckUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FDNUIsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxXQUFXLENBQ3BFLENBQ0YsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsSUFBSSxDQUNWLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FDM0MsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDNUIsQ0FDRixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBVTtRQUM1QixPQUFPLGFBQWEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFjO1FBQzdCLG9DQUFvQztRQUNwQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQVUsRUFBRSxLQUE0QjtRQUM3RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxzQkFBc0I7SUFDeEIsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFVLEVBQUUsS0FBMkI7UUFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBRXJDLFFBQVEsTUFBTSxFQUFFLENBQUM7WUFDZixLQUFLLFVBQVUsQ0FBQyxNQUFNO2dCQUNwQix1Q0FBdUM7Z0JBQ3ZDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU07WUFDUixLQUFLLFVBQVUsQ0FBQyxRQUFRO2dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDNUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO29CQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQy9CLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUNSLEtBQUssVUFBVSxDQUFDLFFBQVE7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN4QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN0RCxJQUFJLGNBQWMsRUFBRSxDQUFDO3dCQUNuQixJQUFJLENBQUMsTUFBTTs2QkFDUixRQUFRLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQzs2QkFDM0UsSUFBSSxDQUFDLEdBQUcsRUFBRTs0QkFDVCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzs0QkFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7NEJBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDOzRCQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDL0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN6QixDQUFDLENBQUMsQ0FBQztvQkFDUCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssVUFBVSxDQUFDLE1BQU07Z0JBQ3BCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3RELDREQUE0RDtnQkFDNUQsdUNBQXVDO2dCQUN2QyxrREFBa0Q7Z0JBQ2xELCtEQUErRDtnQkFDL0QsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLE1BQU07eUJBQ1IsTUFBTSxDQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQ3JCLGNBQWMsQ0FBQyxPQUFPLEVBQ3RCLElBQUksRUFDSixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxJQUFJLENBQ1Y7eUJBQ0EsSUFBSSxDQUFDLEdBQUcsRUFBRTt3QkFDVCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzt3QkFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO3dCQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDL0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN6QixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUNELE1BQU07WUFDUjtnQkFDRSxNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM1QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLE1BQU07aUJBQ1IsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztpQkFDckMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztnQkFDNUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM1QywyQ0FBMkM7WUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUE0QjtRQUNqQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RELG1EQUFtRDtRQUNuRCxrREFBa0Q7UUFDbEQseUNBQXlDO1FBQ3pDLHNEQUFzRDtRQUN0RCxJQUFJLGNBQWMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsTUFBTTtpQkFDUixNQUFNLENBQ0wsY0FBYyxFQUNkLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLElBQUksQ0FDVjtpQkFDQSxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUUvQixJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNWLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFRCwyQkFBMkI7UUFDekIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFFMUUscURBQXFEO1FBQ3JELCtDQUErQztRQUMvQywyQkFBMkI7UUFDM0IsYUFBYTtRQUNiLDhCQUE4QjtRQUM5Qix1Q0FBdUM7UUFDdkMsbUNBQW1DO1FBQ25DLCtCQUErQjtRQUMvQixPQUFPO1FBQ1AsTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQVU7UUFDL0IsTUFBTSxjQUFjLEdBQUcsS0FBdUIsQ0FBQztRQUMvQyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDaEQsMkNBQTJDO1lBQzNDLGNBQWM7WUFDZCxpRUFBaUU7WUFDakUsMkJBQTJCO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRVEsYUFBYSxDQUFDLEtBQXNDO1FBQzNELFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLEtBQUssUUFBUTtnQkFDWCxJQUFJLE9BQU8sR0FBUyxJQUFJLFNBQVMsQ0FBQztvQkFDaEMsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtvQkFDekIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osWUFBWSxFQUFFLElBQUk7b0JBQ2xCLFlBQVksRUFBRSxFQUFFO29CQUNoQixhQUFhLEVBQUUsRUFBRTtvQkFDakIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO2lCQUMzQixDQUFvQixDQUFDO2dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkMsK0JBQStCO2dCQUMvQixxQkFBcUI7Z0JBQ3JCLGFBQWE7Z0JBQ2Isb0JBQW9CO2dCQUNwQixjQUFjO2dCQUNkLGtCQUFrQjtnQkFDbEIsS0FBSztnQkFDTCw0Q0FBNEM7Z0JBQzVDLGdDQUFnQztnQkFDaEMsa0NBQWtDO2dCQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLE1BQU07WUFDUixpQkFBaUI7WUFDakIsbUNBQW1DO1lBQ25DLFdBQVc7WUFDWCxlQUFlO1lBQ2YsaUNBQWlDO1lBQ2pDLFdBQVc7WUFDWCxpQkFBaUI7WUFDakIsbUNBQW1DO1lBQ25DLFdBQVc7WUFDWDtnQkFDRSxNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7d0dBblhVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLDZTQUZoQixDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDLGlEQ2YxRCx5OGRBOFpBOzs0RkQ3WWEsZ0JBQWdCO2tCQU41QixTQUFTOytCQUNFLGNBQWMsYUFHYixDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDO2tIQUkvQyxJQUFJO3NCQUFaLEtBQUs7O0FBb1hSLElBQUssVUFTSjtBQVRELFdBQUssVUFBVTtJQUNiLG1DQUFxQixDQUFBO0lBQ3JCLHVDQUF5QixDQUFBO0lBQ3pCLG1DQUFxQixDQUFBO0lBQ3JCLCtCQUFpQixDQUFBO0lBQ2pCLG1DQUFxQixDQUFBO0lBQ3JCLHVDQUF5QixDQUFBO0lBQ3pCLDJDQUE2QixDQUFBO0lBQzdCLCtCQUFpQixDQUFBO0FBQ25CLENBQUMsRUFUSSxVQUFVLEtBQVYsVUFBVSxRQVNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgaW5wdXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFZlcmJlblBvcFVwQ29tcG9uZW50IH0gZnJvbSAndmVyYmVuLW5nLXVpJztcbmltcG9ydCB7IFRhc2tNb2RlbCB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvdGFza3MnO1xuaW1wb3J0IHsgQWN0b3IsIERhdGFUeXBlLCBGb3JtLCBPYmplY3RTdGF0ZSwgVGFzaywgVGFza1N0YXR1cywgV29ya2Zsb3dBY3Rpb24gfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgQmFzZURhdGFWaWV3Q29tcG9uZW50LCBEYXRhVmlld0NvbmZpZyB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL3NoYXJlZCc7XG5pbXBvcnQgeyBjb2x1bW5zIH0gZnJvbSAnLi9teS1xdWV1ZS5jb2x1bW5zJztcbmltcG9ydCB7IE15UXVldWVGYWNhZGUgfSBmcm9tICcuL215LXF1ZXVlLmZhY2FkZSc7XG5pbXBvcnQgeyBNeVF1ZXVlU2VydmljZSB9IGZyb20gJy4vbXktcXVldWUuc2VydmljZSc7XG5pbXBvcnQgeyBNeVF1ZXVlU3RhdGUgfSBmcm9tICcuL215LXF1ZXVlLnN0YXRlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW15LXF1ZXVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL215LXF1ZXVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL215LXF1ZXVlLmNvbXBvbmVudC5jc3MnLFxuICBwcm92aWRlcnM6IFtNeVF1ZXVlU2VydmljZSwgTXlRdWV1ZVN0YXRlLCBNeVF1ZXVlRmFjYWRlXSxcbn0pXG5leHBvcnQgY2xhc3MgTXlRdWV1ZUNvbXBvbmVudCBleHRlbmRzIEJhc2VEYXRhVmlld0NvbXBvbmVudDxUYXNrPiB7XG4gIGlzR2VuZXJhbCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgQElucHV0KCkgdXNlciE6IHN0cmluZztcbiAgY29uZmlnOiBEYXRhVmlld0NvbmZpZzxUYXNrPiA9IHtcbiAgICBkYXRhU291cmNlOiBbXSwgLy8gUG9wdWxhdGUgZnJvbSBzZXJ2aWNlXG4gICAgY29sdW1uczogY29sdW1ucywgLy8gWW91ciBleGlzdGluZyBjb2x1bW4gZGVmaW5pdGlvbnNcbiAgICBjYXJkRGF0YU1hcHBlcjogKHRhc2spID0+ICh7XG4gICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICB0aXRsZTogdGFzay5OYW1lLFxuICAgICAgZGF0YTogdGFzayxcbiAgICAgIGJvZHk6IFtcbiAgICAgICAgeyB0aXRsZTogJ05hbWUnLCB2YWx1ZTogdGFzay5OYW1lIH0sXG4gICAgICAgIHsgdGl0bGU6ICdTdGF0dXMnLCB2YWx1ZTogdGFzay5TdGF0dXMgfSxcbiAgICAgIF0sXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgfSksXG4gICAgb25EZXRhaWxWaWV3OiAodGFzaykgPT4ge1xuICAgICAgLy8gQ3VzdG9tIGRldGFpbCB2aWV3IGxvZ2ljXG4gICAgfSxcbiAgfTtcblxuICBzZWxlY3RlZFRhc2tDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgYWN0aXZlQWN0aW9uVHlwZTogQWN0aW9uVHlwZSB8IG51bGwgPSBudWxsO1xuICBjb21tZW50OiBzdHJpbmcgPSAnJztcbiAgaXNNb2RhbFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICB0YWJsZVJvd0FjdGlvbnMgPSBbXG4gICAgeyBsYWJlbDogJ1BpY2sgVGFzaycsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHsgfSwgZGl2aWRlcjogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnUmVsZWFzZSBUYXNrJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4geyB9LCBkaXZpZGVyOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdGb2xsb3cgVGFzaycsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHsgfSwgZGl2aWRlcjogdHJ1ZSB9LFxuICAgIHsgbGFiZWw6ICdVbmZvbGxvdyBUYXNrJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4geyB9LCBkaXZpZGVyOiB0cnVlIH0sXG5cbiAgICB7XG4gICAgICBsYWJlbDogJ1Bhc3MgT24nLFxuICAgICAgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25UeXBlID0gQWN0aW9uVHlwZS5QYXNzT247XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSA9IGRhdGEuQ29kZTtcbiAgICAgICAgdGhpcy5mYWNhZGUubG9hZE5leHRBY3Rpb25zKGRhdGEuQ29kZSk7XG4gICAgICAgIC8vIC50aGVuKChhY3Rpb25zKSA9PiB7XG4gICAgICAgIC8vICAgaWYgKGFjdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uID0gYWN0aW9uc1swXTtcbiAgICAgICAgLy8gICAgIHRoaXMuZmFjYWRlXG4gICAgICAgIC8vICAgICAgIC5sb2FkTmV4dEFjdG9ycyhkYXRhLkNvZGUsIHRoaXMuc2VsZWN0ZWRBY3Rpb24/LkNvZGUpXG4gICAgICAgIC8vICAgICAgIC50aGVuKChhY3RvcnMpID0+IHt9KTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH0pO1xuICAgICAgICB0aGlzLmZhY2FkZS5sb2FkVGFza0Zvcm1zKGRhdGEuQ29kZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSk7XG4gICAgICB9LFxuICAgICAgZGl2aWRlcjogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ1Bhc3MgQmFjaycsXG4gICAgICBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uVHlwZSA9IEFjdGlvblR5cGUuUGFzc0JhY2s7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSA9IGRhdGEuQ29kZTtcbiAgICAgICAgdGhpcy5mYWNhZGUubG9hZFByZXZpb3VzQWN0aW9ucyhkYXRhLkNvZGUpO1xuICAgICAgfSxcbiAgICAgIGRpdmlkZXI6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdTa2lwIFRvJyxcbiAgICAgIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25UeXBlID0gQWN0aW9uVHlwZS5Ta2lwVG87XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSA9IGRhdGEuQ29kZTtcbiAgICAgICAgdGhpcy5mYWNhZGUubG9hZEFsbFByZXZpb3VzQWN0aW9ucyhkYXRhLkNvZGUpO1xuICAgICAgfSxcbiAgICAgIGRpdmlkZXI6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdSZS1Bc3NpZ24nLFxuICAgICAgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge1xuICAgICAgICB0aGlzLmFjdGl2ZUFjdGlvblR5cGUgPSBBY3Rpb25UeXBlLlJlQXNzaWduO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFza0NvZGUgPSBkYXRhLkNvZGU7XG4gICAgICB9LFxuICAgICAgZGl2aWRlcjogdHJ1ZSxcbiAgICB9LFxuICAgIC8vIHsgbGFiZWw6ICdWaWV3IE9wZXJhdGlvbicsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHt9LCBkaXZpZGVyOiBmYWxzZSB9LFxuICBdO1xuXG4gIG5leHRBY3Rpb25zOiBXb3JrZmxvd0FjdGlvbltdID0gW107XG4gIG5leHRBY3RvcnM6IEFjdG9yW10gPSBbXTtcbiAgc3RhZ2VGb3JtOiBGb3JtIHwgbnVsbCA9IG51bGw7XG4gIGFjdGl2ZTogbnVtYmVyID0gMDtcbiAgZGF0YVR5cGU6IERhdGFUeXBlID0gRGF0YVR5cGUuVGV4dDtcblxuICByZWNpcGllbnRDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0ZWRBY3Rpb246IEJlaGF2aW9yU3ViamVjdDxXb3JrZmxvd0FjdGlvbiB8IG51bGw+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PFdvcmtmbG93QWN0aW9uIHwgbnVsbD4obnVsbCk7XG4gIGN1cnJlbnRUYXNrOiBUYXNrIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIGZhY2FkZTogTXlRdWV1ZUZhY2FkZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmZhY2FkZS5nZXRSZXF1ZXN0cyQoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZGF0YS5zZXQoZGF0YSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZhY2FkZS5nZXROZXh0QWN0aW9ucyQoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMubmV4dEFjdGlvbnMgPSBkYXRhO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mYWNhZGUuZ2V0TmV4dEFjdG9ycyQoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMubmV4dEFjdG9ycyA9IGRhdGE7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZhY2FkZS5nZXRUYXNrRm9ybXMkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLnN0YWdlRm9ybSA9IGRhdGE/LlswXSB8fCBudWxsO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zZWxlY3RlZEFjdGlvbi5zdWJzY3JpYmUoKGFjdGlvbikgPT4ge1xuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICB0aGlzLmZhY2FkZS5sb2FkTmV4dEFjdG9ycyh0aGlzLnNlbGVjdGVkVGFza0NvZGUhLCBmYWxzZSwgYWN0aW9uLlRvU3RhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uZXh0QWN0b3JzID0gW107XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBsb2FkSW5pdGlhbERhdGEoKSB7XG4gICAgdGhpcy5mYWNhZGUudXBkYXRlUXVlcnlQYXJhbXMoeyB1c2VyOiB0aGlzLnVzZXIgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZmFjYWRlLmxvYWRSZXF1ZXN0cygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvLyBwcm90ZWN0ZWQgZ2V0Q2FyZERhdGFCeUlkZW50aWZpZXIobWFpbEFkZHJlc3M6IHN0cmluZyk6IENhcmREYXRhIHwgdW5kZWZpbmVkIHtcbiAgLy8gICByZXR1cm4gdGhpcy5jYXJkRGF0YSgpLmZpbmQoKHsgZGF0YSB9KSA9PiBkYXRhLk1haWxBZGRyZXNzID09PSBtYWlsQWRkcmVzcyk7XG4gIC8vIH1cblxuICBhc3luYyBsb2FkTW9yZSgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5mYWNhZGUubG9hZE1vcmUoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIGVycm9yXG4gICAgfVxuICB9XG5cbiAgZ2V0VGFibGVBY3Rpb25zKHRhc2s6IFRhc2spIHtcbiAgICBjb25zdCBhY3Rpb25zID0gW10gYXMgdHlwZW9mIHRoaXMudGFibGVSb3dBY3Rpb25zO1xuICAgIGlmICh0aGlzLmlzR2VuZXJhbCgpKSB7XG4gICAgICBjb25zdCBhY3Rpb25OYW1lcyA9IFtcbiAgICAgICAgJ1BpY2sgVGFzaycsXG4gICAgICAgICdSZWxlYXNlIFRhc2snLFxuICAgICAgICAnRm9sbG93IFRhc2snLFxuICAgICAgICAnVW5mb2xsb3cgVGFzaycsXG4gICAgICBdO1xuICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICAuLi50aGlzLnRhYmxlUm93QWN0aW9ucy5maWx0ZXIoKHsgbGFiZWwgfSkgPT5cbiAgICAgICAgICBhY3Rpb25OYW1lcy5pbmNsdWRlcyhsYWJlbClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWN0aW9uTmFtZXMgPSBbJ1Bhc3MgT24nLCAnUGFzcyBCYWNrJywgJ1NraXAgVG8nLCAnUmUtQXNzaWduJ107XG4gICAgICBpZiAodGFzay5GdWxsU3RhZ2VzPy5bMF0/LklzRW50cnlQb2ludCkge1xuICAgICAgICBhY3Rpb25zLnB1c2goXG4gICAgICAgICAgLi4udGhpcy50YWJsZVJvd0FjdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKHsgbGFiZWwgfSkgPT4gYWN0aW9uTmFtZXMuaW5jbHVkZXMobGFiZWwpICYmIGxhYmVsICE9PSAnUGFzcyBCYWNrJ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbnMucHVzaChcbiAgICAgICAgICAuLi50aGlzLnRhYmxlUm93QWN0aW9ucy5maWx0ZXIoKHsgbGFiZWwgfSkgPT5cbiAgICAgICAgICAgIGFjdGlvbk5hbWVzLmluY2x1ZGVzKGxhYmVsKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfVxuXG4gIGdyb3VwQnlXb3JrZmxvd0NvZGUodGFzazogVGFzaykge1xuICAgIHJldHVybiBgV29ya2Zsb3c6ICR7dGFzay5Xb3JrZmxvd0NvZGV9YDtcbiAgfVxuXG4gIGhhbmRsZVBvcHVwQ2xvc2UoZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICAvLyBjb25zb2xlLmxvZygnQ2xvc2luZy4uLicsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGb3JGb3JtVGhlblBhc3NPbih0YXNrOiBUYXNrLCBwb3B1cD86IFZlcmJlblBvcFVwQ29tcG9uZW50KSB7XG4gICAgdGhpcy5jdXJyZW50VGFzayA9IHRhc2s7XG5cbiAgICBpZiAodGhpcy5zdGFnZUZvcm0pIHtcbiAgICAgIHBvcHVwPy50b2dnbGVEcm9wZG93bigpO1xuICAgICAgdGhpcy5pc01vZGFsVmlzaWJsZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFzc09uKHBvcHVwKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzLnBhc3NPbihwb3B1cCk7XG4gIH1cblxuICBoYW5kbGVBY3Rpb24odGFzazogVGFzaywgcG9wdXA6IFZlcmJlblBvcFVwQ29tcG9uZW50KSB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5hY3RpdmVBY3Rpb25UeXBlO1xuXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5QYXNzT246XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdQYXNzIE9uIEFjdGlvbicsIHRhc2spO1xuICAgICAgICB0aGlzLmNoZWNrRm9yRm9ybVRoZW5QYXNzT24odGFzaywgcG9wdXApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5SZUFzc2lnbjpcbiAgICAgICAgdGhpcy5mYWNhZGUucmVBc3NpZ24odGFzaywgdGhpcy5jb21tZW50LCB0aGlzLnVzZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29tbWVudCA9ICcnO1xuICAgICAgICAgIHRoaXMubmV4dEFjdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLnJlY2lwaWVudENvZGUgPSBudWxsO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24ubmV4dChudWxsKTtcbiAgICAgICAgICBwb3B1cC50b2dnbGVEcm9wZG93bigpO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuUGFzc0JhY2s6XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQWN0aW9uKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRBY3Rpb24gPSB0aGlzLnNlbGVjdGVkQWN0aW9uLmdldFZhbHVlKCk7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkQWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmZhY2FkZVxuICAgICAgICAgICAgICAucGFzc0JhY2soc2VsZWN0ZWRBY3Rpb24sIHRhc2ssIHRoaXMuY29tbWVudCwgdGhpcy5yZWNpcGllbnRDb2RlLCB0aGlzLnVzZXIpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRBY3Rpb25zID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgcG9wdXAudG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBY3Rpb25UeXBlLlNraXBUbzpcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRBY3Rpb24gPSB0aGlzLnNlbGVjdGVkQWN0aW9uLmdldFZhbHVlKCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBBY3Rpb24gZm9yIFNraXA6Jywgc2VsZWN0ZWRBY3Rpb24pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnVGFzayBmb3IgU2tpcDonLCB0YXNrKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ0NvbW1lbnQgZm9yIFNraXA6JywgdGhpcy5jb21tZW50KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1JlY2lwaWVudCBDb2RlIGZvciBTa2lwOicsIHRoaXMucmVjaXBpZW50Q29kZSk7XG4gICAgICAgIGlmIChzZWxlY3RlZEFjdGlvbikge1xuICAgICAgICAgIHRoaXMuZmFjYWRlXG4gICAgICAgICAgICAuc2tpcFRvKFxuICAgICAgICAgICAgICB0YXNrLkN1cnJlbnRTdGFnZXNbMF0sXG4gICAgICAgICAgICAgIHNlbGVjdGVkQWN0aW9uLlRvU3RhZ2UsXG4gICAgICAgICAgICAgIHRhc2ssXG4gICAgICAgICAgICAgIHRoaXMuY29tbWVudCxcbiAgICAgICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlLFxuICAgICAgICAgICAgICB0aGlzLnVzZXJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gJyc7XG4gICAgICAgICAgICAgIHRoaXMubmV4dEFjdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbi5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICBwb3B1cC50b2dnbGVEcm9wZG93bigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzdWJtaXRGb3JtKCkge1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLnN0YWdlRm9ybTtcbiAgICBpZiAoZm9ybSAmJiB0aGlzLmN1cnJlbnRUYXNrKSB7XG4gICAgICB0aGlzLmZhY2FkZVxuICAgICAgICAuZmlsbEZvcm0oZm9ybSwgdGhpcy5jdXJyZW50VGFzay5Db2RlKVxuICAgICAgICAudGhlbigoZmlsbGVkRm9ybSkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhZ2VGb3JtID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmlzTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5wYXNzT24oKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZpbGxpbmcgZm9ybTonLCBlcnJvcik7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yIChlLmcuLCBzaG93IGEgbm90aWZpY2F0aW9uKVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwYXNzT24ocG9wdXA/OiBWZXJiZW5Qb3BVcENvbXBvbmVudCkge1xuICAgIGNvbnN0IHNlbGVjdGVkQWN0aW9uID0gdGhpcy5zZWxlY3RlZEFjdGlvbi5nZXRWYWx1ZSgpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBBY3Rpb246Jywgc2VsZWN0ZWRBY3Rpb24pO1xuICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50IFRhc2s6JywgdGhpcy5jdXJyZW50VGFzayk7XG4gICAgLy8gY29uc29sZS5sb2coJ0NvbW1lbnQ6JywgdGhpcy5jb21tZW50KTtcbiAgICAvLyBjb25zb2xlLmxvZygnUmVjaXBpZW50IENvZGU6JywgdGhpcy5yZWNpcGllbnRDb2RlKTtcbiAgICBpZiAoc2VsZWN0ZWRBY3Rpb24gJiYgdGhpcy5jdXJyZW50VGFzayAmJiB0aGlzLmNvbW1lbnQpIHtcbiAgICAgIHRoaXMuZmFjYWRlXG4gICAgICAgIC5wYXNzT24oXG4gICAgICAgICAgc2VsZWN0ZWRBY3Rpb24sXG4gICAgICAgICAgdGhpcy5jdXJyZW50VGFzayxcbiAgICAgICAgICB0aGlzLmNvbW1lbnQsXG4gICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlLFxuICAgICAgICAgIHRoaXMudXNlclxuICAgICAgICApXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbW1lbnQgPSAnJztcbiAgICAgICAgICB0aGlzLm5leHRBY3Rpb25zID0gW107XG4gICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uLm5leHQobnVsbCk7XG5cbiAgICAgICAgICBpZiAocG9wdXApIHtcbiAgICAgICAgICAgIHBvcHVwLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhcmVSZXF1aXJlZFByb3BlcnRpZXNGaWxsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuc3RhZ2VGb3JtPy5FbnRpdGllc1t0aGlzLmFjdGl2ZV0uUHJvcGVydGllcyB8fCBbXTtcblxuICAgIC8vIENoZWNrIGlmIGFsbCByZXF1aXJlZCBwcm9wZXJ0aWVzIGhhdmUgdmFsaWQgdmFsdWVzXG4gICAgLy8gcmV0dXJuIHByb3BlcnRpZXMuZXZlcnkoKHByb3BlcnR5OiBhbnkpID0+IHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKHByb3BlcnR5KTtcbiAgICAvLyAgIHJldHVybiAoXG4gICAgLy8gICAgICFwcm9wZXJ0eS5pc1JlcXVpcmVkIHx8XG4gICAgLy8gICAgIChwcm9wZXJ0eS5WYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgLy8gICAgICAgcHJvcGVydHkuVmFsdWUgIT09IG51bGwgJiZcbiAgICAvLyAgICAgICBwcm9wZXJ0eS5WYWx1ZSAhPT0gJycpXG4gICAgLy8gICApO1xuICAgIC8vIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25BY3Rpb25Ecm9wRG93bkNoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRBY3Rpb24gPSBldmVudCBhcyBXb3JrZmxvd0FjdGlvbjtcbiAgICBpZiAoc2VsZWN0ZWRBY3Rpb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBBY3Rpb246Jywgc2VsZWN0ZWRBY3Rpb24pO1xuICAgICAgLy8gLy8gdGhpcy5zZWxlY3RlZEFjdGlvbiA9IHNlbGVjdGVkQWN0aW9uO1xuICAgICAgLy8gdGhpcy5mYWNhZGVcbiAgICAgIC8vICAgLmxvYWROZXh0QWN0b3JzKHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSEsIHNlbGVjdGVkQWN0aW9uLkNvZGUpXG4gICAgICAvLyAgIC50aGVuKChhY3RvcnMpID0+IHt9KTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBvblN0YXRlQ2hhbmdlKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ2NyZWF0ZSc6XG4gICAgICAgIHZhciBuZXdJdGVtOiBUYXNrID0gbmV3IFRhc2tNb2RlbCh7XG4gICAgICAgICAgV29ya2Zsb3dDb2RlOiAnJyxcbiAgICAgICAgICBTdGF0dXM6IFRhc2tTdGF0dXMuQWN0aXZlLFxuICAgICAgICAgIEZsb3dhYmxlOiAnJyxcbiAgICAgICAgICBGbG93YWJsZURhdGE6IG51bGwsXG4gICAgICAgICAgRmxvd2FibGVQYXRoOiAnJyxcbiAgICAgICAgICBDdXJyZW50QWN0b3JzOiBbXSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgfSkgYXMgdW5rbm93biBhcyBUYXNrO1xuICAgICAgICB0aGlzLmZhY2FkZS5hZGROZXdSZXF1ZXN0KG5ld0l0ZW0pO1xuICAgICAgICAvLyBjb25zdCBjYXJkRGF0YTogQ2FyZERhdGEgPSB7XG4gICAgICAgIC8vICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAvLyAgIHRpdGxlOiAsXG4gICAgICAgIC8vICAgZGF0YTogbmV3R3JvdXAsXG4gICAgICAgIC8vICAgYm9keTogW10sXG4gICAgICAgIC8vICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAvLyB9O1xuICAgICAgICAvLyB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KFtuZXdHcm91cF0pO1xuICAgICAgICAvLyB0aGlzLmNhcmREYXRhLnB1c2goY2FyZERhdGEpO1xuICAgICAgICAvLyB0aGlzLnVzZXJDYXJkQ2xpY2tlZChjYXJkRGF0YSk7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuaXNUYWJsZVZpZXcgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBjYXNlICdmaWx0ZXInOlxuICAgICAgLy8gICB0aGlzLnNob3dGaWx0ZXIgPSBldmVudC52YWx1ZTtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICAvLyBjYXNlICdzb3J0JzpcbiAgICAgIC8vICAgdGhpcy5zaG93U29ydCA9IGV2ZW50LnZhbHVlO1xuICAgICAgLy8gICBicmVhaztcbiAgICAgIC8vIGNhc2UgJ2NvbHVtbic6XG4gICAgICAvLyAgIHRoaXMuc2hvd0NvbHVtbiA9IGV2ZW50LnZhbHVlO1xuICAgICAgLy8gICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5lbnVtIEFjdGlvblR5cGUge1xuICBQaWNrVGFzayA9ICdQaWNrVGFzaycsXG4gIFVuUGlja1Rhc2sgPSAnVW5QaWNrVGFzaycsXG4gIFJlQXNzaWduID0gJ1JlQXNzaWduJyxcbiAgUGFzc09uID0gJ1Bhc3NPbicsXG4gIFBhc3NCYWNrID0gJ1Bhc3NCYWNrJyxcbiAgRm9sbG93VGFzayA9ICdGb2xsb3dUYXNrJyxcbiAgVW5mb2xsb3dUYXNrID0gJ1VuZm9sbG93VGFzaycsXG4gIFNraXBUbyA9ICdTa2lwVG8nLFxufVxuIiwiPGRpdiBjbGFzcz1cInNwYWNlLXktOFwiPlxuICA8dmVyYmVuLWRhdGEtdmlld1xuICAgICN2ZHZcbiAgICBbdmlld1N0YXRlXT1cIntcbiAgICAgIGlzU2VhcmNoOiB0cnVlLFxuICAgICAgaXNDb2x1bW46IHRydWUsXG4gICAgICBpc0ZpbHRlcjogdHJ1ZSxcbiAgICAgIGlzU29ydDogdHJ1ZSxcbiAgICAgIGlzRXhwb3J0OiB0cnVlLFxuICAgICAgaXNTZWxlY3Q6IHRydWUsXG4gICAgICBpc0NyZWF0ZTogaXNHZW5lcmFsKCksXG4gICAgICBpc1RvZ2dsZTogdHJ1ZSxcbiAgICB9XCJcbiAgICBbYnV0dG9uQ2xhc3NdPVwiJ215LWN1c3RvbS1idXR0b24tY2xhc3MnXCJcbiAgICBbaWNvbkNsYXNzXT1cIidteS1pY29uLWNsYXNzJ1wiXG4gICAgW2FjdGl2ZUljb25DbGFzc109XCInbXktYWN0aXZlLWljb24tY2xhc3MnXCJcbiAgICBbc2VsZWN0ZWRDb2x1bW5Db3VudF09XCIwXCJcbiAgICBbc2VsZWN0ZWRTb3J0Q291bnRdPVwiMFwiXG4gICAgW3NlbGVjdGVkRmlsdGVyVGFibGVDb3VudF09XCIwXCJcbiAgICAodmlld0NoYW5nZSk9XCJvblZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHN0YXRlQ2hhbmdlKT1cIm9uU3RhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gID5cbiAgICA8ZGl2IHRhYmxlLWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtdGFibGVcbiAgICAgICAgW2RhdGFdPVwiZGF0YSgpXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIlxuICAgICAgICBbc3R5bGVDb25maWddPVwic3R5bGVzXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2dyb3VwQnldPVwiZ3JvdXBCeVdvcmtmbG93Q29kZVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiaGlzdG9yeVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtdmFsdWUgbGV0LWRlbGV0ZVJvdz5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL3dvcmtmbG93L3Rhc2staGlzdG9yeScsIHZhbHVlXVwiXG4gICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInVuZGVybGluZSB0ZXh0LVsjMDAwMEZGXVwiXG4gICAgICAgICAgICAgID52aWV3IGhpc3Rvcnk8L2FcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cIndvcmtmbG93XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL3dvcmtmbG93L3dvcmtmbG93cycsIHZhbHVlXVwiXG4gICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInVuZGVybGluZSB0ZXh0LVsjMDAwMEZGXVwiXG4gICAgICAgICAgICAgID52aWV3IFdvcmtmbG93PC9hXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJhY3Rpb25zXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwXG4gICAgICAgICAgICAgICNwb3B1cFxuICAgICAgICAgICAgICBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnOTknIH1cIlxuICAgICAgICAgICAgICBbZW5hYmxlTW91c2VMZWF2ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtjdXN0b21TdHlsZXNdPVwie1xuICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZDRhMTA3ODAnLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzVweCcsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAoZHJvcGRvd25PcGVuQ2hhbmdlKT1cImhhbmRsZVBvcHVwQ2xvc2UoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgZHJvcGRvd24tdHJpZ2dlclxuICAgICAgICAgICAgICAgIGljb249XCJkb3RzXCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiNFwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCIyNFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB3LWF1dG9cIlxuICAgICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgcm91bmRlZC1zbVwiIGRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZFRhc2tDb2RlICYmIGFjdGl2ZUFjdGlvblR5cGUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDE2cmVtXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQganVzdGlmeS1iZXR3ZWVuIGgtMTIgcHgtMiBwdC00XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZyBvcGFjaXR5PVwiMC42XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuNzQ2NDkgOC4wMDMzOEM2LjkxNDgzIDguMTM0NyA3LjAyNTIgOC4yMDQ1NSA3LjExNTMxIDguMjkzOTZDNy45ODg0NiA5LjE2MjIyIDguODU3NDIgMTAuMDM0NyA5LjcyOTE3IDEwLjkwNUM5Ljg3MTY3IDExLjA0NzUgOS45OTM5MSAxMS4xOTIxIDkuOTkzMjEgMTEuNDEyOUM5Ljk5MjUxIDExLjY0NjIgOS44OTQ3MiAxMS44MTUyIDkuNjk1NjQgMTEuOTI1NkM5LjQ5MzA3IDEyLjAzOCA5LjI5MjYgMTIuMDIwNiA5LjEwNDY5IDExLjg4OTlDOS4wMzgzMyAxMS44NDM4IDguOTgxNzUgMTEuNzg0NSA4LjkyMzc4IDExLjcyNzJDNy44NTU3NCAxMC42NTkyIDYuNzk2NzggOS41ODIwMyA1LjcxNDc3IDguNTI4NjdDNS4zNzExIDguMTk0MDcgNS4zODQzNyA3Ljc5MTczIDUuNzA3NzkgNy40NzU5OUM2Ljc4ODQgNi40MjEyMyA3Ljg0ODc1IDUuMzQ1NTEgOC45MTUzOSA0LjI3NjA3QzkuMTEzNzcgNC4wNzc2OSA5LjMyMDU0IDMuOTIyNjIgOS42MjMgNC4wNDEzN0M5Ljk3OTI0IDQuMTgxMDcgMTAuMTEyIDQuNTg5MDEgOS44OTQ3MiA0LjkwMzM1QzkuODI5NzYgNC45OTc2NSA5Ljc0MTc0IDUuMDc3MjggOS42NjAwMiA1LjE1OTdDOC44MDY0MiA2LjAxNDY5IDcuOTUyODMgNi44Njk2OCA3LjA5NjQ1IDcuNzIyNTdDNy4wMTQ3MiA3LjgwNDMgNi45MTU1MyA3Ljg2ODU2IDYuNzQ1NzkgOC4wMDQwOEw2Ljc0NjQ5IDguMDAzMzhaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cblxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+U2VsZWN0IEFzc2lnbmVlPC9oMz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBnYXAtMiBtYXgtaC05NiBvdmVyZmxvdy15LWF1dG8gcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJBY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG9wdGlvbnMpXT1cIm5leHRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRBY3Rpb24gfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRBY3Rpb24ubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJBY3RvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWN0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgIFsob3B0aW9ucyldPVwibmV4dEFjdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhY3RvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlY2lwaWVudENvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIENvbW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHAtMSB0ZXh0LXhzIGJvcmRlciBib3JkZXItcHJpbWFyeSByb3VuZGVkLW1kXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogOHJlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbHNdPVwiOFwiXG4gICAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxuXG4gICAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cIiFjb21tZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJhY3RpdmVBY3Rpb25UeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKHJvdywgcG9wdXApXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHMgdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBiZ0NvbG9yPVwiI0ZGRTY4MVwiXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dENvbG9yPVwiIzQwNDA0MFwiXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU9XCIxNHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICBwZD1cIjEwcHggMjBweFwiXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIzMnB4XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGl2ZUFjdGlvblR5cGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH0gQGVsc2UgeyBAZm9yIChpdGVtIG9mIGdldFRhYmxlQWN0aW9ucyhyb3cpOyB0cmFjayBpdGVtLmxhYmVsKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXRlbS5hY3Rpb24ocm93KVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHB5LTIgcHgtMyB0ZXh0LXNtIGhvdmVyOmJnLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZGl2aWRlcikge1xuICAgICAgICAgICAgICAgIDxociBjbGFzcz1cImJnLVsjRkZFNjgxXSBoLTEgcm91bmRlZC14bCBib3JkZXItMFwiIC8+XG4gICAgICAgICAgICAgICAgfSB9IH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3ZlcmJlbi1wb3AtVXA+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2hlYWRlcj5cbiAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPkFjdGlvbnM8L3N0cm9uZz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGliLWRhdGEtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjYXJkLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3XG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEycHhcIlxuICAgICAgICAobG9hZE1vcmVDbGljayk9XCJsb2FkTW9yZSgpXCJcbiAgICAgICAgI3ZkY3ZcbiAgICAgICAgZGF0YUlkPVwiSWRcIlxuICAgICAgICBib3JkZXI9XCI1cHhcIlxuICAgICAgICBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhKClcIlxuICAgICAgICByYmdDb2xvcj1cIiNmNWY2ZjlcIlxuICAgICAgICBtZz1cIjIwcHhcIlxuICAgICAgPlxuICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXcgY2xhc3M9XCJzcGFjZS15LTdcIj5cbiAgICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhXG4gICAgICAgICAgICAjdmxjZFxuICAgICAgICAgICAgW3BhcmVudF09XCJ2ZGN2XCJcbiAgICAgICAgICAgIGRhdGFJZD1cIklkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmctc2Vjb25kYXJ5LTEwMCByb3VuZGVkLXhsIGJvcmRlci1wcmltYXJ5IGJvcmRlci1bMXB4XVwiXG4gICAgICAgICAgICBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FyZCBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnREYXRhID0gaXNHZW5lcmFsKCkgPyB2ZGN2Lm9uSXRlbUNsaWNrKGl0ZW0pIDogbnVsbFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudERhdGEgPSBpc0dlbmVyYWwoKSA/IHZkY3Yub25JdGVtQ2xpY2soaXRlbSkgOiBudWxsXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGN1cnNvci1wb2ludGVyIHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBweS0yIHB4LTQgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBnYXAteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1bIzQwNDA0MF1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBob25lXCIgY2xhc3M9XCJ0ZXh0LVsxMHB4XSBmb250LWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+U3RhdHVzOjwvbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cInBob25lXCIgY2xhc3M9XCJ0ZXh0LXNtXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGEuU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZm9yPVwicm9sZVwiIGNsYXNzPVwiZm9udC1saWdodFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0YS5Xb3JrZmxvd0NvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvd29ya2Zsb3cvdGFzay1oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGEuQ29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidW5kZXJsaW5lIHRleHQtWyMwMDAwRkZdIHRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+dmlldyBoaXN0b3J5PC9hXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbm9ybWFsIHRleHQtc21cIj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY2lJdGVtIG9mIGl0ZW0uYm9keTsgdHJhY2sgY2lJdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgZm9udC1saWdodCB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyBjaUl0ZW0udGl0bGUgfX06PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ibGFja1wiPnt7IGNpSXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH0gLS0+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhPlxuICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3PlxuXG4gICAgICAgIDx2ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwYXJlbnQ+XG4gICAgICAgICAgICA8IS0tIDxsaWItdXNlci1yZXF1ZXN0LWZvcm1cbiAgICAgICAgICAgICAgW2N1cnJlbnREYXRhXT1cImN1cnJlbnREYXRhXCJcbiAgICAgICAgICAgICAgKHN3aXRjaFZpZXcpPVwidmR2LnRvZ2dsZVZpZXcoKVwiXG4gICAgICAgICAgICAgIChvbkFwcHJvdmFsKT1cIm9uQXBwcm92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2xpYi11c2VyLXJlcXVlc3QtZm9ybT4gLS0+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC92ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG5cbiAgICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdmbGV4IGdhcC0yIGl0ZW1zLWNlbnRlcic6IHRydWUsXG4gICAgICAgICAgICAgICdqdXN0aWZ5LWVuZCc6IHRydWUsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKClcIlxuICAgICAgICAgICAgICBbZm9udFdlaWdodF09XCInYm9sZCdcIlxuICAgICAgICAgICAgICBbYmdDb2xvcl09XCInIzhFOEQ4NydcIlxuICAgICAgICAgICAgICBbYm9yZGVyUmFkaXVzXT1cIic0cHgnXCJcbiAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCInI2ZmZidcIlxuICAgICAgICAgICAgICBbcGRdPVwiJzkuNzlweCAzNy4yOHB4J1wiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvdmVyYmVuYS1idXR0b24+IC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXgge3tcbiAgICAgICAgICAgICAgICB2ZGN2Lmhhc0N1cnJlbnRJdGVtKCkgPyAnZmxleC0xJyA6ICcnXG4gICAgICAgICAgICAgIH19IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIlxuICAgICAgICAgICAgICAgID57eyBjYXJkRGF0YSgpLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZE1vcmUoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rcyB0ZXh0LVsjMzQ3OUU5XSB1bmRlcmxpbmVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgTG9hZCBtb3JlXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3Rlcj5cbiAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY29sdW1uLWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtY29sdW1uc1xuICAgICAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXG4gICAgICAgIChjb2x1bW5zVXBkYXRlZCk9XCJvbkNvbHVtbnNVcGRhdGVkKCRldmVudClcIlxuICAgICAgPjwvbGliLWRhdGEtY29sdW1ucz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGZpbHRlci1jb250ZW50PlxuICAgICAgPHZlcmJlbi10YWJsZS1maWx0ZXJcbiAgICAgICAgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgICBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCJcbiAgICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgd2lkdGg9XCI0MjBweFwiXG4gICAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgICAgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiXG4gICAgICAgIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiXG4gICAgICAgIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCJcbiAgICAgICAgW2ZpbHRlck9wdGlvbnNdPVwiZmlsdGVyQXJyYXlcIlxuICAgICAgICBbbWF4RmlsdGVyTGVuZ3RoXT1cIjNcIlxuICAgICAgPjwvdmVyYmVuLXRhYmxlLWZpbHRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHNvcnQtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS1zb3J0XG4gICAgICAgIFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCJcbiAgICAgICAgW2RhdGFdPVwiZGF0YSgpXCJcbiAgICAgICAgKHNvcnRBcHBsaWVkKT1cIm9uU29ydFVwZGF0ZWQoJGV2ZW50KVwiXG4gICAgICA+PC9saWItZGF0YS1zb3J0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZXhwb3J0LWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtZXhwb3J0IFtkYXRhXT1cImRhdGEoKVwiIChleHBvcnREYXRhRXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIj5cbiAgICAgIDwvbGliLWRhdGEtZXhwb3J0PlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1kYXRhLXZpZXc+XG5cbiAgPGRpdiAqbmdJZj1cInZkdi5pc1RhYmxlVmlld1wiIGNsYXNzPVwiZmxleCBnYXAtMiBqdXN0aWZ5LWVuZFwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCI+e3sgY2FyZERhdGEoKS5sZW5ndGggfX0gcmVjb3JkcyBsb2FkZWQ8L3NwYW4+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJsb2FkTW9yZSgpXCJcbiAgICAgICAgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rcyB0ZXh0LVsjMzQ3OUU5XSB1bmRlcmxpbmVcIlxuICAgICAgPlxuICAgICAgICBMb2FkIG1vcmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48dmVyYmVuLWRpYWxvZ3VlXG4gIFtzaG93Q2xvc2VJY29uXT1cInRydWVcIlxuICBbZGlzbWlzc091dHNpZGVDbGlja109XCJ0cnVlXCJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwidHJ1ZVwiXG4gIFttb2RlXT1cIidkcmF3ZXInXCJcbiAgW3BhZGRpbmddPVwiJzBweCdcIlxuICBbZHJhd2VyV2lkdGhdPVwiJzQwMHB4J1wiXG4gIFtkaXNhYmxlRm9vdGVyXT1cImZhbHNlXCJcbiAgW2lzVmlzaWJsZV09XCJpc01vZGFsVmlzaWJsZVwiXG4gIFttb2RhbERhdGFdPVwic3RhZ2VGb3JtXCJcbiAgW2hlYWRlclRlbXBsYXRlXT1cImhlYWRlclRlbXBsYXRlXCJcbiAgW2JvZHlUZW1wbGF0ZV09XCJib2R5VGVtcGxhdGVcIlxuICBbc2hvd0Nsb3NlSWNvbl09XCJmYWxzZVwiXG4+XG48L3ZlcmJlbi1kaWFsb2d1ZT5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJiZy1bI0ZGRTY4MV0gcHgtNiBweS00IGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICAgIDxoMT5Gb3JtPC9oMT5cbiAgICA8dmVyYmVuLXN2Z1xuICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICBbaWNvbl09XCInY2xvc2UtY2lyY2xlJ1wiXG4gICAgICAoY2xpY2spPVwiaXNNb2RhbFZpc2libGUgPSBmYWxzZVwiXG4gICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICBbc3Ryb2tlXT1cIicjZmZmJ1wiXG4gICAgPjwvdmVyYmVuLXN2Zz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8ZGl2ICpuZ0lmPVwic3RhZ2VGb3JtPy5FbnRpdGllcz8uW2FjdGl2ZV07IGVsc2UgZW1wdHlTdGF0ZVwiIGNsYXNzPVwibXQtNFwiPlxuICAgICAgPGZvcm0tY29udHJvbFxuICAgICAgICBbZGF0YVR5cGVdPVwiZGF0YVR5cGVcIlxuICAgICAgICBbZm9ybVByb3BlcnRpZXNdPVwic3RhZ2VGb3JtPy5FbnRpdGllcz8uW2FjdGl2ZV0/LlByb3BlcnRpZXMgPz8gW11cIlxuICAgICAgPjwvZm9ybS1jb250cm9sPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMyBqdXN0aWZ5LWVuZFwiPlxuICAgICAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgICBjbGFzcz1cInZlcmJlbi1wcmltYXJ5LWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdEZvcm0oKVwiXG4gICAgICAgICAgW2Rpc2FibGVdPVwiIWFyZVJlcXVpcmVkUHJvcGVydGllc0ZpbGxlZCgpXCJcbiAgICAgICAgICB0ZXh0PVwiU2F2ZVwiXG4gICAgICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVtcHR5IHN0YXRlIHRlbXBsYXRlIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlTdGF0ZT5cbiAgICAgIDxwIGNsYXNzPVwibXQtNCBwLTQgdGV4dC1ncmF5LTYwMCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICBObyBlbnRyaWVzIGF2YWlsYWJsZSBmb3IgdGhlIHNlbGVjdGVkIGZvcm0gZ3JvdXAuXG4gICAgICA8L3A+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXktcXVldWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy9teS1xdWV1ZS9teS1xdWV1ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL215LXF1ZXVlL215LXF1ZXVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWEsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3hFLE9BQU8sRUFBUyxRQUFRLEVBQVEsV0FBVyxFQUFRLFVBQVUsRUFBa0IsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6SCxPQUFPLEVBQUUscUJBQXFCLEVBQWtCLE1BQU0sbUNBQW1DLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7OztBQVFoRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEscUJBQTJCO0lBNkYzQztJQUFnQztJQTVGcEQsU0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN6QixJQUFJLENBQVU7SUFDdkIsTUFBTSxHQUF5QjtRQUM3QixVQUFVLEVBQUUsRUFBRSxFQUFFLHdCQUF3QjtR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LGNBQWM7Z0JBQ2Qsa0JBQWtCO2dCQUNsQixLQUFLO2dCQUNMLDRDQUE0QztnQkFDNUMsZ0NBQWdDO2dCQUNoQyxrQ0FBa0M7Z0JBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDbEMsTUFBTTtZQUNSLGlCQUFpQjtZQUNqQixtQ0FBbUM7WUFDbkMsV0FBVztZQUNYLGVBQWU7WUFDZixpQ0FBaUM7WUFDakMsV0FBVztZQUNYLGlCQUFpQjtZQUNqQixtQ0FBbUM7WUFDbkMsV0FBVztZQUNYO2dCQUNFLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQzt3R0EvWFUsZ0JBQWdCOzRGQUFoQixnQkFBZ0IsNlNBRmhCLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMscUlDZjFELHc5bEJBcVZBOzs0RkRwVWEsZ0JBQWdCO2tCQU41QixTQUFTOytCQUNFLGNBQWMsYUFHYixDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDO2tIQUkvQyxJQUFJO3NCQUFaLEtBQUs7Z0JBa0JpQixNQUFNO3NCQUE1QixZQUFZO3VCQUFDLE9BQU87O0FBOFd2QixJQUFLLFVBU0o7QUFURCxXQUFLLFVBQVU7SUFDYixtQ0FBcUIsQ0FBQTtJQUNyQix1Q0FBeUIsQ0FBQTtJQUN6QixtQ0FBcUIsQ0FBQTtJQUNyQiwrQkFBaUIsQ0FBQTtJQUNqQixtQ0FBcUIsQ0FBQTtJQUNyQix1Q0FBeUIsQ0FBQTtJQUN6QiwyQ0FBNkIsQ0FBQTtJQUM3QiwrQkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBVEksVUFBVSxLQUFWLFVBQVUsUUFTZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGlucHV0LCBJbnB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVmVyYmVuUG9wVXBDb21wb25lbnQgfSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgVGFza01vZGVsIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy90YXNrcyc7XG5pbXBvcnQgeyBBY3RvciwgRGF0YVR5cGUsIEZvcm0sIE9iamVjdFN0YXRlLCBUYXNrLCBUYXNrU3RhdHVzLCBXb3JrZmxvd0FjdGlvbiB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBCYXNlRGF0YVZpZXdDb21wb25lbnQsIERhdGFWaWV3Q29uZmlnIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvc2hhcmVkJztcbmltcG9ydCB7IGNvbHVtbnMgfSBmcm9tICcuL215LXF1ZXVlLmNvbHVtbnMnO1xuaW1wb3J0IHsgTXlRdWV1ZUZhY2FkZSB9IGZyb20gJy4vbXktcXVldWUuZmFjYWRlJztcbmltcG9ydCB7IE15UXVldWVTZXJ2aWNlIH0gZnJvbSAnLi9teS1xdWV1ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE15UXVldWVTdGF0ZSB9IGZyb20gJy4vbXktcXVldWUuc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItbXktcXVldWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbXktcXVldWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbXktcXVldWUuY29tcG9uZW50LmNzcycsXG4gIHByb3ZpZGVyczogW015UXVldWVTZXJ2aWNlLCBNeVF1ZXVlU3RhdGUsIE15UXVldWVGYWNhZGVdLFxufSlcbmV4cG9ydCBjbGFzcyBNeVF1ZXVlQ29tcG9uZW50IGV4dGVuZHMgQmFzZURhdGFWaWV3Q29tcG9uZW50PFRhc2s+IHtcbiAgaXNHZW5lcmFsID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBASW5wdXQoKSB1c2VyITogc3RyaW5nO1xuICBjb25maWc6IERhdGFWaWV3Q29uZmlnPFRhc2s+ID0ge1xuICAgIGRhdGFTb3VyY2U6IFtdLCAvLyBQb3B1bGF0ZSBmcm9tIHNlcnZpY2VcbiAgICBjb2x1bW5zOiBjb2x1bW5zLCAvLyBZb3VyIGV4aXN0aW5nIGNvbHVtbiBkZWZpbml0aW9uc1xuICAgIGNhcmREYXRhTWFwcGVyOiAodGFzaykgPT4gKHtcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgIHRpdGxlOiB0YXNrLk5hbWUsXG4gICAgICBkYXRhOiB0YXNrLFxuICAgICAgYm9keTogW1xuICAgICAgICB7IHRpdGxlOiAnTmFtZScsIHZhbHVlOiB0YXNrLk5hbWUgfSxcbiAgICAgICAgeyB0aXRsZTogJ1N0YXR1cycsIHZhbHVlOiB0YXNrLlN0YXR1cyB9LFxuICAgICAgXSxcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9KSxcbiAgICBvbkRldGFpbFZpZXc6ICh0YXNrKSA9PiB7XG4gICAgICAvLyBDdXN0b20gZGV0YWlsIHZpZXcgbG9naWNcbiAgICB9LFxuICB9O1xuICBAVmlld0NoaWxkcmVuKCdwb3B1cCcpIHBvcHVwcyE6IFF1ZXJ5TGlzdDxWZXJiZW5Qb3BVcENvbXBvbmVudD47XG5cbiAgc2VsZWN0ZWRUYXNrQ29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGFjdGl2ZUFjdGlvblR5cGU6IEFjdGlvblR5cGUgfCBudWxsID0gbnVsbDtcbiAgY29tbWVudDogc3RyaW5nID0gJyc7XG4gIGlzTW9kYWxWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgdGFibGVSb3dBY3Rpb25zID0gW1xuICAgIHsgbGFiZWw6ICdQaWNrIFRhc2snLCBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7IH0sIGRpdmlkZXI6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogJ1JlbGVhc2UgVGFzaycsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHsgfSwgZGl2aWRlcjogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnRm9sbG93IFRhc2snLCBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7IH0sIGRpdmlkZXI6IHRydWUgfSxcbiAgICB7IGxhYmVsOiAnVW5mb2xsb3cgVGFzaycsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHsgfSwgZGl2aWRlcjogdHJ1ZSB9LFxuXG4gICAge1xuICAgICAgbGFiZWw6ICdQYXNzIE9uJyxcbiAgICAgIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uVHlwZSA9IEFjdGlvblR5cGUuUGFzc09uO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFza0NvZGUgPSBkYXRhLkNvZGU7XG4gICAgICAgIHRoaXMuZmFjYWRlLmxvYWROZXh0QWN0aW9ucyhkYXRhLkNvZGUpO1xuICAgICAgICAvLyAudGhlbigoYWN0aW9ucykgPT4ge1xuICAgICAgICAvLyAgIGlmIChhY3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbiA9IGFjdGlvbnNbMF07XG4gICAgICAgIC8vICAgICB0aGlzLmZhY2FkZVxuICAgICAgICAvLyAgICAgICAubG9hZE5leHRBY3RvcnMoZGF0YS5Db2RlLCB0aGlzLnNlbGVjdGVkQWN0aW9uPy5Db2RlKVxuICAgICAgICAvLyAgICAgICAudGhlbigoYWN0b3JzKSA9PiB7fSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KTtcbiAgICAgICAgdGhpcy5mYWNhZGUubG9hZFRhc2tGb3JtcyhkYXRhLkNvZGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVGFza0NvZGUpO1xuICAgICAgfSxcbiAgICAgIGRpdmlkZXI6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdQYXNzIEJhY2snLFxuICAgICAgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge1xuICAgICAgICB0aGlzLmFjdGl2ZUFjdGlvblR5cGUgPSBBY3Rpb25UeXBlLlBhc3NCYWNrO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFza0NvZGUgPSBkYXRhLkNvZGU7XG4gICAgICAgIHRoaXMuZmFjYWRlLmxvYWRQcmV2aW91c0FjdGlvbnMoZGF0YS5Db2RlKTtcbiAgICAgIH0sXG4gICAgICBkaXZpZGVyOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnU2tpcCBUbycsXG4gICAgICBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uVHlwZSA9IEFjdGlvblR5cGUuU2tpcFRvO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFza0NvZGUgPSBkYXRhLkNvZGU7XG4gICAgICAgIHRoaXMuZmFjYWRlLmxvYWRBbGxQcmV2aW91c0FjdGlvbnMoZGF0YS5Db2RlKTtcbiAgICAgIH0sXG4gICAgICBkaXZpZGVyOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnUmUtQXNzaWduJyxcbiAgICAgIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25UeXBlID0gQWN0aW9uVHlwZS5SZUFzc2lnbjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhc2tDb2RlID0gZGF0YS5Db2RlO1xuICAgICAgfSxcbiAgICAgIGRpdmlkZXI6IHRydWUsXG4gICAgfSxcbiAgICAvLyB7IGxhYmVsOiAnVmlldyBPcGVyYXRpb24nLCBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7fSwgZGl2aWRlcjogZmFsc2UgfSxcbiAgXTtcblxuICBuZXh0QWN0aW9uczogV29ya2Zsb3dBY3Rpb25bXSA9IFtdO1xuICBuZXh0QWN0b3JzOiBBY3RvcltdID0gW107XG4gIHN0YWdlRm9ybTogRm9ybSB8IG51bGwgPSBudWxsO1xuICBhY3RpdmU6IG51bWJlciA9IDA7XG4gIGRhdGFUeXBlOiBEYXRhVHlwZSA9IERhdGFUeXBlLlRleHQ7XG5cbiAgcmVjaXBpZW50Q29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkQWN0aW9uOiBCZWhhdmlvclN1YmplY3Q8V29ya2Zsb3dBY3Rpb24gfCBudWxsPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxXb3JrZmxvd0FjdGlvbiB8IG51bGw+KG51bGwpO1xuICBjdXJyZW50VGFzazogVGFzayB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBmYWNhZGU6IE15UXVldWVGYWNhZGUpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5mYWNhZGUuZ2V0UmVxdWVzdHMkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmRhdGEuc2V0KGRhdGEpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mYWNhZGUuZ2V0TmV4dEFjdGlvbnMkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLm5leHRBY3Rpb25zID0gZGF0YTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmFjYWRlLmdldE5leHRBY3RvcnMkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLm5leHRBY3RvcnMgPSBkYXRhO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mYWNhZGUuZ2V0VGFza0Zvcm1zJCgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5zdGFnZUZvcm0gPSBkYXRhPy5bMF0gfHwgbnVsbDtcbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24uc3Vic2NyaWJlKChhY3Rpb24pID0+IHtcbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5mYWNhZGUubG9hZE5leHRBY3RvcnModGhpcy5zZWxlY3RlZFRhc2tDb2RlISwgZmFsc2UsIGFjdGlvbi5Ub1N0YWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubmV4dEFjdG9ycyA9IFtdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgbG9hZEluaXRpYWxEYXRhKCkge1xuICAgIHRoaXMuZmFjYWRlLnVwZGF0ZVF1ZXJ5UGFyYW1zKHsgdXNlcjogdGhpcy51c2VyIH0pO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZhY2FkZS5sb2FkUmVxdWVzdHMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIGVycm9yXG4gICAgfVxuICB9XG5cbiAgLy8gcHJvdGVjdGVkIGdldENhcmREYXRhQnlJZGVudGlmaWVyKG1haWxBZGRyZXNzOiBzdHJpbmcpOiBDYXJkRGF0YSB8IHVuZGVmaW5lZCB7XG4gIC8vICAgcmV0dXJuIHRoaXMuY2FyZERhdGEoKS5maW5kKCh7IGRhdGEgfSkgPT4gZGF0YS5NYWlsQWRkcmVzcyA9PT0gbWFpbEFkZHJlc3MpO1xuICAvLyB9XG5cbiAgYXN5bmMgbG9hZE1vcmUoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZmFjYWRlLmxvYWRNb3JlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGdldFRhYmxlQWN0aW9ucyh0YXNrOiBUYXNrKSB7XG4gICAgY29uc3QgYWN0aW9ucyA9IFtdIGFzIHR5cGVvZiB0aGlzLnRhYmxlUm93QWN0aW9ucztcbiAgICBpZiAodGhpcy5pc0dlbmVyYWwoKSkge1xuICAgICAgY29uc3QgYWN0aW9uTmFtZXMgPSBbXG4gICAgICAgICdQaWNrIFRhc2snLFxuICAgICAgICAnUmVsZWFzZSBUYXNrJyxcbiAgICAgICAgJ0ZvbGxvdyBUYXNrJyxcbiAgICAgICAgJ1VuZm9sbG93IFRhc2snLFxuICAgICAgXTtcbiAgICAgIGFjdGlvbnMucHVzaChcbiAgICAgICAgLi4udGhpcy50YWJsZVJvd0FjdGlvbnMuZmlsdGVyKCh7IGxhYmVsIH0pID0+XG4gICAgICAgICAgYWN0aW9uTmFtZXMuaW5jbHVkZXMobGFiZWwpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFjdGlvbk5hbWVzID0gWydQYXNzIE9uJywgJ1Bhc3MgQmFjaycsICdTa2lwIFRvJywgJ1JlLUFzc2lnbiddO1xuICAgICAgaWYgKHRhc2suRnVsbFN0YWdlcz8uWzBdPy5Jc0VudHJ5UG9pbnQpIHtcbiAgICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICAgIC4uLnRoaXMudGFibGVSb3dBY3Rpb25zLmZpbHRlcihcbiAgICAgICAgICAgICh7IGxhYmVsIH0pID0+IGFjdGlvbk5hbWVzLmluY2x1ZGVzKGxhYmVsKSAmJiBsYWJlbCAhPT0gJ1Bhc3MgQmFjaydcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3Rpb25zLnB1c2goXG4gICAgICAgICAgLi4udGhpcy50YWJsZVJvd0FjdGlvbnMuZmlsdGVyKCh7IGxhYmVsIH0pID0+XG4gICAgICAgICAgICBhY3Rpb25OYW1lcy5pbmNsdWRlcyhsYWJlbClcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH1cblxuICBncm91cEJ5V29ya2Zsb3dDb2RlKHRhc2s6IFRhc2spIHtcbiAgICByZXR1cm4gYFdvcmtmbG93OiAke3Rhc2suV29ya2Zsb3dDb2RlfWA7XG4gIH1cblxuICBoYW5kbGVQb3B1cENsb3NlKGV2ZW50OiBib29sZWFuKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ0Nsb3NpbmcuLi4nLCBldmVudCk7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFza0NvZGUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIG9uUG9wdXBUb2dnbGVkKGlzT3BlbjogYm9vbGVhbiwgY3VycmVudFBvcHVwOiBWZXJiZW5Qb3BVcENvbXBvbmVudCkge1xuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIHRoaXMucG9wdXBzLmZvckVhY2goKHBvcHVwKSA9PiB7XG4gICAgICAgIGlmIChwb3B1cCAhPT0gY3VycmVudFBvcHVwICYmIHBvcHVwLmRyb3Bkb3duT3Blbikge1xuICAgICAgICAgIHBvcHVwLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZVBvcHVwQ2xvc2UoIWlzT3Blbik7XG4gIH1cblxuICBjaGVja0ZvckZvcm1UaGVuUGFzc09uKHRhc2s6IFRhc2ssIHBvcHVwPzogVmVyYmVuUG9wVXBDb21wb25lbnQpIHtcbiAgICB0aGlzLmN1cnJlbnRUYXNrID0gdGFzaztcblxuICAgIGlmICh0aGlzLnN0YWdlRm9ybSkge1xuICAgICAgcG9wdXA/LnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICB0aGlzLmlzTW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXNzT24ocG9wdXApO1xuICAgIH1cblxuICAgIC8vIHRoaXMucGFzc09uKHBvcHVwKTtcbiAgfVxuXG4gIGhhbmRsZUFjdGlvbih0YXNrOiBUYXNrLCBwb3B1cDogVmVyYmVuUG9wVXBDb21wb25lbnQpIHtcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGl2ZUFjdGlvblR5cGU7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSBBY3Rpb25UeXBlLlBhc3NPbjpcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1Bhc3MgT24gQWN0aW9uJywgdGFzayk7XG4gICAgICAgIHRoaXMuY2hlY2tGb3JGb3JtVGhlblBhc3NPbih0YXNrLCBwb3B1cCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBY3Rpb25UeXBlLlJlQXNzaWduOlxuICAgICAgICB0aGlzLmZhY2FkZS5yZUFzc2lnbih0YXNrLCB0aGlzLmNvbW1lbnQsIHRoaXMudXNlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb21tZW50ID0gJyc7XG4gICAgICAgICAgdGhpcy5uZXh0QWN0aW9ucyA9IFtdO1xuICAgICAgICAgIHRoaXMucmVjaXBpZW50Q29kZSA9IG51bGw7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbi5uZXh0KG51bGwpO1xuICAgICAgICAgIHBvcHVwLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5QYXNzQmFjazpcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBY3Rpb24pIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEFjdGlvbiA9IHRoaXMuc2VsZWN0ZWRBY3Rpb24uZ2V0VmFsdWUoKTtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZmFjYWRlXG4gICAgICAgICAgICAgIC5wYXNzQmFjayhzZWxlY3RlZEFjdGlvbiwgdGFzaywgdGhpcy5jb21tZW50LCB0aGlzLnJlY2lwaWVudENvZGUsIHRoaXMudXNlcilcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dEFjdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY2lwaWVudENvZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24ubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICBwb3B1cC50b2dnbGVEcm9wZG93bigpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuU2tpcFRvOlxuICAgICAgICBjb25zdCBzZWxlY3RlZEFjdGlvbiA9IHRoaXMuc2VsZWN0ZWRBY3Rpb24uZ2V0VmFsdWUoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1NlbGVjdGVkIEFjdGlvbiBmb3IgU2tpcDonLCBzZWxlY3RlZEFjdGlvbik7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdUYXNrIGZvciBTa2lwOicsIHRhc2spO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnQ29tbWVudCBmb3IgU2tpcDonLCB0aGlzLmNvbW1lbnQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnUmVjaXBpZW50IENvZGUgZm9yIFNraXA6JywgdGhpcy5yZWNpcGllbnRDb2RlKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkQWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5mYWNhZGVcbiAgICAgICAgICAgIC5za2lwVG8oXG4gICAgICAgICAgICAgIHRhc2suQ3VycmVudFN0YWdlc1swXSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRBY3Rpb24uVG9TdGFnZSxcbiAgICAgICAgICAgICAgdGFzayxcbiAgICAgICAgICAgICAgdGhpcy5jb21tZW50LFxuICAgICAgICAgICAgICB0aGlzLnJlY2lwaWVudENvZGUsXG4gICAgICAgICAgICAgIHRoaXMudXNlclxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSAnJztcbiAgICAgICAgICAgICAgdGhpcy5uZXh0QWN0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICB0aGlzLnJlY2lwaWVudENvZGUgPSBudWxsO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgIHBvcHVwLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHN1Ym1pdEZvcm0oKSB7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuc3RhZ2VGb3JtO1xuICAgIGlmIChmb3JtICYmIHRoaXMuY3VycmVudFRhc2spIHtcbiAgICAgIHRoaXMuZmFjYWRlXG4gICAgICAgIC5maWxsRm9ybShmb3JtLCB0aGlzLmN1cnJlbnRUYXNrLkNvZGUpXG4gICAgICAgIC50aGVuKChmaWxsZWRGb3JtKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdGFnZUZvcm0gPSBudWxsO1xuICAgICAgICAgIHRoaXMuaXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnBhc3NPbigpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmlsbGluZyBmb3JtOicsIGVycm9yKTtcbiAgICAgICAgICAvLyBIYW5kbGUgZXJyb3IgKGUuZy4sIHNob3cgYSBub3RpZmljYXRpb24pXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHBhc3NPbihwb3B1cD86IFZlcmJlblBvcFVwQ29tcG9uZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRBY3Rpb24gPSB0aGlzLnNlbGVjdGVkQWN0aW9uLmdldFZhbHVlKCk7XG4gICAgLy8gY29uc29sZS5sb2coJ1NlbGVjdGVkIEFjdGlvbjonLCBzZWxlY3RlZEFjdGlvbik7XG4gICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgVGFzazonLCB0aGlzLmN1cnJlbnRUYXNrKTtcbiAgICAvLyBjb25zb2xlLmxvZygnQ29tbWVudDonLCB0aGlzLmNvbW1lbnQpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdSZWNpcGllbnQgQ29kZTonLCB0aGlzLnJlY2lwaWVudENvZGUpO1xuICAgIGlmIChzZWxlY3RlZEFjdGlvbiAmJiB0aGlzLmN1cnJlbnRUYXNrICYmIHRoaXMuY29tbWVudCkge1xuICAgICAgdGhpcy5mYWNhZGVcbiAgICAgICAgLnBhc3NPbihcbiAgICAgICAgICBzZWxlY3RlZEFjdGlvbixcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUYXNrLFxuICAgICAgICAgIHRoaXMuY29tbWVudCxcbiAgICAgICAgICB0aGlzLnJlY2lwaWVudENvZGUsXG4gICAgICAgICAgdGhpcy51c2VyXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29tbWVudCA9ICcnO1xuICAgICAgICAgIHRoaXMubmV4dEFjdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLnJlY2lwaWVudENvZGUgPSBudWxsO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24ubmV4dChudWxsKTtcblxuICAgICAgICAgIGlmIChwb3B1cCkge1xuICAgICAgICAgICAgcG9wdXAudG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFyZVJlcXVpcmVkUHJvcGVydGllc0ZpbGxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5zdGFnZUZvcm0/LkVudGl0aWVzW3RoaXMuYWN0aXZlXS5Qcm9wZXJ0aWVzIHx8IFtdO1xuXG4gICAgLy8gQ2hlY2sgaWYgYWxsIHJlcXVpcmVkIHByb3BlcnRpZXMgaGF2ZSB2YWxpZCB2YWx1ZXNcbiAgICAvLyByZXR1cm4gcHJvcGVydGllcy5ldmVyeSgocHJvcGVydHk6IGFueSkgPT4ge1xuICAgIC8vICAgY29uc29sZS5sb2cocHJvcGVydHkpO1xuICAgIC8vICAgcmV0dXJuIChcbiAgICAvLyAgICAgIXByb3BlcnR5LmlzUmVxdWlyZWQgfHxcbiAgICAvLyAgICAgKHByb3BlcnR5LlZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAvLyAgICAgICBwcm9wZXJ0eS5WYWx1ZSAhPT0gbnVsbCAmJlxuICAgIC8vICAgICAgIHByb3BlcnR5LlZhbHVlICE9PSAnJylcbiAgICAvLyAgICk7XG4gICAgLy8gfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvbkFjdGlvbkRyb3BEb3duQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBzZWxlY3RlZEFjdGlvbiA9IGV2ZW50IGFzIFdvcmtmbG93QWN0aW9uO1xuICAgIGlmIChzZWxlY3RlZEFjdGlvbikge1xuICAgICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIEFjdGlvbjonLCBzZWxlY3RlZEFjdGlvbik7XG4gICAgICAvLyAvLyB0aGlzLnNlbGVjdGVkQWN0aW9uID0gc2VsZWN0ZWRBY3Rpb247XG4gICAgICAvLyB0aGlzLmZhY2FkZVxuICAgICAgLy8gICAubG9hZE5leHRBY3RvcnModGhpcy5zZWxlY3RlZFRhc2tDb2RlISwgc2VsZWN0ZWRBY3Rpb24uQ29kZSlcbiAgICAgIC8vICAgLnRoZW4oKGFjdG9ycykgPT4ge30pO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG9uU3RhdGVDaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnY3JlYXRlJzpcbiAgICAgICAgdmFyIG5ld0l0ZW06IFRhc2sgPSBuZXcgVGFza01vZGVsKHtcbiAgICAgICAgICBXb3JrZmxvd0NvZGU6ICcnLFxuICAgICAgICAgIFN0YXR1czogVGFza1N0YXR1cy5BY3RpdmUsXG4gICAgICAgICAgRmxvd2FibGU6ICcnLFxuICAgICAgICAgIEZsb3dhYmxlRGF0YTogbnVsbCxcbiAgICAgICAgICBGbG93YWJsZVBhdGg6ICcnLFxuICAgICAgICAgIEN1cnJlbnRBY3RvcnM6IFtdLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICB9KSBhcyB1bmtub3duIGFzIFRhc2s7XG4gICAgICAgIHRoaXMuZmFjYWRlLmFkZE5ld1JlcXVlc3QobmV3SXRlbSk7XG4gICAgICAgIC8vIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YSA9IHtcbiAgICAgICAgLy8gICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIC8vICAgdGl0bGU6ICxcbiAgICAgICAgLy8gICBkYXRhOiBuZXdHcm91cCxcbiAgICAgICAgLy8gICBib2R5OiBbXSxcbiAgICAgICAgLy8gICBjaGlsZHJlbjogW10sXG4gICAgICAgIC8vIH07XG4gICAgICAgIC8vIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5jb25jYXQoW25ld0dyb3VwXSk7XG4gICAgICAgIC8vIHRoaXMuY2FyZERhdGEucHVzaChjYXJkRGF0YSk7XG4gICAgICAgIC8vIHRoaXMudXNlckNhcmRDbGlja2VkKGNhcmREYXRhKTtcbiAgICAgICAgdGhpcy5kYXRhVmlldy5pc1RhYmxlVmlldyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGNhc2UgJ2ZpbHRlcic6XG4gICAgICAvLyAgIHRoaXMuc2hvd0ZpbHRlciA9IGV2ZW50LnZhbHVlO1xuICAgICAgLy8gICBicmVhaztcbiAgICAgIC8vIGNhc2UgJ3NvcnQnOlxuICAgICAgLy8gICB0aGlzLnNob3dTb3J0ID0gZXZlbnQudmFsdWU7XG4gICAgICAvLyAgIGJyZWFrO1xuICAgICAgLy8gY2FzZSAnY29sdW1uJzpcbiAgICAgIC8vICAgdGhpcy5zaG93Q29sdW1uID0gZXZlbnQudmFsdWU7XG4gICAgICAvLyAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmVudW0gQWN0aW9uVHlwZSB7XG4gIFBpY2tUYXNrID0gJ1BpY2tUYXNrJyxcbiAgVW5QaWNrVGFzayA9ICdVblBpY2tUYXNrJyxcbiAgUmVBc3NpZ24gPSAnUmVBc3NpZ24nLFxuICBQYXNzT24gPSAnUGFzc09uJyxcbiAgUGFzc0JhY2sgPSAnUGFzc0JhY2snLFxuICBGb2xsb3dUYXNrID0gJ0ZvbGxvd1Rhc2snLFxuICBVbmZvbGxvd1Rhc2sgPSAnVW5mb2xsb3dUYXNrJyxcbiAgU2tpcFRvID0gJ1NraXBUbycsXG59XG4iLCI8ZGl2IGNsYXNzPVwic3BhY2UteS04XCI+XG4gIDx2ZXJiZW4tZGF0YS12aWV3ICN2ZHYgW3ZpZXdTdGF0ZV09XCJ7XG4gICAgICBpc1NlYXJjaDogdHJ1ZSxcbiAgICAgIGlzQ29sdW1uOiB0cnVlLFxuICAgICAgaXNGaWx0ZXI6IHRydWUsXG4gICAgICBpc1NvcnQ6IHRydWUsXG4gICAgICBpc0V4cG9ydDogdHJ1ZSxcbiAgICAgIGlzU2VsZWN0OiB0cnVlLFxuICAgICAgaXNDcmVhdGU6IGlzR2VuZXJhbCgpLFxuICAgICAgaXNUb2dnbGU6IHRydWUsXG4gICAgfVwiIFtidXR0b25DbGFzc109XCInbXktY3VzdG9tLWJ1dHRvbi1jbGFzcydcIiBbaWNvbkNsYXNzXT1cIidteS1pY29uLWNsYXNzJ1wiXG4gICAgW2FjdGl2ZUljb25DbGFzc109XCInbXktYWN0aXZlLWljb24tY2xhc3MnXCIgW3NlbGVjdGVkQ29sdW1uQ291bnRdPVwiMFwiIFtzZWxlY3RlZFNvcnRDb3VudF09XCIwXCJcbiAgICBbc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XT1cIjBcIiAodmlld0NoYW5nZSk9XCJvblZpZXdDaGFuZ2UoJGV2ZW50KVwiIChzdGF0ZUNoYW5nZSk9XCJvblN0YXRlQ2hhbmdlKCRldmVudClcIj5cbiAgICA8ZGl2IHRhYmxlLWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtdGFibGUgW2RhdGFdPVwiZGF0YSgpXCIgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIiBbc3R5bGVDb25maWddPVwic3R5bGVzXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCIgW2dyb3VwQnldPVwiZ3JvdXBCeVdvcmtmbG93Q29kZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImhpc3RvcnlcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlIGxldC1kZWxldGVSb3c+XG4gICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy93b3JrZmxvdy90YXNrLWhpc3RvcnknLCB2YWx1ZV1cIiByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ1bmRlcmxpbmUgdGV4dC1bIzAwMDBGRl1cIj52aWV3IGhpc3Rvcnk8L2E+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJ3b3JrZmxvd1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy93b3JrZmxvdy93b3JrZmxvd3MnLCB2YWx1ZV1cIiByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ1bmRlcmxpbmUgdGV4dC1bIzAwMDBGRl1cIj52aWV3IFdvcmtmbG93PC9hPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiYWN0aW9uc1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICA8dmVyYmVuLXBvcC1VcCAjcG9wdXAgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzk5JyB9XCIgW2VuYWJsZU1vdXNlTGVhdmVdPVwiZmFsc2VcIiBbY3VzdG9tU3R5bGVzXT1cIntcbiAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2Q0YTEwNzgwJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJ1xuICAgICAgICAgICAgICB9XCIgKGRyb3Bkb3duT3BlbkNoYW5nZSk9XCJvblBvcHVwVG9nZ2xlZCgkZXZlbnQsIHBvcHVwKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGRyb3Bkb3duLXRyaWdnZXIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwLTIgLW0tMiBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBpY29uPVwiZG90c1wiIFt3aWR0aF09XCIzXCIgW2hlaWdodF09XCIxOFwiIGNsYXNzPVwidy1hdXRvXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIHJvdW5kZWQtc21cIiBkcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZ2V0VGFibGVBY3Rpb25zKHJvdyk7IHRyYWNrIGl0ZW0ubGFiZWwpIHtcblxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwICNwb3B1cDIgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzk5JyB9XCIgW2VuYWJsZU1vdXNlTGVhdmVdPVwiZmFsc2VcIiBbY3VzdG9tU3R5bGVzXT1cIntcbiAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2Q0YTEwNzgwJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJ1xuICAgICAgICAgICAgICB9XCIgKGRyb3Bkb3duT3BlbkNoYW5nZSk9XCJoYW5kbGVQb3B1cENsb3NlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIml0ZW0uYWN0aW9uKHJvdylcIiBkcm9wZG93bi10cmlnZ2VyIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcHktMiBweC0zIGhvdmVyOmJnLXByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgcm91bmRlZC1zbVwiIGRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTZyZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQganVzdGlmeS1iZXR3ZWVuIGgtMTIgcHgtMiBwdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgb3BhY2l0eT1cIjAuNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuNzQ2NDkgOC4wMDMzOEM2LjkxNDgzIDguMTM0NyA3LjAyNTIgOC4yMDQ1NSA3LjExNTMxIDguMjkzOTZDNy45ODg0NiA5LjE2MjIyIDguODU3NDIgMTAuMDM0NyA5LjcyOTE3IDEwLjkwNUM5Ljg3MTY3IDExLjA0NzUgOS45OTM5MSAxMS4xOTIxIDkuOTkzMjEgMTEuNDEyOUM5Ljk5MjUxIDExLjY0NjIgOS44OTQ3MiAxMS44MTUyIDkuNjk1NjQgMTEuOTI1NkM5LjQ5MzA3IDEyLjAzOCA5LjI5MjYgMTIuMDIwNiA5LjEwNDY5IDExLjg4OTlDOS4wMzgzMyAxMS44NDM4IDguOTgxNzUgMTEuNzg0NSA4LjkyMzc4IDExLjcyNzJDNy44NTU3NCAxMC42NTkyIDYuNzk2NzggOS41ODIwMyA1LjcxNDc3IDguNTI4NjdDNS4zNzExIDguMTk0MDcgNS4zODQzNyA3Ljc5MTczIDUuNzA3NzkgNy40NzU5OUM2Ljc4ODQgNi40MjEyMyA3Ljg0ODc1IDUuMzQ1NTEgOC45MTUzOSA0LjI3NjA3QzkuMTEzNzcgNC4wNzc2OSA5LjMyMDU0IDMuOTIyNjIgOS42MjMgNC4wNDEzN0M5Ljk3OTI0IDQuMTgxMDcgMTAuMTEyIDQuNTg5MDEgOS44OTQ3MiA0LjkwMzM1QzkuODI5NzYgNC45OTc2NSA5Ljc0MTc0IDUuMDc3MjggOS42NjAwMiA1LjE1OTdDOC44MDY0MiA2LjAxNDY5IDcuOTUyODMgNi44Njk2OCA3LjA5NjQ1IDcuNzIyNTdDNy4wMTQ3MiA3LjgwNDMgNi45MTU1MyA3Ljg2ODU2IDYuNzQ1NzkgOC4wMDQwOEw2Ljc0NjQ5IDguMDAzMzhaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJibGFja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+U2VsZWN0IEFzc2lnbmVlPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdhcC0yIG1heC1oLTk2IG92ZXJmbG93LXktYXV0byBwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duIGxhYmVsPVwiQWN0aW9uXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIHdpZHRoPVwiMTAwJVwiIFttdWx0aXNlbGVjdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEFjdGlvblwiIFsob3B0aW9ucyldPVwibmV4dEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImFjdGlvbnNcIiBvcHRpb25MYWJlbD1cIk5hbWVcIiBbbmdNb2RlbF09XCJzZWxlY3RlZEFjdGlvbiB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRBY3Rpb24ubmV4dCgkZXZlbnQpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd24gbGFiZWw9XCJBY3RvcnNcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgd2lkdGg9XCIxMDAlXCIgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCIgW3Nob3dDbGVhcl09XCJ0cnVlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWN0b3JcIiBbKG9wdGlvbnMpXT1cIm5leHRBY3RvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImFjdG9yc1wiIG9wdGlvbkxhYmVsPVwiTmFtZVwiIG9wdGlvblZhbHVlPVwiQ29kZVwiIFsobmdNb2RlbCldPVwicmVjaXBpZW50Q29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBbKG5nTW9kZWwpXT1cImNvbW1lbnRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIENvbW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBwLTEgdGV4dC14cyBib3JkZXIgYm9yZGVyLXByaW1hcnkgcm91bmRlZC1tZFwiIHN0eWxlPVwiaGVpZ2h0OiA4cmVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHNdPVwiOFwiPjwvdGV4dGFyZWE+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvbiBbZGlzYWJsZV09XCIhY29tbWVudFwiIFt0ZXh0XT1cImFjdGl2ZUFjdGlvblR5cGUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKHJvdywgcG9wdXApXCIgY2xhc3M9XCJ0ZXh0LXhzIHctZnVsbFwiIGJnQ29sb3I9XCIjRkZFNjgxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbG9yPVwiIzQwNDA0MFwiIGJvcmRlclJhZGl1cz1cIjEwcHhcIiBmb250U2l6ZT1cIjE0cHhcIiBwZD1cIjEwcHggMjBweFwiIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjMycHhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aXZlQWN0aW9uVHlwZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3ZlcmJlbi1wb3AtVXA+XG5cbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZGl2aWRlcikge1xuICAgICAgICAgICAgICAgIDxociBjbGFzcz1cImJnLVsjRkZFNjgxXSBoLTEgcm91bmRlZC14bCBib3JkZXItMFwiIC8+XG4gICAgICAgICAgICAgICAgfSB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92ZXJiZW4tcG9wLVVwPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNoZWFkZXI+XG4gICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5BY3Rpb25zPC9zdHJvbmc+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2xpYi1kYXRhLXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2FyZC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldyBib3JkZXJSYWRpdXM9XCIxMnB4XCIgKGxvYWRNb3JlQ2xpY2spPVwibG9hZE1vcmUoKVwiICN2ZGN2IGRhdGFJZD1cIklkXCIgYm9yZGVyPVwiNXB4XCJcbiAgICAgICAgW2NhcmREYXRhTGlzdF09XCJjYXJkRGF0YSgpXCIgcmJnQ29sb3I9XCIjZjVmNmY5XCIgbWc9XCIyMHB4XCI+XG4gICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldyBjbGFzcz1cInNwYWNlLXktN1wiPlxuICAgICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEgI3ZsY2QgW3BhcmVudF09XCJ2ZGN2XCIgZGF0YUlkPVwiQ29kZVwiXG4gICAgICAgICAgICBjbGFzcz1cImJnLXNlY29uZGFyeS0xMDAgcm91bmRlZC14bCBib3JkZXItcHJpbWFyeSBib3JkZXItWzFweF1cIiBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhKClcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FyZCBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICBjdXJyZW50RGF0YSA9IGlzR2VuZXJhbCgpID8gdmRjdi5vbkl0ZW1DbGljayhpdGVtKSA6IG51bGxcbiAgICAgICAgICAgICAgICBcIiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudERhdGEgPSBpc0dlbmVyYWwoKSA/IHZkY3Yub25JdGVtQ2xpY2soaXRlbSkgOiBudWxsXG4gICAgICAgICAgICAgICAgICBcIiBjbGFzcz1cImZsZXggY3Vyc29yLXBvaW50ZXIgdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPyAnYmctcHJpbWFyeScgOiAnYmctc2Vjb25kYXJ5LTIwMCdcbiAgICAgICAgICAgICAgICAgICAgXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBweS0yIHB4LTQgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBnYXAteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1bIzQwNDA0MF1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGhvbmVcIiBjbGFzcz1cInRleHQtWzEwcHhdIGZvbnQtbGlnaHRcIj5TdGF0dXM6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJwaG9uZVwiIGNsYXNzPVwidGV4dC1zbVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRhLlN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZm9yPVwicm9sZVwiIGNsYXNzPVwiZm9udC1saWdodFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0YS5Db2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWVuZCBnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3dvcmtmbG93L3Rhc2staGlzdG9yeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGEuQ29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIiByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVuZGVybGluZSB0ZXh0LVsjMDAwMEZGXSB0ZXh0LXhzIHJlbGF0aXZlIHotMTBcIj52aWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeTwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLXBvcC1VcCAjcG9wdXAgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzk5JyB9XCIgW2VuYWJsZU1vdXNlTGVhdmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21TdHlsZXNdPVwie1xuICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZDRhMTA3ODAnLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzVweCcsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnXG4gICAgICAgICAgICAgIH1cIiAoZHJvcGRvd25PcGVuQ2hhbmdlKT1cIm9uUG9wdXBUb2dnbGVkKCRldmVudCwgcG9wdXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkcm9wZG93bi10cmlnZ2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHAtMiAtbS0yIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgaWNvbj1cImRvdHNcIiBbd2lkdGhdPVwiM1wiIFtoZWlnaHRdPVwiMThcIiBjbGFzcz1cInctYXV0b1wiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgcm91bmRlZC1zbVwiIGRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChhY3Rpb25JdGVtIG9mIGdldFRhYmxlQWN0aW9ucyhpdGVtLmRhdGEpOyB0cmFjayBhY3Rpb25JdGVtLmxhYmVsKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwICNwb3B1cDIgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzk5JyB9XCIgW2VuYWJsZU1vdXNlTGVhdmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tU3R5bGVzXT1cIntcbiAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2Q0YTEwNzgwJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJ1xuICAgICAgICAgICAgICB9XCIgKGRyb3Bkb3duT3BlbkNoYW5nZSk9XCJoYW5kbGVQb3B1cENsb3NlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiYWN0aW9uSXRlbS5hY3Rpb24oaXRlbS5kYXRhKVwiIGRyb3Bkb3duLXRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHB5LTIgcHgtMyBob3ZlcjpiZy1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uSXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIHJvdW5kZWQtc21cIiBkcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTZyZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBqdXN0aWZ5LWJldHdlZW4gaC0xMiBweC0yIHB0LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBvcGFjaXR5PVwiMC42XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuNzQ2NDkgOC4wMDMzOEM2LjkxNDgzIDguMTM0NyA3LjAyNTIgOC4yMDQ1NSA3LjExNTMxIDguMjkzOTZDNy45ODg0NiA5LjE2MjIyIDguODU3NDIgMTAuMDM0NyA5LjcyOTE3IDEwLjkwNUM5Ljg3MTY3IDExLjA0NzUgOS45OTM5MSAxMS4xOTIxIDkuOTkzMjEgMTEuNDEyOUM5Ljk5MjUxIDExLjY0NjIgOS44OTQ3MiAxMS44MTUyIDkuNjk1NjQgMTEuOTI1NkM5LjQ5MzA3IDEyLjAzOCA5LjI5MjYgMTIuMDIwNiA5LjEwNDY5IDExLjg4OTlDOS4wMzgzMyAxMS44NDM4IDguOTgxNzUgMTEuNzg0NSA4LjkyMzc4IDExLjcyNzJDNy44NTU3NCAxMC42NTkyIDYuNzk2NzggOS41ODIwMyA1LjcxNDc3IDguNTI4NjdDNS4zNzExIDguMTk0MDcgNS4zODQzNyA3Ljc5MTczIDUuNzA3NzkgNy40NzU5OUM2Ljc4ODQgNi40MjEyMyA3Ljg0ODc1IDUuMzQ1NTEgOC45MTUzOSA0LjI3NjA3QzkuMTEzNzcgNC4wNzc2OSA5LjMyMDU0IDMuOTIyNjIgOS42MjMgNC4wNDEzN0M5Ljk3OTI0IDQuMTgxMDcgMTAuMTEyIDQuNTg5MDEgOS44OTQ3MiA0LjkwMzM1QzkuODI5NzYgNC45OTc2NSA5Ljc0MTc0IDUuMDc3MjggOS42NjAwMiA1LjE1OTdDOC44MDY0MiA2LjAxNDY5IDcuOTUyODMgNi44Njk2OCA3LjA5NjQ1IDcuNzIyNTdDNy4wMTQ3MiA3LjgwNDMgNi45MTU1MyA3Ljg2ODU2IDYuNzQ1NzkgOC4wMDQwOEw2Ljc0NjQ5IDguMDAzMzhaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImJsYWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW1cIj5TZWxlY3QgQXNzaWduZWU8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdhcC0yIG1heC1oLTk2IG92ZXJmbG93LXktYXV0byBwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd24gbGFiZWw9XCJBY3Rpb25cIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlzZWxlY3RdPVwiZmFsc2VcIiBbZmlsdGVyXT1cInRydWVcIiBbc2hvd0NsZWFyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEFjdGlvblwiIFsob3B0aW9ucyldPVwibmV4dEFjdGlvbnNcIiBpZD1cImFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwiTmFtZVwiIFtuZ01vZGVsXT1cInNlbGVjdGVkQWN0aW9uIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdGVkQWN0aW9uLm5leHQoJGV2ZW50KVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93biBsYWJlbD1cIkFjdG9yc1wiIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIiB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJmYWxzZVwiIFtmaWx0ZXJdPVwidHJ1ZVwiIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWN0b3JcIiBbKG9wdGlvbnMpXT1cIm5leHRBY3RvcnNcIiBpZD1cImFjdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJOYW1lXCIgb3B0aW9uVmFsdWU9XCJDb2RlXCIgWyhuZ01vZGVsKV09XCJyZWNpcGllbnRDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIFsobmdNb2RlbCldPVwiY29tbWVudFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgQ29tbWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcC0xIHRleHQteHMgYm9yZGVyIGJvcmRlci1wcmltYXJ5IHJvdW5kZWQtbWRcIiBzdHlsZT1cImhlaWdodDogOHJlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHNdPVwiOFwiPjwvdGV4dGFyZWE+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIFtkaXNhYmxlXT1cIiFjb21tZW50XCIgW3RleHRdPVwiYWN0aXZlQWN0aW9uVHlwZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbihpdGVtLmRhdGEsIHBvcHVwKVwiIGNsYXNzPVwidGV4dC14cyB3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnQ29sb3I9XCIjRkZFNjgxXCIgdGV4dENvbG9yPVwiIzQwNDA0MFwiIGJvcmRlclJhZGl1cz1cIjEwcHhcIiBmb250U2l6ZT1cIjE0cHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkPVwiMTBweCAyMHB4XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMzJweFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGl2ZUFjdGlvblR5cGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuLXBvcC1VcD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3Rpb25JdGVtLmRpdmlkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cImJnLVsjRkZFNjgxXSBoLTEgcm91bmRlZC14bCBib3JkZXItMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW4tcG9wLVVwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbm9ybWFsIHRleHQtc21cIj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY2lJdGVtIG9mIGl0ZW0uYm9keTsgdHJhY2sgY2lJdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgZm9udC1saWdodCB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyBjaUl0ZW0udGl0bGUgfX06PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ibGFja1wiPnt7IGNpSXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH0gLS0+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhPlxuICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3PlxuXG4gICAgICAgIDx2ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwYXJlbnQ+XG4gICAgICAgICAgICA8IS0tIDxsaWItdXNlci1yZXF1ZXN0LWZvcm1cbiAgICAgICAgICAgICAgW2N1cnJlbnREYXRhXT1cImN1cnJlbnREYXRhXCJcbiAgICAgICAgICAgICAgKHN3aXRjaFZpZXcpPVwidmR2LnRvZ2dsZVZpZXcoKVwiXG4gICAgICAgICAgICAgIChvbkFwcHJvdmFsKT1cIm9uQXBwcm92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2xpYi11c2VyLXJlcXVlc3QtZm9ybT4gLS0+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC92ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG5cbiAgICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2ZsZXggZ2FwLTIgaXRlbXMtY2VudGVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgJ2p1c3RpZnktZW5kJzogdHJ1ZSxcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDwhLS0gPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXZkY3YuaGFzQ3VycmVudEl0ZW0oKVwiXG4gICAgICAgICAgICAgIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiXG4gICAgICAgICAgICAgIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiXG4gICAgICAgICAgICAgIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIlxuICAgICAgICAgICAgICBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgICAgICAgIFtwZF09XCInOS43OXB4IDM3LjI4cHgnXCJcbiAgICAgICAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj4gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB7e1xuICAgICAgICAgICAgICAgIHZkY3YuaGFzQ3VycmVudEl0ZW0oKSA/ICdmbGV4LTEnIDogJydcbiAgICAgICAgICAgICAgfX0ganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIj57eyBjYXJkRGF0YSgpLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3MgdGV4dC1bIzM0NzlFOV0gdW5kZXJsaW5lXCI+XG4gICAgICAgICAgICAgICAgTG9hZCBtb3JlXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3Rlcj5cbiAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY29sdW1uLWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtY29sdW1ucyBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiIChjb2x1bW5zVXBkYXRlZCk9XCJvbkNvbHVtbnNVcGRhdGVkKCRldmVudClcIj48L2xpYi1kYXRhLWNvbHVtbnM+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBmaWx0ZXItY29udGVudD5cbiAgICAgIDx2ZXJiZW4tdGFibGUtZmlsdGVyIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIiBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiIGJnQ29sb3I9XCJ3aGl0ZVwiIHdpZHRoPVwiNDIwcHhcIiB0ZXh0Q29sb3I9XCJibGFja1wiIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIiBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIiB0ZXJ0aWFyeUNvbG9yPVwiIzQwNDA0MFwiIFtmaWx0ZXJPcHRpb25zXT1cImZpbHRlckFycmF5XCJcbiAgICAgICAgW21heEZpbHRlckxlbmd0aF09XCIzXCI+PC92ZXJiZW4tdGFibGUtZmlsdGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc29ydC1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLXNvcnQgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIiBbZGF0YV09XCJkYXRhKClcIiAoc29ydEFwcGxpZWQpPVwib25Tb3J0VXBkYXRlZCgkZXZlbnQpXCI+PC9saWItZGF0YS1zb3J0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZXhwb3J0LWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtZXhwb3J0IFtkYXRhXT1cImRhdGEoKVwiIChleHBvcnREYXRhRXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIj5cbiAgICAgIDwvbGliLWRhdGEtZXhwb3J0PlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1kYXRhLXZpZXc+XG5cbiAgPGRpdiAqbmdJZj1cInZkdi5pc1RhYmxlVmlld1wiIGNsYXNzPVwiZmxleCBnYXAtMiBqdXN0aWZ5LWVuZFwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCI+e3sgY2FyZERhdGEoKS5sZW5ndGggfX0gcmVjb3JkcyBsb2FkZWQ8L3NwYW4+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZSgpXCIgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rcyB0ZXh0LVsjMzQ3OUU5XSB1bmRlcmxpbmVcIj5cbiAgICAgICAgTG9hZCBtb3JlXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPHZlcmJlbi1kaWFsb2d1ZSBbc2hvd0Nsb3NlSWNvbl09XCJ0cnVlXCIgW2Rpc21pc3NPdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiIFtjbG9zZU9uRXNjYXBlXT1cInRydWVcIiBbbW9kZV09XCInZHJhd2VyJ1wiXG4gIFtwYWRkaW5nXT1cIicwcHgnXCIgW2RyYXdlcldpZHRoXT1cIic0MDBweCdcIiBbZGlzYWJsZUZvb3Rlcl09XCJmYWxzZVwiIFtpc1Zpc2libGVdPVwiaXNNb2RhbFZpc2libGVcIiBbbW9kYWxEYXRhXT1cInN0YWdlRm9ybVwiXG4gIFtoZWFkZXJUZW1wbGF0ZV09XCJoZWFkZXJUZW1wbGF0ZVwiIFtib2R5VGVtcGxhdGVdPVwiYm9keVRlbXBsYXRlXCIgW3Nob3dDbG9zZUljb25dPVwiZmFsc2VcIj5cbjwvdmVyYmVuLWRpYWxvZ3VlPlxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImJnLVsjRkZFNjgxXSBweC02IHB5LTQgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XG4gICAgPGgxPkZvcm08L2gxPlxuICAgIDx2ZXJiZW4tc3ZnIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbaWNvbl09XCInY2xvc2UtY2lyY2xlJ1wiIChjbGljayk9XCJpc01vZGFsVmlzaWJsZSA9IGZhbHNlXCIgW3dpZHRoXT1cIjE1XCJcbiAgICAgIFtoZWlnaHRdPVwiMTVcIiBbc3Ryb2tlXT1cIicjZmZmJ1wiPjwvdmVyYmVuLXN2Zz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8ZGl2ICpuZ0lmPVwic3RhZ2VGb3JtPy5FbnRpdGllcz8uW2FjdGl2ZV07IGVsc2UgZW1wdHlTdGF0ZVwiIGNsYXNzPVwibXQtNFwiPlxuICAgICAgPGZvcm0tY29udHJvbCBbZGF0YVR5cGVdPVwiZGF0YVR5cGVcIlxuICAgICAgICBbZm9ybVByb3BlcnRpZXNdPVwic3RhZ2VGb3JtPy5FbnRpdGllcz8uW2FjdGl2ZV0/LlByb3BlcnRpZXMgPz8gW11cIj48L2Zvcm0tY29udHJvbD5cblxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTMganVzdGlmeS1lbmRcIj5cbiAgICAgICAgPHZlcmJlbmEtYnV0dG9uIGNsYXNzPVwidmVyYmVuLXByaW1hcnktYnV0dG9uXCIgKGNsaWNrKT1cInN1Ym1pdEZvcm0oKVwiIFtkaXNhYmxlXT1cIiFhcmVSZXF1aXJlZFByb3BlcnRpZXNGaWxsZWQoKVwiXG4gICAgICAgICAgdGV4dD1cIlNhdmVcIj48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVtcHR5IHN0YXRlIHRlbXBsYXRlIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlTdGF0ZT5cbiAgICAgIDxwIGNsYXNzPVwibXQtNCBwLTQgdGV4dC1ncmF5LTYwMCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICBObyBlbnRyaWVzIGF2YWlsYWJsZSBmb3IgdGhlIHNlbGVjdGVkIGZvcm0gZ3JvdXAuXG4gICAgICA8L3A+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19