verben-workflow-ui 0.0.6 → 0.0.7
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.
|
@@ -62,7 +62,7 @@ export class FormFieldsComponent {
|
|
|
62
62
|
visibleColumnDef = [];
|
|
63
63
|
styles = baseStyle;
|
|
64
64
|
data = [];
|
|
65
|
-
hideMinMax =
|
|
65
|
+
hideMinMax = true;
|
|
66
66
|
path = '/documentation/workflow-forms/fields';
|
|
67
67
|
cardData = [];
|
|
68
68
|
queryParams = {};
|
|
@@ -513,6 +513,7 @@ export class FormFieldsComponent {
|
|
|
513
513
|
}
|
|
514
514
|
// Execute the callback after successful save
|
|
515
515
|
callBack();
|
|
516
|
+
this.openDropdownId = null;
|
|
516
517
|
}
|
|
517
518
|
}
|
|
518
519
|
catch (error) {
|
|
@@ -570,7 +571,7 @@ export class FormFieldsComponent {
|
|
|
570
571
|
case 'String':
|
|
571
572
|
showMinmax = true;
|
|
572
573
|
break;
|
|
573
|
-
case '
|
|
574
|
+
case 'Int':
|
|
574
575
|
showMinmax = true;
|
|
575
576
|
break;
|
|
576
577
|
case 'Decimal':
|
|
@@ -840,11 +841,11 @@ export class FormFieldsComponent {
|
|
|
840
841
|
}
|
|
841
842
|
}
|
|
842
843
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldsComponent, deps: [{ token: i1.UtilService }, { token: i2.HttpWebRequestService }, { token: i0.ChangeDetectorRef }, { token: i3.FormBuilder }, { token: i4.EnvironmentService }, { token: i5.Router }, { token: i5.ActivatedRoute }, { token: i6.FormsFieldService }, { token: i7.Location }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
843
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldsComponent, selector: "lib-form-fields", inputs: { path: "path", application: "application", pageSize: "pageSize", searchDebounceTime: "searchDebounceTime" }, outputs: { onViewProcessClicked: "onViewProcessClicked" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }, { propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }, { propertyName: "tableView", first: true, predicate: ["dt"], descendants: true }], ngImport: i0, template: "<header\n class=\"rounded-lg shadow-lg flex justify-between items-center px-6 py-2 bg-[#D4A00773]\"\n>\n <h4 class=\"font-semibold\">{{ data[0].Name || \"\" }}</h4>\n <verben-svg\n (click)=\"goBack()\"\n class=\"cursor-pointer\"\n [width]=\"17\"\n [height]=\"17\"\n [icon]=\"'go-back'\"\n ></verben-svg>\n</header>\n<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\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: true,\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 [searchValue]=\"searchTerm\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"onSearch($event)\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n #dt\n [data]=\"data[0].Properties\"\n [columns]=\"visibleColumnDef\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template\n #cell\n let-isSelected=\"isSelected\"\n let-toggleRowSelection=\"toggleRowSelection\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isSelected\"\n (change)=\"toggleRowSelection()\"\n />\n </ng-template>\n <ng-template\n #header\n let-allRowsSelected=\"allRowsSelected\"\n let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"allRowsSelected()\"\n [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\"\n />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.Name }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n inputContainerClass=\"w-fit\"\n [(ngModel)]=\"row.Name\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"minValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n [type]=\"'number'\"\n [ngModel]=\"getStringValue(row, 'MinValue')\"\n (valueChange)=\"convertToInt($event, row, 'MinValue')\"\n inputContainerClass=\"w-[130px]\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"maxValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n [type]=\"'number'\"\n inputContainerClass=\"w-[130px]\"\n [ngModel]=\"getStringValue(row, 'MaxValue')\"\n (valueChange)=\"convertToInt($event, row, 'MaxValue')\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"defaultValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n [type]=\"'text'\"\n inputContainerClass=\"w-[130px]\"\n [(ngModel)]=\"row.DefaultValue\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"dataType\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <div class=\"flex flex-col gap-1\">\n <verben-drop-down\n width=\"100%\"\n placeholder=\"Change Data Type\"\n [(options)]=\"dataType\"\n [(ngModel)]=\"row.DataType\"\n >\n </verben-drop-down>\n </div>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"isRequired\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-svg *ngIf=\"value === true\" [icon]=\"'check'\"></verben-svg>\n <verben-svg *ngIf=\"value === false\" [icon]=\"'error'\"></verben-svg>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-switch\n [onColor]=\"'#1A237E'\"\n [(ngModel)]=\"row.IsRequired\"\n ></verbena-switch>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <verben-pop-Up\n [customStyles]=\"{ 'z-index': '99' }\"\n [dropdownOpen]=\"isDropdownOpen(row)\"\n [enableMouseLeave]=\"false\"\n (close)=\"onClose()\"\n >\n <verben-svg\n class=\"cursor-pointer actions-icon\"\n (click)=\"openDropdown(row)\"\n dropdown-trigger\n icon=\"list\"\n ></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div\n (click)=\"toggleRowEdit()\"\n class=\"pop-up-value cursor-pointer\"\n >\n Edit\n </div>\n <div class=\"pop-up-value cursor-pointer\">Delete</div>\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template\n #cellEdit\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <div class=\"flex gap-2 items-center\">\n <verben-svg\n (click)=\"saveViaTable(value, toggleRowEdit)\"\n icon=\"check\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg>\n <verben-svg icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg>\n <verben-svg\n icon=\"cardViewAlt\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"goToCardView(value)\"\n ></verben-svg>\n </div>\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 #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n mg=\"0px\"\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)=\"userCardClicked(item)\"\n class=\"flex cursor-pointer h-[max-content]\"\n >\n <!-- <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" /> -->\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div\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=\"py-3 px-4 flex-1 h-[100%]\">\n <div\n class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\"\n >\n <div\n class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\"\n >\n <div class=\"flex justify-between mr-4\">\n <div>\n <h3\n class=\"my-0 font-bold text-[#404040] leading-[19.5px]\"\n >\n {{ item.data.Name }}\n </h3>\n <span class=\"flex items-center gap-1 mt-2\">\n <span class=\"!text-[10px] text-[#404040]\"\n >Data Type:</span\n >\n <span class=\"!text-[13px] font-bold\">{{\n item.data.DataType\n }}</span>\n </span>\n </div>\n\n <div>\n <span class=\"!text-[10px] text-[#404040]\"\n >Default Value:</span\n >\n <p class=\"!text-[12px]\">\n {{ item.data.DefaultValue }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex items-end h-[100%]\">\n <span class=\"enum-val {{item.data.Status}}\">{{item.data.Status}}</span>\n </div> -->\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view>\n <ng-template #parent>\n <div\n *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full relative gap-6\"\n >\n <verbena-input\n name=\"Name\"\n label=\"Name\"\n (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"currentData.data.Name\"\n />\n <div class=\"flex flex-col gap-1\">\n <div>Data Type</div>\n <verben-drop-down\n width=\"100%\"\n placeholder=\"Change Data Type\"\n [(options)]=\"dataType\"\n [(ngModel)]=\"currentData.data.DataType\"\n (ngModelChange)=\"onDropDownChange($event)\"\n >\n </verben-drop-down>\n </div>\n\n <div>\n <div\n *ngIf=\"\n currentData.data.DataType === 'Int' ||\n currentData.data.DataType === 'Decimal'\n \"\n >\n <verbena-input\n [type]=\"'number'\"\n [placeHolder]=\"'Enter default number'\"\n [ngModel]=\"getStringValue(currentData.data, 'DefaultValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'DefaultValue')\n \"\n name=\"DefaultValue\"\n label=\"Default Value\"\n (ngModelChange)=\"updateTable()\"\n />\n </div>\n <div *ngIf=\"currentData.data.DataType === 'String' || currentData.data.DataType === 'URL'\">\n <verbena-input\n [placeHolder]=\"'Enter default text'\"\n [(ngModel)]=\"currentData.data.DefaultValue\"\n name=\"DefaultValue\"\n label=\"Default Value\"\n (ngModelChange)=\"updateTable()\"\n />\n </div>\n <div *ngIf=\"currentData.data.DataType === 'Bool'\">\n <p class=\"mb-2\">Toggle default value</p>\n <verbena-switch\n [onColor]=\"'#1A237E'\"\n [(ngModel)]=\"currentData.data.DefaultValue\"\n ></verbena-switch> \n </div>\n </div>\n <div>\n <p class=\"mb-2\">Required</p>\n \n <verbena-switch\n [onColor]=\"'#1A237E'\"\n [(ngModel)]=\"currentData.data.IsRequired\"\n ></verbena-switch>\n </div>\n <div *ngIf=\"hideMinMax\" class=\" flex flex-col gap-6\">\n <verbena-input\n [type]=\"'number'\"\n name=\"minValue\"\n label=\"Min Value\"\n (ngModelChange)=\"updateTable()\"\n [ngModel]=\"getStringValue(currentData.data, 'MinValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'MinValue')\n \"\n />\n <verbena-input\n [type]=\"'number'\"\n name=\"maxValue\"\n label=\"Max Value\"\n (ngModelChange)=\"updateTable()\"\n [ngModel]=\"getStringValue(currentData.data, 'MaxValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'MaxValue')\n \"\n />\n </div>\n <!-- buttons -->\n <div class=\"flex justify-between w-full bottom-8 left-0 right-0\">\n <verbena-button\n class=\"verben-delete-button\"\n text=\"Delete\"\n ></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button\n class=\"verben-switch-button\"\n (click)=\"goToTableView()\"\n text=\"Switch To Table\"\n ></verbena-button>\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"saveUser()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer>\n <div class=\"flex gap-2 justify-between\">\n <div\n *ngIf=\"!vdcv.hasCurrentItem()\"\n class=\"message-log-button-container flex justify-between\"\n >\n <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [text]=\"'Delete'\"\n >\n </verbena-button>\n </div>\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 </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n (filtersApplied)=\"onFilterApplied($event)\"\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 <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [text]=\"'Delete'\"\n >\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}::ng-deep .toolbar{margin-bottom:15px}::ng-deep .master-only-container{margin:0!important;padding:0!important}::ng-deep .master-detail-container{margin:0!important;padding:0!important}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.enum-val{padding:2px 10px;width:100%;min-width:max-content;text-align:center}.enum-val.Active{background-color:#d6f3e6;color:#2db76f}.enum-val.InActive{background-color:#ffdfdf;color:#eb5757}.toggle-container{width:53px;padding:1px;color:#fff;height:22px;position:relative;background-color:#1a237e;border-radius:2rem;cursor:pointer}.toggle-circle{width:50%;height:100%;position:absolute;left:0;padding:5px;top:0;background-color:#fff;border-radius:50%;transform:scale(1);transition:transform .3s}.translate-100{transform:translate(100%)}.translate-0{transform:translate(0)}.toggle-text-on{display:block;font-size:12px;margin-left:4px}.toggle-text-off{display:block;font-size:12px;margin-right:4px;text-align:right}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "groupBy", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i8.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i8.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "size"] }, { kind: "component", type: i8.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave"], outputs: ["dropdownOpenChange", "close"] }, { kind: "component", type: i8.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "exportCustomClass", "selectCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "columnTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showExportChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i8.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i8.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "onItemClick", "onCardChildClick"], outputs: ["loadMoreClick"] }, { kind: "component", type: i8.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i8.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i8.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i8.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i8.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i8.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied"] }, { kind: "component", type: i8.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated"] }, { kind: "component", type: i8.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions"] }, { kind: "component", type: i8.DataExportComponent, selector: "lib-data-export", inputs: ["data"], outputs: ["exportDataEvent"] }, { kind: "component", type: i8.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i8.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }] });
|
|
844
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldsComponent, selector: "lib-form-fields", inputs: { path: "path", application: "application", pageSize: "pageSize", searchDebounceTime: "searchDebounceTime" }, outputs: { onViewProcessClicked: "onViewProcessClicked" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }, { propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }, { propertyName: "tableView", first: true, predicate: ["dt"], descendants: true }], ngImport: i0, template: "<header\n class=\"rounded-lg shadow-lg flex justify-between items-center px-6 py-2 bg-[#D4A00773]\"\n>\n <h4 class=\"font-semibold\">{{ data[0].Name || \"\" }}</h4>\n <verben-svg\n (click)=\"goBack()\"\n class=\"cursor-pointer\"\n [width]=\"17\"\n [height]=\"17\"\n [icon]=\"'close'\"\n ></verben-svg>\n</header>\n<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\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: true,\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 [searchValue]=\"searchTerm\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"onSearch($event)\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n #dt\n [data]=\"data[0].Properties\"\n [columns]=\"visibleColumnDef\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template\n #cell\n let-isSelected=\"isSelected\"\n let-toggleRowSelection=\"toggleRowSelection\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isSelected\"\n (change)=\"toggleRowSelection()\"\n />\n </ng-template>\n <ng-template\n #header\n let-allRowsSelected=\"allRowsSelected\"\n let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"allRowsSelected()\"\n [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\"\n />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.Name }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n inputContainerClass=\"w-fit\"\n [(ngModel)]=\"row.Name\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"minValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n [type]=\"'number'\"\n [ngModel]=\"getStringValue(row, 'MinValue')\"\n (valueChange)=\"convertToInt($event, row, 'MinValue')\"\n inputContainerClass=\"w-[130px]\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"maxValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n [type]=\"'number'\"\n inputContainerClass=\"w-[130px]\"\n [ngModel]=\"getStringValue(row, 'MaxValue')\"\n (valueChange)=\"convertToInt($event, row, 'MaxValue')\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"defaultValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n [type]=\"'text'\"\n inputContainerClass=\"w-[130px]\"\n [(ngModel)]=\"row.DefaultValue\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"dataType\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <div class=\"flex flex-col gap-1\">\n <verben-drop-down\n width=\"100%\"\n placeholder=\"Change Data Type\"\n [(options)]=\"dataType\"\n [(ngModel)]=\"row.DataType\"\n >\n </verben-drop-down>\n </div>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"isRequired\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-svg *ngIf=\"value === true\" [icon]=\"'check'\"></verben-svg>\n <verben-svg *ngIf=\"value === false\" [icon]=\"'error'\"></verben-svg>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-switch\n [onColor]=\"'#1A237E'\"\n [(ngModel)]=\"row.IsRequired\"\n ></verbena-switch>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <verben-pop-Up\n [customStyles]=\"{ 'z-index': '99' }\"\n [dropdownOpen]=\"isDropdownOpen(row)\"\n [enableMouseLeave]=\"false\"\n (close)=\"onClose()\"\n >\n <verben-svg\n class=\"cursor-pointer actions-icon\"\n (click)=\"openDropdown(row)\"\n dropdown-trigger\n icon=\"list\"\n ></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div\n (click)=\"toggleRowEdit()\"\n class=\"pop-up-value cursor-pointer\"\n >\n Edit\n </div>\n <div class=\"pop-up-value cursor-pointer\">Delete</div>\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template\n #cellEdit\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <div class=\"flex gap-2 items-center\">\n <verben-svg\n (click)=\"saveViaTable(value, toggleRowEdit); onClose()\"\n icon=\"check\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg>\n <verben-svg icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg>\n <verben-svg\n icon=\"cardViewAlt\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"goToCardView(value)\"\n ></verben-svg>\n </div>\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 #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n mg=\"0px\"\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)=\"userCardClicked(item)\"\n class=\"flex cursor-pointer h-[max-content]\"\n >\n <!-- <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" /> -->\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div\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=\"py-3 px-4 flex-1 h-[100%]\">\n <div\n class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\"\n >\n <div\n class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\"\n >\n <div class=\"flex justify-between mr-4\">\n <div>\n <h3\n class=\"my-0 font-bold text-[#404040] leading-[19.5px]\"\n >\n {{ item.data.Name }}\n </h3>\n <span class=\"flex items-center gap-1 mt-2\">\n <span class=\"!text-[10px] text-[#404040]\"\n >Data Type:</span\n >\n <span class=\"!text-[13px] font-bold\">{{\n item.data.DataType\n }}</span>\n </span>\n </div>\n\n <div>\n <span class=\"!text-[10px] text-[#404040]\"\n >Default Value:</span\n >\n <p class=\"!text-[12px]\">\n {{ item.data.DefaultValue }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex items-end h-[100%]\">\n <span class=\"enum-val {{item.data.Status}}\">{{item.data.Status}}</span>\n </div> -->\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view>\n <ng-template #parent>\n <div\n *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full relative gap-6\"\n >\n <verbena-input\n name=\"Name\"\n label=\"Name\"\n (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"currentData.data.Name\"\n />\n <div class=\"flex flex-col gap-1\">\n <div>Data Type</div>\n <verben-drop-down\n width=\"100%\"\n placeholder=\"Change Data Type\"\n [(options)]=\"dataType\"\n [(ngModel)]=\"currentData.data.DataType\"\n (ngModelChange)=\"onDropDownChange($event)\"\n >\n </verben-drop-down>\n </div>\n\n <div>\n <div\n *ngIf=\"\n currentData.data.DataType === 'Int' ||\n currentData.data.DataType === 'Decimal'\n \"\n >\n <verbena-input\n [type]=\"'number'\"\n [placeHolder]=\"'Enter default number'\"\n [ngModel]=\"getStringValue(currentData.data, 'DefaultValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'DefaultValue')\n \"\n name=\"DefaultValue\"\n label=\"Default Value\"\n (ngModelChange)=\"updateTable()\"\n />\n </div>\n <div *ngIf=\"currentData.data.DataType === 'String' || currentData.data.DataType === 'URL'\">\n <verbena-input\n [placeHolder]=\"'Enter default text'\"\n [(ngModel)]=\"currentData.data.DefaultValue\"\n name=\"DefaultValue\"\n label=\"Default Value\"\n (ngModelChange)=\"updateTable()\"\n />\n </div>\n \n </div>\n <div>\n <p class=\"mb-2\">Required</p>\n \n <verbena-switch\n [onColor]=\"'#1A237E'\"\n [(ngModel)]=\"currentData.data.IsRequired\"\n ></verbena-switch>\n </div>\n <div *ngIf=\"hideMinMax\" class=\" flex flex-col gap-6\">\n <verbena-input\n [type]=\"'number'\"\n name=\"minValue\"\n label=\"Min Value\"\n (ngModelChange)=\"updateTable()\"\n [ngModel]=\"getStringValue(currentData.data, 'MinValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'MinValue')\n \"\n />\n <verbena-input\n [type]=\"'number'\"\n name=\"maxValue\"\n label=\"Max Value\"\n (ngModelChange)=\"updateTable()\"\n [ngModel]=\"getStringValue(currentData.data, 'MaxValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'MaxValue')\n \"\n />\n </div>\n <!-- buttons -->\n <div class=\"flex justify-between w-full bottom-8 left-0 right-0\">\n <verbena-button\n class=\"verben-delete-button\"\n text=\"Delete\"\n ></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button\n class=\"verben-switch-button\"\n (click)=\"goToTableView()\"\n text=\"Switch To Table\"\n ></verbena-button>\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"saveUser()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer>\n <div class=\"flex gap-2 justify-between\">\n <div\n *ngIf=\"!vdcv.hasCurrentItem()\"\n class=\"message-log-button-container flex justify-between\"\n >\n <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [text]=\"'Delete'\"\n >\n </verbena-button>\n </div>\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 </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n (filtersApplied)=\"onFilterApplied($event)\"\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 <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [text]=\"'Delete'\"\n >\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}::ng-deep .toolbar{margin-bottom:15px}::ng-deep .master-only-container{margin:0!important;padding:0!important}::ng-deep .master-detail-container{margin:0!important;padding:0!important}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.enum-val{padding:2px 10px;width:100%;min-width:max-content;text-align:center}.enum-val.Active{background-color:#d6f3e6;color:#2db76f}.enum-val.InActive{background-color:#ffdfdf;color:#eb5757}.toggle-container{width:53px;padding:1px;color:#fff;height:22px;position:relative;background-color:#1a237e;border-radius:2rem;cursor:pointer}.toggle-circle{width:50%;height:100%;position:absolute;left:0;padding:5px;top:0;background-color:#fff;border-radius:50%;transform:scale(1);transition:transform .3s}.translate-100{transform:translate(100%)}.translate-0{transform:translate(0)}.toggle-text-on{display:block;font-size:12px;margin-left:4px}.toggle-text-off{display:block;font-size:12px;margin-right:4px;text-align:right}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "groupBy", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i8.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i8.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "size"] }, { kind: "component", type: i8.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave"], outputs: ["dropdownOpenChange", "close"] }, { kind: "component", type: i8.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "exportCustomClass", "selectCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "columnTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showExportChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i8.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i8.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "onItemClick", "onCardChildClick"], outputs: ["loadMoreClick"] }, { kind: "component", type: i8.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i8.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i8.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i8.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i8.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i8.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied"] }, { kind: "component", type: i8.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated"] }, { kind: "component", type: i8.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions"] }, { kind: "component", type: i8.DataExportComponent, selector: "lib-data-export", inputs: ["data"], outputs: ["exportDataEvent"] }, { kind: "component", type: i8.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i8.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }] });
|
|
844
845
|
}
|
|
845
846
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldsComponent, decorators: [{
|
|
846
847
|
type: Component,
|
|
847
|
-
args: [{ selector: 'lib-form-fields', template: "<header\n class=\"rounded-lg shadow-lg flex justify-between items-center px-6 py-2 bg-[#D4A00773]\"\n>\n <h4 class=\"font-semibold\">{{ data[0].Name || \"\" }}</h4>\n <verben-svg\n (click)=\"goBack()\"\n class=\"cursor-pointer\"\n [width]=\"17\"\n [height]=\"17\"\n [icon]=\"'go-back'\"\n ></verben-svg>\n</header>\n<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\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: true,\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 [searchValue]=\"searchTerm\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"onSearch($event)\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n #dt\n [data]=\"data[0].Properties\"\n [columns]=\"visibleColumnDef\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template\n #cell\n let-isSelected=\"isSelected\"\n let-toggleRowSelection=\"toggleRowSelection\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isSelected\"\n (change)=\"toggleRowSelection()\"\n />\n </ng-template>\n <ng-template\n #header\n let-allRowsSelected=\"allRowsSelected\"\n let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"allRowsSelected()\"\n [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\"\n />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.Name }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n inputContainerClass=\"w-fit\"\n [(ngModel)]=\"row.Name\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"minValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n [type]=\"'number'\"\n [ngModel]=\"getStringValue(row, 'MinValue')\"\n (valueChange)=\"convertToInt($event, row, 'MinValue')\"\n inputContainerClass=\"w-[130px]\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"maxValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n [type]=\"'number'\"\n inputContainerClass=\"w-[130px]\"\n [ngModel]=\"getStringValue(row, 'MaxValue')\"\n (valueChange)=\"convertToInt($event, row, 'MaxValue')\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"defaultValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n [type]=\"'text'\"\n inputContainerClass=\"w-[130px]\"\n [(ngModel)]=\"row.DefaultValue\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"dataType\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <div class=\"flex flex-col gap-1\">\n <verben-drop-down\n width=\"100%\"\n placeholder=\"Change Data Type\"\n [(options)]=\"dataType\"\n [(ngModel)]=\"row.DataType\"\n >\n </verben-drop-down>\n </div>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"isRequired\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-svg *ngIf=\"value === true\" [icon]=\"'check'\"></verben-svg>\n <verben-svg *ngIf=\"value === false\" [icon]=\"'error'\"></verben-svg>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-switch\n [onColor]=\"'#1A237E'\"\n [(ngModel)]=\"row.IsRequired\"\n ></verbena-switch>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <verben-pop-Up\n [customStyles]=\"{ 'z-index': '99' }\"\n [dropdownOpen]=\"isDropdownOpen(row)\"\n [enableMouseLeave]=\"false\"\n (close)=\"onClose()\"\n >\n <verben-svg\n class=\"cursor-pointer actions-icon\"\n (click)=\"openDropdown(row)\"\n dropdown-trigger\n icon=\"list\"\n ></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div\n (click)=\"toggleRowEdit()\"\n class=\"pop-up-value cursor-pointer\"\n >\n Edit\n </div>\n <div class=\"pop-up-value cursor-pointer\">Delete</div>\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template\n #cellEdit\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <div class=\"flex gap-2 items-center\">\n <verben-svg\n (click)=\"saveViaTable(value, toggleRowEdit)\"\n icon=\"check\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg>\n <verben-svg icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg>\n <verben-svg\n icon=\"cardViewAlt\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"goToCardView(value)\"\n ></verben-svg>\n </div>\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 #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n mg=\"0px\"\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)=\"userCardClicked(item)\"\n class=\"flex cursor-pointer h-[max-content]\"\n >\n <!-- <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" /> -->\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div\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=\"py-3 px-4 flex-1 h-[100%]\">\n <div\n class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\"\n >\n <div\n class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\"\n >\n <div class=\"flex justify-between mr-4\">\n <div>\n <h3\n class=\"my-0 font-bold text-[#404040] leading-[19.5px]\"\n >\n {{ item.data.Name }}\n </h3>\n <span class=\"flex items-center gap-1 mt-2\">\n <span class=\"!text-[10px] text-[#404040]\"\n >Data Type:</span\n >\n <span class=\"!text-[13px] font-bold\">{{\n item.data.DataType\n }}</span>\n </span>\n </div>\n\n <div>\n <span class=\"!text-[10px] text-[#404040]\"\n >Default Value:</span\n >\n <p class=\"!text-[12px]\">\n {{ item.data.DefaultValue }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex items-end h-[100%]\">\n <span class=\"enum-val {{item.data.Status}}\">{{item.data.Status}}</span>\n </div> -->\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view>\n <ng-template #parent>\n <div\n *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full relative gap-6\"\n >\n <verbena-input\n name=\"Name\"\n label=\"Name\"\n (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"currentData.data.Name\"\n />\n <div class=\"flex flex-col gap-1\">\n <div>Data Type</div>\n <verben-drop-down\n width=\"100%\"\n placeholder=\"Change Data Type\"\n [(options)]=\"dataType\"\n [(ngModel)]=\"currentData.data.DataType\"\n (ngModelChange)=\"onDropDownChange($event)\"\n >\n </verben-drop-down>\n </div>\n\n <div>\n <div\n *ngIf=\"\n currentData.data.DataType === 'Int' ||\n currentData.data.DataType === 'Decimal'\n \"\n >\n <verbena-input\n [type]=\"'number'\"\n [placeHolder]=\"'Enter default number'\"\n [ngModel]=\"getStringValue(currentData.data, 'DefaultValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'DefaultValue')\n \"\n name=\"DefaultValue\"\n label=\"Default Value\"\n (ngModelChange)=\"updateTable()\"\n />\n </div>\n <div *ngIf=\"currentData.data.DataType === 'String' || currentData.data.DataType === 'URL'\">\n <verbena-input\n [placeHolder]=\"'Enter default text'\"\n [(ngModel)]=\"currentData.data.DefaultValue\"\n name=\"DefaultValue\"\n label=\"Default Value\"\n (ngModelChange)=\"updateTable()\"\n />\n </div>\n <div *ngIf=\"currentData.data.DataType === 'Bool'\">\n <p class=\"mb-2\">Toggle default value</p>\n <verbena-switch\n [onColor]=\"'#1A237E'\"\n [(ngModel)]=\"currentData.data.DefaultValue\"\n ></verbena-switch> \n </div>\n </div>\n <div>\n <p class=\"mb-2\">Required</p>\n \n <verbena-switch\n [onColor]=\"'#1A237E'\"\n [(ngModel)]=\"currentData.data.IsRequired\"\n ></verbena-switch>\n </div>\n <div *ngIf=\"hideMinMax\" class=\" flex flex-col gap-6\">\n <verbena-input\n [type]=\"'number'\"\n name=\"minValue\"\n label=\"Min Value\"\n (ngModelChange)=\"updateTable()\"\n [ngModel]=\"getStringValue(currentData.data, 'MinValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'MinValue')\n \"\n />\n <verbena-input\n [type]=\"'number'\"\n name=\"maxValue\"\n label=\"Max Value\"\n (ngModelChange)=\"updateTable()\"\n [ngModel]=\"getStringValue(currentData.data, 'MaxValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'MaxValue')\n \"\n />\n </div>\n <!-- buttons -->\n <div class=\"flex justify-between w-full bottom-8 left-0 right-0\">\n <verbena-button\n class=\"verben-delete-button\"\n text=\"Delete\"\n ></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button\n class=\"verben-switch-button\"\n (click)=\"goToTableView()\"\n text=\"Switch To Table\"\n ></verbena-button>\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"saveUser()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer>\n <div class=\"flex gap-2 justify-between\">\n <div\n *ngIf=\"!vdcv.hasCurrentItem()\"\n class=\"message-log-button-container flex justify-between\"\n >\n <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [text]=\"'Delete'\"\n >\n </verbena-button>\n </div>\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 </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n (filtersApplied)=\"onFilterApplied($event)\"\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 <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [text]=\"'Delete'\"\n >\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}::ng-deep .toolbar{margin-bottom:15px}::ng-deep .master-only-container{margin:0!important;padding:0!important}::ng-deep .master-detail-container{margin:0!important;padding:0!important}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.enum-val{padding:2px 10px;width:100%;min-width:max-content;text-align:center}.enum-val.Active{background-color:#d6f3e6;color:#2db76f}.enum-val.InActive{background-color:#ffdfdf;color:#eb5757}.toggle-container{width:53px;padding:1px;color:#fff;height:22px;position:relative;background-color:#1a237e;border-radius:2rem;cursor:pointer}.toggle-circle{width:50%;height:100%;position:absolute;left:0;padding:5px;top:0;background-color:#fff;border-radius:50%;transform:scale(1);transition:transform .3s}.translate-100{transform:translate(100%)}.translate-0{transform:translate(0)}.toggle-text-on{display:block;font-size:12px;margin-left:4px}.toggle-text-off{display:block;font-size:12px;margin-right:4px;text-align:right}\n"] }]
|
|
848
|
+
args: [{ selector: 'lib-form-fields', template: "<header\n class=\"rounded-lg shadow-lg flex justify-between items-center px-6 py-2 bg-[#D4A00773]\"\n>\n <h4 class=\"font-semibold\">{{ data[0].Name || \"\" }}</h4>\n <verben-svg\n (click)=\"goBack()\"\n class=\"cursor-pointer\"\n [width]=\"17\"\n [height]=\"17\"\n [icon]=\"'close'\"\n ></verben-svg>\n</header>\n<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\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: true,\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 [searchValue]=\"searchTerm\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"onSearch($event)\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n #dt\n [data]=\"data[0].Properties\"\n [columns]=\"visibleColumnDef\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template\n #cell\n let-isSelected=\"isSelected\"\n let-toggleRowSelection=\"toggleRowSelection\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isSelected\"\n (change)=\"toggleRowSelection()\"\n />\n </ng-template>\n <ng-template\n #header\n let-allRowsSelected=\"allRowsSelected\"\n let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"allRowsSelected()\"\n [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\"\n />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value.Name }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n inputContainerClass=\"w-fit\"\n [(ngModel)]=\"row.Name\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"minValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n [type]=\"'number'\"\n [ngModel]=\"getStringValue(row, 'MinValue')\"\n (valueChange)=\"convertToInt($event, row, 'MinValue')\"\n inputContainerClass=\"w-[130px]\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"maxValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n [type]=\"'number'\"\n inputContainerClass=\"w-[130px]\"\n [ngModel]=\"getStringValue(row, 'MaxValue')\"\n (valueChange)=\"convertToInt($event, row, 'MaxValue')\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"defaultValue\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-input\n [type]=\"'text'\"\n inputContainerClass=\"w-[130px]\"\n [(ngModel)]=\"row.DefaultValue\"\n ></verbena-input>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"dataType\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value }}\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <div class=\"flex flex-col gap-1\">\n <verben-drop-down\n width=\"100%\"\n placeholder=\"Change Data Type\"\n [(options)]=\"dataType\"\n [(ngModel)]=\"row.DataType\"\n >\n </verben-drop-down>\n </div>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"isRequired\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-svg *ngIf=\"value === true\" [icon]=\"'check'\"></verben-svg>\n <verben-svg *ngIf=\"value === false\" [icon]=\"'error'\"></verben-svg>\n </ng-template>\n <ng-template\n #cellEdit\n let-row=\"row\"\n let-updateValue=\"updateValue\"\n let-value\n >\n <verbena-switch\n [onColor]=\"'#1A237E'\"\n [(ngModel)]=\"row.IsRequired\"\n ></verbena-switch>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <verben-pop-Up\n [customStyles]=\"{ 'z-index': '99' }\"\n [dropdownOpen]=\"isDropdownOpen(row)\"\n [enableMouseLeave]=\"false\"\n (close)=\"onClose()\"\n >\n <verben-svg\n class=\"cursor-pointer actions-icon\"\n (click)=\"openDropdown(row)\"\n dropdown-trigger\n icon=\"list\"\n ></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div\n (click)=\"toggleRowEdit()\"\n class=\"pop-up-value cursor-pointer\"\n >\n Edit\n </div>\n <div class=\"pop-up-value cursor-pointer\">Delete</div>\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template\n #cellEdit\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-value\n >\n <div class=\"flex gap-2 items-center\">\n <verben-svg\n (click)=\"saveViaTable(value, toggleRowEdit); onClose()\"\n icon=\"check\"\n [width]=\"15\"\n [height]=\"15\"\n ></verben-svg>\n <verben-svg icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg>\n <verben-svg\n icon=\"cardViewAlt\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"goToCardView(value)\"\n ></verben-svg>\n </div>\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 #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n mg=\"0px\"\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)=\"userCardClicked(item)\"\n class=\"flex cursor-pointer h-[max-content]\"\n >\n <!-- <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" /> -->\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div\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=\"py-3 px-4 flex-1 h-[100%]\">\n <div\n class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\"\n >\n <div\n class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\"\n >\n <div class=\"flex justify-between mr-4\">\n <div>\n <h3\n class=\"my-0 font-bold text-[#404040] leading-[19.5px]\"\n >\n {{ item.data.Name }}\n </h3>\n <span class=\"flex items-center gap-1 mt-2\">\n <span class=\"!text-[10px] text-[#404040]\"\n >Data Type:</span\n >\n <span class=\"!text-[13px] font-bold\">{{\n item.data.DataType\n }}</span>\n </span>\n </div>\n\n <div>\n <span class=\"!text-[10px] text-[#404040]\"\n >Default Value:</span\n >\n <p class=\"!text-[12px]\">\n {{ item.data.DefaultValue }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex items-end h-[100%]\">\n <span class=\"enum-val {{item.data.Status}}\">{{item.data.Status}}</span>\n </div> -->\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view>\n <ng-template #parent>\n <div\n *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full relative gap-6\"\n >\n <verbena-input\n name=\"Name\"\n label=\"Name\"\n (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"currentData.data.Name\"\n />\n <div class=\"flex flex-col gap-1\">\n <div>Data Type</div>\n <verben-drop-down\n width=\"100%\"\n placeholder=\"Change Data Type\"\n [(options)]=\"dataType\"\n [(ngModel)]=\"currentData.data.DataType\"\n (ngModelChange)=\"onDropDownChange($event)\"\n >\n </verben-drop-down>\n </div>\n\n <div>\n <div\n *ngIf=\"\n currentData.data.DataType === 'Int' ||\n currentData.data.DataType === 'Decimal'\n \"\n >\n <verbena-input\n [type]=\"'number'\"\n [placeHolder]=\"'Enter default number'\"\n [ngModel]=\"getStringValue(currentData.data, 'DefaultValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'DefaultValue')\n \"\n name=\"DefaultValue\"\n label=\"Default Value\"\n (ngModelChange)=\"updateTable()\"\n />\n </div>\n <div *ngIf=\"currentData.data.DataType === 'String' || currentData.data.DataType === 'URL'\">\n <verbena-input\n [placeHolder]=\"'Enter default text'\"\n [(ngModel)]=\"currentData.data.DefaultValue\"\n name=\"DefaultValue\"\n label=\"Default Value\"\n (ngModelChange)=\"updateTable()\"\n />\n </div>\n \n </div>\n <div>\n <p class=\"mb-2\">Required</p>\n \n <verbena-switch\n [onColor]=\"'#1A237E'\"\n [(ngModel)]=\"currentData.data.IsRequired\"\n ></verbena-switch>\n </div>\n <div *ngIf=\"hideMinMax\" class=\" flex flex-col gap-6\">\n <verbena-input\n [type]=\"'number'\"\n name=\"minValue\"\n label=\"Min Value\"\n (ngModelChange)=\"updateTable()\"\n [ngModel]=\"getStringValue(currentData.data, 'MinValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'MinValue')\n \"\n />\n <verbena-input\n [type]=\"'number'\"\n name=\"maxValue\"\n label=\"Max Value\"\n (ngModelChange)=\"updateTable()\"\n [ngModel]=\"getStringValue(currentData.data, 'MaxValue')\"\n (valueChange)=\"\n convertToInt($event, currentData.data, 'MaxValue')\n \"\n />\n </div>\n <!-- buttons -->\n <div class=\"flex justify-between w-full bottom-8 left-0 right-0\">\n <verbena-button\n class=\"verben-delete-button\"\n text=\"Delete\"\n ></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button\n class=\"verben-switch-button\"\n (click)=\"goToTableView()\"\n text=\"Switch To Table\"\n ></verbena-button>\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"saveUser()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer>\n <div class=\"flex gap-2 justify-between\">\n <div\n *ngIf=\"!vdcv.hasCurrentItem()\"\n class=\"message-log-button-container flex justify-between\"\n >\n <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [text]=\"'Delete'\"\n >\n </verbena-button>\n </div>\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 </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n (filtersApplied)=\"onFilterApplied($event)\"\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 <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [text]=\"'Delete'\"\n >\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}::ng-deep .toolbar{margin-bottom:15px}::ng-deep .master-only-container{margin:0!important;padding:0!important}::ng-deep .master-detail-container{margin:0!important;padding:0!important}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.enum-val{padding:2px 10px;width:100%;min-width:max-content;text-align:center}.enum-val.Active{background-color:#d6f3e6;color:#2db76f}.enum-val.InActive{background-color:#ffdfdf;color:#eb5757}.toggle-container{width:53px;padding:1px;color:#fff;height:22px;position:relative;background-color:#1a237e;border-radius:2rem;cursor:pointer}.toggle-circle{width:50%;height:100%;position:absolute;left:0;padding:5px;top:0;background-color:#fff;border-radius:50%;transform:scale(1);transition:transform .3s}.translate-100{transform:translate(100%)}.translate-0{transform:translate(0)}.toggle-text-on{display:block;font-size:12px;margin-left:4px}.toggle-text-off{display:block;font-size:12px;margin-right:4px;text-align:right}\n"] }]
|
|
848
849
|
}], ctorParameters: () => [{ type: i1.UtilService }, { type: i2.HttpWebRequestService }, { type: i0.ChangeDetectorRef }, { type: i3.FormBuilder }, { type: i4.EnvironmentService }, { type: i5.Router }, { type: i5.ActivatedRoute }, { type: i6.FormsFieldService }, { type: i7.Location }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { path: [{
|
|
849
850
|
type: Input
|
|
850
851
|
}], fileInput: [{
|
|
@@ -868,4 +869,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
868
869
|
}], onViewProcessClicked: [{
|
|
869
870
|
type: Output
|
|
870
871
|
}] } });
|
|
871
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWdyb3VwL2Zvcm0tZmllbGRzL2Zvcm0tZmllbGRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1ncm91cC9mb3JtLWZpZWxkcy9mb3JtLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsa0JBQWtCLEVBQ2xCLGNBQWMsR0FNZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7OztBQU1wRCxJQUFLLG9CQVNKO0FBVEQs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S0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztZQUNqQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQzt3R0F2N0JVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLHlsQkM3RWhDLHU3bEJBbWhCQTs7NEZEdGNhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7eVdBU2pCLElBQUk7c0JBQWIsS0FBSztnQkFJb0MsU0FBUztzQkFBbEQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNyQixZQUFZO3NCQUE5QixTQUFTO3VCQUFDLE1BQU07Z0JBQ0MsUUFBUTtzQkFBekIsU0FBUzt1QkFBQyxLQUFLO2dCQUNDLFNBQVM7c0JBQXpCLFNBQVM7dUJBQUMsSUFBSTtnQkFDTixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNJLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDYXJkRGF0YSxcbiAgQ2FyZERhdGFWaWV3Q29tcG9uZW50LFxuICBDb2x1bW5EZWZpbml0aW9uLFxuICBDb25kaXRpb25hbE9wdGlvbnMsXG4gIERhdGFGaWx0ZXJUeXBlLFxuICBEYXRhVGFibGVDb21wb25lbnQsXG4gIERhdGFWaWV3Q29tcG9uZW50LFxuICBEcm9wZG93bkNoYW5nZUV2ZW50LFxuICBEcm9wZG93bkxvYWRFdmVudCxcbiAgSURhdGFGaWx0ZXIsXG59IGZyb20gJ3ZlcmJlbi1uZy11aSc7XG5pbXBvcnQgeyBiYXNlU3R5bGUgfSBmcm9tICcuLi9iYXNlLXRhYmxlLXN0eWxlJztcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IEh0dHBXZWJSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h0dHAtd2ViLXJlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL0Vycm9yUmVzcG9uc2UnO1xuaW1wb3J0IHsgUGFnZWRSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvUGFnZWRSZXN1bHQnO1xuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlWYWx1ZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9TZWFyY2hQcm9wZXJ0eVZhbHVlJztcbmltcG9ydCB7IFNlYXJjaE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL1NlYXJjaE9wZXJhdG9yJztcbmltcG9ydCB7IFNlYXJjaFByb3BlcnR5U2lnbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9TZWFyY2hQcm9wZXJ0eVNpZ24nO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZW52aXJvbm1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9TZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFN0YXR1cyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zdGF0dXMnO1xuaW1wb3J0IHsgT2JqZWN0U3RhdGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvb2JqZWN0LXN0YXRlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9EYXRhVHlwZSc7XG5pbXBvcnQgeyBGb3Jtc0ZpZWxkU2VydmljZSB9IGZyb20gJy4vZm9ybS1maWVsZHMuc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtRW50aXR5IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL0Zvcm1FbnRpdHknO1xuaW1wb3J0IHsgRm9ybVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL0Zvcm1Qcm9wZXJ0eSc7XG5cbmVudW0gVGFza1VzZXJQcm9wZXJ0eU5hbWUge1xuICBVc2VyID0gJ1VzZXInLFxuICBEYXRlID0gJ0RhdGUnLFxuICBSb2xlID0gJ1JvbGUnLFxuICBTZXJ2aWNlID0gJ1NlcnZpY2UnLFxuICBBcHBsaWNhdGlvbiA9ICdBcHBsaWNhdGlvbicsXG4gIFRlbmFudCA9ICdUZW5hbnQnLFxuICBFbWFpbCA9ICdFbWFpbCcsXG4gIFN0YXR1cyA9ICdTdGF0dXMnLFxufVxuZW51bSBUYXNrVXNlclByb3BlcnR5TWFwIHtcbiAgVXNlciA9ICdOYW1lJyxcbiAgRGF0ZSA9ICdDcmVhdGVkQXQnLFxuICBSb2xlID0gJ1JvbGVJRCcsXG4gIFNlcnZpY2UgPSAnU2VydmljZU5hbWUnLFxuICBBcHBsaWNhdGlvbiA9ICdBcHBsaWNhdGlvbicsXG4gIFRlbmFudCA9ICdUZW5hbnRJZCcsXG4gIEVtYWlsID0gJ01haWxBZGRyZXNzJyxcbiAgU3RhdHVzID0gJ1N0YXR1cycsXG59XG5cbmVudW0gRmlsdGVyVHlwZXMge1xuICBCZWZvcmUgPSBTZWFyY2hQcm9wZXJ0eVNpZ24uTFQsXG4gIE9uID0gU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICBBZnRlciA9IFNlYXJjaFByb3BlcnR5U2lnbi5HVCxcbiAgTkVRID0gU2VhcmNoUHJvcGVydHlTaWduLk5FUSxcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWZvcm0tZmllbGRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZmllbGRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Zvcm0tZmllbGRzLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRmllbGRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgdmlzaWJsZUNvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbjxGb3JtUHJvcGVydHk+W10gPSBbXTtcbiAgc3R5bGVzID0gYmFzZVN0eWxlO1xuICBkYXRhOiBGb3JtRW50aXR5W10gPSBbXTtcbiAgaGlkZU1pbk1heDpib29sZWFuPWZhbHNlXG4gIEBJbnB1dCAoKSBwYXRoOiBzdHJpbmcgPSAnL2RvY3VtZW50YXRpb24vd29ya2Zsb3ctZm9ybXMvZmllbGRzJztcbiAgY2FyZERhdGE6IENhcmREYXRhW10gPSBbXTtcbiAgcXVlcnlQYXJhbXM6IGFueSA9IHt9O1xuICBjdXJyZW50RGF0YTogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JywgeyBzdGF0aWM6IHRydWUgfSkgZmlsZUlucHV0ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndmRjdicpIGNhcmREYXRhVmlldyE6IENhcmREYXRhVmlld0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndmR2JykgZGF0YVZpZXchOiBEYXRhVmlld0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZHQnKSB0YWJsZVZpZXchOiBEYXRhVGFibGVDb21wb25lbnQ8Rm9ybUVudGl0eT47XG4gIEBJbnB1dCgpIGFwcGxpY2F0aW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBASW5wdXQoKSBzZWFyY2hEZWJvdW5jZVRpbWU6IG51bWJlciA9IDUwMDtcbiAgQE91dHB1dCgpIG9uVmlld1Byb2Nlc3NDbGlja2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgY3VycmVudEV4cGFuZGVkQ2FyZDogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcbiAgcGFnZVN0YXRlOiBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PiB8IG51bGwgPSBudWxsO1xuICBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgb3BlbkRyb3Bkb3duSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBjdXJyZW50RmlsdGVyczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICBjdXJyZW50U29ydHM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50Om51bWJlcj0wXG4gIHNob3dGaWx0ZXI6Ym9vbGVhbj1mYWxzZVxuICBzZWFyY2hUZXJtJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJvcGVydGllczpGb3JtUHJvcGVydHlbXT1bXVxuICBzZWFyY2hUZXJtOnN0cmluZz0nJ1xuICBza2lwPTBcbiAgSWQ6c3RyaW5nPScnXG4gIHN0YXR1c09wdGlvbnM6IFN0YXR1c1tdID0gT2JqZWN0LnZhbHVlcyhTdGF0dXMpO1xuICBkYXRhVHlwZTogRGF0YVR5cGVbXSA9IE9iamVjdC52YWx1ZXMoRGF0YVR5cGUpO1xuICB1c2VyczogRm9ybUVudGl0eVtdID0gW107XG5cbiAgdmlzaWJsZUNvbHVtbnM6IElEYXRhRmlsdGVyW10gPSBbXTtcblxuICBmaWx0ZXJBcnJheTogSURhdGFGaWx0ZXJbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnTmFtZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdEYXRhVHlwZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdEZWZhdWx0VmFsdWUnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICBcbiAgICB7XG4gICAgICBuYW1lOiAnVmFsdWUnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTWF4VmFsdWUnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuTnVtYmVyLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOidNaW5WYWx1ZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6J0lzUmVxdWlyZWQnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuQm9vbCxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICBcbiAgXTtcblxuICBzb3J0T3B0aW9uczogSURhdGFGaWx0ZXJbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiBUYXNrVXNlclByb3BlcnR5TmFtZS5EYXRlLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogVGFza1VzZXJQcm9wZXJ0eU5hbWUuVXNlcixcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZyxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogVGFza1VzZXJQcm9wZXJ0eU5hbWUuRW1haWwsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFRhc2tVc2VyUHJvcGVydHlOYW1lLlRlbmFudCxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZyxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogVGFza1VzZXJQcm9wZXJ0eU5hbWUuQXBwbGljYXRpb24sXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFRhc2tVc2VyUHJvcGVydHlOYW1lLlNlcnZpY2UsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFRhc2tVc2VyUHJvcGVydHlOYW1lLlJvbGUsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICBdO1xuXG4gIHByaXZhdGUgY3VycmVudFNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdXRpbFNlcnZpY2U6IFV0aWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VydmVyOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZW52U3ZjOiBFbnZpcm9ubWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHRhc2tVc2Vyc1N2YzogRm9ybXNGaWVsZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICApIHtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5EZWYgPSB0YXNrVXNlcnNTdmMuZm9ybUZpZWxkQ29sdW1ucztcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gdGFza1VzZXJzU3ZjLmZvcm1GaWVsZENvbHVtbnMubWFwKChjb2wpID0+ICh7XG4gICAgICBjaGVja2VkOiB0cnVlLFxuICAgICAgbmFtZTogdHlwZW9mIGNvbC5oZWFkZXIgPT09ICdzdHJpbmcnID8gY29sLmhlYWRlciA6IGNvbC5pZCxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkJvb2wsXG4gICAgfSkpO1xuICB9XG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgdGhpcy5zZWFyY2hUZXJtJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKSkgLy8gQWRqdXN0IGRlYm91bmNlIHRpbWUgaGVyZSAoaW4gbXMpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChzZWFyY2hUZXJtKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcnNBbmRTb3J0cyh0cnVlKTtcbiAgICAgIH0pO1xuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IElkID0gcGFyYW1zWydGb3JtSWQnXTtcbiAgICAgIHRoaXMuSWQ9SWRcbiAgICAgIGlmIChJZCkge1xuICAgICAgICB0aGlzLmdldFByb3BlcnRpZXMoSWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBhc3luYyBwb3N0U2VhcmNoKHBheWxvYWQ6IGFueSkge1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICBgRm9ybS9TZWFyY2hGb3JtRW50aXRpZXMvMC8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgIFxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIHRoaXMucGFnZVN0YXRlID0gcmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+O1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT4pLlJlc3VsdDtcbiAgICAgIHRoaXMuZGF0YT1yZXN1bHRcbiAgICAgIFxuICAgICAgdGhpcy5zZXRVcENhcmREYXRhKCk7XG4gICAgICAvLyB0aGlzLnNldFVwQ2FyZERhdGFFeHRyYSh0aGlzLmRhdGEpXG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG4gIG9uRHJvcERvd25DaGFuZ2UoZXZlbnQ6c3RyaW5nKXtcbiAgICBpZiggZXZlbnQpe1xuICAgICAgdGhpcy5jaGVja01pbk1heChldmVudClcbiAgICB9XG4gIFxuICB9XG4gIGFzeW5jIGdldFByb3BlcnRpZXMoSWQ6IHN0cmluZyk6IFByb21pc2U8Rm9ybUVudGl0eVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgUHJvcGVydHlOYW1lOiBgSWRgLFxuICAgICAgICBFbnRpdHlWYWx1ZTogSWQsXG4gICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgICAgVHlwZTogU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuU3RyaW5nLFxuICAgICAgfSxcbiAgICBdO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICBgRm9ybS9TZWFyY2hGb3JtRW50aXRpZXMvJHt0aGlzLnNraXB9LyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PikuUmVzdWx0O1xuICAgICAgdGhpcy5kYXRhID0gcmVzdWx0O1xuICAgICAgdGhpcy5kYXRhLm1hcCh4ID0+IHguUHJvcGVydGllcy5mb3JFYWNoKChwLGkpPT5wLmlkPWkpKTtcbiAgICAgIHRoaXMuc2V0VXBDYXJkRGF0YSgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIFxuICAgIH1cbiAgfVxuXG5cbiAgb25Vc2VyU2VsZWN0ZWQoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQsIGl0ZW06IEZvcm1FbnRpdHkpIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2Vycy5maW5kKCh4KSA9PiB4Lk5hbWUgPT0gZXZlbnQudmFsdWUpO1xuICAgIGlmICh1c2VyKSB7XG4gICAgICBpdGVtLk5hbWUgPSB1c2VyLk5hbWU7XG4gICAgICBpdGVtLkRlc2NyaXB0aW9uID0gdXNlci5EZXNjcmlwdGlvbjtcbiAgICAgIGl0ZW0uUHJvcGVydGllcyA9IHVzZXIuUHJvcGVydGllcztcbiAgICAgIGl0ZW0uSXNWYWxpZGF0ZWQgPSB1c2VyLklzVmFsaWRhdGVkO1xuICAgIH1cbiAgfVxuICBvbkNsZWFyKGV2ZW50OiBFdmVudCwgaXRlbTogRm9ybUVudGl0eSkge1xuICAgIGl0ZW0uTmFtZSA9ICcnO1xuICAgIGl0ZW0uRGVzY3JpcHRpb24gPSAnJztcbiAgICBpdGVtLlByb3BlcnRpZXMgPSBbXTtcbiAgICBpdGVtLklzVmFsaWRhdGVkID0gZmFsc2U7XG4gIH1cbiAgYXN5bmMgZ2V0Rm9ybXMoKTogUHJvbWlzZTxGb3JtRW50aXR5W10gfCB1bmRlZmluZWQ+IHtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICBgRm9ybS9HZXRGb3JtRW50aXRpZXNXaXRoUGFyYW1zL0dyb3VwLzAvJHt0aGlzLnBhZ2VTaXplfWAsXG4gICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VTdGF0ZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PjtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICB0aGlzLmRhdGEgPSByZXN1bHQ7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICAgIHRoaXMucHJvcGVydGllcz1yZXN1bHRbMF0uUHJvcGVydGllc1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgZ2V0SXRlbUxhYmVsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMudXNlcnMuZmluZCgodXNlcikgPT4gdXNlci5OYW1lID09PSBuYW1lKTtcbiAgICBjb25zdCBvdGhlckNoZWNrID0gdGhpcy5kYXRhLmZpbmQoKGRhdGEpID0+IGRhdGEuTmFtZSA9PT0gbmFtZSk7XG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLk5hbWUgOiBvdGhlckNoZWNrID8gb3RoZXJDaGVjay5OYW1lIDogJyc7XG4gIH1cblxuICBnZXRBc3luY0xhYmVsKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEuZmluZCgoeCkgPT4geC5OYW1lID09IHZhbHVlKTtcblxuICAgIHJldHVybiBkYXRhID8gZGF0YS5OYW1lIDogJyc7XG4gIH1cblxuICBhc3luYyBsb2FkTW9yZSgpIHtcbiAgICBpZiAoIXRoaXMucGFnZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMuY3VycmVudFNvcnRzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgICAgPyBhd2FpdCB0aGlzLmxvYWRNb3JlRmlsdGVyc0FuZFNvcnRzKClcbiAgICAgICAgOiBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgICAgICBgVGFza1VzZXIvR2V0VGFza1VzZXJzLyR7dGhpcy5wYWdlU3RhdGUuU2tpcH0vJHt0aGlzLnBhZ2VTaXplfWAsXG4gICAgICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZVN0YXRlID0gcmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+O1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT4pLlJlc3VsdDtcbiAgICAgIFxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChcbiAgICAgICAgcmVzdWx0Lm1hcCgoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgaWQ6IHguTmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2V0VXBDYXJkRGF0YUV4dHJhKHJlc3VsdCk7XG4gICAgfVxuICB9XG4gIGNhcmRDbGlja2VkKGl0ZW06IENhcmREYXRhLCB0b2dnbGVWaWV3OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2soaXRlbSk7XG4gICAgaWYgKHRvZ2dsZVZpZXcpIHtcbiAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgIH1cbiAgfVxuICB0b2dnbGVDaGlsZHJlbihpdGVtOiBDYXJkRGF0YSkge1xuICAgIHZhciBjdXJyVG9nZ2xlU3RhdGUgPSBpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZDtcbiAgICB0aGlzLmNhcmREYXRhLmZvckVhY2goKF8pID0+IHtcbiAgICAgIF8uaXNDaGlsZHJlbkV4cGFuZGVkID0gZmFsc2U7XG4gICAgfSk7XG4gICAgaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQgPSAhY3VyclRvZ2dsZVN0YXRlO1xuICAgIGlmIChpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZCkge1xuICAgICAgdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkID0gaXRlbTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgc2V0VXBDYXJkRGF0YSgpIHtcbiAgXG4gICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhW10gPSB0aGlzLmRhdGFbMF0uUHJvcGVydGllcy5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLngsXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgdGl0bGU6IHguTmFtZSxcbiAgICAgICAgZGF0YTogeCxcbiAgICAgICAgYm9keTogW10sXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG4gIFxuICAgIHRoaXMuY2FyZERhdGEgPSBjYXJkRGF0YTsgLy8gQXNzaWduIHRoZSB0cmFuc2Zvcm1lZCBhcnJheSB0byBgY2FyZERhdGFgXG4gIH1cbiAgXG4gIGNsb3NlUG9wVXAocm93OkZvcm1FbnRpdHkpIHtcbiAgICB0aGlzLm9wZW5Ecm9wZG93bklkID1yb3cuSWRcbiAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgfVxuICBzZXRVcENhcmREYXRhRXh0cmEoYmFzZURhdGE6IEZvcm1FbnRpdHlbXSkge1xuICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YVtdID0gYmFzZURhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHRpdGxlOiB4Lk5hbWUsXG4gICAgICAgIGRhdGE6IHgsXG4gICAgICAgIGJvZHk6IFtdLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2FyZERhdGEgPSB0aGlzLmNhcmREYXRhLmNvbmNhdChjYXJkRGF0YSk7XG4gIH1cblxuICBnb1RvQ2FyZFZpZXcoZGF0YTogRm9ybVByb3BlcnR5KSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuY2FyZERhdGEuZmluZCgoeCkgPT4geC5kYXRhID09IGRhdGEpO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLnVzZXJDYXJkQ2xpY2tlZChpdGVtLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBnb1RvVGFibGVWaWV3KCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50RGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICBjb25zdCBpZCA9IHRoaXMuY3VycmVudERhdGEuZGF0YSA/IHRoaXMuY3VycmVudERhdGEuZGF0YS5JZCA6ICcnO1xuICAgIGlmIChpZC50cmltKCkubGVuZ3RoID4gMCAmJiAhdGhpcy50YWJsZVZpZXcuaXNSb3dFZGl0aW5nKGlkKSkge1xuICAgICAgdGhpcy50YWJsZVZpZXcudG9nZ2xlUm93RWRpdChpZCk7XG4gICAgfVxuICB9XG5cbiAgdmlld1Byb2Nlc3Nlcyhjb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoY29kZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vblZpZXdQcm9jZXNzQ2xpY2tlZC5lbWl0KGNvZGUpO1xuICB9XG5cbiAgdXNlckNhcmRDbGlja2VkKGl0ZW06IENhcmREYXRhLCB0b2dnbGVWaWV3OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLmNhcmREYXRhLmZvckVhY2goKGNhcmQpID0+IChjYXJkLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2soaXRlbSk7XG4gICAgaWYgKHRvZ2dsZVZpZXcpIHtcbiAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgIH1cbiAgfVxuICBcblxuICBhc3luYyBzYXZlRm9ybVByb3BlcnR5KCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50RGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1Qcm9wZXJ0eTogRm9ybUVudGl0eVtdID0gdGhpcy5kYXRhO1xuXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQVBJIGNhbGwgdG8gc2F2ZSB1c2VyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgICBgRm9ybS9TYXZlRm9ybUVudGl0aWVzYCxcbiAgICAgICAgZm9ybVByb3BlcnR5LFxuICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgKTtcblxuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuXG4gICAgICBpZiAoIShyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdGb3JtIHByb3BlcnR5IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcyBhcyBGb3JtRW50aXR5W107XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHVzZXJSZXN1bHQgPSByZXN1bHRbMF07XG5cbiAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KFxuICAgICAgICAgICAgKHgpID0+IHggPT09IHRoaXMuY3VycmVudERhdGE/LmRhdGFcbiAgICAgICAgICApO1xuXG4gICAgICAgICBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgICAvLyBPcHRpb25hbDogSGFuZGxlIGVycm9ycyBpZiBuZWVkZWRcbiAgICB9XG4gIH1cbiAgc3RyaW5naWZ5KHZhbDphbnkpe1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWwpXG4gIH1cbiAgYXN5bmMgc2F2ZVVzZXIoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudERhdGEpIHtcbiAgICAgIHZhciBwcm9wZXJ0eTogRm9ybVByb3BlcnR5ID0gdGhpcy5jdXJyZW50RGF0YS5kYXRhIGFzIEZvcm1Qcm9wZXJ0eTtcbiAgICAgIHByb3BlcnR5Lk1heFZhbHVlID0gTnVtYmVyKHByb3BlcnR5Lk1heFZhbHVlKTtcbiAgICAgIHByb3BlcnR5Lk1pblZhbHVlID0gTnVtYmVyKHByb3BlcnR5Lk1pblZhbHVlKTtcbiAgXG4gICAgICBpZiAodGhpcy5jdXJyZW50RGF0YS5kYXRhLk5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dJbmZvKCdOYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIFxuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gIFxuICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSB0aGlzLmRhdGEubWFwKChmb3JtKSA9PiB7XG4gIFxuICAgICAgICBjb25zdCBwcm9wZXJ0eUluZGV4ID0gZm9ybS5Qcm9wZXJ0aWVzLmZpbmRJbmRleChcbiAgICAgICAgICAocCkgPT4gcC5pZCA9PT0gcHJvcGVydHkuaWRcbiAgICAgICAgKTtcbiAgXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZGV4ID4gLTEpIHtcbiAgICAgICAgICBmb3JtLlByb3BlcnRpZXNbcHJvcGVydHlJbmRleF0gPSBwcm9wZXJ0eTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtLlByb3BlcnRpZXMgPSBbLi4uZm9ybS5Qcm9wZXJ0aWVzLCBwcm9wZXJ0eV07XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtLkRhdGFTdGF0ZSA9XG4gICAgICAgICAgZm9ybS5EYXRhU3RhdGUgPT09IE9iamVjdFN0YXRlLk5ld1xuICAgICAgICAgICAgPyBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgICAgIDogT2JqZWN0U3RhdGUuQ2hhbmdlZDtcbiAgXG4gICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgfSk7XG4gIFxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChcbiAgICAgICAgYEZvcm0vU2F2ZUZvcm1FbnRpdGllc2AsXG4gICAgICAgIHVwZGF0ZWREYXRhLFxuICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgKTtcbiAgXG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gIFxuICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcblxuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2F2aW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdGb3JtIHByb3BlcnR5IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgRm9ybUVudGl0eVtdO1xuICBcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIHVzZXJSZXN1bHQgPSByZXN1bHRbMF07XG4gICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleChcbiAgICAgICAgICAgICh4KSA9PiB4ID09PSB0aGlzLmN1cnJlbnREYXRhPy5kYXRhXG4gICAgICAgICAgKTtcbiAgXG4gICAgICAgICAgaWYgKGl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Qcm9wZXJ0aWVzID0gdXNlclJlc3VsdC5Qcm9wZXJ0aWVzO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGFzeW5jIHNhdmVWaWFUYWJsZShyb3c6IEZvcm1Qcm9wZXJ0eSwgY2FsbEJhY2s6ICgpID0+IGFueSkge1xuICAgIGlmICghcm93KSByZXR1cm47XG4gIFxuICAgIC8vIFVwZGF0ZSBhbmQgdmFsaWRhdGUgdGhlIHByb3BlcnR5XG4gICAgY29uc3QgcHJvcGVydHk6IEZvcm1Qcm9wZXJ0eSA9IHtcbiAgICAgIC4uLnJvdyxcbiAgICAgIE1heFZhbHVlOiBOdW1iZXIocm93Lk1heFZhbHVlKSxcbiAgICAgIE1pblZhbHVlOiBOdW1iZXIocm93Lk1pblZhbHVlKSxcbiAgICB9O1xuICBcbiAgICBpZiAocm93Lk5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93SW5mbygnTmFtZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIFxuICAgIC8vIFVwZGF0ZSB0aGUgVUkgaW1tZWRpYXRlbHlcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKChmb3JtKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eUluZGV4ID0gZm9ybS5Qcm9wZXJ0aWVzLmZpbmRJbmRleCgocCkgPT4gcC5pZCA9PT0gcHJvcGVydHkuaWQpO1xuICBcbiAgICAgIGlmIChwcm9wZXJ0eUluZGV4ID4gLTEpIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBleGlzdGluZyBwcm9wZXJ0eVxuICAgICAgICBmb3JtLlByb3BlcnRpZXNbcHJvcGVydHlJbmRleF0gPSBwcm9wZXJ0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFkZCB0aGUgbmV3IHByb3BlcnR5XG4gICAgICAgIGZvcm0uUHJvcGVydGllcyA9IFsuLi5mb3JtLlByb3BlcnRpZXMsIHByb3BlcnR5XTtcbiAgICAgIH1cbiAgXG4gICAgICAvLyBNYXJrIHRoZSBmb3JtJ3Mgc3RhdGUgYXMgY2hhbmdlZFxuICAgICAgZm9ybS5EYXRhU3RhdGUgPVxuICAgICAgICBmb3JtLkRhdGFTdGF0ZSA9PT0gT2JqZWN0U3RhdGUuTmV3ID8gT2JqZWN0U3RhdGUuTmV3IDogT2JqZWN0U3RhdGUuQ2hhbmdlZDtcbiAgXG4gICAgICByZXR1cm4gZm9ybTtcbiAgICB9KTtcbiAgXG4gICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGltbWVkaWF0ZWx5XG4gICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gIFxuICAgIC8vIFNlbmQgdGhlIHVwZGF0ZWQgZGF0YSB0byB0aGUgc2VydmVyXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgICBgRm9ybS9TYXZlRm9ybUVudGl0aWVzYCxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgKTtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgXG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2F2aW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdGb3JtIHByb3BlcnR5IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgRm9ybUVudGl0eVtdO1xuICBcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gU3luYyB0aGUgdXBkYXRlZCBwcm9wZXJ0aWVzIHdpdGggdGhlIHNlcnZlciByZXNwb25zZVxuICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5tYXAoKGZvcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGb3JtID0gcmVzdWx0LmZpbmQoKHIpID0+IHIuSWQgPT09IGZvcm0uSWQpO1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWRGb3JtID8geyAuLi5mb3JtLCBQcm9wZXJ0aWVzOiB1cGRhdGVkRm9ybS5Qcm9wZXJ0aWVzIH0gOiBmb3JtO1xuICAgICAgICAgIH0pO1xuICBcbiAgICAgICAgICAvLyBUcmlnZ2VyIFVJIHVwZGF0ZSBhZ2FpblxuICAgICAgICAgIHRoaXMuZGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgICB9XG4gIFxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBjYWxsYmFjayBhZnRlciBzdWNjZXNzZnVsIHNhdmVcbiAgICAgICAgY2FsbEJhY2soKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IoJ0ZhaWxlZCB0byBzYXZlIGR1ZSB0byBhIG5ldHdvcmsgZXJyb3InKTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIHRhYmxlU2F2ZVVzZXIodXNlcjogRm9ybUVudGl0eSwgY2FsbEJhY2s6ICgpID0+IGFueSkge1xuXG4gIFxuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICBgRm9ybS9TYXZlRm9ybUVudGl0aWVzYCxcbiAgICAgIHRoaXMuZGF0YS5tYXAoKGl0ZW0pPT4oe1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBQcm9wZXJ0aWVzOlsuLi5pdGVtLlByb3BlcnRpZXMsIHVzZXJdLFxuICAgICAgICBEYXRhU3RhdGU6T2JqZWN0U3RhdGUuQ2hhbmdlZFxuICAgICAgfSkpLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApO1xuICBcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gIFxuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2F2aW5nIHRoZSBmb3JtJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1Byb3BlcnRpZXMgdXBkYXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgXG4gICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgRm9ybUVudGl0eVtdO1xuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHVzZXJSZXN1bHQgPSByZXN1bHRbMF07XG4gIFxuICAgICAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgdXNlciBpbiB0aGUgZGF0YSBhcnJheVxuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KCh4KSA9PiB4ID09PSB1c2VyKTtcbiAgXG4gICAgICAgIGlmIChpdGVtSW5kZXggPiAtMSkge1xuICAgICAgICAgIC8vIFVwZGF0ZSBvbmx5IHRoZSBQcm9wZXJ0aWVzIGZpZWxkXG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUHJvcGVydGllcyA9IHVzZXJSZXN1bHQuUHJvcGVydGllcztcbiAgXG4gICAgICAgICAgLy8gVHJpZ2dlciBVSSBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICAgIH1cbiAgXG4gICAgICAgIC8vIEludm9rZSB0aGUgY2FsbGJhY2sgYWZ0ZXIgdXBkYXRpbmcgdGhlIHByb3BlcnRpZXNcbiAgICAgICAgY2FsbEJhY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIHRvZ2dsZUlzVmFsaWRhdGUodmFsdWU6IGJvb2xlYW4sIHJvdzogRm9ybVByb3BlcnR5KTogdm9pZCB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSAhdmFsdWU7XG4gICAgcm93LklzUmVxdWlyZWQgPSBuZXdWYWx1ZTtcbiAgICBjb25zb2xlLmxvZyhyb3cpO1xuICB9XG5cbiAgdXBkYXRlVGFibGUoKSB7XG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4geCk7XG4gICAgY29uc29sZS5sb2codGhpcy5kYXRhKTtcbiAgfVxuICBcbiAgY29udmVydFRvSW50KHZhbHVlOiBhbnksIGRhdGE6IGFueSxwcm9wOiBzdHJpbmcpIHtcbiAgICBkYXRhW3Byb3BdID0gcGFyc2VJbnQodmFsdWUpO1xuICB9XG4gIGdldFN0cmluZ1ZhbHVlKGRhdGE6IGFueSxwcm9wOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBkYXRhW3Byb3BdLnRvU3RyaW5nKCk7XG4gIH1cbiBcbiAgXG4gIGNoZWNrTWluTWF4KHZhbHVlOnN0cmluZyl7XG4gICAgdmFyIHNob3dNaW5tYXg9ZmFsc2VcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgICAgICAgICAgc2hvd01pbm1heD10cnVlXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnSU5UJzpcbiAgICAgICAgICAgICAgc2hvd01pbm1heD10cnVlXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnRGVjaW1hbCc6XG4gICAgICAgICAgICBzaG93TWlubWF4PXRydWVcbiAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Zsb2F0JzpcbiAgICAgICAgICAgICAgc2hvd01pbm1heD10cnVlXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5oaWRlTWluTWF4PXNob3dNaW5tYXhcbiAgfVxuICBcblxuICBuYXZpZ2F0ZVRvRmllbGRzKCkge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5xdWVyeVBhcmFtcztcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5wYXRofWBdLCB7IHF1ZXJ5UGFyYW1zIH0pO1xuICB9XG4gIG9uQ2xvc2UoKSB7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgfVxuXG5cblxuICBvcGVuRHJvcGRvd24oaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3BlbkRyb3Bkb3duSWQgPT09IGl0ZW0uaWQpIHtcbiAgICAgIHRoaXMub3BlbkRyb3Bkb3duSWQgPSBudWxsOyAvLyBDbG9zZSB0aGUgZHJvcGRvd24gaWYgaXQncyBhbHJlYWR5IG9wZW5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuRHJvcGRvd25JZCA9IGl0ZW0uaWQ7IC8vIE9wZW4gdGhlIGNsaWNrZWQgZHJvcGRvd25cbiAgICB9XG4gIH1cbiAgXG4gIGdvQmFjaygpIHtcbiAgICB0aGlzLl9sb2NhdGlvbi5iYWNrKCk7XG4gIH1cbiAgaXNEcm9wZG93bk9wZW4oaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3BlbkRyb3Bkb3duSWQgPT09IGl0ZW0uSWQ7XG4gIH1cblxuICBvblZpZXdDaGFuZ2UoaXNHcmlkVmlldzogYm9vbGVhbik6IHZvaWQge31cblxuICBvblN0YXRlQ2hhbmdlKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ2NyZWF0ZSc6XG4gICAgICAgIHZhciBuZXdVc2VyOiBGb3JtUHJvcGVydHkgPSB7XG4gICAgICAgICAgTWF4VmFsdWU6IDEwMCxcbiAgICAgICAgICBOYW1lOiAnJyxcbiAgICAgICAgICBWYWx1ZTogJycsXG4gICAgICAgICAgTWluVmFsdWU6IDEwMCxcbiAgICAgICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICBEYXRhVHlwZTogRGF0YVR5cGUuU3RyaW5nLFxuICAgICAgICAgIERlZmF1bHRWYWx1ZTogJycsXG4gICAgICAgICAgaWQ6JydcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhID0ge1xuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB0aXRsZTogbmV3VXNlci5OYW1lLFxuICAgICAgICAgIGRhdGE6IG5ld1VzZXIsXG4gICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY2FyZERhdGEucHVzaChjYXJkRGF0YSk7XG4gICAgICAgIHRoaXMudXNlckNhcmRDbGlja2VkKGNhcmREYXRhKTtcbiAgICAgICAgdGhpcy5kYXRhVmlldy5pc1RhYmxlVmlldyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXNldCgpe1xuICAgIHRoaXMuc2tpcD0wXG4gICAgdGhpcy5wYWdlU2l6ZT0xMFxuICB9XG4gIGFzeW5jIG9uU2VhcmNoKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSBldmVudC52YWx1ZTtcbiAgICAgdGhpcy5yZXNldCgpXG4gICAgaWYgKCF0aGlzLnNlYXJjaFRlcm0pIHtcbiAgICAgICB0aGlzLmdldFByb3BlcnRpZXModGhpcy5JZClcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiBcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgIGBGb3JtL0dldEZvcm1FbnRpdGllc1dpdGhQYXJhbS8ke3RoaXMuc2VhcmNoVGVybX0vJHt0aGlzLnNraXB9LyR7dGhpcy5wYWdlU2l6ZX0vQ3JlYXRlZEF0L2FzY2BcbiAgICAgICk7XG5cbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcblxuICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHNlYXJjaDonLCByZXMpO1xuICAgIFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT47XG4gICAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICAgIHRoaXMuZGF0YT1yZXN1bHRcbiAgICAgICAgXG4gICAgICAgIHRoaXMuc2V0VXBDYXJkRGF0YSgpO1xuICAgICAgICBcbiAgICAgIFxuICBcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignU2VhcmNoIGVycm9yOicsIGVycm9yKTtcbiAgIFxuICAgIH0gZmluYWxseSB7XG5cbiAgICB9XG4gIH1cbiAgc2hvd1RhYmxlVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3RlZFJvd3M6IEZvcm1Qcm9wZXJ0eVtdKSB7fVxuICByZXRyeU1lc3NhZ2UoKSB7fVxuXG4gIG9uQ29sdW1uc1VwZGF0ZWQodXBkYXRlZENvbHVtbnM6IElEYXRhRmlsdGVyW10pIHtcbiAgICBjb25zdCB1cGRhdGVkQ29sdW1uRGVmOiBDb2x1bW5EZWZpbml0aW9uPEZvcm1Qcm9wZXJ0eT5bXSA9IFtdO1xuICAgIHVwZGF0ZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdDb2wgPSB0aGlzLnRhc2tVc2Vyc1N2Yy5mb3JtRmllbGRDb2x1bW5zLmZpbmQoXG4gICAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5oZWFkZXIgPT09IGNvbC5uYW1lIHx8IGNvbHVtbi5pZCA9PT0gY29sLm5hbWVcbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hpbmdDb2wpIHtcbiAgICAgICAgdXBkYXRlZENvbHVtbkRlZi5wdXNoKG1hdGNoaW5nQ29sKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudmlzaWJsZUNvbHVtbkRlZiA9IFsuLi51cGRhdGVkQ29sdW1uRGVmXTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUZpbHRlcnNBbmRTb3J0cyhpc1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCFpc1NlYXJjaCkge1xuICAgICAgdGhpcy5kYXRhVmlldy5vbkNsZWFyU2VhcmNoKCk7XG4gICAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtID0gJyc7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBjb25zdCBjbGlja0V2ZW50ID0gbmV3IE1vdXNlRXZlbnQoJ2NsaWNrJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICB2aWV3OiB3aW5kb3csXG4gICAgICB9KTtcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY2xpY2tFdmVudCk7XG4gICAgfVxuICAgIHZhciBwYXlsb2FkOiBTZWFyY2hQcm9wZXJ0eVZhbHVlW10gPSB0aGlzLmN1cnJlbnRGaWx0ZXJzLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUHJvcGVydHlOYW1lOlxuICAgICAgICAgIFRhc2tVc2VyUHJvcGVydHlNYXBbeC5uYW1lIGFzIGtleW9mIHR5cGVvZiBUYXNrVXNlclByb3BlcnR5TWFwXSxcbiAgICAgICAgRW50aXR5VmFsdWU6IHgudmFsdWUsXG4gICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgIFNpZ246XG4gICAgICAgICAgeC5jb25kaXRpb24gJiYgT2JqZWN0LmtleXMoRmlsdGVyVHlwZXMpLmluY2x1ZGVzKHguY29uZGl0aW9uKVxuICAgICAgICAgICAgPyAoRmlsdGVyVHlwZXNbXG4gICAgICAgICAgICAgICAgeC5jb25kaXRpb24gYXMga2V5b2YgdHlwZW9mIEZpbHRlclR5cGVzXG4gICAgICAgICAgICAgIF0gYXMgdW5rbm93biBhcyBTZWFyY2hQcm9wZXJ0eVNpZ24pXG4gICAgICAgICAgICA6IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgICAgVHlwZTpcbiAgICAgICAgICB4Lm5hbWUgPT0gVGFza1VzZXJQcm9wZXJ0eU5hbWUuRGF0ZVxuICAgICAgICAgICAgPyBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZS5EYXRlXG4gICAgICAgICAgICA6IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLlN0cmluZyxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgLy8gcGF5bG9hZC5wdXNoKHtcbiAgICAvLyAgIFByb3BlcnR5TmFtZTogJ0FQSUtleScsXG4gICAgLy8gICBFbnRpdHlWYWx1ZTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgIC8vICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAvLyAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAvLyB9KTtcbiAgICBjb25zdCBzb3J0UGFyYW06IHsgUGFyYW06IHN0cmluZzsgT3JkZXI6IHN0cmluZyB9IHwgbnVsbCA9XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0cy5sZW5ndGggPiAwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgUGFyYW06XG4gICAgICAgICAgICAgIFRhc2tVc2VyUHJvcGVydHlNYXBbXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U29ydHNbMF0ubmFtZSBhcyBrZXlvZiB0eXBlb2YgVGFza1VzZXJQcm9wZXJ0eU1hcFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgT3JkZXI6IHRoaXMuY3VycmVudFNvcnRzWzBdLnZhbHVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHNlYXJjaFRlcm1FeGlzdHMgPSB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IHNlYXJjaFRlcm1FeGlzdHNcbiAgICAgID8gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICAgIGBUYXNrVXNlci9HZXRUYXNrVXNlcldpdGhQYXJhbS8ke3RoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpfS8wLyR7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTaXplXG4gICAgICAgICAgfWAsXG4gICAgICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICAgICAgKVxuICAgICAgOiBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgICAgIHNvcnRQYXJhbVxuICAgICAgICAgICAgPyBgVGFza1VzZXIvU2VhcmNoVGFza1VzZXJzLzAvJHt0aGlzLnBhZ2VTaXplfS8ke3NvcnRQYXJhbS5QYXJhbX0vJHtzb3J0UGFyYW0uT3JkZXJ9YFxuICAgICAgICAgICAgOiBgVGFza1VzZXIvU2VhcmNoVGFza1VzZXJzLzAvJHt0aGlzLnBhZ2VTaXplfWAsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVycyA9IFtdO1xuICAgICAgdGhpcy5jdXJyZW50U29ydHMgPSBbXTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZVN0YXRlID0gcmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+O1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT4pLlJlc3VsdDtcbiAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdC5tYXAoKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi54LFxuICAgICAgICAgIGlkOiB4LklkLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgbG9hZE1vcmVGaWx0ZXJzQW5kU29ydHMoKTogUHJvbWlzZTxcbiAgICBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PiB8IHVuZGVmaW5lZFxuICA+IHtcbiAgICBpZiAoIXRoaXMucGFnZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBwYXlsb2FkOiBTZWFyY2hQcm9wZXJ0eVZhbHVlW10gPSB0aGlzLmN1cnJlbnRGaWx0ZXJzLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUHJvcGVydHlOYW1lOlxuICAgICAgICAgIFRhc2tVc2VyUHJvcGVydHlNYXBbeC5uYW1lIGFzIGtleW9mIHR5cGVvZiBUYXNrVXNlclByb3BlcnR5TWFwXSxcbiAgICAgICAgRW50aXR5VmFsdWU6IHgudmFsdWUsXG4gICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgIFNpZ246XG4gICAgICAgICAgeC5jb25kaXRpb24gJiYgT2JqZWN0LmtleXMoRmlsdGVyVHlwZXMpLmluY2x1ZGVzKHguY29uZGl0aW9uKVxuICAgICAgICAgICAgPyAoRmlsdGVyVHlwZXNbXG4gICAgICAgICAgICAgICAgeC5jb25kaXRpb24gYXMga2V5b2YgdHlwZW9mIEZpbHRlclR5cGVzXG4gICAgICAgICAgICAgIF0gYXMgdW5rbm93biBhcyBTZWFyY2hQcm9wZXJ0eVNpZ24pXG4gICAgICAgICAgICA6IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgICAgVHlwZTpcbiAgICAgICAgICB4Lm5hbWUgPT0gVGFza1VzZXJQcm9wZXJ0eU5hbWUuRGF0ZVxuICAgICAgICAgICAgPyBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZS5EYXRlXG4gICAgICAgICAgICA6IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLlN0cmluZyxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3Qgc29ydFBhcmFtOiB7IFBhcmFtOiBzdHJpbmc7IE9yZGVyOiBzdHJpbmcgfSB8IG51bGwgPVxuICAgICAgdGhpcy5jdXJyZW50U29ydHMubGVuZ3RoID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIFBhcmFtOlxuICAgICAgICAgICAgICBUYXNrVXNlclByb3BlcnR5TWFwW1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNvcnRzWzBdLm5hbWUgYXMga2V5b2YgdHlwZW9mIFRhc2tVc2VyUHJvcGVydHlNYXBcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIE9yZGVyOiB0aGlzLmN1cnJlbnRTb3J0c1swXS52YWx1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbDtcbiAgICBjb25zdCBzZWFyY2hUZXJtRXhpc3RzID0gdGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCkubGVuZ3RoID4gMDtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBzZWFyY2hUZXJtRXhpc3RzXG4gICAgICA/IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgICAgICBgVGFza1VzZXIvR2V0VGFza1VzZXJXaXRoUGFyYW0vJHt0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKX0vJHtcbiAgICAgICAgICAgIHRoaXMucGFnZVN0YXRlLlNraXBcbiAgICAgICAgICB9LyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICAgIClcbiAgICAgIDogYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChcbiAgICAgICAgICBzb3J0UGFyYW1cbiAgICAgICAgICAgID8gYFRhc2tVc2VyL1NlYXJjaFRhc2tVc2Vycy8ke3RoaXMucGFnZVN0YXRlLlNraXB9LyR7dGhpcy5wYWdlU2l6ZX0vJHtzb3J0UGFyYW0uUGFyYW19LyR7c29ydFBhcmFtLk9yZGVyfWBcbiAgICAgICAgICAgIDogYFRhc2tVc2VyL1NlYXJjaFRhc2tVc2Vycy8ke3RoaXMucGFnZVN0YXRlLlNraXB9LyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT47XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuIG9uRmlsdGVyQXBwbGllZChhcHBsaWVkRmlsdGVyOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgdGhpcy5zaG93RmlsdGVyID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXBwbGllZEZpbHRlcikpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50ID0gYXBwbGllZEZpbHRlci5sZW5ndGg7XG4gICAgICBjb25zb2xlLmxvZyhhcHBsaWVkRmlsdGVyKTtcblxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBhcHBsaWVkRmlsdGVyXG4gICAgICAgIC5maWx0ZXIoKGZpbHRlcikgPT4gZmlsdGVyLmNoZWNrZWQpXG4gICAgICAgIC5tYXAoKGZpbHRlcikgPT4gKHtcbiAgICAgICAgICBQcm9wZXJ0eU5hbWU6IGZpbHRlci5uYW1lLFxuICAgICAgICAgIEVudGl0eVZhbHVlOiBmaWx0ZXIudmFsdWUsXG4gICAgICAgICAgVHlwZTogZmlsdGVyLnR5cGUsXG4gICAgICAgICAgT3BlcmF0b3I6ICdBbmQnLFxuICAgICAgICAgIFNpZ246IHRoaXMuZ2V0Q29uZGl0aW9uKGZpbHRlci5jb25kaXRpb24pLFxuICAgICAgICB9KSk7XG5cbiAgICAgIHRoaXMucG9zdFNlYXJjaChxdWVyeVBhcmFtcyk7XG4gICAgfVxuICB9XG4gIGdldENvbmRpdGlvbih2YWx1ZTogYW55KXtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlIENvbmRpdGlvbmFsT3B0aW9ucy5PbjpcbiAgICAgICAgcmV0dXJuIFNlYXJjaFByb3BlcnR5U2lnbi5FUTtcbiAgICAgIGNhc2UgQ29uZGl0aW9uYWxPcHRpb25zLkFmdGVyOlxuICAgICAgICByZXR1cm4gU2VhcmNoUHJvcGVydHlTaWduLkVRO1xuICAgICAgY2FzZSBDb25kaXRpb25hbE9wdGlvbnMuQmVmb3JlOlxuICAgICAgICByZXR1cm4gU2VhcmNoUHJvcGVydHlTaWduLkxUO1xuICAgICAgY2FzZSBDb25kaXRpb25hbE9wdGlvbnMuTm90RXF1YWw6XG4gICAgICAgIHJldHVybiBTZWFyY2hQcm9wZXJ0eVNpZ24uTkVRO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbHVlIFxuICAgIH1cbiAgfVxuICBvblNvcnRVcGRhdGVkKHVwZGF0ZWRTb3J0czogSURhdGFGaWx0ZXJbXSkge1xuICAgIHRoaXMuY3VycmVudFNvcnRzID0gdXBkYXRlZFNvcnRzO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyc0FuZFNvcnRzKCk7XG4gIH1cblxuICBoYW5kbGVTZWFyY2goZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dChldmVudC52YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVFeHBvcnQoZXhwb3J0ZWREYXRhOiBQYXJ0aWFsPGFueT5bXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdFeHBvcnRlZCBkYXRhOicsIGV4cG9ydGVkRGF0YSk7XG4gICAgdGhpcy5kb3dubG9hZENTVihleHBvcnRlZERhdGEpO1xuICB9XG4gIHByaXZhdGUgZG93bmxvYWRDU1YoZGF0YTogUGFydGlhbDxhbnk+W10pIHtcbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmtleXMoZGF0YVswXSk7XG4gICAgY29uc3QgY3N2Q29udGVudCA9IFtcbiAgICAgIGhlYWRlcnMuam9pbignLCcpLFxuICAgICAgLi4uZGF0YS5tYXAoKHJvdykgPT4gaGVhZGVycy5tYXAoKGhlYWRlcikgPT4gcm93W2hlYWRlcl0pLmpvaW4oJywnKSksXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGlmIChsaW5rLmRvd25sb2FkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCAnZXhwb3J0LmNzdicpO1xuICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5jbGljaygpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxoZWFkZXJcbiAgY2xhc3M9XCJyb3VuZGVkLWxnIHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtNiBweS0yIGJnLVsjRDRBMDA3NzNdXCJcbj5cbiAgPGg0IGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7IGRhdGFbMF0uTmFtZSB8fCBcIlwiIH19PC9oND5cbiAgPHZlcmJlbi1zdmdcbiAgICAoY2xpY2spPVwiZ29CYWNrKClcIlxuICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgIFt3aWR0aF09XCIxN1wiXG4gICAgW2hlaWdodF09XCIxN1wiXG4gICAgW2ljb25dPVwiJ2dvLWJhY2snXCJcbiAgPjwvdmVyYmVuLXN2Zz5cbjwvaGVhZGVyPlxuPGRpdiAjbWVzc2FnZUxvZyBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTQgbWVzc2FnZS1sb2ctY29udGFpbmVyXCI+XG4gIDx2ZXJiZW4tZGF0YS12aWV3XG4gICAgI3ZkdlxuICAgIFt2aWV3U3RhdGVdPVwie1xuICAgICAgICBpc1NlYXJjaDogdHJ1ZSxcbiAgICAgICAgaXNDb2x1bW46IHRydWUsXG4gICAgICAgIGlzRmlsdGVyOiB0cnVlLFxuICAgICAgICBpc1NvcnQ6IHRydWUsXG4gICAgICAgIGlzRXhwb3J0OiB0cnVlLFxuICAgICAgICBpc1NlbGVjdDogdHJ1ZSxcbiAgICAgICAgaXNDcmVhdGU6IHRydWUsXG4gICAgICAgIGlzVG9nZ2xlOnRydWUsXG4gICAgICB9XCJcbiAgICBbYnV0dG9uQ2xhc3NdPVwiJ215LWN1c3RvbS1idXR0b24tY2xhc3MnXCJcbiAgICBbaWNvbkNsYXNzXT1cIidteS1pY29uLWNsYXNzJ1wiXG4gICAgW2FjdGl2ZUljb25DbGFzc109XCInbXktYWN0aXZlLWljb24tY2xhc3MnXCJcbiAgICBbc2VsZWN0ZWRDb2x1bW5Db3VudF09XCIwXCJcbiAgICBbc2VsZWN0ZWRTb3J0Q291bnRdPVwiMFwiXG4gICAgW3NlbGVjdGVkRmlsdGVyVGFibGVDb3VudF09XCIwXCJcbiAgICBbc2VhcmNoVmFsdWVdPVwic2VhcmNoVGVybVwiXG4gICAgKHZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlKCRldmVudClcIlxuICAgIChzdGF0ZUNoYW5nZSk9XCJvblN0YXRlQ2hhbmdlKCRldmVudClcIlxuICAgIChvblNlYXJjaENoYW5nZSk9XCJvblNlYXJjaCgkZXZlbnQpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgdGFibGUtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS10YWJsZVxuICAgICAgICAjZHRcbiAgICAgICAgW2RhdGFdPVwiZGF0YVswXS5Qcm9wZXJ0aWVzXCJcbiAgICAgICAgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbkRlZlwiXG4gICAgICAgIFtzdHlsZUNvbmZpZ109XCJzdHlsZXNcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cInNlbGVjdFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI2NlbGxcbiAgICAgICAgICAgIGxldC1pc1NlbGVjdGVkPVwiaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICBsZXQtdG9nZ2xlUm93U2VsZWN0aW9uPVwidG9nZ2xlUm93U2VsZWN0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlUm93U2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI2hlYWRlclxuICAgICAgICAgICAgbGV0LWFsbFJvd3NTZWxlY3RlZD1cImFsbFJvd3NTZWxlY3RlZFwiXG4gICAgICAgICAgICBsZXQtc29tZVJvd3NTZWxlY3RlZD1cInNvbWVSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LXRvZ2dsZUFsbFJvd3M9XCJ0b2dnbGVBbGxSb3dzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWxsUm93c1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzb21lUm93c1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbFJvd3MoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cIm5hbWVcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlLk5hbWUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI2NlbGxFZGl0XG4gICAgICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgICAgIGxldC11cGRhdGVWYWx1ZT1cInVwZGF0ZVZhbHVlXCJcbiAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgICAgIGlucHV0Q29udGFpbmVyQ2xhc3M9XCJ3LWZpdFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93Lk5hbWVcIlxuICAgICAgICAgICAgPjwvdmVyYmVuYS1pbnB1dD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJtaW5WYWx1ZVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPlxuICAgICAgICAgICAge3sgdmFsdWUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI2NlbGxFZGl0XG4gICAgICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgICAgIGxldC11cGRhdGVWYWx1ZT1cInVwZGF0ZVZhbHVlXCJcbiAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgICAgIFt0eXBlXT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0U3RyaW5nVmFsdWUocm93LCAnTWluVmFsdWUnKVwiXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjb252ZXJ0VG9JbnQoJGV2ZW50LCByb3csICdNaW5WYWx1ZScpXCJcbiAgICAgICAgICAgICAgaW5wdXRDb250YWluZXJDbGFzcz1cInctWzEzMHB4XVwiXG4gICAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cIm1heFZhbHVlXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgICAgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIlxuICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICBpbnB1dENvbnRhaW5lckNsYXNzPVwidy1bMTMwcHhdXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0U3RyaW5nVmFsdWUocm93LCAnTWF4VmFsdWUnKVwiXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjb252ZXJ0VG9JbnQoJGV2ZW50LCByb3csICdNYXhWYWx1ZScpXCJcbiAgICAgICAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiZGVmYXVsdFZhbHVlXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgICAgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIlxuICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgaW5wdXRDb250YWluZXJDbGFzcz1cInctWzEzMHB4XVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93LkRlZmF1bHRWYWx1ZVwiXG4gICAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImRhdGFUeXBlXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgICAgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIlxuICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ2hhbmdlIERhdGEgVHlwZVwiXG4gICAgICAgICAgICAgICAgWyhvcHRpb25zKV09XCJkYXRhVHlwZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3cuRGF0YVR5cGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImlzUmVxdWlyZWRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnICpuZ0lmPVwidmFsdWUgPT09IHRydWVcIiBbaWNvbl09XCInY2hlY2snXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgPHZlcmJlbi1zdmcgKm5nSWY9XCJ2YWx1ZSA9PT0gZmFsc2VcIiBbaWNvbl09XCInZXJyb3InXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgICAgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIlxuICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHZlcmJlbmEtc3dpdGNoXG4gICAgICAgICAgICAgIFtvbkNvbG9yXT1cIicjMUEyMzdFJ1wiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93LklzUmVxdWlyZWRcIlxuICAgICAgICAgICAgPjwvdmVyYmVuYS1zd2l0Y2g+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJhY3Rpb25zXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbFxuICAgICAgICAgICAgbGV0LWlzRWRpdGluZz1cImlzRWRpdGluZ1wiXG4gICAgICAgICAgICBsZXQtdG9nZ2xlUm93RWRpdD1cInRvZ2dsZVJvd0VkaXRcIlxuICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiXG4gICAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dmVyYmVuLXBvcC1VcFxuICAgICAgICAgICAgICBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnOTknIH1cIlxuICAgICAgICAgICAgICBbZHJvcGRvd25PcGVuXT1cImlzRHJvcGRvd25PcGVuKHJvdylcIlxuICAgICAgICAgICAgICBbZW5hYmxlTW91c2VMZWF2ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIChjbG9zZSk9XCJvbkNsb3NlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgYWN0aW9ucy1pY29uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkRyb3Bkb3duKHJvdylcIlxuICAgICAgICAgICAgICAgIGRyb3Bkb3duLXRyaWdnZXJcbiAgICAgICAgICAgICAgICBpY29uPVwibGlzdFwiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3AtdXAtY29udGVudCBmbGV4IGZsZXgtY29sXCIgZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUm93RWRpdCgpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9wLXVwLXZhbHVlIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBFZGl0XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcC11cC12YWx1ZSBjdXJzb3ItcG9pbnRlclwiPkRlbGV0ZTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdmVyYmVuLXBvcC1VcD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI2NlbGxFZGl0XG4gICAgICAgICAgICBsZXQtaXNFZGl0aW5nPVwiaXNFZGl0aW5nXCJcbiAgICAgICAgICAgIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiXG4gICAgICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlVmlhVGFibGUodmFsdWUsIHRvZ2dsZVJvd0VkaXQpXCJcbiAgICAgICAgICAgICAgICBpY29uPVwiY2hlY2tcIlxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIGljb249XCJkZWxldGVcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIGljb249XCJjYXJkVmlld0FsdFwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0NhcmRWaWV3KHZhbHVlKVwiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGliLWRhdGEtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjYXJkLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3XG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEycHhcIlxuICAgICAgICAjdmRjdlxuICAgICAgICBkYXRhSWQ9XCJJZFwiXG4gICAgICAgIGJvcmRlcj1cIjVweFwiXG4gICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGFcIlxuICAgICAgICByYmdDb2xvcj1cIiNmNWY2ZjlcIlxuICAgICAgICBtZz1cIjBweFwiXG4gICAgICA+XG4gICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldyBjbGFzcz1cInNwYWNlLXktN1wiPlxuICAgICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGFcbiAgICAgICAgICAgICN2bGNkXG4gICAgICAgICAgICBbcGFyZW50XT1cInZkY3ZcIlxuICAgICAgICAgICAgZGF0YUlkPVwiaWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJiZy1zZWNvbmRhcnktMTAwIHJvdW5kZWQteGwgYm9yZGVyLXByaW1hcnkgYm9yZGVyLVsxcHhdXCJcbiAgICAgICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FyZCBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1c2VyQ2FyZENsaWNrZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBjdXJzb3ItcG9pbnRlciBoLVttYXgtY29udGVudF1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPCEtLSA8dmVyYmVuLXN2ZyBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCIgKGNsaWNrKT1cInRvZ2dsZUNoaWxkcmVuKGl0ZW0pOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoPyd2aXNpYmxlJzonaW52aXNpYmxlJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbXMtY2VudGVyIGZsZXggIHByLTEgY3Vyc29yLXBvaW50ZXJcIiBbaWNvbl09XCJpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZD8nbWludXMnOidwbHVzJ1wiIC8+IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMyBweC00IGZsZXgtMSBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGZsZXgtMSBnYXAtMSBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBjYXJkLW1pbi1oZWlnaHQganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gbXItNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS0wIGZvbnQtYm9sZCB0ZXh0LVsjNDA0MDQwXSBsZWFkaW5nLVsxOS41cHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRhdGEuTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiF0ZXh0LVsxMHB4XSB0ZXh0LVsjNDA0MDQwXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5EYXRhIFR5cGU6PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiF0ZXh0LVsxM3B4XSBmb250LWJvbGRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGEuRGF0YVR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiF0ZXh0LVsxMHB4XSB0ZXh0LVsjNDA0MDQwXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+RGVmYXVsdCBWYWx1ZTo8L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCIhdGV4dC1bMTJweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZGF0YS5EZWZhdWx0VmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWVuZCBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVudW0tdmFsIHt7aXRlbS5kYXRhLlN0YXR1c319XCI+e3tpdGVtLmRhdGEuU3RhdHVzfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YT5cbiAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgPHZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3BhcmVudD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLmN1cnJlbnREYXRhXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJvdW5kZWQteGwgaC1mdWxsIHctZnVsbCByZWxhdGl2ZSBnYXAtNlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgICAgICAgbmFtZT1cIk5hbWVcIlxuICAgICAgICAgICAgICAgIGxhYmVsPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlVGFibGUoKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RGF0YS5kYXRhLk5hbWVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXY+RGF0YSBUeXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNoYW5nZSBEYXRhIFR5cGVcIlxuICAgICAgICAgICAgICAgICAgWyhvcHRpb25zKV09XCJkYXRhVHlwZVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnREYXRhLmRhdGEuRGF0YVR5cGVcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Ecm9wRG93bkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnREYXRhLmRhdGEuRGF0YVR5cGUgPT09ICdJbnQnIHx8XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnREYXRhLmRhdGEuRGF0YVR5cGUgPT09ICdEZWNpbWFsJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW50ZXIgZGVmYXVsdCBudW1iZXInXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0U3RyaW5nVmFsdWUoY3VycmVudERhdGEuZGF0YSwgJ0RlZmF1bHRWYWx1ZScpXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0ludCgkZXZlbnQsIGN1cnJlbnREYXRhLmRhdGEsICdEZWZhdWx0VmFsdWUnKVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiRGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJEZWZhdWx0IFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlVGFibGUoKVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50RGF0YS5kYXRhLkRhdGFUeXBlID09PSAnU3RyaW5nJyB8fCBjdXJyZW50RGF0YS5kYXRhLkRhdGFUeXBlID09PSAnVVJMJ1wiPlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidFbnRlciBkZWZhdWx0IHRleHQnXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RGF0YS5kYXRhLkRlZmF1bHRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJEZWZhdWx0VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkRlZmF1bHQgVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVUYWJsZSgpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnREYXRhLmRhdGEuRGF0YVR5cGUgPT09ICdCb29sJ1wiPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCI+VG9nZ2xlIGRlZmF1bHQgdmFsdWU8L3A+XG4gICAgICAgICAgICAgICAgICA8dmVyYmVuYS1zd2l0Y2hcbiAgICAgICAgICAgICAgICAgIFtvbkNvbG9yXT1cIicjMUEyMzdFJ1wiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnREYXRhLmRhdGEuRGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICAgICA+PC92ZXJiZW5hLXN3aXRjaD4gICBcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCI+UmVxdWlyZWQ8L3A+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDx2ZXJiZW5hLXN3aXRjaFxuICAgICAgICAgICAgICAgICAgW29uQ29sb3JdPVwiJyMxQTIzN0UnXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudERhdGEuZGF0YS5Jc1JlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICA+PC92ZXJiZW5hLXN3aXRjaD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGlkZU1pbk1heFwiIGNsYXNzPVwiIGZsZXggZmxleC1jb2wgZ2FwLTZcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICBuYW1lPVwibWluVmFsdWVcIlxuICAgICAgICAgICAgICBsYWJlbD1cIk1pbiBWYWx1ZVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVRhYmxlKClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRTdHJpbmdWYWx1ZShjdXJyZW50RGF0YS5kYXRhLCAnTWluVmFsdWUnKVwiXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICBjb252ZXJ0VG9JbnQoJGV2ZW50LCBjdXJyZW50RGF0YS5kYXRhLCAnTWluVmFsdWUnKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgICAgIFt0eXBlXT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICAgbmFtZT1cIm1heFZhbHVlXCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJNYXggVmFsdWVcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVUYWJsZSgpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0U3RyaW5nVmFsdWUoY3VycmVudERhdGEuZGF0YSwgJ01heFZhbHVlJylcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgY29udmVydFRvSW50KCRldmVudCwgY3VycmVudERhdGEuZGF0YSwgJ01heFZhbHVlJylcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPCEtLSBidXR0b25zIC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gdy1mdWxsIGJvdHRvbS04IGxlZnQtMCByaWdodC0wXCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInZlcmJlbi1kZWxldGUtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHRleHQ9XCJEZWxldGVcIlxuICAgICAgICAgICAgICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2ZXJiZW4tc3dpdGNoLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvVGFibGVWaWV3KClcIlxuICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiU3dpdGNoIFRvIFRhYmxlXCJcbiAgICAgICAgICAgICAgICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmVyYmVuLXByaW1hcnktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVVc2VyKClcIlxuICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiU2F2ZVwiXG4gICAgICAgICAgICAgICAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgPCEtLSA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgICAgeWVzaGhoaGhoXG4gICAgICAgICAgPC92ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+IC0tPlxuXG4gICAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXctZm9vdGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgICAgICAgICBbZm9udFdlaWdodF09XCInYm9sZCdcIlxuICAgICAgICAgICAgICAgIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiXG4gICAgICAgICAgICAgICAgW2JvcmRlclJhZGl1c109XCInNHB4J1wiXG4gICAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCInI2ZmZidcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCB7e1xuICAgICAgICAgICAgICAgIHZkY3YuaGFzQ3VycmVudEl0ZW0oKSA/ICdmbGV4LTEnIDogJydcbiAgICAgICAgICAgICAgfX0ganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiXG4gICAgICAgICAgICAgICAgPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92ZXJiZW4tY2FyZC1kYXRhLXZpZXctZm9vdGVyPlxuICAgICAgPC92ZXJiZW4tY2FyZC1kYXRhLXZpZXc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjb2x1bW4tY29udGVudD5cbiAgICAgIDx2ZXJiZW4tdmlzaWJsZS1jb2x1bW5cbiAgICAgICAgKGNvbHVtbnNVcGRhdGVkKT1cIm9uQ29sdW1uc1VwZGF0ZWQoJGV2ZW50KVwiXG4gICAgICAgIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiXG4gICAgICAgIGJnQ29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgIHdpZHRoPVwiNDAwcHhcIlxuICAgICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG4gICAgICAgIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIlxuICAgICAgICBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIlxuICAgICAgICBbY29sdW1uc109XCJ2aXNpYmxlQ29sdW1uc1wiXG4gICAgICAgIFtkaXNwbGF5ZWRDb2x1bW5zXT1cIjVcIlxuICAgICAgPjwvdmVyYmVuLXZpc2libGUtY29sdW1uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZmlsdGVyLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXRhYmxlLWZpbHRlclxuICAgICAgICAoZmlsdGVyc0FwcGxpZWQpPVwib25GaWx0ZXJBcHBsaWVkKCRldmVudClcIlxuICAgICAgICBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICAgIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIlxuICAgICAgICBiZ0NvbG9yPVwid2hpdGVcIlxuICAgICAgICB3aWR0aD1cIjQyMHB4XCJcbiAgICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgICBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCJcbiAgICAgICAgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCJcbiAgICAgICAgdGVydGlhcnlDb2xvcj1cIiM0MDQwNDBcIlxuICAgICAgICBbZmlsdGVyT3B0aW9uc109XCJmaWx0ZXJBcnJheVwiXG4gICAgICAgIFttYXhGaWx0ZXJMZW5ndGhdPVwiM1wiXG4gICAgICA+PC92ZXJiZW4tdGFibGUtZmlsdGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc29ydC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1zb3J0LXRhYmxlXG4gICAgICAgIChzZWxlY3RlZE9wdGlvbnMpPVwib25Tb3J0VXBkYXRlZCgkZXZlbnQpXCJcbiAgICAgICAgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgICBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCJcbiAgICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgd2lkdGg9XCI0MDBweFwiXG4gICAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgICAgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiXG4gICAgICAgIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiXG4gICAgICAgIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCJcbiAgICAgICAgW2VuYWJsZURyYWdBbmREcm9wXT1cInRydWVcIlxuICAgICAgICBbc29ydE9wdGlvbnNdPVwic29ydE9wdGlvbnNcIlxuICAgICAgPjwvdmVyYmVuLXNvcnQtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBleHBvcnQtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS1leHBvcnQgW2RhdGFdPVwiZGF0YVwiIChleHBvcnREYXRhRXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIj5cbiAgICAgIDwvbGliLWRhdGEtZXhwb3J0PlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1kYXRhLXZpZXc+XG4gIDxkaXYgKm5nSWY9XCJ2ZHYuaXNUYWJsZVZpZXdcIiBjbGFzcz1cImZsZXggZ2FwLTIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICBbZm9udFdlaWdodF09XCInYm9sZCdcIlxuICAgICAgICBbYmdDb2xvcl09XCInIzhFOEQ4NydcIlxuICAgICAgICBbYm9yZGVyUmFkaXVzXT1cIic0cHgnXCJcbiAgICAgICAgW3RleHRDb2xvcl09XCInI2ZmZidcIlxuICAgICAgICBbdGV4dF09XCInRGVsZXRlJ1wiXG4gICAgICA+XG4gICAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRNb3JlKClcIiBjbGFzcz1cImxvYWQtbW9yZSB2aWV3LWxpbmtzXCI+XG4gICAgICAgIExvYWQgbW9yZVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
872
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWdyb3VwL2Zvcm0tZmllbGRzL2Zvcm0tZmllbGRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1ncm91cC9mb3JtLWZpZWxkcy9mb3JtLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsa0JBQWtCLEVBQ2xCLGNBQWMsR0FNZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7OztBQU1wRCxJQUFLLG9CQVNKO0FBVEQs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LENBQUMsQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7WUFDakMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7d0dBeDdCVSxtQkFBbUI7NEZBQW5CLG1CQUFtQix5bEJDN0VoQyw4bmxCQTZnQkE7OzRGRGhjYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCO3lXQVNqQixJQUFJO3NCQUFiLEtBQUs7Z0JBSW9DLFNBQVM7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDckIsWUFBWTtzQkFBOUIsU0FBUzt1QkFBQyxNQUFNO2dCQUNDLFFBQVE7c0JBQXpCLFNBQVM7dUJBQUMsS0FBSztnQkFDQyxTQUFTO3NCQUF6QixTQUFTO3VCQUFDLElBQUk7Z0JBQ04sV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDSSxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2FyZERhdGEsXG4gIENhcmREYXRhVmlld0NvbXBvbmVudCxcbiAgQ29sdW1uRGVmaW5pdGlvbixcbiAgQ29uZGl0aW9uYWxPcHRpb25zLFxuICBEYXRhRmlsdGVyVHlwZSxcbiAgRGF0YVRhYmxlQ29tcG9uZW50LFxuICBEYXRhVmlld0NvbXBvbmVudCxcbiAgRHJvcGRvd25DaGFuZ2VFdmVudCxcbiAgRHJvcGRvd25Mb2FkRXZlbnQsXG4gIElEYXRhRmlsdGVyLFxufSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgYmFzZVN0eWxlIH0gZnJvbSAnLi4vYmFzZS10YWJsZS1zdHlsZSc7XG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWwuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwV2ViUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9odHRwLXdlYi1yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9FcnJvclJlc3BvbnNlJztcbmltcG9ydCB7IFBhZ2VkUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL1BhZ2VkUmVzdWx0JztcbmltcG9ydCB7IFNlYXJjaFByb3BlcnR5VmFsdWUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvU2VhcmNoUHJvcGVydHlWYWx1ZSc7XG5pbXBvcnQgeyBTZWFyY2hPcGVyYXRvciB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9TZWFyY2hPcGVyYXRvcic7XG5pbXBvcnQgeyBTZWFyY2hQcm9wZXJ0eVNpZ24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvU2VhcmNoUHJvcGVydHlTaWduJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vudmlyb25tZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTdGF0dXMgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc3RhdHVzJztcbmltcG9ydCB7IE9iamVjdFN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL29iamVjdC1zdGF0ZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvRGF0YVR5cGUnO1xuaW1wb3J0IHsgRm9ybXNGaWVsZFNlcnZpY2UgfSBmcm9tICcuL2Zvcm0tZmllbGRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUVudGl0eSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9Gb3JtRW50aXR5JztcbmltcG9ydCB7IEZvcm1Qcm9wZXJ0eSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9Gb3JtUHJvcGVydHknO1xuXG5lbnVtIFRhc2tVc2VyUHJvcGVydHlOYW1lIHtcbiAgVXNlciA9ICdVc2VyJyxcbiAgRGF0ZSA9ICdEYXRlJyxcbiAgUm9sZSA9ICdSb2xlJyxcbiAgU2VydmljZSA9ICdTZXJ2aWNlJyxcbiAgQXBwbGljYXRpb24gPSAnQXBwbGljYXRpb24nLFxuICBUZW5hbnQgPSAnVGVuYW50JyxcbiAgRW1haWwgPSAnRW1haWwnLFxuICBTdGF0dXMgPSAnU3RhdHVzJyxcbn1cbmVudW0gVGFza1VzZXJQcm9wZXJ0eU1hcCB7XG4gIFVzZXIgPSAnTmFtZScsXG4gIERhdGUgPSAnQ3JlYXRlZEF0JyxcbiAgUm9sZSA9ICdSb2xlSUQnLFxuICBTZXJ2aWNlID0gJ1NlcnZpY2VOYW1lJyxcbiAgQXBwbGljYXRpb24gPSAnQXBwbGljYXRpb24nLFxuICBUZW5hbnQgPSAnVGVuYW50SWQnLFxuICBFbWFpbCA9ICdNYWlsQWRkcmVzcycsXG4gIFN0YXR1cyA9ICdTdGF0dXMnLFxufVxuXG5lbnVtIEZpbHRlclR5cGVzIHtcbiAgQmVmb3JlID0gU2VhcmNoUHJvcGVydHlTaWduLkxULFxuICBPbiA9IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgQWZ0ZXIgPSBTZWFyY2hQcm9wZXJ0eVNpZ24uR1QsXG4gIE5FUSA9IFNlYXJjaFByb3BlcnR5U2lnbi5ORVEsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1mb3JtLWZpZWxkcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9mb3JtLWZpZWxkcy5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUZpZWxkc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHZpc2libGVDb2x1bW5EZWY6IENvbHVtbkRlZmluaXRpb248Rm9ybVByb3BlcnR5PltdID0gW107XG4gIHN0eWxlcyA9IGJhc2VTdHlsZTtcbiAgZGF0YTogRm9ybUVudGl0eVtdID0gW107XG4gIGhpZGVNaW5NYXg6Ym9vbGVhbj10cnVlXG4gIEBJbnB1dCAoKSBwYXRoOiBzdHJpbmcgPSAnL2RvY3VtZW50YXRpb24vd29ya2Zsb3ctZm9ybXMvZmllbGRzJztcbiAgY2FyZERhdGE6IENhcmREYXRhW10gPSBbXTtcbiAgcXVlcnlQYXJhbXM6IGFueSA9IHt9O1xuICBjdXJyZW50RGF0YTogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JywgeyBzdGF0aWM6IHRydWUgfSkgZmlsZUlucHV0ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndmRjdicpIGNhcmREYXRhVmlldyE6IENhcmREYXRhVmlld0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndmR2JykgZGF0YVZpZXchOiBEYXRhVmlld0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZHQnKSB0YWJsZVZpZXchOiBEYXRhVGFibGVDb21wb25lbnQ8Rm9ybUVudGl0eT47XG4gIEBJbnB1dCgpIGFwcGxpY2F0aW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBASW5wdXQoKSBzZWFyY2hEZWJvdW5jZVRpbWU6IG51bWJlciA9IDUwMDtcbiAgQE91dHB1dCgpIG9uVmlld1Byb2Nlc3NDbGlja2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgY3VycmVudEV4cGFuZGVkQ2FyZDogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcbiAgcGFnZVN0YXRlOiBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PiB8IG51bGwgPSBudWxsO1xuICBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgb3BlbkRyb3Bkb3duSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBjdXJyZW50RmlsdGVyczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICBjdXJyZW50U29ydHM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50Om51bWJlcj0wXG4gIHNob3dGaWx0ZXI6Ym9vbGVhbj1mYWxzZVxuICBzZWFyY2hUZXJtJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJvcGVydGllczpGb3JtUHJvcGVydHlbXT1bXVxuICBzZWFyY2hUZXJtOnN0cmluZz0nJ1xuICBza2lwPTBcbiAgSWQ6c3RyaW5nPScnXG4gIHN0YXR1c09wdGlvbnM6IFN0YXR1c1tdID0gT2JqZWN0LnZhbHVlcyhTdGF0dXMpO1xuICBkYXRhVHlwZTogRGF0YVR5cGVbXSA9IE9iamVjdC52YWx1ZXMoRGF0YVR5cGUpO1xuICB1c2VyczogRm9ybUVudGl0eVtdID0gW107XG5cbiAgdmlzaWJsZUNvbHVtbnM6IElEYXRhRmlsdGVyW10gPSBbXTtcblxuICBmaWx0ZXJBcnJheTogSURhdGFGaWx0ZXJbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnTmFtZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdEYXRhVHlwZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdEZWZhdWx0VmFsdWUnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICBcbiAgICB7XG4gICAgICBuYW1lOiAnVmFsdWUnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTWF4VmFsdWUnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuTnVtYmVyLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOidNaW5WYWx1ZScsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6J0lzUmVxdWlyZWQnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuQm9vbCxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICBcbiAgXTtcblxuICBzb3J0T3B0aW9uczogSURhdGFGaWx0ZXJbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiBUYXNrVXNlclByb3BlcnR5TmFtZS5EYXRlLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogVGFza1VzZXJQcm9wZXJ0eU5hbWUuVXNlcixcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZyxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogVGFza1VzZXJQcm9wZXJ0eU5hbWUuRW1haWwsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFRhc2tVc2VyUHJvcGVydHlOYW1lLlRlbmFudCxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZyxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogVGFza1VzZXJQcm9wZXJ0eU5hbWUuQXBwbGljYXRpb24sXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFRhc2tVc2VyUHJvcGVydHlOYW1lLlNlcnZpY2UsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFRhc2tVc2VyUHJvcGVydHlOYW1lLlJvbGUsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICBdO1xuXG4gIHByaXZhdGUgY3VycmVudFNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdXRpbFNlcnZpY2U6IFV0aWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VydmVyOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZW52U3ZjOiBFbnZpcm9ubWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHRhc2tVc2Vyc1N2YzogRm9ybXNGaWVsZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICApIHtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5EZWYgPSB0YXNrVXNlcnNTdmMuZm9ybUZpZWxkQ29sdW1ucztcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gdGFza1VzZXJzU3ZjLmZvcm1GaWVsZENvbHVtbnMubWFwKChjb2wpID0+ICh7XG4gICAgICBjaGVja2VkOiB0cnVlLFxuICAgICAgbmFtZTogdHlwZW9mIGNvbC5oZWFkZXIgPT09ICdzdHJpbmcnID8gY29sLmhlYWRlciA6IGNvbC5pZCxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkJvb2wsXG4gICAgfSkpO1xuICB9XG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgdGhpcy5zZWFyY2hUZXJtJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKSkgLy8gQWRqdXN0IGRlYm91bmNlIHRpbWUgaGVyZSAoaW4gbXMpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChzZWFyY2hUZXJtKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcnNBbmRTb3J0cyh0cnVlKTtcbiAgICAgIH0pO1xuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IElkID0gcGFyYW1zWydGb3JtSWQnXTtcbiAgICAgIHRoaXMuSWQ9SWRcbiAgICAgIGlmIChJZCkge1xuICAgICAgICB0aGlzLmdldFByb3BlcnRpZXMoSWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBhc3luYyBwb3N0U2VhcmNoKHBheWxvYWQ6IGFueSkge1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICBgRm9ybS9TZWFyY2hGb3JtRW50aXRpZXMvMC8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgIFxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIHRoaXMucGFnZVN0YXRlID0gcmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+O1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT4pLlJlc3VsdDtcbiAgICAgIHRoaXMuZGF0YT1yZXN1bHRcbiAgICAgIFxuICAgICAgdGhpcy5zZXRVcENhcmREYXRhKCk7XG4gICAgICAvLyB0aGlzLnNldFVwQ2FyZERhdGFFeHRyYSh0aGlzLmRhdGEpXG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG4gIG9uRHJvcERvd25DaGFuZ2UoZXZlbnQ6c3RyaW5nKXtcbiAgICBpZiggZXZlbnQpe1xuICAgICAgdGhpcy5jaGVja01pbk1heChldmVudClcbiAgICB9XG4gIFxuICB9XG4gIGFzeW5jIGdldFByb3BlcnRpZXMoSWQ6IHN0cmluZyk6IFByb21pc2U8Rm9ybUVudGl0eVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgUHJvcGVydHlOYW1lOiBgSWRgLFxuICAgICAgICBFbnRpdHlWYWx1ZTogSWQsXG4gICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgICAgVHlwZTogU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuU3RyaW5nLFxuICAgICAgfSxcbiAgICBdO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICBgRm9ybS9TZWFyY2hGb3JtRW50aXRpZXMvJHt0aGlzLnNraXB9LyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PikuUmVzdWx0O1xuICAgICAgdGhpcy5kYXRhID0gcmVzdWx0O1xuICAgICAgdGhpcy5kYXRhLm1hcCh4ID0+IHguUHJvcGVydGllcy5mb3JFYWNoKChwLGkpPT5wLmlkPWkpKTtcbiAgICAgIHRoaXMuc2V0VXBDYXJkRGF0YSgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIFxuICAgIH1cbiAgfVxuXG5cbiAgb25Vc2VyU2VsZWN0ZWQoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQsIGl0ZW06IEZvcm1FbnRpdHkpIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2Vycy5maW5kKCh4KSA9PiB4Lk5hbWUgPT0gZXZlbnQudmFsdWUpO1xuICAgIGlmICh1c2VyKSB7XG4gICAgICBpdGVtLk5hbWUgPSB1c2VyLk5hbWU7XG4gICAgICBpdGVtLkRlc2NyaXB0aW9uID0gdXNlci5EZXNjcmlwdGlvbjtcbiAgICAgIGl0ZW0uUHJvcGVydGllcyA9IHVzZXIuUHJvcGVydGllcztcbiAgICAgIGl0ZW0uSXNWYWxpZGF0ZWQgPSB1c2VyLklzVmFsaWRhdGVkO1xuICAgIH1cbiAgfVxuICBvbkNsZWFyKGV2ZW50OiBFdmVudCwgaXRlbTogRm9ybUVudGl0eSkge1xuICAgIGl0ZW0uTmFtZSA9ICcnO1xuICAgIGl0ZW0uRGVzY3JpcHRpb24gPSAnJztcbiAgICBpdGVtLlByb3BlcnRpZXMgPSBbXTtcbiAgICBpdGVtLklzVmFsaWRhdGVkID0gZmFsc2U7XG4gIH1cbiAgYXN5bmMgZ2V0Rm9ybXMoKTogUHJvbWlzZTxGb3JtRW50aXR5W10gfCB1bmRlZmluZWQ+IHtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICBgRm9ybS9HZXRGb3JtRW50aXRpZXNXaXRoUGFyYW1zL0dyb3VwLzAvJHt0aGlzLnBhZ2VTaXplfWAsXG4gICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VTdGF0ZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PjtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICB0aGlzLmRhdGEgPSByZXN1bHQ7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICAgIHRoaXMucHJvcGVydGllcz1yZXN1bHRbMF0uUHJvcGVydGllc1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgZ2V0SXRlbUxhYmVsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMudXNlcnMuZmluZCgodXNlcikgPT4gdXNlci5OYW1lID09PSBuYW1lKTtcbiAgICBjb25zdCBvdGhlckNoZWNrID0gdGhpcy5kYXRhLmZpbmQoKGRhdGEpID0+IGRhdGEuTmFtZSA9PT0gbmFtZSk7XG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLk5hbWUgOiBvdGhlckNoZWNrID8gb3RoZXJDaGVjay5OYW1lIDogJyc7XG4gIH1cblxuICBnZXRBc3luY0xhYmVsKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEuZmluZCgoeCkgPT4geC5OYW1lID09IHZhbHVlKTtcblxuICAgIHJldHVybiBkYXRhID8gZGF0YS5OYW1lIDogJyc7XG4gIH1cblxuICBhc3luYyBsb2FkTW9yZSgpIHtcbiAgICBpZiAoIXRoaXMucGFnZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMuY3VycmVudFNvcnRzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgICAgPyBhd2FpdCB0aGlzLmxvYWRNb3JlRmlsdGVyc0FuZFNvcnRzKClcbiAgICAgICAgOiBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgICAgICBgVGFza1VzZXIvR2V0VGFza1VzZXJzLyR7dGhpcy5wYWdlU3RhdGUuU2tpcH0vJHt0aGlzLnBhZ2VTaXplfWAsXG4gICAgICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZVN0YXRlID0gcmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+O1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT4pLlJlc3VsdDtcbiAgICAgIFxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChcbiAgICAgICAgcmVzdWx0Lm1hcCgoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgaWQ6IHguTmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2V0VXBDYXJkRGF0YUV4dHJhKHJlc3VsdCk7XG4gICAgfVxuICB9XG4gIGNhcmRDbGlja2VkKGl0ZW06IENhcmREYXRhLCB0b2dnbGVWaWV3OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2soaXRlbSk7XG4gICAgaWYgKHRvZ2dsZVZpZXcpIHtcbiAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgIH1cbiAgfVxuICB0b2dnbGVDaGlsZHJlbihpdGVtOiBDYXJkRGF0YSkge1xuICAgIHZhciBjdXJyVG9nZ2xlU3RhdGUgPSBpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZDtcbiAgICB0aGlzLmNhcmREYXRhLmZvckVhY2goKF8pID0+IHtcbiAgICAgIF8uaXNDaGlsZHJlbkV4cGFuZGVkID0gZmFsc2U7XG4gICAgfSk7XG4gICAgaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQgPSAhY3VyclRvZ2dsZVN0YXRlO1xuICAgIGlmIChpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZCkge1xuICAgICAgdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkID0gaXRlbTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgc2V0VXBDYXJkRGF0YSgpIHtcbiAgXG4gICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhW10gPSB0aGlzLmRhdGFbMF0uUHJvcGVydGllcy5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLngsXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgdGl0bGU6IHguTmFtZSxcbiAgICAgICAgZGF0YTogeCxcbiAgICAgICAgYm9keTogW10sXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG4gIFxuICAgIHRoaXMuY2FyZERhdGEgPSBjYXJkRGF0YTsgLy8gQXNzaWduIHRoZSB0cmFuc2Zvcm1lZCBhcnJheSB0byBgY2FyZERhdGFgXG4gIH1cbiAgXG4gIGNsb3NlUG9wVXAocm93OkZvcm1FbnRpdHkpIHtcbiAgICB0aGlzLm9wZW5Ecm9wZG93bklkID1yb3cuSWRcbiAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgfVxuICBzZXRVcENhcmREYXRhRXh0cmEoYmFzZURhdGE6IEZvcm1FbnRpdHlbXSkge1xuICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YVtdID0gYmFzZURhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHRpdGxlOiB4Lk5hbWUsXG4gICAgICAgIGRhdGE6IHgsXG4gICAgICAgIGJvZHk6IFtdLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2FyZERhdGEgPSB0aGlzLmNhcmREYXRhLmNvbmNhdChjYXJkRGF0YSk7XG4gIH1cblxuICBnb1RvQ2FyZFZpZXcoZGF0YTogRm9ybVByb3BlcnR5KSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuY2FyZERhdGEuZmluZCgoeCkgPT4geC5kYXRhID09IGRhdGEpO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLnVzZXJDYXJkQ2xpY2tlZChpdGVtLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBnb1RvVGFibGVWaWV3KCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50RGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICBjb25zdCBpZCA9IHRoaXMuY3VycmVudERhdGEuZGF0YSA/IHRoaXMuY3VycmVudERhdGEuZGF0YS5JZCA6ICcnO1xuICAgIGlmIChpZC50cmltKCkubGVuZ3RoID4gMCAmJiAhdGhpcy50YWJsZVZpZXcuaXNSb3dFZGl0aW5nKGlkKSkge1xuICAgICAgdGhpcy50YWJsZVZpZXcudG9nZ2xlUm93RWRpdChpZCk7XG4gICAgfVxuICB9XG5cbiAgdmlld1Byb2Nlc3Nlcyhjb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoY29kZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vblZpZXdQcm9jZXNzQ2xpY2tlZC5lbWl0KGNvZGUpO1xuICB9XG5cbiAgdXNlckNhcmRDbGlja2VkKGl0ZW06IENhcmREYXRhLCB0b2dnbGVWaWV3OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLmNhcmREYXRhLmZvckVhY2goKGNhcmQpID0+IChjYXJkLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2soaXRlbSk7XG4gICAgaWYgKHRvZ2dsZVZpZXcpIHtcbiAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgIH1cbiAgfVxuICBcblxuICBhc3luYyBzYXZlRm9ybVByb3BlcnR5KCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50RGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1Qcm9wZXJ0eTogRm9ybUVudGl0eVtdID0gdGhpcy5kYXRhO1xuXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQVBJIGNhbGwgdG8gc2F2ZSB1c2VyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgICBgRm9ybS9TYXZlRm9ybUVudGl0aWVzYCxcbiAgICAgICAgZm9ybVByb3BlcnR5LFxuICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgKTtcblxuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuXG4gICAgICBpZiAoIShyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdGb3JtIHByb3BlcnR5IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcyBhcyBGb3JtRW50aXR5W107XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHVzZXJSZXN1bHQgPSByZXN1bHRbMF07XG5cbiAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KFxuICAgICAgICAgICAgKHgpID0+IHggPT09IHRoaXMuY3VycmVudERhdGE/LmRhdGFcbiAgICAgICAgICApO1xuXG4gICAgICAgICBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgICAvLyBPcHRpb25hbDogSGFuZGxlIGVycm9ycyBpZiBuZWVkZWRcbiAgICB9XG4gIH1cbiAgc3RyaW5naWZ5KHZhbDphbnkpe1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWwpXG4gIH1cbiAgYXN5bmMgc2F2ZVVzZXIoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudERhdGEpIHtcbiAgICAgIHZhciBwcm9wZXJ0eTogRm9ybVByb3BlcnR5ID0gdGhpcy5jdXJyZW50RGF0YS5kYXRhIGFzIEZvcm1Qcm9wZXJ0eTtcbiAgICAgIHByb3BlcnR5Lk1heFZhbHVlID0gTnVtYmVyKHByb3BlcnR5Lk1heFZhbHVlKTtcbiAgICAgIHByb3BlcnR5Lk1pblZhbHVlID0gTnVtYmVyKHByb3BlcnR5Lk1pblZhbHVlKTtcbiAgXG4gICAgICBpZiAodGhpcy5jdXJyZW50RGF0YS5kYXRhLk5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dJbmZvKCdOYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIFxuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gIFxuICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSB0aGlzLmRhdGEubWFwKChmb3JtKSA9PiB7XG4gIFxuICAgICAgICBjb25zdCBwcm9wZXJ0eUluZGV4ID0gZm9ybS5Qcm9wZXJ0aWVzLmZpbmRJbmRleChcbiAgICAgICAgICAocCkgPT4gcC5pZCA9PT0gcHJvcGVydHkuaWRcbiAgICAgICAgKTtcbiAgXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZGV4ID4gLTEpIHtcbiAgICAgICAgICBmb3JtLlByb3BlcnRpZXNbcHJvcGVydHlJbmRleF0gPSBwcm9wZXJ0eTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtLlByb3BlcnRpZXMgPSBbLi4uZm9ybS5Qcm9wZXJ0aWVzLCBwcm9wZXJ0eV07XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtLkRhdGFTdGF0ZSA9XG4gICAgICAgICAgZm9ybS5EYXRhU3RhdGUgPT09IE9iamVjdFN0YXRlLk5ld1xuICAgICAgICAgICAgPyBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgICAgIDogT2JqZWN0U3RhdGUuQ2hhbmdlZDtcbiAgXG4gICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgfSk7XG4gIFxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChcbiAgICAgICAgYEZvcm0vU2F2ZUZvcm1FbnRpdGllc2AsXG4gICAgICAgIHVwZGF0ZWREYXRhLFxuICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgKTtcbiAgXG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gIFxuICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcblxuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2F2aW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdGb3JtIHByb3BlcnR5IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgRm9ybUVudGl0eVtdO1xuICBcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIHVzZXJSZXN1bHQgPSByZXN1bHRbMF07XG4gICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleChcbiAgICAgICAgICAgICh4KSA9PiB4ID09PSB0aGlzLmN1cnJlbnREYXRhPy5kYXRhXG4gICAgICAgICAgKTtcbiAgXG4gICAgICAgICAgaWYgKGl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Qcm9wZXJ0aWVzID0gdXNlclJlc3VsdC5Qcm9wZXJ0aWVzO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGFzeW5jIHNhdmVWaWFUYWJsZShyb3c6IEZvcm1Qcm9wZXJ0eSwgY2FsbEJhY2s6ICgpID0+IGFueSkge1xuICAgIGlmICghcm93KSByZXR1cm47XG4gIFxuICAgIC8vIFVwZGF0ZSBhbmQgdmFsaWRhdGUgdGhlIHByb3BlcnR5XG4gICAgY29uc3QgcHJvcGVydHk6IEZvcm1Qcm9wZXJ0eSA9IHtcbiAgICAgIC4uLnJvdyxcbiAgICAgIE1heFZhbHVlOiBOdW1iZXIocm93Lk1heFZhbHVlKSxcbiAgICAgIE1pblZhbHVlOiBOdW1iZXIocm93Lk1pblZhbHVlKSxcbiAgICB9O1xuICBcbiAgICBpZiAocm93Lk5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93SW5mbygnTmFtZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIFxuICAgIC8vIFVwZGF0ZSB0aGUgVUkgaW1tZWRpYXRlbHlcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKChmb3JtKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eUluZGV4ID0gZm9ybS5Qcm9wZXJ0aWVzLmZpbmRJbmRleCgocCkgPT4gcC5pZCA9PT0gcHJvcGVydHkuaWQpO1xuICBcbiAgICAgIGlmIChwcm9wZXJ0eUluZGV4ID4gLTEpIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBleGlzdGluZyBwcm9wZXJ0eVxuICAgICAgICBmb3JtLlByb3BlcnRpZXNbcHJvcGVydHlJbmRleF0gPSBwcm9wZXJ0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFkZCB0aGUgbmV3IHByb3BlcnR5XG4gICAgICAgIGZvcm0uUHJvcGVydGllcyA9IFsuLi5mb3JtLlByb3BlcnRpZXMsIHByb3BlcnR5XTtcbiAgICAgIH1cbiAgXG4gICAgICAvLyBNYXJrIHRoZSBmb3JtJ3Mgc3RhdGUgYXMgY2hhbmdlZFxuICAgICAgZm9ybS5EYXRhU3RhdGUgPVxuICAgICAgICBmb3JtLkRhdGFTdGF0ZSA9PT0gT2JqZWN0U3RhdGUuTmV3ID8gT2JqZWN0U3RhdGUuTmV3IDogT2JqZWN0U3RhdGUuQ2hhbmdlZDtcbiAgXG4gICAgICByZXR1cm4gZm9ybTtcbiAgICB9KTtcbiAgXG4gICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGltbWVkaWF0ZWx5XG4gICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gIFxuICAgIC8vIFNlbmQgdGhlIHVwZGF0ZWQgZGF0YSB0byB0aGUgc2VydmVyXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgICBgRm9ybS9TYXZlRm9ybUVudGl0aWVzYCxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgKTtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgXG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2F2aW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdGb3JtIHByb3BlcnR5IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgRm9ybUVudGl0eVtdO1xuICBcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gU3luYyB0aGUgdXBkYXRlZCBwcm9wZXJ0aWVzIHdpdGggdGhlIHNlcnZlciByZXNwb25zZVxuICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5tYXAoKGZvcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGb3JtID0gcmVzdWx0LmZpbmQoKHIpID0+IHIuSWQgPT09IGZvcm0uSWQpO1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWRGb3JtID8geyAuLi5mb3JtLCBQcm9wZXJ0aWVzOiB1cGRhdGVkRm9ybS5Qcm9wZXJ0aWVzIH0gOiBmb3JtO1xuICAgICAgICAgIH0pO1xuICBcbiAgICAgICAgICAvLyBUcmlnZ2VyIFVJIHVwZGF0ZSBhZ2FpblxuICAgICAgICAgIHRoaXMuZGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgICB9XG4gIFxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBjYWxsYmFjayBhZnRlciBzdWNjZXNzZnVsIHNhdmVcbiAgICAgICAgY2FsbEJhY2soKTtcbiAgICAgICAgdGhpcy5vcGVuRHJvcGRvd25JZD1udWxsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKCdGYWlsZWQgdG8gc2F2ZSBkdWUgdG8gYSBuZXR3b3JrIGVycm9yJyk7XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyB0YWJsZVNhdmVVc2VyKHVzZXI6IEZvcm1FbnRpdHksIGNhbGxCYWNrOiAoKSA9PiBhbnkpIHtcblxuICBcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgYEZvcm0vU2F2ZUZvcm1FbnRpdGllc2AsXG4gICAgICB0aGlzLmRhdGEubWFwKChpdGVtKT0+KHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgUHJvcGVydGllczpbLi4uaXRlbS5Qcm9wZXJ0aWVzLCB1c2VyXSxcbiAgICAgICAgRGF0YVN0YXRlOk9iamVjdFN0YXRlLkNoYW5nZWRcbiAgICAgIH0pKSxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICBcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNhdmluZyB0aGUgZm9ybScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdQcm9wZXJ0aWVzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gIFxuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzIGFzIEZvcm1FbnRpdHlbXTtcbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB1c2VyUmVzdWx0ID0gcmVzdWx0WzBdO1xuICBcbiAgICAgICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIHVzZXIgaW4gdGhlIGRhdGEgYXJyYXlcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleCgoeCkgPT4geCA9PT0gdXNlcik7XG4gIFxuICAgICAgICBpZiAoaXRlbUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAvLyBVcGRhdGUgb25seSB0aGUgUHJvcGVydGllcyBmaWVsZFxuICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlByb3BlcnRpZXMgPSB1c2VyUmVzdWx0LlByb3BlcnRpZXM7XG4gIFxuICAgICAgICAgIC8vIFRyaWdnZXIgVUkgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICAgIHRoaXMuZGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgICB9XG4gIFxuICAgICAgICAvLyBJbnZva2UgdGhlIGNhbGxiYWNrIGFmdGVyIHVwZGF0aW5nIHRoZSBwcm9wZXJ0aWVzXG4gICAgICAgIGNhbGxCYWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICB0b2dnbGVJc1ZhbGlkYXRlKHZhbHVlOiBib29sZWFuLCByb3c6IEZvcm1Qcm9wZXJ0eSk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gIXZhbHVlO1xuICAgIHJvdy5Jc1JlcXVpcmVkID0gbmV3VmFsdWU7XG4gICAgY29uc29sZS5sb2cocm93KTtcbiAgfVxuXG4gIHVwZGF0ZVRhYmxlKCkge1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5tYXAoKHgpID0+IHgpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YSk7XG4gIH1cbiAgXG4gIGNvbnZlcnRUb0ludCh2YWx1ZTogYW55LCBkYXRhOiBhbnkscHJvcDogc3RyaW5nKSB7XG4gICAgZGF0YVtwcm9wXSA9IHBhcnNlSW50KHZhbHVlKTtcbiAgfVxuICBnZXRTdHJpbmdWYWx1ZShkYXRhOiBhbnkscHJvcDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0YVtwcm9wXS50b1N0cmluZygpO1xuICB9XG4gXG4gIFxuICBjaGVja01pbk1heCh2YWx1ZTpzdHJpbmcpe1xuICAgIHZhciBzaG93TWlubWF4PWZhbHNlXG4gICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICAgICAgICAgIHNob3dNaW5tYXg9dHJ1ZVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0ludCc6XG4gICAgICAgICAgICAgIHNob3dNaW5tYXg9dHJ1ZVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0RlY2ltYWwnOlxuICAgICAgICAgICAgc2hvd01pbm1heD10cnVlXG4gICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdGbG9hdCc6XG4gICAgICAgICAgICAgIHNob3dNaW5tYXg9dHJ1ZVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuaGlkZU1pbk1heD1zaG93TWlubWF4XG4gIH1cbiAgXG5cbiAgbmF2aWdhdGVUb0ZpZWxkcygpIHtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXM7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3RoaXMucGF0aH1gXSwgeyBxdWVyeVBhcmFtcyB9KTtcbiAgfVxuICBvbkNsb3NlKCkge1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gIH1cblxuXG5cbiAgb3BlbkRyb3Bkb3duKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZW5Ecm9wZG93bklkID09PSBpdGVtLmlkKSB7XG4gICAgICB0aGlzLm9wZW5Ecm9wZG93bklkID0gbnVsbDsgLy8gQ2xvc2UgdGhlIGRyb3Bkb3duIGlmIGl0J3MgYWxyZWFkeSBvcGVuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbkRyb3Bkb3duSWQgPSBpdGVtLmlkOyAvLyBPcGVuIHRoZSBjbGlja2VkIGRyb3Bkb3duXG4gICAgfVxuICB9XG4gIFxuICBnb0JhY2soKSB7XG4gICAgdGhpcy5fbG9jYXRpb24uYmFjaygpO1xuICB9XG4gIGlzRHJvcGRvd25PcGVuKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wZW5Ecm9wZG93bklkID09PSBpdGVtLklkO1xuICB9XG5cbiAgb25WaWV3Q2hhbmdlKGlzR3JpZFZpZXc6IGJvb2xlYW4pOiB2b2lkIHt9XG5cbiAgb25TdGF0ZUNoYW5nZShldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICB2YXIgbmV3VXNlcjogRm9ybVByb3BlcnR5ID0ge1xuICAgICAgICAgIE1heFZhbHVlOiAxMDAsXG4gICAgICAgICAgTmFtZTogJycsXG4gICAgICAgICAgVmFsdWU6ICcnLFxuICAgICAgICAgIE1pblZhbHVlOiAxMDAsXG4gICAgICAgICAgSXNSZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgRGF0YVR5cGU6IERhdGFUeXBlLlN0cmluZyxcbiAgICAgICAgICBEZWZhdWx0VmFsdWU6ICcnLFxuICAgICAgICAgIGlkOicnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YSA9IHtcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgdGl0bGU6IG5ld1VzZXIuTmFtZSxcbiAgICAgICAgICBkYXRhOiBuZXdVc2VyLFxuICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmNhcmREYXRhLnB1c2goY2FyZERhdGEpO1xuICAgICAgICB0aGlzLnVzZXJDYXJkQ2xpY2tlZChjYXJkRGF0YSk7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuaXNUYWJsZVZpZXcgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmVzZXQoKXtcbiAgICB0aGlzLnNraXA9MFxuICAgIHRoaXMucGFnZVNpemU9MTBcbiAgfVxuICBhc3luYyBvblNlYXJjaChldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gZXZlbnQudmFsdWU7XG4gICAgIHRoaXMucmVzZXQoKVxuICAgIGlmICghdGhpcy5zZWFyY2hUZXJtKSB7XG4gICAgICAgdGhpcy5nZXRQcm9wZXJ0aWVzKHRoaXMuSWQpXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICBgRm9ybS9HZXRGb3JtRW50aXRpZXNXaXRoUGFyYW0vJHt0aGlzLnNlYXJjaFRlcm19LyR7dGhpcy5za2lwfS8ke3RoaXMucGFnZVNpemV9L0NyZWF0ZWRBdC9hc2NgXG4gICAgICApO1xuXG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG5cbiAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBzZWFyY2g6JywgcmVzKTtcbiAgICBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFnZVN0YXRlID0gcmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+O1xuICAgICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PikuUmVzdWx0O1xuICAgICAgICB0aGlzLmRhdGE9cmVzdWx0XG4gICAgICAgIFxuICAgICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICAgICAgXG4gICAgICBcbiAgXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1NlYXJjaCBlcnJvcjonLCBlcnJvcik7XG4gICBcbiAgICB9IGZpbmFsbHkge1xuXG4gICAgfVxuICB9XG4gIHNob3dUYWJsZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWRSb3dzOiBGb3JtUHJvcGVydHlbXSkge31cbiAgcmV0cnlNZXNzYWdlKCkge31cblxuICBvbkNvbHVtbnNVcGRhdGVkKHVwZGF0ZWRDb2x1bW5zOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgY29uc3QgdXBkYXRlZENvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbjxGb3JtUHJvcGVydHk+W10gPSBbXTtcbiAgICB1cGRhdGVkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29sID0gdGhpcy50YXNrVXNlcnNTdmMuZm9ybUZpZWxkQ29sdW1ucy5maW5kKFxuICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uaGVhZGVyID09PSBjb2wubmFtZSB8fCBjb2x1bW4uaWQgPT09IGNvbC5uYW1lXG4gICAgICApO1xuICAgICAgaWYgKG1hdGNoaW5nQ29sKSB7XG4gICAgICAgIHVwZGF0ZWRDb2x1bW5EZWYucHVzaChtYXRjaGluZ0NvbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnZpc2libGVDb2x1bW5EZWYgPSBbLi4udXBkYXRlZENvbHVtbkRlZl07XG4gIH1cblxuICBhc3luYyB1cGRhdGVGaWx0ZXJzQW5kU29ydHMoaXNTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICghaXNTZWFyY2gpIHtcbiAgICAgIHRoaXMuZGF0YVZpZXcub25DbGVhclNlYXJjaCgpO1xuICAgICAgdGhpcy5jdXJyZW50U2VhcmNoVGVybSA9ICcnO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgY29uc3QgY2xpY2tFdmVudCA9IG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgdmlldzogd2luZG93LFxuICAgICAgfSk7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGNsaWNrRXZlbnQpO1xuICAgIH1cbiAgICB2YXIgcGF5bG9hZDogU2VhcmNoUHJvcGVydHlWYWx1ZVtdID0gdGhpcy5jdXJyZW50RmlsdGVycy5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFByb3BlcnR5TmFtZTpcbiAgICAgICAgICBUYXNrVXNlclByb3BlcnR5TWFwW3gubmFtZSBhcyBrZXlvZiB0eXBlb2YgVGFza1VzZXJQcm9wZXJ0eU1hcF0sXG4gICAgICAgIEVudGl0eVZhbHVlOiB4LnZhbHVlLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOlxuICAgICAgICAgIHguY29uZGl0aW9uICYmIE9iamVjdC5rZXlzKEZpbHRlclR5cGVzKS5pbmNsdWRlcyh4LmNvbmRpdGlvbilcbiAgICAgICAgICAgID8gKEZpbHRlclR5cGVzW1xuICAgICAgICAgICAgICAgIHguY29uZGl0aW9uIGFzIGtleW9mIHR5cGVvZiBGaWx0ZXJUeXBlc1xuICAgICAgICAgICAgICBdIGFzIHVua25vd24gYXMgU2VhcmNoUHJvcGVydHlTaWduKVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFR5cGU6XG4gICAgICAgICAgeC5uYW1lID09IFRhc2tVc2VyUHJvcGVydHlOYW1lLkRhdGVcbiAgICAgICAgICAgID8gU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuRGF0ZVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZS5TdHJpbmcsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIC8vIHBheWxvYWQucHVzaCh7XG4gICAgLy8gICBQcm9wZXJ0eU5hbWU6ICdBUElLZXknLFxuICAgIC8vICAgRW50aXR5VmFsdWU6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAvLyAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgLy8gICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgLy8gfSk7XG4gICAgY29uc3Qgc29ydFBhcmFtOiB7IFBhcmFtOiBzdHJpbmc7IE9yZGVyOiBzdHJpbmcgfSB8IG51bGwgPVxuICAgICAgdGhpcy5jdXJyZW50U29ydHMubGVuZ3RoID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIFBhcmFtOlxuICAgICAgICAgICAgICBUYXNrVXNlclByb3BlcnR5TWFwW1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNvcnRzWzBdLm5hbWUgYXMga2V5b2YgdHlwZW9mIFRhc2tVc2VyUHJvcGVydHlNYXBcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIE9yZGVyOiB0aGlzLmN1cnJlbnRTb3J0c1swXS52YWx1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbDtcbiAgICBjb25zdCBzZWFyY2hUZXJtRXhpc3RzID0gdGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCkubGVuZ3RoID4gMDtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBzZWFyY2hUZXJtRXhpc3RzXG4gICAgICA/IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgICAgICBgVGFza1VzZXIvR2V0VGFza1VzZXJXaXRoUGFyYW0vJHt0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKX0vMC8ke1xuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZVxuICAgICAgICAgIH1gLFxuICAgICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICAgIClcbiAgICAgIDogYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChcbiAgICAgICAgICBzb3J0UGFyYW1cbiAgICAgICAgICAgID8gYFRhc2tVc2VyL1NlYXJjaFRhc2tVc2Vycy8wLyR7dGhpcy5wYWdlU2l6ZX0vJHtzb3J0UGFyYW0uUGFyYW19LyR7c29ydFBhcmFtLk9yZGVyfWBcbiAgICAgICAgICAgIDogYFRhc2tVc2VyL1NlYXJjaFRhc2tVc2Vycy8wLyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudFNvcnRzID0gW107XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VTdGF0ZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxGb3JtRW50aXR5PjtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+KS5SZXN1bHQ7XG4gICAgICB0aGlzLmRhdGEgPSByZXN1bHQubWFwKCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ueCxcbiAgICAgICAgICBpZDogeC5JZCxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZXRVcENhcmREYXRhKCk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGxvYWRNb3JlRmlsdGVyc0FuZFNvcnRzKCk6IFByb21pc2U8XG4gICAgUGFnZWRSZXN1bHQ8Rm9ybUVudGl0eT4gfCB1bmRlZmluZWRcbiAgPiB7XG4gICAgaWYgKCF0aGlzLnBhZ2VTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcGF5bG9hZDogU2VhcmNoUHJvcGVydHlWYWx1ZVtdID0gdGhpcy5jdXJyZW50RmlsdGVycy5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFByb3BlcnR5TmFtZTpcbiAgICAgICAgICBUYXNrVXNlclByb3BlcnR5TWFwW3gubmFtZSBhcyBrZXlvZiB0eXBlb2YgVGFza1VzZXJQcm9wZXJ0eU1hcF0sXG4gICAgICAgIEVudGl0eVZhbHVlOiB4LnZhbHVlLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOlxuICAgICAgICAgIHguY29uZGl0aW9uICYmIE9iamVjdC5rZXlzKEZpbHRlclR5cGVzKS5pbmNsdWRlcyh4LmNvbmRpdGlvbilcbiAgICAgICAgICAgID8gKEZpbHRlclR5cGVzW1xuICAgICAgICAgICAgICAgIHguY29uZGl0aW9uIGFzIGtleW9mIHR5cGVvZiBGaWx0ZXJUeXBlc1xuICAgICAgICAgICAgICBdIGFzIHVua25vd24gYXMgU2VhcmNoUHJvcGVydHlTaWduKVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFR5cGU6XG4gICAgICAgICAgeC5uYW1lID09IFRhc2tVc2VyUHJvcGVydHlOYW1lLkRhdGVcbiAgICAgICAgICAgID8gU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuRGF0ZVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZS5TdHJpbmcsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IHNvcnRQYXJhbTogeyBQYXJhbTogc3RyaW5nOyBPcmRlcjogc3RyaW5nIH0gfCBudWxsID1cbiAgICAgIHRoaXMuY3VycmVudFNvcnRzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBQYXJhbTpcbiAgICAgICAgICAgICAgVGFza1VzZXJQcm9wZXJ0eU1hcFtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTb3J0c1swXS5uYW1lIGFzIGtleW9mIHR5cGVvZiBUYXNrVXNlclByb3BlcnR5TWFwXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBPcmRlcjogdGhpcy5jdXJyZW50U29ydHNbMF0udmFsdWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGw7XG4gICAgY29uc3Qgc2VhcmNoVGVybUV4aXN0cyA9IHRoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gc2VhcmNoVGVybUV4aXN0c1xuICAgICAgPyBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgICAgYFRhc2tVc2VyL0dldFRhc2tVc2VyV2l0aFBhcmFtLyR7dGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCl9LyR7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTdGF0ZS5Ta2lwXG4gICAgICAgICAgfS8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICAgICApXG4gICAgICA6IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICAgICAgc29ydFBhcmFtXG4gICAgICAgICAgICA/IGBUYXNrVXNlci9TZWFyY2hUYXNrVXNlcnMvJHt0aGlzLnBhZ2VTdGF0ZS5Ta2lwfS8ke3RoaXMucGFnZVNpemV9LyR7c29ydFBhcmFtLlBhcmFtfS8ke3NvcnRQYXJhbS5PcmRlcn1gXG4gICAgICAgICAgICA6IGBUYXNrVXNlci9TZWFyY2hUYXNrVXNlcnMvJHt0aGlzLnBhZ2VTdGF0ZS5Ta2lwfS8ke3RoaXMucGFnZVNpemV9YCxcbiAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVzIGFzIFBhZ2VkUmVzdWx0PEZvcm1FbnRpdHk+O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiBvbkZpbHRlckFwcGxpZWQoYXBwbGllZEZpbHRlcjogSURhdGFGaWx0ZXJbXSkge1xuICAgIHRoaXMuc2hvd0ZpbHRlciA9IGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFwcGxpZWRGaWx0ZXIpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyVGFibGVDb3VudCA9IGFwcGxpZWRGaWx0ZXIubGVuZ3RoO1xuICAgICAgY29uc29sZS5sb2coYXBwbGllZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gYXBwbGllZEZpbHRlclxuICAgICAgICAuZmlsdGVyKChmaWx0ZXIpID0+IGZpbHRlci5jaGVja2VkKVxuICAgICAgICAubWFwKChmaWx0ZXIpID0+ICh7XG4gICAgICAgICAgUHJvcGVydHlOYW1lOiBmaWx0ZXIubmFtZSxcbiAgICAgICAgICBFbnRpdHlWYWx1ZTogZmlsdGVyLnZhbHVlLFxuICAgICAgICAgIFR5cGU6IGZpbHRlci50eXBlLFxuICAgICAgICAgIE9wZXJhdG9yOiAnQW5kJyxcbiAgICAgICAgICBTaWduOiB0aGlzLmdldENvbmRpdGlvbihmaWx0ZXIuY29uZGl0aW9uKSxcbiAgICAgICAgfSkpO1xuXG4gICAgICB0aGlzLnBvc3RTZWFyY2gocXVlcnlQYXJhbXMpO1xuICAgIH1cbiAgfVxuICBnZXRDb25kaXRpb24odmFsdWU6IGFueSl7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSBDb25kaXRpb25hbE9wdGlvbnMuT246XG4gICAgICAgIHJldHVybiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVE7XG4gICAgICBjYXNlIENvbmRpdGlvbmFsT3B0aW9ucy5BZnRlcjpcbiAgICAgICAgcmV0dXJuIFNlYXJjaFByb3BlcnR5U2lnbi5FUTtcbiAgICAgIGNhc2UgQ29uZGl0aW9uYWxPcHRpb25zLkJlZm9yZTpcbiAgICAgICAgcmV0dXJuIFNlYXJjaFByb3BlcnR5U2lnbi5MVDtcbiAgICAgIGNhc2UgQ29uZGl0aW9uYWxPcHRpb25zLk5vdEVxdWFsOlxuICAgICAgICByZXR1cm4gU2VhcmNoUHJvcGVydHlTaWduLk5FUTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZSBcbiAgICB9XG4gIH1cbiAgb25Tb3J0VXBkYXRlZCh1cGRhdGVkU29ydHM6IElEYXRhRmlsdGVyW10pIHtcbiAgICB0aGlzLmN1cnJlbnRTb3J0cyA9IHVwZGF0ZWRTb3J0cztcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnNBbmRTb3J0cygpO1xuICB9XG5cbiAgaGFuZGxlU2VhcmNoKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0kLm5leHQoZXZlbnQudmFsdWUpO1xuICB9XG5cbiAgaGFuZGxlRXhwb3J0KGV4cG9ydGVkRGF0YTogUGFydGlhbDxhbnk+W10pIHtcbiAgICAvLyBjb25zb2xlLmxvZygnRXhwb3J0ZWQgZGF0YTonLCBleHBvcnRlZERhdGEpO1xuICAgIHRoaXMuZG93bmxvYWRDU1YoZXhwb3J0ZWREYXRhKTtcbiAgfVxuICBwcml2YXRlIGRvd25sb2FkQ1NWKGRhdGE6IFBhcnRpYWw8YW55PltdKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBbXG4gICAgICBoZWFkZXJzLmpvaW4oJywnKSxcbiAgICAgIC4uLmRhdGEubWFwKChyb3cpID0+IGhlYWRlcnMubWFwKChoZWFkZXIpID0+IHJvd1toZWFkZXJdKS5qb2luKCcsJykpLFxuICAgIF0uam9pbignXFxuJyk7XG5cbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NzdkNvbnRlbnRdLCB7IHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBpZiAobGluay5kb3dubG9hZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgJ2V4cG9ydC5jc3YnKTtcbiAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgfVxuICB9XG59XG4iLCI8aGVhZGVyXG4gIGNsYXNzPVwicm91bmRlZC1sZyBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHB4LTYgcHktMiBiZy1bI0Q0QTAwNzczXVwiXG4+XG4gIDxoNCBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57eyBkYXRhWzBdLk5hbWUgfHwgXCJcIiB9fTwvaDQ+XG4gIDx2ZXJiZW4tc3ZnXG4gICAgKGNsaWNrKT1cImdvQmFjaygpXCJcbiAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICBbd2lkdGhdPVwiMTdcIlxuICAgIFtoZWlnaHRdPVwiMTdcIlxuICAgIFtpY29uXT1cIidjbG9zZSdcIlxuICA+PC92ZXJiZW4tc3ZnPlxuPC9oZWFkZXI+XG48ZGl2ICNtZXNzYWdlTG9nIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNCBtZXNzYWdlLWxvZy1jb250YWluZXJcIj5cbiAgPHZlcmJlbi1kYXRhLXZpZXdcbiAgICAjdmR2XG4gICAgW3ZpZXdTdGF0ZV09XCJ7XG4gICAgICAgIGlzU2VhcmNoOiB0cnVlLFxuICAgICAgICBpc0NvbHVtbjogdHJ1ZSxcbiAgICAgICAgaXNGaWx0ZXI6IHRydWUsXG4gICAgICAgIGlzU29ydDogdHJ1ZSxcbiAgICAgICAgaXNFeHBvcnQ6IHRydWUsXG4gICAgICAgIGlzU2VsZWN0OiB0cnVlLFxuICAgICAgICBpc0NyZWF0ZTogdHJ1ZSxcbiAgICAgICAgaXNUb2dnbGU6dHJ1ZSxcbiAgICAgIH1cIlxuICAgIFtidXR0b25DbGFzc109XCInbXktY3VzdG9tLWJ1dHRvbi1jbGFzcydcIlxuICAgIFtpY29uQ2xhc3NdPVwiJ215LWljb24tY2xhc3MnXCJcbiAgICBbYWN0aXZlSWNvbkNsYXNzXT1cIidteS1hY3RpdmUtaWNvbi1jbGFzcydcIlxuICAgIFtzZWxlY3RlZENvbHVtbkNvdW50XT1cIjBcIlxuICAgIFtzZWxlY3RlZFNvcnRDb3VudF09XCIwXCJcbiAgICBbc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XT1cIjBcIlxuICAgIFtzZWFyY2hWYWx1ZV09XCJzZWFyY2hUZXJtXCJcbiAgICAodmlld0NoYW5nZSk9XCJvblZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHN0YXRlQ2hhbmdlKT1cIm9uU3RhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKG9uU2VhcmNoQ2hhbmdlKT1cIm9uU2VhcmNoKCRldmVudClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm10LTJcIiB0YWJsZS1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLXRhYmxlXG4gICAgICAgICNkdFxuICAgICAgICBbZGF0YV09XCJkYXRhWzBdLlByb3BlcnRpZXNcIlxuICAgICAgICBbY29sdW1uc109XCJ2aXNpYmxlQ29sdW1uRGVmXCJcbiAgICAgICAgW3N0eWxlQ29uZmlnXT1cInN0eWxlc1wiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwic2VsZWN0XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbFxuICAgICAgICAgICAgbGV0LWlzU2VsZWN0ZWQ9XCJpc1NlbGVjdGVkXCJcbiAgICAgICAgICAgIGxldC10b2dnbGVSb3dTZWxlY3Rpb249XCJ0b2dnbGVSb3dTZWxlY3Rpb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVSb3dTZWxlY3Rpb24oKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjaGVhZGVyXG4gICAgICAgICAgICBsZXQtYWxsUm93c1NlbGVjdGVkPVwiYWxsUm93c1NlbGVjdGVkXCJcbiAgICAgICAgICAgIGxldC1zb21lUm93c1NlbGVjdGVkPVwic29tZVJvd3NTZWxlY3RlZFwiXG4gICAgICAgICAgICBsZXQtdG9nZ2xlQWxsUm93cz1cInRvZ2dsZUFsbFJvd3NcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhbGxSb3dzU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNvbWVSb3dzU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsUm93cygpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwibmFtZVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPlxuICAgICAgICAgICAge3sgdmFsdWUuTmFtZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgICAgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIlxuICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICAgaW5wdXRDb250YWluZXJDbGFzcz1cInctZml0XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3cuTmFtZVwiXG4gICAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cIm1pblZhbHVlXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgICAgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIlxuICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRTdHJpbmdWYWx1ZShyb3csICdNaW5WYWx1ZScpXCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNvbnZlcnRUb0ludCgkZXZlbnQsIHJvdywgJ01pblZhbHVlJylcIlxuICAgICAgICAgICAgICBpbnB1dENvbnRhaW5lckNsYXNzPVwidy1bMTMwcHhdXCJcbiAgICAgICAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwibWF4VmFsdWVcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNjZWxsRWRpdFxuICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiXG4gICAgICAgICAgICBsZXQtdXBkYXRlVmFsdWU9XCJ1cGRhdGVWYWx1ZVwiXG4gICAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICAgIGlucHV0Q29udGFpbmVyQ2xhc3M9XCJ3LVsxMzBweF1cIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRTdHJpbmdWYWx1ZShyb3csICdNYXhWYWx1ZScpXCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNvbnZlcnRUb0ludCgkZXZlbnQsIHJvdywgJ01heFZhbHVlJylcIlxuICAgICAgICAgICAgPjwvdmVyYmVuYS1pbnB1dD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJkZWZhdWx0VmFsdWVcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNjZWxsRWRpdFxuICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiXG4gICAgICAgICAgICBsZXQtdXBkYXRlVmFsdWU9XCJ1cGRhdGVWYWx1ZVwiXG4gICAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBpbnB1dENvbnRhaW5lckNsYXNzPVwidy1bMTMwcHhdXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3cuRGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiZGF0YVR5cGVcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNjZWxsRWRpdFxuICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiXG4gICAgICAgICAgICBsZXQtdXBkYXRlVmFsdWU9XCJ1cGRhdGVWYWx1ZVwiXG4gICAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDaGFuZ2UgRGF0YSBUeXBlXCJcbiAgICAgICAgICAgICAgICBbKG9wdGlvbnMpXT1cImRhdGFUeXBlXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvdy5EYXRhVHlwZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiaXNSZXF1aXJlZFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPlxuICAgICAgICAgICAgPHZlcmJlbi1zdmcgKm5nSWY9XCJ2YWx1ZSA9PT0gdHJ1ZVwiIFtpY29uXT1cIidjaGVjaydcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICA8dmVyYmVuLXN2ZyAqbmdJZj1cInZhbHVlID09PSBmYWxzZVwiIFtpY29uXT1cIidlcnJvcidcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNjZWxsRWRpdFxuICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiXG4gICAgICAgICAgICBsZXQtdXBkYXRlVmFsdWU9XCJ1cGRhdGVWYWx1ZVwiXG4gICAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dmVyYmVuYS1zd2l0Y2hcbiAgICAgICAgICAgICAgW29uQ29sb3JdPVwiJyMxQTIzN0UnXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3cuSXNSZXF1aXJlZFwiXG4gICAgICAgICAgICA+PC92ZXJiZW5hLXN3aXRjaD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNjZWxsXG4gICAgICAgICAgICBsZXQtaXNFZGl0aW5nPVwiaXNFZGl0aW5nXCJcbiAgICAgICAgICAgIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiXG4gICAgICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwXG4gICAgICAgICAgICAgIFtjdXN0b21TdHlsZXNdPVwieyAnei1pbmRleCc6ICc5OScgfVwiXG4gICAgICAgICAgICAgIFtkcm9wZG93bk9wZW5dPVwiaXNEcm9wZG93bk9wZW4ocm93KVwiXG4gICAgICAgICAgICAgIFtlbmFibGVNb3VzZUxlYXZlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKGNsb3NlKT1cIm9uQ2xvc2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBhY3Rpb25zLWljb25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRHJvcGRvd24ocm93KVwiXG4gICAgICAgICAgICAgICAgZHJvcGRvd24tdHJpZ2dlclxuICAgICAgICAgICAgICAgIGljb249XCJsaXN0XCJcbiAgICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcC11cC1jb250ZW50IGZsZXggZmxleC1jb2xcIiBkcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3AtdXAtdmFsdWUgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEVkaXRcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wLXVwLXZhbHVlIGN1cnNvci1wb2ludGVyXCI+RGVsZXRlPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92ZXJiZW4tcG9wLVVwPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgICAgIGxldC1pc0VkaXRpbmc9XCJpc0VkaXRpbmdcIlxuICAgICAgICAgICAgbGV0LXRvZ2dsZVJvd0VkaXQ9XCJ0b2dnbGVSb3dFZGl0XCJcbiAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVWaWFUYWJsZSh2YWx1ZSwgdG9nZ2xlUm93RWRpdCk7IG9uQ2xvc2UoKVwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImNoZWNrXCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBpY29uPVwiZGVsZXRlXCIgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgICBpY29uPVwiY2FyZFZpZXdBbHRcIlxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9DYXJkVmlldyh2YWx1ZSlcIlxuICAgICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2xpYi1kYXRhLXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2FyZC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlld1xuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMnB4XCJcbiAgICAgICAgI3ZkY3ZcbiAgICAgICAgZGF0YUlkPVwiSWRcIlxuICAgICAgICBib3JkZXI9XCI1cHhcIlxuICAgICAgICBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhXCJcbiAgICAgICAgcmJnQ29sb3I9XCIjZjVmNmY5XCJcbiAgICAgICAgbWc9XCIwcHhcIlxuICAgICAgPlxuICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXcgY2xhc3M9XCJzcGFjZS15LTdcIj5cbiAgICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhXG4gICAgICAgICAgICAjdmxjZFxuICAgICAgICAgICAgW3BhcmVudF09XCJ2ZGN2XCJcbiAgICAgICAgICAgIGRhdGFJZD1cImlkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmctc2Vjb25kYXJ5LTEwMCByb3VuZGVkLXhsIGJvcmRlci1wcmltYXJ5IGJvcmRlci1bMXB4XVwiXG4gICAgICAgICAgICBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcmQgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidXNlckNhcmRDbGlja2VkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggY3Vyc29yLXBvaW50ZXIgaC1bbWF4LWNvbnRlbnRdXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwhLS0gPHZlcmJlbi1zdmcgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiIChjbGljayk9XCJ0b2dnbGVDaGlsZHJlbihpdGVtKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aD8ndmlzaWJsZSc6J2ludmlzaWJsZSdcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW1zLWNlbnRlciBmbGV4ICBwci0xIGN1cnNvci1wb2ludGVyXCIgW2ljb25dPVwiaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQ/J21pbnVzJzoncGx1cydcIiAvPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgYmctc2Vjb25kYXJ5IHJvdW5kZWQteGxcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTMgcm91bmRlZC14bCByb3VuZGVkLXRyLW5vbmUgcm91bmRlZC1ici1ub25lXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA/ICdiZy1wcmltYXJ5JyA6ICdiZy1zZWNvbmRhcnktMjAwJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTMgcHgtNCBmbGV4LTEgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydCBmbGV4LTEgZ2FwLTEganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgY2FyZC1taW4taGVpZ2h0IGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIG1yLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXktMCBmb250LWJvbGQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTkuNXB4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5kYXRhLk5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTBweF0gdGV4dC1bIzQwNDA0MF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+RGF0YSBUeXBlOjwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTNweF0gZm9udC1ib2xkXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRhLkRhdGFUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTBweF0gdGV4dC1bIzQwNDA0MF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPkRlZmF1bHQgVmFsdWU6PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiIXRleHQtWzEycHhdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRhdGEuRGVmYXVsdFZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1lbmQgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbnVtLXZhbCB7e2l0ZW0uZGF0YS5TdGF0dXN9fVwiPnt7aXRlbS5kYXRhLlN0YXR1c319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGE+XG4gICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgIDx2ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwYXJlbnQ+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwidGhpcy5jdXJyZW50RGF0YVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCByb3VuZGVkLXhsIGgtZnVsbCB3LWZ1bGwgcmVsYXRpdmUgZ2FwLTZcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgICAgIG5hbWU9XCJOYW1lXCJcbiAgICAgICAgICAgICAgICBsYWJlbD1cIk5hbWVcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVRhYmxlKClcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudERhdGEuZGF0YS5OYW1lXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PkRhdGEgVHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDaGFuZ2UgRGF0YSBUeXBlXCJcbiAgICAgICAgICAgICAgICAgIFsob3B0aW9ucyldPVwiZGF0YVR5cGVcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RGF0YS5kYXRhLkRhdGFUeXBlXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRHJvcERvd25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RGF0YS5kYXRhLkRhdGFUeXBlID09PSAnSW50JyB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RGF0YS5kYXRhLkRhdGFUeXBlID09PSAnRGVjaW1hbCdcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ0VudGVyIGRlZmF1bHQgbnVtYmVyJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFN0cmluZ1ZhbHVlKGN1cnJlbnREYXRhLmRhdGEsICdEZWZhdWx0VmFsdWUnKVwiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9JbnQoJGV2ZW50LCBjdXJyZW50RGF0YS5kYXRhLCAnRGVmYXVsdFZhbHVlJylcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cIkRlZmF1bHRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRGVmYXVsdCBWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVRhYmxlKClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudERhdGEuZGF0YS5EYXRhVHlwZSA9PT0gJ1N0cmluZycgfHwgY3VycmVudERhdGEuZGF0YS5EYXRhVHlwZSA9PT0gJ1VSTCdcIj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW50ZXIgZGVmYXVsdCB0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudERhdGEuZGF0YS5EZWZhdWx0VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiRGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJEZWZhdWx0IFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlVGFibGUoKVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCI+UmVxdWlyZWQ8L3A+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDx2ZXJiZW5hLXN3aXRjaFxuICAgICAgICAgICAgICAgICAgW29uQ29sb3JdPVwiJyMxQTIzN0UnXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudERhdGEuZGF0YS5Jc1JlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICA+PC92ZXJiZW5hLXN3aXRjaD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGlkZU1pbk1heFwiIGNsYXNzPVwiIGZsZXggZmxleC1jb2wgZ2FwLTZcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICBuYW1lPVwibWluVmFsdWVcIlxuICAgICAgICAgICAgICBsYWJlbD1cIk1pbiBWYWx1ZVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVRhYmxlKClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRTdHJpbmdWYWx1ZShjdXJyZW50RGF0YS5kYXRhLCAnTWluVmFsdWUnKVwiXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICBjb252ZXJ0VG9JbnQoJGV2ZW50LCBjdXJyZW50RGF0YS5kYXRhLCAnTWluVmFsdWUnKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgICAgIFt0eXBlXT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICAgbmFtZT1cIm1heFZhbHVlXCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJNYXggVmFsdWVcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVUYWJsZSgpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0U3RyaW5nVmFsdWUoY3VycmVudERhdGEuZGF0YSwgJ01heFZhbHVlJylcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgY29udmVydFRvSW50KCRldmVudCwgY3VycmVudERhdGEuZGF0YSwgJ01heFZhbHVlJylcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPCEtLSBidXR0b25zIC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gdy1mdWxsIGJvdHRvbS04IGxlZnQtMCByaWdodC0wXCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInZlcmJlbi1kZWxldGUtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHRleHQ9XCJEZWxldGVcIlxuICAgICAgICAgICAgICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2ZXJiZW4tc3dpdGNoLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvVGFibGVWaWV3KClcIlxuICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiU3dpdGNoIFRvIFRhYmxlXCJcbiAgICAgICAgICAgICAgICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmVyYmVuLXByaW1hcnktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVVc2VyKClcIlxuICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiU2F2ZVwiXG4gICAgICAgICAgICAgICAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgPCEtLSA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgICAgeWVzaGhoaGhoXG4gICAgICAgICAgPC92ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+IC0tPlxuXG4gICAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXctZm9vdGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgICAgICAgICBbZm9udFdlaWdodF09XCInYm9sZCdcIlxuICAgICAgICAgICAgICAgIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiXG4gICAgICAgICAgICAgICAgW2JvcmRlclJhZGl1c109XCInNHB4J1wiXG4gICAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCInI2ZmZidcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCB7e1xuICAgICAgICAgICAgICAgIHZkY3YuaGFzQ3VycmVudEl0ZW0oKSA/ICdmbGV4LTEnIDogJydcbiAgICAgICAgICAgICAgfX0ganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiXG4gICAgICAgICAgICAgICAgPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92ZXJiZW4tY2FyZC1kYXRhLXZpZXctZm9vdGVyPlxuICAgICAgPC92ZXJiZW4tY2FyZC1kYXRhLXZpZXc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjb2x1bW4tY29udGVudD5cbiAgICAgIDx2ZXJiZW4tdmlzaWJsZS1jb2x1bW5cbiAgICAgICAgKGNvbHVtbnNVcGRhdGVkKT1cIm9uQ29sdW1uc1VwZGF0ZWQoJGV2ZW50KVwiXG4gICAgICAgIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiXG4gICAgICAgIGJnQ29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgIHdpZHRoPVwiNDAwcHhcIlxuICAgICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG4gICAgICAgIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIlxuICAgICAgICBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIlxuICAgICAgICBbY29sdW1uc109XCJ2aXNpYmxlQ29sdW1uc1wiXG4gICAgICAgIFtkaXNwbGF5ZWRDb2x1bW5zXT1cIjVcIlxuICAgICAgPjwvdmVyYmVuLXZpc2libGUtY29sdW1uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZmlsdGVyLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXRhYmxlLWZpbHRlclxuICAgICAgICAoZmlsdGVyc0FwcGxpZWQpPVwib25GaWx0ZXJBcHBsaWVkKCRldmVudClcIlxuICAgICAgICBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICAgIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIlxuICAgICAgICBiZ0NvbG9yPVwid2hpdGVcIlxuICAgICAgICB3aWR0aD1cIjQyMHB4XCJcbiAgICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgICBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCJcbiAgICAgICAgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCJcbiAgICAgICAgdGVydGlhcnlDb2xvcj1cIiM0MDQwNDBcIlxuICAgICAgICBbZmlsdGVyT3B0aW9uc109XCJmaWx0ZXJBcnJheVwiXG4gICAgICAgIFttYXhGaWx0ZXJMZW5ndGhdPVwiM1wiXG4gICAgICA+PC92ZXJiZW4tdGFibGUtZmlsdGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc29ydC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1zb3J0LXRhYmxlXG4gICAgICAgIChzZWxlY3RlZE9wdGlvbnMpPVwib25Tb3J0VXBkYXRlZCgkZXZlbnQpXCJcbiAgICAgICAgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgICBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCJcbiAgICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgd2lkdGg9XCI0MDBweFwiXG4gICAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgICAgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiXG4gICAgICAgIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiXG4gICAgICAgIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCJcbiAgICAgICAgW2VuYWJsZURyYWdBbmREcm9wXT1cInRydWVcIlxuICAgICAgICBbc29ydE9wdGlvbnNdPVwic29ydE9wdGlvbnNcIlxuICAgICAgPjwvdmVyYmVuLXNvcnQtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBleHBvcnQtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS1leHBvcnQgW2RhdGFdPVwiZGF0YVwiIChleHBvcnREYXRhRXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIj5cbiAgICAgIDwvbGliLWRhdGEtZXhwb3J0PlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1kYXRhLXZpZXc+XG4gIDxkaXYgKm5nSWY9XCJ2ZHYuaXNUYWJsZVZpZXdcIiBjbGFzcz1cImZsZXggZ2FwLTIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICBbZm9udFdlaWdodF09XCInYm9sZCdcIlxuICAgICAgICBbYmdDb2xvcl09XCInIzhFOEQ4NydcIlxuICAgICAgICBbYm9yZGVyUmFkaXVzXT1cIic0cHgnXCJcbiAgICAgICAgW3RleHRDb2xvcl09XCInI2ZmZidcIlxuICAgICAgICBbdGV4dF09XCInRGVsZXRlJ1wiXG4gICAgICA+XG4gICAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRNb3JlKClcIiBjbGFzcz1cImxvYWQtbW9yZSB2aWV3LWxpbmtzXCI+XG4gICAgICAgIExvYWQgbW9yZVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|