imm-element-ui 2.8.5 → 2.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/crumb-action/crumb-action.component.mjs +38 -33
- package/esm2022/lib/page-form/page-form.component.mjs +4 -3
- package/esm2022/lib/page-grid-list/page-grid-list.component.mjs +2 -2
- package/esm2022/lib/service/userHistory.service.mjs +11 -6
- package/fesm2022/imm-element-ui.mjs +51 -40
- package/fesm2022/imm-element-ui.mjs.map +1 -1
- package/lib/crumb-action/crumb-action.component.d.ts +7 -3
- package/lib/grid/grid/grid.component.d.ts +1 -1
- package/lib/page-form/page-form.component.d.ts +2 -1
- package/lib/search/pop-date/pop-date.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -134,6 +134,7 @@ export class PageFormComponent extends AmComponent {
|
|
|
134
134
|
this.saveFunc = input();
|
|
135
135
|
this.showMainSaveButton = input(true);
|
|
136
136
|
this.configNewPath = input();
|
|
137
|
+
this.closeFallbackUrl = input('');
|
|
137
138
|
this.runtimeContextInput = input({});
|
|
138
139
|
this.customLeftPanel = input(null);
|
|
139
140
|
this.customListFormTemplateMap = input(null);
|
|
@@ -1525,7 +1526,7 @@ export class PageFormComponent extends AmComponent {
|
|
|
1525
1526
|
}
|
|
1526
1527
|
}
|
|
1527
1528
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PageFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1528
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PageFormComponent, isStandalone: true, selector: "app-page-form", inputs: { addVisible: { classPropertyName: "addVisible", publicName: "addVisible", isSignal: true, isRequired: false, transformFunction: null }, gridList: { classPropertyName: "gridList", publicName: "gridList", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, getPrmInput: { classPropertyName: "getPrmInput", publicName: "getPrmInput", isSignal: true, isRequired: true, transformFunction: null }, statusSteps: { classPropertyName: "statusSteps", publicName: "statusSteps", isSignal: true, isRequired: false, transformFunction: null }, statusKey: { classPropertyName: "statusKey", publicName: "statusKey", isSignal: true, isRequired: false, transformFunction: null }, hrefBtnList: { classPropertyName: "hrefBtnList", publicName: "hrefBtnList", isSignal: true, isRequired: false, transformFunction: null }, setTitle: { classPropertyName: "setTitle", publicName: "setTitle", isSignal: true, isRequired: false, transformFunction: null }, actionList: { classPropertyName: "actionList", publicName: "actionList", isSignal: true, isRequired: false, transformFunction: null }, modelLog: { classPropertyName: "modelLog", publicName: "modelLog", isSignal: true, isRequired: false, transformFunction: null }, formDisabled: { classPropertyName: "formDisabled", publicName: "formDisabled", isSignal: true, isRequired: false, transformFunction: null }, statusConf: { classPropertyName: "statusConf", publicName: "statusConf", isSignal: true, isRequired: false, transformFunction: null }, formDetail: { classPropertyName: "formDetail", publicName: "formDetail", isSignal: true, isRequired: false, transformFunction: null }, saveFunc: { classPropertyName: "saveFunc", publicName: "saveFunc", isSignal: true, isRequired: false, transformFunction: null }, showMainSaveButton: { classPropertyName: "showMainSaveButton", publicName: "showMainSaveButton", isSignal: true, isRequired: false, transformFunction: null }, configNewPath: { classPropertyName: "configNewPath", publicName: "configNewPath", isSignal: true, isRequired: false, transformFunction: null }, runtimeContextInput: { classPropertyName: "runtimeContextInput", publicName: "runtimeContextInput", isSignal: true, isRequired: false, transformFunction: null }, customLeftPanel: { classPropertyName: "customLeftPanel", publicName: "customLeftPanel", isSignal: true, isRequired: false, transformFunction: null }, customListFormTemplateMap: { classPropertyName: "customListFormTemplateMap", publicName: "customListFormTemplateMap", isSignal: true, isRequired: false, transformFunction: null }, customListFormInstanceMap: { classPropertyName: "customListFormInstanceMap", publicName: "customListFormInstanceMap", isSignal: true, isRequired: false, transformFunction: null }, leftPanel: { classPropertyName: "leftPanel", publicName: "leftPanel", isSignal: true, isRequired: false, transformFunction: null }, panelSelectedData: { classPropertyName: "panelSelectedData", publicName: "panelSelectedData", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:resize": "onResize()" } }, providers: [], queries: [{ propertyName: "pageFormSlots", predicate: PageFormSlotDirective, descendants: true }], viewQueries: [{ propertyName: "cForm", first: true, predicate: ["cForm"], descendants: true }, { propertyName: "rowSelector", first: true, predicate: RowSelectorComponent, descendants: true }, { propertyName: "customGrid", predicate: ["customGrid"], descendants: true }, { propertyName: "tabForm", predicate: ["tabForm"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"md:overflow-hidden\">\n <!-- \u4FDD\u5B58\u65B0\u5EFA\u64CD\u4F5C\u533A -->\n\t<div class=\"flex md:flex-wrap lg:flex-nowrap items-center md:justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\n\t\t<div class=\"lg:basis-1/3 order-1\">\n\t\t\t<app-crumb-action\n\t\t\t\t[addVisible]=\"addVisible()\"\n\t\t\t\t[newUrl]=\"newUrl\"\n\t\t\t\t[isShowCog]=\"true\"\n\t\t\t\t[outlined]=\"true\"\n\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t[actionList]=\"actionList()\"\n\t\t\t\t[configNewPath]=\"configNewPath()\"\n\t\t\t\t[data]=\"getPrm.data ?? {}\"\n\t\t\t\t[saveBtnDisable]=\"saveBtnDisable\"\n\t\t\t\t[showSaveButton]=\"showMainSaveButton()\"\n\t\t\t\t(actionEvent)=\"authClick($event)\"\n\t\t\t\t(saveEvent)=\"submitForm()\">\n\t\t\t</app-crumb-action>\n\t\t</div>\n\n\t\t<div class=\"basis-1/5 lg:basis-2/3 order-2 lg:order-2 md:order-last md:basis-full md:mt-[6px]\">\n\t\t\t<href-btn-list\n\t\t\t\t[hrefs]=\"hrefBtnList()\"\n\t\t\t\t(hrefClick)=\"goRun($event)\"></href-btn-list>\n\t\t\t<!-- @if (id) {\n\t\t\t\t@for (btn of hrefBtnList(); track btn) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\t[variant]=\"btn?.variant\"\n\t\t\t\t\t\t[severity]=\"btn?.severity\"\n\t\t\t\t\t\tclass=\"mr-[6px]\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"btn?.icon\"\n\t\t\t\t\t\tlabel=\"{{ btn.i18nKey ? i18n.fanyi(btn.i18nKey) : btn.label }}\"\n\t\t\t\t\t\t(click)=\"goRun(btn)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t} -->\n\t\t</div>\n\t\t<div class=\"basis-1/3 order-3 flex flex-row-reverse\">\n\t\t\t@if (modelLog()) {\n\t\t\t\t<div class=\"hidden md:block\">\n\t\t\t\t\t<span\n\t\t\t\t\t\t[class]=\"'iconfont icon-sidebar icon-sidebar-' + sidebarMode()\"\n\t\t\t\t\t\t(click)=\"toggleLog()\"></span>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t</div>\n\t<div class=\"flex\">\n\t\t<div class=\"px-2 flex flex-wrap items-center flex-1\">\n\t\t\t<div class=\"hidden md:basis-1/3 py-1 basis-full md:flex items-center flex-row order-1\">\n\t\t\t\t@for (action of actionList(); let i = $index; track action) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"getPrm.data?.icon\"\n\t\t\t\t\t\t[loading]=\"action.loading\"\n\t\t\t\t\t\t[label]=\"action.i18nKey ? (action.i18nKey | translate) : action.label\"\n\t\t\t\t\t\t[disabled]=\"action.btnDisabled ? action.btnDisabled(getPrm.data) : false\"\n\t\t\t\t\t\t[styleClass]=\"\n\t\t\t\t\t\t\t(action.auth || 0) > (authLevel() || 0) || !!action.btnHidden?.(getPrm.data)\n\t\t\t\t\t\t\t\t? 'form-action hidden'\n\t\t\t\t\t\t\t\t: 'form-action block mr-[.5rem]'\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t(onClick)=\"action.onClick != '' && action.onClick?.(getPrm.data, action)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first w-full\">\n\t\t\t\t@if (stepsVisible) {\n\t\t\t\t\t<custom-steps\n\t\t\t\t\t\t#customSteps\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t[steps]=\"statusSteps()\"\n\t\t\t\t\t\t[modelLog]=\"showLog()\"\n\t\t\t\t\t\t[current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\n\t\t\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t\t\t[isClick]=\"this.statusConf().isClick\"\n\t\t\t\t\t\t(change)=\"statusChange($event, customSteps)\">\n\t\t\t\t\t</custom-steps>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t\t@if (showLog()) {\n\t\t\t<div class=\"lg:w-[400px] md:w-[300px] hidden md:block\"></div>\n\t\t}\n\t</div>\n <!-- form \u4E3B\u533A\u57DF-->\n @if(this.form().form) {\n <div class=\"main flex flex-wrap\">\n @if (customLeftPanel()) {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-fit md:max-w-full\">\n <ng-container *ngTemplateOutlet=\"customLeftPanel()\"></ng-container>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'list') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel\">\n <am-single-select-listbox\n [options]=\"leftPanelItems\"\n [ngModel]=\"leftPanelSelectedValue\"\n (onChange)=\"onLeftPanelSelectionChange($event)\"\n [optionValue]=\"getPanelOptionValue()\"\n [optionLabel]=\"getPanelOptionLabel()\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n [allowDeselect]=\"getPanelAllowDeselect()\" />\n </div>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'tree') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel page-form-tree-panel\">\n @if (leftPanelTreeNodes.length > 0) {\n <p-tree\n [value]=\"leftPanelTreeNodes\"\n selectionMode=\"single\"\n [(selection)]=\"leftPanelSelectedNode\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n styleClass=\"page-form-left-tree\"\n (onNodeSelect)=\"onLeftPanelTreeNodeSelect($event)\"\n (onNodeExpand)=\"onLeftPanelTreeNodeExpand($event)\"\n (onNodeCollapse)=\"onLeftPanelTreeNodeCollapse($event)\" />\n } @else {\n <div class=\"page-form-left-panel-empty\">{{ getPanelEmptyMessage() }}</div>\n }\n </div>\n </div>\n }\n <div class=\"w-full md:min-w-0 md:flex-1 md:h-full md:overflow-y-auto\">\n <div class=\"bg-white mx-2 form-panel\">\n <div class=\"p-2 flex-1\">\n <form [formGroup]=\"form().form!\">\n <custom-form\n #cForm\n [options]=\"formOptions\"\n [upsert]=\"upsertPrm\"\n [model]=\"getPrm.data ?? {}\"\n (modelChange)=\"onMainFormModelChange()\"></custom-form>\n </form>\n </div>\n @if (grids && grids.length > 0) {\n <div class=\"relative mb-2\">\n <p-tabs [(value)]=\"indexValue\">\n <p-tablist>\n @for (fchild of grids; let i = $index; track fchild) {\n <p-tab\n [value]=\"i\"\n (click)=\"tabClick()\">\n {{ fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title }}\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n </div>\n }\n @for (grid of grids; let i = $index; track grid) {\n @let slotState = slotRenderStates[i];\n @let slot = slotState?.slot;\n <div [hidden]=\"indexValue != i\" [style.height]=\"slot ? grid.gridOptions.scrollHeight : null\">\n @if (slot) {\n <ng-container *ngTemplateOutlet=\"slot.templateRef; context: slotState.context\"> </ng-container>\n <div class=\"flex justify-end py-[5px] pr-[8px] bg-white\">\n @if (canShowCurrentTabSave(grid)) {\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"saveCurrentTab()\" />\n }\n @if (grid.subTableSource != 'none' && !isSubAddHidden(grid)) {\n <p-button\n icon=\"pi pi-plus\"\n [text]=\"true\"\n severity=\"success\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"addRowClickHandler(grid)\" />\n }\n @if (grid.showDelete && !isSubDeleteHidden(grid)) {\n <p-button\n icon=\"pi pi-trash\"\n [text]=\"true\"\n severity=\"danger\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"delRowClickHandler(grid)\" />\n }\n\t\t\t\t\t\t\t\t\t<div #customGrid></div>\n </div>\n } @else {\n @if (grid.type == 'grid') {\n <custom-grid\n #customGrid\n [rowData]=\"getPrm.data?.[grid.subDataKey!]\"\n [hideExpressionData]=\"getPrm.data ?? {}\"\n [hideExpressionVersion]=\"hideExpressionVersion\"\n [upsert]=\"upsertPrm\"\n (deleteEmit)=\"delRows($event)\"\n (gridDataChanged)=\"refreshSubGridColumnVisibility()\"\n [addType]=\"grid.subTableSource\"\n (addEmit)=\"dataSourceShow()\"\n [gridOptions]=\"grid.gridOptions\"\n [gridDisable]=\"grid.gridDisabled\"\n [authLevel]=\"authLevel()\"\n [showDelete]=\"grid.showDelete\"\n [deleteHidden]=\"isSubDeleteHidden(grid)\"\n [addHidden]=\"isSubAddHidden(grid)\"\n [subSaveVisible]=\"canShowCurrentTabSave(grid)\"\n [subSaveHidden]=\"isSubSaveHidden(grid)\"\n [subSaveLabel]=\"getCurrentTabSaveLabel(grid)\"\n [subSaveDisabled]=\"grid.gridDisabled\"\n [selectData]=\"grid.selectData\"\n [addSort]=\"grid.addSort\"\n (subSaveEmit)=\"saveCurrentTab()\">\n </custom-grid>\n } @else {\n @if (canShowCurrentTabSave(grid)) {\n <div class=\"flex justify-end px-2 pt-2 bg-white\">\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"saveCurrentTab()\" />\n </div>\n }\n <custom-form\n #tabForm\n [options]=\"grid\"\n [upsert]=\"upsertPrm\"\n [model]=\"subFormModel[grid.subDataKey!] || {}\"\n (modelChange)=\"refreshSubGridColumnVisibility()\">\n </custom-form>\n }\n }\n </div>\n }\n </div>\n </div>\n @if (showLog()) {\n <div class=\"w-full lg:w-[400px] md:w-[300px] md:h-full md:overflow-y-auto hidden md:block\">\n <custom-log [logs]=\"getPrm.data?.log ?? []\"></custom-log>\n </div>\n }\n </div>\n }\n</div>\n<row-selector\n\t[(visible)]=\"visible\"\n\t[searchPrm]=\"dialogSearchPrm\"\n\t[gridOptions]=\"selectOptions\"\n\t[selectionKeys]=\"selectionKeys\"\n\t[selectModelCode]=\"currentSelectModelCode || undefined\"\n\t[customListFormByDialog]=\"currentCustomListFormTemplate\"\n\t[customListFormByDialogContext]=\"currentCustomListFormContext\"\n\t[customListDialogMap]=\"customListFormInstanceMap()\"\n\t(onOk)=\"onOk($event)\"\n\t(cancelSelect)=\"onCancelSelected($event)\">\n</row-selector>\n", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 128px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}:host ::ng-deep .form-action{background:#e7e9ed!important;color:var(--ag-text-color)!important;border-color:#e7e9ed!important}:host ::ng-deep .form-action:not(:disabled):hover{background-color:#d8dadd!important;border-color:#d8dadd}:host ::ng-deep .page-form-left-tree{border:none!important;padding:0!important}.form-panel{border:solid 1px #dbdbdb}.page-form-left-panel{height:100%}.page-form-tree-panel{border:1px solid #e2e8f0;border-radius:4px;background:#fff;padding:4px}.page-form-left-panel-empty{display:flex;align-items:center;justify-content:center;min-height:160px;color:#94a3b8;font-size:12px}.icon-sidebar{color:#334155;padding:2.5px}.icon-sidebar:hover{color:var(--p-primary-color);cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormComponent, selector: "custom-form", inputs: ["options", "model", "upsert"], outputs: ["modelChange"] }, { kind: "component", type: LogComponent, selector: "custom-log", inputs: ["logs", "id"] }, { kind: "component", type: CrumbActionComponent, selector: "app-crumb-action", inputs: ["isShowCog", "addVisible", "importVisible", "exportVisible", "newUrl", "configNewPath", "onExport", "outlined", "isList", "authLevel", "actionList", "data", "menus", "saveBtnDisable", "showSaveButton"], outputs: ["saveEvent", "cancelEvent", "actionEvent"] }, { kind: "component", type: StepsComponent, selector: "custom-steps", inputs: ["modelLog", "needSelfAdjusting", "steps", "current", "authLevel", "isClick"], outputs: ["change"] }, { kind: "component", type: GridComponent, selector: "custom-grid", inputs: ["gridOptions", "selectionKeys", "upsert", "rowData", "hideExpressionData", "hideExpressionVersion", "searchPrm", "addType", "selectData", "showAct", "actPos", "authLevel", "showDelete", "deleteHidden", "addHidden", "gridDisable", "addSort", "subSaveVisible", "subSaveHidden", "subSaveLabel", "subSaveDisabled"], outputs: ["deleteEmit", "addEmit", "gridDataChanged", "subSaveEmit"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i4.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i4.TabList, selector: "p-tablist" }, { kind: "component", type: i4.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: RowSelectorComponent, selector: "row-selector", inputs: ["title", "selectionKeys", "gridOptions", "searchPrm", "visible", "showSearch", "selectModelCode", "customListFormByDialog", "customListFormByDialogContext", "customListDialogMap"], outputs: ["onOk", "visibleChange", "cancelSelect"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: HrefBtnListComponent, selector: "href-btn-list", inputs: ["hrefs"], outputs: ["hrefClick"] }, { kind: "component", type: SingleSelectListboxComponent, selector: "am-single-select-listbox", inputs: ["options", "optionLabel", "optionValue", "disabled", "emptyMessage", "allowDeselect"], outputs: ["onChange"] }, { kind: "ngmodule", type: TreeModule }, { kind: "component", type: i5.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "loadingMode", "selection", "style", "styleClass", "contextMenu", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterOptions", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "highlightOnSelect", "virtualNodeHeight"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }] }); }
|
|
1529
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PageFormComponent, isStandalone: true, selector: "app-page-form", inputs: { addVisible: { classPropertyName: "addVisible", publicName: "addVisible", isSignal: true, isRequired: false, transformFunction: null }, gridList: { classPropertyName: "gridList", publicName: "gridList", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, getPrmInput: { classPropertyName: "getPrmInput", publicName: "getPrmInput", isSignal: true, isRequired: true, transformFunction: null }, statusSteps: { classPropertyName: "statusSteps", publicName: "statusSteps", isSignal: true, isRequired: false, transformFunction: null }, statusKey: { classPropertyName: "statusKey", publicName: "statusKey", isSignal: true, isRequired: false, transformFunction: null }, hrefBtnList: { classPropertyName: "hrefBtnList", publicName: "hrefBtnList", isSignal: true, isRequired: false, transformFunction: null }, setTitle: { classPropertyName: "setTitle", publicName: "setTitle", isSignal: true, isRequired: false, transformFunction: null }, actionList: { classPropertyName: "actionList", publicName: "actionList", isSignal: true, isRequired: false, transformFunction: null }, modelLog: { classPropertyName: "modelLog", publicName: "modelLog", isSignal: true, isRequired: false, transformFunction: null }, formDisabled: { classPropertyName: "formDisabled", publicName: "formDisabled", isSignal: true, isRequired: false, transformFunction: null }, statusConf: { classPropertyName: "statusConf", publicName: "statusConf", isSignal: true, isRequired: false, transformFunction: null }, formDetail: { classPropertyName: "formDetail", publicName: "formDetail", isSignal: true, isRequired: false, transformFunction: null }, saveFunc: { classPropertyName: "saveFunc", publicName: "saveFunc", isSignal: true, isRequired: false, transformFunction: null }, showMainSaveButton: { classPropertyName: "showMainSaveButton", publicName: "showMainSaveButton", isSignal: true, isRequired: false, transformFunction: null }, configNewPath: { classPropertyName: "configNewPath", publicName: "configNewPath", isSignal: true, isRequired: false, transformFunction: null }, closeFallbackUrl: { classPropertyName: "closeFallbackUrl", publicName: "closeFallbackUrl", isSignal: true, isRequired: false, transformFunction: null }, runtimeContextInput: { classPropertyName: "runtimeContextInput", publicName: "runtimeContextInput", isSignal: true, isRequired: false, transformFunction: null }, customLeftPanel: { classPropertyName: "customLeftPanel", publicName: "customLeftPanel", isSignal: true, isRequired: false, transformFunction: null }, customListFormTemplateMap: { classPropertyName: "customListFormTemplateMap", publicName: "customListFormTemplateMap", isSignal: true, isRequired: false, transformFunction: null }, customListFormInstanceMap: { classPropertyName: "customListFormInstanceMap", publicName: "customListFormInstanceMap", isSignal: true, isRequired: false, transformFunction: null }, leftPanel: { classPropertyName: "leftPanel", publicName: "leftPanel", isSignal: true, isRequired: false, transformFunction: null }, panelSelectedData: { classPropertyName: "panelSelectedData", publicName: "panelSelectedData", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:resize": "onResize()" } }, providers: [], queries: [{ propertyName: "pageFormSlots", predicate: PageFormSlotDirective, descendants: true }], viewQueries: [{ propertyName: "cForm", first: true, predicate: ["cForm"], descendants: true }, { propertyName: "rowSelector", first: true, predicate: RowSelectorComponent, descendants: true }, { propertyName: "customGrid", predicate: ["customGrid"], descendants: true }, { propertyName: "tabForm", predicate: ["tabForm"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"md:overflow-hidden\">\n <!-- \u4FDD\u5B58\u65B0\u5EFA\u64CD\u4F5C\u533A -->\n\t<div class=\"flex md:flex-wrap lg:flex-nowrap items-center md:justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\n\t\t<div class=\"lg:basis-1/3 order-1\">\n\t\t\t<app-crumb-action\n\t\t\t\t[addVisible]=\"addVisible()\"\n\t\t\t\t[newUrl]=\"newUrl\"\n\t\t\t\t[isShowCog]=\"true\"\n\t\t\t\t[outlined]=\"true\"\n\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t[actionList]=\"actionList()\"\n\t\t\t\t[configNewPath]=\"configNewPath()\"\n\t\t\t\t[closeFallbackUrl]=\"closeFallbackUrl()\"\n\t\t\t\t[data]=\"getPrm.data ?? {}\"\n\t\t\t\t[saveBtnDisable]=\"saveBtnDisable\"\n\t\t\t\t[showSaveButton]=\"showMainSaveButton()\"\n\t\t\t\t(actionEvent)=\"authClick($event)\"\n\t\t\t\t(saveEvent)=\"submitForm()\">\n\t\t\t</app-crumb-action>\n\t\t</div>\n\n\t\t<div class=\"basis-1/5 lg:basis-2/3 order-2 lg:order-2 md:order-last md:basis-full md:mt-[6px]\">\n\t\t\t<href-btn-list\n\t\t\t\t[hrefs]=\"hrefBtnList()\"\n\t\t\t\t(hrefClick)=\"goRun($event)\"></href-btn-list>\n\t\t\t<!-- @if (id) {\n\t\t\t\t@for (btn of hrefBtnList(); track btn) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\t[variant]=\"btn?.variant\"\n\t\t\t\t\t\t[severity]=\"btn?.severity\"\n\t\t\t\t\t\tclass=\"mr-[6px]\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"btn?.icon\"\n\t\t\t\t\t\tlabel=\"{{ btn.i18nKey ? i18n.fanyi(btn.i18nKey) : btn.label }}\"\n\t\t\t\t\t\t(click)=\"goRun(btn)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t} -->\n\t\t</div>\n\t\t<div class=\"basis-1/3 order-3 flex flex-row-reverse\">\n\t\t\t@if (modelLog()) {\n\t\t\t\t<div class=\"hidden md:block\">\n\t\t\t\t\t<span\n\t\t\t\t\t\t[class]=\"'iconfont icon-sidebar icon-sidebar-' + sidebarMode()\"\n\t\t\t\t\t\t(click)=\"toggleLog()\"></span>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t</div>\n\t<div class=\"flex\">\n\t\t<div class=\"px-2 flex flex-wrap items-center flex-1\">\n\t\t\t<div class=\"hidden md:basis-1/3 py-1 basis-full md:flex items-center flex-row order-1\">\n\t\t\t\t@for (action of actionList(); let i = $index; track action) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"getPrm.data?.icon\"\n\t\t\t\t\t\t[loading]=\"action.loading\"\n\t\t\t\t\t\t[label]=\"action.i18nKey ? (action.i18nKey | translate) : action.label\"\n\t\t\t\t\t\t[disabled]=\"action.btnDisabled ? action.btnDisabled(getPrm.data) : false\"\n\t\t\t\t\t\t[styleClass]=\"\n\t\t\t\t\t\t\t(action.auth || 0) > (authLevel() || 0) || !!action.btnHidden?.(getPrm.data)\n\t\t\t\t\t\t\t\t? 'form-action hidden'\n\t\t\t\t\t\t\t\t: 'form-action block mr-[.5rem]'\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t(onClick)=\"action.onClick != '' && action.onClick?.(getPrm.data, action)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first w-full\">\n\t\t\t\t@if (stepsVisible) {\n\t\t\t\t\t<custom-steps\n\t\t\t\t\t\t#customSteps\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t[steps]=\"statusSteps()\"\n\t\t\t\t\t\t[modelLog]=\"showLog()\"\n\t\t\t\t\t\t[current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\n\t\t\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t\t\t[isClick]=\"this.statusConf().isClick\"\n\t\t\t\t\t\t(change)=\"statusChange($event, customSteps)\">\n\t\t\t\t\t</custom-steps>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t\t@if (showLog()) {\n\t\t\t<div class=\"lg:w-[400px] md:w-[300px] hidden md:block\"></div>\n\t\t}\n\t</div>\n <!-- form \u4E3B\u533A\u57DF-->\n @if(this.form().form) {\n <div class=\"main flex flex-wrap\">\n @if (customLeftPanel()) {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-fit md:max-w-full\">\n <ng-container *ngTemplateOutlet=\"customLeftPanel()\"></ng-container>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'list') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel\">\n <am-single-select-listbox\n [options]=\"leftPanelItems\"\n [ngModel]=\"leftPanelSelectedValue\"\n (onChange)=\"onLeftPanelSelectionChange($event)\"\n [optionValue]=\"getPanelOptionValue()\"\n [optionLabel]=\"getPanelOptionLabel()\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n [allowDeselect]=\"getPanelAllowDeselect()\" />\n </div>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'tree') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel page-form-tree-panel\">\n @if (leftPanelTreeNodes.length > 0) {\n <p-tree\n [value]=\"leftPanelTreeNodes\"\n selectionMode=\"single\"\n [(selection)]=\"leftPanelSelectedNode\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n styleClass=\"page-form-left-tree\"\n (onNodeSelect)=\"onLeftPanelTreeNodeSelect($event)\"\n (onNodeExpand)=\"onLeftPanelTreeNodeExpand($event)\"\n (onNodeCollapse)=\"onLeftPanelTreeNodeCollapse($event)\" />\n } @else {\n <div class=\"page-form-left-panel-empty\">{{ getPanelEmptyMessage() }}</div>\n }\n </div>\n </div>\n }\n <div class=\"w-full md:min-w-0 md:flex-1 md:h-full md:overflow-y-auto\">\n <div class=\"bg-white mx-2 form-panel\">\n <div class=\"p-2 flex-1\">\n <form [formGroup]=\"form().form!\">\n <custom-form\n #cForm\n [options]=\"formOptions\"\n [upsert]=\"upsertPrm\"\n [model]=\"getPrm.data ?? {}\"\n (modelChange)=\"onMainFormModelChange()\"></custom-form>\n </form>\n </div>\n @if (grids && grids.length > 0) {\n <div class=\"relative mb-2\">\n <p-tabs [(value)]=\"indexValue\">\n <p-tablist>\n @for (fchild of grids; let i = $index; track fchild) {\n <p-tab\n [value]=\"i\"\n (click)=\"tabClick()\">\n {{ fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title }}\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n </div>\n }\n @for (grid of grids; let i = $index; track grid) {\n @let slotState = slotRenderStates[i];\n @let slot = slotState?.slot;\n <div [hidden]=\"indexValue != i\" [style.height]=\"slot ? grid.gridOptions.scrollHeight : null\">\n @if (slot) {\n <ng-container *ngTemplateOutlet=\"slot.templateRef; context: slotState.context\"> </ng-container>\n <div class=\"flex justify-end py-[5px] pr-[8px] bg-white\">\n @if (canShowCurrentTabSave(grid)) {\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"saveCurrentTab()\" />\n }\n @if (grid.subTableSource != 'none' && !isSubAddHidden(grid)) {\n <p-button\n icon=\"pi pi-plus\"\n [text]=\"true\"\n severity=\"success\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"addRowClickHandler(grid)\" />\n }\n @if (grid.showDelete && !isSubDeleteHidden(grid)) {\n <p-button\n icon=\"pi pi-trash\"\n [text]=\"true\"\n severity=\"danger\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"delRowClickHandler(grid)\" />\n }\n\t\t\t\t\t\t\t\t\t<div #customGrid></div>\n </div>\n } @else {\n @if (grid.type == 'grid') {\n <custom-grid\n #customGrid\n [rowData]=\"getPrm.data?.[grid.subDataKey!]\"\n [hideExpressionData]=\"getPrm.data ?? {}\"\n [hideExpressionVersion]=\"hideExpressionVersion\"\n [upsert]=\"upsertPrm\"\n (deleteEmit)=\"delRows($event)\"\n (gridDataChanged)=\"refreshSubGridColumnVisibility()\"\n [addType]=\"grid.subTableSource\"\n (addEmit)=\"dataSourceShow()\"\n [gridOptions]=\"grid.gridOptions\"\n [gridDisable]=\"grid.gridDisabled\"\n [authLevel]=\"authLevel()\"\n [showDelete]=\"grid.showDelete\"\n [deleteHidden]=\"isSubDeleteHidden(grid)\"\n [addHidden]=\"isSubAddHidden(grid)\"\n [subSaveVisible]=\"canShowCurrentTabSave(grid)\"\n [subSaveHidden]=\"isSubSaveHidden(grid)\"\n [subSaveLabel]=\"getCurrentTabSaveLabel(grid)\"\n [subSaveDisabled]=\"grid.gridDisabled\"\n [selectData]=\"grid.selectData\"\n [addSort]=\"grid.addSort\"\n (subSaveEmit)=\"saveCurrentTab()\">\n </custom-grid>\n } @else {\n @if (canShowCurrentTabSave(grid)) {\n <div class=\"flex justify-end px-2 pt-2 bg-white\">\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"saveCurrentTab()\" />\n </div>\n }\n <custom-form\n #tabForm\n [options]=\"grid\"\n [upsert]=\"upsertPrm\"\n [model]=\"subFormModel[grid.subDataKey!] || {}\"\n (modelChange)=\"refreshSubGridColumnVisibility()\">\n </custom-form>\n }\n }\n </div>\n }\n </div>\n </div>\n @if (showLog()) {\n <div class=\"w-full lg:w-[400px] md:w-[300px] md:h-full md:overflow-y-auto hidden md:block\">\n <custom-log [logs]=\"getPrm.data?.log ?? []\"></custom-log>\n </div>\n }\n </div>\n }\n</div>\n<row-selector\n\t[(visible)]=\"visible\"\n\t[searchPrm]=\"dialogSearchPrm\"\n\t[gridOptions]=\"selectOptions\"\n\t[selectionKeys]=\"selectionKeys\"\n\t[selectModelCode]=\"currentSelectModelCode || undefined\"\n\t[customListFormByDialog]=\"currentCustomListFormTemplate\"\n\t[customListFormByDialogContext]=\"currentCustomListFormContext\"\n\t[customListDialogMap]=\"customListFormInstanceMap()\"\n\t(onOk)=\"onOk($event)\"\n\t(cancelSelect)=\"onCancelSelected($event)\">\n</row-selector>\n", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 128px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}:host ::ng-deep .form-action{background:#e7e9ed!important;color:var(--ag-text-color)!important;border-color:#e7e9ed!important}:host ::ng-deep .form-action:not(:disabled):hover{background-color:#d8dadd!important;border-color:#d8dadd}:host ::ng-deep .page-form-left-tree{border:none!important;padding:0!important}.form-panel{border:solid 1px #dbdbdb}.page-form-left-panel{height:100%}.page-form-tree-panel{border:1px solid #e2e8f0;border-radius:4px;background:#fff;padding:4px}.page-form-left-panel-empty{display:flex;align-items:center;justify-content:center;min-height:160px;color:#94a3b8;font-size:12px}.icon-sidebar{color:#334155;padding:2.5px}.icon-sidebar:hover{color:var(--p-primary-color);cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormComponent, selector: "custom-form", inputs: ["options", "model", "upsert"], outputs: ["modelChange"] }, { kind: "component", type: LogComponent, selector: "custom-log", inputs: ["logs", "id"] }, { kind: "component", type: CrumbActionComponent, selector: "app-crumb-action", inputs: ["isShowCog", "addVisible", "importVisible", "exportVisible", "newUrl", "configNewPath", "closeFallbackUrl", "onExport", "outlined", "isList", "authLevel", "actionList", "data", "menus", "saveBtnDisable", "showSaveButton"], outputs: ["saveEvent", "cancelEvent", "actionEvent"] }, { kind: "component", type: StepsComponent, selector: "custom-steps", inputs: ["modelLog", "needSelfAdjusting", "steps", "current", "authLevel", "isClick"], outputs: ["change"] }, { kind: "component", type: GridComponent, selector: "custom-grid", inputs: ["gridOptions", "selectionKeys", "upsert", "rowData", "hideExpressionData", "hideExpressionVersion", "searchPrm", "addType", "selectData", "showAct", "actPos", "authLevel", "showDelete", "deleteHidden", "addHidden", "gridDisable", "addSort", "subSaveVisible", "subSaveHidden", "subSaveLabel", "subSaveDisabled"], outputs: ["deleteEmit", "addEmit", "gridDataChanged", "subSaveEmit"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i4.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i4.TabList, selector: "p-tablist" }, { kind: "component", type: i4.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: RowSelectorComponent, selector: "row-selector", inputs: ["title", "selectionKeys", "gridOptions", "searchPrm", "visible", "showSearch", "selectModelCode", "customListFormByDialog", "customListFormByDialogContext", "customListDialogMap"], outputs: ["onOk", "visibleChange", "cancelSelect"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: HrefBtnListComponent, selector: "href-btn-list", inputs: ["hrefs"], outputs: ["hrefClick"] }, { kind: "component", type: SingleSelectListboxComponent, selector: "am-single-select-listbox", inputs: ["options", "optionLabel", "optionValue", "disabled", "emptyMessage", "allowDeselect"], outputs: ["onChange"] }, { kind: "ngmodule", type: TreeModule }, { kind: "component", type: i5.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "loadingMode", "selection", "style", "styleClass", "contextMenu", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterOptions", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "highlightOnSelect", "virtualNodeHeight"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }] }); }
|
|
1529
1530
|
}
|
|
1530
1531
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PageFormComponent, decorators: [{
|
|
1531
1532
|
type: Component,
|
|
@@ -1545,7 +1546,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1545
1546
|
HrefBtnListComponent,
|
|
1546
1547
|
SingleSelectListboxComponent,
|
|
1547
1548
|
TreeModule,
|
|
1548
|
-
], providers: [], template: "<div class=\"md:overflow-hidden\">\n <!-- \u4FDD\u5B58\u65B0\u5EFA\u64CD\u4F5C\u533A -->\n\t<div class=\"flex md:flex-wrap lg:flex-nowrap items-center md:justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\n\t\t<div class=\"lg:basis-1/3 order-1\">\n\t\t\t<app-crumb-action\n\t\t\t\t[addVisible]=\"addVisible()\"\n\t\t\t\t[newUrl]=\"newUrl\"\n\t\t\t\t[isShowCog]=\"true\"\n\t\t\t\t[outlined]=\"true\"\n\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t[actionList]=\"actionList()\"\n\t\t\t\t[configNewPath]=\"configNewPath()\"\n\t\t\t\t[data]=\"getPrm.data ?? {}\"\n\t\t\t\t[saveBtnDisable]=\"saveBtnDisable\"\n\t\t\t\t[showSaveButton]=\"showMainSaveButton()\"\n\t\t\t\t(actionEvent)=\"authClick($event)\"\n\t\t\t\t(saveEvent)=\"submitForm()\">\n\t\t\t</app-crumb-action>\n\t\t</div>\n\n\t\t<div class=\"basis-1/5 lg:basis-2/3 order-2 lg:order-2 md:order-last md:basis-full md:mt-[6px]\">\n\t\t\t<href-btn-list\n\t\t\t\t[hrefs]=\"hrefBtnList()\"\n\t\t\t\t(hrefClick)=\"goRun($event)\"></href-btn-list>\n\t\t\t<!-- @if (id) {\n\t\t\t\t@for (btn of hrefBtnList(); track btn) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\t[variant]=\"btn?.variant\"\n\t\t\t\t\t\t[severity]=\"btn?.severity\"\n\t\t\t\t\t\tclass=\"mr-[6px]\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"btn?.icon\"\n\t\t\t\t\t\tlabel=\"{{ btn.i18nKey ? i18n.fanyi(btn.i18nKey) : btn.label }}\"\n\t\t\t\t\t\t(click)=\"goRun(btn)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t} -->\n\t\t</div>\n\t\t<div class=\"basis-1/3 order-3 flex flex-row-reverse\">\n\t\t\t@if (modelLog()) {\n\t\t\t\t<div class=\"hidden md:block\">\n\t\t\t\t\t<span\n\t\t\t\t\t\t[class]=\"'iconfont icon-sidebar icon-sidebar-' + sidebarMode()\"\n\t\t\t\t\t\t(click)=\"toggleLog()\"></span>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t</div>\n\t<div class=\"flex\">\n\t\t<div class=\"px-2 flex flex-wrap items-center flex-1\">\n\t\t\t<div class=\"hidden md:basis-1/3 py-1 basis-full md:flex items-center flex-row order-1\">\n\t\t\t\t@for (action of actionList(); let i = $index; track action) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"getPrm.data?.icon\"\n\t\t\t\t\t\t[loading]=\"action.loading\"\n\t\t\t\t\t\t[label]=\"action.i18nKey ? (action.i18nKey | translate) : action.label\"\n\t\t\t\t\t\t[disabled]=\"action.btnDisabled ? action.btnDisabled(getPrm.data) : false\"\n\t\t\t\t\t\t[styleClass]=\"\n\t\t\t\t\t\t\t(action.auth || 0) > (authLevel() || 0) || !!action.btnHidden?.(getPrm.data)\n\t\t\t\t\t\t\t\t? 'form-action hidden'\n\t\t\t\t\t\t\t\t: 'form-action block mr-[.5rem]'\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t(onClick)=\"action.onClick != '' && action.onClick?.(getPrm.data, action)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first w-full\">\n\t\t\t\t@if (stepsVisible) {\n\t\t\t\t\t<custom-steps\n\t\t\t\t\t\t#customSteps\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t[steps]=\"statusSteps()\"\n\t\t\t\t\t\t[modelLog]=\"showLog()\"\n\t\t\t\t\t\t[current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\n\t\t\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t\t\t[isClick]=\"this.statusConf().isClick\"\n\t\t\t\t\t\t(change)=\"statusChange($event, customSteps)\">\n\t\t\t\t\t</custom-steps>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t\t@if (showLog()) {\n\t\t\t<div class=\"lg:w-[400px] md:w-[300px] hidden md:block\"></div>\n\t\t}\n\t</div>\n <!-- form \u4E3B\u533A\u57DF-->\n @if(this.form().form) {\n <div class=\"main flex flex-wrap\">\n @if (customLeftPanel()) {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-fit md:max-w-full\">\n <ng-container *ngTemplateOutlet=\"customLeftPanel()\"></ng-container>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'list') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel\">\n <am-single-select-listbox\n [options]=\"leftPanelItems\"\n [ngModel]=\"leftPanelSelectedValue\"\n (onChange)=\"onLeftPanelSelectionChange($event)\"\n [optionValue]=\"getPanelOptionValue()\"\n [optionLabel]=\"getPanelOptionLabel()\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n [allowDeselect]=\"getPanelAllowDeselect()\" />\n </div>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'tree') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel page-form-tree-panel\">\n @if (leftPanelTreeNodes.length > 0) {\n <p-tree\n [value]=\"leftPanelTreeNodes\"\n selectionMode=\"single\"\n [(selection)]=\"leftPanelSelectedNode\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n styleClass=\"page-form-left-tree\"\n (onNodeSelect)=\"onLeftPanelTreeNodeSelect($event)\"\n (onNodeExpand)=\"onLeftPanelTreeNodeExpand($event)\"\n (onNodeCollapse)=\"onLeftPanelTreeNodeCollapse($event)\" />\n } @else {\n <div class=\"page-form-left-panel-empty\">{{ getPanelEmptyMessage() }}</div>\n }\n </div>\n </div>\n }\n <div class=\"w-full md:min-w-0 md:flex-1 md:h-full md:overflow-y-auto\">\n <div class=\"bg-white mx-2 form-panel\">\n <div class=\"p-2 flex-1\">\n <form [formGroup]=\"form().form!\">\n <custom-form\n #cForm\n [options]=\"formOptions\"\n [upsert]=\"upsertPrm\"\n [model]=\"getPrm.data ?? {}\"\n (modelChange)=\"onMainFormModelChange()\"></custom-form>\n </form>\n </div>\n @if (grids && grids.length > 0) {\n <div class=\"relative mb-2\">\n <p-tabs [(value)]=\"indexValue\">\n <p-tablist>\n @for (fchild of grids; let i = $index; track fchild) {\n <p-tab\n [value]=\"i\"\n (click)=\"tabClick()\">\n {{ fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title }}\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n </div>\n }\n @for (grid of grids; let i = $index; track grid) {\n @let slotState = slotRenderStates[i];\n @let slot = slotState?.slot;\n <div [hidden]=\"indexValue != i\" [style.height]=\"slot ? grid.gridOptions.scrollHeight : null\">\n @if (slot) {\n <ng-container *ngTemplateOutlet=\"slot.templateRef; context: slotState.context\"> </ng-container>\n <div class=\"flex justify-end py-[5px] pr-[8px] bg-white\">\n @if (canShowCurrentTabSave(grid)) {\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"saveCurrentTab()\" />\n }\n @if (grid.subTableSource != 'none' && !isSubAddHidden(grid)) {\n <p-button\n icon=\"pi pi-plus\"\n [text]=\"true\"\n severity=\"success\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"addRowClickHandler(grid)\" />\n }\n @if (grid.showDelete && !isSubDeleteHidden(grid)) {\n <p-button\n icon=\"pi pi-trash\"\n [text]=\"true\"\n severity=\"danger\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"delRowClickHandler(grid)\" />\n }\n\t\t\t\t\t\t\t\t\t<div #customGrid></div>\n </div>\n } @else {\n @if (grid.type == 'grid') {\n <custom-grid\n #customGrid\n [rowData]=\"getPrm.data?.[grid.subDataKey!]\"\n [hideExpressionData]=\"getPrm.data ?? {}\"\n [hideExpressionVersion]=\"hideExpressionVersion\"\n [upsert]=\"upsertPrm\"\n (deleteEmit)=\"delRows($event)\"\n (gridDataChanged)=\"refreshSubGridColumnVisibility()\"\n [addType]=\"grid.subTableSource\"\n (addEmit)=\"dataSourceShow()\"\n [gridOptions]=\"grid.gridOptions\"\n [gridDisable]=\"grid.gridDisabled\"\n [authLevel]=\"authLevel()\"\n [showDelete]=\"grid.showDelete\"\n [deleteHidden]=\"isSubDeleteHidden(grid)\"\n [addHidden]=\"isSubAddHidden(grid)\"\n [subSaveVisible]=\"canShowCurrentTabSave(grid)\"\n [subSaveHidden]=\"isSubSaveHidden(grid)\"\n [subSaveLabel]=\"getCurrentTabSaveLabel(grid)\"\n [subSaveDisabled]=\"grid.gridDisabled\"\n [selectData]=\"grid.selectData\"\n [addSort]=\"grid.addSort\"\n (subSaveEmit)=\"saveCurrentTab()\">\n </custom-grid>\n } @else {\n @if (canShowCurrentTabSave(grid)) {\n <div class=\"flex justify-end px-2 pt-2 bg-white\">\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"saveCurrentTab()\" />\n </div>\n }\n <custom-form\n #tabForm\n [options]=\"grid\"\n [upsert]=\"upsertPrm\"\n [model]=\"subFormModel[grid.subDataKey!] || {}\"\n (modelChange)=\"refreshSubGridColumnVisibility()\">\n </custom-form>\n }\n }\n </div>\n }\n </div>\n </div>\n @if (showLog()) {\n <div class=\"w-full lg:w-[400px] md:w-[300px] md:h-full md:overflow-y-auto hidden md:block\">\n <custom-log [logs]=\"getPrm.data?.log ?? []\"></custom-log>\n </div>\n }\n </div>\n }\n</div>\n<row-selector\n\t[(visible)]=\"visible\"\n\t[searchPrm]=\"dialogSearchPrm\"\n\t[gridOptions]=\"selectOptions\"\n\t[selectionKeys]=\"selectionKeys\"\n\t[selectModelCode]=\"currentSelectModelCode || undefined\"\n\t[customListFormByDialog]=\"currentCustomListFormTemplate\"\n\t[customListFormByDialogContext]=\"currentCustomListFormContext\"\n\t[customListDialogMap]=\"customListFormInstanceMap()\"\n\t(onOk)=\"onOk($event)\"\n\t(cancelSelect)=\"onCancelSelected($event)\">\n</row-selector>\n", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 128px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}:host ::ng-deep .form-action{background:#e7e9ed!important;color:var(--ag-text-color)!important;border-color:#e7e9ed!important}:host ::ng-deep .form-action:not(:disabled):hover{background-color:#d8dadd!important;border-color:#d8dadd}:host ::ng-deep .page-form-left-tree{border:none!important;padding:0!important}.form-panel{border:solid 1px #dbdbdb}.page-form-left-panel{height:100%}.page-form-tree-panel{border:1px solid #e2e8f0;border-radius:4px;background:#fff;padding:4px}.page-form-left-panel-empty{display:flex;align-items:center;justify-content:center;min-height:160px;color:#94a3b8;font-size:12px}.icon-sidebar{color:#334155;padding:2.5px}.icon-sidebar:hover{color:var(--p-primary-color);cursor:pointer}\n"] }]
|
|
1549
|
+
], providers: [], template: "<div class=\"md:overflow-hidden\">\n <!-- \u4FDD\u5B58\u65B0\u5EFA\u64CD\u4F5C\u533A -->\n\t<div class=\"flex md:flex-wrap lg:flex-nowrap items-center md:justify-between py-1 px-1 border-b-[1px] border-[#dbdbdb] bg-white\">\n\t\t<div class=\"lg:basis-1/3 order-1\">\n\t\t\t<app-crumb-action\n\t\t\t\t[addVisible]=\"addVisible()\"\n\t\t\t\t[newUrl]=\"newUrl\"\n\t\t\t\t[isShowCog]=\"true\"\n\t\t\t\t[outlined]=\"true\"\n\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t[actionList]=\"actionList()\"\n\t\t\t\t[configNewPath]=\"configNewPath()\"\n\t\t\t\t[closeFallbackUrl]=\"closeFallbackUrl()\"\n\t\t\t\t[data]=\"getPrm.data ?? {}\"\n\t\t\t\t[saveBtnDisable]=\"saveBtnDisable\"\n\t\t\t\t[showSaveButton]=\"showMainSaveButton()\"\n\t\t\t\t(actionEvent)=\"authClick($event)\"\n\t\t\t\t(saveEvent)=\"submitForm()\">\n\t\t\t</app-crumb-action>\n\t\t</div>\n\n\t\t<div class=\"basis-1/5 lg:basis-2/3 order-2 lg:order-2 md:order-last md:basis-full md:mt-[6px]\">\n\t\t\t<href-btn-list\n\t\t\t\t[hrefs]=\"hrefBtnList()\"\n\t\t\t\t(hrefClick)=\"goRun($event)\"></href-btn-list>\n\t\t\t<!-- @if (id) {\n\t\t\t\t@for (btn of hrefBtnList(); track btn) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\t[variant]=\"btn?.variant\"\n\t\t\t\t\t\t[severity]=\"btn?.severity\"\n\t\t\t\t\t\tclass=\"mr-[6px]\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"btn?.icon\"\n\t\t\t\t\t\tlabel=\"{{ btn.i18nKey ? i18n.fanyi(btn.i18nKey) : btn.label }}\"\n\t\t\t\t\t\t(click)=\"goRun(btn)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t} -->\n\t\t</div>\n\t\t<div class=\"basis-1/3 order-3 flex flex-row-reverse\">\n\t\t\t@if (modelLog()) {\n\t\t\t\t<div class=\"hidden md:block\">\n\t\t\t\t\t<span\n\t\t\t\t\t\t[class]=\"'iconfont icon-sidebar icon-sidebar-' + sidebarMode()\"\n\t\t\t\t\t\t(click)=\"toggleLog()\"></span>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t</div>\n\t<div class=\"flex\">\n\t\t<div class=\"px-2 flex flex-wrap items-center flex-1\">\n\t\t\t<div class=\"hidden md:basis-1/3 py-1 basis-full md:flex items-center flex-row order-1\">\n\t\t\t\t@for (action of actionList(); let i = $index; track action) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t[icon]=\"getPrm.data?.icon\"\n\t\t\t\t\t\t[loading]=\"action.loading\"\n\t\t\t\t\t\t[label]=\"action.i18nKey ? (action.i18nKey | translate) : action.label\"\n\t\t\t\t\t\t[disabled]=\"action.btnDisabled ? action.btnDisabled(getPrm.data) : false\"\n\t\t\t\t\t\t[styleClass]=\"\n\t\t\t\t\t\t\t(action.auth || 0) > (authLevel() || 0) || !!action.btnHidden?.(getPrm.data)\n\t\t\t\t\t\t\t\t? 'form-action hidden'\n\t\t\t\t\t\t\t\t: 'form-action block mr-[.5rem]'\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t(onClick)=\"action.onClick != '' && action.onClick?.(getPrm.data, action)\">\n\t\t\t\t\t</p-button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"md:basis-2/3 basis-full flex md:flex-row-reverse flex-row md:order-2 order-first w-full\">\n\t\t\t\t@if (stepsVisible) {\n\t\t\t\t\t<custom-steps\n\t\t\t\t\t\t#customSteps\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t[steps]=\"statusSteps()\"\n\t\t\t\t\t\t[modelLog]=\"showLog()\"\n\t\t\t\t\t\t[current]=\"getPrm.data && getPrm.data[statusKey()] !== undefined ? getPrm.data[statusKey()] : 0\"\n\t\t\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t\t\t[isClick]=\"this.statusConf().isClick\"\n\t\t\t\t\t\t(change)=\"statusChange($event, customSteps)\">\n\t\t\t\t\t</custom-steps>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t\t@if (showLog()) {\n\t\t\t<div class=\"lg:w-[400px] md:w-[300px] hidden md:block\"></div>\n\t\t}\n\t</div>\n <!-- form \u4E3B\u533A\u57DF-->\n @if(this.form().form) {\n <div class=\"main flex flex-wrap\">\n @if (customLeftPanel()) {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-fit md:max-w-full\">\n <ng-container *ngTemplateOutlet=\"customLeftPanel()\"></ng-container>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'list') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel\">\n <am-single-select-listbox\n [options]=\"leftPanelItems\"\n [ngModel]=\"leftPanelSelectedValue\"\n (onChange)=\"onLeftPanelSelectionChange($event)\"\n [optionValue]=\"getPanelOptionValue()\"\n [optionLabel]=\"getPanelOptionLabel()\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n [allowDeselect]=\"getPanelAllowDeselect()\" />\n </div>\n </div>\n } @else if (leftPanel()?.enabled && leftPanel()?.mode === 'tree') {\n <div class=\"hidden md:block md:h-full md:overflow-y-auto md:flex-none md:w-[220px] md:max-w-full px-2\">\n <div class=\"page-form-left-panel page-form-tree-panel\">\n @if (leftPanelTreeNodes.length > 0) {\n <p-tree\n [value]=\"leftPanelTreeNodes\"\n selectionMode=\"single\"\n [(selection)]=\"leftPanelSelectedNode\"\n [emptyMessage]=\"getPanelEmptyMessage()\"\n styleClass=\"page-form-left-tree\"\n (onNodeSelect)=\"onLeftPanelTreeNodeSelect($event)\"\n (onNodeExpand)=\"onLeftPanelTreeNodeExpand($event)\"\n (onNodeCollapse)=\"onLeftPanelTreeNodeCollapse($event)\" />\n } @else {\n <div class=\"page-form-left-panel-empty\">{{ getPanelEmptyMessage() }}</div>\n }\n </div>\n </div>\n }\n <div class=\"w-full md:min-w-0 md:flex-1 md:h-full md:overflow-y-auto\">\n <div class=\"bg-white mx-2 form-panel\">\n <div class=\"p-2 flex-1\">\n <form [formGroup]=\"form().form!\">\n <custom-form\n #cForm\n [options]=\"formOptions\"\n [upsert]=\"upsertPrm\"\n [model]=\"getPrm.data ?? {}\"\n (modelChange)=\"onMainFormModelChange()\"></custom-form>\n </form>\n </div>\n @if (grids && grids.length > 0) {\n <div class=\"relative mb-2\">\n <p-tabs [(value)]=\"indexValue\">\n <p-tablist>\n @for (fchild of grids; let i = $index; track fchild) {\n <p-tab\n [value]=\"i\"\n (click)=\"tabClick()\">\n {{ fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title }}\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n </div>\n }\n @for (grid of grids; let i = $index; track grid) {\n @let slotState = slotRenderStates[i];\n @let slot = slotState?.slot;\n <div [hidden]=\"indexValue != i\" [style.height]=\"slot ? grid.gridOptions.scrollHeight : null\">\n @if (slot) {\n <ng-container *ngTemplateOutlet=\"slot.templateRef; context: slotState.context\"> </ng-container>\n <div class=\"flex justify-end py-[5px] pr-[8px] bg-white\">\n @if (canShowCurrentTabSave(grid)) {\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"saveCurrentTab()\" />\n }\n @if (grid.subTableSource != 'none' && !isSubAddHidden(grid)) {\n <p-button\n icon=\"pi pi-plus\"\n [text]=\"true\"\n severity=\"success\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"addRowClickHandler(grid)\" />\n }\n @if (grid.showDelete && !isSubDeleteHidden(grid)) {\n <p-button\n icon=\"pi pi-trash\"\n [text]=\"true\"\n severity=\"danger\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"delRowClickHandler(grid)\" />\n }\n\t\t\t\t\t\t\t\t\t<div #customGrid></div>\n </div>\n } @else {\n @if (grid.type == 'grid') {\n <custom-grid\n #customGrid\n [rowData]=\"getPrm.data?.[grid.subDataKey!]\"\n [hideExpressionData]=\"getPrm.data ?? {}\"\n [hideExpressionVersion]=\"hideExpressionVersion\"\n [upsert]=\"upsertPrm\"\n (deleteEmit)=\"delRows($event)\"\n (gridDataChanged)=\"refreshSubGridColumnVisibility()\"\n [addType]=\"grid.subTableSource\"\n (addEmit)=\"dataSourceShow()\"\n [gridOptions]=\"grid.gridOptions\"\n [gridDisable]=\"grid.gridDisabled\"\n [authLevel]=\"authLevel()\"\n [showDelete]=\"grid.showDelete\"\n [deleteHidden]=\"isSubDeleteHidden(grid)\"\n [addHidden]=\"isSubAddHidden(grid)\"\n [subSaveVisible]=\"canShowCurrentTabSave(grid)\"\n [subSaveHidden]=\"isSubSaveHidden(grid)\"\n [subSaveLabel]=\"getCurrentTabSaveLabel(grid)\"\n [subSaveDisabled]=\"grid.gridDisabled\"\n [selectData]=\"grid.selectData\"\n [addSort]=\"grid.addSort\"\n (subSaveEmit)=\"saveCurrentTab()\">\n </custom-grid>\n } @else {\n @if (canShowCurrentTabSave(grid)) {\n <div class=\"flex justify-end px-2 pt-2 bg-white\">\n <p-button\n icon=\"pi pi-cloud-upload\"\n [text]=\"true\"\n severity=\"primary\"\n [disabled]=\"grid.gridDisable\"\n (onClick)=\"saveCurrentTab()\" />\n </div>\n }\n <custom-form\n #tabForm\n [options]=\"grid\"\n [upsert]=\"upsertPrm\"\n [model]=\"subFormModel[grid.subDataKey!] || {}\"\n (modelChange)=\"refreshSubGridColumnVisibility()\">\n </custom-form>\n }\n }\n </div>\n }\n </div>\n </div>\n @if (showLog()) {\n <div class=\"w-full lg:w-[400px] md:w-[300px] md:h-full md:overflow-y-auto hidden md:block\">\n <custom-log [logs]=\"getPrm.data?.log ?? []\"></custom-log>\n </div>\n }\n </div>\n }\n</div>\n<row-selector\n\t[(visible)]=\"visible\"\n\t[searchPrm]=\"dialogSearchPrm\"\n\t[gridOptions]=\"selectOptions\"\n\t[selectionKeys]=\"selectionKeys\"\n\t[selectModelCode]=\"currentSelectModelCode || undefined\"\n\t[customListFormByDialog]=\"currentCustomListFormTemplate\"\n\t[customListFormByDialogContext]=\"currentCustomListFormContext\"\n\t[customListDialogMap]=\"customListFormInstanceMap()\"\n\t(onOk)=\"onOk($event)\"\n\t(cancelSelect)=\"onCancelSelected($event)\">\n</row-selector>\n", styles: ["@charset \"UTF-8\";.main{height:calc(100vh - 128px)}:host ::ng-deep .main .ag-root-wrapper{border-left:none!important;border-right:none!important;border-bottom:none!important}:host ::ng-deep .form-action{background:#e7e9ed!important;color:var(--ag-text-color)!important;border-color:#e7e9ed!important}:host ::ng-deep .form-action:not(:disabled):hover{background-color:#d8dadd!important;border-color:#d8dadd}:host ::ng-deep .page-form-left-tree{border:none!important;padding:0!important}.form-panel{border:solid 1px #dbdbdb}.page-form-left-panel{height:100%}.page-form-tree-panel{border:1px solid #e2e8f0;border-radius:4px;background:#fff;padding:4px}.page-form-left-panel-empty{display:flex;align-items:center;justify-content:center;min-height:160px;color:#94a3b8;font-size:12px}.icon-sidebar{color:#334155;padding:2.5px}.icon-sidebar:hover{color:var(--p-primary-color);cursor:pointer}\n"] }]
|
|
1549
1550
|
}], ctorParameters: () => [], propDecorators: { cForm: [{
|
|
1550
1551
|
type: ViewChild,
|
|
1551
1552
|
args: ['cForm']
|
|
@@ -1565,4 +1566,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1565
1566
|
type: HostListener,
|
|
1566
1567
|
args: ['window:resize']
|
|
1567
1568
|
}] } });
|
|
1568
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcGFnZS1mb3JtL3BhZ2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3BhZ2UtZm9ybS9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUlOLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxZQUFZLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFlLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQVEsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMs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Q1gsbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsVUFBVTt3QkFDVixvQkFBb0I7d0JBQ3BCLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQiw0QkFBNEI7d0JBQzVCLFVBQVU7cUJBQ1YsYUFHVSxFQUFFO3dEQUdPLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDVSxVQUFVO3NCQUFyQyxZQUFZO3VCQUFDLFlBQVk7Z0JBQ0QsT0FBTztzQkFBL0IsWUFBWTt1QkFBQyxTQUFTO2dCQUNVLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNnQyxhQUFhO3NCQUEzRSxlQUFlO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkF3SzdELFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckhpc3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS91c2VySGlzdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7XG5cdEFmdGVyQ29udGVudEluaXQsXG5cdEFmdGVyVmlld0luaXQsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q29udGVudENoaWxkcmVuLFxuXHRlZmZlY3QsXG5cdEhvc3RMaXN0ZW5lcixcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0T25EZXN0cm95LFxuXHRPbkluaXQsXG5cdFF1ZXJ5TGlzdCxcblx0c2lnbmFsLFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NoaWxkLFxuXHRWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCwgRm9ybU9wdGlvbnMgfSBmcm9tICcuLi9mb3JtL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUm93U2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9yb3ctc2VsZWN0b3Ivcm93LXNlbGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2dDb21wb25lbnQgfSBmcm9tICcuLi9sb2cvbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IENydW1iQWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3J1bWItYWN0aW9uL2NydW1iLWFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RlcCwgU3RlcHNDb21wb25lbnQgfSBmcm9tICcuLi9zdGVwcy9zdGVwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZENvbXBvbmVudCwgR3JpZE9wdGlvbnMgfSBmcm9tICcuLi9ncmlkL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFic01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFicyc7XG5pbXBvcnQgeyBUcmVlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90cmVlJztcbmltcG9ydCB7IEFtQ29tcG9uZW50LCBHZXQsIFNlYXJjaCB9IGZyb20gJy4uL2FtL2FtLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuXHRmb3JtVHlwZVRvUHJvcHMsXG5cdEdyaWRMaXN0LFxuXHRIcmVmQnRuTGlzdCxcblx0UGFnZUZvcm1TbG90Q29udGV4dCxcblx0UGFnZUxlZnRQYW5lbENvbmZpZyxcblx0UGFnZUxlZnRQYW5lbERhdGFTb3VyY2UsXG5cdFBheWxvYWRVcHNlcnQsXG5cdFBlcm1pc3Npb25CdG4sXG5cdEN1c3RvbUxpc3REaWFsb2csXG5cdEN1c3RvbUxpc3RGb3JtVGVtcGxhdGVDb250ZXh0LFxufSBmcm9tICcuL3BhZ2UtZm9ybS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSHJlZkJ0bkxpc3RDb21wb25lbnQgfSBmcm9tICcuLi9ocmVmLWJ0bi1saXN0L2hyZWYtYnRuLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2FjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGRlZXBDbG9uZSB9IGZyb20gJy4uL3NoYXJlL3V0aWxzJztcbmltcG9ydCB7IFBhZ2VGb3JtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvcGFnZS1mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnZUZvcm1TbG90RGlyZWN0aXZlIH0gZnJvbSAnLi9wYWdlLWZvcm0tc2xvdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgZmluYWxpemUsIGZpcnN0VmFsdWVGcm9tLCBpc09ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG5cdFNpbmdsZVNlbGVjdExpc3Rib3hDaGFuZ2VFdmVudCxcblx0U2luZ2xlU2VsZWN0TGlzdGJveENvbXBvbmVudFxufSBmcm9tICcuLi9zaW5nbGUtc2VsZWN0LWxpc3Rib3gvc2luZ2xlLXNlbGVjdC1saXN0Ym94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmaWVsZFV0aWxzIH0gZnJvbSAnLi4vZm9ybS9mb3JtLWZpZWxkL2ZpZWxkLXV0aWxzJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYXBwLXBhZ2UtZm9ybScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtcblx0XHRDb21tb25Nb2R1bGUsXG5cdFx0QnV0dG9uTW9kdWxlLFxuXHRcdEZvcm1zTW9kdWxlLFxuXHRcdFJlYWN0aXZlRm9ybXNNb2R1bGUsXG5cdFx0Rm9ybUNvbXBvbmVudCxcblx0XHRMb2dDb21wb25lbnQsXG5cdFx0Q3J1bWJBY3Rpb25Db21wb25lbnQsXG5cdFx0U3RlcHNDb21wb25lbnQsXG5cdFx0R3JpZENvbXBvbmVudCxcblx0XHRUYWJzTW9kdWxlLFxuXHRcdFJvd1NlbGVjdG9yQ29tcG9uZW50LFxuXHRcdFRyYW5zbGF0ZVBpcGUsXG5cdFx0SHJlZkJ0bkxpc3RDb21wb25lbnQsXG5cdFx0U2luZ2xlU2VsZWN0TGlzdGJveENvbXBvbmVudCxcblx0XHRUcmVlTW9kdWxlLFxuXHRdLFxuXHR0ZW1wbGF0ZVVybDogJy4vcGFnZS1mb3JtLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmw6ICcuL3BhZ2UtZm9ybS5jb21wb25lbnQuc2NzcycsXG5cdHByb3ZpZGVyczogW10sXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VGb3JtQ29tcG9uZW50IGV4dGVuZHMgQW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG5cdEBWaWV3Q2hpbGQoJ2NGb3JtJykgY0Zvcm0hOiBGb3JtQ29tcG9uZW50O1xuXHRAVmlld0NoaWxkcmVuKCdjdXN0b21HcmlkJykgY3VzdG9tR3JpZCE6IFF1ZXJ5TGlzdDxHcmlkQ29tcG9uZW50Pjtcblx0QFZpZXdDaGlsZHJlbigndGFiRm9ybScpIHRhYkZvcm0hOiBRdWVyeUxpc3Q8Rm9ybUNvbXBvbmVudD47XG5cdEBWaWV3Q2hpbGQoUm93U2VsZWN0b3JDb21wb25lbnQpIHJvd1NlbGVjdG9yPzogUm93U2VsZWN0b3JDb21wb25lbnQ7XG5cdEBDb250ZW50Q2hpbGRyZW4oUGFnZUZvcm1TbG90RGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHBhZ2VGb3JtU2xvdHMhOiBRdWVyeUxpc3Q8UGFnZUZvcm1TbG90RGlyZWN0aXZlPjtcblx0c2hvd0xvZyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5tb2RlbExvZygpICYmIHRoaXMuc2lkZWJhck1vZGUoKSA9PT0gJ3JpZ2h0Jztcblx0fSk7XG5cdGFkZFZpc2libGUgPSBpbnB1dDxib29sZWFuPigpO1xuXHRncmlkTGlzdCA9IGlucHV0PGFueVtdPihbXSk7XG5cdGZvcm0gPSBpbnB1dC5yZXF1aXJlZDxGb3JtT3B0aW9ucz4oe30pO1xuXHRnZXRQcm1JbnB1dCA9IGlucHV0LnJlcXVpcmVkPEdldD4oe30pO1xuXHRzdGF0dXNTdGVwcyA9IGlucHV0PFN0ZXBbXT4oW10pO1xuXHRzdGF0dXNLZXkgPSBpbnB1dCgnc3RhdHVzJyk7XG5cdGhyZWZCdG5MaXN0ID0gaW5wdXQ8SHJlZkJ0bkxpc3RbXT4oW10pO1xuXHRzZXRUaXRsZSA9IGlucHV0PHN0cmluZz4oKTtcblx0YWN0aW9uTGlzdCA9IGlucHV0PFBlcm1pc3Npb25CdG5bXT4oW10pO1xuXHRtb2RlbExvZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblx0c2lkZWJhck1vZGUgPSBzaWduYWw8J2xlZnQnIHwgJ3JpZ2h0Jz4oJ3JpZ2h0Jyk7XG5cdGZvcm1EaXNhYmxlZCA9IGlucHV0PEZ1bmN0aW9uPigpO1xuXHRzdGF0dXNDb25mID0gaW5wdXQ8YW55PigpO1xuXHRmb3JtRGV0YWlsID0gaW5wdXQ8YW55PigpO1xuXHRzYXZlRnVuYyA9IGlucHV0PGFueT4oKTtcblx0c2hvd01haW5TYXZlQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cdGNvbmZpZ05ld1BhdGggPSBpbnB1dDxhbnk+KCk7XG5cdHJ1bnRpbWVDb250ZXh0SW5wdXQgPSBpbnB1dDxhbnk+KHt9KTtcblx0Y3VzdG9tTGVmdFBhbmVsID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+KG51bGwpO1xuXHRjdXN0b21MaXN0Rm9ybVRlbXBsYXRlTWFwID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgVGVtcGxhdGVSZWY8Q3VzdG9tTGlzdEZvcm1UZW1wbGF0ZUNvbnRleHQ+PiB8IG51bGw+KG51bGwpO1xuXHRjdXN0b21MaXN0Rm9ybUluc3RhbmNlTWFwID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgQ3VzdG9tTGlzdERpYWxvZyB8IHVuZGVmaW5lZD4gfCBudWxsPihudWxsKTtcblx0bGVmdFBhbmVsID0gaW5wdXQ8UGFnZUxlZnRQYW5lbENvbmZpZyB8IG51bGw+KG51bGwpO1xuXHRwYW5lbFNlbGVjdGVkRGF0YSA9IGlucHV0PGFueT4oe30pO1xuXHRydW50aW1lQ29udGV4dDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG5cdHByaXZhdGUgY3VycmVudElkQW5kTW9kZWxOYW1lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+ID0ge307XG5cblx0dXNlckhpc3RvcnlTZXJ2aWNlID0gaW5qZWN0KFVzZXJIaXN0b3J5U2VydmljZSk7XG5cdHBhZ2VGb3JtU2VydmljZSA9IGluamVjdChQYWdlRm9ybVNlcnZpY2UpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cdHByaXZhdGUgX2luZGV4VmFsdWUgPSAwO1xuXHRwcml2YXRlIHJlYWRvbmx5IGludGVybmFsR3JpZExpc3QgPSBzaWduYWw8YW55W10+KFtdKTtcblx0cHJpdmF0ZSBncmlkTGlzdE92ZXJyaWRkZW4gPSBmYWxzZTtcblx0dmlzaWJsZSA9IGZhbHNlO1xuXHRkaWFsb2dTZWFyY2hQcm0hOiBTZWFyY2g7XG5cdHNlbGVjdE9wdGlvbnMhOiBHcmlkT3B0aW9ucztcblx0c2VsZWN0RGF0YTogYW55W10gPSBbXTtcblx0cGFnZVVybCA9ICcnO1xuXHRuZXdVcmwgPSAnJztcblx0YXV0aExldmVsID0gaW5wdXQ8bnVtYmVyPigtMSk7XG5cdGhyZWZzOiBhbnlbXSA9IFtdO1xuXHRhY3Rpb24gPSBpbmplY3QoQWN0aW9uU2VydmljZSk7XG5cdHN1YkZvcm1Nb2RlbDogYW55ID0ge307XG5cdHNhdmVCdG5EaXNhYmxlID0gZmFsc2U7XG5cdGdyaWREaXNhYmxlID0gZmFsc2U7XG5cdHNlbGVjdGlvbktleXM6IGFueVtdID0gW107XG5cdHN1YkRlbGV0ZUlkczogYW55W10gPSBbXTtcblx0bGVmdFBhbmVsSXRlbXM6IGFueVtdID0gW107XG5cdGxlZnRQYW5lbFRyZWVOb2RlczogVHJlZU5vZGVbXSA9IFtdO1xuXHRsZWZ0UGFuZWxTZWxlY3RlZE5vZGU6IFRyZWVOb2RlIHwgbnVsbCA9IG51bGw7XG5cdGxlZnRQYW5lbFNlbGVjdGVkVmFsdWU6IGFueSA9IG51bGw7XG5cdGxlZnRQYW5lbFNlbGVjdGVkSXRlbTogYW55ID0gbnVsbDtcblx0bGVmdFBhbmVsRXhwYW5kZWRLZXlzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRsZWZ0UGFuZWxJbml0aWFsaXplZCA9IGZhbHNlO1xuXHRwcml2YXRlIGxlZnRQYW5lbEluaXRpYWxpemVkTW9kZTogJ2xpc3QnIHwgJ3RyZWUnIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgYmFzZUdyaWRMaXN0U25hcHNob3Q6IGFueVtdID0gW107XG5cblx0c3RlcHNWaXNpYmxlID0gdHJ1ZTtcblx0cHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgc2xvdE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBQYWdlRm9ybVNsb3REaXJlY3RpdmU+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgc2xvdENvbnRleHRNYXAgPSBuZXcgTWFwPHN0cmluZywgUGFnZUZvcm1TbG90Q29udGV4dD4oKTtcblx0Y3VycmVudFNlbGVjdE1vZGVsQ29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdHNsb3RSZW5kZXJTdGF0ZXM6IEFycmF5PHtcblx0XHRzbG90PzogUGFnZUZvcm1TbG90RGlyZWN0aXZlO1xuXHRcdGNvbnRleHQ6IFBhZ2VGb3JtU2xvdENvbnRleHQ7XG5cdH0+ID0gW107XG5cdGhpZGVFeHByZXNzaW9uVmVyc2lvbiA9IDA7XG5cblx0Z2V0IGluZGV4VmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luZGV4VmFsdWU7XG5cdH1cblxuXHRnZXQgY3VycmVudEN1c3RvbUxpc3RGb3JtVGVtcGxhdGUoKSB7XG5cdFx0Y29uc3QgY3VycmVudFNlbGVjdE1vZGVsQ29kZSA9IHRoaXMuY3VycmVudFNlbGVjdE1vZGVsQ29kZTtcblx0XHRpZiAoIWN1cnJlbnRTZWxlY3RNb2RlbENvZGUpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmN1c3RvbUxpc3RGb3JtVGVtcGxhdGVNYXAoKT8uW2N1cnJlbnRTZWxlY3RNb2RlbENvZGVdID8/IG51bGw7XG5cdH1cblxuXHRnZXQgY3VycmVudEN1c3RvbUxpc3RGb3JtQ29udGV4dCgpOiBDdXN0b21MaXN0Rm9ybVRlbXBsYXRlQ29udGV4dCB7XG5cdFx0cmV0dXJuIHsgcGFnZUZvcm06IHRoaXMgfTtcblx0fVxuXG5cdGdldERpYWxvZ1NlbGVjdGVkUmVzdWx0KCkge1xuXHRcdGNvbnN0IHNlbGVjdGVkRGF0YSA9IHRoaXMucm93U2VsZWN0b3I/LmdldFNlbGVjdGVkRGF0YSgpID8/IFtdO1xuXHRcdHJldHVybiBzZWxlY3RlZERhdGEubWFwKChpdGVtKSA9PiB7XG5cdFx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuXHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zPy5jb2x1bW5EZWZzPy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXN1bHRbY29sLmZpZWxkXSA9IGl0ZW1bY29sLmZpZWxkXTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9KTtcblx0fVxuXG5cdHNldFJ1bnRpbWVDb250ZXh0KGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSkge1xuXHRcdHRoaXMucnVudGltZUNvbnRleHQgPSB7XG5cdFx0XHQuLi4odGhpcy5ydW50aW1lQ29udGV4dCB8fCB7fSksXG5cdFx0XHQuLi5kYXRhLFxuXHRcdH07XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRyZWZyZXNoU3ViR3JpZENvbHVtblZpc2liaWxpdHkoKSB7XG5cdFx0dGhpcy5oaWRlRXhwcmVzc2lvblZlcnNpb24rKztcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdG9uTWFpbkZvcm1Nb2RlbENoYW5nZSgpIHtcblx0XHR0aGlzLnJlZnJlc2hTdWJHcmlkQ29sdW1uVmlzaWJpbGl0eSgpO1xuXHR9XG5cblx0c2V0IGluZGV4VmFsdWUodmFsdWU6IG51bWJlcikge1xuXHRcdHRoaXMuX2luZGV4VmFsdWUgPSB2YWx1ZTtcblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5zZXRTZWxlY3RlZFJvd3MoW10pO1xuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0fVxuXG5cdGdldCBncmlkcygpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCk7XG5cdH1cblxuXHRzZXQgZ3JpZHModmFsdWU6IGFueVtdKSB7XG5cdFx0dGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4gPSB0cnVlO1xuXHRcdHRoaXMuaW50ZXJuYWxHcmlkTGlzdC5zZXQodmFsdWUgPz8gW10pO1xuXHRcdHRoaXMuc3luY1Vwc2VydFN1YnNlcnRzKCk7XG5cdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlZEdyaWRMaXN0KCkge1xuXHRcdGlmICh0aGlzLmxlZnRQYW5lbCgpPy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnRlcm5hbEdyaWRMaXN0KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmdyaWRMaXN0T3ZlcnJpZGRlbiA/IHRoaXMuaW50ZXJuYWxHcmlkTGlzdCgpIDogdGhpcy5ncmlkTGlzdCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jVXBzZXJ0U3Vic2VydHMoKSB7XG5cdFx0Y29uc3QgY3VycmVudFN1YnNlcnRzID0gdGhpcy51cHNlcnRQcm0uc3Vic2VydCB8fCBbXTtcblx0XHRjb25zdCBzdWJzZXJ0TWFwID0gbmV3IE1hcChjdXJyZW50U3Vic2VydHMubWFwKChpdGVtKSA9PiBbaXRlbS5zdWJNb2RlbE5hbWUsIGl0ZW1dKSk7XG5cdFx0Y29uc3QgbmV4dFN1YnNlcnRzID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClcblx0XHRcdC5tYXAoKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzdWJNb2RlbE5hbWUgPSBpdGVtLnR5cGUgPT09ICdncmlkJyA/IGl0ZW0uZ3JpZE9wdGlvbnM/Lm1vZGVsTmFtZSA6IGl0ZW1bJ21vZGVsTmFtZSddO1xuXHRcdFx0XHRpZiAoIXN1Yk1vZGVsTmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnQgPSBzdWJzZXJ0TWFwLmdldChzdWJNb2RlbE5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGN1cnJlbnQgfHwge1xuXHRcdFx0XHRcdFx0c3ViTW9kZWxOYW1lLFxuXHRcdFx0XHRcdFx0Zms6IGl0ZW0udHlwZSA9PT0gJ2dyaWQnID8gaXRlbS5ncmlkT3B0aW9ucz8uZmsgfHwgaXRlbS5mayA6IGl0ZW0uZmssXG5cdFx0XHRcdFx0XHRzdWJEYXRhOiBbXSxcblx0XHRcdFx0XHRcdG1hcHRtcDogbmV3IE1hcCgpLFxuXHRcdFx0XHRcdFx0bG9ndG1wOiBuZXcgTWFwKCksXG5cdFx0XHRcdFx0XHRyZWZlcmVuY2U6IGl0ZW0udHlwZSA9PT0gJ2dyaWQnID8gaXRlbS5ncmlkT3B0aW9ucz8ucmVmZXJlbmNlIHx8IGl0ZW0ucmVmZXJlbmNlIDogaXRlbS5yZWZlcmVuY2UsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgYW55W107XG5cdFx0dGhpcy51cHNlcnRQcm0uc3Vic2VydCA9IG5leHRTdWJzZXJ0cztcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuXHRvblJlc2l6ZSgpIHtcblx0XHR0aGlzLnNpZGViYXJNb2RlLnNldCh3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQgPyAnbGVmdCcgOiAncmlnaHQnKTtcblx0fVxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuaWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJykpO1xuXHRcdHRoaXMucGFnZVVybCA9IHRoaXMucm91dGUuc25hcHNob3QudXJsXG5cdFx0XHQubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnBhdGgpXG5cdFx0XHQuam9pbignLycpXG5cdFx0XHQucmVwbGFjZSgvKFteXFwvXSopJC8sICcnKTtcblx0XHR0aGlzLm5ld1VybCA9IGAke3RoaXMucGFnZVVybH1uZXdgO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5tb2RlbE5hbWUgPSB0aGlzLmdldFBybUlucHV0KCkubW9kZWxOYW1lITtcblx0XHRcdFx0dGhpcy5nZXRQcm0gPSB7IC4uLnRoaXMuZ2V0UHJtSW5wdXQoKSB9O1xuXHRcdFx0XHR0aGlzLmlkICYmICh0aGlzLmdldFBybS5pZCA9IHRoaXMuaWQpO1xuXHRcdFx0XHRpZiAodGhpcy5pZCAmJiB0aGlzLm1vZGVsTmFtZSAmJiAhdGhpcy5sZWZ0UGFuZWwoKT8uZW5hYmxlZCkge1xuXHRcdFx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCgxKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge307XG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHYudHlwZSA9PSAnZ3JpZCcpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YVt2LnN1YkRhdGFLZXldID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR0aGlzLmZvcm1PcHRpb25zID0gdGhpcy5idWlsZEZvcm1PcHRpb25zKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMucnVudGltZUNvbnRleHQgPSB0aGlzLnJ1bnRpbWVDb250ZXh0SW5wdXQoKSB8fCB7fTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaXNMb2cgPSB0aGlzLm1vZGVsTG9nKCk7XG5cdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuc3RhdHVzU3RlcHMoKS5sZW5ndGggPiAwICYmICF0aGlzLmlkKSB7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnRQcm0uYWRkRGF0YSFbdGhpcy5zdGF0dXNLZXkoKV0gPSB0aGlzLnN0YXR1c1N0ZXBzKClbMF1bJ3ZhbHVlJ107XG5cdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5nZXRQcm0uZGF0YSB8fCB7fSwge1xuXHRcdFx0XHRcdFx0W3RoaXMuc3RhdHVzS2V5KCldOiB0aGlzLnN0YXR1c1N0ZXBzKClbMF1bJ3ZhbHVlJ10sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5hdXRoTGV2ZWwoKSA8IDMpIHtcblx0XHRcdFx0XHR0aGlzLnNldERpc2FibGVkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlucHV0R3JpZExpc3QgPSB0aGlzLmdyaWRMaXN0KCk7XG5cdFx0XHRcdGlmICghdGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4pIHtcblx0XHRcdFx0XHQvLyB0aGlzLmludGVybmFsR3JpZExpc3Quc2V0KFtdKTtcblx0XHRcdFx0XHR0aGlzLnN5bmNVcHNlcnRTdWJzZXJ0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QgPSBkZWVwQ2xvbmUoaW5wdXRHcmlkTGlzdCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0XHRcdGlmICghcGFuZWw/LmVuYWJsZWQpIHtcblx0XHRcdFx0XHR0aGlzLnJlc2V0TGVmdFBhbmVsU3RhdGUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY3VycmVudE1vZGUgPSB0aGlzLmdldExlZnRQYW5lbE1vZGUoKTtcblx0XHRcdFx0aWYgKHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWQgJiYgdGhpcy5sZWZ0UGFuZWxJbml0aWFsaXplZE1vZGUgPT09IGN1cnJlbnRNb2RlKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSAmJiB0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSAhPT0gY3VycmVudE1vZGUpIHtcblx0XHRcdFx0XHR0aGlzLnJlc2V0TGVmdFBhbmVsU3RhdGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5pbml0aWFsaXplTGVmdFBhbmVsKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHR9XG5cblx0bmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuXHRcdHRoaXMucmVidWlsZFNsb3RNYXAoKTtcblx0XHR0aGlzLnBhZ2VGb3JtU2xvdHMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMucmVidWlsZFNsb3RNYXAoKTtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0pO1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy51cENiID0gdGhpcy51cENiLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vblJlc2l6ZSgpO1xuXHRcdHRoaXMuYmluZFBhZ2VGb3JtU2VydmljZSgpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5kZXN0cm95JC5uZXh0KCk7XG5cdFx0dGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNldExlZnRQYW5lbFN0YXRlKCkge1xuXHRcdHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSA9IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxJdGVtcyA9IFtdO1xuXHRcdHRoaXMubGVmdFBhbmVsVHJlZU5vZGVzID0gW107XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZE5vZGUgPSBudWxsO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRWYWx1ZSA9IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gPSBudWxsO1xuXHRcdHRoaXMubGVmdFBhbmVsRXhwYW5kZWRLZXlzID0ge307XG5cdFx0dGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4gPSBmYWxzZTtcblx0XHR0aGlzLmludGVybmFsR3JpZExpc3Quc2V0KHRoaXMuZ3JpZExpc3QoKSk7XG5cdFx0dGhpcy5zeW5jVXBzZXJ0U3Vic2VydHMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUxlZnRQYW5lbCgpIHtcblx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0aWYgKCFwYW5lbD8uZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkID0gdHJ1ZTtcblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSA9IHRoaXMuZ2V0TGVmdFBhbmVsTW9kZSgpO1xuXHRcdHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QgPSBkZWVwQ2xvbmUodGhpcy5ncmlkTGlzdCgpLCB0aGlzKTtcblx0XHRjb25zdCBkYXRhU291cmNlID0gdGhpcy5nZXRQYW5lbERhdGFTb3VyY2UoKTtcblx0XHR0aGlzLnJ1bkxlZnRQYW5lbEV2ZW50KCdvbkluaXQnKTtcblx0XHRjb25zdCBpdGVtcyA9IGF3YWl0IHRoaXMubG9hZExlZnRQYW5lbEl0ZW1zKGRhdGFTb3VyY2UpO1xuXHRcdHRoaXMubGVmdFBhbmVsSXRlbXMgPSBpdGVtcztcblx0XHR0aGlzLnJ1bkxlZnRQYW5lbEV2ZW50KCdvbkl0ZW1zTG9hZGVkJywgeyBpdGVtcyB9KTtcblx0XHRpZiAodGhpcy5nZXRMZWZ0UGFuZWxNb2RlKCkgPT09ICd0cmVlJykge1xuXHRcdFx0dGhpcy5pbml0aWFsaXplTGVmdFBhbmVsVHJlZShpdGVtcyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUxlZnRQYW5lbExpc3QoaXRlbXMsIGRhdGFTb3VyY2UpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBpbml0aWFsaXplTGVmdFBhbmVsTGlzdChpdGVtczogYW55W10sIGRhdGFTb3VyY2U/OiBQYWdlTGVmdFBhbmVsRGF0YVNvdXJjZSkge1xuXHRcdGxldCBkZWZhdWx0VmFsdWUgPSBhd2FpdCB0aGlzLnJlc29sdmVNYXliZUFzeW5jKFxuXHRcdFx0dHlwZW9mIGRhdGFTb3VyY2U/LmRlZmF1bHRTZWxlY3QgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0PyBkYXRhU291cmNlLmRlZmF1bHRTZWxlY3QodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoeyBpdGVtcyB9KSlcblx0XHRcdFx0OiBkYXRhU291cmNlPy5kZWZhdWx0U2VsZWN0LFxuXHRcdCk7XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAmJiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShkZWZhdWx0VmFsdWUpO1xuXHRcdH1cblx0XHRpZiAoKGRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGRlZmF1bHRWYWx1ZSA9PT0gbnVsbCkgJiYgdGhpcy5nZXRQYW5lbEFsbG93RGVzZWxlY3QoKSA9PT0gZmFsc2UgJiYgaXRlbXMubGVuZ3RoID4gMCkge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShpdGVtc1swXSk7XG5cdFx0fVxuXHRcdGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcblx0XHRcdGF3YWl0IHRoaXMuYXBwbHlMZWZ0UGFuZWxTZWxlY3Rpb24oZGVmYXVsdFZhbHVlLCBpdGVtcy5maW5kKChpdGVtKSA9PiB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKGl0ZW0pID09PSBkZWZhdWx0VmFsdWUpKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGxvYWRMZWZ0UGFuZWxJdGVtcyhkYXRhU291cmNlPzogUGFnZUxlZnRQYW5lbERhdGFTb3VyY2UpIHtcblx0XHRpZiAoIWRhdGFTb3VyY2UpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0bGV0IHJlc3VsdCA9XG5cdFx0XHR0eXBlb2YgZGF0YVNvdXJjZS5sb2FkZXIgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0PyBkYXRhU291cmNlLmxvYWRlcih0aGlzLmNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dCgpKVxuXHRcdFx0XHQ6IChkYXRhU291cmNlLmxvYWRlciA/PyBkYXRhU291cmNlLm9wdGlvbnMgPz8gW10pO1xuXHRcdHJlc3VsdCA9IGF3YWl0IHRoaXMucmVzb2x2ZU1heWJlQXN5bmMocmVzdWx0KTtcblx0XHRpZiAoZGF0YVNvdXJjZS5yZXN1bHRQYXRoKSB7XG5cdFx0XHRyZXN1bHQgPSBmaWVsZFV0aWxzLmdldE1vZGVsKHJlc3VsdCwgZGF0YVNvdXJjZS5yZXN1bHRQYXRoKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBkYXRhU291cmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmVzdWx0ID0gYXdhaXQgdGhpcy5yZXNvbHZlTWF5YmVBc3luYyhkYXRhU291cmNlLnRyYW5zZm9ybShyZXN1bHQsIHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KHsgaXRlbXM6IHJlc3VsdCB9KSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogW107XG5cdH1cblxuXHRwcml2YXRlIGdldExlZnRQYW5lbE1vZGUoKTogJ2xpc3QnIHwgJ3RyZWUnIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8ubW9kZSA9PT0gJ3RyZWUnID8gJ3RyZWUnIDogJ2xpc3QnO1xuXHR9XG5cblx0Z2V0UGFuZWxPcHRpb25MYWJlbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8ub3B0aW9uTGFiZWwgfHwgdGhpcy5sZWZ0UGFuZWwoKT8ubGlzdD8ub3B0aW9uTGFiZWwgfHwgdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8ubm9kZUxhYmVsIHx8ICdsYWJlbCc7XG5cdH1cblxuXHRnZXRQYW5lbE9wdGlvblZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5vcHRpb25WYWx1ZSB8fCB0aGlzLmxlZnRQYW5lbCgpPy5saXN0Py5vcHRpb25WYWx1ZSB8fCB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5ub2RlVmFsdWUgfHwgJ3ZhbHVlJztcblx0fVxuXG5cdGdldFBhbmVsQWxsb3dEZXNlbGVjdCgpIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8uYWxsb3dEZXNlbGVjdCA/PyB0aGlzLmxlZnRQYW5lbCgpPy5saXN0Py5hbGxvd0Rlc2VsZWN0ID8/IHRydWU7XG5cdH1cblxuXHRnZXRQYW5lbEVtcHR5TWVzc2FnZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8uZW1wdHlNZXNzYWdlIHx8IHRoaXMubGVmdFBhbmVsKCk/Lmxpc3Q/LmVtcHR5TWVzc2FnZSB8fCB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5lbXB0eU1lc3NhZ2UgfHwgJ+aaguaXoOaVsOaNric7XG5cdH1cblxuXHRwcml2YXRlIGdldFBhbmVsRGF0YVNvdXJjZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8uZGF0YVNvdXJjZSB8fCB0aGlzLmxlZnRQYW5lbCgpPy5saXN0Py5kYXRhU291cmNlIHx8IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmRhdGFTb3VyY2U7XG5cdH1cblxuXHRwcml2YXRlIGdldFRyZWVDaGlsZHJlbkZpZWxkKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5jaGlsZHJlbkZpZWxkIHx8ICdjaGlsZHJlbic7XG5cdH1cblxuXHRwcml2YXRlIGdldFRyZWVQYXJlbnRTZWxlY3RhYmxlKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5wYXJlbnRTZWxlY3RhYmxlID8/IHRydWU7XG5cdH1cblxuXHRwcml2YXRlIGdldFRyZWVFeHBhbmRlZEtleXNTdGF0ZUtleSgpIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uZXhwYW5kZWRLZXlzU3RhdGVLZXk7XG5cdH1cblxuXHRwcml2YXRlIGdldFRyZWVGaWVsZFZhbHVlKGl0ZW06IGFueSwgZmllbGQ/OiBzdHJpbmcpIHtcblx0XHRpZiAoIWZpZWxkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gZmllbGRVdGlscy5nZXRNb2RlbChpdGVtLCBmaWVsZCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIHJlc29sdmVNYXliZUFzeW5jKHZhbHVlOiBhbnkpIHtcblx0XHRpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dChleHRyYTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhZ2VGb3JtOiB0aGlzLFxuXHRcdFx0bW9kZTogdGhpcy5nZXRMZWZ0UGFuZWxNb2RlKCksXG5cdFx0XHRzZWxlY3RlZEl0ZW06IHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRJdGVtLFxuXHRcdFx0c2VsZWN0ZWRWYWx1ZTogdGhpcy5sZWZ0UGFuZWxTZWxlY3RlZFZhbHVlLFxuXHRcdFx0aXRlbXM6IHRoaXMubGVmdFBhbmVsSXRlbXMsXG5cdFx0XHRnZXRQcm06IHRoaXMuZ2V0UHJtLFxuXHRcdFx0Z3JpZExpc3Q6IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLFxuXHRcdFx0YmFzZUdyaWRMaXN0OiB0aGlzLmJhc2VHcmlkTGlzdFNuYXBzaG90LFxuXHRcdFx0cGFuZWxTZWxlY3RlZERhdGE6IHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRJdGVtLFxuXHRcdFx0cnVudGltZUNvbnRleHQ6IHRoaXMucnVudGltZUNvbnRleHQsXG5cdFx0XHRzZXRTdGF0ZTogKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5nZXRQcm0uZGF0YSkge1xuXHRcdFx0XHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIGtleSwgdmFsdWUpO1xuXHRcdFx0fSxcblx0XHRcdC4uLmV4dHJhLFxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIHJ1bkxlZnRQYW5lbEV2ZW50KGV2ZW50TmFtZToga2V5b2YgTm9uTnVsbGFibGU8UGFnZUxlZnRQYW5lbENvbmZpZ1snZXZlbnRzJ10+LCBleHRyYTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IHRoaXMubGVmdFBhbmVsKCk/LmV2ZW50cz8uW2V2ZW50TmFtZV07XG5cdFx0aWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHJldHVybiBoYW5kbGVyKHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KGV4dHJhKSk7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVQYW5lbE9wdGlvblZhbHVlKG9wdGlvbjogYW55KSB7XG5cdFx0Y29uc3Qgb3B0aW9uVmFsdWUgPSB0aGlzLmdldFBhbmVsT3B0aW9uVmFsdWUoKTtcblx0XHRpZiAoIW9wdGlvblZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9uO1xuXHRcdH1cblx0XHRyZXR1cm4gZmllbGRVdGlscy5nZXRNb2RlbChvcHRpb24sIG9wdGlvblZhbHVlKTtcblx0fVxuXG5cdGFzeW5jIG9uTGVmdFBhbmVsU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBTaW5nbGVTZWxlY3RMaXN0Ym94Q2hhbmdlRXZlbnQpIHtcblx0XHRpZiAoZXZlbnQudmFsdWUgPT0gbnVsbCAmJiB0aGlzLmdldFBhbmVsQWxsb3dEZXNlbGVjdCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuYXBwbHlMZWZ0UGFuZWxTZWxlY3Rpb24oZXZlbnQudmFsdWUsIGV2ZW50Lm9wdGlvbik7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGFwcGx5TGVmdFBhbmVsU2VsZWN0aW9uKHZhbHVlOiBhbnksIG9wdGlvbj86IGFueSkge1xuXHRcdGNvbnN0IHBhbmVsID0gdGhpcy5sZWZ0UGFuZWwoKTtcblx0XHRpZiAoIXBhbmVsPy5lbmFibGVkIHx8IHRoaXMuZ2V0TGVmdFBhbmVsTW9kZSgpICE9PSAnbGlzdCcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc2VsZWN0ZWRJdGVtID0gb3B0aW9uID8/IHRoaXMubGVmdFBhbmVsSXRlbXMuZmluZCgoaXRlbSkgPT4gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShpdGVtKSA9PT0gdmFsdWUpID8/IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZFZhbHVlID0gdmFsdWU7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gPSBzZWxlY3RlZEl0ZW07XG5cdFx0dGhpcy5zeW5jTGVmdFBhbmVsU2VsZWN0aW9uU3RhdGUodmFsdWUsIHNlbGVjdGVkSXRlbSk7XG5cdFx0dGhpcy5pbmRleFZhbHVlID0gMDtcblx0XHR0aGlzLnJ1bkxlZnRQYW5lbEV2ZW50KCdvblNlbGVjdGlvbkNoYW5nZScsIHtcblx0XHRcdHNlbGVjdGVkSXRlbSxcblx0XHRcdHNlbGVjdGVkVmFsdWU6IHZhbHVlLFxuXHRcdFx0bm9kZTogbnVsbCxcblx0XHRcdHJhd05vZGU6IG51bGwsXG5cdFx0XHRpc1BhcmVudDogZmFsc2UsXG5cdFx0XHRpc0xlYWY6IHRydWUsXG5cdFx0fSk7XG5cdFx0dGhpcy5zeW5jR2V0UHJtRml0ZXJQcmVsb2FkcygpO1xuXHRcdHRoaXMuZm9ybU9wdGlvbnMgPSB0aGlzLmJ1aWxkRm9ybU9wdGlvbnMoKTtcblx0XHRpZiAodGhpcy5pZCAmJiB0aGlzLm1vZGVsTmFtZSkge1xuXHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKDIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIHN5bmNHZXRQcm1GaXRlclByZWxvYWRzKCkge1xuXHRcdGNvbnN0IGZpdGVyUHJlbG9hZHMgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mbGF0TWFwKChpdGVtOiBhbnkpID0+IChBcnJheS5pc0FycmF5KGl0ZW0/LmZpdGVyUHJlbG9hZHMpID8gaXRlbS5maXRlclByZWxvYWRzIDogW10pKTtcblx0XHR0aGlzLmdldFBybS5maXRlclByZWxvYWRzID0gZml0ZXJQcmVsb2Fkcztcblx0fVxuXG5cdHByaXZhdGUgc3luY0dldFBybUZvckN1cnJlbnRWaWV3KCkge1xuXHRcdGlmICghdGhpcy5sZWZ0UGFuZWwoKT8uZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBjdXJyZW50UHJlbG9hZHMgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVxuXHRcdFx0Lm1hcCgoaXRlbTogYW55KSA9PiBpdGVtPy5zdWJEYXRhS2V5KVxuXHRcdFx0LmZpbHRlcigoaXRlbTogYW55KSA9PiAhIWl0ZW0pO1xuXHRcdGlmIChjdXJyZW50UHJlbG9hZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5nZXRQcm0ucHJlbG9hZHMgPSBjdXJyZW50UHJlbG9hZHM7XG5cdFx0fVxuXHRcdHRoaXMuc3luY0dldFBybUZpdGVyUHJlbG9hZHMoKTtcblx0fVxuXG5cdHByaXZhdGUgc3luY0xlZnRQYW5lbFNlbGVjdGlvblN0YXRlKHZhbHVlOiBhbnksIHNlbGVjdGVkSXRlbTogYW55KSB7XG5cdFx0Y29uc3QgcGFuZWwgPSB0aGlzLmxlZnRQYW5lbCgpO1xuXHRcdGlmICghcGFuZWwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLmdldFBybS5kYXRhKSB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChwYW5lbC5zdGF0ZUtleSkge1xuXHRcdFx0ZmllbGRVdGlscy5zZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBwYW5lbC5zdGF0ZUtleSwgdmFsdWUpO1xuXHRcdH1cblx0XHRpZiAocGFuZWwucGFuZWxTZWxlY3RlZERhdGFLZXkpIHtcblx0XHRcdGZpZWxkVXRpbHMuc2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwgcGFuZWwucGFuZWxTZWxlY3RlZERhdGFLZXksIHNlbGVjdGVkSXRlbSk7XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFN1YkdyaWRDb2x1bW5WaXNpYmlsaXR5KCk7XG5cdH1cblxuXHRwcml2YXRlIGluaXRpYWxpemVMZWZ0UGFuZWxUcmVlKGl0ZW1zOiBhbnlbXSkge1xuXHRcdGNvbnN0IGV4cGFuZGVkU3RhdGUgPSB0aGlzLnJlYWRUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0XHR0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5cyA9IGV4cGFuZGVkU3RhdGUgfHwge307XG5cdFx0dGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMgPSB0aGlzLmJ1aWxkVHJlZU5vZGVzKGl0ZW1zKTtcblx0XHR2b2lkIHRoaXMuYXBwbHlUcmVlRGVmYXVsdFNlbGVjdGlvbigpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSBidWlsZFRyZWVOb2RlcyhpdGVtczogYW55W10sIHBhcmVudEtleSA9ICdyb290Jyk6IFRyZWVOb2RlW10ge1xuXHRcdGNvbnN0IGNoaWxkcmVuRmllbGQgPSB0aGlzLmdldFRyZWVDaGlsZHJlbkZpZWxkKCk7XG5cdFx0Y29uc3QgaWNvbkZpZWxkID0gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uaWNvbkZpZWxkO1xuXHRcdGNvbnN0IGxlYWZGaWVsZCA9IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmxlYWZGaWVsZDtcblx0XHRjb25zdCBkaXNhYmxlZEZpZWxkID0gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uZGlzYWJsZWRGaWVsZDtcblx0XHRyZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5idWlsZFRyZWVOb2RlS2V5KGl0ZW0sIHBhcmVudEtleSwgaW5kZXgpO1xuXHRcdFx0Y29uc3QgY2hpbGRJdGVtcyA9IGZpZWxkVXRpbHMuZ2V0TW9kZWwoaXRlbSwgY2hpbGRyZW5GaWVsZCk7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoY2hpbGRJdGVtcykgPyB0aGlzLmJ1aWxkVHJlZU5vZGVzKGNoaWxkSXRlbXMsIGtleSkgOiBbXTtcblx0XHRcdGNvbnN0IGlzTGVhZiA9IGxlYWZGaWVsZCA/ICEhdGhpcy5nZXRUcmVlRmllbGRWYWx1ZShpdGVtLCBsZWFmRmllbGQpIDogY2hpbGRyZW4ubGVuZ3RoID09PSAwO1xuXHRcdFx0Y29uc3QgaXNQYXJlbnQgPSBjaGlsZHJlbi5sZW5ndGggPiAwO1xuXHRcdFx0Y29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuZ2V0VHJlZVBhcmVudFNlbGVjdGFibGUoKSB8fCAhaXNQYXJlbnQ7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRrZXksXG5cdFx0XHRcdGxhYmVsOiB0aGlzLnJlc29sdmVUcmVlTm9kZUxhYmVsKGl0ZW0pLFxuXHRcdFx0XHRkYXRhOiBpdGVtLFxuXHRcdFx0XHRjaGlsZHJlbjogY2hpbGRyZW4ubGVuZ3RoID4gMCA/IGNoaWxkcmVuIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRsZWFmOiBpc0xlYWYsXG5cdFx0XHRcdGV4cGFuZGVkOiB0aGlzLnNob3VsZEV4cGFuZFRyZWVOb2RlKGtleSwgaXNQYXJlbnQpLFxuXHRcdFx0XHRzZWxlY3RhYmxlLFxuXHRcdFx0XHRkaXNhYmxlZDogZGlzYWJsZWRGaWVsZCA/ICEhdGhpcy5nZXRUcmVlRmllbGRWYWx1ZShpdGVtLCBkaXNhYmxlZEZpZWxkKSA6IGZhbHNlLFxuXHRcdFx0XHRpY29uOiBpY29uRmllbGQgPyB0aGlzLmdldFRyZWVGaWVsZFZhbHVlKGl0ZW0sIGljb25GaWVsZCkgOiB1bmRlZmluZWQsXG5cdFx0XHR9IGFzIFRyZWVOb2RlO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBidWlsZFRyZWVOb2RlS2V5KGl0ZW06IGFueSwgcGFyZW50S2V5OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoaXRlbSk7XG5cdFx0cmV0dXJuIGAke3BhcmVudEtleX0tJHt2YWx1ZSA/PyBpbmRleH1gO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlVHJlZU5vZGVMYWJlbChpdGVtOiBhbnkpIHtcblx0XHRjb25zdCBsYWJlbCA9IGZpZWxkVXRpbHMuZ2V0TW9kZWwoaXRlbSwgdGhpcy5nZXRQYW5lbE9wdGlvbkxhYmVsKCkpO1xuXHRcdHJldHVybiBsYWJlbCA9PSBudWxsID8gJycgOiBTdHJpbmcobGFiZWwpO1xuXHR9XG5cblx0cHJpdmF0ZSBzaG91bGRFeHBhbmRUcmVlTm9kZShrZXk6IHN0cmluZywgaXNQYXJlbnQ6IGJvb2xlYW4pIHtcblx0XHRpZiAoIWlzUGFyZW50KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChPYmplY3Qua2V5cyh0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5cykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuICEhdGhpcy5sZWZ0UGFuZWxFeHBhbmRlZEtleXNba2V5XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmRlZmF1bHRFeHBhbmQgPz8gZmFsc2U7XG5cdH1cblxuXHRwcml2YXRlIHJlYWRUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKSB7XG5cdFx0Y29uc3Qgc3RhdGVLZXkgPSB0aGlzLmdldFRyZWVFeHBhbmRlZEtleXNTdGF0ZUtleSgpO1xuXHRcdGlmICghc3RhdGVLZXkpIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpZWxkVXRpbHMuZ2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwgc3RhdGVLZXkpIHx8IHt9O1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jVHJlZUV4cGFuZGVkS2V5c1N0YXRlKCkge1xuXHRcdGNvbnN0IHN0YXRlS2V5ID0gdGhpcy5nZXRUcmVlRXhwYW5kZWRLZXlzU3RhdGVLZXkoKTtcblx0XHRpZiAoIXN0YXRlS2V5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghdGhpcy5nZXRQcm0uZGF0YSkge1xuXHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHt9O1xuXHRcdH1cblx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIHN0YXRlS2V5LCB7IC4uLnRoaXMubGVmdFBhbmVsRXhwYW5kZWRLZXlzIH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBhcHBseVRyZWVEZWZhdWx0U2VsZWN0aW9uKCkge1xuXHRcdGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmdldFBhbmVsRGF0YVNvdXJjZSgpO1xuXHRcdGxldCBkZWZhdWx0VmFsdWUgPSBhd2FpdCB0aGlzLnJlc29sdmVNYXliZUFzeW5jKFxuXHRcdFx0dHlwZW9mIGRhdGFTb3VyY2U/LmRlZmF1bHRTZWxlY3QgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0PyBkYXRhU291cmNlLmRlZmF1bHRTZWxlY3QodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoeyBpdGVtczogdGhpcy5sZWZ0UGFuZWxJdGVtcyB9KSlcblx0XHRcdFx0OiBkYXRhU291cmNlPy5kZWZhdWx0U2VsZWN0LFxuXHRcdCk7XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAmJiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnb2JqZWN0JyAmJiAhKCdrZXknIGluIGRlZmF1bHRWYWx1ZSkpIHtcblx0XHRcdGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoZGVmYXVsdFZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGRlZmF1bHRWYWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gdGhpcy5maW5kRmlyc3RTZWxlY3RhYmxlVHJlZU5vZGUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMpPy5rZXkgPz8gbnVsbDtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHJlc29sdmVkTm9kZSA9IHRoaXMucmVzb2x2ZVRyZWVOb2RlQnlTZWxlY3Rpb24oZGVmYXVsdFZhbHVlKTtcblx0XHRjb25zdCBuZXh0Tm9kZSA9IHRoaXMuaXNTZWxlY3RhYmxlVHJlZU5vZGUocmVzb2x2ZWROb2RlKVxuXHRcdFx0PyByZXNvbHZlZE5vZGVcblx0XHRcdDogdGhpcy5maW5kRmlyc3RTZWxlY3RhYmxlVHJlZU5vZGUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMpO1xuXHRcdGlmIChuZXh0Tm9kZSkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFRyZWVTZWxlY3Rpb24obmV4dE5vZGUpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZmluZEZpcnN0U2VsZWN0YWJsZVRyZWVOb2RlKG5vZGVzOiBUcmVlTm9kZVtdKTogVHJlZU5vZGUgfCBudWxsIHtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRcdGlmICh0aGlzLmlzU2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUpKSB7XG5cdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBtYXRjaCA9IHRoaXMuZmluZEZpcnN0U2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUuY2hpbGRyZW4pO1xuXHRcdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVUcmVlTm9kZUJ5U2VsZWN0aW9uKHNlbGVjdGlvbjogYW55KTogVHJlZU5vZGUgfCBudWxsIHtcblx0XHRpZiAoc2VsZWN0aW9uICYmIHR5cGVvZiBzZWxlY3Rpb24gPT09ICdvYmplY3QnICYmICdrZXknIGluIHNlbGVjdGlvbikge1xuXHRcdFx0cmV0dXJuIHRoaXMuZmluZFRyZWVOb2RlQnlLZXkodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMsIHNlbGVjdGlvbi5rZXkpID8/IG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmZpbmRUcmVlTm9kZUJ5VmFsdWUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMsIHNlbGVjdGlvbik7XG5cdH1cblxuXHRwcml2YXRlIGZpbmRUcmVlTm9kZUJ5VmFsdWUobm9kZXM6IFRyZWVOb2RlW10sIHZhbHVlOiBhbnkpOiBUcmVlTm9kZSB8IG51bGwge1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0Y29uc3Qgbm9kZVZhbHVlID0gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShub2RlLmRhdGEpO1xuXHRcdFx0aWYgKG5vZGVWYWx1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5maW5kVHJlZU5vZGVCeVZhbHVlKG5vZGUuY2hpbGRyZW4sIHZhbHVlKTtcblx0XHRcdFx0aWYgKG1hdGNoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBmaW5kVHJlZU5vZGVCeUtleShub2RlczogVHJlZU5vZGVbXSwga2V5OiBzdHJpbmcpOiBUcmVlTm9kZSB8IG51bGwge1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0aWYgKG5vZGUua2V5ID09PSBrZXkpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5maW5kVHJlZU5vZGVCeUtleShub2RlLmNoaWxkcmVuLCBrZXkpO1xuXHRcdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGlzVHJlZVBhcmVudE5vZGUobm9kZTogVHJlZU5vZGUgfCBudWxsKSB7XG5cdFx0cmV0dXJuICEhbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aDtcblx0fVxuXG5cdHByaXZhdGUgaXNTZWxlY3RhYmxlVHJlZU5vZGUobm9kZTogVHJlZU5vZGUgfCBudWxsKSB7XG5cdFx0aWYgKCFub2RlIHx8IChub2RlIGFzIGFueSkuZGlzYWJsZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuZ2V0VHJlZVBhcmVudFNlbGVjdGFibGUoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAhdGhpcy5pc1RyZWVQYXJlbnROb2RlKG5vZGUpO1xuXHR9XG5cblx0YXN5bmMgb25MZWZ0UGFuZWxUcmVlTm9kZVNlbGVjdChldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qgbm9kZSA9IGV2ZW50Py5ub2RlID8/IG51bGw7XG5cdFx0aWYgKCF0aGlzLmlzU2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUpKSB7XG5cdFx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkTm9kZSA9IHRoaXMucmVzb2x2ZVRyZWVOb2RlQnlTZWxlY3Rpb24odGhpcy5sZWZ0UGFuZWxTZWxlY3RlZFZhbHVlKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAobm9kZSkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFRyZWVTZWxlY3Rpb24obm9kZSk7XG5cdFx0fVxuXHR9XG5cblx0b25MZWZ0UGFuZWxUcmVlTm9kZUV4cGFuZChldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQ/Lm5vZGU/LmtleTtcblx0XHRpZiAoIWtleSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5c1trZXldID0gdHJ1ZTtcblx0XHR0aGlzLnN5bmNUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0fVxuXG5cdG9uTGVmdFBhbmVsVHJlZU5vZGVDb2xsYXBzZShldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQ/Lm5vZGU/LmtleTtcblx0XHRpZiAoIWtleSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5sZWZ0UGFuZWxFeHBhbmRlZEtleXNba2V5XTtcblx0XHR0aGlzLnN5bmNUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYXBwbHlMZWZ0UGFuZWxUcmVlU2VsZWN0aW9uKG5vZGU6IFRyZWVOb2RlKSB7XG5cdFx0Y29uc3QgcGFuZWwgPSB0aGlzLmxlZnRQYW5lbCgpO1xuXHRcdGlmICghcGFuZWw/LmVuYWJsZWQgfHwgdGhpcy5nZXRMZWZ0UGFuZWxNb2RlKCkgIT09ICd0cmVlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCByYXdOb2RlID0gbm9kZS5kYXRhO1xuXHRcdGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKHJhd05vZGUpO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWROb2RlID0gbm9kZTtcblx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRJdGVtID0gcmF3Tm9kZTtcblx0XHR0aGlzLnN5bmNMZWZ0UGFuZWxTZWxlY3Rpb25TdGF0ZShzZWxlY3RlZFZhbHVlLCByYXdOb2RlKTtcblx0XHR0aGlzLmluZGV4VmFsdWUgPSAwO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uU2VsZWN0aW9uQ2hhbmdlJywge1xuXHRcdFx0c2VsZWN0ZWRJdGVtOiByYXdOb2RlLFxuXHRcdFx0c2VsZWN0ZWRWYWx1ZSxcblx0XHRcdG5vZGUsXG5cdFx0XHRyYXdOb2RlLFxuXHRcdFx0aXNQYXJlbnQ6IHRoaXMuaXNUcmVlUGFyZW50Tm9kZShub2RlKSxcblx0XHRcdGlzTGVhZjogIXRoaXMuaXNUcmVlUGFyZW50Tm9kZShub2RlKSxcblx0XHR9KTtcblx0XHR0aGlzLnN5bmNHZXRQcm1GaXRlclByZWxvYWRzKCk7XG5cdFx0dGhpcy5mb3JtT3B0aW9ucyA9IHRoaXMuYnVpbGRGb3JtT3B0aW9ucygpO1xuXHRcdGlmICh0aGlzLmlkICYmIHRoaXMubW9kZWxOYW1lKSB7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoMik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRGb3JtT3B0aW9ucygpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc291cmNlRm9ybSA9IHRoaXMuZm9ybSgpO1xuXHRcdFx0Y29uc3QgZm9ybUZpZWxkcyA9IHNvdXJjZUZvcm0/LmZpZWxkcyA/IFsuLi5zb3VyY2VGb3JtLmZpZWxkc10gOiBbXTtcblx0XHRcdGNvbnN0IGZpcnN0RmllbGQgPSBmb3JtRmllbGRzWzBdXG5cdFx0XHRcdD8geyAuLi5mb3JtRmllbGRzWzBdLCBncm91cDogQXJyYXkuaXNBcnJheShmb3JtRmllbGRzWzBdLmdyb3VwKSA/IFsuLi5mb3JtRmllbGRzWzBdLmdyb3VwXSA6IFtdIH1cblx0XHRcdFx0OiB7IGdyb3VwQ2xhc3M6ICdmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCcsIGdyb3VwOiBbXSB9O1xuXHRcdFx0Zm9ybUZpZWxkc1swXSA9IGZpcnN0RmllbGQgYXMgYW55O1xuXHRcdFx0Y29uc3QgZm9ybU9wdGlvbnMgPSB7XG5cdFx0XHRcdC4uLnNvdXJjZUZvcm0sXG5cdFx0XHRcdGZpZWxkczogZm9ybUZpZWxkcyxcblx0XHRcdH07XG5cdFx0XHRjb25zdCBhcHBlbmRHcm91cHMgPSB0aGlzLnJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKTtcblx0XHRcdGNvbnN0IG1haW5Hcm91cCA9IGZvcm1PcHRpb25zPy5maWVsZHM/LlswXT8uZ3JvdXA7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShtYWluR3JvdXApICYmIGFwcGVuZEdyb3Vwcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvcm1PcHRpb25zLmZpZWxkc1swXS5ncm91cCA9IFsuLi5tYWluR3JvdXAsIC4uLmFwcGVuZEdyb3Vwc107XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm9ybU9wdGlvbnM7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2J1aWxkRm9ybU9wdGlvbnMg5omn6KGM5aSx6LSl77yM5Zue6YCA5Yiw5Y6f5aeL6KGo5Y2V6YWN572uOicsIGVycm9yKTtcblx0XHRcdHJldHVybiB0aGlzLmZvcm0oKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKSB7XG5cdFx0Y29uc3QgYXBwZW5kR3JvdXBzID0gdGhpcy5sZWZ0UGFuZWwoKT8uYXBwZW5kR3JvdXBzO1xuXHRcdGlmICghYXBwZW5kR3JvdXBzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwYXJzZWQgPSB0eXBlb2YgYXBwZW5kR3JvdXBzID09PSAnZnVuY3Rpb24nID8gYXBwZW5kR3JvdXBzKHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KCkpIDogYXBwZW5kR3JvdXBzO1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKVxuXHRcdFx0XHQ/IGRlZXBDbG9uZShwYXJzZWQsIHRoaXMpLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuXHRcdFx0XHRcdFx0Li4uaXRlbSxcblx0XHRcdFx0XHRcdGV4dHJhOiB7XG5cdFx0XHRcdFx0XHRcdC4uLihpdGVtPy5leHRyYSB8fCB7fSksXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXlPbmx5OiB0cnVlLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0OiBbXTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignbGVmdFBhbmVsLmFwcGVuZEdyb3VwcyDmiafooYzlpLHotKU6JywgZXJyb3IpO1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgbWVyZ2VEZXRhaWxXaXRoTGVmdFBhbmVsKGRldGFpbDogYW55KSB7XG5cdFx0Y29uc3QgbWVyZ2VkRGV0YWlsID0ge1xuXHRcdFx0Li4uZGV0YWlsLFxuXHRcdFx0Li4uKHRoaXMucGFuZWxTZWxlY3RlZERhdGEoKSB8fCB7fSksXG5cdFx0XHQuLi4odGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gfHwge30pLFxuXHRcdH07XG5cdFx0Y29uc3QgbWVyZ2VkUmVzdWx0ID0gdGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25EZXRhaWxNZXJnZScsIHsgZGV0YWlsLCBtZXJnZWREZXRhaWwgfSk7XG5cdFx0cmV0dXJuIG1lcmdlZFJlc3VsdCA9PT0gdW5kZWZpbmVkID8gbWVyZ2VkRGV0YWlsIDogbWVyZ2VkUmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBiaW5kUGFnZUZvcm1TZXJ2aWNlKCkge1xuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGEkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdHRoaXMucmVmcmVzaFN1YkdyaWRDb2x1bW5WaXNpYmlsaXR5KCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS51cGRhdGVEYXRhQnlLZXkkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHsga2V5LCB2YWx1ZSB9KSA9PiB7XG5cdFx0XHR0aGlzLm1lcmdlVXBzZXJ0KHZhbHVlIGFzIFBheWxvYWRVcHNlcnQpO1xuXHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0dGhpcy5yZWZyZXNoU3ViR3JpZENvbHVtblZpc2liaWxpdHkoKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKSB7XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgoZ3JpZCkgPT4ge1xuXHRcdFx0aWYgKGdyaWQudHlwZSA9PSAnZm9ybScpIHtcblx0XHRcdFx0Y29uc3QgZm9ybURhdGEgPSB0aGlzLmdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5XTtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZm9ybURhdGEpKSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5XSA9IGZvcm1EYXRhWzBdID8/IHt9O1xuXHRcdFx0XHR9IGVsc2UgaWYgKGZvcm1EYXRhICYmIHR5cGVvZiBmb3JtRGF0YSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0aGlzLnN1YkZvcm1Nb2RlbFtncmlkLnN1YkRhdGFLZXldID0gZm9ybURhdGE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChncmlkLnR5cGUgPT0gJ2dyaWQnICYmICF0aGlzLmdldFBybS5kYXRhPy5oYXNPd25Qcm9wZXJ0eShncmlkLnN1YkRhdGFLZXkpKSB7XG5cdFx0XHRcdHRoaXMuZ2V0UHJtLmRhdGFbZ3JpZC5zdWJEYXRhS2V5XSA9IFtdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8vIOaPkuanvee7hOS7tiDmm7TmlrB1cHNlcnRcblx0cHJpdmF0ZSBtZXJnZVVwc2VydChwYXlsb2FkOiBQYXlsb2FkVXBzZXJ0KSB7XG5cdFx0Y29uc3QgeyBhY3Rpb24sIGZpZWxkLCBoZWFkZXJOYW1lLCBuZXdWYWx1ZSwgb2xkVmFsdWUsIHJlY29yZEluZGV4LCBpbmRleCwgZGF0YSwgc2VsZWN0TmFtZSB9ID0gcGF5bG9hZDtcblx0XHRsZXQgc3ViID0gdGhpcy51cHNlcnRQcm0uc3Vic2VydCFbaW5kZXhdO1xuXHRcdGlmIChhY3Rpb24gPT0gJ2FkZCcpIHtcblx0XHRcdGxldCBtYWluRmllbGQgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVtpbmRleF1bJ2dyaWRPcHRpb25zJ11bJ21haW5GaWVsZCddO1xuXHRcdFx0c3ViWydtYXB0bXAnXT8uc2V0KHJlY29yZEluZGV4LCB7IC4uLmRhdGEgfSk7XG5cdFx0XHRpZiAoZmllbGQgPT0gbWFpbkZpZWxkKSB7XG5cdFx0XHRcdHN1YlsnbG9ndG1wJ10/LnNldChyZWNvcmRJbmRleCEgKyBmaWVsZCEsIHsgbmV3VmFsdWU6IG5ld1ZhbHVlLCBpZDogMCwgbGFiZWw6IGhlYWRlck5hbWUgfSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChhY3Rpb24gPT09ICdlZGl0Jykge1xuXHRcdFx0bGV0IG86IGFueTtcblx0XHRcdGlmIChzdWJbJ21hcHRtcCddPy5oYXMocmVjb3JkSW5kZXghKSkge1xuXHRcdFx0XHRvID0gc3ViWydtYXB0bXAnXT8uZ2V0KHJlY29yZEluZGV4ISk7XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24obywgeyBbZmllbGRdOiBuZXdWYWx1ZSB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG8gPSB7IGlkOiBkYXRhWydpZCddLCBbZmllbGRdOiBuZXdWYWx1ZSB9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNlbGVjdE5hbWUpIHtcblx0XHRcdFx0b1tzZWxlY3ROYW1lXSA9IGRhdGFbc2VsZWN0TmFtZV07XG5cdFx0XHR9XG5cdFx0XHRzdWJbJ21hcHRtcCddPy5zZXQocmVjb3JkSW5kZXghLCBvKTtcblx0XHRcdHN1YlsnbG9ndG1wJ10/LnNldChyZWNvcmRJbmRleCEgKyBmaWVsZCEsIHtcblx0XHRcdFx0bmV3VmFsdWU6IG5ld1ZhbHVlLFxuXHRcdFx0XHRvbGRWYWx1ZTogb2xkVmFsdWUsXG5cdFx0XHRcdGlkOiBkYXRhWydpZCddLFxuXHRcdFx0XHRsYWJlbDogaGVhZGVyTmFtZSxcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSAnZGVsZXRlJykge1xuXHRcdFx0aWYgKHN1YlsnbWFwdG1wJ10/LmhhcyhyZWNvcmRJbmRleCEpKSB7XG5cdFx0XHRcdGxldCBkYXRhID0gc3ViWydtYXB0bXAnXT8uZ2V0KHJlY29yZEluZGV4ISk7XG5cdFx0XHRcdGRhdGFbZmllbGRdICYmIGRlbGV0ZSBkYXRhW2ZpZWxkXTtcblx0XHRcdFx0bGV0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdFx0XHRcdGtleXMubGVuZ3RoID09IDAgJiYgc3ViWydtYXB0bXAnXT8uZGVsZXRlKHJlY29yZEluZGV4KTtcblx0XHRcdH1cblx0XHRcdGlmIChzdWJbJ2xvZ3RtcCddPy5nZXQocmVjb3JkSW5kZXghICsgZmllbGQhKSkge1xuXHRcdFx0XHRzdWJbJ2xvZ3RtcCddPy5kZWxldGUocmVjb3JkSW5kZXghICsgZmllbGQhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bGV0IGR0OiBhbnlbXSA9IFtdO1xuXHRcdHN1YlsnbWFwdG1wJ10/LmZvckVhY2goKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiB7XG5cdFx0XHRkdC5wdXNoKHZhbHVlKTtcblx0XHR9KTtcblx0XHRzdWJbJ3N1YkRhdGEnXSA9IGR0O1xuXHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KHRydWUpO1xuXHRcdHRoaXMucmVmcmVzaFN1YkdyaWRDb2x1bW5WaXNpYmlsaXR5KCk7XG5cdH1cblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuaTE4bi5jaGFuZ2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuc3RlcHNWaXNpYmxlID0gZmFsc2U7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnN0ZXBzVmlzaWJsZSA9IHRydWU7XG5cdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0fSwgMTAwKTtcblx0XHR9KTtcblx0fVxuXG5cdHN1Ym1pdEZvcm0oKTogYW55IHtcblx0XHRsZXQgc3ViRm9ybSA9IHRydWU7XG5cdFx0aWYgKHRoaXMudGFiRm9ybS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnRhYkZvcm0uZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAoIWl0ZW0udmFsaWRhdGUoKSkge1xuXHRcdFx0XHRcdHN1YkZvcm0gPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmNGb3JtLnZhbGlkYXRlKCkgJiYgc3ViRm9ybSkge1xuXHRcdFx0bGV0IGNiOiBhbnkgPSB0aGlzLmlkID09PSAwID8gbnVsbCA6IHRoaXMudXBDYjtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KHRydWUpO1xuXHRcdFx0dHlwZW9mIHRoaXMuc2F2ZUZ1bmMoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5zYXZlRnVuYygpKHRoaXMudXBzZXJ0UHJtLCB0aGlzLmlkLCBjYikgOiB0aGlzLnVwc2VydChudWxsLCBjYik7XG5cdFx0fVxuXHR9XG5cblx0ZGVsUm93cyhlOiBhbnkpIHtcblx0XHRjb25zdCBncmlkVGFiID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXTtcblx0XHRjb25zdCBkZWxldGVGdW5jID0gZ3JpZFRhYi5kZWxldGVGdW5jO1xuXHRcdGNvbnNvbGUubG9nKCdkZWxSb3dzLS0tLScsIGUsIGdyaWRUYWIpO1xuXHRcdGNvbnN0IHN1YlRhYmxlID0gZ3JpZFRhYi5ncmlkT3B0aW9ucy5tb2RlbE5hbWU7XG5cdFx0Y29uc3QgaWRzID0gQXJyYXkuaXNBcnJheShlKSA/IGUgOiBbZV07XG5cblx0XHRsZXQgcHJtID0ge1xuXHRcdFx0bW9kZWxOYW1lOiBzdWJUYWJsZSxcblx0XHRcdGlkcyxcblx0XHR9O1xuXHRcdGxldCBkb25lQ2FsbGVkID0gZmFsc2U7XG5cdFx0Y29uc3QgZG9uZSA9ICgpID0+IHtcblx0XHRcdGlmIChkb25lQ2FsbGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGRvbmVDYWxsZWQgPSB0cnVlO1xuXHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKDQpO1xuXHRcdFx0dGhpcy5hY3Rpb24udXBkYXRlR3JpZEFjdGlvbih7IHR5cGU6ICdkZWxldGUnLCBkYXRhOiBpZHMgfSk7XG5cdFx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldChmYWxzZSk7XG5cdFx0fTtcblx0XHRpZiAoIWRlbGV0ZUZ1bmMpIHtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KHRydWUpO1xuXHRcdFx0dGhpcy53ZWJfcmVtb3ZlKHBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0ZG9uZSgpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KHRydWUpO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gZGVsZXRlRnVuYyhpZHMsIGdyaWRUYWIsIGRvbmUpO1xuXHRcdFx0aWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XG5cdFx0XHRcdHJlc3VsdC5zdWJzY3JpYmUoKCkgPT4gZG9uZSgpKTtcblx0XHRcdH0gZWxzZSBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHJlc3VsdC5zdWJzY3JpYmUoKCkgPT4gZG9uZSgpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0dXBDYihyZXM/OiBhbnkpIHtcblx0XHRpZiAocmVzLmlkID09IDApIHtcblx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCg1KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGxldCBlZGl0VXJsID0gYCR7dGhpcy5wYWdlVXJsfSR7cmVzLmlkfWA7XG5cdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtlZGl0VXJsXSk7XG5cdFx0XHR9LCAxNTAwKTtcblx0XHR9XG5cdFx0dGhpcy5hY3Rpb24uc2F2ZVNpZ25hbC5zZXQoZmFsc2UpO1xuXHRcdHRoaXMuY0Zvcm0uZmluYWxpemUoKTtcblx0fVxuXHQvLyBUT0RPIOaYr+WQpumcgOimgeaVsOaNrui9rOaNouWbnuiwg+WHveaVsFxuXHRvbk9rKGU6IGFueSkge1xuXHRcdGNvbnN0IGdyaWQgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV0uc2VsZWN0RGF0YSA9IFtdO1xuXG5cdFx0aWYgKGUubGVuZ3RoID4gMCkge1xuXHRcdFx0bGV0IHVuaXF1ZUtleXMgPSBbXTtcblx0XHRcdGlmIChncmlkLnVuaXF1ZUZpZWxkKSB7XG5cdFx0XHRcdGNvbnN0IHJvd0RhdGEgPSB0aGlzLmN1c3RvbUdyaWRcblx0XHRcdFx0XHQuZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhXG5cdFx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHRcdC5hcGkuZ2V0UmVuZGVyZWROb2RlcygpXG5cdFx0XHRcdFx0Lm1hcCgobm9kZSkgPT4gbm9kZS5kYXRhKTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ3Jvd0RhdGEtLS0tLScscm93RGF0YSlcblx0XHRcdFx0dW5pcXVlS2V5cyA9IHJvd0RhdGEubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bZ3JpZC51bmlxdWVGaWVsZCFdKTtcblx0XHRcdH1cblx0XHRcdC8vIGNvbnNvbGUubG9nKCd1bmlxdWVLZXlzLS0tLS0nLHVuaXF1ZUtleXMsKVxuXHRcdFx0ZS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0bGV0IG9iaiA9IGdyaWQuc2VsZWN0RGF0YUNiID8gZ3JpZC5zZWxlY3REYXRhQ2IoaXRlbSkgOiB7IC4uLml0ZW0gfTtcblx0XHRcdFx0aWYgKGdyaWQudW5pcXVlRmllbGQgJiYgdW5pcXVlS2V5cy5pbmNsdWRlcyhvYmpbZ3JpZC51bmlxdWVGaWVsZCFdIHx8ICcnKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRncmlkLnNlbGVjdERhdGEhLnB1c2gob2JqKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5hY3Rpb24uc2F2ZVNpZ25hbC5zZXQodHJ1ZSk7XG5cdFx0fVxuXHRcdHRoaXMuYWN0aW9uLnVwZGF0ZUdyaWRBY3Rpb24oeyB0eXBlOiAnYWRkJywgZGF0YTogZ3JpZC5zZWxlY3REYXRhIH0pO1xuXHRcdGlmICghIWdyaWQuc2xvdEtleSkge1xuXHRcdFx0Y29uc3QgeyBzdWJEYXRhS2V5IH0gPSBncmlkO1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UuYWRkRGF0YShzdWJEYXRhS2V5LCBncmlkLnNlbGVjdERhdGEpO1xuXHRcdFx0Ly8gdGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdH1cblx0fVxuXG5cdG9uQ2FuY2VsU2VsZWN0ZWQoZTogYW55KSB7XG5cdFx0Y29uc3QgZ3JpZCA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0bGV0IGRhdGFzOiBhbnkgPSBbXTtcblx0XHRlLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0Y29uc3QgZGF0YSA9IGdyaWQuc2VsZWN0RGF0YUNiID8geyAuLi5ncmlkLnNlbGVjdERhdGFDYihpdGVtKSB9IDogaXRlbTtcblx0XHRcdGRhdGFzLnB1c2goZGF0YSk7XG5cdFx0fSk7XG5cdFx0aWYgKGdyaWQudW5pcXVlRmllbGQpIHtcblx0XHRcdGNvbnN0IGtleXMgPSBkYXRhcy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtncmlkLnVuaXF1ZUZpZWxkXSk7XG5cdFx0XHRjb25zdCByb3dEYXRhID0gdGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmdldFJlbmRlcmVkTm9kZXMoKVxuXHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0bGV0IGRlbGV0ZWRSb3dzID0gcm93RGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4ga2V5cy5pbmNsdWRlcyhpdGVtW2dyaWQudW5pcXVlRmllbGRdKSk7XG5cdFx0XHR0aGlzLnN1YkRlbGV0ZUlkcyA9IGRlbGV0ZWRSb3dzLm1hcCgodjogYW55KSA9PiB2LmlkKS5maWx0ZXIoKHY6IGFueSkgPT4gdik7XG5cdFx0XHRjb25zdCBpZE5vdFJvd3MgPSBkZWxldGVkUm93cy5maWx0ZXIoKHY6IGFueSkgPT4gIXYuaWQpO1xuXHRcdFx0Ly8gY29uc29sZS5sb2coJ2lkTm90Um93cy0tLS0nLGlkTm90Um93cylcblx0XHRcdGNvbnN0IGRlbGV0ZU5vZGVzOiBhbnkgPSBbXTtcblx0XHRcdHRoaXMuY3VzdG9tR3JpZFxuXHRcdFx0XHQuZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhXG5cdFx0XHRcdC5nZXRHcmlkKClcblx0XHRcdFx0LmFwaS5mb3JFYWNoTm9kZSgobm9kZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0bGV0IG1haW4gPSBub2RlLmRhdGFbZ3JpZC51bmlxdWVGaWVsZF07XG5cdFx0XHRcdFx0bGV0IGlzRXhpdCA9IGlkTm90Um93cy5maW5kSW5kZXgoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBtYWluKTtcblx0XHRcdFx0XHRpZiAoaXNFeGl0ID4gLTEpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZU5vZGVzLnB1c2gobm9kZS5kYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0Ly8gaWYoZGVsZXRlZElkcy5sZW5ndGggPiAwKXtcblx0XHRcdC8vIFx0dGhpcy5kZWxSb3dzKGRlbGV0ZWRJZHMpXG5cdFx0XHQvLyB9IGVsc2Uge1xuXHRcdFx0dGhpcy5jdXN0b21HcmlkLmdldCh0aGlzLmluZGV4VmFsdWUpIS5zZWxlY3RSb3dzRGVsZXRlZChkZWxldGVOb2Rlcyk7XG5cdFx0XHQvLyB9XG5cdFx0fVxuXHR9XG5cdGdldERldGFpbChpbmRleD86IG51bWJlcikge1xuXHRcdGNvbnNvbGUubG9nKGBnZXREZXRhaWw6ICR7aW5kZXh9YCk7XG5cdFx0dGhpcy5zeW5jR2V0UHJtRm9yQ3VycmVudFZpZXcoKTtcblx0XHR0aGlzLndlYl9nZXQodGhpcy5nZXRQcm0pLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHR0aGlzLmRldGFpbENiKHRoaXMubWVyZ2VEZXRhaWxXaXRoTGVmdFBhbmVsKHJlcykpO1xuXHRcdH0pO1xuXHR9XG5cdC8vIOiOt+WPluivpuaDheWbnuiwg1xuXHRkZXRhaWxDYihyZXM6IGFueSkge1xuXHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSByZXM7XG5cdFx0dGhpcy51cGRhdGVUaXRsZShyZXMpO1xuXHRcdHRoaXMuc3luY1N1YkZvcm1Nb2RlbEZyb21EYXRhKCk7XG5cdFx0aWYgKHR5cGVvZiB0aGlzLmZvcm1EaXNhYmxlZCgpID09ICdmdW5jdGlvbicpIHtcblx0XHRcdHRoaXMuZm9ybURpc0Z1bmMoKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuaHJlZkJ0bkxpc3QoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNldEhyZWZWYWx1ZSgpO1xuXHRcdH1cblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0dGhpcy5yZWZyZXNoU3ViR3JpZENvbHVtblZpc2liaWxpdHkoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXHRzZXRIcmVmVmFsdWUoKSB7XG5cdFx0dGhpcy5ocmVmQnRuTGlzdCgpLm1hcCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgnc2VhcmNoQ291bnQnKSAmJiB0eXBlb2YgaXRlbS5zZWFyY2hDb3VudCA9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpdGVtLnNlYXJjaENvdW50LmNvbHVtbkZpbHRlcnMuZm9yRWFjaCgodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB2LmZpdGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR2LmZpdGVyID0gdi5maXRlcih0aGlzLmdldFBybS5kYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLndlYl9zZWFyY2hDb3VudChpdGVtLnNlYXJjaENvdW50KS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRcdGl0ZW0udmFsdWUgPSByZXMudG90YWxOdW0gfHwgMDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0dXBkYXRlVGl0bGUocmVzOiBhbnkpIHtcblx0XHRsZXQgbWFpbkZpZWxkID0gdGhpcy5mb3JtKCkubWFpbkZpZWxkO1xuXHRcdGxldCB0aXRsZSA9IHJlc1ttYWluRmllbGQhXTtcblx0XHR0aGlzLnVzZXJIaXN0b3J5U2VydmljZS5zZXRMYXN0VGl0bGUodGl0bGUpO1xuXHR9XG5cdGRhdGFTb3VyY2VTaG93KCkge1xuXHRcdGNvbnN0IGdyaWQgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdHRoaXMuY3VycmVudFNlbGVjdE1vZGVsQ29kZSA9IGdyaWQ/LnNlbGVjdE1vZGVsQ29kZSB8fCBudWxsO1xuXHRcdGNvbnNvbGUubG9nKGBkYXRhU291cmNlU2hvd2AsIHRoaXMuZ3JpZExpc3QoKSx0aGlzLnJlc29sdmVkR3JpZExpc3QoKSlcblx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHt9O1xuXHRcdHRoaXMuc2VsZWN0T3B0aW9ucyA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV1bJ3NlbGVjdE9wdGlvbnMnXSE7XG5cdFx0aWYgKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KT8uc2VhcmNoUHJtKSB7XG5cdFx0XHRsZXQgc2VhcmNoUHJtID0gZGVlcENsb25lKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KS5zZWFyY2hQcm0sIHRoaXMpO1xuXHRcdFx0c2VhcmNoUHJtLmNvbHVtbkZpbHRlcnM/LmZvckVhY2goKHY6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIHYuZml0ZXIgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHYuZml0ZXIgPSB2LmZpdGVyKG51bGwsIHRoaXMuZ2V0UHJtLmRhdGEgfHwgdGhpcy5jRm9ybS5tb2RlbCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHNlYXJjaFBybTtcblx0XHR9XG5cdFx0dGhpcy5kaWFsb2dTZWFyY2hQcm0ubW9kZWxOYW1lID0gdGhpcy5zZWxlY3RPcHRpb25zLm1vZGVsTmFtZTtcblx0XHRpZiAodGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGUpIHtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zdXBwcmVzc1Jvd0Rlc2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGU7XG5cdFx0XHRjb25zdCBpc1Jvd1NlbGVjdGFibGUgPSB0aGlzLnNlbGVjdE9wdGlvbnMuaXNSb3dTZWxlY3RhYmxlO1xuXHRcdFx0aWYgKHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlICE9ICdub25lJykge1xuXHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uID0ge1xuXHRcdFx0XHRcdG1vZGU6IHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID09ICdzaW5nbGUnID8gJ3NpbmdsZVJvdycgOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGlzUm93U2VsZWN0YWJsZTogaXNSb3dTZWxlY3RhYmxlID8gaXNSb3dTZWxlY3RhYmxlIDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gY29uc29sZS5sb2coJyF0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uLS0tLS0nLCF0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uKVxuXHRcdGlmIChncmlkLnVuaXF1ZUZpZWxkKSB7XG5cdFx0XHRjb25zdCByb3dEYXRhID0gdGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmdldFJlbmRlcmVkTm9kZXMoKVxuXHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0dGhpcy5zZWxlY3Rpb25LZXlzID0gcm93RGF0YT8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bZ3JpZC51bmlxdWVGaWVsZCFdKSB8fCBbXTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCd0aGlzLnNlbGVjdGlvbktleXMtLS0tJyx0aGlzLnNlbGVjdGlvbktleXMpXG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24gPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbi5jaGVja2JveGVzID0gKHBhcmFtcykgPT4ge1xuXHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5ICE9ICcnXG5cdFx0XHRcdFx0XHRcdD8gcm93RGF0YS5maW5kKCh2OiBhbnkpID0+IHZbZ3JpZC51bmlxdWVGaWVsZF0gPT0gcGFyYW1zLmRhdGFbdGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkhXSlcblx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5pZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24pIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHtcblx0XHRcdFx0XHRtb2RlOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGNoZWNrYm94ZXM6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkgIT0gJydcblx0XHRcdFx0XHRcdFx0XHQ/IHJvd0RhdGEuZmluZCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IHBhcmFtcy5kYXRhW3RoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5IV0pXG5cdFx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmlkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2VsZWN0aW9uS2V5cyA9IFtdO1xuXHRcdH1cblx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXHR9XG5cblx0Z29SdW4oZGF0YTogYW55KSB7XG5cdFx0aWYgKHR5cGVvZiBkYXRhLnVybCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGV0IHVybCA9IGRhdGEudXJsKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnd2FybicsIHN1bW1hcnk6ICdXYXJuJywgZGV0YWlsOiAn6K+36YWN572u6Lez6L2s6ZO+5o6lJyB9KTtcblx0XHR9XG5cdH1cblxuXHRhdXRoQ2xpY2soYnRuOiBhbnkpIHtcblx0XHRpZiAoYnRuLmhhc093blByb3BlcnR5KCdvbkNsaWNrJykpIHtcblx0XHRcdGJ0bi5vbkNsaWNrKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdH1cblx0fVxuXHRzdGF0dXNDaGFuZ2UodmFsdWU6IGFueSwgY3VzdG9tU3RlcHM6IFN0ZXBzQ29tcG9uZW50KSB7XG5cdFx0aWYgKHRoaXMuYXV0aExldmVsKCkgPCA0IHx8ICF0aGlzLnN0YXR1c0NvbmYoKS5pc0NsaWNrKSByZXR1cm47XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGxldCBwYXJhbTogYW55ID0ge1xuXHRcdFx0XHRtb2RlbE5hbWU6IHRoaXMubW9kZWxOYW1lLFxuXHRcdFx0XHRkYXRhOiB7IGlkOiB0aGlzLmlkLCBbdGhpcy5zdGF0dXNLZXkoKV06IHZhbHVlIH0sXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHRoaXMuaXNMb2cpIHtcblx0XHRcdFx0cGFyYW0ubG9nTW9kZWwgPSBgJHt0aGlzLm1vZGVsTmFtZX1Mb2dgO1xuXHRcdFx0XHRwYXJhbS5sb2cgPSB7XG5cdFx0XHRcdFx0cGlkOiB0aGlzLmlkLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGBb54q25oCBXSAke3RoaXMuZ2V0UHJtLmRhdGEhW3RoaXMuc3RhdHVzS2V5KCldfSAtPiAke3ZhbHVlfWAsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLndlYl93cml0ZShwYXJhbSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0dGhpcy5nZXREZXRhaWwoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhID0gT2JqZWN0LmFzc2lnbih0aGlzLmdldFBybS5kYXRhIHx8IHt9LCB7XG5cdFx0XHRcdFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUsXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMudXBzZXJ0UHJtLmFkZERhdGEhW3RoaXMuc3RhdHVzS2V5KCldID0gdmFsdWU7XG5cdFx0XHR0aGlzLmNGb3JtLnRyaWdnZXJNb2RlbEVmZmVjdCh7IFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUgfSk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTdWJHcmlkQ29sdW1uVmlzaWJpbGl0eSgpO1xuXHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHQvLyBjdXN0b21TdGVwcy5yZWZyZXNoU3RlcHMoKVxuXHRcdH1cblx0fVxuXG5cdGZvcm1EaXNGdW5jKCkge1xuXHRcdGxldCBkYXRhID0gdGhpcy5mb3JtRGlzYWJsZWQoKSEodGhpcy5nZXRQcm0uZGF0YSk7XG5cdFx0aWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcblx0XHRcdHRoaXMuc2F2ZUJ0bkRpc2FibGUgPSBkYXRhO1xuXHRcdFx0dGhpcy5ncmlkRGlzYWJsZSA9IGRhdGE7XG5cdFx0XHR0aGlzLmRpc2FibGVGb3JtKGRhdGEpO1xuXHRcdFx0dGhpcy5kaXNhYmxlZENoaWxkKGRhdGEpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRjb25zdCBkaXNhYmVsZCA9IGRhdGEuZGlzYWJsZWQ7XG5cdFx0XHRjb25zdCBmaWx0ZXJzID0gZGF0YS5maWx0ZXJzIHx8IFtdO1xuXHRcdFx0aWYgKCFmaWx0ZXJzLmluY2x1ZGVzKCdmb3JtJykpIHtcblx0XHRcdFx0dGhpcy5kaXNhYmxlRm9ybShkaXNhYmVsZCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWZpbHRlcnMuaW5jbHVkZXMoJ2dyaWQnKSkge1xuXHRcdFx0XHR0aGlzLmdyaWREaXNhYmxlID0gZGlzYWJlbGQ7XG5cdFx0XHRcdHRoaXMuZGlzYWJsZWRDaGlsZChkaXNhYmVsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGRpc2FibGVGb3JtKGRpc2FibGU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmZvcm1PcHRpb25zLmZpZWxkcz8uZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0di5ncm91cD8uZm9yRWFjaCgoZzogYW55KSA9PiB7XG5cdFx0XHRcdGxldCBmaWVsZERpc2FibGVkID0gZ1tmb3JtVHlwZVRvUHJvcHNbZy50eXBlXV0uZGlzYWJsZWQgfHwgZmFsc2U7XG5cdFx0XHRcdGlmIChkaXNhYmxlKSB7XG5cdFx0XHRcdFx0dGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEubWFya0FzUHJpc3RpbmUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCFmaWVsZERpc2FibGVkICYmIHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdGRpc2FibGVkQ2hpbGQoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mb3JFYWNoKCh2LCBpbmRleDogYW55KSA9PiB7XG5cdFx0XHRpZih2Lmhhc093blByb3BlcnR5KCdncmlkQ3VzdG9tRGlzYWJsZWQnKSAmJiB0eXBlb2Ygdi5ncmlkQ3VzdG9tRGlzYWJsZWQgPT09ICdmdW5jdGlvbicpe1xuXHRcdFx0XHRcdHYuZ3JpZERpc2FibGVkID0gdi5ncmlkQ3VzdG9tRGlzYWJsZWQodGhpcy5nZXRQcm0uZGF0YSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0di5ncmlkRGlzYWJsZWQgPSBkaXNhYmxlZDtcblx0XHRcdFx0fVxuXHRcdFx0aWYgKHYudHlwZSA9PSAnZ3JpZCcpIHtcblx0XHRcdFx0di5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2LmdyaWREaXNhYmxlZCAmJiBpdGVtLmhhc093blByb3BlcnR5KCdlZGl0YWJsZScpKSB7XG5cdFx0XHRcdFx0XHRpdGVtLmVkaXRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIOWQjOS4gOS4qumhtemdomRpc2FibGVkIGZhbHNlICA9PiB0cnVlXG5cdFx0XHRcdFx0aWYgKCF2LmdyaWREaXNhYmxlZCAmJiBpdGVtLmhhc093blByb3BlcnR5KCdlZGl0YWJsZScpICYmICFpdGVtLmVkaXRhYmxlICYmIHR5cGVvZiBpdGVtLmVkaXRhYmxlID09PSAnYm9vbGVhbicpIHtcblx0XHRcdFx0XHRcdGl0ZW0uZWRpdGFibGUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHR5cGVvZiB0aGlzLmN1c3RvbUdyaWQ/LmdldChpbmRleCkhLmdldEdyaWQgPT0nZnVuY3Rpb24nICYmIHRoaXMuY3VzdG9tR3JpZD8uZ2V0KGluZGV4KSEuZ2V0R3JpZCgpLmFwaS5zZXRHcmlkT3B0aW9uKCdjb2x1bW5EZWZzJywgdi5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzKTtcblx0XHRcdH0gZWxzZSBpZiAodi50eXBlID09ICdmb3JtJykge1xuXHRcdFx0XHR2LmZpZWxkcz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0aXRlbS5ncm91cD8uZm9yRWFjaCgoZzogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRsZXQgZmllbGREaXNhYmxlZCA9IGdbZm9ybVR5cGVUb1Byb3BzW2cudHlwZV1dLmRpc2FibGVkIHx8IGZhbHNlO1xuXHRcdFx0XHRcdFx0aWYgKHYuZ3JpZERpc2FibGVkKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMudGFiRm9ybS5nZXQoaW5kZXgpIS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEubWFya0FzUHJpc3RpbmUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnRhYkZvcm0uZ2V0KGluZGV4KSEuZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0IWZpZWxkRGlzYWJsZWQgJiYgdGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0c2V0RGlzYWJsZWQoKSB7XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgodiwgaW5kZXg6IGFueSkgPT4ge1xuXHRcdFx0aWYgKHYudHlwZSA9PSAnZm9ybScpIHtcblx0XHRcdFx0di5maWVsZHM/LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRcdGl0ZW0uZ3JvdXA/LmZvckVhY2goKGc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy50YWJGb3JtLmdldChpbmRleCkhLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0dGFiQ2xpY2soKSB7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLnRhYkZvcm0uZ2V0KHRoaXMuaW5kZXhWYWx1ZSkgJiYgdGhpcy50YWJGb3JtLmdldCh0aGlzLmluZGV4VmFsdWUpIS5yZUNhbGNMYWJlbFNpemUoKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0sIDApO1xuXHR9XG5cdHRvZ2dsZUxvZygpIHtcblx0XHR0aGlzLnNpZGViYXJNb2RlLnNldCh0aGlzLnNpZGViYXJNb2RlKCkgPT09ICdsZWZ0JyA/ICdyaWdodCcgOiAnbGVmdCcpO1xuXHR9XG5cblx0cHJpdmF0ZSByZWJ1aWxkU2xvdE1hcCgpIHtcblx0XHR0aGlzLnNsb3RNYXAuY2xlYXIoKTtcblx0XHRmb3IgKGNvbnN0IHNsb3Qgb2YgdGhpcy5wYWdlRm9ybVNsb3RzPy50b0FycmF5KCkgPz8gW10pIHtcblx0XHRcdGNvbnN0IHNsb3RLZXkgPSBzbG90LnNsb3RLZXkoKTtcblx0XHRcdGlmICghdGhpcy5zbG90TWFwLmhhcyhzbG90S2V5KSkge1xuXHRcdFx0XHR0aGlzLnNsb3RNYXAuc2V0KHNsb3RLZXksIHNsb3QpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKSB7XG5cdFx0dGhpcy5zbG90UmVuZGVyU3RhdGVzID0gKHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpID8/IFtdKS5tYXAoKGdyaWQsIGluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBzbG90S2V5ID0gdGhpcy5yZXNvbHZlU2xvdEtleShncmlkKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNsb3Q6IHNsb3RLZXkgPyB0aGlzLnNsb3RNYXAuZ2V0KHNsb3RLZXkpIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRjb250ZXh0OiB0aGlzLmdldE9yQ3JlYXRlUGFnZUZvcm1TbG90Q29udGV4dChncmlkLCBpbmRleCwgc2xvdEtleSksXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRPckNyZWF0ZVBhZ2VGb3JtU2xvdENvbnRleHQoZ3JpZDogR3JpZExpc3QsIGluZGV4OiBudW1iZXIsIHNsb3RLZXk6IHN0cmluZyk6IFBhZ2VGb3JtU2xvdENvbnRleHQge1xuXHRcdGNvbnN0IHJlbmRlcktleSA9IHRoaXMuZ2V0R3JpZFJlbmRlcktleShncmlkLCBpbmRleCk7XG5cdFx0bGV0IGNvbnRleHQgPSB0aGlzLnNsb3RDb250ZXh0TWFwLmdldChyZW5kZXJLZXkpO1xuXHRcdGlmICghY29udGV4dCkge1xuXHRcdFx0Y29udGV4dCA9IHt9IGFzIFBhZ2VGb3JtU2xvdENvbnRleHQ7XG5cdFx0XHR0aGlzLnNsb3RDb250ZXh0TWFwLnNldChyZW5kZXJLZXksIGNvbnRleHQpO1xuXHRcdH1cblxuXHRcdGNvbnRleHQuJGltcGxpY2l0ID0gY29udGV4dDtcblx0XHRjb250ZXh0LnNsb3RLZXkgPSBzbG90S2V5O1xuXHRcdGNvbnRleHQuZ3JpZCA9IGdyaWQ7XG5cdFx0Y29udGV4dC5pbmRleCA9IGluZGV4O1xuXHRcdGNvbnRleHQucGFnZUZvcm0gPSB0aGlzO1xuXHRcdGNvbnRleHQuZGF0YSA9ICh0aGlzLmdldFBybS5kYXRhID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRjb250ZXh0Lm1vZGVsID0gZ3JpZC50eXBlID09PSAnZ3JpZCcgPyB0aGlzLmdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5IV0gOiB0aGlzLnN1YkZvcm1Nb2RlbFtncmlkLnN1YkRhdGFLZXkhXSB8fCB7fTtcblx0XHRjb250ZXh0LnVwc2VydCA9IHRoaXMudXBzZXJ0UHJtO1xuXHRcdGNvbnRleHQuYWN0aXZlID0gdGhpcy5pbmRleFZhbHVlID09PSBpbmRleDtcblx0XHRjb250ZXh0LmdyaWREaXNhYmxlID0gdGhpcy5ncmlkRGlzYWJsZTtcblx0XHRyZXR1cm4gY29udGV4dDtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVNsb3RLZXkoZ3JpZDogR3JpZExpc3QpOiBzdHJpbmcge1xuXHRcdHJldHVybiBncmlkLnNsb3RLZXkgfHwgZ3JpZC5zdWJEYXRhS2V5O1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRHcmlkUmVuZGVyS2V5KGdyaWQ6IEdyaWRMaXN0LCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZ3JpZC5ncmlkT3B0aW9ucz8ubW9kZWxOYW1lIHx8IGdyaWQuc3ViRGF0YUtleSB8fCBncmlkLnNsb3RLZXkgfHwgYCR7aW5kZXh9YDtcblx0fVxuXG5cdGdldEN1cnJlbnRHcmlkKCkge1xuXHRcdHJldHVybiB0aGlzLnJlc29sdmVkR3JpZExpc3QoKT8uW3RoaXMuaW5kZXhWYWx1ZV0gPz8gbnVsbDtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q3VycmVudFN1Yk1vZGVsTmFtZSgpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRpZiAoIWN1cnJlbnRHcmlkKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdHJldHVybiBjdXJyZW50R3JpZC50eXBlID09PSAnZ3JpZCcgPyBjdXJyZW50R3JpZC5ncmlkT3B0aW9ucz8ubW9kZWxOYW1lIHx8ICcnIDogY3VycmVudEdyaWQubW9kZWxOYW1lIHx8ICcnO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRTdWJzZXJ0QnlHcmlkKGdyaWQ6IEdyaWRMaXN0IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuXHRcdGlmICghZ3JpZCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGNvbnN0IHN1Yk1vZGVsTmFtZSA9IGdyaWQudHlwZSA9PT0gJ2dyaWQnID8gZ3JpZC5ncmlkT3B0aW9ucz8ubW9kZWxOYW1lIDogZ3JpZFsnbW9kZWxOYW1lJ107XG5cdFx0aWYgKCFzdWJNb2RlbE5hbWUpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy51cHNlcnRQcm0uc3Vic2VydD8uZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnN1Yk1vZGVsTmFtZSA9PT0gc3ViTW9kZWxOYW1lKSA/PyBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBjbG9uZVN1YnNlcnQoc3Vic2VydDogYW55KSB7XG5cdFx0aWYgKCFzdWJzZXJ0KSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLnN1YnNlcnQsXG5cdFx0XHRzdWJEYXRhOiBBcnJheS5pc0FycmF5KHN1YnNlcnQuc3ViRGF0YSkgPyBzdWJzZXJ0LnN1YkRhdGEubWFwKChpdGVtOiBhbnkpID0+ICh7IC4uLml0ZW0gfSkpIDogW10sXG5cdFx0XHRtYXB0bXA6IG5ldyBNYXA8YW55LCBhbnk+KHN1YnNlcnQubWFwdG1wID8gKEFycmF5LmZyb20oc3Vic2VydC5tYXB0bXAuZW50cmllcygpKSBhcyBbYW55LCBhbnldW10pIDogW10pLFxuXHRcdFx0bG9ndG1wOiBuZXcgTWFwPGFueSwgYW55PihzdWJzZXJ0LmxvZ3RtcCA/IChBcnJheS5mcm9tKHN1YnNlcnQubG9ndG1wLmVudHJpZXMoKSkgYXMgW2FueSwgYW55XVtdKSA6IFtdKSxcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDdXJyZW50Rm9ybUNvbXBvbmVudCgpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRpZiAoIWN1cnJlbnRHcmlkIHx8IGN1cnJlbnRHcmlkLnR5cGUgPT09ICdncmlkJykge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGNvbnN0IGZvcm1JbmRleCA9XG5cdFx0XHR0aGlzLnJlc29sdmVkR3JpZExpc3QoKVxuXHRcdFx0XHQuc2xpY2UoMCwgdGhpcy5pbmRleFZhbHVlICsgMSlcblx0XHRcdFx0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnR5cGUgIT09ICdncmlkJykubGVuZ3RoIC0gMTtcblx0XHRyZXR1cm4gZm9ybUluZGV4ID49IDAgPyAodGhpcy50YWJGb3JtLmdldChmb3JtSW5kZXgpID8/IG51bGwpIDogbnVsbDtcblx0fVxuXG5cdGNhblNob3dDdXJyZW50VGFiU2F2ZShncmlkPzogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSBncmlkID8/IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRpZiAoIWN1cnJlbnRHcmlkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmF1dGhMZXZlbCgpID49IDMgJiYgY3VycmVudEdyaWQgPT09IHRoaXMuZ2V0Q3VycmVudEdyaWQoKSAmJiBjdXJyZW50R3JpZC5zdWJTYXZlPy5lbmFibGVkID09PSB0cnVlICYmICF0aGlzLmlzU3ViU2F2ZUhpZGRlbihjdXJyZW50R3JpZCk7XG5cdH1cblxuXHRnZXRDdXJyZW50VGFiU2F2ZUxhYmVsKGdyaWQ/OiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IGdyaWQgPz8gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdHJldHVybiBjdXJyZW50R3JpZD8uc3ViU2F2ZT8ubGFiZWwgfHwgJ+S/neWtmCc7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVN1YkJ1dHRvbkhpZGRlbkNvbnRleHQoZ3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3QgaW5kZXggPSBncmlkID8gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuaW5kZXhPZihncmlkKSA6IC0xO1xuXHRcdHJldHVybiB7XG5cdFx0XHRkYXRhOiB0aGlzLmdldFBybS5kYXRhIHx8IHRoaXMuY0Zvcm0/Lm1vZGVsPy4oKSxcblx0XHRcdGdyaWQsXG5cdFx0XHRwYWdlRm9ybTogdGhpcyxcblx0XHRcdGNvbXBvbmVudDogdGhpcy5ydW50aW1lQ29udGV4dD8uWydjb21wb25lbnQnXSB8fCB0aGlzLFxuXHRcdFx0aW5kZXgsXG5cdFx0XHRhdXRoTGV2ZWw6IHRoaXMuYXV0aExldmVsKCksXG5cdFx0XHRnZXRQcm06IHRoaXMuZ2V0UHJtLFxuXHRcdFx0cnVudGltZUNvbnRleHQ6IHRoaXMucnVudGltZUNvbnRleHQsXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVN1YkJ1dHRvbkhpZGRlbihncmlkOiBHcmlkTGlzdCB8IG51bGwgfCB1bmRlZmluZWQsIGhpZGRlbjogYW55KSB7XG5cdFx0aWYgKHR5cGVvZiBoaWRkZW4gIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiAhIWhpZGRlbi5jYWxsKHRoaXMucnVudGltZUNvbnRleHQ/LlsnY29tcG9uZW50J10gfHwgdGhpcywgdGhpcy5jcmVhdGVTdWJCdXR0b25IaWRkZW5Db250ZXh0KGdyaWQgfHwgbnVsbCkpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCflrZDooajmjInpkq7pmpDol4/mnaHku7bmiafooYzlpLHotKU6JywgZXJyb3IsIGdyaWQpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzU3ViU2F2ZUhpZGRlbihncmlkPzogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSBncmlkID8/IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlU3ViQnV0dG9uSGlkZGVuKGN1cnJlbnRHcmlkLCBjdXJyZW50R3JpZD8uc3ViU2F2ZT8uaGlkZGVuKTtcblx0fVxuXG5cdGlzU3ViQWRkSGlkZGVuKGdyaWQ/OiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IGdyaWQgPz8gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdHJldHVybiB0aGlzLnJlc29sdmVTdWJCdXR0b25IaWRkZW4oY3VycmVudEdyaWQsIGN1cnJlbnRHcmlkPy5hZGRIaWRkZW4pO1xuXHR9XG5cblx0aXNTdWJEZWxldGVIaWRkZW4oZ3JpZD86IEdyaWRMaXN0IHwgbnVsbCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gZ3JpZCA/PyB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZVN1YkJ1dHRvbkhpZGRlbihjdXJyZW50R3JpZCwgY3VycmVudEdyaWQ/LmRlbGV0ZUhpZGRlbik7XG5cdH1cblxuXHRwcml2YXRlIGhhc01haW5QZW5kaW5nQ2hhbmdlcygpIHtcblx0XHRjb25zdCBhZGREYXRhID0gdGhpcy51cHNlcnRQcm0uYWRkRGF0YSB8fCB7fTtcblx0XHRjb25zdCB1cGREYXRhID0gdGhpcy51cHNlcnRQcm0udXBkRGF0YSB8fCB7fTtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMoYWRkRGF0YSkubGVuZ3RoID4gMCB8fCBPYmplY3Qua2V5cyh1cGREYXRhKS5sZW5ndGggPiAwO1xuXHR9XG5cblx0cHJpdmF0ZSBoYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydDogYW55KSB7XG5cdFx0aWYgKCFzdWJzZXJ0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiAhIShcblx0XHRcdChzdWJzZXJ0LnN1YkRhdGEgJiYgc3Vic2VydC5zdWJEYXRhLmxlbmd0aCA+IDApIHx8XG5cdFx0XHQoc3Vic2VydC5tYXB0bXAgJiYgc3Vic2VydC5tYXB0bXAuc2l6ZSA+IDApIHx8XG5cdFx0XHQoc3Vic2VydC5sb2d0bXAgJiYgc3Vic2VydC5sb2d0bXAuc2l6ZSA+IDApXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdERpcnR5TWFpbkRhdGFTbmFwc2hvdCgpIHtcblx0XHRjb25zdCBkaXJ0eVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFsuLi5PYmplY3Qua2V5cyh0aGlzLnVwc2VydFBybS5hZGREYXRhIHx8IHt9KSwgLi4uT2JqZWN0LmtleXModGhpcy51cHNlcnRQcm0udXBkRGF0YSB8fCB7fSldKTtcblx0XHRjb25zdCBzbmFwc2hvdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRcdGRpcnR5UGF0aHMuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRzbmFwc2hvdFtrZXldID0gZmllbGRVdGlscy5nZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBrZXkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzbmFwc2hvdDtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdE90aGVyRGlydHlTdWJEYXRhU25hcHNob3QoY3VycmVudEdyaWQ6IEdyaWRMaXN0IHwgbnVsbCkge1xuXHRcdGNvbnN0IHNuYXBzaG90cyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgoZ3JpZCkgPT4ge1xuXHRcdFx0aWYgKCFncmlkIHx8IGdyaWQgPT09IGN1cnJlbnRHcmlkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHN1YnNlcnQgPSB0aGlzLmdldFN1YnNlcnRCeUdyaWQoZ3JpZCk7XG5cdFx0XHRpZiAoIXRoaXMuaGFzU3Vic2VydFBlbmRpbmdDaGFuZ2VzKHN1YnNlcnQpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGN1cnJlbnREYXRhID0gZ3JpZC50eXBlID09PSAnZ3JpZCcgPyB0aGlzLmdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5XSB8fCBbXSA6IHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleV0gfHwge307XG5cdFx0XHRzbmFwc2hvdHMuc2V0KGdyaWQuc3ViRGF0YUtleSwgQXJyYXkuaXNBcnJheShjdXJyZW50RGF0YSkgPyBjdXJyZW50RGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiB7IC4uLmN1cnJlbnREYXRhIH0pO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzbmFwc2hvdHM7XG5cdH1cblxuXHRwcml2YXRlIHJlc3RvcmVEaXJ0eVNuYXBzaG90cyhtYWluRGF0YVNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBzdWJEYXRhU25hcHNob3RzOiBNYXA8c3RyaW5nLCBhbnk+KSB7XG5cdFx0T2JqZWN0LmVudHJpZXMobWFpbkRhdGFTbmFwc2hvdCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIGtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXHRcdHN1YkRhdGFTbmFwc2hvdHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuXHRcdFx0dGhpcy5nZXRQcm0uZGF0YVtrZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiB7IC4uLnZhbHVlIH07XG5cdFx0fSk7XG5cdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIHJlZnJlc2hDdXJyZW50VGFiRGF0YShjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCB8fCAhdGhpcy5pZCB8fCAhdGhpcy5tb2RlbE5hbWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbWFpbkRhdGFTbmFwc2hvdCA9IHRoaXMuY29sbGVjdERpcnR5TWFpbkRhdGFTbmFwc2hvdCgpO1xuXHRcdGNvbnN0IG90aGVyRGlydHlTbmFwc2hvdHMgPSB0aGlzLmNvbGxlY3RPdGhlckRpcnR5U3ViRGF0YVNuYXBzaG90KGN1cnJlbnRHcmlkKTtcblx0XHR0aGlzLnN5bmNHZXRQcm1Gb3JDdXJyZW50VmlldygpO1xuXHRcdHRoaXMud2ViX2dldCh0aGlzLmdldFBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZGV0YWlsQ2IodGhpcy5tZXJnZURldGFpbFdpdGhMZWZ0UGFuZWwocmVzKSk7XG5cdFx0XHR0aGlzLnJlc3RvcmVEaXJ0eVNuYXBzaG90cyhtYWluRGF0YVNuYXBzaG90LCBvdGhlckRpcnR5U25hcHNob3RzKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzZXRDdXJyZW50VGFiVXBzZXJ0U3RhdGUoZ3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3Qgc3Vic2VydCA9IHRoaXMuZ2V0U3Vic2VydEJ5R3JpZChncmlkKTtcblx0XHRpZiAoIXN1YnNlcnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c3Vic2VydC5tYXB0bXAgPSBuZXcgTWFwKCk7XG5cdFx0c3Vic2VydC5sb2d0bXAgPSBuZXcgTWFwKCk7XG5cdFx0c3Vic2VydC5zdWJEYXRhID0gW107XG5cdH1cblxuXHRwcml2YXRlIHJlY2FsY3VsYXRlU2F2ZVNpZ25hbCgpIHtcblx0XHRjb25zdCBoYXNEaXJ0eVN1YnNlcnRzID0gKHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQgfHwgW10pLnNvbWUoKHN1YnNlcnQ6IGFueSkgPT4gdGhpcy5oYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydCkpO1xuXHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KHRoaXMuaGFzTWFpblBlbmRpbmdDaGFuZ2VzKCkgfHwgaGFzRGlydHlTdWJzZXJ0cyk7XG5cdH1cblxuXHRidWlsZEN1cnJlbnRUYWJVcHNlcnQoKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0Y29uc3QgY3VycmVudFN1YnNlcnQgPSB0aGlzLmdldFN1YnNlcnRCeUdyaWQoY3VycmVudEdyaWQpO1xuXHRcdGlmICghY3VycmVudEdyaWQgfHwgIWN1cnJlbnRTdWJzZXJ0IHx8ICF0aGlzLmlkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgcGF5bG9hZDogYW55ID0ge1xuXHRcdFx0bW9kZWxOYW1lOiB0aGlzLm1vZGVsTmFtZSxcblx0XHRcdGFkZERhdGE6IHtcblx0XHRcdFx0Li4uKHRoaXMudXBzZXJ0UHJtLmFkZERhdGEgfHwge30pLFxuXHRcdFx0fSxcblx0XHRcdHVwZERhdGE6IHtcblx0XHRcdFx0Li4uKHRoaXMudXBzZXJ0UHJtLnVwZERhdGEgfHwge30pLFxuXHRcdFx0XHRpZDogdGhpcy5pZCxcblx0XHRcdH0sXG5cdFx0XHRzdWJzZXJ0OiBbdGhpcy5jbG9uZVN1YnNlcnQoY3VycmVudFN1YnNlcnQpXSxcblx0XHR9O1xuXHRcdGlmICh0aGlzLmlzTG9nKSB7XG5cdFx0XHRwYXlsb2FkLmxvZ01vZGVsID0gYCR7dGhpcy5tb2RlbE5hbWV9TG9nYDtcblx0XHRcdHBheWxvYWQubG9nID0ge1xuXHRcdFx0XHQuLi4odGhpcy51cHNlcnRQcm0ubG9nIHx8IHt9KSxcblx0XHRcdFx0cGlkOiB0aGlzLmlkLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZUN1cnJlbnRUYWJTYXZlU3VjY2VzcyhjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsLCBjYj86IEZ1bmN0aW9uLCByZXM/OiBhbnkpIHtcblx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldChmYWxzZSk7XG5cdFx0dGhpcy5yZXNldEN1cnJlbnRUYWJVcHNlcnRTdGF0ZShjdXJyZW50R3JpZCk7XG5cdFx0dGhpcy5yZWZyZXNoQ3VycmVudFRhYkRhdGEoY3VycmVudEdyaWQpO1xuXHRcdHRoaXMucmVjYWxjdWxhdGVTYXZlU2lnbmFsKCk7XG5cdFx0Y2IgJiYgY2IocmVzKTtcblx0fVxuXG5cdHNhdmVDdXJyZW50VGFiKGNiPzogRnVuY3Rpb24pIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRjb25zdCBwYXlsb2FkID0gdGhpcy5idWlsZEN1cnJlbnRUYWJVcHNlcnQoKTtcblx0XHRpZiAoIXBheWxvYWQpIHtcblx0XHRcdHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgc3VtbWFyeTogJ1dhcm4nLCBkZXRhaWw6ICfor7flhYjkv53lrZjkuLvooagnIH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoY3VycmVudEdyaWQ/LnR5cGUgIT09ICdncmlkJykge1xuXHRcdFx0Y29uc3QgY3VycmVudEZvcm0gPSB0aGlzLmdldEN1cnJlbnRGb3JtQ29tcG9uZW50KCk7XG5cdFx0XHRpZiAoY3VycmVudEZvcm0gJiYgIWN1cnJlbnRGb3JtLnZhbGlkYXRlKCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldCh0cnVlKTtcblx0XHRjb25zdCBmaW5hbGl6ZVNhdmUgPSAocmVzPzogYW55KSA9PiB0aGlzLmhhbmRsZUN1cnJlbnRUYWJTYXZlU3VjY2VzcyhjdXJyZW50R3JpZCwgY2IsIHJlcyk7XG5cdFx0aWYgKHR5cGVvZiBjdXJyZW50R3JpZD8uc3ViU2F2ZT8uc2F2ZUZ1bmMgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGN1cnJlbnRHcmlkLnN1YlNhdmUuc2F2ZUZ1bmMocGF5bG9hZCwgdGhpcy5pZCwgZmluYWxpemVTYXZlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy53ZWJfdXBzZXJ0KHBheWxvYWQpXG5cdFx0XHQucGlwZShcblx0XHRcdFx0ZmluYWxpemUoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHRcdFx0fSksXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0ZmluYWxpemVTYXZlKHJlcyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFkZFJvd0NsaWNrSGFuZGxlcihncmlkOiBHcmlkTGlzdCkge1xuXHRcdGNvbnN0IHN1YkRhdGFLZXkgPSBncmlkLnN1YkRhdGFLZXk7XG5cblx0XHRpZiAoZ3JpZC5zdWJUYWJsZVNvdXJjZSA9PT0gJ2hhbmRsZScpIHtcblx0XHRcdGNvbnN0IGFkZEl0ZW0gPSBncmlkLmdyaWRPcHRpb25zPy5hZGREYXRhQ2I/LigpID8/IHt9O1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UuYWRkRGF0YShzdWJEYXRhS2V5LCBhZGRJdGVtLCBncmlkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5hZGREYXRhKHN1YkRhdGFLZXksIHVuZGVmaW5lZCwgZ3JpZCk7XG5cdFx0dGhpcy5kYXRhU291cmNlU2hvdygpO1xuXHR9XG5cblx0ZGVsUm93Q2xpY2tIYW5kbGVyKGdyaWQ6IEdyaWRMaXN0KSB7XG5cdFx0Y29uc3Qgc2VsZWN0SXRlbTogYW55ID0gdGhpcy5wYWdlRm9ybVNlcnZpY2UuZ2V0U2VsZWN0ZWRSb3dzKCkgfHwgW107XG5cdFx0bGV0IGlkczogbnVtYmVyW10gPSBbXTtcblx0XHRpZiAoZ3JpZC5zbG90S2V5ID09PSAnZ2FudHQnKSB7XG5cdFx0XHRpZHMgPSBzZWxlY3RJdGVtLmZpbHRlcigodjogYW55KSA9PiB2LmlkICYmIHR5cGVvZiB2LmlkID09PSAnbnVtYmVyJykubWFwKCh2OiBhbnkpID0+IHYuaWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZHMgPSBzZWxlY3RJdGVtLmZpbHRlcigodjogYW55KSA9PiB2LmlkKS5tYXAoKHY6IGFueSkgPT4gdi5pZCk7XG5cdFx0fVxuXHRcdGlmIChpZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgZ3JpZFRhYiA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0XHRjb25zdCBkZWxldGVGdW5jID0gZ3JpZFRhYi5kZWxldGVGdW5jO1xuXHRcdFx0bGV0IGRvbmVDYWxsZWQgPSBmYWxzZTtcblx0XHRcdGNvbnN0IGRvbmUgPSAoKSA9PiB7XG5cdFx0XHRcdGlmIChkb25lQ2FsbGVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRvbmVDYWxsZWQgPSB0cnVlO1xuXHRcdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoNCk7XG5cdFx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnJlbW92ZURhdGEoZ3JpZC5zdWJEYXRhS2V5LCB0aGlzLnBhZ2VGb3JtU2VydmljZS5nZXRTZWxlY3RlZFJvd3MoKSwgZ3JpZCk7XG5cdFx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHRcdH07XG5cdFx0XHRpZiAoIWRlbGV0ZUZ1bmMpIHtcblx0XHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHRcdHRoaXMud2ViX3JlbW92ZSh7IG1vZGVsTmFtZTogZ3JpZC5ncmlkT3B0aW9ucy5tb2RlbE5hbWUsIGlkcyB9KS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnJlbW92ZURhdGEoZ3JpZC5zdWJEYXRhS2V5LCB0aGlzLnBhZ2VGb3JtU2VydmljZS5nZXRTZWxlY3RlZFJvd3MoKSwgZ3JpZCk7XG5cdFx0XHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2Uuc2V0U2VsZWN0ZWRSb3dzKFtdKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KHRydWUpO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gZGVsZXRlRnVuYyhpZHMsIGdyaWRUYWIsIGRvbmUpO1xuXHRcdFx0aWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XG5cdFx0XHRcdHJlc3VsdC5zdWJzY3JpYmUoKCkgPT4gZG9uZSgpKTtcblx0XHRcdH0gZWxzZSBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHJlc3VsdC5zdWJzY3JpYmUoKCkgPT4gZG9uZSgpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UucmVtb3ZlRGF0YShncmlkLnN1YkRhdGFLZXksIHRoaXMucGFnZUZvcm1TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLCBncmlkKTtcblx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnNldFNlbGVjdGVkUm93cyhbXSk7XG5cdFx0fVxuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWQ6b3ZlcmZsb3ctaGlkZGVuXCI+XG4gIDwhLS0g5L+d5a2Y5paw5bu65pON5L2c5Yy6IC0tPlxuXHQ8ZGl2IGNsYXNzPVwiZmxleCBtZDpmbGV4LXdyYXAgbGc6ZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlbiBweS0xIHB4LTEgYm9yZGVyLWItWzFweF0gYm9yZGVyLVsjZGJkYmRiXSBiZy13aGl0ZVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJsZzpiYXNpcy0xLzMgb3JkZXItMVwiPlxuXHRcdFx0PGFwcC1jcnVtYi1hY3Rpb25cblx0XHRcdFx0W2FkZFZpc2libGVdPVwiYWRkVmlzaWJsZSgpXCJcblx0XHRcdFx0W25ld1VybF09XCJuZXdVcmxcIlxuXHRcdFx0XHRbaXNTaG93Q29nXT1cInRydWVcIlxuXHRcdFx0XHRbb3V0bGluZWRdPVwidHJ1ZVwiXG5cdFx0XHRcdFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuXHRcdFx0XHRbYWN0aW9uTGlzdF09XCJhY3Rpb25MaXN0KClcIlxuXHRcdFx0XHRbY29uZmlnTmV3UGF0aF09XCJjb25maWdOZXdQYXRoKClcIlxuXHRcdFx0XHRbZGF0YV09XCJnZXRQcm0uZGF0YSA/PyB7fVwiXG5cdFx0XHRcdFtzYXZlQnRuRGlzYWJsZV09XCJzYXZlQnRuRGlzYWJsZVwiXG5cdFx0XHRcdFtzaG93U2F2ZUJ1dHRvbl09XCJzaG93TWFpblNhdmVCdXR0b24oKVwiXG5cdFx0XHRcdChhY3Rpb25FdmVudCk9XCJhdXRoQ2xpY2soJGV2ZW50KVwiXG5cdFx0XHRcdChzYXZlRXZlbnQpPVwic3VibWl0Rm9ybSgpXCI+XG5cdFx0XHQ8L2FwcC1jcnVtYi1hY3Rpb24+XG5cdFx0PC9kaXY+XG5cblx0XHQ8ZGl2IGNsYXNzPVwiYmFzaXMtMS81IGxnOmJhc2lzLTIvMyBvcmRlci0yIGxnOm9yZGVyLTIgbWQ6b3JkZXItbGFzdCBtZDpiYXNpcy1mdWxsIG1kOm10LVs2cHhdXCI+XG5cdFx0XHQ8aHJlZi1idG4tbGlzdFxuXHRcdFx0XHRbaHJlZnNdPVwiaHJlZkJ0bkxpc3QoKVwiXG5cdFx0XHRcdChocmVmQ2xpY2spPVwiZ29SdW4oJGV2ZW50KVwiPjwvaHJlZi1idG4tbGlzdD5cblx0XHRcdDwhLS0gQGlmIChpZCkge1xuXHRcdFx0XHRAZm9yIChidG4gb2YgaHJlZkJ0bkxpc3QoKTsgdHJhY2sgYnRuKSB7XG5cdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRbdmFyaWFudF09XCJidG4/LnZhcmlhbnRcIlxuXHRcdFx0XHRcdFx0W3NldmVyaXR5XT1cImJ0bj8uc2V2ZXJpdHlcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJtci1bNnB4XVwiXG5cdFx0XHRcdFx0XHRzaXplPVwic21hbGxcIlxuXHRcdFx0XHRcdFx0W2ljb25dPVwiYnRuPy5pY29uXCJcblx0XHRcdFx0XHRcdGxhYmVsPVwie3sgYnRuLmkxOG5LZXkgPyBpMThuLmZhbnlpKGJ0bi5pMThuS2V5KSA6IGJ0bi5sYWJlbCB9fVwiXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiZ29SdW4oYnRuKVwiPlxuXHRcdFx0XHRcdDwvcC1idXR0b24+XG5cdFx0XHRcdH1cblx0XHRcdH0gLS0+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cImJhc2lzLTEvMyBvcmRlci0zIGZsZXggZmxleC1yb3ctcmV2ZXJzZVwiPlxuXHRcdFx0QGlmIChtb2RlbExvZygpKSB7XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2tcIj5cblx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0W2NsYXNzXT1cIidpY29uZm9udCBpY29uLXNpZGViYXIgaWNvbi1zaWRlYmFyLScgKyBzaWRlYmFyTW9kZSgpXCJcblx0XHRcdFx0XHRcdChjbGljayk9XCJ0b2dnbGVMb2coKVwiPjwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiZmxleFwiPlxuXHRcdDxkaXYgY2xhc3M9XCJweC0yIGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBmbGV4LTFcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmFzaXMtMS8zIHB5LTEgYmFzaXMtZnVsbCBtZDpmbGV4IGl0ZW1zLWNlbnRlciBmbGV4LXJvdyBvcmRlci0xXCI+XG5cdFx0XHRcdEBmb3IgKGFjdGlvbiBvZiBhY3Rpb25MaXN0KCk7IGxldCBpID0gJGluZGV4OyB0cmFjayBhY3Rpb24pIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdHNpemU9XCJzbWFsbFwiXG5cdFx0XHRcdFx0XHRbaWNvbl09XCJnZXRQcm0uZGF0YT8uaWNvblwiXG5cdFx0XHRcdFx0XHRbbG9hZGluZ109XCJhY3Rpb24ubG9hZGluZ1wiXG5cdFx0XHRcdFx0XHRbbGFiZWxdPVwiYWN0aW9uLmkxOG5LZXkgPyAoYWN0aW9uLmkxOG5LZXkgfCB0cmFuc2xhdGUpIDogYWN0aW9uLmxhYmVsXCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJhY3Rpb24uYnRuRGlzYWJsZWQgPyBhY3Rpb24uYnRuRGlzYWJsZWQoZ2V0UHJtLmRhdGEpIDogZmFsc2VcIlxuXHRcdFx0XHRcdFx0W3N0eWxlQ2xhc3NdPVwiXG5cdFx0XHRcdFx0XHRcdChhY3Rpb24uYXV0aCB8fCAwKSA+IChhdXRoTGV2ZWwoKSB8fCAwKSB8fCAhIWFjdGlvbi5idG5IaWRkZW4/LihnZXRQcm0uZGF0YSlcblx0XHRcdFx0XHRcdFx0XHQ/ICdmb3JtLWFjdGlvbiBoaWRkZW4nXG5cdFx0XHRcdFx0XHRcdFx0OiAnZm9ybS1hY3Rpb24gYmxvY2sgbXItWy41cmVtXSdcblx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHQob25DbGljayk9XCJhY3Rpb24ub25DbGljayAhPSAnJyAmJiBhY3Rpb24ub25DbGljaz8uKGdldFBybS5kYXRhLCBhY3Rpb24pXCI+XG5cdFx0XHRcdFx0PC9wLWJ1dHRvbj5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibWQ6YmFzaXMtMi8zIGJhc2lzLWZ1bGwgZmxleCBtZDpmbGV4LXJvdy1yZXZlcnNlIGZsZXgtcm93IG1kOm9yZGVyLTIgb3JkZXItZmlyc3Qgdy1mdWxsXCI+XG5cdFx0XHRcdEBpZiAoc3RlcHNWaXNpYmxlKSB7XG5cdFx0XHRcdFx0PGN1c3RvbS1zdGVwc1xuXHRcdFx0XHRcdFx0I2N1c3RvbVN0ZXBzXG5cdFx0XHRcdFx0XHRjbGFzcz1cInctZnVsbFwiXG5cdFx0XHRcdFx0XHRbc3RlcHNdPVwic3RhdHVzU3RlcHMoKVwiXG5cdFx0XHRcdFx0XHRbbW9kZWxMb2ddPVwic2hvd0xvZygpXCJcblx0XHRcdFx0XHRcdFtjdXJyZW50XT1cImdldFBybS5kYXRhICYmIGdldFBybS5kYXRhW3N0YXR1c0tleSgpXSAhPT0gdW5kZWZpbmVkID8gZ2V0UHJtLmRhdGFbc3RhdHVzS2V5KCldIDogMFwiXG5cdFx0XHRcdFx0XHRbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcblx0XHRcdFx0XHRcdFtpc0NsaWNrXT1cInRoaXMuc3RhdHVzQ29uZigpLmlzQ2xpY2tcIlxuXHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJzdGF0dXNDaGFuZ2UoJGV2ZW50LCBjdXN0b21TdGVwcylcIj5cblx0XHRcdFx0XHQ8L2N1c3RvbS1zdGVwcz5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0QGlmIChzaG93TG9nKCkpIHtcblx0XHRcdDxkaXYgY2xhc3M9XCJsZzp3LVs0MDBweF0gbWQ6dy1bMzAwcHhdIGhpZGRlbiBtZDpibG9ja1wiPjwvZGl2PlxuXHRcdH1cblx0PC9kaXY+XG4gIDwhLS0gIGZvcm0g5Li75Yy65Z+fLS0+XG4gIEBpZih0aGlzLmZvcm0oKS5mb3JtKSB7XG4gICAgPGRpdiBjbGFzcz1cIm1haW4gZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgIEBpZiAoY3VzdG9tTGVmdFBhbmVsKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImhpZGRlbiBtZDpibG9jayBtZDpoLWZ1bGwgbWQ6b3ZlcmZsb3cteS1hdXRvIG1kOmZsZXgtbm9uZSBtZDp3LWZpdCBtZDptYXgtdy1mdWxsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUxlZnRQYW5lbCgpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSBpZiAobGVmdFBhbmVsKCk/LmVuYWJsZWQgJiYgbGVmdFBhbmVsKCk/Lm1vZGUgPT09ICdsaXN0Jykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZGVuIG1kOmJsb2NrIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG8gbWQ6ZmxleC1ub25lIG1kOnctWzIyMHB4XSBtZDptYXgtdy1mdWxsIHB4LTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1mb3JtLWxlZnQtcGFuZWxcIj5cbiAgICAgICAgICAgIDxhbS1zaW5nbGUtc2VsZWN0LWxpc3Rib3hcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwibGVmdFBhbmVsSXRlbXNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsZWZ0UGFuZWxTZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTGVmdFBhbmVsU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiZ2V0UGFuZWxPcHRpb25WYWx1ZSgpXCJcbiAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImdldFBhbmVsT3B0aW9uTGFiZWwoKVwiXG4gICAgICAgICAgICAgIFtlbXB0eU1lc3NhZ2VdPVwiZ2V0UGFuZWxFbXB0eU1lc3NhZ2UoKVwiXG4gICAgICAgICAgICAgIFthbGxvd0Rlc2VsZWN0XT1cImdldFBhbmVsQWxsb3dEZXNlbGVjdCgpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChsZWZ0UGFuZWwoKT8uZW5hYmxlZCAmJiBsZWZ0UGFuZWwoKT8ubW9kZSA9PT0gJ3RyZWUnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2sgbWQ6aC1mdWxsIG1kOm92ZXJmbG93LXktYXV0byBtZDpmbGV4LW5vbmUgbWQ6dy1bMjIwcHhdIG1kOm1heC13LWZ1bGwgcHgtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWZvcm0tbGVmdC1wYW5lbCBwYWdlLWZvcm0tdHJlZS1wYW5lbFwiPlxuICAgICAgICAgICAgQGlmIChsZWZ0UGFuZWxUcmVlTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICA8cC10cmVlXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxlZnRQYW5lbFRyZWVOb2Rlc1wiXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uTW9kZT1cInNpbmdsZVwiXG4gICAgICAgICAgICAgICAgWyhzZWxlY3Rpb24pXT1cImxlZnRQYW5lbFNlbGVjdGVkTm9kZVwiXG4gICAgICAgICAgICAgICAgW2VtcHR5TWVzc2FnZV09XCJnZXRQYW5lbEVtcHR5TWVzc2FnZSgpXCJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicGFnZS1mb3JtLWxlZnQtdHJlZVwiXG4gICAgICAgICAgICAgICAgKG9uTm9kZVNlbGVjdCk9XCJvbkxlZnRQYW5lbFRyZWVOb2RlU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbk5vZGVFeHBhbmQpPVwib25MZWZ0UGFuZWxUcmVlTm9kZUV4cGFuZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25Ob2RlQ29sbGFwc2UpPVwib25MZWZ0UGFuZWxUcmVlTm9kZUNvbGxhcHNlKCRldmVudClcIiAvPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWZvcm0tbGVmdC1wYW5lbC1lbXB0eVwiPnt7IGdldFBhbmVsRW1wdHlNZXNzYWdlKCkgfX08L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1kOm1pbi13LTAgbWQ6ZmxleC0xIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIG14LTIgZm9ybS1wYW5lbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTIgZmxleC0xXCI+XG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm0oKS5mb3JtIVwiPlxuICAgICAgICAgICAgICA8Y3VzdG9tLWZvcm1cbiAgICAgICAgICAgICAgICAjY0Zvcm1cbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJmb3JtT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3Vwc2VydF09XCJ1cHNlcnRQcm1cIlxuICAgICAgICAgICAgICAgIFttb2RlbF09XCJnZXRQcm0uZGF0YSA/PyB7fVwiXG4gICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cIm9uTWFpbkZvcm1Nb2RlbENoYW5nZSgpXCI+PC9jdXN0b20tZm9ybT5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKGdyaWRzICYmIGdyaWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBtYi0yXCI+XG4gICAgICAgICAgICAgIDxwLXRhYnMgWyh2YWx1ZSldPVwiaW5kZXhWYWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxwLXRhYmxpc3Q+XG4gICAgICAgICAgICAgICAgICBAZm9yIChmY2hpbGQgb2YgZ3JpZHM7IGxldCBpID0gJGluZGV4OyB0cmFjayBmY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtdGFiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0YWJDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZmNoaWxkLmkxOG5LZXkgPyBpMThuLmZhbnlpKGZjaGlsZC5pMThuS2V5KSA6IGZjaGlsZC50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3AtdGFiPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvcC10YWJsaXN0PlxuICAgICAgICAgICAgICA8L3AtdGFicz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZm9yIChncmlkIG9mIGdyaWRzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgZ3JpZCkge1xuICAgICAgICAgICAgQGxldCBzbG90U3RhdGUgPSBzbG90UmVuZGVyU3RhdGVzW2ldO1xuICAgICAgICAgICAgQGxldCBzbG90ID0gc2xvdFN0YXRlPy5zbG90O1xuICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cImluZGV4VmFsdWUgIT0gaVwiIFtzdHlsZS5oZWlnaHRdPVwic2xvdCA/IGdyaWQuZ3JpZE9wdGlvbnMuc2Nyb2xsSGVpZ2h0IDogbnVsbFwiPlxuICAgICAgICAgICAgICBAaWYgKHNsb3QpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2xvdC50ZW1wbGF0ZVJlZjsgY29udGV4dDogc2xvdFN0YXRlLmNvbnRleHRcIj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgcHktWzVweF0gcHItWzhweF0gYmctd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoY2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jbG91ZC11cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInNhdmVDdXJyZW50VGFiKClcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGlmIChncmlkLnN1YlRhYmxlU291cmNlICE9ICdub25lJyAmJiAhaXNTdWJBZGRIaWRkZW4oZ3JpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBsdXNcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwic3VjY2Vzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFkZFJvd0NsaWNrSGFuZGxlcihncmlkKVwiIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKGdyaWQuc2hvd0RlbGV0ZSAmJiAhaXNTdWJEZWxldGVIaWRkZW4oZ3JpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eT1cImRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImRlbFJvd0NsaWNrSGFuZGxlcihncmlkKVwiIC8+XG4gICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2ICNjdXN0b21HcmlkPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBAaWYgKGdyaWQudHlwZSA9PSAnZ3JpZCcpIHtcbiAgICAgICAgICAgICAgICAgIDxjdXN0b20tZ3JpZFxuICAgICAgICAgICAgICAgICAgICAjY3VzdG9tR3JpZFxuICAgICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJnZXRQcm0uZGF0YT8uW2dyaWQuc3ViRGF0YUtleSFdXCJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGVFeHByZXNzaW9uRGF0YV09XCJnZXRQcm0uZGF0YSA/PyB7fVwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlRXhwcmVzc2lvblZlcnNpb25dPVwiaGlkZUV4cHJlc3Npb25WZXJzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW3Vwc2VydF09XCJ1cHNlcnRQcm1cIlxuICAgICAgICAgICAgICAgICAgICAoZGVsZXRlRW1pdCk9XCJkZWxSb3dzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZ3JpZERhdGFDaGFuZ2VkKT1cInJlZnJlc2hTdWJHcmlkQ29sdW1uVmlzaWJpbGl0eSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2FkZFR5cGVdPVwiZ3JpZC5zdWJUYWJsZVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgIChhZGRFbWl0KT1cImRhdGFTb3VyY2VTaG93KClcIlxuICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwiZ3JpZC5ncmlkT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtncmlkRGlzYWJsZV09XCJncmlkLmdyaWREaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0RlbGV0ZV09XCJncmlkLnNob3dEZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICBbZGVsZXRlSGlkZGVuXT1cImlzU3ViRGVsZXRlSGlkZGVuKGdyaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2FkZEhpZGRlbl09XCJpc1N1YkFkZEhpZGRlbihncmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJTYXZlVmlzaWJsZV09XCJjYW5TaG93Q3VycmVudFRhYlNhdmUoZ3JpZClcIlxuICAgICAgICAgICAgICAgICAgICBbc3ViU2F2ZUhpZGRlbl09XCJpc1N1YlNhdmVIaWRkZW4oZ3JpZClcIlxuICAgICAgICAgICAgICAgICAgICBbc3ViU2F2ZUxhYmVsXT1cImdldEN1cnJlbnRUYWJTYXZlTGFiZWwoZ3JpZClcIlxuICAgICAgICAgICAgICAgICAgICBbc3ViU2F2ZURpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdERhdGFdPVwiZ3JpZC5zZWxlY3REYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW2FkZFNvcnRdPVwiZ3JpZC5hZGRTb3J0XCJcbiAgICAgICAgICAgICAgICAgICAgKHN1YlNhdmVFbWl0KT1cInNhdmVDdXJyZW50VGFiKClcIj5cbiAgICAgICAgICAgICAgICAgIDwvY3VzdG9tLWdyaWQ+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICBAaWYgKGNhblNob3dDdXJyZW50VGFiU2F2ZShncmlkKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBweC0yIHB0LTIgYmctd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jbG91ZC11cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic2F2ZUN1cnJlbnRUYWIoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPGN1c3RvbS1mb3JtXG4gICAgICAgICAgICAgICAgICAgICN0YWJGb3JtXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImdyaWRcIlxuICAgICAgICAgICAgICAgICAgICBbdXBzZXJ0XT1cInVwc2VydFBybVwiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJzdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5IV0gfHwge31cIlxuICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwicmVmcmVzaFN1YkdyaWRDb2x1bW5WaXNpYmlsaXR5KClcIj5cbiAgICAgICAgICAgICAgICAgIDwvY3VzdG9tLWZvcm0+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKHNob3dMb2coKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGxnOnctWzQwMHB4XSBtZDp3LVszMDBweF0gbWQ6aC1mdWxsIG1kOm92ZXJmbG93LXktYXV0byBoaWRkZW4gbWQ6YmxvY2tcIj5cbiAgICAgICAgICA8Y3VzdG9tLWxvZyBbbG9nc109XCJnZXRQcm0uZGF0YT8ubG9nID8/IFtdXCI+PC9jdXN0b20tbG9nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG48cm93LXNlbGVjdG9yXG5cdFsodmlzaWJsZSldPVwidmlzaWJsZVwiXG5cdFtzZWFyY2hQcm1dPVwiZGlhbG9nU2VhcmNoUHJtXCJcblx0W2dyaWRPcHRpb25zXT1cInNlbGVjdE9wdGlvbnNcIlxuXHRbc2VsZWN0aW9uS2V5c109XCJzZWxlY3Rpb25LZXlzXCJcblx0W3NlbGVjdE1vZGVsQ29kZV09XCJjdXJyZW50U2VsZWN0TW9kZWxDb2RlIHx8IHVuZGVmaW5lZFwiXG5cdFtjdXN0b21MaXN0Rm9ybUJ5RGlhbG9nXT1cImN1cnJlbnRDdXN0b21MaXN0Rm9ybVRlbXBsYXRlXCJcblx0W2N1c3RvbUxpc3RGb3JtQnlEaWFsb2dDb250ZXh0XT1cImN1cnJlbnRDdXN0b21MaXN0Rm9ybUNvbnRleHRcIlxuXHRbY3VzdG9tTGlzdERpYWxvZ01hcF09XCJjdXN0b21MaXN0Rm9ybUluc3RhbmNlTWFwKClcIlxuXHQob25Payk9XCJvbk9rKCRldmVudClcIlxuXHQoY2FuY2VsU2VsZWN0KT1cIm9uQ2FuY2VsU2VsZWN0ZWQoJGV2ZW50KVwiPlxuPC9yb3ctc2VsZWN0b3I+XG4iXX0=
|
|
1569
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcGFnZS1mb3JtL3BhZ2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3BhZ2UtZm9ybS9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUlOLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxZQUFZLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFlLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQVEsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMs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SSxXQUNQO3dCQUNSLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYixZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLFVBQVU7d0JBQ1Ysb0JBQW9CO3dCQUNwQixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsNEJBQTRCO3dCQUM1QixVQUFVO3FCQUNWLGFBR1UsRUFBRTt3REFHTyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBQ1UsVUFBVTtzQkFBckMsWUFBWTt1QkFBQyxZQUFZO2dCQUNELE9BQU87c0JBQS9CLFlBQVk7dUJBQUMsU0FBUztnQkFDVSxXQUFXO3NCQUEzQyxTQUFTO3VCQUFDLG9CQUFvQjtnQkFDZ0MsYUFBYTtzQkFBM0UsZUFBZTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBeUs3RCxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJIaXN0b3J5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvdXNlckhpc3Rvcnkuc2VydmljZSc7XG5pbXBvcnQge1xuXHRBZnRlckNvbnRlbnRJbml0LFxuXHRBZnRlclZpZXdJbml0LFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENvbnRlbnRDaGlsZHJlbixcblx0ZWZmZWN0LFxuXHRIb3N0TGlzdGVuZXIsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdE9uRGVzdHJveSxcblx0T25Jbml0LFxuXHRRdWVyeUxpc3QsXG5cdHNpZ25hbCxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZCxcblx0Vmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1Db21wb25lbnQsIEZvcm1PcHRpb25zIH0gZnJvbSAnLi4vZm9ybS9mb3JtL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFJvd1NlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcm93LXNlbGVjdG9yL3Jvdy1zZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9nL2xvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBDcnVtYkFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NydW1iLWFjdGlvbi9jcnVtYi1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFN0ZXAsIFN0ZXBzQ29tcG9uZW50IH0gZnJvbSAnLi4vc3RlcHMvc3RlcHMuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRDb21wb25lbnQsIEdyaWRPcHRpb25zIH0gZnJvbSAnLi4vZ3JpZC9ncmlkL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnMnO1xuaW1wb3J0IHsgVHJlZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdHJlZSc7XG5pbXBvcnQgeyBBbUNvbXBvbmVudCwgR2V0LCBTZWFyY2ggfSBmcm9tICcuLi9hbS9hbS5jb21wb25lbnQnO1xuaW1wb3J0IHtcblx0Zm9ybVR5cGVUb1Byb3BzLFxuXHRHcmlkTGlzdCxcblx0SHJlZkJ0bkxpc3QsXG5cdFBhZ2VGb3JtU2xvdENvbnRleHQsXG5cdFBhZ2VMZWZ0UGFuZWxDb25maWcsXG5cdFBhZ2VMZWZ0UGFuZWxEYXRhU291cmNlLFxuXHRQYXlsb2FkVXBzZXJ0LFxuXHRQZXJtaXNzaW9uQnRuLFxuXHRDdXN0b21MaXN0RGlhbG9nLFxuXHRDdXN0b21MaXN0Rm9ybVRlbXBsYXRlQ29udGV4dCxcbn0gZnJvbSAnLi9wYWdlLWZvcm0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEhyZWZCdG5MaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vaHJlZi1idG4tbGlzdC9ocmVmLWJ0bi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBkZWVwQ2xvbmUgfSBmcm9tICcuLi9zaGFyZS91dGlscyc7XG5pbXBvcnQgeyBQYWdlRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3BhZ2UtZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VGb3JtU2xvdERpcmVjdGl2ZSB9IGZyb20gJy4vcGFnZS1mb3JtLXNsb3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IGZpbmFsaXplLCBmaXJzdFZhbHVlRnJvbSwgaXNPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuXHRTaW5nbGVTZWxlY3RMaXN0Ym94Q2hhbmdlRXZlbnQsXG5cdFNpbmdsZVNlbGVjdExpc3Rib3hDb21wb25lbnRcbn0gZnJvbSAnLi4vc2luZ2xlLXNlbGVjdC1saXN0Ym94L3NpbmdsZS1zZWxlY3QtbGlzdGJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmllbGRVdGlscyB9IGZyb20gJy4uL2Zvcm0vZm9ybS1maWVsZC9maWVsZC11dGlscyc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2FwcC1wYWdlLWZvcm0nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbXG5cdFx0Q29tbW9uTW9kdWxlLFxuXHRcdEJ1dHRvbk1vZHVsZSxcblx0XHRGb3Jtc01vZHVsZSxcblx0XHRSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuXHRcdEZvcm1Db21wb25lbnQsXG5cdFx0TG9nQ29tcG9uZW50LFxuXHRcdENydW1iQWN0aW9uQ29tcG9uZW50LFxuXHRcdFN0ZXBzQ29tcG9uZW50LFxuXHRcdEdyaWRDb21wb25lbnQsXG5cdFx0VGFic01vZHVsZSxcblx0XHRSb3dTZWxlY3RvckNvbXBvbmVudCxcblx0XHRUcmFuc2xhdGVQaXBlLFxuXHRcdEhyZWZCdG5MaXN0Q29tcG9uZW50LFxuXHRcdFNpbmdsZVNlbGVjdExpc3Rib3hDb21wb25lbnQsXG5cdFx0VHJlZU1vZHVsZSxcblx0XSxcblx0dGVtcGxhdGVVcmw6ICcuL3BhZ2UtZm9ybS5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi9wYWdlLWZvcm0uY29tcG9uZW50LnNjc3MnLFxuXHRwcm92aWRlcnM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlRm9ybUNvbXBvbmVudCBleHRlbmRzIEFtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuXHRAVmlld0NoaWxkKCdjRm9ybScpIGNGb3JtITogRm9ybUNvbXBvbmVudDtcblx0QFZpZXdDaGlsZHJlbignY3VzdG9tR3JpZCcpIGN1c3RvbUdyaWQhOiBRdWVyeUxpc3Q8R3JpZENvbXBvbmVudD47XG5cdEBWaWV3Q2hpbGRyZW4oJ3RhYkZvcm0nKSB0YWJGb3JtITogUXVlcnlMaXN0PEZvcm1Db21wb25lbnQ+O1xuXHRAVmlld0NoaWxkKFJvd1NlbGVjdG9yQ29tcG9uZW50KSByb3dTZWxlY3Rvcj86IFJvd1NlbGVjdG9yQ29tcG9uZW50O1xuXHRAQ29udGVudENoaWxkcmVuKFBhZ2VGb3JtU2xvdERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwYWdlRm9ybVNsb3RzITogUXVlcnlMaXN0PFBhZ2VGb3JtU2xvdERpcmVjdGl2ZT47XG5cdHNob3dMb2cgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9kZWxMb2coKSAmJiB0aGlzLnNpZGViYXJNb2RlKCkgPT09ICdyaWdodCc7XG5cdH0pO1xuXHRhZGRWaXNpYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblx0Z3JpZExpc3QgPSBpbnB1dDxhbnlbXT4oW10pO1xuXHRmb3JtID0gaW5wdXQucmVxdWlyZWQ8Rm9ybU9wdGlvbnM+KHt9KTtcblx0Z2V0UHJtSW5wdXQgPSBpbnB1dC5yZXF1aXJlZDxHZXQ+KHt9KTtcblx0c3RhdHVzU3RlcHMgPSBpbnB1dDxTdGVwW10+KFtdKTtcblx0c3RhdHVzS2V5ID0gaW5wdXQoJ3N0YXR1cycpO1xuXHRocmVmQnRuTGlzdCA9IGlucHV0PEhyZWZCdG5MaXN0W10+KFtdKTtcblx0c2V0VGl0bGUgPSBpbnB1dDxzdHJpbmc+KCk7XG5cdGFjdGlvbkxpc3QgPSBpbnB1dDxQZXJtaXNzaW9uQnRuW10+KFtdKTtcblx0bW9kZWxMb2cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHNpZGViYXJNb2RlID0gc2lnbmFsPCdsZWZ0JyB8ICdyaWdodCc+KCdyaWdodCcpO1xuXHRmb3JtRGlzYWJsZWQgPSBpbnB1dDxGdW5jdGlvbj4oKTtcblx0c3RhdHVzQ29uZiA9IGlucHV0PGFueT4oKTtcblx0Zm9ybURldGFpbCA9IGlucHV0PGFueT4oKTtcblx0c2F2ZUZ1bmMgPSBpbnB1dDxhbnk+KCk7XG5cdHNob3dNYWluU2F2ZUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXHRjb25maWdOZXdQYXRoID0gaW5wdXQ8YW55PigpO1xuXHRjbG9zZUZhbGxiYWNrVXJsID0gaW5wdXQ8c3RyaW5nPignJyk7XG5cdHJ1bnRpbWVDb250ZXh0SW5wdXQgPSBpbnB1dDxhbnk+KHt9KTtcblx0Y3VzdG9tTGVmdFBhbmVsID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+KG51bGwpO1xuXHRjdXN0b21MaXN0Rm9ybVRlbXBsYXRlTWFwID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgVGVtcGxhdGVSZWY8Q3VzdG9tTGlzdEZvcm1UZW1wbGF0ZUNvbnRleHQ+PiB8IG51bGw+KG51bGwpO1xuXHRjdXN0b21MaXN0Rm9ybUluc3RhbmNlTWFwID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgQ3VzdG9tTGlzdERpYWxvZyB8IHVuZGVmaW5lZD4gfCBudWxsPihudWxsKTtcblx0bGVmdFBhbmVsID0gaW5wdXQ8UGFnZUxlZnRQYW5lbENvbmZpZyB8IG51bGw+KG51bGwpO1xuXHRwYW5lbFNlbGVjdGVkRGF0YSA9IGlucHV0PGFueT4oe30pO1xuXHRydW50aW1lQ29udGV4dDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG5cdHByaXZhdGUgY3VycmVudElkQW5kTW9kZWxOYW1lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+ID0ge307XG5cblx0dXNlckhpc3RvcnlTZXJ2aWNlID0gaW5qZWN0KFVzZXJIaXN0b3J5U2VydmljZSk7XG5cdHBhZ2VGb3JtU2VydmljZSA9IGluamVjdChQYWdlRm9ybVNlcnZpY2UpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cdHByaXZhdGUgX2luZGV4VmFsdWUgPSAwO1xuXHRwcml2YXRlIHJlYWRvbmx5IGludGVybmFsR3JpZExpc3QgPSBzaWduYWw8YW55W10+KFtdKTtcblx0cHJpdmF0ZSBncmlkTGlzdE92ZXJyaWRkZW4gPSBmYWxzZTtcblx0dmlzaWJsZSA9IGZhbHNlO1xuXHRkaWFsb2dTZWFyY2hQcm0hOiBTZWFyY2g7XG5cdHNlbGVjdE9wdGlvbnMhOiBHcmlkT3B0aW9ucztcblx0c2VsZWN0RGF0YTogYW55W10gPSBbXTtcblx0cGFnZVVybCA9ICcnO1xuXHRuZXdVcmwgPSAnJztcblx0YXV0aExldmVsID0gaW5wdXQ8bnVtYmVyPigtMSk7XG5cdGhyZWZzOiBhbnlbXSA9IFtdO1xuXHRhY3Rpb24gPSBpbmplY3QoQWN0aW9uU2VydmljZSk7XG5cdHN1YkZvcm1Nb2RlbDogYW55ID0ge307XG5cdHNhdmVCdG5EaXNhYmxlID0gZmFsc2U7XG5cdGdyaWREaXNhYmxlID0gZmFsc2U7XG5cdHNlbGVjdGlvbktleXM6IGFueVtdID0gW107XG5cdHN1YkRlbGV0ZUlkczogYW55W10gPSBbXTtcblx0bGVmdFBhbmVsSXRlbXM6IGFueVtdID0gW107XG5cdGxlZnRQYW5lbFRyZWVOb2RlczogVHJlZU5vZGVbXSA9IFtdO1xuXHRsZWZ0UGFuZWxTZWxlY3RlZE5vZGU6IFRyZWVOb2RlIHwgbnVsbCA9IG51bGw7XG5cdGxlZnRQYW5lbFNlbGVjdGVkVmFsdWU6IGFueSA9IG51bGw7XG5cdGxlZnRQYW5lbFNlbGVjdGVkSXRlbTogYW55ID0gbnVsbDtcblx0bGVmdFBhbmVsRXhwYW5kZWRLZXlzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRsZWZ0UGFuZWxJbml0aWFsaXplZCA9IGZhbHNlO1xuXHRwcml2YXRlIGxlZnRQYW5lbEluaXRpYWxpemVkTW9kZTogJ2xpc3QnIHwgJ3RyZWUnIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgYmFzZUdyaWRMaXN0U25hcHNob3Q6IGFueVtdID0gW107XG5cblx0c3RlcHNWaXNpYmxlID0gdHJ1ZTtcblx0cHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgc2xvdE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBQYWdlRm9ybVNsb3REaXJlY3RpdmU+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgc2xvdENvbnRleHRNYXAgPSBuZXcgTWFwPHN0cmluZywgUGFnZUZvcm1TbG90Q29udGV4dD4oKTtcblx0Y3VycmVudFNlbGVjdE1vZGVsQ29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdHNsb3RSZW5kZXJTdGF0ZXM6IEFycmF5PHtcblx0XHRzbG90PzogUGFnZUZvcm1TbG90RGlyZWN0aXZlO1xuXHRcdGNvbnRleHQ6IFBhZ2VGb3JtU2xvdENvbnRleHQ7XG5cdH0+ID0gW107XG5cdGhpZGVFeHByZXNzaW9uVmVyc2lvbiA9IDA7XG5cblx0Z2V0IGluZGV4VmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luZGV4VmFsdWU7XG5cdH1cblxuXHRnZXQgY3VycmVudEN1c3RvbUxpc3RGb3JtVGVtcGxhdGUoKSB7XG5cdFx0Y29uc3QgY3VycmVudFNlbGVjdE1vZGVsQ29kZSA9IHRoaXMuY3VycmVudFNlbGVjdE1vZGVsQ29kZTtcblx0XHRpZiAoIWN1cnJlbnRTZWxlY3RNb2RlbENvZGUpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmN1c3RvbUxpc3RGb3JtVGVtcGxhdGVNYXAoKT8uW2N1cnJlbnRTZWxlY3RNb2RlbENvZGVdID8/IG51bGw7XG5cdH1cblxuXHRnZXQgY3VycmVudEN1c3RvbUxpc3RGb3JtQ29udGV4dCgpOiBDdXN0b21MaXN0Rm9ybVRlbXBsYXRlQ29udGV4dCB7XG5cdFx0cmV0dXJuIHsgcGFnZUZvcm06IHRoaXMgfTtcblx0fVxuXG5cdGdldERpYWxvZ1NlbGVjdGVkUmVzdWx0KCkge1xuXHRcdGNvbnN0IHNlbGVjdGVkRGF0YSA9IHRoaXMucm93U2VsZWN0b3I/LmdldFNlbGVjdGVkRGF0YSgpID8/IFtdO1xuXHRcdHJldHVybiBzZWxlY3RlZERhdGEubWFwKChpdGVtKSA9PiB7XG5cdFx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuXHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zPy5jb2x1bW5EZWZzPy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXN1bHRbY29sLmZpZWxkXSA9IGl0ZW1bY29sLmZpZWxkXTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9KTtcblx0fVxuXG5cdHNldFJ1bnRpbWVDb250ZXh0KGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSkge1xuXHRcdHRoaXMucnVudGltZUNvbnRleHQgPSB7XG5cdFx0XHQuLi4odGhpcy5ydW50aW1lQ29udGV4dCB8fCB7fSksXG5cdFx0XHQuLi5kYXRhLFxuXHRcdH07XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRyZWZyZXNoU3ViR3JpZENvbHVtblZpc2liaWxpdHkoKSB7XG5cdFx0dGhpcy5oaWRlRXhwcmVzc2lvblZlcnNpb24rKztcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdG9uTWFpbkZvcm1Nb2RlbENoYW5nZSgpIHtcblx0XHR0aGlzLnJlZnJlc2hTdWJHcmlkQ29sdW1uVmlzaWJpbGl0eSgpO1xuXHR9XG5cblx0c2V0IGluZGV4VmFsdWUodmFsdWU6IG51bWJlcikge1xuXHRcdHRoaXMuX2luZGV4VmFsdWUgPSB2YWx1ZTtcblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5zZXRTZWxlY3RlZFJvd3MoW10pO1xuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0fVxuXG5cdGdldCBncmlkcygpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCk7XG5cdH1cblxuXHRzZXQgZ3JpZHModmFsdWU6IGFueVtdKSB7XG5cdFx0dGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4gPSB0cnVlO1xuXHRcdHRoaXMuaW50ZXJuYWxHcmlkTGlzdC5zZXQodmFsdWUgPz8gW10pO1xuXHRcdHRoaXMuc3luY1Vwc2VydFN1YnNlcnRzKCk7XG5cdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlZEdyaWRMaXN0KCkge1xuXHRcdGlmICh0aGlzLmxlZnRQYW5lbCgpPy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnRlcm5hbEdyaWRMaXN0KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmdyaWRMaXN0T3ZlcnJpZGRlbiA/IHRoaXMuaW50ZXJuYWxHcmlkTGlzdCgpIDogdGhpcy5ncmlkTGlzdCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jVXBzZXJ0U3Vic2VydHMoKSB7XG5cdFx0Y29uc3QgY3VycmVudFN1YnNlcnRzID0gdGhpcy51cHNlcnRQcm0uc3Vic2VydCB8fCBbXTtcblx0XHRjb25zdCBzdWJzZXJ0TWFwID0gbmV3IE1hcChjdXJyZW50U3Vic2VydHMubWFwKChpdGVtKSA9PiBbaXRlbS5zdWJNb2RlbE5hbWUsIGl0ZW1dKSk7XG5cdFx0Y29uc3QgbmV4dFN1YnNlcnRzID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClcblx0XHRcdC5tYXAoKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzdWJNb2RlbE5hbWUgPSBpdGVtLnR5cGUgPT09ICdncmlkJyA/IGl0ZW0uZ3JpZE9wdGlvbnM/Lm1vZGVsTmFtZSA6IGl0ZW1bJ21vZGVsTmFtZSddO1xuXHRcdFx0XHRpZiAoIXN1Yk1vZGVsTmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnQgPSBzdWJzZXJ0TWFwLmdldChzdWJNb2RlbE5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGN1cnJlbnQgfHwge1xuXHRcdFx0XHRcdFx0c3ViTW9kZWxOYW1lLFxuXHRcdFx0XHRcdFx0Zms6IGl0ZW0udHlwZSA9PT0gJ2dyaWQnID8gaXRlbS5ncmlkT3B0aW9ucz8uZmsgfHwgaXRlbS5mayA6IGl0ZW0uZmssXG5cdFx0XHRcdFx0XHRzdWJEYXRhOiBbXSxcblx0XHRcdFx0XHRcdG1hcHRtcDogbmV3IE1hcCgpLFxuXHRcdFx0XHRcdFx0bG9ndG1wOiBuZXcgTWFwKCksXG5cdFx0XHRcdFx0XHRyZWZlcmVuY2U6IGl0ZW0udHlwZSA9PT0gJ2dyaWQnID8gaXRlbS5ncmlkT3B0aW9ucz8ucmVmZXJlbmNlIHx8IGl0ZW0ucmVmZXJlbmNlIDogaXRlbS5yZWZlcmVuY2UsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgYW55W107XG5cdFx0dGhpcy51cHNlcnRQcm0uc3Vic2VydCA9IG5leHRTdWJzZXJ0cztcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuXHRvblJlc2l6ZSgpIHtcblx0XHR0aGlzLnNpZGViYXJNb2RlLnNldCh3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQgPyAnbGVmdCcgOiAncmlnaHQnKTtcblx0fVxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuaWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJykpO1xuXHRcdHRoaXMucGFnZVVybCA9IHRoaXMucm91dGUuc25hcHNob3QudXJsXG5cdFx0XHQubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnBhdGgpXG5cdFx0XHQuam9pbignLycpXG5cdFx0XHQucmVwbGFjZSgvKFteXFwvXSopJC8sICcnKTtcblx0XHR0aGlzLm5ld1VybCA9IGAke3RoaXMucGFnZVVybH1uZXdgO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5tb2RlbE5hbWUgPSB0aGlzLmdldFBybUlucHV0KCkubW9kZWxOYW1lITtcblx0XHRcdFx0dGhpcy5nZXRQcm0gPSB7IC4uLnRoaXMuZ2V0UHJtSW5wdXQoKSB9O1xuXHRcdFx0XHR0aGlzLmlkICYmICh0aGlzLmdldFBybS5pZCA9IHRoaXMuaWQpO1xuXHRcdFx0XHRpZiAodGhpcy5pZCAmJiB0aGlzLm1vZGVsTmFtZSAmJiAhdGhpcy5sZWZ0UGFuZWwoKT8uZW5hYmxlZCkge1xuXHRcdFx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCgxKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge307XG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHYudHlwZSA9PSAnZ3JpZCcpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YVt2LnN1YkRhdGFLZXldID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR0aGlzLmZvcm1PcHRpb25zID0gdGhpcy5idWlsZEZvcm1PcHRpb25zKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMucnVudGltZUNvbnRleHQgPSB0aGlzLnJ1bnRpbWVDb250ZXh0SW5wdXQoKSB8fCB7fTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaXNMb2cgPSB0aGlzLm1vZGVsTG9nKCk7XG5cdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuc3RhdHVzU3RlcHMoKS5sZW5ndGggPiAwICYmICF0aGlzLmlkKSB7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnRQcm0uYWRkRGF0YSFbdGhpcy5zdGF0dXNLZXkoKV0gPSB0aGlzLnN0YXR1c1N0ZXBzKClbMF1bJ3ZhbHVlJ107XG5cdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5nZXRQcm0uZGF0YSB8fCB7fSwge1xuXHRcdFx0XHRcdFx0W3RoaXMuc3RhdHVzS2V5KCldOiB0aGlzLnN0YXR1c1N0ZXBzKClbMF1bJ3ZhbHVlJ10sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5hdXRoTGV2ZWwoKSA8IDMpIHtcblx0XHRcdFx0XHR0aGlzLnNldERpc2FibGVkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlucHV0R3JpZExpc3QgPSB0aGlzLmdyaWRMaXN0KCk7XG5cdFx0XHRcdGlmICghdGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4pIHtcblx0XHRcdFx0XHQvLyB0aGlzLmludGVybmFsR3JpZExpc3Quc2V0KFtdKTtcblx0XHRcdFx0XHR0aGlzLnN5bmNVcHNlcnRTdWJzZXJ0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QgPSBkZWVwQ2xvbmUoaW5wdXRHcmlkTGlzdCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0XHRcdGlmICghcGFuZWw/LmVuYWJsZWQpIHtcblx0XHRcdFx0XHR0aGlzLnJlc2V0TGVmdFBhbmVsU3RhdGUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY3VycmVudE1vZGUgPSB0aGlzLmdldExlZnRQYW5lbE1vZGUoKTtcblx0XHRcdFx0aWYgKHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWQgJiYgdGhpcy5sZWZ0UGFuZWxJbml0aWFsaXplZE1vZGUgPT09IGN1cnJlbnRNb2RlKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSAmJiB0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSAhPT0gY3VycmVudE1vZGUpIHtcblx0XHRcdFx0XHR0aGlzLnJlc2V0TGVmdFBhbmVsU3RhdGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5pbml0aWFsaXplTGVmdFBhbmVsKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHR9XG5cblx0bmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuXHRcdHRoaXMucmVidWlsZFNsb3RNYXAoKTtcblx0XHR0aGlzLnBhZ2VGb3JtU2xvdHMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMucmVidWlsZFNsb3RNYXAoKTtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0pO1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy51cENiID0gdGhpcy51cENiLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vblJlc2l6ZSgpO1xuXHRcdHRoaXMuYmluZFBhZ2VGb3JtU2VydmljZSgpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5kZXN0cm95JC5uZXh0KCk7XG5cdFx0dGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNldExlZnRQYW5lbFN0YXRlKCkge1xuXHRcdHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSA9IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxJdGVtcyA9IFtdO1xuXHRcdHRoaXMubGVmdFBhbmVsVHJlZU5vZGVzID0gW107XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZE5vZGUgPSBudWxsO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRWYWx1ZSA9IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gPSBudWxsO1xuXHRcdHRoaXMubGVmdFBhbmVsRXhwYW5kZWRLZXlzID0ge307XG5cdFx0dGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4gPSBmYWxzZTtcblx0XHR0aGlzLmludGVybmFsR3JpZExpc3Quc2V0KHRoaXMuZ3JpZExpc3QoKSk7XG5cdFx0dGhpcy5zeW5jVXBzZXJ0U3Vic2VydHMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUxlZnRQYW5lbCgpIHtcblx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0aWYgKCFwYW5lbD8uZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkID0gdHJ1ZTtcblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSA9IHRoaXMuZ2V0TGVmdFBhbmVsTW9kZSgpO1xuXHRcdHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QgPSBkZWVwQ2xvbmUodGhpcy5ncmlkTGlzdCgpLCB0aGlzKTtcblx0XHRjb25zdCBkYXRhU291cmNlID0gdGhpcy5nZXRQYW5lbERhdGFTb3VyY2UoKTtcblx0XHR0aGlzLnJ1bkxlZnRQYW5lbEV2ZW50KCdvbkluaXQnKTtcblx0XHRjb25zdCBpdGVtcyA9IGF3YWl0IHRoaXMubG9hZExlZnRQYW5lbEl0ZW1zKGRhdGFTb3VyY2UpO1xuXHRcdHRoaXMubGVmdFBhbmVsSXRlbXMgPSBpdGVtcztcblx0XHR0aGlzLnJ1bkxlZnRQYW5lbEV2ZW50KCdvbkl0ZW1zTG9hZGVkJywgeyBpdGVtcyB9KTtcblx0XHRpZiAodGhpcy5nZXRMZWZ0UGFuZWxNb2RlKCkgPT09ICd0cmVlJykge1xuXHRcdFx0dGhpcy5pbml0aWFsaXplTGVmdFBhbmVsVHJlZShpdGVtcyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUxlZnRQYW5lbExpc3QoaXRlbXMsIGRhdGFTb3VyY2UpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBpbml0aWFsaXplTGVmdFBhbmVsTGlzdChpdGVtczogYW55W10sIGRhdGFTb3VyY2U/OiBQYWdlTGVmdFBhbmVsRGF0YVNvdXJjZSkge1xuXHRcdGxldCBkZWZhdWx0VmFsdWUgPSBhd2FpdCB0aGlzLnJlc29sdmVNYXliZUFzeW5jKFxuXHRcdFx0dHlwZW9mIGRhdGFTb3VyY2U/LmRlZmF1bHRTZWxlY3QgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0PyBkYXRhU291cmNlLmRlZmF1bHRTZWxlY3QodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoeyBpdGVtcyB9KSlcblx0XHRcdFx0OiBkYXRhU291cmNlPy5kZWZhdWx0U2VsZWN0LFxuXHRcdCk7XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAmJiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShkZWZhdWx0VmFsdWUpO1xuXHRcdH1cblx0XHRpZiAoKGRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGRlZmF1bHRWYWx1ZSA9PT0gbnVsbCkgJiYgdGhpcy5nZXRQYW5lbEFsbG93RGVzZWxlY3QoKSA9PT0gZmFsc2UgJiYgaXRlbXMubGVuZ3RoID4gMCkge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShpdGVtc1swXSk7XG5cdFx0fVxuXHRcdGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcblx0XHRcdGF3YWl0IHRoaXMuYXBwbHlMZWZ0UGFuZWxTZWxlY3Rpb24oZGVmYXVsdFZhbHVlLCBpdGVtcy5maW5kKChpdGVtKSA9PiB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKGl0ZW0pID09PSBkZWZhdWx0VmFsdWUpKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGxvYWRMZWZ0UGFuZWxJdGVtcyhkYXRhU291cmNlPzogUGFnZUxlZnRQYW5lbERhdGFTb3VyY2UpIHtcblx0XHRpZiAoIWRhdGFTb3VyY2UpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0bGV0IHJlc3VsdCA9XG5cdFx0XHR0eXBlb2YgZGF0YVNvdXJjZS5sb2FkZXIgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0PyBkYXRhU291cmNlLmxvYWRlcih0aGlzLmNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dCgpKVxuXHRcdFx0XHQ6IChkYXRhU291cmNlLmxvYWRlciA/PyBkYXRhU291cmNlLm9wdGlvbnMgPz8gW10pO1xuXHRcdHJlc3VsdCA9IGF3YWl0IHRoaXMucmVzb2x2ZU1heWJlQXN5bmMocmVzdWx0KTtcblx0XHRpZiAoZGF0YVNvdXJjZS5yZXN1bHRQYXRoKSB7XG5cdFx0XHRyZXN1bHQgPSBmaWVsZFV0aWxzLmdldE1vZGVsKHJlc3VsdCwgZGF0YVNvdXJjZS5yZXN1bHRQYXRoKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBkYXRhU291cmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmVzdWx0ID0gYXdhaXQgdGhpcy5yZXNvbHZlTWF5YmVBc3luYyhkYXRhU291cmNlLnRyYW5zZm9ybShyZXN1bHQsIHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KHsgaXRlbXM6IHJlc3VsdCB9KSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogW107XG5cdH1cblxuXHRwcml2YXRlIGdldExlZnRQYW5lbE1vZGUoKTogJ2xpc3QnIHwgJ3RyZWUnIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8ubW9kZSA9PT0gJ3RyZWUnID8gJ3RyZWUnIDogJ2xpc3QnO1xuXHR9XG5cblx0Z2V0UGFuZWxPcHRpb25MYWJlbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8ub3B0aW9uTGFiZWwgfHwgdGhpcy5sZWZ0UGFuZWwoKT8ubGlzdD8ub3B0aW9uTGFiZWwgfHwgdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8ubm9kZUxhYmVsIHx8ICdsYWJlbCc7XG5cdH1cblxuXHRnZXRQYW5lbE9wdGlvblZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5vcHRpb25WYWx1ZSB8fCB0aGlzLmxlZnRQYW5lbCgpPy5saXN0Py5vcHRpb25WYWx1ZSB8fCB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5ub2RlVmFsdWUgfHwgJ3ZhbHVlJztcblx0fVxuXG5cdGdldFBhbmVsQWxsb3dEZXNlbGVjdCgpIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8uYWxsb3dEZXNlbGVjdCA/PyB0aGlzLmxlZnRQYW5lbCgpPy5saXN0Py5hbGxvd0Rlc2VsZWN0ID8/IHRydWU7XG5cdH1cblxuXHRnZXRQYW5lbEVtcHR5TWVzc2FnZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8uZW1wdHlNZXNzYWdlIHx8IHRoaXMubGVmdFBhbmVsKCk/Lmxpc3Q/LmVtcHR5TWVzc2FnZSB8fCB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5lbXB0eU1lc3NhZ2UgfHwgJ+aaguaXoOaVsOaNric7XG5cdH1cblxuXHRwcml2YXRlIGdldFBhbmVsRGF0YVNvdXJjZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8uZGF0YVNvdXJjZSB8fCB0aGlzLmxlZnRQYW5lbCgpPy5saXN0Py5kYXRhU291cmNlIHx8IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmRhdGFTb3VyY2U7XG5cdH1cblxuXHRwcml2YXRlIGdldFRyZWVDaGlsZHJlbkZpZWxkKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5jaGlsZHJlbkZpZWxkIHx8ICdjaGlsZHJlbic7XG5cdH1cblxuXHRwcml2YXRlIGdldFRyZWVQYXJlbnRTZWxlY3RhYmxlKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5wYXJlbnRTZWxlY3RhYmxlID8/IHRydWU7XG5cdH1cblxuXHRwcml2YXRlIGdldFRyZWVFeHBhbmRlZEtleXNTdGF0ZUtleSgpIHtcblx0XHRyZXR1cm4gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uZXhwYW5kZWRLZXlzU3RhdGVLZXk7XG5cdH1cblxuXHRwcml2YXRlIGdldFRyZWVGaWVsZFZhbHVlKGl0ZW06IGFueSwgZmllbGQ/OiBzdHJpbmcpIHtcblx0XHRpZiAoIWZpZWxkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gZmllbGRVdGlscy5nZXRNb2RlbChpdGVtLCBmaWVsZCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIHJlc29sdmVNYXliZUFzeW5jKHZhbHVlOiBhbnkpIHtcblx0XHRpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dChleHRyYTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhZ2VGb3JtOiB0aGlzLFxuXHRcdFx0bW9kZTogdGhpcy5nZXRMZWZ0UGFuZWxNb2RlKCksXG5cdFx0XHRzZWxlY3RlZEl0ZW06IHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRJdGVtLFxuXHRcdFx0c2VsZWN0ZWRWYWx1ZTogdGhpcy5sZWZ0UGFuZWxTZWxlY3RlZFZhbHVlLFxuXHRcdFx0aXRlbXM6IHRoaXMubGVmdFBhbmVsSXRlbXMsXG5cdFx0XHRnZXRQcm06IHRoaXMuZ2V0UHJtLFxuXHRcdFx0Z3JpZExpc3Q6IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLFxuXHRcdFx0YmFzZUdyaWRMaXN0OiB0aGlzLmJhc2VHcmlkTGlzdFNuYXBzaG90LFxuXHRcdFx0cGFuZWxTZWxlY3RlZERhdGE6IHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRJdGVtLFxuXHRcdFx0cnVudGltZUNvbnRleHQ6IHRoaXMucnVudGltZUNvbnRleHQsXG5cdFx0XHRzZXRTdGF0ZTogKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5nZXRQcm0uZGF0YSkge1xuXHRcdFx0XHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIGtleSwgdmFsdWUpO1xuXHRcdFx0fSxcblx0XHRcdC4uLmV4dHJhLFxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIHJ1bkxlZnRQYW5lbEV2ZW50KGV2ZW50TmFtZToga2V5b2YgTm9uTnVsbGFibGU8UGFnZUxlZnRQYW5lbENvbmZpZ1snZXZlbnRzJ10+LCBleHRyYTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IHRoaXMubGVmdFBhbmVsKCk/LmV2ZW50cz8uW2V2ZW50TmFtZV07XG5cdFx0aWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHJldHVybiBoYW5kbGVyKHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KGV4dHJhKSk7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVQYW5lbE9wdGlvblZhbHVlKG9wdGlvbjogYW55KSB7XG5cdFx0Y29uc3Qgb3B0aW9uVmFsdWUgPSB0aGlzLmdldFBhbmVsT3B0aW9uVmFsdWUoKTtcblx0XHRpZiAoIW9wdGlvblZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9uO1xuXHRcdH1cblx0XHRyZXR1cm4gZmllbGRVdGlscy5nZXRNb2RlbChvcHRpb24sIG9wdGlvblZhbHVlKTtcblx0fVxuXG5cdGFzeW5jIG9uTGVmdFBhbmVsU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBTaW5nbGVTZWxlY3RMaXN0Ym94Q2hhbmdlRXZlbnQpIHtcblx0XHRpZiAoZXZlbnQudmFsdWUgPT0gbnVsbCAmJiB0aGlzLmdldFBhbmVsQWxsb3dEZXNlbGVjdCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuYXBwbHlMZWZ0UGFuZWxTZWxlY3Rpb24oZXZlbnQudmFsdWUsIGV2ZW50Lm9wdGlvbik7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGFwcGx5TGVmdFBhbmVsU2VsZWN0aW9uKHZhbHVlOiBhbnksIG9wdGlvbj86IGFueSkge1xuXHRcdGNvbnN0IHBhbmVsID0gdGhpcy5sZWZ0UGFuZWwoKTtcblx0XHRpZiAoIXBhbmVsPy5lbmFibGVkIHx8IHRoaXMuZ2V0TGVmdFBhbmVsTW9kZSgpICE9PSAnbGlzdCcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc2VsZWN0ZWRJdGVtID0gb3B0aW9uID8/IHRoaXMubGVmdFBhbmVsSXRlbXMuZmluZCgoaXRlbSkgPT4gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShpdGVtKSA9PT0gdmFsdWUpID8/IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZFZhbHVlID0gdmFsdWU7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gPSBzZWxlY3RlZEl0ZW07XG5cdFx0dGhpcy5zeW5jTGVmdFBhbmVsU2VsZWN0aW9uU3RhdGUodmFsdWUsIHNlbGVjdGVkSXRlbSk7XG5cdFx0dGhpcy5pbmRleFZhbHVlID0gMDtcblx0XHR0aGlzLnJ1bkxlZnRQYW5lbEV2ZW50KCdvblNlbGVjdGlvbkNoYW5nZScsIHtcblx0XHRcdHNlbGVjdGVkSXRlbSxcblx0XHRcdHNlbGVjdGVkVmFsdWU6IHZhbHVlLFxuXHRcdFx0bm9kZTogbnVsbCxcblx0XHRcdHJhd05vZGU6IG51bGwsXG5cdFx0XHRpc1BhcmVudDogZmFsc2UsXG5cdFx0XHRpc0xlYWY6IHRydWUsXG5cdFx0fSk7XG5cdFx0dGhpcy5zeW5jR2V0UHJtRml0ZXJQcmVsb2FkcygpO1xuXHRcdHRoaXMuZm9ybU9wdGlvbnMgPSB0aGlzLmJ1aWxkRm9ybU9wdGlvbnMoKTtcblx0XHRpZiAodGhpcy5pZCAmJiB0aGlzLm1vZGVsTmFtZSkge1xuXHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKDIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIHN5bmNHZXRQcm1GaXRlclByZWxvYWRzKCkge1xuXHRcdGNvbnN0IGZpdGVyUHJlbG9hZHMgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mbGF0TWFwKChpdGVtOiBhbnkpID0+IChBcnJheS5pc0FycmF5KGl0ZW0/LmZpdGVyUHJlbG9hZHMpID8gaXRlbS5maXRlclByZWxvYWRzIDogW10pKTtcblx0XHR0aGlzLmdldFBybS5maXRlclByZWxvYWRzID0gZml0ZXJQcmVsb2Fkcztcblx0fVxuXG5cdHByaXZhdGUgc3luY0dldFBybUZvckN1cnJlbnRWaWV3KCkge1xuXHRcdGlmICghdGhpcy5sZWZ0UGFuZWwoKT8uZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBjdXJyZW50UHJlbG9hZHMgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVxuXHRcdFx0Lm1hcCgoaXRlbTogYW55KSA9PiBpdGVtPy5zdWJEYXRhS2V5KVxuXHRcdFx0LmZpbHRlcigoaXRlbTogYW55KSA9PiAhIWl0ZW0pO1xuXHRcdGlmIChjdXJyZW50UHJlbG9hZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5nZXRQcm0ucHJlbG9hZHMgPSBjdXJyZW50UHJlbG9hZHM7XG5cdFx0fVxuXHRcdHRoaXMuc3luY0dldFBybUZpdGVyUHJlbG9hZHMoKTtcblx0fVxuXG5cdHByaXZhdGUgc3luY0xlZnRQYW5lbFNlbGVjdGlvblN0YXRlKHZhbHVlOiBhbnksIHNlbGVjdGVkSXRlbTogYW55KSB7XG5cdFx0Y29uc3QgcGFuZWwgPSB0aGlzLmxlZnRQYW5lbCgpO1xuXHRcdGlmICghcGFuZWwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLmdldFBybS5kYXRhKSB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChwYW5lbC5zdGF0ZUtleSkge1xuXHRcdFx0ZmllbGRVdGlscy5zZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBwYW5lbC5zdGF0ZUtleSwgdmFsdWUpO1xuXHRcdH1cblx0XHRpZiAocGFuZWwucGFuZWxTZWxlY3RlZERhdGFLZXkpIHtcblx0XHRcdGZpZWxkVXRpbHMuc2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwgcGFuZWwucGFuZWxTZWxlY3RlZERhdGFLZXksIHNlbGVjdGVkSXRlbSk7XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFN1YkdyaWRDb2x1bW5WaXNpYmlsaXR5KCk7XG5cdH1cblxuXHRwcml2YXRlIGluaXRpYWxpemVMZWZ0UGFuZWxUcmVlKGl0ZW1zOiBhbnlbXSkge1xuXHRcdGNvbnN0IGV4cGFuZGVkU3RhdGUgPSB0aGlzLnJlYWRUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0XHR0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5cyA9IGV4cGFuZGVkU3RhdGUgfHwge307XG5cdFx0dGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMgPSB0aGlzLmJ1aWxkVHJlZU5vZGVzKGl0ZW1zKTtcblx0XHR2b2lkIHRoaXMuYXBwbHlUcmVlRGVmYXVsdFNlbGVjdGlvbigpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSBidWlsZFRyZWVOb2RlcyhpdGVtczogYW55W10sIHBhcmVudEtleSA9ICdyb290Jyk6IFRyZWVOb2RlW10ge1xuXHRcdGNvbnN0IGNoaWxkcmVuRmllbGQgPSB0aGlzLmdldFRyZWVDaGlsZHJlbkZpZWxkKCk7XG5cdFx0Y29uc3QgaWNvbkZpZWxkID0gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uaWNvbkZpZWxkO1xuXHRcdGNvbnN0IGxlYWZGaWVsZCA9IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmxlYWZGaWVsZDtcblx0XHRjb25zdCBkaXNhYmxlZEZpZWxkID0gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uZGlzYWJsZWRGaWVsZDtcblx0XHRyZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5idWlsZFRyZWVOb2RlS2V5KGl0ZW0sIHBhcmVudEtleSwgaW5kZXgpO1xuXHRcdFx0Y29uc3QgY2hpbGRJdGVtcyA9IGZpZWxkVXRpbHMuZ2V0TW9kZWwoaXRlbSwgY2hpbGRyZW5GaWVsZCk7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoY2hpbGRJdGVtcykgPyB0aGlzLmJ1aWxkVHJlZU5vZGVzKGNoaWxkSXRlbXMsIGtleSkgOiBbXTtcblx0XHRcdGNvbnN0IGlzTGVhZiA9IGxlYWZGaWVsZCA/ICEhdGhpcy5nZXRUcmVlRmllbGRWYWx1ZShpdGVtLCBsZWFmRmllbGQpIDogY2hpbGRyZW4ubGVuZ3RoID09PSAwO1xuXHRcdFx0Y29uc3QgaXNQYXJlbnQgPSBjaGlsZHJlbi5sZW5ndGggPiAwO1xuXHRcdFx0Y29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuZ2V0VHJlZVBhcmVudFNlbGVjdGFibGUoKSB8fCAhaXNQYXJlbnQ7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRrZXksXG5cdFx0XHRcdGxhYmVsOiB0aGlzLnJlc29sdmVUcmVlTm9kZUxhYmVsKGl0ZW0pLFxuXHRcdFx0XHRkYXRhOiBpdGVtLFxuXHRcdFx0XHRjaGlsZHJlbjogY2hpbGRyZW4ubGVuZ3RoID4gMCA/IGNoaWxkcmVuIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRsZWFmOiBpc0xlYWYsXG5cdFx0XHRcdGV4cGFuZGVkOiB0aGlzLnNob3VsZEV4cGFuZFRyZWVOb2RlKGtleSwgaXNQYXJlbnQpLFxuXHRcdFx0XHRzZWxlY3RhYmxlLFxuXHRcdFx0XHRkaXNhYmxlZDogZGlzYWJsZWRGaWVsZCA/ICEhdGhpcy5nZXRUcmVlRmllbGRWYWx1ZShpdGVtLCBkaXNhYmxlZEZpZWxkKSA6IGZhbHNlLFxuXHRcdFx0XHRpY29uOiBpY29uRmllbGQgPyB0aGlzLmdldFRyZWVGaWVsZFZhbHVlKGl0ZW0sIGljb25GaWVsZCkgOiB1bmRlZmluZWQsXG5cdFx0XHR9IGFzIFRyZWVOb2RlO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBidWlsZFRyZWVOb2RlS2V5KGl0ZW06IGFueSwgcGFyZW50S2V5OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoaXRlbSk7XG5cdFx0cmV0dXJuIGAke3BhcmVudEtleX0tJHt2YWx1ZSA/PyBpbmRleH1gO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlVHJlZU5vZGVMYWJlbChpdGVtOiBhbnkpIHtcblx0XHRjb25zdCBsYWJlbCA9IGZpZWxkVXRpbHMuZ2V0TW9kZWwoaXRlbSwgdGhpcy5nZXRQYW5lbE9wdGlvbkxhYmVsKCkpO1xuXHRcdHJldHVybiBsYWJlbCA9PSBudWxsID8gJycgOiBTdHJpbmcobGFiZWwpO1xuXHR9XG5cblx0cHJpdmF0ZSBzaG91bGRFeHBhbmRUcmVlTm9kZShrZXk6IHN0cmluZywgaXNQYXJlbnQ6IGJvb2xlYW4pIHtcblx0XHRpZiAoIWlzUGFyZW50KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChPYmplY3Qua2V5cyh0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5cykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuICEhdGhpcy5sZWZ0UGFuZWxFeHBhbmRlZEtleXNba2V5XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmRlZmF1bHRFeHBhbmQgPz8gZmFsc2U7XG5cdH1cblxuXHRwcml2YXRlIHJlYWRUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKSB7XG5cdFx0Y29uc3Qgc3RhdGVLZXkgPSB0aGlzLmdldFRyZWVFeHBhbmRlZEtleXNTdGF0ZUtleSgpO1xuXHRcdGlmICghc3RhdGVLZXkpIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpZWxkVXRpbHMuZ2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwgc3RhdGVLZXkpIHx8IHt9O1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jVHJlZUV4cGFuZGVkS2V5c1N0YXRlKCkge1xuXHRcdGNvbnN0IHN0YXRlS2V5ID0gdGhpcy5nZXRUcmVlRXhwYW5kZWRLZXlzU3RhdGVLZXkoKTtcblx0XHRpZiAoIXN0YXRlS2V5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghdGhpcy5nZXRQcm0uZGF0YSkge1xuXHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHt9O1xuXHRcdH1cblx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIHN0YXRlS2V5LCB7IC4uLnRoaXMubGVmdFBhbmVsRXhwYW5kZWRLZXlzIH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBhcHBseVRyZWVEZWZhdWx0U2VsZWN0aW9uKCkge1xuXHRcdGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmdldFBhbmVsRGF0YVNvdXJjZSgpO1xuXHRcdGxldCBkZWZhdWx0VmFsdWUgPSBhd2FpdCB0aGlzLnJlc29sdmVNYXliZUFzeW5jKFxuXHRcdFx0dHlwZW9mIGRhdGFTb3VyY2U/LmRlZmF1bHRTZWxlY3QgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0PyBkYXRhU291cmNlLmRlZmF1bHRTZWxlY3QodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoeyBpdGVtczogdGhpcy5sZWZ0UGFuZWxJdGVtcyB9KSlcblx0XHRcdFx0OiBkYXRhU291cmNlPy5kZWZhdWx0U2VsZWN0LFxuXHRcdCk7XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAmJiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnb2JqZWN0JyAmJiAhKCdrZXknIGluIGRlZmF1bHRWYWx1ZSkpIHtcblx0XHRcdGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoZGVmYXVsdFZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGRlZmF1bHRWYWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gdGhpcy5maW5kRmlyc3RTZWxlY3RhYmxlVHJlZU5vZGUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMpPy5rZXkgPz8gbnVsbDtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHJlc29sdmVkTm9kZSA9IHRoaXMucmVzb2x2ZVRyZWVOb2RlQnlTZWxlY3Rpb24oZGVmYXVsdFZhbHVlKTtcblx0XHRjb25zdCBuZXh0Tm9kZSA9IHRoaXMuaXNTZWxlY3RhYmxlVHJlZU5vZGUocmVzb2x2ZWROb2RlKVxuXHRcdFx0PyByZXNvbHZlZE5vZGVcblx0XHRcdDogdGhpcy5maW5kRmlyc3RTZWxlY3RhYmxlVHJlZU5vZGUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMpO1xuXHRcdGlmIChuZXh0Tm9kZSkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFRyZWVTZWxlY3Rpb24obmV4dE5vZGUpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZmluZEZpcnN0U2VsZWN0YWJsZVRyZWVOb2RlKG5vZGVzOiBUcmVlTm9kZVtdKTogVHJlZU5vZGUgfCBudWxsIHtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRcdGlmICh0aGlzLmlzU2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUpKSB7XG5cdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBtYXRjaCA9IHRoaXMuZmluZEZpcnN0U2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUuY2hpbGRyZW4pO1xuXHRcdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVUcmVlTm9kZUJ5U2VsZWN0aW9uKHNlbGVjdGlvbjogYW55KTogVHJlZU5vZGUgfCBudWxsIHtcblx0XHRpZiAoc2VsZWN0aW9uICYmIHR5cGVvZiBzZWxlY3Rpb24gPT09ICdvYmplY3QnICYmICdrZXknIGluIHNlbGVjdGlvbikge1xuXHRcdFx0cmV0dXJuIHRoaXMuZmluZFRyZWVOb2RlQnlLZXkodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMsIHNlbGVjdGlvbi5rZXkpID8/IG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmZpbmRUcmVlTm9kZUJ5VmFsdWUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMsIHNlbGVjdGlvbik7XG5cdH1cblxuXHRwcml2YXRlIGZpbmRUcmVlTm9kZUJ5VmFsdWUobm9kZXM6IFRyZWVOb2RlW10sIHZhbHVlOiBhbnkpOiBUcmVlTm9kZSB8IG51bGwge1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0Y29uc3Qgbm9kZVZhbHVlID0gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShub2RlLmRhdGEpO1xuXHRcdFx0aWYgKG5vZGVWYWx1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5maW5kVHJlZU5vZGVCeVZhbHVlKG5vZGUuY2hpbGRyZW4sIHZhbHVlKTtcblx0XHRcdFx0aWYgKG1hdGNoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBmaW5kVHJlZU5vZGVCeUtleShub2RlczogVHJlZU5vZGVbXSwga2V5OiBzdHJpbmcpOiBUcmVlTm9kZSB8IG51bGwge1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0aWYgKG5vZGUua2V5ID09PSBrZXkpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5maW5kVHJlZU5vZGVCeUtleShub2RlLmNoaWxkcmVuLCBrZXkpO1xuXHRcdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGlzVHJlZVBhcmVudE5vZGUobm9kZTogVHJlZU5vZGUgfCBudWxsKSB7XG5cdFx0cmV0dXJuICEhbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aDtcblx0fVxuXG5cdHByaXZhdGUgaXNTZWxlY3RhYmxlVHJlZU5vZGUobm9kZTogVHJlZU5vZGUgfCBudWxsKSB7XG5cdFx0aWYgKCFub2RlIHx8IChub2RlIGFzIGFueSkuZGlzYWJsZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuZ2V0VHJlZVBhcmVudFNlbGVjdGFibGUoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAhdGhpcy5pc1RyZWVQYXJlbnROb2RlKG5vZGUpO1xuXHR9XG5cblx0YXN5bmMgb25MZWZ0UGFuZWxUcmVlTm9kZVNlbGVjdChldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qgbm9kZSA9IGV2ZW50Py5ub2RlID8/IG51bGw7XG5cdFx0aWYgKCF0aGlzLmlzU2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUpKSB7XG5cdFx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkTm9kZSA9IHRoaXMucmVzb2x2ZVRyZWVOb2RlQnlTZWxlY3Rpb24odGhpcy5sZWZ0UGFuZWxTZWxlY3RlZFZhbHVlKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAobm9kZSkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFRyZWVTZWxlY3Rpb24obm9kZSk7XG5cdFx0fVxuXHR9XG5cblx0b25MZWZ0UGFuZWxUcmVlTm9kZUV4cGFuZChldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQ/Lm5vZGU/LmtleTtcblx0XHRpZiAoIWtleSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5c1trZXldID0gdHJ1ZTtcblx0XHR0aGlzLnN5bmNUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0fVxuXG5cdG9uTGVmdFBhbmVsVHJlZU5vZGVDb2xsYXBzZShldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQ/Lm5vZGU/LmtleTtcblx0XHRpZiAoIWtleSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5sZWZ0UGFuZWxFeHBhbmRlZEtleXNba2V5XTtcblx0XHR0aGlzLnN5bmNUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYXBwbHlMZWZ0UGFuZWxUcmVlU2VsZWN0aW9uKG5vZGU6IFRyZWVOb2RlKSB7XG5cdFx0Y29uc3QgcGFuZWwgPSB0aGlzLmxlZnRQYW5lbCgpO1xuXHRcdGlmICghcGFuZWw/LmVuYWJsZWQgfHwgdGhpcy5nZXRMZWZ0UGFuZWxNb2RlKCkgIT09ICd0cmVlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCByYXdOb2RlID0gbm9kZS5kYXRhO1xuXHRcdGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKHJhd05vZGUpO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWROb2RlID0gbm9kZTtcblx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRJdGVtID0gcmF3Tm9kZTtcblx0XHR0aGlzLnN5bmNMZWZ0UGFuZWxTZWxlY3Rpb25TdGF0ZShzZWxlY3RlZFZhbHVlLCByYXdOb2RlKTtcblx0XHR0aGlzLmluZGV4VmFsdWUgPSAwO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uU2VsZWN0aW9uQ2hhbmdlJywge1xuXHRcdFx0c2VsZWN0ZWRJdGVtOiByYXdOb2RlLFxuXHRcdFx0c2VsZWN0ZWRWYWx1ZSxcblx0XHRcdG5vZGUsXG5cdFx0XHRyYXdOb2RlLFxuXHRcdFx0aXNQYXJlbnQ6IHRoaXMuaXNUcmVlUGFyZW50Tm9kZShub2RlKSxcblx0XHRcdGlzTGVhZjogIXRoaXMuaXNUcmVlUGFyZW50Tm9kZShub2RlKSxcblx0XHR9KTtcblx0XHR0aGlzLnN5bmNHZXRQcm1GaXRlclByZWxvYWRzKCk7XG5cdFx0dGhpcy5mb3JtT3B0aW9ucyA9IHRoaXMuYnVpbGRGb3JtT3B0aW9ucygpO1xuXHRcdGlmICh0aGlzLmlkICYmIHRoaXMubW9kZWxOYW1lKSB7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoMik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRGb3JtT3B0aW9ucygpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc291cmNlRm9ybSA9IHRoaXMuZm9ybSgpO1xuXHRcdFx0Y29uc3QgZm9ybUZpZWxkcyA9IHNvdXJjZUZvcm0/LmZpZWxkcyA/IFsuLi5zb3VyY2VGb3JtLmZpZWxkc10gOiBbXTtcblx0XHRcdGNvbnN0IGZpcnN0RmllbGQgPSBmb3JtRmllbGRzWzBdXG5cdFx0XHRcdD8geyAuLi5mb3JtRmllbGRzWzBdLCBncm91cDogQXJyYXkuaXNBcnJheShmb3JtRmllbGRzWzBdLmdyb3VwKSA/IFsuLi5mb3JtRmllbGRzWzBdLmdyb3VwXSA6IFtdIH1cblx0XHRcdFx0OiB7IGdyb3VwQ2xhc3M6ICdmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCcsIGdyb3VwOiBbXSB9O1xuXHRcdFx0Zm9ybUZpZWxkc1swXSA9IGZpcnN0RmllbGQgYXMgYW55O1xuXHRcdFx0Y29uc3QgZm9ybU9wdGlvbnMgPSB7XG5cdFx0XHRcdC4uLnNvdXJjZUZvcm0sXG5cdFx0XHRcdGZpZWxkczogZm9ybUZpZWxkcyxcblx0XHRcdH07XG5cdFx0XHRjb25zdCBhcHBlbmRHcm91cHMgPSB0aGlzLnJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKTtcblx0XHRcdGNvbnN0IG1haW5Hcm91cCA9IGZvcm1PcHRpb25zPy5maWVsZHM/LlswXT8uZ3JvdXA7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShtYWluR3JvdXApICYmIGFwcGVuZEdyb3Vwcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvcm1PcHRpb25zLmZpZWxkc1swXS5ncm91cCA9IFsuLi5tYWluR3JvdXAsIC4uLmFwcGVuZEdyb3Vwc107XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm9ybU9wdGlvbnM7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2J1aWxkRm9ybU9wdGlvbnMg5omn6KGM5aSx6LSl77yM5Zue6YCA5Yiw5Y6f5aeL6KGo5Y2V6YWN572uOicsIGVycm9yKTtcblx0XHRcdHJldHVybiB0aGlzLmZvcm0oKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKSB7XG5cdFx0Y29uc3QgYXBwZW5kR3JvdXBzID0gdGhpcy5sZWZ0UGFuZWwoKT8uYXBwZW5kR3JvdXBzO1xuXHRcdGlmICghYXBwZW5kR3JvdXBzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwYXJzZWQgPSB0eXBlb2YgYXBwZW5kR3JvdXBzID09PSAnZnVuY3Rpb24nID8gYXBwZW5kR3JvdXBzKHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KCkpIDogYXBwZW5kR3JvdXBzO1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKVxuXHRcdFx0XHQ/IGRlZXBDbG9uZShwYXJzZWQsIHRoaXMpLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuXHRcdFx0XHRcdFx0Li4uaXRlbSxcblx0XHRcdFx0XHRcdGV4dHJhOiB7XG5cdFx0XHRcdFx0XHRcdC4uLihpdGVtPy5leHRyYSB8fCB7fSksXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXlPbmx5OiB0cnVlLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0OiBbXTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignbGVmdFBhbmVsLmFwcGVuZEdyb3VwcyDmiafooYzlpLHotKU6JywgZXJyb3IpO1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgbWVyZ2VEZXRhaWxXaXRoTGVmdFBhbmVsKGRldGFpbDogYW55KSB7XG5cdFx0Y29uc3QgbWVyZ2VkRGV0YWlsID0ge1xuXHRcdFx0Li4uZGV0YWlsLFxuXHRcdFx0Li4uKHRoaXMucGFuZWxTZWxlY3RlZERhdGEoKSB8fCB7fSksXG5cdFx0XHQuLi4odGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gfHwge30pLFxuXHRcdH07XG5cdFx0Y29uc3QgbWVyZ2VkUmVzdWx0ID0gdGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25EZXRhaWxNZXJnZScsIHsgZGV0YWlsLCBtZXJnZWREZXRhaWwgfSk7XG5cdFx0cmV0dXJuIG1lcmdlZFJlc3VsdCA9PT0gdW5kZWZpbmVkID8gbWVyZ2VkRGV0YWlsIDogbWVyZ2VkUmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBiaW5kUGFnZUZvcm1TZXJ2aWNlKCkge1xuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGEkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdHRoaXMucmVmcmVzaFN1YkdyaWRDb2x1bW5WaXNpYmlsaXR5KCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS51cGRhdGVEYXRhQnlLZXkkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHsga2V5LCB2YWx1ZSB9KSA9PiB7XG5cdFx0XHR0aGlzLm1lcmdlVXBzZXJ0KHZhbHVlIGFzIFBheWxvYWRVcHNlcnQpO1xuXHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0dGhpcy5yZWZyZXNoU3ViR3JpZENvbHVtblZpc2liaWxpdHkoKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKSB7XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgoZ3JpZCkgPT4ge1xuXHRcdFx0aWYgKGdyaWQudHlwZSA9PSAnZm9ybScpIHtcblx0XHRcdFx0Y29uc3QgZm9ybURhdGEgPSB0aGlzLmdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5XTtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZm9ybURhdGEpKSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5XSA9IGZvcm1EYXRhWzBdID8/IHt9O1xuXHRcdFx0XHR9IGVsc2UgaWYgKGZvcm1EYXRhICYmIHR5cGVvZiBmb3JtRGF0YSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0aGlzLnN1YkZvcm1Nb2RlbFtncmlkLnN1YkRhdGFLZXldID0gZm9ybURhdGE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChncmlkLnR5cGUgPT0gJ2dyaWQnICYmICF0aGlzLmdldFBybS5kYXRhPy5oYXNPd25Qcm9wZXJ0eShncmlkLnN1YkRhdGFLZXkpKSB7XG5cdFx0XHRcdHRoaXMuZ2V0UHJtLmRhdGFbZ3JpZC5zdWJEYXRhS2V5XSA9IFtdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8vIOaPkuanvee7hOS7tiDmm7TmlrB1cHNlcnRcblx0cHJpdmF0ZSBtZXJnZVVwc2VydChwYXlsb2FkOiBQYXlsb2FkVXBzZXJ0KSB7XG5cdFx0Y29uc3QgeyBhY3Rpb24sIGZpZWxkLCBoZWFkZXJOYW1lLCBuZXdWYWx1ZSwgb2xkVmFsdWUsIHJlY29yZEluZGV4LCBpbmRleCwgZGF0YSwgc2VsZWN0TmFtZSB9ID0gcGF5bG9hZDtcblx0XHRsZXQgc3ViID0gdGhpcy51cHNlcnRQcm0uc3Vic2VydCFbaW5kZXhdO1xuXHRcdGlmIChhY3Rpb24gPT0gJ2FkZCcpIHtcblx0XHRcdGxldCBtYWluRmllbGQgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVtpbmRleF1bJ2dyaWRPcHRpb25zJ11bJ21haW5GaWVsZCddO1xuXHRcdFx0c3ViWydtYXB0bXAnXT8uc2V0KHJlY29yZEluZGV4LCB7IC4uLmRhdGEgfSk7XG5cdFx0XHRpZiAoZmllbGQgPT0gbWFpbkZpZWxkKSB7XG5cdFx0XHRcdHN1YlsnbG9ndG1wJ10/LnNldChyZWNvcmRJbmRleCEgKyBmaWVsZCEsIHsgbmV3VmFsdWU6IG5ld1ZhbHVlLCBpZDogMCwgbGFiZWw6IGhlYWRlck5hbWUgfSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChhY3Rpb24gPT09ICdlZGl0Jykge1xuXHRcdFx0bGV0IG86IGFueTtcblx0XHRcdGlmIChzdWJbJ21hcHRtcCddPy5oYXMocmVjb3JkSW5kZXghKSkge1xuXHRcdFx0XHRvID0gc3ViWydtYXB0bXAnXT8uZ2V0KHJlY29yZEluZGV4ISk7XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24obywgeyBbZmllbGRdOiBuZXdWYWx1ZSB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG8gPSB7IGlkOiBkYXRhWydpZCddLCBbZmllbGRdOiBuZXdWYWx1ZSB9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNlbGVjdE5hbWUpIHtcblx0XHRcdFx0b1tzZWxlY3ROYW1lXSA9IGRhdGFbc2VsZWN0TmFtZV07XG5cdFx0XHR9XG5cdFx0XHRzdWJbJ21hcHRtcCddPy5zZXQocmVjb3JkSW5kZXghLCBvKTtcblx0XHRcdHN1YlsnbG9ndG1wJ10/LnNldChyZWNvcmRJbmRleCEgKyBmaWVsZCEsIHtcblx0XHRcdFx0bmV3VmFsdWU6IG5ld1ZhbHVlLFxuXHRcdFx0XHRvbGRWYWx1ZTogb2xkVmFsdWUsXG5cdFx0XHRcdGlkOiBkYXRhWydpZCddLFxuXHRcdFx0XHRsYWJlbDogaGVhZGVyTmFtZSxcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSAnZGVsZXRlJykge1xuXHRcdFx0aWYgKHN1YlsnbWFwdG1wJ10/LmhhcyhyZWNvcmRJbmRleCEpKSB7XG5cdFx0XHRcdGxldCBkYXRhID0gc3ViWydtYXB0bXAnXT8uZ2V0KHJlY29yZEluZGV4ISk7XG5cdFx0XHRcdGRhdGFbZmllbGRdICYmIGRlbGV0ZSBkYXRhW2ZpZWxkXTtcblx0XHRcdFx0bGV0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdFx0XHRcdGtleXMubGVuZ3RoID09IDAgJiYgc3ViWydtYXB0bXAnXT8uZGVsZXRlKHJlY29yZEluZGV4KTtcblx0XHRcdH1cblx0XHRcdGlmIChzdWJbJ2xvZ3RtcCddPy5nZXQocmVjb3JkSW5kZXghICsgZmllbGQhKSkge1xuXHRcdFx0XHRzdWJbJ2xvZ3RtcCddPy5kZWxldGUocmVjb3JkSW5kZXghICsgZmllbGQhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bGV0IGR0OiBhbnlbXSA9IFtdO1xuXHRcdHN1YlsnbWFwdG1wJ10/LmZvckVhY2goKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiB7XG5cdFx0XHRkdC5wdXNoKHZhbHVlKTtcblx0XHR9KTtcblx0XHRzdWJbJ3N1YkRhdGEnXSA9IGR0O1xuXHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KHRydWUpO1xuXHRcdHRoaXMucmVmcmVzaFN1YkdyaWRDb2x1bW5WaXNpYmlsaXR5KCk7XG5cdH1cblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuaTE4bi5jaGFuZ2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuc3RlcHNWaXNpYmxlID0gZmFsc2U7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnN0ZXBzVmlzaWJsZSA9IHRydWU7XG5cdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0fSwgMTAwKTtcblx0XHR9KTtcblx0fVxuXG5cdHN1Ym1pdEZvcm0oKTogYW55IHtcblx0XHRsZXQgc3ViRm9ybSA9IHRydWU7XG5cdFx0aWYgKHRoaXMudGFiRm9ybS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnRhYkZvcm0uZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAoIWl0ZW0udmFsaWRhdGUoKSkge1xuXHRcdFx0XHRcdHN1YkZvcm0gPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmNGb3JtLnZhbGlkYXRlKCkgJiYgc3ViRm9ybSkge1xuXHRcdFx0bGV0IGNiOiBhbnkgPSB0aGlzLmlkID09PSAwID8gbnVsbCA6IHRoaXMudXBDYjtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KHRydWUpO1xuXHRcdFx0dHlwZW9mIHRoaXMuc2F2ZUZ1bmMoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5zYXZlRnVuYygpKHRoaXMudXBzZXJ0UHJtLCB0aGlzLmlkLCBjYikgOiB0aGlzLnVwc2VydChudWxsLCBjYik7XG5cdFx0fVxuXHR9XG5cblx0ZGVsUm93cyhlOiBhbnkpIHtcblx0XHRjb25zdCBncmlkVGFiID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXTtcblx0XHRjb25zdCBkZWxldGVGdW5jID0gZ3JpZFRhYi5kZWxldGVGdW5jO1xuXHRcdGNvbnNvbGUubG9nKCdkZWxSb3dzLS0tLScsIGUsIGdyaWRUYWIpO1xuXHRcdGNvbnN0IHN1YlRhYmxlID0gZ3JpZFRhYi5ncmlkT3B0aW9ucy5tb2RlbE5hbWU7XG5cdFx0Y29uc3QgaWRzID0gQXJyYXkuaXNBcnJheShlKSA/IGUgOiBbZV07XG5cblx0XHRsZXQgcHJtID0ge1xuXHRcdFx0bW9kZWxOYW1lOiBzdWJUYWJsZSxcblx0XHRcdGlkcyxcblx0XHR9O1xuXHRcdGxldCBkb25lQ2FsbGVkID0gZmFsc2U7XG5cdFx0Y29uc3QgZG9uZSA9ICgpID0+IHtcblx0XHRcdGlmIChkb25lQ2FsbGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGRvbmVDYWxsZWQgPSB0cnVlO1xuXHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKDQpO1xuXHRcdFx0dGhpcy5hY3Rpb24udXBkYXRlR3JpZEFjdGlvbih7IHR5cGU6ICdkZWxldGUnLCBkYXRhOiBpZHMgfSk7XG5cdFx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldChmYWxzZSk7XG5cdFx0fTtcblx0XHRpZiAoIWRlbGV0ZUZ1bmMpIHtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KHRydWUpO1xuXHRcdFx0dGhpcy53ZWJfcmVtb3ZlKHBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0ZG9uZSgpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KHRydWUpO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gZGVsZXRlRnVuYyhpZHMsIGdyaWRUYWIsIGRvbmUpO1xuXHRcdFx0aWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XG5cdFx0XHRcdHJlc3VsdC5zdWJzY3JpYmUoKCkgPT4gZG9uZSgpKTtcblx0XHRcdH0gZWxzZSBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHJlc3VsdC5zdWJzY3JpYmUoKCkgPT4gZG9uZSgpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0dXBDYihyZXM/OiBhbnkpIHtcblx0XHRpZiAocmVzLmlkID09IDApIHtcblx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCg1KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGxldCBlZGl0VXJsID0gYCR7dGhpcy5wYWdlVXJsfSR7cmVzLmlkfWA7XG5cdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtlZGl0VXJsXSk7XG5cdFx0XHR9LCAxNTAwKTtcblx0XHR9XG5cdFx0dGhpcy5hY3Rpb24uc2F2ZVNpZ25hbC5zZXQoZmFsc2UpO1xuXHRcdHRoaXMuY0Zvcm0uZmluYWxpemUoKTtcblx0fVxuXHQvLyBUT0RPIOaYr+WQpumcgOimgeaVsOaNrui9rOaNouWbnuiwg+WHveaVsFxuXHRvbk9rKGU6IGFueSkge1xuXHRcdGNvbnN0IGdyaWQgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV0uc2VsZWN0RGF0YSA9IFtdO1xuXG5cdFx0aWYgKGUubGVuZ3RoID4gMCkge1xuXHRcdFx0bGV0IHVuaXF1ZUtleXMgPSBbXTtcblx0XHRcdGlmIChncmlkLnVuaXF1ZUZpZWxkKSB7XG5cdFx0XHRcdGNvbnN0IHJvd0RhdGEgPSB0aGlzLmN1c3RvbUdyaWRcblx0XHRcdFx0XHQuZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhXG5cdFx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHRcdC5hcGkuZ2V0UmVuZGVyZWROb2RlcygpXG5cdFx0XHRcdFx0Lm1hcCgobm9kZSkgPT4gbm9kZS5kYXRhKTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ3Jvd0RhdGEtLS0tLScscm93RGF0YSlcblx0XHRcdFx0dW5pcXVlS2V5cyA9IHJvd0RhdGEubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bZ3JpZC51bmlxdWVGaWVsZCFdKTtcblx0XHRcdH1cblx0XHRcdC8vIGNvbnNvbGUubG9nKCd1bmlxdWVLZXlzLS0tLS0nLHVuaXF1ZUtleXMsKVxuXHRcdFx0ZS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0bGV0IG9iaiA9IGdyaWQuc2VsZWN0RGF0YUNiID8gZ3JpZC5zZWxlY3REYXRhQ2IoaXRlbSkgOiB7IC4uLml0ZW0gfTtcblx0XHRcdFx0aWYgKGdyaWQudW5pcXVlRmllbGQgJiYgdW5pcXVlS2V5cy5pbmNsdWRlcyhvYmpbZ3JpZC51bmlxdWVGaWVsZCFdIHx8ICcnKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRncmlkLnNlbGVjdERhdGEhLnB1c2gob2JqKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5hY3Rpb24uc2F2ZVNpZ25hbC5zZXQodHJ1ZSk7XG5cdFx0fVxuXHRcdHRoaXMuYWN0aW9uLnVwZGF0ZUdyaWRBY3Rpb24oeyB0eXBlOiAnYWRkJywgZGF0YTogZ3JpZC5zZWxlY3REYXRhIH0pO1xuXHRcdGlmICghIWdyaWQuc2xvdEtleSkge1xuXHRcdFx0Y29uc3QgeyBzdWJEYXRhS2V5IH0gPSBncmlkO1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UuYWRkRGF0YShzdWJEYXRhS2V5LCBncmlkLnNlbGVjdERhdGEpO1xuXHRcdFx0Ly8gdGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdH1cblx0fVxuXG5cdG9uQ2FuY2VsU2VsZWN0ZWQoZTogYW55KSB7XG5cdFx0Y29uc3QgZ3JpZCA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0bGV0IGRhdGFzOiBhbnkgPSBbXTtcblx0XHRlLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0Y29uc3QgZGF0YSA9IGdyaWQuc2VsZWN0RGF0YUNiID8geyAuLi5ncmlkLnNlbGVjdERhdGFDYihpdGVtKSB9IDogaXRlbTtcblx0XHRcdGRhdGFzLnB1c2goZGF0YSk7XG5cdFx0fSk7XG5cdFx0aWYgKGdyaWQudW5pcXVlRmllbGQpIHtcblx0XHRcdGNvbnN0IGtleXMgPSBkYXRhcy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtncmlkLnVuaXF1ZUZpZWxkXSk7XG5cdFx0XHRjb25zdCByb3dEYXRhID0gdGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmdldFJlbmRlcmVkTm9kZXMoKVxuXHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0bGV0IGRlbGV0ZWRSb3dzID0gcm93RGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4ga2V5cy5pbmNsdWRlcyhpdGVtW2dyaWQudW5pcXVlRmllbGRdKSk7XG5cdFx0XHR0aGlzLnN1YkRlbGV0ZUlkcyA9IGRlbGV0ZWRSb3dzLm1hcCgodjogYW55KSA9PiB2LmlkKS5maWx0ZXIoKHY6IGFueSkgPT4gdik7XG5cdFx0XHRjb25zdCBpZE5vdFJvd3MgPSBkZWxldGVkUm93cy5maWx0ZXIoKHY6IGFueSkgPT4gIXYuaWQpO1xuXHRcdFx0Ly8gY29uc29sZS5sb2coJ2lkTm90Um93cy0tLS0nLGlkTm90Um93cylcblx0XHRcdGNvbnN0IGRlbGV0ZU5vZGVzOiBhbnkgPSBbXTtcblx0XHRcdHRoaXMuY3VzdG9tR3JpZFxuXHRcdFx0XHQuZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhXG5cdFx0XHRcdC5nZXRHcmlkKClcblx0XHRcdFx0LmFwaS5mb3JFYWNoTm9kZSgobm9kZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0bGV0IG1haW4gPSBub2RlLmRhdGFbZ3JpZC51bmlxdWVGaWVsZF07XG5cdFx0XHRcdFx0bGV0IGlzRXhpdCA9IGlkTm90Um93cy5maW5kSW5kZXgoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBtYWluKTtcblx0XHRcdFx0XHRpZiAoaXNFeGl0ID4gLTEpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZU5vZGVzLnB1c2gobm9kZS5kYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0Ly8gaWYoZGVsZXRlZElkcy5sZW5ndGggPiAwKXtcblx0XHRcdC8vIFx0dGhpcy5kZWxSb3dzKGRlbGV0ZWRJZHMpXG5cdFx0XHQvLyB9IGVsc2Uge1xuXHRcdFx0dGhpcy5jdXN0b21HcmlkLmdldCh0aGlzLmluZGV4VmFsdWUpIS5zZWxlY3RSb3dzRGVsZXRlZChkZWxldGVOb2Rlcyk7XG5cdFx0XHQvLyB9XG5cdFx0fVxuXHR9XG5cdGdldERldGFpbChpbmRleD86IG51bWJlcikge1xuXHRcdGNvbnNvbGUubG9nKGBnZXREZXRhaWw6ICR7aW5kZXh9YCk7XG5cdFx0dGhpcy5zeW5jR2V0UHJtRm9yQ3VycmVudFZpZXcoKTtcblx0XHR0aGlzLndlYl9nZXQodGhpcy5nZXRQcm0pLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHR0aGlzLmRldGFpbENiKHRoaXMubWVyZ2VEZXRhaWxXaXRoTGVmdFBhbmVsKHJlcykpO1xuXHRcdH0pO1xuXHR9XG5cdC8vIOiOt+WPluivpuaDheWbnuiwg1xuXHRkZXRhaWxDYihyZXM6IGFueSkge1xuXHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSByZXM7XG5cdFx0dGhpcy51cGRhdGVUaXRsZShyZXMpO1xuXHRcdHRoaXMuc3luY1N1YkZvcm1Nb2RlbEZyb21EYXRhKCk7XG5cdFx0aWYgKHR5cGVvZiB0aGlzLmZvcm1EaXNhYmxlZCgpID09ICdmdW5jdGlvbicpIHtcblx0XHRcdHRoaXMuZm9ybURpc0Z1bmMoKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuaHJlZkJ0bkxpc3QoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNldEhyZWZWYWx1ZSgpO1xuXHRcdH1cblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0dGhpcy5yZWZyZXNoU3ViR3JpZENvbHVtblZpc2liaWxpdHkoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXHRzZXRIcmVmVmFsdWUoKSB7XG5cdFx0dGhpcy5ocmVmQnRuTGlzdCgpLm1hcCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgnc2VhcmNoQ291bnQnKSAmJiB0eXBlb2YgaXRlbS5zZWFyY2hDb3VudCA9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpdGVtLnNlYXJjaENvdW50LmNvbHVtbkZpbHRlcnMuZm9yRWFjaCgodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB2LmZpdGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR2LmZpdGVyID0gdi5maXRlcih0aGlzLmdldFBybS5kYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLndlYl9zZWFyY2hDb3VudChpdGVtLnNlYXJjaENvdW50KS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRcdGl0ZW0udmFsdWUgPSByZXMudG90YWxOdW0gfHwgMDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0dXBkYXRlVGl0bGUocmVzOiBhbnkpIHtcblx0XHRsZXQgbWFpbkZpZWxkID0gdGhpcy5mb3JtKCkubWFpbkZpZWxkO1xuXHRcdGxldCB0aXRsZSA9IHJlc1ttYWluRmllbGQhXTtcblx0XHR0aGlzLnVzZXJIaXN0b3J5U2VydmljZS5zZXRMYXN0VGl0bGUodGl0bGUpO1xuXHR9XG5cdGRhdGFTb3VyY2VTaG93KCkge1xuXHRcdGNvbnN0IGdyaWQgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdHRoaXMuY3VycmVudFNlbGVjdE1vZGVsQ29kZSA9IGdyaWQ/LnNlbGVjdE1vZGVsQ29kZSB8fCBudWxsO1xuXHRcdGNvbnNvbGUubG9nKGBkYXRhU291cmNlU2hvd2AsIHRoaXMuZ3JpZExpc3QoKSx0aGlzLnJlc29sdmVkR3JpZExpc3QoKSlcblx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHt9O1xuXHRcdHRoaXMuc2VsZWN0T3B0aW9ucyA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV1bJ3NlbGVjdE9wdGlvbnMnXSE7XG5cdFx0aWYgKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KT8uc2VhcmNoUHJtKSB7XG5cdFx0XHRsZXQgc2VhcmNoUHJtID0gZGVlcENsb25lKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KS5zZWFyY2hQcm0sIHRoaXMpO1xuXHRcdFx0c2VhcmNoUHJtLmNvbHVtbkZpbHRlcnM/LmZvckVhY2goKHY6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIHYuZml0ZXIgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHYuZml0ZXIgPSB2LmZpdGVyKG51bGwsIHRoaXMuZ2V0UHJtLmRhdGEgfHwgdGhpcy5jRm9ybS5tb2RlbCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHNlYXJjaFBybTtcblx0XHR9XG5cdFx0dGhpcy5kaWFsb2dTZWFyY2hQcm0ubW9kZWxOYW1lID0gdGhpcy5zZWxlY3RPcHRpb25zLm1vZGVsTmFtZTtcblx0XHRpZiAodGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGUpIHtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zdXBwcmVzc1Jvd0Rlc2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGU7XG5cdFx0XHRjb25zdCBpc1Jvd1NlbGVjdGFibGUgPSB0aGlzLnNlbGVjdE9wdGlvbnMuaXNSb3dTZWxlY3RhYmxlO1xuXHRcdFx0aWYgKHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlICE9ICdub25lJykge1xuXHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uID0ge1xuXHRcdFx0XHRcdG1vZGU6IHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID09ICdzaW5nbGUnID8gJ3NpbmdsZVJvdycgOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGlzUm93U2VsZWN0YWJsZTogaXNSb3dTZWxlY3RhYmxlID8gaXNSb3dTZWxlY3RhYmxlIDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gY29uc29sZS5sb2coJyF0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uLS0tLS0nLCF0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uKVxuXHRcdGlmIChncmlkLnVuaXF1ZUZpZWxkKSB7XG5cdFx0XHRjb25zdCByb3dEYXRhID0gdGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmdldFJlbmRlcmVkTm9kZXMoKVxuXHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0dGhpcy5zZWxlY3Rpb25LZXlzID0gcm93RGF0YT8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bZ3JpZC51bmlxdWVGaWVsZCFdKSB8fCBbXTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCd0aGlzLnNlbGVjdGlvbktleXMtLS0tJyx0aGlzLnNlbGVjdGlvbktleXMpXG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24gPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbi5jaGVja2JveGVzID0gKHBhcmFtcykgPT4ge1xuXHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5ICE9ICcnXG5cdFx0XHRcdFx0XHRcdD8gcm93RGF0YS5maW5kKCh2OiBhbnkpID0+IHZbZ3JpZC51bmlxdWVGaWVsZF0gPT0gcGFyYW1zLmRhdGFbdGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkhXSlcblx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5pZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24pIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHtcblx0XHRcdFx0XHRtb2RlOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGNoZWNrYm94ZXM6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkgIT0gJydcblx0XHRcdFx0XHRcdFx0XHQ/IHJvd0RhdGEuZmluZCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IHBhcmFtcy5kYXRhW3RoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5IV0pXG5cdFx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmlkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2VsZWN0aW9uS2V5cyA9IFtdO1xuXHRcdH1cblx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXHR9XG5cblx0Z29SdW4oZGF0YTogYW55KSB7XG5cdFx0aWYgKHR5cGVvZiBkYXRhLnVybCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGV0IHVybCA9IGRhdGEudXJsKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnd2FybicsIHN1bW1hcnk6ICdXYXJuJywgZGV0YWlsOiAn6K+36YWN572u6Lez6L2s6ZO+5o6lJyB9KTtcblx0XHR9XG5cdH1cblxuXHRhdXRoQ2xpY2soYnRuOiBhbnkpIHtcblx0XHRpZiAoYnRuLmhhc093blByb3BlcnR5KCdvbkNsaWNrJykpIHtcblx0XHRcdGJ0bi5vbkNsaWNrKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdH1cblx0fVxuXHRzdGF0dXNDaGFuZ2UodmFsdWU6IGFueSwgY3VzdG9tU3RlcHM6IFN0ZXBzQ29tcG9uZW50KSB7XG5cdFx0aWYgKHRoaXMuYXV0aExldmVsKCkgPCA0IHx8ICF0aGlzLnN0YXR1c0NvbmYoKS5pc0NsaWNrKSByZXR1cm47XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGxldCBwYXJhbTogYW55ID0ge1xuXHRcdFx0XHRtb2RlbE5hbWU6IHRoaXMubW9kZWxOYW1lLFxuXHRcdFx0XHRkYXRhOiB7IGlkOiB0aGlzLmlkLCBbdGhpcy5zdGF0dXNLZXkoKV06IHZhbHVlIH0sXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHRoaXMuaXNMb2cpIHtcblx0XHRcdFx0cGFyYW0ubG9nTW9kZWwgPSBgJHt0aGlzLm1vZGVsTmFtZX1Mb2dgO1xuXHRcdFx0XHRwYXJhbS5sb2cgPSB7XG5cdFx0XHRcdFx0cGlkOiB0aGlzLmlkLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGBb54q25oCBXSAke3RoaXMuZ2V0UHJtLmRhdGEhW3RoaXMuc3RhdHVzS2V5KCldfSAtPiAke3ZhbHVlfWAsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLndlYl93cml0ZShwYXJhbSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0dGhpcy5nZXREZXRhaWwoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhID0gT2JqZWN0LmFzc2lnbih0aGlzLmdldFBybS5kYXRhIHx8IHt9LCB7XG5cdFx0XHRcdFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUsXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMudXBzZXJ0UHJtLmFkZERhdGEhW3RoaXMuc3RhdHVzS2V5KCldID0gdmFsdWU7XG5cdFx0XHR0aGlzLmNGb3JtLnRyaWdnZXJNb2RlbEVmZmVjdCh7IFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUgfSk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTdWJHcmlkQ29sdW1uVmlzaWJpbGl0eSgpO1xuXHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHQvLyBjdXN0b21TdGVwcy5yZWZyZXNoU3RlcHMoKVxuXHRcdH1cblx0fVxuXG5cdGZvcm1EaXNGdW5jKCkge1xuXHRcdGxldCBkYXRhID0gdGhpcy5mb3JtRGlzYWJsZWQoKSEodGhpcy5nZXRQcm0uZGF0YSk7XG5cdFx0aWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcblx0XHRcdHRoaXMuc2F2ZUJ0bkRpc2FibGUgPSBkYXRhO1xuXHRcdFx0dGhpcy5ncmlkRGlzYWJsZSA9IGRhdGE7XG5cdFx0XHR0aGlzLmRpc2FibGVGb3JtKGRhdGEpO1xuXHRcdFx0dGhpcy5kaXNhYmxlZENoaWxkKGRhdGEpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRjb25zdCBkaXNhYmVsZCA9IGRhdGEuZGlzYWJsZWQ7XG5cdFx0XHRjb25zdCBmaWx0ZXJzID0gZGF0YS5maWx0ZXJzIHx8IFtdO1xuXHRcdFx0aWYgKCFmaWx0ZXJzLmluY2x1ZGVzKCdmb3JtJykpIHtcblx0XHRcdFx0dGhpcy5kaXNhYmxlRm9ybShkaXNhYmVsZCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWZpbHRlcnMuaW5jbHVkZXMoJ2dyaWQnKSkge1xuXHRcdFx0XHR0aGlzLmdyaWREaXNhYmxlID0gZGlzYWJlbGQ7XG5cdFx0XHRcdHRoaXMuZGlzYWJsZWRDaGlsZChkaXNhYmVsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGRpc2FibGVGb3JtKGRpc2FibGU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmZvcm1PcHRpb25zLmZpZWxkcz8uZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0di5ncm91cD8uZm9yRWFjaCgoZzogYW55KSA9PiB7XG5cdFx0XHRcdGxldCBmaWVsZERpc2FibGVkID0gZ1tmb3JtVHlwZVRvUHJvcHNbZy50eXBlXV0uZGlzYWJsZWQgfHwgZmFsc2U7XG5cdFx0XHRcdGlmIChkaXNhYmxlKSB7XG5cdFx0XHRcdFx0dGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEubWFya0FzUHJpc3RpbmUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCFmaWVsZERpc2FibGVkICYmIHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdGRpc2FibGVkQ2hpbGQoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mb3JFYWNoKCh2LCBpbmRleDogYW55KSA9PiB7XG5cdFx0XHRpZih2Lmhhc093blByb3BlcnR5KCdncmlkQ3VzdG9tRGlzYWJsZWQnKSAmJiB0eXBlb2Ygdi5ncmlkQ3VzdG9tRGlzYWJsZWQgPT09ICdmdW5jdGlvbicpe1xuXHRcdFx0XHRcdHYuZ3JpZERpc2FibGVkID0gdi5ncmlkQ3VzdG9tRGlzYWJsZWQodGhpcy5nZXRQcm0uZGF0YSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0di5ncmlkRGlzYWJsZWQgPSBkaXNhYmxlZDtcblx0XHRcdFx0fVxuXHRcdFx0aWYgKHYudHlwZSA9PSAnZ3JpZCcpIHtcblx0XHRcdFx0di5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2LmdyaWREaXNhYmxlZCAmJiBpdGVtLmhhc093blByb3BlcnR5KCdlZGl0YWJsZScpKSB7XG5cdFx0XHRcdFx0XHRpdGVtLmVkaXRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIOWQjOS4gOS4qumhtemdomRpc2FibGVkIGZhbHNlICA9PiB0cnVlXG5cdFx0XHRcdFx0aWYgKCF2LmdyaWREaXNhYmxlZCAmJiBpdGVtLmhhc093blByb3BlcnR5KCdlZGl0YWJsZScpICYmICFpdGVtLmVkaXRhYmxlICYmIHR5cGVvZiBpdGVtLmVkaXRhYmxlID09PSAnYm9vbGVhbicpIHtcblx0XHRcdFx0XHRcdGl0ZW0uZWRpdGFibGUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHR5cGVvZiB0aGlzLmN1c3RvbUdyaWQ/LmdldChpbmRleCkhLmdldEdyaWQgPT0nZnVuY3Rpb24nICYmIHRoaXMuY3VzdG9tR3JpZD8uZ2V0KGluZGV4KSEuZ2V0R3JpZCgpLmFwaS5zZXRHcmlkT3B0aW9uKCdjb2x1bW5EZWZzJywgdi5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzKTtcblx0XHRcdH0gZWxzZSBpZiAodi50eXBlID09ICdmb3JtJykge1xuXHRcdFx0XHR2LmZpZWxkcz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0aXRlbS5ncm91cD8uZm9yRWFjaCgoZzogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRsZXQgZmllbGREaXNhYmxlZCA9IGdbZm9ybVR5cGVUb1Byb3BzW2cudHlwZV1dLmRpc2FibGVkIHx8IGZhbHNlO1xuXHRcdFx0XHRcdFx0aWYgKHYuZ3JpZERpc2FibGVkKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMudGFiRm9ybS5nZXQoaW5kZXgpIS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEubWFya0FzUHJpc3RpbmUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnRhYkZvcm0uZ2V0KGluZGV4KSEuZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0IWZpZWxkRGlzYWJsZWQgJiYgdGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0c2V0RGlzYWJsZWQoKSB7XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgodiwgaW5kZXg6IGFueSkgPT4ge1xuXHRcdFx0aWYgKHYudHlwZSA9PSAnZm9ybScpIHtcblx0XHRcdFx0di5maWVsZHM/LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRcdGl0ZW0uZ3JvdXA/LmZvckVhY2goKGc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy50YWJGb3JtLmdldChpbmRleCkhLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0dGFiQ2xpY2soKSB7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLnRhYkZvcm0uZ2V0KHRoaXMuaW5kZXhWYWx1ZSkgJiYgdGhpcy50YWJGb3JtLmdldCh0aGlzLmluZGV4VmFsdWUpIS5yZUNhbGNMYWJlbFNpemUoKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0sIDApO1xuXHR9XG5cdHRvZ2dsZUxvZygpIHtcblx0XHR0aGlzLnNpZGViYXJNb2RlLnNldCh0aGlzLnNpZGViYXJNb2RlKCkgPT09ICdsZWZ0JyA/ICdyaWdodCcgOiAnbGVmdCcpO1xuXHR9XG5cblx0cHJpdmF0ZSByZWJ1aWxkU2xvdE1hcCgpIHtcblx0XHR0aGlzLnNsb3RNYXAuY2xlYXIoKTtcblx0XHRmb3IgKGNvbnN0IHNsb3Qgb2YgdGhpcy5wYWdlRm9ybVNsb3RzPy50b0FycmF5KCkgPz8gW10pIHtcblx0XHRcdGNvbnN0IHNsb3RLZXkgPSBzbG90LnNsb3RLZXkoKTtcblx0XHRcdGlmICghdGhpcy5zbG90TWFwLmhhcyhzbG90S2V5KSkge1xuXHRcdFx0XHR0aGlzLnNsb3RNYXAuc2V0KHNsb3RLZXksIHNsb3QpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKSB7XG5cdFx0dGhpcy5zbG90UmVuZGVyU3RhdGVzID0gKHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpID8/IFtdKS5tYXAoKGdyaWQsIGluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBzbG90S2V5ID0gdGhpcy5yZXNvbHZlU2xvdEtleShncmlkKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNsb3Q6IHNsb3RLZXkgPyB0aGlzLnNsb3RNYXAuZ2V0KHNsb3RLZXkpIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRjb250ZXh0OiB0aGlzLmdldE9yQ3JlYXRlUGFnZUZvcm1TbG90Q29udGV4dChncmlkLCBpbmRleCwgc2xvdEtleSksXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRPckNyZWF0ZVBhZ2VGb3JtU2xvdENvbnRleHQoZ3JpZDogR3JpZExpc3QsIGluZGV4OiBudW1iZXIsIHNsb3RLZXk6IHN0cmluZyk6IFBhZ2VGb3JtU2xvdENvbnRleHQge1xuXHRcdGNvbnN0IHJlbmRlcktleSA9IHRoaXMuZ2V0R3JpZFJlbmRlcktleShncmlkLCBpbmRleCk7XG5cdFx0bGV0IGNvbnRleHQgPSB0aGlzLnNsb3RDb250ZXh0TWFwLmdldChyZW5kZXJLZXkpO1xuXHRcdGlmICghY29udGV4dCkge1xuXHRcdFx0Y29udGV4dCA9IHt9IGFzIFBhZ2VGb3JtU2xvdENvbnRleHQ7XG5cdFx0XHR0aGlzLnNsb3RDb250ZXh0TWFwLnNldChyZW5kZXJLZXksIGNvbnRleHQpO1xuXHRcdH1cblxuXHRcdGNvbnRleHQuJGltcGxpY2l0ID0gY29udGV4dDtcblx0XHRjb250ZXh0LnNsb3RLZXkgPSBzbG90S2V5O1xuXHRcdGNvbnRleHQuZ3JpZCA9IGdyaWQ7XG5cdFx0Y29udGV4dC5pbmRleCA9IGluZGV4O1xuXHRcdGNvbnRleHQucGFnZUZvcm0gPSB0aGlzO1xuXHRcdGNvbnRleHQuZGF0YSA9ICh0aGlzLmdldFBybS5kYXRhID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRjb250ZXh0Lm1vZGVsID0gZ3JpZC50eXBlID09PSAnZ3JpZCcgPyB0aGlzLmdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5IV0gOiB0aGlzLnN1YkZvcm1Nb2RlbFtncmlkLnN1YkRhdGFLZXkhXSB8fCB7fTtcblx0XHRjb250ZXh0LnVwc2VydCA9IHRoaXMudXBzZXJ0UHJtO1xuXHRcdGNvbnRleHQuYWN0aXZlID0gdGhpcy5pbmRleFZhbHVlID09PSBpbmRleDtcblx0XHRjb250ZXh0LmdyaWREaXNhYmxlID0gdGhpcy5ncmlkRGlzYWJsZTtcblx0XHRyZXR1cm4gY29udGV4dDtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVNsb3RLZXkoZ3JpZDogR3JpZExpc3QpOiBzdHJpbmcge1xuXHRcdHJldHVybiBncmlkLnNsb3RLZXkgfHwgZ3JpZC5zdWJEYXRhS2V5O1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRHcmlkUmVuZGVyS2V5KGdyaWQ6IEdyaWRMaXN0LCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZ3JpZC5ncmlkT3B0aW9ucz8ubW9kZWxOYW1lIHx8IGdyaWQuc3ViRGF0YUtleSB8fCBncmlkLnNsb3RLZXkgfHwgYCR7aW5kZXh9YDtcblx0fVxuXG5cdGdldEN1cnJlbnRHcmlkKCkge1xuXHRcdHJldHVybiB0aGlzLnJlc29sdmVkR3JpZExpc3QoKT8uW3RoaXMuaW5kZXhWYWx1ZV0gPz8gbnVsbDtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q3VycmVudFN1Yk1vZGVsTmFtZSgpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRpZiAoIWN1cnJlbnRHcmlkKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdHJldHVybiBjdXJyZW50R3JpZC50eXBlID09PSAnZ3JpZCcgPyBjdXJyZW50R3JpZC5ncmlkT3B0aW9ucz8ubW9kZWxOYW1lIHx8ICcnIDogY3VycmVudEdyaWQubW9kZWxOYW1lIHx8ICcnO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRTdWJzZXJ0QnlHcmlkKGdyaWQ6IEdyaWRMaXN0IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuXHRcdGlmICghZ3JpZCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGNvbnN0IHN1Yk1vZGVsTmFtZSA9IGdyaWQudHlwZSA9PT0gJ2dyaWQnID8gZ3JpZC5ncmlkT3B0aW9ucz8ubW9kZWxOYW1lIDogZ3JpZFsnbW9kZWxOYW1lJ107XG5cdFx0aWYgKCFzdWJNb2RlbE5hbWUpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy51cHNlcnRQcm0uc3Vic2VydD8uZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnN1Yk1vZGVsTmFtZSA9PT0gc3ViTW9kZWxOYW1lKSA/PyBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBjbG9uZVN1YnNlcnQoc3Vic2VydDogYW55KSB7XG5cdFx0aWYgKCFzdWJzZXJ0KSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLnN1YnNlcnQsXG5cdFx0XHRzdWJEYXRhOiBBcnJheS5pc0FycmF5KHN1YnNlcnQuc3ViRGF0YSkgPyBzdWJzZXJ0LnN1YkRhdGEubWFwKChpdGVtOiBhbnkpID0+ICh7IC4uLml0ZW0gfSkpIDogW10sXG5cdFx0XHRtYXB0bXA6IG5ldyBNYXA8YW55LCBhbnk+KHN1YnNlcnQubWFwdG1wID8gKEFycmF5LmZyb20oc3Vic2VydC5tYXB0bXAuZW50cmllcygpKSBhcyBbYW55LCBhbnldW10pIDogW10pLFxuXHRcdFx0bG9ndG1wOiBuZXcgTWFwPGFueSwgYW55PihzdWJzZXJ0LmxvZ3RtcCA/IChBcnJheS5mcm9tKHN1YnNlcnQubG9ndG1wLmVudHJpZXMoKSkgYXMgW2FueSwgYW55XVtdKSA6IFtdKSxcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDdXJyZW50Rm9ybUNvbXBvbmVudCgpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRpZiAoIWN1cnJlbnRHcmlkIHx8IGN1cnJlbnRHcmlkLnR5cGUgPT09ICdncmlkJykge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGNvbnN0IGZvcm1JbmRleCA9XG5cdFx0XHR0aGlzLnJlc29sdmVkR3JpZExpc3QoKVxuXHRcdFx0XHQuc2xpY2UoMCwgdGhpcy5pbmRleFZhbHVlICsgMSlcblx0XHRcdFx0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnR5cGUgIT09ICdncmlkJykubGVuZ3RoIC0gMTtcblx0XHRyZXR1cm4gZm9ybUluZGV4ID49IDAgPyAodGhpcy50YWJGb3JtLmdldChmb3JtSW5kZXgpID8/IG51bGwpIDogbnVsbDtcblx0fVxuXG5cdGNhblNob3dDdXJyZW50VGFiU2F2ZShncmlkPzogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSBncmlkID8/IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRpZiAoIWN1cnJlbnRHcmlkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmF1dGhMZXZlbCgpID49IDMgJiYgY3VycmVudEdyaWQgPT09IHRoaXMuZ2V0Q3VycmVudEdyaWQoKSAmJiBjdXJyZW50R3JpZC5zdWJTYXZlPy5lbmFibGVkID09PSB0cnVlICYmICF0aGlzLmlzU3ViU2F2ZUhpZGRlbihjdXJyZW50R3JpZCk7XG5cdH1cblxuXHRnZXRDdXJyZW50VGFiU2F2ZUxhYmVsKGdyaWQ/OiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IGdyaWQgPz8gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdHJldHVybiBjdXJyZW50R3JpZD8uc3ViU2F2ZT8ubGFiZWwgfHwgJ+S/neWtmCc7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVN1YkJ1dHRvbkhpZGRlbkNvbnRleHQoZ3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3QgaW5kZXggPSBncmlkID8gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuaW5kZXhPZihncmlkKSA6IC0xO1xuXHRcdHJldHVybiB7XG5cdFx0XHRkYXRhOiB0aGlzLmdldFBybS5kYXRhIHx8IHRoaXMuY0Zvcm0/Lm1vZGVsPy4oKSxcblx0XHRcdGdyaWQsXG5cdFx0XHRwYWdlRm9ybTogdGhpcyxcblx0XHRcdGNvbXBvbmVudDogdGhpcy5ydW50aW1lQ29udGV4dD8uWydjb21wb25lbnQnXSB8fCB0aGlzLFxuXHRcdFx0aW5kZXgsXG5cdFx0XHRhdXRoTGV2ZWw6IHRoaXMuYXV0aExldmVsKCksXG5cdFx0XHRnZXRQcm06IHRoaXMuZ2V0UHJtLFxuXHRcdFx0cnVudGltZUNvbnRleHQ6IHRoaXMucnVudGltZUNvbnRleHQsXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVN1YkJ1dHRvbkhpZGRlbihncmlkOiBHcmlkTGlzdCB8IG51bGwgfCB1bmRlZmluZWQsIGhpZGRlbjogYW55KSB7XG5cdFx0aWYgKHR5cGVvZiBoaWRkZW4gIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiAhIWhpZGRlbi5jYWxsKHRoaXMucnVudGltZUNvbnRleHQ/LlsnY29tcG9uZW50J10gfHwgdGhpcywgdGhpcy5jcmVhdGVTdWJCdXR0b25IaWRkZW5Db250ZXh0KGdyaWQgfHwgbnVsbCkpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCflrZDooajmjInpkq7pmpDol4/mnaHku7bmiafooYzlpLHotKU6JywgZXJyb3IsIGdyaWQpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzU3ViU2F2ZUhpZGRlbihncmlkPzogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSBncmlkID8/IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlU3ViQnV0dG9uSGlkZGVuKGN1cnJlbnRHcmlkLCBjdXJyZW50R3JpZD8uc3ViU2F2ZT8uaGlkZGVuKTtcblx0fVxuXG5cdGlzU3ViQWRkSGlkZGVuKGdyaWQ/OiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IGdyaWQgPz8gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdHJldHVybiB0aGlzLnJlc29sdmVTdWJCdXR0b25IaWRkZW4oY3VycmVudEdyaWQsIGN1cnJlbnRHcmlkPy5hZGRIaWRkZW4pO1xuXHR9XG5cblx0aXNTdWJEZWxldGVIaWRkZW4oZ3JpZD86IEdyaWRMaXN0IHwgbnVsbCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gZ3JpZCA/PyB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZVN1YkJ1dHRvbkhpZGRlbihjdXJyZW50R3JpZCwgY3VycmVudEdyaWQ/LmRlbGV0ZUhpZGRlbik7XG5cdH1cblxuXHRwcml2YXRlIGhhc01haW5QZW5kaW5nQ2hhbmdlcygpIHtcblx0XHRjb25zdCBhZGREYXRhID0gdGhpcy51cHNlcnRQcm0uYWRkRGF0YSB8fCB7fTtcblx0XHRjb25zdCB1cGREYXRhID0gdGhpcy51cHNlcnRQcm0udXBkRGF0YSB8fCB7fTtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMoYWRkRGF0YSkubGVuZ3RoID4gMCB8fCBPYmplY3Qua2V5cyh1cGREYXRhKS5sZW5ndGggPiAwO1xuXHR9XG5cblx0cHJpdmF0ZSBoYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydDogYW55KSB7XG5cdFx0aWYgKCFzdWJzZXJ0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiAhIShcblx0XHRcdChzdWJzZXJ0LnN1YkRhdGEgJiYgc3Vic2VydC5zdWJEYXRhLmxlbmd0aCA+IDApIHx8XG5cdFx0XHQoc3Vic2VydC5tYXB0bXAgJiYgc3Vic2VydC5tYXB0bXAuc2l6ZSA+IDApIHx8XG5cdFx0XHQoc3Vic2VydC5sb2d0bXAgJiYgc3Vic2VydC5sb2d0bXAuc2l6ZSA+IDApXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdERpcnR5TWFpbkRhdGFTbmFwc2hvdCgpIHtcblx0XHRjb25zdCBkaXJ0eVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFsuLi5PYmplY3Qua2V5cyh0aGlzLnVwc2VydFBybS5hZGREYXRhIHx8IHt9KSwgLi4uT2JqZWN0LmtleXModGhpcy51cHNlcnRQcm0udXBkRGF0YSB8fCB7fSldKTtcblx0XHRjb25zdCBzbmFwc2hvdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRcdGRpcnR5UGF0aHMuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRzbmFwc2hvdFtrZXldID0gZmllbGRVdGlscy5nZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBrZXkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzbmFwc2hvdDtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdE90aGVyRGlydHlTdWJEYXRhU25hcHNob3QoY3VycmVudEdyaWQ6IEdyaWRMaXN0IHwgbnVsbCkge1xuXHRcdGNvbnN0IHNuYXBzaG90cyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgoZ3JpZCkgPT4ge1xuXHRcdFx0aWYgKCFncmlkIHx8IGdyaWQgPT09IGN1cnJlbnRHcmlkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHN1YnNlcnQgPSB0aGlzLmdldFN1YnNlcnRCeUdyaWQoZ3JpZCk7XG5cdFx0XHRpZiAoIXRoaXMuaGFzU3Vic2VydFBlbmRpbmdDaGFuZ2VzKHN1YnNlcnQpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGN1cnJlbnREYXRhID0gZ3JpZC50eXBlID09PSAnZ3JpZCcgPyB0aGlzLmdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5XSB8fCBbXSA6IHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleV0gfHwge307XG5cdFx0XHRzbmFwc2hvdHMuc2V0KGdyaWQuc3ViRGF0YUtleSwgQXJyYXkuaXNBcnJheShjdXJyZW50RGF0YSkgPyBjdXJyZW50RGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiB7IC4uLmN1cnJlbnREYXRhIH0pO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzbmFwc2hvdHM7XG5cdH1cblxuXHRwcml2YXRlIHJlc3RvcmVEaXJ0eVNuYXBzaG90cyhtYWluRGF0YVNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBzdWJEYXRhU25hcHNob3RzOiBNYXA8c3RyaW5nLCBhbnk+KSB7XG5cdFx0T2JqZWN0LmVudHJpZXMobWFpbkRhdGFTbmFwc2hvdCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIGtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXHRcdHN1YkRhdGFTbmFwc2hvdHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuXHRcdFx0dGhpcy5nZXRQcm0uZGF0YVtrZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiB7IC4uLnZhbHVlIH07XG5cdFx0fSk7XG5cdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIHJlZnJlc2hDdXJyZW50VGFiRGF0YShjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCB8fCAhdGhpcy5pZCB8fCAhdGhpcy5tb2RlbE5hbWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbWFpbkRhdGFTbmFwc2hvdCA9IHRoaXMuY29sbGVjdERpcnR5TWFpbkRhdGFTbmFwc2hvdCgpO1xuXHRcdGNvbnN0IG90aGVyRGlydHlTbmFwc2hvdHMgPSB0aGlzLmNvbGxlY3RPdGhlckRpcnR5U3ViRGF0YVNuYXBzaG90KGN1cnJlbnRHcmlkKTtcblx0XHR0aGlzLnN5bmNHZXRQcm1Gb3JDdXJyZW50VmlldygpO1xuXHRcdHRoaXMud2ViX2dldCh0aGlzLmdldFBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZGV0YWlsQ2IodGhpcy5tZXJnZURldGFpbFdpdGhMZWZ0UGFuZWwocmVzKSk7XG5cdFx0XHR0aGlzLnJlc3RvcmVEaXJ0eVNuYXBzaG90cyhtYWluRGF0YVNuYXBzaG90LCBvdGhlckRpcnR5U25hcHNob3RzKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzZXRDdXJyZW50VGFiVXBzZXJ0U3RhdGUoZ3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3Qgc3Vic2VydCA9IHRoaXMuZ2V0U3Vic2VydEJ5R3JpZChncmlkKTtcblx0XHRpZiAoIXN1YnNlcnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c3Vic2VydC5tYXB0bXAgPSBuZXcgTWFwKCk7XG5cdFx0c3Vic2VydC5sb2d0bXAgPSBuZXcgTWFwKCk7XG5cdFx0c3Vic2VydC5zdWJEYXRhID0gW107XG5cdH1cblxuXHRwcml2YXRlIHJlY2FsY3VsYXRlU2F2ZVNpZ25hbCgpIHtcblx0XHRjb25zdCBoYXNEaXJ0eVN1YnNlcnRzID0gKHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQgfHwgW10pLnNvbWUoKHN1YnNlcnQ6IGFueSkgPT4gdGhpcy5oYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydCkpO1xuXHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KHRoaXMuaGFzTWFpblBlbmRpbmdDaGFuZ2VzKCkgfHwgaGFzRGlydHlTdWJzZXJ0cyk7XG5cdH1cblxuXHRidWlsZEN1cnJlbnRUYWJVcHNlcnQoKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0Y29uc3QgY3VycmVudFN1YnNlcnQgPSB0aGlzLmdldFN1YnNlcnRCeUdyaWQoY3VycmVudEdyaWQpO1xuXHRcdGlmICghY3VycmVudEdyaWQgfHwgIWN1cnJlbnRTdWJzZXJ0IHx8ICF0aGlzLmlkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgcGF5bG9hZDogYW55ID0ge1xuXHRcdFx0bW9kZWxOYW1lOiB0aGlzLm1vZGVsTmFtZSxcblx0XHRcdGFkZERhdGE6IHtcblx0XHRcdFx0Li4uKHRoaXMudXBzZXJ0UHJtLmFkZERhdGEgfHwge30pLFxuXHRcdFx0fSxcblx0XHRcdHVwZERhdGE6IHtcblx0XHRcdFx0Li4uKHRoaXMudXBzZXJ0UHJtLnVwZERhdGEgfHwge30pLFxuXHRcdFx0XHRpZDogdGhpcy5pZCxcblx0XHRcdH0sXG5cdFx0XHRzdWJzZXJ0OiBbdGhpcy5jbG9uZVN1YnNlcnQoY3VycmVudFN1YnNlcnQpXSxcblx0XHR9O1xuXHRcdGlmICh0aGlzLmlzTG9nKSB7XG5cdFx0XHRwYXlsb2FkLmxvZ01vZGVsID0gYCR7dGhpcy5tb2RlbE5hbWV9TG9nYDtcblx0XHRcdHBheWxvYWQubG9nID0ge1xuXHRcdFx0XHQuLi4odGhpcy51cHNlcnRQcm0ubG9nIHx8IHt9KSxcblx0XHRcdFx0cGlkOiB0aGlzLmlkLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZUN1cnJlbnRUYWJTYXZlU3VjY2VzcyhjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsLCBjYj86IEZ1bmN0aW9uLCByZXM/OiBhbnkpIHtcblx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldChmYWxzZSk7XG5cdFx0dGhpcy5yZXNldEN1cnJlbnRUYWJVcHNlcnRTdGF0ZShjdXJyZW50R3JpZCk7XG5cdFx0dGhpcy5yZWZyZXNoQ3VycmVudFRhYkRhdGEoY3VycmVudEdyaWQpO1xuXHRcdHRoaXMucmVjYWxjdWxhdGVTYXZlU2lnbmFsKCk7XG5cdFx0Y2IgJiYgY2IocmVzKTtcblx0fVxuXG5cdHNhdmVDdXJyZW50VGFiKGNiPzogRnVuY3Rpb24pIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRjb25zdCBwYXlsb2FkID0gdGhpcy5idWlsZEN1cnJlbnRUYWJVcHNlcnQoKTtcblx0XHRpZiAoIXBheWxvYWQpIHtcblx0XHRcdHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgc3VtbWFyeTogJ1dhcm4nLCBkZXRhaWw6ICfor7flhYjkv53lrZjkuLvooagnIH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoY3VycmVudEdyaWQ/LnR5cGUgIT09ICdncmlkJykge1xuXHRcdFx0Y29uc3QgY3VycmVudEZvcm0gPSB0aGlzLmdldEN1cnJlbnRGb3JtQ29tcG9uZW50KCk7XG5cdFx0XHRpZiAoY3VycmVudEZvcm0gJiYgIWN1cnJlbnRGb3JtLnZhbGlkYXRlKCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldCh0cnVlKTtcblx0XHRjb25zdCBmaW5hbGl6ZVNhdmUgPSAocmVzPzogYW55KSA9PiB0aGlzLmhhbmRsZUN1cnJlbnRUYWJTYXZlU3VjY2VzcyhjdXJyZW50R3JpZCwgY2IsIHJlcyk7XG5cdFx0aWYgKHR5cGVvZiBjdXJyZW50R3JpZD8uc3ViU2F2ZT8uc2F2ZUZ1bmMgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGN1cnJlbnRHcmlkLnN1YlNhdmUuc2F2ZUZ1bmMocGF5bG9hZCwgdGhpcy5pZCwgZmluYWxpemVTYXZlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy53ZWJfdXBzZXJ0KHBheWxvYWQpXG5cdFx0XHQucGlwZShcblx0XHRcdFx0ZmluYWxpemUoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHRcdFx0fSksXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0ZmluYWxpemVTYXZlKHJlcyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFkZFJvd0NsaWNrSGFuZGxlcihncmlkOiBHcmlkTGlzdCkge1xuXHRcdGNvbnN0IHN1YkRhdGFLZXkgPSBncmlkLnN1YkRhdGFLZXk7XG5cblx0XHRpZiAoZ3JpZC5zdWJUYWJsZVNvdXJjZSA9PT0gJ2hhbmRsZScpIHtcblx0XHRcdGNvbnN0IGFkZEl0ZW0gPSBncmlkLmdyaWRPcHRpb25zPy5hZGREYXRhQ2I/LigpID8/IHt9O1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UuYWRkRGF0YShzdWJEYXRhS2V5LCBhZGRJdGVtLCBncmlkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5hZGREYXRhKHN1YkRhdGFLZXksIHVuZGVmaW5lZCwgZ3JpZCk7XG5cdFx0dGhpcy5kYXRhU291cmNlU2hvdygpO1xuXHR9XG5cblx0ZGVsUm93Q2xpY2tIYW5kbGVyKGdyaWQ6IEdyaWRMaXN0KSB7XG5cdFx0Y29uc3Qgc2VsZWN0SXRlbTogYW55ID0gdGhpcy5wYWdlRm9ybVNlcnZpY2UuZ2V0U2VsZWN0ZWRSb3dzKCkgfHwgW107XG5cdFx0bGV0IGlkczogbnVtYmVyW10gPSBbXTtcblx0XHRpZiAoZ3JpZC5zbG90S2V5ID09PSAnZ2FudHQnKSB7XG5cdFx0XHRpZHMgPSBzZWxlY3RJdGVtLmZpbHRlcigodjogYW55KSA9PiB2LmlkICYmIHR5cGVvZiB2LmlkID09PSAnbnVtYmVyJykubWFwKCh2OiBhbnkpID0+IHYuaWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZHMgPSBzZWxlY3RJdGVtLmZpbHRlcigodjogYW55KSA9PiB2LmlkKS5tYXAoKHY6IGFueSkgPT4gdi5pZCk7XG5cdFx0fVxuXHRcdGlmIChpZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgZ3JpZFRhYiA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0XHRjb25zdCBkZWxldGVGdW5jID0gZ3JpZFRhYi5kZWxldGVGdW5jO1xuXHRcdFx0bGV0IGRvbmVDYWxsZWQgPSBmYWxzZTtcblx0XHRcdGNvbnN0IGRvbmUgPSAoKSA9PiB7XG5cdFx0XHRcdGlmIChkb25lQ2FsbGVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRvbmVDYWxsZWQgPSB0cnVlO1xuXHRcdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoNCk7XG5cdFx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnJlbW92ZURhdGEoZ3JpZC5zdWJEYXRhS2V5LCB0aGlzLnBhZ2VGb3JtU2VydmljZS5nZXRTZWxlY3RlZFJvd3MoKSwgZ3JpZCk7XG5cdFx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHRcdH07XG5cdFx0XHRpZiAoIWRlbGV0ZUZ1bmMpIHtcblx0XHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHRcdHRoaXMud2ViX3JlbW92ZSh7IG1vZGVsTmFtZTogZ3JpZC5ncmlkT3B0aW9ucy5tb2RlbE5hbWUsIGlkcyB9KS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnJlbW92ZURhdGEoZ3JpZC5zdWJEYXRhS2V5LCB0aGlzLnBhZ2VGb3JtU2VydmljZS5nZXRTZWxlY3RlZFJvd3MoKSwgZ3JpZCk7XG5cdFx0XHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2Uuc2V0U2VsZWN0ZWRSb3dzKFtdKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KHRydWUpO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gZGVsZXRlRnVuYyhpZHMsIGdyaWRUYWIsIGRvbmUpO1xuXHRcdFx0aWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XG5cdFx0XHRcdHJlc3VsdC5zdWJzY3JpYmUoKCkgPT4gZG9uZSgpKTtcblx0XHRcdH0gZWxzZSBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHJlc3VsdC5zdWJzY3JpYmUoKCkgPT4gZG9uZSgpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UucmVtb3ZlRGF0YShncmlkLnN1YkRhdGFLZXksIHRoaXMucGFnZUZvcm1TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLCBncmlkKTtcblx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnNldFNlbGVjdGVkUm93cyhbXSk7XG5cdFx0fVxuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWQ6b3ZlcmZsb3ctaGlkZGVuXCI+XG4gIDwhLS0g5L+d5a2Y5paw5bu65pON5L2c5Yy6IC0tPlxuXHQ8ZGl2IGNsYXNzPVwiZmxleCBtZDpmbGV4LXdyYXAgbGc6ZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlbiBweS0xIHB4LTEgYm9yZGVyLWItWzFweF0gYm9yZGVyLVsjZGJkYmRiXSBiZy13aGl0ZVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJsZzpiYXNpcy0xLzMgb3JkZXItMVwiPlxuXHRcdFx0PGFwcC1jcnVtYi1hY3Rpb25cblx0XHRcdFx0W2FkZFZpc2libGVdPVwiYWRkVmlzaWJsZSgpXCJcblx0XHRcdFx0W25ld1VybF09XCJuZXdVcmxcIlxuXHRcdFx0XHRbaXNTaG93Q29nXT1cInRydWVcIlxuXHRcdFx0XHRbb3V0bGluZWRdPVwidHJ1ZVwiXG5cdFx0XHRcdFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuXHRcdFx0XHRbYWN0aW9uTGlzdF09XCJhY3Rpb25MaXN0KClcIlxuXHRcdFx0XHRbY29uZmlnTmV3UGF0aF09XCJjb25maWdOZXdQYXRoKClcIlxuXHRcdFx0XHRbY2xvc2VGYWxsYmFja1VybF09XCJjbG9zZUZhbGxiYWNrVXJsKClcIlxuXHRcdFx0XHRbZGF0YV09XCJnZXRQcm0uZGF0YSA/PyB7fVwiXG5cdFx0XHRcdFtzYXZlQnRuRGlzYWJsZV09XCJzYXZlQnRuRGlzYWJsZVwiXG5cdFx0XHRcdFtzaG93U2F2ZUJ1dHRvbl09XCJzaG93TWFpblNhdmVCdXR0b24oKVwiXG5cdFx0XHRcdChhY3Rpb25FdmVudCk9XCJhdXRoQ2xpY2soJGV2ZW50KVwiXG5cdFx0XHRcdChzYXZlRXZlbnQpPVwic3VibWl0Rm9ybSgpXCI+XG5cdFx0XHQ8L2FwcC1jcnVtYi1hY3Rpb24+XG5cdFx0PC9kaXY+XG5cblx0XHQ8ZGl2IGNsYXNzPVwiYmFzaXMtMS81IGxnOmJhc2lzLTIvMyBvcmRlci0yIGxnOm9yZGVyLTIgbWQ6b3JkZXItbGFzdCBtZDpiYXNpcy1mdWxsIG1kOm10LVs2cHhdXCI+XG5cdFx0XHQ8aHJlZi1idG4tbGlzdFxuXHRcdFx0XHRbaHJlZnNdPVwiaHJlZkJ0bkxpc3QoKVwiXG5cdFx0XHRcdChocmVmQ2xpY2spPVwiZ29SdW4oJGV2ZW50KVwiPjwvaHJlZi1idG4tbGlzdD5cblx0XHRcdDwhLS0gQGlmIChpZCkge1xuXHRcdFx0XHRAZm9yIChidG4gb2YgaHJlZkJ0bkxpc3QoKTsgdHJhY2sgYnRuKSB7XG5cdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRbdmFyaWFudF09XCJidG4/LnZhcmlhbnRcIlxuXHRcdFx0XHRcdFx0W3NldmVyaXR5XT1cImJ0bj8uc2V2ZXJpdHlcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJtci1bNnB4XVwiXG5cdFx0XHRcdFx0XHRzaXplPVwic21hbGxcIlxuXHRcdFx0XHRcdFx0W2ljb25dPVwiYnRuPy5pY29uXCJcblx0XHRcdFx0XHRcdGxhYmVsPVwie3sgYnRuLmkxOG5LZXkgPyBpMThuLmZhbnlpKGJ0bi5pMThuS2V5KSA6IGJ0bi5sYWJlbCB9fVwiXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiZ29SdW4oYnRuKVwiPlxuXHRcdFx0XHRcdDwvcC1idXR0b24+XG5cdFx0XHRcdH1cblx0XHRcdH0gLS0+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cImJhc2lzLTEvMyBvcmRlci0zIGZsZXggZmxleC1yb3ctcmV2ZXJzZVwiPlxuXHRcdFx0QGlmIChtb2RlbExvZygpKSB7XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2tcIj5cblx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0W2NsYXNzXT1cIidpY29uZm9udCBpY29uLXNpZGViYXIgaWNvbi1zaWRlYmFyLScgKyBzaWRlYmFyTW9kZSgpXCJcblx0XHRcdFx0XHRcdChjbGljayk9XCJ0b2dnbGVMb2coKVwiPjwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiZmxleFwiPlxuXHRcdDxkaXYgY2xhc3M9XCJweC0yIGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBmbGV4LTFcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmFzaXMtMS8zIHB5LTEgYmFzaXMtZnVsbCBtZDpmbGV4IGl0ZW1zLWNlbnRlciBmbGV4LXJvdyBvcmRlci0xXCI+XG5cdFx0XHRcdEBmb3IgKGFjdGlvbiBvZiBhY3Rpb25MaXN0KCk7IGxldCBpID0gJGluZGV4OyB0cmFjayBhY3Rpb24pIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdHNpemU9XCJzbWFsbFwiXG5cdFx0XHRcdFx0XHRbaWNvbl09XCJnZXRQcm0uZGF0YT8uaWNvblwiXG5cdFx0XHRcdFx0XHRbbG9hZGluZ109XCJhY3Rpb24ubG9hZGluZ1wiXG5cdFx0XHRcdFx0XHRbbGFiZWxdPVwiYWN0aW9uLmkxOG5LZXkgPyAoYWN0aW9uLmkxOG5LZXkgfCB0cmFuc2xhdGUpIDogYWN0aW9uLmxhYmVsXCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJhY3Rpb24uYnRuRGlzYWJsZWQgPyBhY3Rpb24uYnRuRGlzYWJsZWQoZ2V0UHJtLmRhdGEpIDogZmFsc2VcIlxuXHRcdFx0XHRcdFx0W3N0eWxlQ2xhc3NdPVwiXG5cdFx0XHRcdFx0XHRcdChhY3Rpb24uYXV0aCB8fCAwKSA+IChhdXRoTGV2ZWwoKSB8fCAwKSB8fCAhIWFjdGlvbi5idG5IaWRkZW4/LihnZXRQcm0uZGF0YSlcblx0XHRcdFx0XHRcdFx0XHQ/ICdmb3JtLWFjdGlvbiBoaWRkZW4nXG5cdFx0XHRcdFx0XHRcdFx0OiAnZm9ybS1hY3Rpb24gYmxvY2sgbXItWy41cmVtXSdcblx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHQob25DbGljayk9XCJhY3Rpb24ub25DbGljayAhPSAnJyAmJiBhY3Rpb24ub25DbGljaz8uKGdldFBybS5kYXRhLCBhY3Rpb24pXCI+XG5cdFx0XHRcdFx0PC9wLWJ1dHRvbj5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibWQ6YmFzaXMtMi8zIGJhc2lzLWZ1bGwgZmxleCBtZDpmbGV4LXJvdy1yZXZlcnNlIGZsZXgtcm93IG1kOm9yZGVyLTIgb3JkZXItZmlyc3Qgdy1mdWxsXCI+XG5cdFx0XHRcdEBpZiAoc3RlcHNWaXNpYmxlKSB7XG5cdFx0XHRcdFx0PGN1c3RvbS1zdGVwc1xuXHRcdFx0XHRcdFx0I2N1c3RvbVN0ZXBzXG5cdFx0XHRcdFx0XHRjbGFzcz1cInctZnVsbFwiXG5cdFx0XHRcdFx0XHRbc3RlcHNdPVwic3RhdHVzU3RlcHMoKVwiXG5cdFx0XHRcdFx0XHRbbW9kZWxMb2ddPVwic2hvd0xvZygpXCJcblx0XHRcdFx0XHRcdFtjdXJyZW50XT1cImdldFBybS5kYXRhICYmIGdldFBybS5kYXRhW3N0YXR1c0tleSgpXSAhPT0gdW5kZWZpbmVkID8gZ2V0UHJtLmRhdGFbc3RhdHVzS2V5KCldIDogMFwiXG5cdFx0XHRcdFx0XHRbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcblx0XHRcdFx0XHRcdFtpc0NsaWNrXT1cInRoaXMuc3RhdHVzQ29uZigpLmlzQ2xpY2tcIlxuXHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJzdGF0dXNDaGFuZ2UoJGV2ZW50LCBjdXN0b21TdGVwcylcIj5cblx0XHRcdFx0XHQ8L2N1c3RvbS1zdGVwcz5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0QGlmIChzaG93TG9nKCkpIHtcblx0XHRcdDxkaXYgY2xhc3M9XCJsZzp3LVs0MDBweF0gbWQ6dy1bMzAwcHhdIGhpZGRlbiBtZDpibG9ja1wiPjwvZGl2PlxuXHRcdH1cblx0PC9kaXY+XG4gIDwhLS0gIGZvcm0g5Li75Yy65Z+fLS0+XG4gIEBpZih0aGlzLmZvcm0oKS5mb3JtKSB7XG4gICAgPGRpdiBjbGFzcz1cIm1haW4gZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgIEBpZiAoY3VzdG9tTGVmdFBhbmVsKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImhpZGRlbiBtZDpibG9jayBtZDpoLWZ1bGwgbWQ6b3ZlcmZsb3cteS1hdXRvIG1kOmZsZXgtbm9uZSBtZDp3LWZpdCBtZDptYXgtdy1mdWxsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUxlZnRQYW5lbCgpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSBpZiAobGVmdFBhbmVsKCk/LmVuYWJsZWQgJiYgbGVmdFBhbmVsKCk/Lm1vZGUgPT09ICdsaXN0Jykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZGVuIG1kOmJsb2NrIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG8gbWQ6ZmxleC1ub25lIG1kOnctWzIyMHB4XSBtZDptYXgtdy1mdWxsIHB4LTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1mb3JtLWxlZnQtcGFuZWxcIj5cbiAgICAgICAgICAgIDxhbS1zaW5nbGUtc2VsZWN0LWxpc3Rib3hcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwibGVmdFBhbmVsSXRlbXNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsZWZ0UGFuZWxTZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTGVmdFBhbmVsU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiZ2V0UGFuZWxPcHRpb25WYWx1ZSgpXCJcbiAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImdldFBhbmVsT3B0aW9uTGFiZWwoKVwiXG4gICAgICAgICAgICAgIFtlbXB0eU1lc3NhZ2VdPVwiZ2V0UGFuZWxFbXB0eU1lc3NhZ2UoKVwiXG4gICAgICAgICAgICAgIFthbGxvd0Rlc2VsZWN0XT1cImdldFBhbmVsQWxsb3dEZXNlbGVjdCgpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChsZWZ0UGFuZWwoKT8uZW5hYmxlZCAmJiBsZWZ0UGFuZWwoKT8ubW9kZSA9PT0gJ3RyZWUnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2sgbWQ6aC1mdWxsIG1kOm92ZXJmbG93LXktYXV0byBtZDpmbGV4LW5vbmUgbWQ6dy1bMjIwcHhdIG1kOm1heC13LWZ1bGwgcHgtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWZvcm0tbGVmdC1wYW5lbCBwYWdlLWZvcm0tdHJlZS1wYW5lbFwiPlxuICAgICAgICAgICAgQGlmIChsZWZ0UGFuZWxUcmVlTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICA8cC10cmVlXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxlZnRQYW5lbFRyZWVOb2Rlc1wiXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uTW9kZT1cInNpbmdsZVwiXG4gICAgICAgICAgICAgICAgWyhzZWxlY3Rpb24pXT1cImxlZnRQYW5lbFNlbGVjdGVkTm9kZVwiXG4gICAgICAgICAgICAgICAgW2VtcHR5TWVzc2FnZV09XCJnZXRQYW5lbEVtcHR5TWVzc2FnZSgpXCJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicGFnZS1mb3JtLWxlZnQtdHJlZVwiXG4gICAgICAgICAgICAgICAgKG9uTm9kZVNlbGVjdCk9XCJvbkxlZnRQYW5lbFRyZWVOb2RlU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbk5vZGVFeHBhbmQpPVwib25MZWZ0UGFuZWxUcmVlTm9kZUV4cGFuZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25Ob2RlQ29sbGFwc2UpPVwib25MZWZ0UGFuZWxUcmVlTm9kZUNvbGxhcHNlKCRldmVudClcIiAvPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWZvcm0tbGVmdC1wYW5lbC1lbXB0eVwiPnt7IGdldFBhbmVsRW1wdHlNZXNzYWdlKCkgfX08L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1kOm1pbi13LTAgbWQ6ZmxleC0xIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIG14LTIgZm9ybS1wYW5lbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTIgZmxleC0xXCI+XG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm0oKS5mb3JtIVwiPlxuICAgICAgICAgICAgICA8Y3VzdG9tLWZvcm1cbiAgICAgICAgICAgICAgICAjY0Zvcm1cbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJmb3JtT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3Vwc2VydF09XCJ1cHNlcnRQcm1cIlxuICAgICAgICAgICAgICAgIFttb2RlbF09XCJnZXRQcm0uZGF0YSA/PyB7fVwiXG4gICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cIm9uTWFpbkZvcm1Nb2RlbENoYW5nZSgpXCI+PC9jdXN0b20tZm9ybT5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKGdyaWRzICYmIGdyaWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBtYi0yXCI+XG4gICAgICAgICAgICAgIDxwLXRhYnMgWyh2YWx1ZSldPVwiaW5kZXhWYWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxwLXRhYmxpc3Q+XG4gICAgICAgICAgICAgICAgICBAZm9yIChmY2hpbGQgb2YgZ3JpZHM7IGxldCBpID0gJGluZGV4OyB0cmFjayBmY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtdGFiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0YWJDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZmNoaWxkLmkxOG5LZXkgPyBpMThuLmZhbnlpKGZjaGlsZC5pMThuS2V5KSA6IGZjaGlsZC50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3AtdGFiPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvcC10YWJsaXN0PlxuICAgICAgICAgICAgICA8L3AtdGFicz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZm9yIChncmlkIG9mIGdyaWRzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgZ3JpZCkge1xuICAgICAgICAgICAgQGxldCBzbG90U3RhdGUgPSBzbG90UmVuZGVyU3RhdGVzW2ldO1xuICAgICAgICAgICAgQGxldCBzbG90ID0gc2xvdFN0YXRlPy5zbG90O1xuICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cImluZGV4VmFsdWUgIT0gaVwiIFtzdHlsZS5oZWlnaHRdPVwic2xvdCA/IGdyaWQuZ3JpZE9wdGlvbnMuc2Nyb2xsSGVpZ2h0IDogbnVsbFwiPlxuICAgICAgICAgICAgICBAaWYgKHNsb3QpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2xvdC50ZW1wbGF0ZVJlZjsgY29udGV4dDogc2xvdFN0YXRlLmNvbnRleHRcIj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgcHktWzVweF0gcHItWzhweF0gYmctd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoY2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jbG91ZC11cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInNhdmVDdXJyZW50VGFiKClcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGlmIChncmlkLnN1YlRhYmxlU291cmNlICE9ICdub25lJyAmJiAhaXNTdWJBZGRIaWRkZW4oZ3JpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBsdXNcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwic3VjY2Vzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFkZFJvd0NsaWNrSGFuZGxlcihncmlkKVwiIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKGdyaWQuc2hvd0RlbGV0ZSAmJiAhaXNTdWJEZWxldGVIaWRkZW4oZ3JpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eT1cImRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImRlbFJvd0NsaWNrSGFuZGxlcihncmlkKVwiIC8+XG4gICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2ICNjdXN0b21HcmlkPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBAaWYgKGdyaWQudHlwZSA9PSAnZ3JpZCcpIHtcbiAgICAgICAgICAgICAgICAgIDxjdXN0b20tZ3JpZFxuICAgICAgICAgICAgICAgICAgICAjY3VzdG9tR3JpZFxuICAgICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJnZXRQcm0uZGF0YT8uW2dyaWQuc3ViRGF0YUtleSFdXCJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGVFeHByZXNzaW9uRGF0YV09XCJnZXRQcm0uZGF0YSA/PyB7fVwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlRXhwcmVzc2lvblZlcnNpb25dPVwiaGlkZUV4cHJlc3Npb25WZXJzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW3Vwc2VydF09XCJ1cHNlcnRQcm1cIlxuICAgICAgICAgICAgICAgICAgICAoZGVsZXRlRW1pdCk9XCJkZWxSb3dzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZ3JpZERhdGFDaGFuZ2VkKT1cInJlZnJlc2hTdWJHcmlkQ29sdW1uVmlzaWJpbGl0eSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2FkZFR5cGVdPVwiZ3JpZC5zdWJUYWJsZVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgIChhZGRFbWl0KT1cImRhdGFTb3VyY2VTaG93KClcIlxuICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwiZ3JpZC5ncmlkT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtncmlkRGlzYWJsZV09XCJncmlkLmdyaWREaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0RlbGV0ZV09XCJncmlkLnNob3dEZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICBbZGVsZXRlSGlkZGVuXT1cImlzU3ViRGVsZXRlSGlkZGVuKGdyaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2FkZEhpZGRlbl09XCJpc1N1YkFkZEhpZGRlbihncmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJTYXZlVmlzaWJsZV09XCJjYW5TaG93Q3VycmVudFRhYlNhdmUoZ3JpZClcIlxuICAgICAgICAgICAgICAgICAgICBbc3ViU2F2ZUhpZGRlbl09XCJpc1N1YlNhdmVIaWRkZW4oZ3JpZClcIlxuICAgICAgICAgICAgICAgICAgICBbc3ViU2F2ZUxhYmVsXT1cImdldEN1cnJlbnRUYWJTYXZlTGFiZWwoZ3JpZClcIlxuICAgICAgICAgICAgICAgICAgICBbc3ViU2F2ZURpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdERhdGFdPVwiZ3JpZC5zZWxlY3REYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW2FkZFNvcnRdPVwiZ3JpZC5hZGRTb3J0XCJcbiAgICAgICAgICAgICAgICAgICAgKHN1YlNhdmVFbWl0KT1cInNhdmVDdXJyZW50VGFiKClcIj5cbiAgICAgICAgICAgICAgICAgIDwvY3VzdG9tLWdyaWQ+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICBAaWYgKGNhblNob3dDdXJyZW50VGFiU2F2ZShncmlkKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBweC0yIHB0LTIgYmctd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jbG91ZC11cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic2F2ZUN1cnJlbnRUYWIoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPGN1c3RvbS1mb3JtXG4gICAgICAgICAgICAgICAgICAgICN0YWJGb3JtXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImdyaWRcIlxuICAgICAgICAgICAgICAgICAgICBbdXBzZXJ0XT1cInVwc2VydFBybVwiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJzdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5IV0gfHwge31cIlxuICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwicmVmcmVzaFN1YkdyaWRDb2x1bW5WaXNpYmlsaXR5KClcIj5cbiAgICAgICAgICAgICAgICAgIDwvY3VzdG9tLWZvcm0+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKHNob3dMb2coKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGxnOnctWzQwMHB4XSBtZDp3LVszMDBweF0gbWQ6aC1mdWxsIG1kOm92ZXJmbG93LXktYXV0byBoaWRkZW4gbWQ6YmxvY2tcIj5cbiAgICAgICAgICA8Y3VzdG9tLWxvZyBbbG9nc109XCJnZXRQcm0uZGF0YT8ubG9nID8/IFtdXCI+PC9jdXN0b20tbG9nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG48cm93LXNlbGVjdG9yXG5cdFsodmlzaWJsZSldPVwidmlzaWJsZVwiXG5cdFtzZWFyY2hQcm1dPVwiZGlhbG9nU2VhcmNoUHJtXCJcblx0W2dyaWRPcHRpb25zXT1cInNlbGVjdE9wdGlvbnNcIlxuXHRbc2VsZWN0aW9uS2V5c109XCJzZWxlY3Rpb25LZXlzXCJcblx0W3NlbGVjdE1vZGVsQ29kZV09XCJjdXJyZW50U2VsZWN0TW9kZWxDb2RlIHx8IHVuZGVmaW5lZFwiXG5cdFtjdXN0b21MaXN0Rm9ybUJ5RGlhbG9nXT1cImN1cnJlbnRDdXN0b21MaXN0Rm9ybVRlbXBsYXRlXCJcblx0W2N1c3RvbUxpc3RGb3JtQnlEaWFsb2dDb250ZXh0XT1cImN1cnJlbnRDdXN0b21MaXN0Rm9ybUNvbnRleHRcIlxuXHRbY3VzdG9tTGlzdERpYWxvZ01hcF09XCJjdXN0b21MaXN0Rm9ybUluc3RhbmNlTWFwKClcIlxuXHQob25Payk9XCJvbk9rKCRldmVudClcIlxuXHQoY2FuY2VsU2VsZWN0KT1cIm9uQ2FuY2VsU2VsZWN0ZWQoJGV2ZW50KVwiPlxuPC9yb3ctc2VsZWN0b3I+XG4iXX0=
|