imm-element-ui 2.2.8 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/esm2022/lib/crumb-action/crumb-action.component.mjs +3 -3
  2. package/esm2022/lib/form/form-type/autocomplete.type.mjs +5 -5
  3. package/esm2022/lib/form/form-type/codemirror.type.mjs +3 -3
  4. package/esm2022/lib/form/form-type/datepicker.type.mjs +5 -5
  5. package/esm2022/lib/form/form-type/image.type.mjs +5 -5
  6. package/esm2022/lib/form/form-type/inputnumber.type.mjs +5 -5
  7. package/esm2022/lib/form/form-type/inputtext.type.mjs +5 -5
  8. package/esm2022/lib/form/form-type/multiselect.type.mjs +5 -5
  9. package/esm2022/lib/form/form-type/radio.type.mjs +5 -5
  10. package/esm2022/lib/form/form-type/select.type.mjs +5 -5
  11. package/esm2022/lib/form/form-type/textarea.type.mjs +7 -5
  12. package/esm2022/lib/form/form-type/treeselect.type.mjs +5 -5
  13. package/esm2022/lib/form/form-type/upload.type.mjs +3 -3
  14. package/esm2022/lib/page-form/page-form.component.mjs +9 -7
  15. package/esm2022/lib/row-selector/row-selector.component.mjs +3 -3
  16. package/esm2022/lib/search/pop-date/pop-date.component.mjs +3 -3
  17. package/esm2022/lib/search/pop-list/pop-list.component.mjs +2 -2
  18. package/esm2022/lib/search/pop-panel/pop-panel.component.mjs +3 -3
  19. package/esm2022/lib/search/pop-self/pop-self.component.mjs +3 -3
  20. package/esm2022/lib/search/pop-sort/pop-sort.component.mjs +3 -3
  21. package/esm2022/lib/search/pop-tree/pop-tree.component.mjs +3 -3
  22. package/esm2022/lib/search/search/search.component.mjs +3 -3
  23. package/esm2022/lib/search/search-tip/search-tip.component.mjs +3 -3
  24. package/esm2022/lib/search/text-panel/text-panel.component.mjs +3 -3
  25. package/fesm2022/imm-element-ui.mjs +76 -72
  26. package/fesm2022/imm-element-ui.mjs.map +1 -1
  27. package/lib/crumb-action/crumb-action.component.d.ts +1 -1
  28. package/lib/grid/grid/grid.component.d.ts +1 -1
  29. package/lib/search/pop-date/pop-date.component.d.ts +1 -1
  30. package/package.json +1 -1
  31. package/src/lib/styles/styles.scss +1 -1
@@ -19,6 +19,7 @@ import { deepClone } from '../share/utils';
19
19
  import { PageFormService } from '../service/page-form.service';
20
20
  import { PageFormSlotDirective } from './page-form-slot.directive';
21
21
  import { Subject, takeUntil } from 'rxjs';
22
+ import { isEqual } from 'lodash';
22
23
  import * as i0 from "@angular/core";
23
24
  import * as i1 from "@angular/common";
24
25
  import * as i2 from "primeng/button";
@@ -128,11 +129,13 @@ export class PageFormComponent extends AmComponent {
128
129
  });
129
130
  }
130
131
  mergePageFormData(data) {
131
- this.getPrm.data = {
132
- ...(this.getPrm.data ?? {}),
133
- ...data,
134
- };
135
- this.syncSubFormModelFromData();
132
+ if (!isEqual(this.getPrm.data, data)) {
133
+ this.getPrm.data = {
134
+ ...(this.getPrm.data ?? {}),
135
+ ...data,
136
+ };
137
+ this.syncSubFormModelFromData();
138
+ }
136
139
  }
137
140
  syncSubFormModelFromData() {
138
141
  this.gridList().forEach((grid) => {
@@ -533,7 +536,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
533
536
  RowSelectorComponent,
534
537
  TranslatePipe,
535
538
  HrefBtnListComponent,
536
- PageFormSlotDirective,
537
539
  ], providers: [], template: "<div class=\"md:overflow-hidden\">\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(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\t<div class=\"main flex flex-wrap\">\n\t\t<div class=\"w-full md:flex-1 md:h-full md:overflow-y-auto\">\n\t\t\t<div class=\"bg-white mx-2 form-panel\">\n\t\t\t\t<div class=\"p-2 flex-1\">\n\t\t\t\t\t<form [formGroup]=\"form().form!\">\n\t\t\t\t\t\t<custom-form\n\t\t\t\t\t\t\t#cForm\n\t\t\t\t\t\t\t[options]=\"formOptions\"\n\t\t\t\t\t\t\t[upsert]=\"upsertPrm\"\n\t\t\t\t\t\t\t[model]=\"getPrm.data ?? {}\"></custom-form>\n\t\t\t\t\t</form>\n\t\t\t\t</div>\n\t\t\t\t@if (gridList() && gridList().length > 0) {\n\t\t\t\t\t<div class=\"relative mb-2\">\n\t\t\t\t\t\t<p-tabs [(value)]=\"indexValue\">\n\t\t\t\t\t\t\t<p-tablist>\n\t\t\t\t\t\t\t\t@for (fchild of gridList(); let i = $index; track fchild) {\n\t\t\t\t\t\t\t\t\t<p-tab\n\t\t\t\t\t\t\t\t\t\t[value]=\"i\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"tabClick()\">\n\t\t\t\t\t\t\t\t\t\t{{ fchild.i18nKey ? i18n.fanyi(fchild.i18nKey) : fchild.title }}\n\t\t\t\t\t\t\t\t\t</p-tab>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</p-tablist>\n\t\t\t\t\t\t</p-tabs>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@for (grid of gridList(); let i = $index; track grid) {\n\t\t\t\t\t@if (!!grid?.slotKey && pageFormSlot) {\n\t\t\t\t\t\t<div [hidden]=\"indexValue != i\" [ngStyle]=\"{'height': grid.gridOptions.scrollHeight}\">\n\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"pageFormSlot.templateRef; context: getPageFormSlotContext(grid, i)\"> </ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t@if (grid.type == 'grid') {\n\t\t\t\t\t\t\t<custom-grid\n\t\t\t\t\t\t\t\t#customGrid\n\t\t\t\t\t\t\t\t[hidden]=\"indexValue != i\"\n\t\t\t\t\t\t\t\t[rowData]=\"getPrm.data?.[grid.subDataKey!]\"\n\t\t\t\t\t\t\t\t[upsert]=\"upsertPrm\"\n\t\t\t\t\t\t\t\t(deleteEmit)=\"delRows($event)\"\n\t\t\t\t\t\t\t\t[addType]=\"grid.subTableSource\"\n\t\t\t\t\t\t\t\t(addEmit)=\"dataSourceShow()\"\n\t\t\t\t\t\t\t\t[gridOptions]=\"grid.gridOptions\"\n\t\t\t\t\t\t\t\t[gridDisable]=\"gridDisable\"\n\t\t\t\t\t\t\t\t[authLevel]=\"authLevel()\"\n\t\t\t\t\t\t\t\t[showDelete]=\"grid.showDelete\"\n\t\t\t\t\t\t\t\t[selectData]=\"grid.selectData\"\n\t\t\t\t\t\t\t\t[addSort]=\"grid.addSort\">\n\t\t\t\t\t\t\t</custom-grid>\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t<custom-form\n\t\t\t\t\t\t\t\t#tabForm\n\t\t\t\t\t\t\t\t[hidden]=\"indexValue != i\"\n\t\t\t\t\t\t\t\t[options]=\"grid\"\n\t\t\t\t\t\t\t\t[upsert]=\"upsertPrm\"\n\t\t\t\t\t\t\t\t[model]=\"subFormModel[grid.subDataKey!] || {}\">\n\t\t\t\t\t\t\t</custom-form>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\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=\"w-full lg:w-[400px] md:w-[300px] md:h-full md:overflow-y-auto hidden md:block\">\n\t\t\t\t<custom-log [logs]=\"getPrm.data?.log ?? []\"></custom-log>\n\t\t\t</div>\n\t\t}\n\t</div>\n</div>\n<row-selector\n\t[(visible)]=\"visible\"\n\t[searchPrm]=\"dialogSearchPrm\"\n\t[gridOptions]=\"selectOptions\"\n\t[selectionKeys]=\"selectionKeys\"\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}.form-panel{border:solid 1px #dbdbdb}.icon-sidebar{color:#334155;padding:2.5px}.icon-sidebar:hover{color:var(--p-primary-color);cursor:pointer}\n"] }]
538
540
  }], ctorParameters: () => [], propDecorators: { cForm: [{
539
541
  type: ViewChild,
@@ -551,4 +553,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
551
553
  type: HostListener,
552
554
  args: ['window:resize']
553
555
  }] } });
554
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcGFnZS1mb3JtL3BhZ2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3BhZ2UtZm9ybS9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUdOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFFUixNQUFNLEVBQ04sWUFBWSxFQUVaLFlBQVksR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQWUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQU8sTUFB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LEVBQUU7Z0JBMkMxRCxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJIaXN0b3J5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvdXNlckhpc3Rvcnkuc2VydmljZSc7XG5pbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdENvbnRlbnRDaGlsZCxcblx0aW5qZWN0LFxuXHRPbkluaXQsXG5cdE9uRGVzdHJveSxcblx0Vmlld0NoaWxkLFxuXHRpbnB1dCxcblx0ZWZmZWN0LFxuXHRjb21wdXRlZCxcblx0SW5wdXQsXG5cdHNpZ25hbCxcblx0Vmlld0NoaWxkcmVuLFxuXHRRdWVyeUxpc3QsXG5cdEhvc3RMaXN0ZW5lcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1Db21wb25lbnQsIEZvcm1PcHRpb25zIH0gZnJvbSAnLi4vZm9ybS9mb3JtL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFJvd1NlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcm93LXNlbGVjdG9yL3Jvdy1zZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9nL2xvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgQ3J1bWJBY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9jcnVtYi1hY3Rpb24vY3J1bWItYWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdGVwc0NvbXBvbmVudCwgU3RlcCB9IGZyb20gJy4uL3N0ZXBzL3N0ZXBzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkQ29tcG9uZW50LCBHcmlkT3B0aW9ucyB9IGZyb20gJy4uL2dyaWQvZ3JpZC9ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJzTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWJzJztcbmltcG9ydCB7IEFtQ29tcG9uZW50LCBHZXQgfSBmcm9tICcuLi9hbS9hbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSAnLi4vYW0vYW0uY29tcG9uZW50JztcbmltcG9ydCB7IEhyZWZCdG5MaXN0LCBHcmlkTGlzdCwgUGFnZUZvcm1TbG90Q29udGV4dCB9IGZyb20gJy4vcGFnZS1mb3JtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvaTE4bi5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25CdG4gfSBmcm9tICcuL3BhZ2UtZm9ybS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZm9ybVR5cGVUb1Byb3BzIH0gZnJvbSAnLi9wYWdlLWZvcm0uaW50ZXJmYWNlJztcbmltcG9ydCB7IEhyZWZCdG5MaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vaHJlZi1idG4tbGlzdC9ocmVmLWJ0bi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBkZWVwQ2xvbmUgfSBmcm9tICcuLi9zaGFyZS91dGlscyc7XG5pbXBvcnQgeyBQYWdlRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3BhZ2UtZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VGb3JtU2xvdERpcmVjdGl2ZSB9IGZyb20gJy4vcGFnZS1mb3JtLXNsb3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdhcHAtcGFnZS1mb3JtJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0aW1wb3J0czogW1xuXHRcdENvbW1vbk1vZHVsZSxcblx0XHRCdXR0b25Nb2R1bGUsXG5cdFx0UmVhY3RpdmVGb3Jtc01vZHVsZSxcblx0XHRGb3JtQ29tcG9uZW50LFxuXHRcdExvZ0NvbXBvbmVudCxcblx0XHRDcnVtYkFjdGlvbkNvbXBvbmVudCxcblx0XHRTdGVwc0NvbXBvbmVudCxcblx0XHRHcmlkQ29tcG9uZW50LFxuXHRcdFRhYnNNb2R1bGUsXG5cdFx0Um93U2VsZWN0b3JDb21wb25lbnQsXG5cdFx0VHJhbnNsYXRlUGlwZSxcblx0XHRIcmVmQnRuTGlzdENvbXBvbmVudCxcblx0XHRQYWdlRm9ybVNsb3REaXJlY3RpdmUsXG5cdF0sXG5cdHRlbXBsYXRlVXJsOiAnLi9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybDogJy4vcGFnZS1mb3JtLmNvbXBvbmVudC5zY3NzJyxcblx0cHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZUZvcm1Db21wb25lbnQgZXh0ZW5kcyBBbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblx0QFZpZXdDaGlsZCgnY0Zvcm0nKSBjRm9ybSE6IEZvcm1Db21wb25lbnQ7XG5cdEBWaWV3Q2hpbGRyZW4oJ2N1c3RvbUdyaWQnKSBjdXN0b21HcmlkITogUXVlcnlMaXN0PEdyaWRDb21wb25lbnQ+O1xuXHRAVmlld0NoaWxkcmVuKCd0YWJGb3JtJykgdGFiRm9ybSE6IFF1ZXJ5TGlzdDxGb3JtQ29tcG9uZW50Pjtcblx0QENvbnRlbnRDaGlsZChQYWdlRm9ybVNsb3REaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcGFnZUZvcm1TbG90PzogUGFnZUZvcm1TbG90RGlyZWN0aXZlO1xuXHRzaG93TG9nID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vZGVsTG9nKCkgJiYgdGhpcy5zaWRlYmFyTW9kZSgpID09PSAncmlnaHQnO1xuXHR9KTtcblx0YWRkVmlzaWJsZSA9IGlucHV0PGJvb2xlYW4+KCk7XG5cdGdyaWRMaXN0ID0gaW5wdXQ8YW55W10+KFtdKTtcblx0Zm9ybSA9IGlucHV0LnJlcXVpcmVkPEZvcm1PcHRpb25zPih7fSk7XG5cdGdldFBybUlucHV0ID0gaW5wdXQucmVxdWlyZWQ8R2V0Pih7fSk7XG5cdHN0YXR1c1N0ZXBzID0gaW5wdXQ8U3RlcFtdPihbXSk7XG5cdHN0YXR1c0tleSA9IGlucHV0KCdzdGF0dXMnKTtcblx0aHJlZkJ0bkxpc3QgPSBpbnB1dDxIcmVmQnRuTGlzdFtdPihbXSk7XG5cdHNldFRpdGxlID0gaW5wdXQ8c3RyaW5nPigpO1xuXHRhY3Rpb25MaXN0ID0gaW5wdXQ8UGVybWlzc2lvbkJ0bltdPihbXSk7XG5cdG1vZGVsTG9nID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXHRzaWRlYmFyTW9kZSA9IHNpZ25hbDwnbGVmdCcgfCAncmlnaHQnPigncmlnaHQnKTtcblx0Zm9ybURpc2FibGVkID0gaW5wdXQ8RnVuY3Rpb24+KCk7XG5cdHN0YXR1c0NvbmYgPSBpbnB1dDxhbnk+KCk7XG5cdGZvcm1EZXRhaWwgPSBpbnB1dDxhbnk+KCk7XG5cdHNhdmVGdW5jID0gaW5wdXQ8YW55PigpO1xuXHRjb25maWdOZXdQYXRoID0gaW5wdXQ8YW55PigpO1xuXG5cdHVzZXJIaXN0b3J5U2VydmljZSA9IGluamVjdChVc2VySGlzdG9yeVNlcnZpY2UpO1xuXHRwYWdlRm9ybVNlcnZpY2UgPSBpbmplY3QoUGFnZUZvcm1TZXJ2aWNlKTtcblx0aW5kZXhWYWx1ZSA9IDA7XG5cdHZpc2libGUgPSBmYWxzZTtcblx0ZGlhbG9nU2VhcmNoUHJtITogU2VhcmNoO1xuXHRzZWxlY3RPcHRpb25zITogR3JpZE9wdGlvbnM7XG5cdHNlbGVjdERhdGE6IGFueVtdID0gW107XG5cdHBhZ2VVcmwgPSAnJztcblx0bmV3VXJsID0gJyc7XG5cdGF1dGhMZXZlbCA9IGlucHV0PG51bWJlcj4oLTEpO1xuXHRocmVmczogYW55W10gPSBbXTtcblx0YWN0aW9uID0gaW5qZWN0KEFjdGlvblNlcnZpY2UpO1xuXHRzdWJGb3JtTW9kZWw6IGFueSA9IHt9O1xuXHRzYXZlQnRuRGlzYWJsZSA9IGZhbHNlO1xuXHRncmlkRGlzYWJsZSA9IGZhbHNlO1xuXHRzZWxlY3Rpb25LZXlzOiBhbnlbXSA9IFtdO1xuXHRzdWJEZWxldGVJZHM6IGFueVtdID0gW107XG5cblx0c3RlcHNWaXNpYmxlID0gdHJ1ZTtcblx0cHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG5cdG9uUmVzaXplKCkge1xuXHRcdHRoaXMuc2lkZWJhck1vZGUuc2V0KHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNCA/ICdsZWZ0JyA6ICdyaWdodCcpO1xuXHR9XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0Y29uc29sZS5sb2coYFBhZ2VGb3JtQ29tcG9uZW50YCk7XG5cdFx0dGhpcy5pZCA9IE51bWJlcih0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnaWQnKSk7XG5cdFx0dGhpcy5wYWdlVXJsID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC51cmxcblx0XHRcdC5tYXAoKHNlZ21lbnQpID0+IHNlZ21lbnQucGF0aClcblx0XHRcdC5qb2luKCcvJylcblx0XHRcdC5yZXBsYWNlKC8oW15cXC9dKikkLywgJycpO1xuXHRcdHRoaXMubmV3VXJsID0gYCR7dGhpcy5wYWdlVXJsfW5ld2A7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHR0aGlzLm1vZGVsTmFtZSA9IHRoaXMuZ2V0UHJtSW5wdXQoKS5tb2RlbE5hbWUhO1xuXHRcdFx0XHR0aGlzLmdldFBybSA9IHsgLi4udGhpcy5nZXRQcm1JbnB1dCgpIH07XG5cdFx0XHRcdHRoaXMuaWQgJiYgKHRoaXMuZ2V0UHJtLmlkID0gdGhpcy5pZCk7XG5cdFx0XHRcdGlmICh0aGlzLmlkKSB7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codHlwZW9mIHRoaXMuZm9ybURldGFpbCgpLCAnZm9ybS0tLS0nKTtcblx0XHRcdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge307XG5cdFx0XHRcdFx0dGhpcy5ncmlkTGlzdCgpLmZvckVhY2goKHYpID0+IHtcblx0XHRcdFx0XHRcdGlmICh2LnR5cGUgPT0gJ2dyaWQnKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0UHJtLmRhdGFbdi5zdWJEYXRhS2V5XSA9IFtdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dGhpcy5mb3JtT3B0aW9ucyA9IHsgLi4udGhpcy5mb3JtKCkgfTtcblx0XHR9KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaXNMb2cgPSB0aGlzLm1vZGVsTG9nKCk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5zdGF0dXNTdGVwcygpLmxlbmd0aCA+IDAgJiYgIXRoaXMuaWQpIHtcblx0XHRcdFx0XHR0aGlzLnVwc2VydFBybS5hZGREYXRhIVt0aGlzLnN0YXR1c0tleSgpXSA9IHRoaXMuc3RhdHVzU3RlcHMoKVswXVsndmFsdWUnXTtcblx0XHRcdFx0XHR0aGlzLmdldFBybS5kYXRhID0gT2JqZWN0LmFzc2lnbih0aGlzLmdldFBybS5kYXRhIHx8IHt9LCB7XG5cdFx0XHRcdFx0XHRbdGhpcy5zdGF0dXNLZXkoKV06IHRoaXMuc3RhdHVzU3RlcHMoKVswXVsndmFsdWUnXSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuYXV0aExldmVsKCkgPCAzKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXREaXNhYmxlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdH1cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy51cENiID0gdGhpcy51cENiLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vblJlc2l6ZSgpO1xuXHRcdHRoaXMuYmluZFBhZ2VGb3JtU2VydmljZSgpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5kZXN0cm95JC5uZXh0KCk7XG5cdFx0dGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBiaW5kUGFnZUZvcm1TZXJ2aWNlKCkge1xuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGEkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcblx0XHRcdHRoaXMubWVyZ2VQYWdlRm9ybURhdGEoZGF0YSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS51cGRhdGVEYXRhQnlLZXkkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHsga2V5LCB2YWx1ZSB9KSA9PiB7XG5cdFx0XHR0aGlzLm1lcmdlUGFnZUZvcm1EYXRhKHsgW2tleV06IHZhbHVlIH0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBtZXJnZVBhZ2VGb3JtRGF0YShkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuXHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSB7XG5cdFx0XHQuLi4odGhpcy5nZXRQcm0uZGF0YSA/PyB7fSksXG5cdFx0XHQuLi5kYXRhLFxuXHRcdH07XG5cdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0fVxuXG5cdHByaXZhdGUgc3luY1N1YkZvcm1Nb2RlbEZyb21EYXRhKCkge1xuXHRcdHRoaXMuZ3JpZExpc3QoKS5mb3JFYWNoKChncmlkKSA9PiB7XG5cdFx0XHRpZiAoZ3JpZC50eXBlID09ICdmb3JtJykge1xuXHRcdFx0XHRjb25zdCBmb3JtRGF0YSA9IHRoaXMuZ2V0UHJtLmRhdGE/LltncmlkLnN1YkRhdGFLZXldO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShmb3JtRGF0YSkpIHtcblx0XHRcdFx0XHR0aGlzLnN1YkZvcm1Nb2RlbFtncmlkLnN1YkRhdGFLZXldID0gZm9ybURhdGFbMF0gPz8ge307XG5cdFx0XHRcdH0gZWxzZSBpZiAoZm9ybURhdGEgJiYgdHlwZW9mIGZvcm1EYXRhID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleV0gPSBmb3JtRGF0YTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGdyaWQudHlwZSA9PSAnZ3JpZCcgJiYgIXRoaXMuZ2V0UHJtLmRhdGE/Lmhhc093blByb3BlcnR5KGdyaWQuc3ViRGF0YUtleSkpIHtcblx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YVtncmlkLnN1YkRhdGFLZXldID0gW107XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pMThuLmNoYW5nZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0dGhpcy5zdGVwc1Zpc2libGUgPSBmYWxzZTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnN0ZXBzVmlzaWJsZSA9IHRydWU7XG5cdFx0XHR9LCAxMDApO1xuXHRcdH0pO1xuXHR9XG5cblx0c3VibWl0Rm9ybSgpOiBhbnkge1xuXHRcdC8vIHRoaXMudGFiRm9ybS52YWxpZGF0ZSgpXG5cdFx0Y29uc29sZS5sb2coJ2dldFBybS0tLXRlc3QtLS0nLCB0aGlzLmdldFBybSk7XG5cdFx0bGV0IHN1YkZvcm0gPSB0cnVlO1xuXHRcdGlmICh0aGlzLnRhYkZvcm0ubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy50YWJGb3JtLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0aWYgKCFpdGVtLnZhbGlkYXRlKCkpIHtcblx0XHRcdFx0XHRzdWJGb3JtID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAodGhpcy5jRm9ybS52YWxpZGF0ZSgpICYmIHN1YkZvcm0pIHtcblx0XHRcdGNvbnNvbGUubG9nKCdzdWJtaXRGb3JtJywgdGhpcy5jRm9ybSwgc3ViRm9ybSk7XG5cdFx0XHRjb25zb2xlLmxvZyhgdGhpcy51cHNlcnRQcm1gLCB0aGlzLnVwc2VydFBybSk7XG5cdFx0XHRsZXQgY2I6IGFueSA9IHRoaXMuaWQgPT09IDAgPyBudWxsIDogdGhpcy51cENiO1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHR0eXBlb2YgdGhpcy5zYXZlRnVuYygpID09ICdmdW5jdGlvbicgPyB0aGlzLnNhdmVGdW5jKCkodGhpcy51cHNlcnRQcm0sIHRoaXMuaWQsIGNiKSA6IHRoaXMudXBzZXJ0KG51bGwsIGNiKTtcblx0XHR9XG5cdH1cblxuXHRkZWxSb3dzKGU6IGFueSkge1xuXHRcdGNvbnN0IGdyaWRUYWIgPSB0aGlzLmdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXTtcblx0XHRjb25zdCBkZWxldGVGdW5jID0gZ3JpZFRhYi5kZWxldGVGdW5jO1xuXHRcdGNvbnN0IHN1YlRhYmxlID0gZ3JpZFRhYi5ncmlkT3B0aW9ucy5tb2RlbE5hbWU7XG5cblx0XHRsZXQgcHJtID0ge1xuXHRcdFx0bW9kZWxOYW1lOiBzdWJUYWJsZSxcblx0XHRcdGlkczogZSxcblx0XHR9O1xuXHRcdGlmICghZGVsZXRlRnVuYykge1xuXHRcdFx0dGhpcy53ZWJfcmVtb3ZlKHBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKCk7XG5cdFx0XHRcdHRoaXMuYWN0aW9uLnVwZGF0ZUdyaWRBY3Rpb24oeyB0eXBlOiAnZGVsZXRlJywgZGF0YTogZSB9KTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWxldGVGdW5jKCkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKCk7XG5cdFx0XHRcdHRoaXMuYWN0aW9uLnVwZGF0ZUdyaWRBY3Rpb24oeyB0eXBlOiAnZGVsZXRlJywgZGF0YTogZSB9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHR1cENiKHJlcz86IGFueSkge1xuXHRcdGlmIChyZXMuaWQgPT0gMCkge1xuXHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRsZXQgZWRpdFVybCA9IGAke3RoaXMucGFnZVVybH0ke3Jlcy5pZH1gO1xuXHRcdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZWRpdFVybF0pO1xuXHRcdFx0fSwgMTUwMCk7XG5cdFx0fVxuXHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KGZhbHNlKTtcblx0XHR0aGlzLmNGb3JtLmZpbmFsaXplKCk7XG5cdH1cblx0Ly8gVE9ETyDmmK/lkKbpnIDopoHmlbDmja7ovazmjaLlm57osIPlh73mlbBcblx0b25PayhlOiBhbnkpIHtcblx0XHRjb25zdCBncmlkID0gdGhpcy5ncmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0dGhpcy5ncmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV0uc2VsZWN0RGF0YSA9IFtdO1xuXHRcdGlmIChlLmxlbmd0aCA+IDApIHtcblx0XHRcdGxldCB1bmlxdWVLZXlzID0gW107XG5cdFx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCkge1xuXHRcdFx0XHRjb25zdCByb3dEYXRhID0gdGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdFx0LmdldCh0aGlzLmluZGV4VmFsdWUpIVxuXHRcdFx0XHRcdC5nZXRHcmlkKClcblx0XHRcdFx0XHQuYXBpLmdldFJlbmRlcmVkTm9kZXMoKVxuXHRcdFx0XHRcdC5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdyb3dEYXRhLS0tLS0nLHJvd0RhdGEpXG5cdFx0XHRcdHVuaXF1ZUtleXMgPSByb3dEYXRhLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW2dyaWQudW5pcXVlRmllbGQhXSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBjb25zb2xlLmxvZygndW5pcXVlS2V5cy0tLS0tJyx1bmlxdWVLZXlzLClcblx0XHRcdGUuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdGxldCBvYmogPSBncmlkLnNlbGVjdERhdGFDYiA/IGdyaWQuc2VsZWN0RGF0YUNiKGl0ZW0pIDogeyAuLi5pdGVtIH07XG5cdFx0XHRcdGlmIChncmlkLnVuaXF1ZUZpZWxkICYmIHVuaXF1ZUtleXMuaW5jbHVkZXMob2JqW2dyaWQudW5pcXVlRmllbGQhXSB8fCAnJykpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Z3JpZC5zZWxlY3REYXRhIS5wdXNoKG9iaik7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KHRydWUpO1xuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi51cGRhdGVHcmlkQWN0aW9uKHsgdHlwZTogJ2FkZCcsIGRhdGE6IGdyaWQuc2VsZWN0RGF0YSB9KTtcblx0fVxuXG5cdG9uQ2FuY2VsU2VsZWN0ZWQoZTogYW55KSB7XG5cdFx0Y29uc3QgZ3JpZCA9IHRoaXMuZ3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdGxldCBkYXRhczogYW55ID0gW107XG5cdFx0ZS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSBncmlkLnNlbGVjdERhdGFDYiA/IHsgLi4uZ3JpZC5zZWxlY3REYXRhQ2IoaXRlbSkgfSA6IGl0ZW07XG5cdFx0XHRkYXRhcy5wdXNoKGRhdGEpO1xuXHRcdH0pO1xuXHRcdGlmIChncmlkLnVuaXF1ZUZpZWxkKSB7XG5cdFx0XHRjb25zdCBrZXlzID0gZGF0YXMubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bZ3JpZC51bmlxdWVGaWVsZF0pO1xuXHRcdFx0Y29uc3Qgcm93RGF0YSA9IHRoaXMuY3VzdG9tR3JpZFxuXHRcdFx0XHQuZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhXG5cdFx0XHRcdC5nZXRHcmlkKClcblx0XHRcdFx0LmFwaS5nZXRSZW5kZXJlZE5vZGVzKClcblx0XHRcdFx0Lm1hcCgobm9kZSkgPT4gbm9kZS5kYXRhKTtcblx0XHRcdGxldCBkZWxldGVkUm93cyA9IHJvd0RhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IGtleXMuaW5jbHVkZXMoaXRlbVtncmlkLnVuaXF1ZUZpZWxkXSkpO1xuXHRcdFx0dGhpcy5zdWJEZWxldGVJZHMgPSBkZWxldGVkUm93cy5tYXAoKHY6IGFueSkgPT4gdi5pZCkuZmlsdGVyKCh2OiBhbnkpID0+IHYpO1xuXHRcdFx0Y29uc3QgaWROb3RSb3dzID0gZGVsZXRlZFJvd3MuZmlsdGVyKCh2OiBhbnkpID0+ICF2LmlkKTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCdpZE5vdFJvd3MtLS0tJyxpZE5vdFJvd3MpXG5cdFx0XHRjb25zdCBkZWxldGVOb2RlczogYW55ID0gW107XG5cdFx0XHR0aGlzLmN1c3RvbUdyaWRcblx0XHRcdFx0LmdldCh0aGlzLmluZGV4VmFsdWUpIVxuXHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdC5hcGkuZm9yRWFjaE5vZGUoKG5vZGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGxldCBtYWluID0gbm9kZS5kYXRhW2dyaWQudW5pcXVlRmllbGRdO1xuXHRcdFx0XHRcdGxldCBpc0V4aXQgPSBpZE5vdFJvd3MuZmluZEluZGV4KCh2OiBhbnkpID0+IHZbZ3JpZC51bmlxdWVGaWVsZF0gPT0gbWFpbik7XG5cdFx0XHRcdFx0aWYgKGlzRXhpdCA+IC0xKSB7XG5cdFx0XHRcdFx0XHRkZWxldGVOb2Rlcy5wdXNoKG5vZGUuZGF0YSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdC8vIGlmKGRlbGV0ZWRJZHMubGVuZ3RoID4gMCl7XG5cdFx0XHQvLyBcdHRoaXMuZGVsUm93cyhkZWxldGVkSWRzKVxuXHRcdFx0Ly8gfSBlbHNlIHtcblx0XHRcdHRoaXMuY3VzdG9tR3JpZC5nZXQodGhpcy5pbmRleFZhbHVlKSEuc2VsZWN0Um93c0RlbGV0ZWQoZGVsZXRlTm9kZXMpO1xuXHRcdFx0Ly8gfVxuXHRcdH1cblx0fVxuXHRnZXREZXRhaWwoKSB7XG5cdFx0dGhpcy53ZWJfZ2V0KHRoaXMuZ2V0UHJtKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0dGhpcy5kZXRhaWxDYihyZXMpO1xuXHRcdH0pO1xuXHR9XG5cdC8vIOiOt+WPluivpuaDheWbnuiwg1xuXHRkZXRhaWxDYihyZXM6IGFueSkge1xuXHRcdHRoaXMudXBkYXRlVGl0bGUocmVzKTtcblx0XHR0aGlzLnN5bmNTdWJGb3JtTW9kZWxGcm9tRGF0YSgpO1xuXHRcdGlmICh0eXBlb2YgdGhpcy5mb3JtRGlzYWJsZWQoKSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aGlzLmZvcm1EaXNGdW5jKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmhyZWZCdG5MaXN0KCkubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5zZXRIcmVmVmFsdWUoKTtcblx0XHR9XG5cdH1cblx0c2V0SHJlZlZhbHVlKCkge1xuXHRcdHRoaXMuaHJlZkJ0bkxpc3QoKS5tYXAoKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoJ3NlYXJjaENvdW50JykgJiYgdHlwZW9mIGl0ZW0uc2VhcmNoQ291bnQgPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aXRlbS5zZWFyY2hDb3VudC5jb2x1bW5GaWx0ZXJzLmZvckVhY2goKHY6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGlmICh0eXBlb2Ygdi5maXRlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0di5maXRlciA9IHYuZml0ZXIodGhpcy5nZXRQcm0uZGF0YSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy53ZWJfc2VhcmNoQ291bnQoaXRlbS5zZWFyY2hDb3VudCkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0XHRpdGVtLnZhbHVlID0gcmVzLnRvdGFsTnVtIHx8IDA7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHVwZGF0ZVRpdGxlKHJlczogYW55KSB7XG5cdFx0bGV0IG1haW5GaWVsZCA9IHRoaXMuZm9ybSgpLm1haW5GaWVsZDtcblx0XHRsZXQgdGl0bGUgPSByZXNbbWFpbkZpZWxkIV07XG5cdFx0dGhpcy51c2VySGlzdG9yeVNlcnZpY2Uuc2V0TGFzdFRpdGxlKHRpdGxlKTtcblx0fVxuXHRkYXRhU291cmNlU2hvdygpIHtcblx0XHRjb25zdCBncmlkID0gdGhpcy5ncmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0dGhpcy5kaWFsb2dTZWFyY2hQcm0gPSB7fTtcblx0XHR0aGlzLnNlbGVjdE9wdGlvbnMgPSB0aGlzLmdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXVsnc2VsZWN0T3B0aW9ucyddITtcblx0XHRpZiAoKHRoaXMuc2VsZWN0T3B0aW9ucyBhcyBhbnkpPy5zZWFyY2hQcm0pIHtcblx0XHRcdGxldCBzZWFyY2hQcm0gPSBkZWVwQ2xvbmUoKHRoaXMuc2VsZWN0T3B0aW9ucyBhcyBhbnkpLnNlYXJjaFBybSwgdGhpcyk7XG5cdFx0XHRzZWFyY2hQcm0uY29sdW1uRmlsdGVycz8uZm9yRWFjaCgodjogYW55KSA9PiB7XG5cdFx0XHRcdGlmICh0eXBlb2Ygdi5maXRlciA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0di5maXRlciA9IHYuZml0ZXIobnVsbCwgdGhpcy5nZXRQcm0uZGF0YSB8fCB0aGlzLmNGb3JtLm1vZGVsKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuZGlhbG9nU2VhcmNoUHJtID0gc2VhcmNoUHJtO1xuXHRcdH1cblx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybS5tb2RlbE5hbWUgPSB0aGlzLnNlbGVjdE9wdGlvbnMubW9kZWxOYW1lO1xuXHRcdGlmICh0aGlzLnNlbGVjdE9wdGlvbnMuc2VsZWN0aW9uTW9kZSkge1xuXHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnN1cHByZXNzUm93RGVzZWxlY3Rpb24gPSB0cnVlO1xuXHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlbGVjdE9wdGlvbnMuc2VsZWN0aW9uTW9kZTtcblx0XHRcdGNvbnN0IGlzUm93U2VsZWN0YWJsZSA9IHRoaXMuc2VsZWN0T3B0aW9ucy5pc1Jvd1NlbGVjdGFibGU7XG5cdFx0XHRpZiAodGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGUgIT0gJ25vbmUnKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24gPSB7XG5cdFx0XHRcdFx0bW9kZTogdGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGUgPT0gJ3NpbmdsZScgPyAnc2luZ2xlUm93JyA6ICdtdWx0aVJvdycsXG5cdFx0XHRcdFx0aXNSb3dTZWxlY3RhYmxlOiBpc1Jvd1NlbGVjdGFibGUgPyBpc1Jvd1NlbGVjdGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBjb25zb2xlLmxvZygnb3B0aW9ucy0tLS0tJyx0aGlzLnNlbGVjdE9wdGlvbnMpXG5cdFx0aWYgKGdyaWQudW5pcXVlRmllbGQpIHtcblx0XHRcdGNvbnN0IHJvd0RhdGEgPSB0aGlzLmN1c3RvbUdyaWRcblx0XHRcdFx0LmdldCh0aGlzLmluZGV4VmFsdWUpIVxuXHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdC5hcGkuZ2V0UmVuZGVyZWROb2RlcygpXG5cdFx0XHRcdC5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSk7XG5cdFx0XHR0aGlzLnNlbGVjdGlvbktleXMgPSByb3dEYXRhPy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtncmlkLnVuaXF1ZUZpZWxkIV0pIHx8IFtdO1xuXHRcdFx0Ly8gY29uc29sZS5sb2coJ3RoaXMuc2VsZWN0aW9uS2V5cy0tLS0nLHRoaXMuc2VsZWN0aW9uS2V5cylcblx0XHRcdGlmICh0eXBlb2YgdGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uLmNoZWNrYm94ZXMgPSAocGFyYW1zKSA9PiB7XG5cdFx0XHRcdFx0bGV0IGl0ZW0gPVxuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkgIT0gJydcblx0XHRcdFx0XHRcdFx0PyByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YVt0aGlzLnNlbGVjdE9wdGlvbnMuZGF0YUtleSFdKVxuXHRcdFx0XHRcdFx0XHQ6IHJvd0RhdGEuZmluZCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IHBhcmFtcy5kYXRhLmlkKTtcblx0XHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmlkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIGlmICghdGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbikge1xuXHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uID0ge1xuXHRcdFx0XHRcdG1vZGU6ICdtdWx0aVJvdycsXG5cdFx0XHRcdFx0Y2hlY2tib3hlczogKHBhcmFtcykgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IGl0ZW0gPVxuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMuZGF0YUtleSAhPSAnJ1xuXHRcdFx0XHRcdFx0XHRcdD8gcm93RGF0YS5maW5kKCh2OiBhbnkpID0+IHZbZ3JpZC51bmlxdWVGaWVsZF0gPT0gcGFyYW1zLmRhdGFbdGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkhXSlcblx0XHRcdFx0XHRcdFx0XHQ6IHJvd0RhdGEuZmluZCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IHBhcmFtcy5kYXRhLmlkKTtcblx0XHRcdFx0XHRcdGlmIChpdGVtICYmIGl0ZW0uaWQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZWxlY3Rpb25LZXlzID0gW107XG5cdFx0fVxuXHRcdHRoaXMudmlzaWJsZSA9IHRydWU7XG5cdH1cblxuXHRnb1J1bihkYXRhOiBhbnkpIHtcblx0XHRpZiAodHlwZW9mIGRhdGEudXJsID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRsZXQgdXJsID0gZGF0YS51cmwodGhpcy5nZXRQcm0uZGF0YSk7XG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgc3VtbWFyeTogJ1dhcm4nLCBkZXRhaWw6ICfor7fphY3nva7ot7Povazpk77mjqUnIH0pO1xuXHRcdH1cblx0fVxuXG5cdGF1dGhDbGljayhidG46IGFueSkge1xuXHRcdGlmIChidG4uaGFzT3duUHJvcGVydHkoJ29uQ2xpY2snKSkge1xuXHRcdFx0YnRuLm9uQ2xpY2sodGhpcy5nZXRQcm0uZGF0YSk7XG5cdFx0fVxuXHR9XG5cdHN0YXR1c0NoYW5nZSh2YWx1ZTogYW55LCBjdXN0b21TdGVwczogU3RlcHNDb21wb25lbnQpIHtcblx0XHRpZiAodGhpcy5hdXRoTGV2ZWwoKSA8IDQgfHwgIXRoaXMuc3RhdHVzQ29uZigpLmlzQ2xpY2spIHJldHVybjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0bGV0IHBhcmFtOiBhbnkgPSB7XG5cdFx0XHRcdG1vZGVsTmFtZTogdGhpcy5tb2RlbE5hbWUsXG5cdFx0XHRcdGRhdGE6IHsgaWQ6IHRoaXMuaWQsIFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUgfSxcblx0XHRcdH07XG5cdFx0XHRpZiAodGhpcy5pc0xvZykge1xuXHRcdFx0XHRwYXJhbS5sb2dNb2RlbCA9IGAke3RoaXMubW9kZWxOYW1lfUxvZ2A7XG5cdFx0XHRcdHBhcmFtLmxvZyA9IHtcblx0XHRcdFx0XHRwaWQ6IHRoaXMuaWQsXG5cdFx0XHRcdFx0Y29udGVudDogYFvnirbmgIFdICR7dGhpcy5nZXRQcm0uZGF0YSFbdGhpcy5zdGF0dXNLZXkoKV19IC0+ICR7dmFsdWV9YCxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHRoaXMud2ViX3dyaXRlKHBhcmFtKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHR0aGlzLmdldERldGFpbCgpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSBPYmplY3QuYXNzaWduKHRoaXMuZ2V0UHJtLmRhdGEgfHwge30sIHtcblx0XHRcdFx0W3RoaXMuc3RhdHVzS2V5KCldOiB2YWx1ZSxcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy51cHNlcnRQcm0uYWRkRGF0YSFbdGhpcy5zdGF0dXNLZXkoKV0gPSB2YWx1ZTtcblx0XHRcdHRoaXMuY0Zvcm0udHJpZ2dlck1vZGVsRWZmZWN0KHsgW3RoaXMuc3RhdHVzS2V5KCldOiB2YWx1ZSB9KTtcblx0XHRcdC8vIGN1c3RvbVN0ZXBzLnJlZnJlc2hTdGVwcygpXG5cdFx0fVxuXHR9XG5cblx0Zm9ybURpc0Z1bmMoKSB7XG5cdFx0bGV0IGRhdGEgPSB0aGlzLmZvcm1EaXNhYmxlZCgpISh0aGlzLmdldFBybS5kYXRhKTtcblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuXHRcdFx0dGhpcy5zYXZlQnRuRGlzYWJsZSA9IGRhdGE7XG5cdFx0XHR0aGlzLmdyaWREaXNhYmxlID0gZGF0YTtcblx0XHRcdHRoaXMuZGlzYWJsZUZvcm0oZGF0YSk7XG5cdFx0XHR0aGlzLmRpc2FiZWxkQ2hpbGQoZGF0YSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGNvbnN0IGRpc2FiZWxkID0gZGF0YS5kaXNhYmxlZDtcblx0XHRcdGNvbnN0IGZpbHRlcnMgPSBkYXRhLmZpbHRlcnMgfHwgW107XG5cdFx0XHRpZiAoIWZpbHRlcnMuaW5jbHVkZXMoJ2Zvcm0nKSkge1xuXHRcdFx0XHR0aGlzLmRpc2FibGVGb3JtKGRpc2FiZWxkKTtcblx0XHRcdH1cblx0XHRcdGlmICghZmlsdGVycy5pbmNsdWRlcygnZ3JpZCcpKSB7XG5cdFx0XHRcdHRoaXMuZ3JpZERpc2FibGUgPSBkaXNhYmVsZDtcblx0XHRcdFx0dGhpcy5kaXNhYmVsZENoaWxkKGRpc2FiZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0ZGlzYWJsZUZvcm0oZGlzYWJsZTogYm9vbGVhbikge1xuXHRcdHRoaXMuZm9ybU9wdGlvbnMuZmllbGRzPy5mb3JFYWNoKCh2KSA9PiB7XG5cdFx0XHR2Lmdyb3VwPy5mb3JFYWNoKChnOiBhbnkpID0+IHtcblx0XHRcdFx0bGV0IGZpZWxkRGlzYWJsZWQgPSBnW2Zvcm1UeXBlVG9Qcm9wc1tnLnR5cGVdXS5kaXNhYmxlZCB8fCBmYWxzZTtcblx0XHRcdFx0aWYgKGRpc2FibGUpIHtcblx0XHRcdFx0XHR0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0dGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0IWZpZWxkRGlzYWJsZWQgJiYgdGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0ZGlzYWJlbGRDaGlsZChkaXNhYmVsZDogYm9vbGVhbikge1xuXHRcdHRoaXMuZ3JpZExpc3QoKS5mb3JFYWNoKCh2LCBpbmRleDogYW55KSA9PiB7XG5cdFx0XHRpZiAodi50eXBlID09ICdncmlkJykge1xuXHRcdFx0XHR2LmdyaWRPcHRpb25zLmNvbHVtbkRlZnMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGRpc2FiZWxkICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2VkaXRhYmxlJykpIHtcblx0XHRcdFx0XHRcdGl0ZW0uZWRpdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8g5ZCM5LiA5Liq6aG16Z2iZGlzYWJsZWQgZmFsc2UgID0+IHRydWVcblx0XHRcdFx0XHRpZiAoIWRpc2FiZWxkICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2VkaXRhYmxlJykgJiYgIWl0ZW0uZWRpdGFibGUgJiYgdHlwZW9mIGl0ZW0uZWRpdGFibGUgPT09ICdib29sZWFuJykge1xuXHRcdFx0XHRcdFx0aXRlbS5lZGl0YWJsZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5jdXN0b21HcmlkLmdldChpbmRleCkhLmdldEdyaWQoKS5hcGkuc2V0R3JpZE9wdGlvbignY29sdW1uRGVmcycsIHYuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcyk7XG5cdFx0XHR9IGVsc2UgaWYgKHYudHlwZSA9PSAnZm9ybScpIHtcblx0XHRcdFx0di5maWVsZHM/LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRcdGl0ZW0uZ3JvdXA/LmZvckVhY2goKGc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IGZpZWxkRGlzYWJsZWQgPSBnW2Zvcm1UeXBlVG9Qcm9wc1tnLnR5cGVdXS5kaXNhYmxlZCB8fCBmYWxzZTtcblx0XHRcdFx0XHRcdGlmIChkaXNhYmVsZCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnRhYkZvcm0uZ2V0KGluZGV4KSEuZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLm1hcmtBc1ByaXN0aW5lKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0XHRcdFx0dGhpcy50YWJGb3JtLmdldChpbmRleCkhLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdCFmaWVsZERpc2FibGVkICYmIHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHNldERpc2FibGVkKCkge1xuXHRcdHRoaXMuZ3JpZExpc3QoKS5mb3JFYWNoKCh2LCBpbmRleDogYW55KSA9PiB7XG5cdFx0XHRpZiAodi50eXBlID09ICdmb3JtJykge1xuXHRcdFx0XHR2LmZpZWxkcz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0aXRlbS5ncm91cD8uZm9yRWFjaCgoZzogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnRhYkZvcm0uZ2V0KGluZGV4KSEuZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHR0YWJDbGljaygpIHtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMudGFiRm9ybS5nZXQodGhpcy5pbmRleFZhbHVlKSAmJiB0aGlzLnRhYkZvcm0uZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhLnJlQ2FsY0xhYmVsU2l6ZSgpO1xuXHRcdH0sIDApO1xuXHR9XG5cdHRvZ2dsZUxvZygpIHtcblx0XHR0aGlzLnNpZGViYXJNb2RlLnNldCh0aGlzLnNpZGViYXJNb2RlKCkgPT09ICdsZWZ0JyA/ICdyaWdodCcgOiAnbGVmdCcpO1xuXHR9XG5cblx0Z2V0UGFnZUZvcm1TbG90Q29udGV4dChncmlkOiBHcmlkTGlzdCwgaW5kZXg6IG51bWJlcik6IFBhZ2VGb3JtU2xvdENvbnRleHQge1xuXHRcdHJldHVybiB7XG5cdFx0XHQkaW1wbGljaXQ6IGdyaWQsXG5cdFx0XHRzbG90S2V5OiBncmlkLnNsb3RLZXkgfHwgZ3JpZC5zdWJEYXRhS2V5LFxuXHRcdFx0Z3JpZCxcblx0XHRcdGluZGV4LFxuXHRcdFx0cGFnZUZvcm06IHRoaXMsXG5cdFx0XHRkYXRhOiAodGhpcy5nZXRQcm0uZGF0YSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHRtb2RlbDogZ3JpZC50eXBlID09PSAnZ3JpZCcgPyB0aGlzLmdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5IV0gOiB0aGlzLnN1YkZvcm1Nb2RlbFtncmlkLnN1YkRhdGFLZXkhXSB8fCB7fSxcblx0XHRcdHVwc2VydDogdGhpcy51cHNlcnRQcm0sXG5cdFx0XHRhY3RpdmU6IHRoaXMuaW5kZXhWYWx1ZSA9PT0gaW5kZXgsXG5cdFx0fTtcblx0fVxufVxuIiwiPGRpdiBjbGFzcz1cIm1kOm92ZXJmbG93LWhpZGRlblwiPlxuXHQ8ZGl2IGNsYXNzPVwiZmxleCBtZDpmbGV4LXdyYXAgbGc6ZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlbiBweS0xIHB4LTEgYm9yZGVyLWItWzFweF0gYm9yZGVyLVsjZGJkYmRiXSBiZy13aGl0ZVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJsZzpiYXNpcy0xLzMgb3JkZXItMVwiPlxuXHRcdFx0PGFwcC1jcnVtYi1hY3Rpb25cblx0XHRcdFx0W2FkZFZpc2libGVdPVwiYWRkVmlzaWJsZSgpXCJcblx0XHRcdFx0W25ld1VybF09XCJuZXdVcmxcIlxuXHRcdFx0XHRbaXNTaG93Q29nXT1cInRydWVcIlxuXHRcdFx0XHRbb3V0bGluZWRdPVwidHJ1ZVwiXG5cdFx0XHRcdFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuXHRcdFx0XHRbYWN0aW9uTGlzdF09XCJhY3Rpb25MaXN0KClcIlxuXHRcdFx0XHRbY29uZmlnTmV3UGF0aF09XCJjb25maWdOZXdQYXRoKClcIlxuXHRcdFx0XHRbZGF0YV09XCJnZXRQcm0uZGF0YSA/PyB7fVwiXG5cdFx0XHRcdFtzYXZlQnRuRGlzYWJsZV09XCJzYXZlQnRuRGlzYWJsZVwiXG5cdFx0XHRcdChhY3Rpb25FdmVudCk9XCJhdXRoQ2xpY2soJGV2ZW50KVwiXG5cdFx0XHRcdChzYXZlRXZlbnQpPVwic3VibWl0Rm9ybSgpXCI+XG5cdFx0XHQ8L2FwcC1jcnVtYi1hY3Rpb24+XG5cdFx0PC9kaXY+XG5cblx0XHQ8ZGl2IGNsYXNzPVwiYmFzaXMtMS81IGxnOmJhc2lzLTIvMyBvcmRlci0yIGxnOm9yZGVyLTIgbWQ6b3JkZXItbGFzdCBtZDpiYXNpcy1mdWxsIG1kOm10LVs2cHhdXCI+XG5cdFx0XHQ8aHJlZi1idG4tbGlzdFxuXHRcdFx0XHRbaHJlZnNdPVwiaHJlZkJ0bkxpc3QoKVwiXG5cdFx0XHRcdChocmVmQ2xpY2spPVwiZ29SdW4oJGV2ZW50KVwiPjwvaHJlZi1idG4tbGlzdD5cblx0XHRcdDwhLS0gQGlmIChpZCkge1xuXHRcdFx0XHRAZm9yIChidG4gb2YgaHJlZkJ0bkxpc3QoKTsgdHJhY2sgYnRuKSB7XG5cdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRbdmFyaWFudF09XCJidG4/LnZhcmlhbnRcIlxuXHRcdFx0XHRcdFx0W3NldmVyaXR5XT1cImJ0bj8uc2V2ZXJpdHlcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJtci1bNnB4XVwiXG5cdFx0XHRcdFx0XHRzaXplPVwic21hbGxcIlxuXHRcdFx0XHRcdFx0W2ljb25dPVwiYnRuPy5pY29uXCJcblx0XHRcdFx0XHRcdGxhYmVsPVwie3sgYnRuLmkxOG5LZXkgPyBpMThuLmZhbnlpKGJ0bi5pMThuS2V5KSA6IGJ0bi5sYWJlbCB9fVwiXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiZ29SdW4oYnRuKVwiPlxuXHRcdFx0XHRcdDwvcC1idXR0b24+XG5cdFx0XHRcdH1cblx0XHRcdH0gLS0+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cImJhc2lzLTEvMyBvcmRlci0zIGZsZXggZmxleC1yb3ctcmV2ZXJzZVwiPlxuXHRcdFx0QGlmIChtb2RlbExvZygpKSB7XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2tcIj5cblx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0W2NsYXNzXT1cIidpY29uZm9udCBpY29uLXNpZGViYXIgaWNvbi1zaWRlYmFyLScgKyBzaWRlYmFyTW9kZSgpXCJcblx0XHRcdFx0XHRcdChjbGljayk9XCJ0b2dnbGVMb2coKVwiPjwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiZmxleFwiPlxuXHRcdDxkaXYgY2xhc3M9XCJweC0yIGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBmbGV4LTFcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmFzaXMtMS8zIHB5LTEgYmFzaXMtZnVsbCBtZDpmbGV4IGl0ZW1zLWNlbnRlciBmbGV4LXJvdyBvcmRlci0xXCI+XG5cdFx0XHRcdEBmb3IgKGFjdGlvbiBvZiBhY3Rpb25MaXN0KCk7IGxldCBpID0gJGluZGV4OyB0cmFjayBhY3Rpb24pIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdHNpemU9XCJzbWFsbFwiXG5cdFx0XHRcdFx0XHRbaWNvbl09XCJnZXRQcm0uZGF0YT8uaWNvblwiXG5cdFx0XHRcdFx0XHRbbG9hZGluZ109XCJhY3Rpb24ubG9hZGluZ1wiXG5cdFx0XHRcdFx0XHRbbGFiZWxdPVwiYWN0aW9uLmkxOG5LZXkgPyAoYWN0aW9uLmkxOG5LZXkgfCB0cmFuc2xhdGUpIDogYWN0aW9uLmxhYmVsXCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJhY3Rpb24uYnRuRGlzYWJsZWQgPyBhY3Rpb24uYnRuRGlzYWJsZWQoZ2V0UHJtLmRhdGEpIDogZmFsc2VcIlxuXHRcdFx0XHRcdFx0W3N0eWxlQ2xhc3NdPVwiXG5cdFx0XHRcdFx0XHRcdChhY3Rpb24uYXV0aCB8fCAwKSA+IChhdXRoTGV2ZWwoKSB8fCAwKSB8fCAhIWFjdGlvbi5idG5IaWRkZW4/LihnZXRQcm0uZGF0YSlcblx0XHRcdFx0XHRcdFx0XHQ/ICdmb3JtLWFjdGlvbiBoaWRkZW4nXG5cdFx0XHRcdFx0XHRcdFx0OiAnZm9ybS1hY3Rpb24gYmxvY2sgbXItWy41cmVtXSdcblx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHQob25DbGljayk9XCJhY3Rpb24ub25DbGljayAhPSAnJyAmJiBhY3Rpb24ub25DbGljaz8uKGdldFBybS5kYXRhLCBhY3Rpb24pXCI+XG5cdFx0XHRcdFx0PC9wLWJ1dHRvbj5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibWQ6YmFzaXMtMi8zIGJhc2lzLWZ1bGwgZmxleCBtZDpmbGV4LXJvdy1yZXZlcnNlIGZsZXgtcm93IG1kOm9yZGVyLTIgb3JkZXItZmlyc3Qgdy1mdWxsXCI+XG5cdFx0XHRcdEBpZiAoc3RlcHNWaXNpYmxlKSB7XG5cdFx0XHRcdFx0PGN1c3RvbS1zdGVwc1xuXHRcdFx0XHRcdFx0I2N1c3RvbVN0ZXBzXG5cdFx0XHRcdFx0XHRjbGFzcz1cInctZnVsbFwiXG5cdFx0XHRcdFx0XHRbc3RlcHNdPVwic3RhdHVzU3RlcHMoKVwiXG5cdFx0XHRcdFx0XHRbbW9kZWxMb2ddPVwic2hvd0xvZygpXCJcblx0XHRcdFx0XHRcdFtjdXJyZW50XT1cImdldFBybS5kYXRhICYmIGdldFBybS5kYXRhW3N0YXR1c0tleSgpXSAhPT0gdW5kZWZpbmVkID8gZ2V0UHJtLmRhdGFbc3RhdHVzS2V5KCldIDogMFwiXG5cdFx0XHRcdFx0XHRbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcblx0XHRcdFx0XHRcdFtpc0NsaWNrXT1cInRoaXMuc3RhdHVzQ29uZigpLmlzQ2xpY2tcIlxuXHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJzdGF0dXNDaGFuZ2UoJGV2ZW50LCBjdXN0b21TdGVwcylcIj5cblx0XHRcdFx0XHQ8L2N1c3RvbS1zdGVwcz5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0QGlmIChzaG93TG9nKCkpIHtcblx0XHRcdDxkaXYgY2xhc3M9XCJsZzp3LVs0MDBweF0gbWQ6dy1bMzAwcHhdIGhpZGRlbiBtZDpibG9ja1wiPjwvZGl2PlxuXHRcdH1cblx0PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJtYWluIGZsZXggZmxleC13cmFwXCI+XG5cdFx0PGRpdiBjbGFzcz1cInctZnVsbCBtZDpmbGV4LTEgbWQ6aC1mdWxsIG1kOm92ZXJmbG93LXktYXV0b1wiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImJnLXdoaXRlIG14LTIgZm9ybS1wYW5lbFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwicC0yIGZsZXgtMVwiPlxuXHRcdFx0XHRcdDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybSgpLmZvcm0hXCI+XG5cdFx0XHRcdFx0XHQ8Y3VzdG9tLWZvcm1cblx0XHRcdFx0XHRcdFx0I2NGb3JtXG5cdFx0XHRcdFx0XHRcdFtvcHRpb25zXT1cImZvcm1PcHRpb25zXCJcblx0XHRcdFx0XHRcdFx0W3Vwc2VydF09XCJ1cHNlcnRQcm1cIlxuXHRcdFx0XHRcdFx0XHRbbW9kZWxdPVwiZ2V0UHJtLmRhdGEgPz8ge31cIj48L2N1c3RvbS1mb3JtPlxuXHRcdFx0XHRcdDwvZm9ybT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdEBpZiAoZ3JpZExpc3QoKSAmJiBncmlkTGlzdCgpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicmVsYXRpdmUgbWItMlwiPlxuXHRcdFx0XHRcdFx0PHAtdGFicyBbKHZhbHVlKV09XCJpbmRleFZhbHVlXCI+XG5cdFx0XHRcdFx0XHRcdDxwLXRhYmxpc3Q+XG5cdFx0XHRcdFx0XHRcdFx0QGZvciAoZmNoaWxkIG9mIGdyaWRMaXN0KCk7IGxldCBpID0gJGluZGV4OyB0cmFjayBmY2hpbGQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdDxwLXRhYlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbdmFsdWVdPVwiaVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJ0YWJDbGljaygpXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7IGZjaGlsZC5pMThuS2V5ID8gaTE4bi5mYW55aShmY2hpbGQuaTE4bktleSkgOiBmY2hpbGQudGl0bGUgfX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvcC10YWI+XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQ8L3AtdGFibGlzdD5cblx0XHRcdFx0XHRcdDwvcC10YWJzPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR9XG5cdFx0XHRcdEBmb3IgKGdyaWQgb2YgZ3JpZExpc3QoKTsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrIGdyaWQpIHtcblx0XHRcdFx0XHRAaWYgKCEhZ3JpZD8uc2xvdEtleSAmJiBwYWdlRm9ybVNsb3QpIHtcblx0XHRcdFx0XHRcdDxkaXYgW2hpZGRlbl09XCJpbmRleFZhbHVlICE9IGlcIiBbbmdTdHlsZV09XCJ7J2hlaWdodCc6IGdyaWQuZ3JpZE9wdGlvbnMuc2Nyb2xsSGVpZ2h0fVwiPlxuXHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnZUZvcm1TbG90LnRlbXBsYXRlUmVmOyBjb250ZXh0OiBnZXRQYWdlRm9ybVNsb3RDb250ZXh0KGdyaWQsIGkpXCI+IDwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0XHRAaWYgKGdyaWQudHlwZSA9PSAnZ3JpZCcpIHtcblx0XHRcdFx0XHRcdFx0PGN1c3RvbS1ncmlkXG5cdFx0XHRcdFx0XHRcdFx0I2N1c3RvbUdyaWRcblx0XHRcdFx0XHRcdFx0XHRbaGlkZGVuXT1cImluZGV4VmFsdWUgIT0gaVwiXG5cdFx0XHRcdFx0XHRcdFx0W3Jvd0RhdGFdPVwiZ2V0UHJtLmRhdGE/LltncmlkLnN1YkRhdGFLZXkhXVwiXG5cdFx0XHRcdFx0XHRcdFx0W3Vwc2VydF09XCJ1cHNlcnRQcm1cIlxuXHRcdFx0XHRcdFx0XHRcdChkZWxldGVFbWl0KT1cImRlbFJvd3MoJGV2ZW50KVwiXG5cdFx0XHRcdFx0XHRcdFx0W2FkZFR5cGVdPVwiZ3JpZC5zdWJUYWJsZVNvdXJjZVwiXG5cdFx0XHRcdFx0XHRcdFx0KGFkZEVtaXQpPVwiZGF0YVNvdXJjZVNob3coKVwiXG5cdFx0XHRcdFx0XHRcdFx0W2dyaWRPcHRpb25zXT1cImdyaWQuZ3JpZE9wdGlvbnNcIlxuXHRcdFx0XHRcdFx0XHRcdFtncmlkRGlzYWJsZV09XCJncmlkRGlzYWJsZVwiXG5cdFx0XHRcdFx0XHRcdFx0W2F1dGhMZXZlbF09XCJhdXRoTGV2ZWwoKVwiXG5cdFx0XHRcdFx0XHRcdFx0W3Nob3dEZWxldGVdPVwiZ3JpZC5zaG93RGVsZXRlXCJcblx0XHRcdFx0XHRcdFx0XHRbc2VsZWN0RGF0YV09XCJncmlkLnNlbGVjdERhdGFcIlxuXHRcdFx0XHRcdFx0XHRcdFthZGRTb3J0XT1cImdyaWQuYWRkU29ydFwiPlxuXHRcdFx0XHRcdFx0XHQ8L2N1c3RvbS1ncmlkPlxuXHRcdFx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0XHRcdDxjdXN0b20tZm9ybVxuXHRcdFx0XHRcdFx0XHRcdCN0YWJGb3JtXG5cdFx0XHRcdFx0XHRcdFx0W2hpZGRlbl09XCJpbmRleFZhbHVlICE9IGlcIlxuXHRcdFx0XHRcdFx0XHRcdFtvcHRpb25zXT1cImdyaWRcIlxuXHRcdFx0XHRcdFx0XHRcdFt1cHNlcnRdPVwidXBzZXJ0UHJtXCJcblx0XHRcdFx0XHRcdFx0XHRbbW9kZWxdPVwic3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleSFdIHx8IHt9XCI+XG5cdFx0XHRcdFx0XHRcdDwvY3VzdG9tLWZvcm0+XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHRAaWYgKHNob3dMb2coKSkge1xuXHRcdFx0PGRpdiBjbGFzcz1cInctZnVsbCBsZzp3LVs0MDBweF0gbWQ6dy1bMzAwcHhdIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG8gaGlkZGVuIG1kOmJsb2NrXCI+XG5cdFx0XHRcdDxjdXN0b20tbG9nIFtsb2dzXT1cImdldFBybS5kYXRhPy5sb2cgPz8gW11cIj48L2N1c3RvbS1sb2c+XG5cdFx0XHQ8L2Rpdj5cblx0XHR9XG5cdDwvZGl2PlxuPC9kaXY+XG48cm93LXNlbGVjdG9yXG5cdFsodmlzaWJsZSldPVwidmlzaWJsZVwiXG5cdFtzZWFyY2hQcm1dPVwiZGlhbG9nU2VhcmNoUHJtXCJcblx0W2dyaWRPcHRpb25zXT1cInNlbGVjdE9wdGlvbnNcIlxuXHRbc2VsZWN0aW9uS2V5c109XCJzZWxlY3Rpb25LZXlzXCJcblx0KG9uT2spPVwib25PaygkZXZlbnQpXCJcblx0KGNhbmNlbFNlbGVjdCk9XCJvbkNhbmNlbFNlbGVjdGVkKCRldmVudClcIj5cbjwvcm93LXNlbGVjdG9yPlxuIl19
556
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcGFnZS1mb3JtL3BhZ2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3BhZ2UtZm9ybS9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUdOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFFUixNQUFNLEVBQ04sWUFBWSxFQUVaLFlBQVksR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQWUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQU8sTUFB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QXJDLFlBQVk7dUJBQUMsWUFBWTtnQkFDRCxPQUFPO3NCQUEvQixZQUFZO3VCQUFDLFNBQVM7Z0JBQ3FDLFlBQVk7c0JBQXZFLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQTJDMUQsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVc2VySGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3VzZXJIaXN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGQsXG5cdGluamVjdCxcblx0T25Jbml0LFxuXHRPbkRlc3Ryb3ksXG5cdFZpZXdDaGlsZCxcblx0aW5wdXQsXG5cdGVmZmVjdCxcblx0Y29tcHV0ZWQsXG5cdElucHV0LFxuXHRzaWduYWwsXG5cdFZpZXdDaGlsZHJlbixcblx0UXVlcnlMaXN0LFxuXHRIb3N0TGlzdGVuZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50LCBGb3JtT3B0aW9ucyB9IGZyb20gJy4uL2Zvcm0vZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSb3dTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL3Jvdy1zZWxlY3Rvci9yb3ctc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IExvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2xvZy9sb2cuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IENydW1iQWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3J1bWItYWN0aW9uL2NydW1iLWFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RlcHNDb21wb25lbnQsIFN0ZXAgfSBmcm9tICcuLi9zdGVwcy9zdGVwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZENvbXBvbmVudCwgR3JpZE9wdGlvbnMgfSBmcm9tICcuLi9ncmlkL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFic01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFicyc7XG5pbXBvcnQgeyBBbUNvbXBvbmVudCwgR2V0IH0gZnJvbSAnLi4vYW0vYW0uY29tcG9uZW50JztcbmltcG9ydCB7IFNlYXJjaCB9IGZyb20gJy4uL2FtL2FtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIcmVmQnRuTGlzdCwgR3JpZExpc3QsIFBhZ2VGb3JtU2xvdENvbnRleHQgfSBmcm9tICcuL3BhZ2UtZm9ybS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2kxOG4uc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uQnRuIH0gZnJvbSAnLi9wYWdlLWZvcm0uaW50ZXJmYWNlJztcbmltcG9ydCB7IGZvcm1UeXBlVG9Qcm9wcyB9IGZyb20gJy4vcGFnZS1mb3JtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBIcmVmQnRuTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL2hyZWYtYnRuLWxpc3QvaHJlZi1idG4tbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVlcENsb25lIH0gZnJvbSAnLi4vc2hhcmUvdXRpbHMnO1xuaW1wb3J0IHsgUGFnZUZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9wYWdlLWZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBQYWdlRm9ybVNsb3REaXJlY3RpdmUgfSBmcm9tICcuL3BhZ2UtZm9ybS1zbG90LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdhcHAtcGFnZS1mb3JtJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0aW1wb3J0czogW1xuXHRcdENvbW1vbk1vZHVsZSxcblx0XHRCdXR0b25Nb2R1bGUsXG5cdFx0UmVhY3RpdmVGb3Jtc01vZHVsZSxcblx0XHRGb3JtQ29tcG9uZW50LFxuXHRcdExvZ0NvbXBvbmVudCxcblx0XHRDcnVtYkFjdGlvbkNvbXBvbmVudCxcblx0XHRTdGVwc0NvbXBvbmVudCxcblx0XHRHcmlkQ29tcG9uZW50LFxuXHRcdFRhYnNNb2R1bGUsXG5cdFx0Um93U2VsZWN0b3JDb21wb25lbnQsXG5cdFx0VHJhbnNsYXRlUGlwZSxcblx0XHRIcmVmQnRuTGlzdENvbXBvbmVudCxcblx0XSxcblx0dGVtcGxhdGVVcmw6ICcuL3BhZ2UtZm9ybS5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi9wYWdlLWZvcm0uY29tcG9uZW50LnNjc3MnLFxuXHRwcm92aWRlcnM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlRm9ybUNvbXBvbmVudCBleHRlbmRzIEFtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXHRAVmlld0NoaWxkKCdjRm9ybScpIGNGb3JtITogRm9ybUNvbXBvbmVudDtcblx0QFZpZXdDaGlsZHJlbignY3VzdG9tR3JpZCcpIGN1c3RvbUdyaWQhOiBRdWVyeUxpc3Q8R3JpZENvbXBvbmVudD47XG5cdEBWaWV3Q2hpbGRyZW4oJ3RhYkZvcm0nKSB0YWJGb3JtITogUXVlcnlMaXN0PEZvcm1Db21wb25lbnQ+O1xuXHRAQ29udGVudENoaWxkKFBhZ2VGb3JtU2xvdERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwYWdlRm9ybVNsb3Q/OiBQYWdlRm9ybVNsb3REaXJlY3RpdmU7XG5cdHNob3dMb2cgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9kZWxMb2coKSAmJiB0aGlzLnNpZGViYXJNb2RlKCkgPT09ICdyaWdodCc7XG5cdH0pO1xuXHRhZGRWaXNpYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblx0Z3JpZExpc3QgPSBpbnB1dDxhbnlbXT4oW10pO1xuXHRmb3JtID0gaW5wdXQucmVxdWlyZWQ8Rm9ybU9wdGlvbnM+KHt9KTtcblx0Z2V0UHJtSW5wdXQgPSBpbnB1dC5yZXF1aXJlZDxHZXQ+KHt9KTtcblx0c3RhdHVzU3RlcHMgPSBpbnB1dDxTdGVwW10+KFtdKTtcblx0c3RhdHVzS2V5ID0gaW5wdXQoJ3N0YXR1cycpO1xuXHRocmVmQnRuTGlzdCA9IGlucHV0PEhyZWZCdG5MaXN0W10+KFtdKTtcblx0c2V0VGl0bGUgPSBpbnB1dDxzdHJpbmc+KCk7XG5cdGFjdGlvbkxpc3QgPSBpbnB1dDxQZXJtaXNzaW9uQnRuW10+KFtdKTtcblx0bW9kZWxMb2cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHNpZGViYXJNb2RlID0gc2lnbmFsPCdsZWZ0JyB8ICdyaWdodCc+KCdyaWdodCcpO1xuXHRmb3JtRGlzYWJsZWQgPSBpbnB1dDxGdW5jdGlvbj4oKTtcblx0c3RhdHVzQ29uZiA9IGlucHV0PGFueT4oKTtcblx0Zm9ybURldGFpbCA9IGlucHV0PGFueT4oKTtcblx0c2F2ZUZ1bmMgPSBpbnB1dDxhbnk+KCk7XG5cdGNvbmZpZ05ld1BhdGggPSBpbnB1dDxhbnk+KCk7XG5cblx0dXNlckhpc3RvcnlTZXJ2aWNlID0gaW5qZWN0KFVzZXJIaXN0b3J5U2VydmljZSk7XG5cdHBhZ2VGb3JtU2VydmljZSA9IGluamVjdChQYWdlRm9ybVNlcnZpY2UpO1xuXHRpbmRleFZhbHVlID0gMDtcblx0dmlzaWJsZSA9IGZhbHNlO1xuXHRkaWFsb2dTZWFyY2hQcm0hOiBTZWFyY2g7XG5cdHNlbGVjdE9wdGlvbnMhOiBHcmlkT3B0aW9ucztcblx0c2VsZWN0RGF0YTogYW55W10gPSBbXTtcblx0cGFnZVVybCA9ICcnO1xuXHRuZXdVcmwgPSAnJztcblx0YXV0aExldmVsID0gaW5wdXQ8bnVtYmVyPigtMSk7XG5cdGhyZWZzOiBhbnlbXSA9IFtdO1xuXHRhY3Rpb24gPSBpbmplY3QoQWN0aW9uU2VydmljZSk7XG5cdHN1YkZvcm1Nb2RlbDogYW55ID0ge307XG5cdHNhdmVCdG5EaXNhYmxlID0gZmFsc2U7XG5cdGdyaWREaXNhYmxlID0gZmFsc2U7XG5cdHNlbGVjdGlvbktleXM6IGFueVtdID0gW107XG5cdHN1YkRlbGV0ZUlkczogYW55W10gPSBbXTtcblxuXHRzdGVwc1Zpc2libGUgPSB0cnVlO1xuXHRwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcblx0b25SZXNpemUoKSB7XG5cdFx0dGhpcy5zaWRlYmFyTW9kZS5zZXQod2luZG93LmlubmVyV2lkdGggPCAxMDI0ID8gJ2xlZnQnIDogJ3JpZ2h0Jyk7XG5cdH1cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRjb25zb2xlLmxvZyhgUGFnZUZvcm1Db21wb25lbnRgKTtcblx0XHR0aGlzLmlkID0gTnVtYmVyKHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpKTtcblx0XHR0aGlzLnBhZ2VVcmwgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnVybFxuXHRcdFx0Lm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC5wYXRoKVxuXHRcdFx0LmpvaW4oJy8nKVxuXHRcdFx0LnJlcGxhY2UoLyhbXlxcL10qKSQvLCAnJyk7XG5cdFx0dGhpcy5uZXdVcmwgPSBgJHt0aGlzLnBhZ2VVcmx9bmV3YDtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMubW9kZWxOYW1lID0gdGhpcy5nZXRQcm1JbnB1dCgpLm1vZGVsTmFtZSE7XG5cdFx0XHRcdHRoaXMuZ2V0UHJtID0geyAuLi50aGlzLmdldFBybUlucHV0KCkgfTtcblx0XHRcdFx0dGhpcy5pZCAmJiAodGhpcy5nZXRQcm0uaWQgPSB0aGlzLmlkKTtcblx0XHRcdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCksICdmb3JtLS0tLScpO1xuXHRcdFx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSB7fTtcblx0XHRcdFx0XHR0aGlzLmdyaWRMaXN0KCkuZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHYudHlwZSA9PSAnZ3JpZCcpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YVt2LnN1YkRhdGFLZXldID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR0aGlzLmZvcm1PcHRpb25zID0geyAuLi50aGlzLmZvcm0oKSB9O1xuXHRcdH0pO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5pc0xvZyA9IHRoaXMubW9kZWxMb2coKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLnN0YXR1c1N0ZXBzKCkubGVuZ3RoID4gMCAmJiAhdGhpcy5pZCkge1xuXHRcdFx0XHRcdHRoaXMudXBzZXJ0UHJtLmFkZERhdGEhW3RoaXMuc3RhdHVzS2V5KCldID0gdGhpcy5zdGF0dXNTdGVwcygpWzBdWyd2YWx1ZSddO1xuXHRcdFx0XHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSBPYmplY3QuYXNzaWduKHRoaXMuZ2V0UHJtLmRhdGEgfHwge30sIHtcblx0XHRcdFx0XHRcdFt0aGlzLnN0YXR1c0tleSgpXTogdGhpcy5zdGF0dXNTdGVwcygpWzBdWyd2YWx1ZSddLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5hdXRoTGV2ZWwoKSA8IDMpIHtcblx0XHRcdFx0XHR0aGlzLnNldERpc2FibGVkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0fVxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnVwQ2IgPSB0aGlzLnVwQ2IuYmluZCh0aGlzKTtcblx0XHR0aGlzLm9uUmVzaXplKCk7XG5cdFx0dGhpcy5iaW5kUGFnZUZvcm1TZXJ2aWNlKCk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLmRlc3Ryb3kkLm5leHQoKTtcblx0XHR0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIGJpbmRQYWdlRm9ybVNlcnZpY2UoKSB7XG5cdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UudXBkYXRlRGF0YSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuXHRcdFx0dGhpcy5tZXJnZVBhZ2VGb3JtRGF0YShkYXRhKTtcblx0XHR9KTtcblxuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGFCeUtleSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoeyBrZXksIHZhbHVlIH0pID0+IHtcblx0XHRcdHRoaXMubWVyZ2VQYWdlRm9ybURhdGEoeyBba2V5XTogdmFsdWUgfSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIG1lcmdlUGFnZUZvcm1EYXRhKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG5cdFx0aWYgKCFpc0VxdWFsKHRoaXMuZ2V0UHJtLmRhdGEsIGRhdGEpKSB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge1xuXHRcdFx0XHQuLi4odGhpcy5nZXRQcm0uZGF0YSA/PyB7fSksXG5cdFx0XHRcdC4uLmRhdGEsXG5cdFx0XHR9O1xuXHRcdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHN5bmNTdWJGb3JtTW9kZWxGcm9tRGF0YSgpIHtcblx0XHR0aGlzLmdyaWRMaXN0KCkuZm9yRWFjaCgoZ3JpZCkgPT4ge1xuXHRcdFx0aWYgKGdyaWQudHlwZSA9PSAnZm9ybScpIHtcblx0XHRcdFx0Y29uc3QgZm9ybURhdGEgPSB0aGlzLmdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5XTtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZm9ybURhdGEpKSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5XSA9IGZvcm1EYXRhWzBdID8/IHt9O1xuXHRcdFx0XHR9IGVsc2UgaWYgKGZvcm1EYXRhICYmIHR5cGVvZiBmb3JtRGF0YSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0aGlzLnN1YkZvcm1Nb2RlbFtncmlkLnN1YkRhdGFLZXldID0gZm9ybURhdGE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChncmlkLnR5cGUgPT0gJ2dyaWQnICYmICF0aGlzLmdldFBybS5kYXRhPy5oYXNPd25Qcm9wZXJ0eShncmlkLnN1YkRhdGFLZXkpKSB7XG5cdFx0XHRcdHRoaXMuZ2V0UHJtLmRhdGFbZ3JpZC5zdWJEYXRhS2V5XSA9IFtdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuaTE4bi5jaGFuZ2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuc3RlcHNWaXNpYmxlID0gZmFsc2U7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5zdGVwc1Zpc2libGUgPSB0cnVlO1xuXHRcdFx0fSwgMTAwKTtcblx0XHR9KTtcblx0fVxuXG5cdHN1Ym1pdEZvcm0oKTogYW55IHtcblx0XHQvLyB0aGlzLnRhYkZvcm0udmFsaWRhdGUoKVxuXHRcdGNvbnNvbGUubG9nKCdnZXRQcm0tLS10ZXN0LS0tJywgdGhpcy5nZXRQcm0pO1xuXHRcdGxldCBzdWJGb3JtID0gdHJ1ZTtcblx0XHRpZiAodGhpcy50YWJGb3JtLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMudGFiRm9ybS5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmICghaXRlbS52YWxpZGF0ZSgpKSB7XG5cdFx0XHRcdFx0c3ViRm9ybSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY0Zvcm0udmFsaWRhdGUoKSAmJiBzdWJGb3JtKSB7XG5cdFx0XHRjb25zb2xlLmxvZygnc3VibWl0Rm9ybScsIHRoaXMuY0Zvcm0sIHN1YkZvcm0pO1xuXHRcdFx0Y29uc29sZS5sb2coYHRoaXMudXBzZXJ0UHJtYCwgdGhpcy51cHNlcnRQcm0pO1xuXHRcdFx0bGV0IGNiOiBhbnkgPSB0aGlzLmlkID09PSAwID8gbnVsbCA6IHRoaXMudXBDYjtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KHRydWUpO1xuXHRcdFx0dHlwZW9mIHRoaXMuc2F2ZUZ1bmMoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5zYXZlRnVuYygpKHRoaXMudXBzZXJ0UHJtLCB0aGlzLmlkLCBjYikgOiB0aGlzLnVwc2VydChudWxsLCBjYik7XG5cdFx0fVxuXHR9XG5cblx0ZGVsUm93cyhlOiBhbnkpIHtcblx0XHRjb25zdCBncmlkVGFiID0gdGhpcy5ncmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0Y29uc3QgZGVsZXRlRnVuYyA9IGdyaWRUYWIuZGVsZXRlRnVuYztcblx0XHRjb25zdCBzdWJUYWJsZSA9IGdyaWRUYWIuZ3JpZE9wdGlvbnMubW9kZWxOYW1lO1xuXG5cdFx0bGV0IHBybSA9IHtcblx0XHRcdG1vZGVsTmFtZTogc3ViVGFibGUsXG5cdFx0XHRpZHM6IGUsXG5cdFx0fTtcblx0XHRpZiAoIWRlbGV0ZUZ1bmMpIHtcblx0XHRcdHRoaXMud2ViX3JlbW92ZShwcm0pLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCgpO1xuXHRcdFx0XHR0aGlzLmFjdGlvbi51cGRhdGVHcmlkQWN0aW9uKHsgdHlwZTogJ2RlbGV0ZScsIGRhdGE6IGUgfSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVsZXRlRnVuYygpLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCgpO1xuXHRcdFx0XHR0aGlzLmFjdGlvbi51cGRhdGVHcmlkQWN0aW9uKHsgdHlwZTogJ2RlbGV0ZScsIGRhdGE6IGUgfSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0dXBDYihyZXM/OiBhbnkpIHtcblx0XHRpZiAocmVzLmlkID09IDApIHtcblx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0bGV0IGVkaXRVcmwgPSBgJHt0aGlzLnBhZ2VVcmx9JHtyZXMuaWR9YDtcblx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW2VkaXRVcmxdKTtcblx0XHRcdH0sIDE1MDApO1xuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldChmYWxzZSk7XG5cdFx0dGhpcy5jRm9ybS5maW5hbGl6ZSgpO1xuXHR9XG5cdC8vIFRPRE8g5piv5ZCm6ZyA6KaB5pWw5o2u6L2s5o2i5Zue6LCD5Ye95pWwXG5cdG9uT2soZTogYW55KSB7XG5cdFx0Y29uc3QgZ3JpZCA9IHRoaXMuZ3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdHRoaXMuZ3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdLnNlbGVjdERhdGEgPSBbXTtcblx0XHRpZiAoZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgdW5pcXVlS2V5cyA9IFtdO1xuXHRcdFx0aWYgKGdyaWQudW5pcXVlRmllbGQpIHtcblx0XHRcdFx0Y29uc3Qgcm93RGF0YSA9IHRoaXMuY3VzdG9tR3JpZFxuXHRcdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdFx0LmFwaS5nZXRSZW5kZXJlZE5vZGVzKClcblx0XHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygncm93RGF0YS0tLS0tJyxyb3dEYXRhKVxuXHRcdFx0XHR1bmlxdWVLZXlzID0gcm93RGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtncmlkLnVuaXF1ZUZpZWxkIV0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY29uc29sZS5sb2coJ3VuaXF1ZUtleXMtLS0tLScsdW5pcXVlS2V5cywpXG5cdFx0XHRlLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRsZXQgb2JqID0gZ3JpZC5zZWxlY3REYXRhQ2IgPyBncmlkLnNlbGVjdERhdGFDYihpdGVtKSA6IHsgLi4uaXRlbSB9O1xuXHRcdFx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCAmJiB1bmlxdWVLZXlzLmluY2x1ZGVzKG9ialtncmlkLnVuaXF1ZUZpZWxkIV0gfHwgJycpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGdyaWQuc2VsZWN0RGF0YSEucHVzaChvYmopO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldCh0cnVlKTtcblx0XHR9XG5cdFx0dGhpcy5hY3Rpb24udXBkYXRlR3JpZEFjdGlvbih7IHR5cGU6ICdhZGQnLCBkYXRhOiBncmlkLnNlbGVjdERhdGEgfSk7XG5cdH1cblxuXHRvbkNhbmNlbFNlbGVjdGVkKGU6IGFueSkge1xuXHRcdGNvbnN0IGdyaWQgPSB0aGlzLmdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXTtcblx0XHRsZXQgZGF0YXM6IGFueSA9IFtdO1xuXHRcdGUuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0gZ3JpZC5zZWxlY3REYXRhQ2IgPyB7IC4uLmdyaWQuc2VsZWN0RGF0YUNiKGl0ZW0pIH0gOiBpdGVtO1xuXHRcdFx0ZGF0YXMucHVzaChkYXRhKTtcblx0XHR9KTtcblx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCkge1xuXHRcdFx0Y29uc3Qga2V5cyA9IGRhdGFzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW2dyaWQudW5pcXVlRmllbGRdKTtcblx0XHRcdGNvbnN0IHJvd0RhdGEgPSB0aGlzLmN1c3RvbUdyaWRcblx0XHRcdFx0LmdldCh0aGlzLmluZGV4VmFsdWUpIVxuXHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdC5hcGkuZ2V0UmVuZGVyZWROb2RlcygpXG5cdFx0XHRcdC5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSk7XG5cdFx0XHRsZXQgZGVsZXRlZFJvd3MgPSByb3dEYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiBrZXlzLmluY2x1ZGVzKGl0ZW1bZ3JpZC51bmlxdWVGaWVsZF0pKTtcblx0XHRcdHRoaXMuc3ViRGVsZXRlSWRzID0gZGVsZXRlZFJvd3MubWFwKCh2OiBhbnkpID0+IHYuaWQpLmZpbHRlcigodjogYW55KSA9PiB2KTtcblx0XHRcdGNvbnN0IGlkTm90Um93cyA9IGRlbGV0ZWRSb3dzLmZpbHRlcigodjogYW55KSA9PiAhdi5pZCk7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnaWROb3RSb3dzLS0tLScsaWROb3RSb3dzKVxuXHRcdFx0Y29uc3QgZGVsZXRlTm9kZXM6IGFueSA9IFtdO1xuXHRcdFx0dGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmZvckVhY2hOb2RlKChub2RlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRsZXQgbWFpbiA9IG5vZGUuZGF0YVtncmlkLnVuaXF1ZUZpZWxkXTtcblx0XHRcdFx0XHRsZXQgaXNFeGl0ID0gaWROb3RSb3dzLmZpbmRJbmRleCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IG1haW4pO1xuXHRcdFx0XHRcdGlmIChpc0V4aXQgPiAtMSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlTm9kZXMucHVzaChub2RlLmRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHQvLyBpZihkZWxldGVkSWRzLmxlbmd0aCA+IDApe1xuXHRcdFx0Ly8gXHR0aGlzLmRlbFJvd3MoZGVsZXRlZElkcylcblx0XHRcdC8vIH0gZWxzZSB7XG5cdFx0XHR0aGlzLmN1c3RvbUdyaWQuZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhLnNlbGVjdFJvd3NEZWxldGVkKGRlbGV0ZU5vZGVzKTtcblx0XHRcdC8vIH1cblx0XHR9XG5cdH1cblx0Z2V0RGV0YWlsKCkge1xuXHRcdHRoaXMud2ViX2dldCh0aGlzLmdldFBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZGV0YWlsQ2IocmVzKTtcblx0XHR9KTtcblx0fVxuXHQvLyDojrflj5bor6bmg4Xlm57osINcblx0ZGV0YWlsQ2IocmVzOiBhbnkpIHtcblx0XHR0aGlzLnVwZGF0ZVRpdGxlKHJlcyk7XG5cdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0XHRpZiAodHlwZW9mIHRoaXMuZm9ybURpc2FibGVkKCkgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhpcy5mb3JtRGlzRnVuYygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5ocmVmQnRuTGlzdCgpLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2V0SHJlZlZhbHVlKCk7XG5cdFx0fVxuXHR9XG5cdHNldEhyZWZWYWx1ZSgpIHtcblx0XHR0aGlzLmhyZWZCdG5MaXN0KCkubWFwKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdGlmIChpdGVtLmhhc093blByb3BlcnR5KCdzZWFyY2hDb3VudCcpICYmIHR5cGVvZiBpdGVtLnNlYXJjaENvdW50ID09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGl0ZW0uc2VhcmNoQ291bnQuY29sdW1uRmlsdGVycy5mb3JFYWNoKCh2OiBhbnkpID0+IHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIHYuZml0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdHYuZml0ZXIgPSB2LmZpdGVyKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMud2ViX3NlYXJjaENvdW50KGl0ZW0uc2VhcmNoQ291bnQpLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHRcdFx0aXRlbS52YWx1ZSA9IHJlcy50b3RhbE51bSB8fCAwO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHR1cGRhdGVUaXRsZShyZXM6IGFueSkge1xuXHRcdGxldCBtYWluRmllbGQgPSB0aGlzLmZvcm0oKS5tYWluRmllbGQ7XG5cdFx0bGV0IHRpdGxlID0gcmVzW21haW5GaWVsZCFdO1xuXHRcdHRoaXMudXNlckhpc3RvcnlTZXJ2aWNlLnNldExhc3RUaXRsZSh0aXRsZSk7XG5cdH1cblx0ZGF0YVNvdXJjZVNob3coKSB7XG5cdFx0Y29uc3QgZ3JpZCA9IHRoaXMuZ3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdHRoaXMuZGlhbG9nU2VhcmNoUHJtID0ge307XG5cdFx0dGhpcy5zZWxlY3RPcHRpb25zID0gdGhpcy5ncmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV1bJ3NlbGVjdE9wdGlvbnMnXSE7XG5cdFx0aWYgKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KT8uc2VhcmNoUHJtKSB7XG5cdFx0XHRsZXQgc2VhcmNoUHJtID0gZGVlcENsb25lKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KS5zZWFyY2hQcm0sIHRoaXMpO1xuXHRcdFx0c2VhcmNoUHJtLmNvbHVtbkZpbHRlcnM/LmZvckVhY2goKHY6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIHYuZml0ZXIgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHYuZml0ZXIgPSB2LmZpdGVyKG51bGwsIHRoaXMuZ2V0UHJtLmRhdGEgfHwgdGhpcy5jRm9ybS5tb2RlbCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHNlYXJjaFBybTtcblx0XHR9XG5cdFx0dGhpcy5kaWFsb2dTZWFyY2hQcm0ubW9kZWxOYW1lID0gdGhpcy5zZWxlY3RPcHRpb25zLm1vZGVsTmFtZTtcblx0XHRpZiAodGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGUpIHtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zdXBwcmVzc1Jvd0Rlc2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGU7XG5cdFx0XHRjb25zdCBpc1Jvd1NlbGVjdGFibGUgPSB0aGlzLnNlbGVjdE9wdGlvbnMuaXNSb3dTZWxlY3RhYmxlO1xuXHRcdFx0aWYgKHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlICE9ICdub25lJykge1xuXHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uID0ge1xuXHRcdFx0XHRcdG1vZGU6IHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID09ICdzaW5nbGUnID8gJ3NpbmdsZVJvdycgOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGlzUm93U2VsZWN0YWJsZTogaXNSb3dTZWxlY3RhYmxlID8gaXNSb3dTZWxlY3RhYmxlIDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gY29uc29sZS5sb2coJ29wdGlvbnMtLS0tLScsdGhpcy5zZWxlY3RPcHRpb25zKVxuXHRcdGlmIChncmlkLnVuaXF1ZUZpZWxkKSB7XG5cdFx0XHRjb25zdCByb3dEYXRhID0gdGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmdldFJlbmRlcmVkTm9kZXMoKVxuXHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0dGhpcy5zZWxlY3Rpb25LZXlzID0gcm93RGF0YT8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bZ3JpZC51bmlxdWVGaWVsZCFdKSB8fCBbXTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCd0aGlzLnNlbGVjdGlvbktleXMtLS0tJyx0aGlzLnNlbGVjdGlvbktleXMpXG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24gPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbi5jaGVja2JveGVzID0gKHBhcmFtcykgPT4ge1xuXHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5ICE9ICcnXG5cdFx0XHRcdFx0XHRcdD8gcm93RGF0YS5maW5kKCh2OiBhbnkpID0+IHZbZ3JpZC51bmlxdWVGaWVsZF0gPT0gcGFyYW1zLmRhdGFbdGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkhXSlcblx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5pZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24pIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHtcblx0XHRcdFx0XHRtb2RlOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGNoZWNrYm94ZXM6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkgIT0gJydcblx0XHRcdFx0XHRcdFx0XHQ/IHJvd0RhdGEuZmluZCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IHBhcmFtcy5kYXRhW3RoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5IV0pXG5cdFx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmlkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2VsZWN0aW9uS2V5cyA9IFtdO1xuXHRcdH1cblx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXHR9XG5cblx0Z29SdW4oZGF0YTogYW55KSB7XG5cdFx0aWYgKHR5cGVvZiBkYXRhLnVybCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGV0IHVybCA9IGRhdGEudXJsKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnd2FybicsIHN1bW1hcnk6ICdXYXJuJywgZGV0YWlsOiAn6K+36YWN572u6Lez6L2s6ZO+5o6lJyB9KTtcblx0XHR9XG5cdH1cblxuXHRhdXRoQ2xpY2soYnRuOiBhbnkpIHtcblx0XHRpZiAoYnRuLmhhc093blByb3BlcnR5KCdvbkNsaWNrJykpIHtcblx0XHRcdGJ0bi5vbkNsaWNrKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdH1cblx0fVxuXHRzdGF0dXNDaGFuZ2UodmFsdWU6IGFueSwgY3VzdG9tU3RlcHM6IFN0ZXBzQ29tcG9uZW50KSB7XG5cdFx0aWYgKHRoaXMuYXV0aExldmVsKCkgPCA0IHx8ICF0aGlzLnN0YXR1c0NvbmYoKS5pc0NsaWNrKSByZXR1cm47XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGxldCBwYXJhbTogYW55ID0ge1xuXHRcdFx0XHRtb2RlbE5hbWU6IHRoaXMubW9kZWxOYW1lLFxuXHRcdFx0XHRkYXRhOiB7IGlkOiB0aGlzLmlkLCBbdGhpcy5zdGF0dXNLZXkoKV06IHZhbHVlIH0sXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHRoaXMuaXNMb2cpIHtcblx0XHRcdFx0cGFyYW0ubG9nTW9kZWwgPSBgJHt0aGlzLm1vZGVsTmFtZX1Mb2dgO1xuXHRcdFx0XHRwYXJhbS5sb2cgPSB7XG5cdFx0XHRcdFx0cGlkOiB0aGlzLmlkLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGBb54q25oCBXSAke3RoaXMuZ2V0UHJtLmRhdGEhW3RoaXMuc3RhdHVzS2V5KCldfSAtPiAke3ZhbHVlfWAsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLndlYl93cml0ZShwYXJhbSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0dGhpcy5nZXREZXRhaWwoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhID0gT2JqZWN0LmFzc2lnbih0aGlzLmdldFBybS5kYXRhIHx8IHt9LCB7XG5cdFx0XHRcdFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUsXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMudXBzZXJ0UHJtLmFkZERhdGEhW3RoaXMuc3RhdHVzS2V5KCldID0gdmFsdWU7XG5cdFx0XHR0aGlzLmNGb3JtLnRyaWdnZXJNb2RlbEVmZmVjdCh7IFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUgfSk7XG5cdFx0XHQvLyBjdXN0b21TdGVwcy5yZWZyZXNoU3RlcHMoKVxuXHRcdH1cblx0fVxuXG5cdGZvcm1EaXNGdW5jKCkge1xuXHRcdGxldCBkYXRhID0gdGhpcy5mb3JtRGlzYWJsZWQoKSEodGhpcy5nZXRQcm0uZGF0YSk7XG5cdFx0aWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcblx0XHRcdHRoaXMuc2F2ZUJ0bkRpc2FibGUgPSBkYXRhO1xuXHRcdFx0dGhpcy5ncmlkRGlzYWJsZSA9IGRhdGE7XG5cdFx0XHR0aGlzLmRpc2FibGVGb3JtKGRhdGEpO1xuXHRcdFx0dGhpcy5kaXNhYmVsZENoaWxkKGRhdGEpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRjb25zdCBkaXNhYmVsZCA9IGRhdGEuZGlzYWJsZWQ7XG5cdFx0XHRjb25zdCBmaWx0ZXJzID0gZGF0YS5maWx0ZXJzIHx8IFtdO1xuXHRcdFx0aWYgKCFmaWx0ZXJzLmluY2x1ZGVzKCdmb3JtJykpIHtcblx0XHRcdFx0dGhpcy5kaXNhYmxlRm9ybShkaXNhYmVsZCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWZpbHRlcnMuaW5jbHVkZXMoJ2dyaWQnKSkge1xuXHRcdFx0XHR0aGlzLmdyaWREaXNhYmxlID0gZGlzYWJlbGQ7XG5cdFx0XHRcdHRoaXMuZGlzYWJlbGRDaGlsZChkaXNhYmVsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGRpc2FibGVGb3JtKGRpc2FibGU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmZvcm1PcHRpb25zLmZpZWxkcz8uZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0di5ncm91cD8uZm9yRWFjaCgoZzogYW55KSA9PiB7XG5cdFx0XHRcdGxldCBmaWVsZERpc2FibGVkID0gZ1tmb3JtVHlwZVRvUHJvcHNbZy50eXBlXV0uZGlzYWJsZWQgfHwgZmFsc2U7XG5cdFx0XHRcdGlmIChkaXNhYmxlKSB7XG5cdFx0XHRcdFx0dGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEubWFya0FzUHJpc3RpbmUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCFmaWVsZERpc2FibGVkICYmIHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdGRpc2FiZWxkQ2hpbGQoZGlzYWJlbGQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmdyaWRMaXN0KCkuZm9yRWFjaCgodiwgaW5kZXg6IGFueSkgPT4ge1xuXHRcdFx0aWYgKHYudHlwZSA9PSAnZ3JpZCcpIHtcblx0XHRcdFx0di5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRcdGlmIChkaXNhYmVsZCAmJiBpdGVtLmhhc093blByb3BlcnR5KCdlZGl0YWJsZScpKSB7XG5cdFx0XHRcdFx0XHRpdGVtLmVkaXRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIOWQjOS4gOS4qumhtemdomRpc2FibGVkIGZhbHNlICA9PiB0cnVlXG5cdFx0XHRcdFx0aWYgKCFkaXNhYmVsZCAmJiBpdGVtLmhhc093blByb3BlcnR5KCdlZGl0YWJsZScpICYmICFpdGVtLmVkaXRhYmxlICYmIHR5cGVvZiBpdGVtLmVkaXRhYmxlID09PSAnYm9vbGVhbicpIHtcblx0XHRcdFx0XHRcdGl0ZW0uZWRpdGFibGUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuY3VzdG9tR3JpZC5nZXQoaW5kZXgpIS5nZXRHcmlkKCkuYXBpLnNldEdyaWRPcHRpb24oJ2NvbHVtbkRlZnMnLCB2LmdyaWRPcHRpb25zLmNvbHVtbkRlZnMpO1xuXHRcdFx0fSBlbHNlIGlmICh2LnR5cGUgPT0gJ2Zvcm0nKSB7XG5cdFx0XHRcdHYuZmllbGRzPy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0XHRpdGVtLmdyb3VwPy5mb3JFYWNoKChnOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGxldCBmaWVsZERpc2FibGVkID0gZ1tmb3JtVHlwZVRvUHJvcHNbZy50eXBlXV0uZGlzYWJsZWQgfHwgZmFsc2U7XG5cdFx0XHRcdFx0XHRpZiAoZGlzYWJlbGQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy50YWJGb3JtLmdldChpbmRleCkhLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMudGFiRm9ybS5nZXQoaW5kZXgpIS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQhZmllbGREaXNhYmxlZCAmJiB0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRzZXREaXNhYmxlZCgpIHtcblx0XHR0aGlzLmdyaWRMaXN0KCkuZm9yRWFjaCgodiwgaW5kZXg6IGFueSkgPT4ge1xuXHRcdFx0aWYgKHYudHlwZSA9PSAnZm9ybScpIHtcblx0XHRcdFx0di5maWVsZHM/LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRcdGl0ZW0uZ3JvdXA/LmZvckVhY2goKGc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy50YWJGb3JtLmdldChpbmRleCkhLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0dGFiQ2xpY2soKSB7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLnRhYkZvcm0uZ2V0KHRoaXMuaW5kZXhWYWx1ZSkgJiYgdGhpcy50YWJGb3JtLmdldCh0aGlzLmluZGV4VmFsdWUpIS5yZUNhbGNMYWJlbFNpemUoKTtcblx0XHR9LCAwKTtcblx0fVxuXHR0b2dnbGVMb2coKSB7XG5cdFx0dGhpcy5zaWRlYmFyTW9kZS5zZXQodGhpcy5zaWRlYmFyTW9kZSgpID09PSAnbGVmdCcgPyAncmlnaHQnIDogJ2xlZnQnKTtcblx0fVxuXG5cdGdldFBhZ2VGb3JtU2xvdENvbnRleHQoZ3JpZDogR3JpZExpc3QsIGluZGV4OiBudW1iZXIpOiBQYWdlRm9ybVNsb3RDb250ZXh0IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0JGltcGxpY2l0OiBncmlkLFxuXHRcdFx0c2xvdEtleTogZ3JpZC5zbG90S2V5IHx8IGdyaWQuc3ViRGF0YUtleSxcblx0XHRcdGdyaWQsXG5cdFx0XHRpbmRleCxcblx0XHRcdHBhZ2VGb3JtOiB0aGlzLFxuXHRcdFx0ZGF0YTogKHRoaXMuZ2V0UHJtLmRhdGEgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0bW9kZWw6IGdyaWQudHlwZSA9PT0gJ2dyaWQnID8gdGhpcy5nZXRQcm0uZGF0YT8uW2dyaWQuc3ViRGF0YUtleSFdIDogdGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5IV0gfHwge30sXG5cdFx0XHR1cHNlcnQ6IHRoaXMudXBzZXJ0UHJtLFxuXHRcdFx0YWN0aXZlOiB0aGlzLmluZGV4VmFsdWUgPT09IGluZGV4LFxuXHRcdH07XG5cdH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtZDpvdmVyZmxvdy1oaWRkZW5cIj5cblx0PGRpdiBjbGFzcz1cImZsZXggbWQ6ZmxleC13cmFwIGxnOmZsZXgtbm93cmFwIGl0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW4gcHktMSBweC0xIGJvcmRlci1iLVsxcHhdIGJvcmRlci1bI2RiZGJkYl0gYmctd2hpdGVcIj5cblx0XHQ8ZGl2IGNsYXNzPVwibGc6YmFzaXMtMS8zIG9yZGVyLTFcIj5cblx0XHRcdDxhcHAtY3J1bWItYWN0aW9uXG5cdFx0XHRcdFthZGRWaXNpYmxlXT1cImFkZFZpc2libGUoKVwiXG5cdFx0XHRcdFtuZXdVcmxdPVwibmV3VXJsXCJcblx0XHRcdFx0W2lzU2hvd0NvZ109XCJ0cnVlXCJcblx0XHRcdFx0W291dGxpbmVkXT1cInRydWVcIlxuXHRcdFx0XHRbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcblx0XHRcdFx0W2FjdGlvbkxpc3RdPVwiYWN0aW9uTGlzdCgpXCJcblx0XHRcdFx0W2NvbmZpZ05ld1BhdGhdPVwiY29uZmlnTmV3UGF0aCgpXCJcblx0XHRcdFx0W2RhdGFdPVwiZ2V0UHJtLmRhdGEgPz8ge31cIlxuXHRcdFx0XHRbc2F2ZUJ0bkRpc2FibGVdPVwic2F2ZUJ0bkRpc2FibGVcIlxuXHRcdFx0XHQoYWN0aW9uRXZlbnQpPVwiYXV0aENsaWNrKCRldmVudClcIlxuXHRcdFx0XHQoc2F2ZUV2ZW50KT1cInN1Ym1pdEZvcm0oKVwiPlxuXHRcdFx0PC9hcHAtY3J1bWItYWN0aW9uPlxuXHRcdDwvZGl2PlxuXG5cdFx0PGRpdiBjbGFzcz1cImJhc2lzLTEvNSBsZzpiYXNpcy0yLzMgb3JkZXItMiBsZzpvcmRlci0yIG1kOm9yZGVyLWxhc3QgbWQ6YmFzaXMtZnVsbCBtZDptdC1bNnB4XVwiPlxuXHRcdFx0PGhyZWYtYnRuLWxpc3Rcblx0XHRcdFx0W2hyZWZzXT1cImhyZWZCdG5MaXN0KClcIlxuXHRcdFx0XHQoaHJlZkNsaWNrKT1cImdvUnVuKCRldmVudClcIj48L2hyZWYtYnRuLWxpc3Q+XG5cdFx0XHQ8IS0tIEBpZiAoaWQpIHtcblx0XHRcdFx0QGZvciAoYnRuIG9mIGhyZWZCdG5MaXN0KCk7IHRyYWNrIGJ0bikge1xuXHRcdFx0XHRcdDxwLWJ1dHRvblxuXHRcdFx0XHRcdFx0W3ZhcmlhbnRdPVwiYnRuPy52YXJpYW50XCJcblx0XHRcdFx0XHRcdFtzZXZlcml0eV09XCJidG4/LnNldmVyaXR5XCJcblx0XHRcdFx0XHRcdGNsYXNzPVwibXItWzZweF1cIlxuXHRcdFx0XHRcdFx0c2l6ZT1cInNtYWxsXCJcblx0XHRcdFx0XHRcdFtpY29uXT1cImJ0bj8uaWNvblwiXG5cdFx0XHRcdFx0XHRsYWJlbD1cInt7IGJ0bi5pMThuS2V5ID8gaTE4bi5mYW55aShidG4uaTE4bktleSkgOiBidG4ubGFiZWwgfX1cIlxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImdvUnVuKGJ0bilcIj5cblx0XHRcdFx0XHQ8L3AtYnV0dG9uPlxuXHRcdFx0XHR9XG5cdFx0XHR9IC0tPlxuXHRcdDwvZGl2PlxuXHRcdDxkaXYgY2xhc3M9XCJiYXNpcy0xLzMgb3JkZXItMyBmbGV4IGZsZXgtcm93LXJldmVyc2VcIj5cblx0XHRcdEBpZiAobW9kZWxMb2coKSkge1xuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaGlkZGVuIG1kOmJsb2NrXCI+XG5cdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFtjbGFzc109XCInaWNvbmZvbnQgaWNvbi1zaWRlYmFyIGljb24tc2lkZWJhci0nICsgc2lkZWJhck1vZGUoKVwiXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwidG9nZ2xlTG9nKClcIj48L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cImZsZXhcIj5cblx0XHQ8ZGl2IGNsYXNzPVwicHgtMiBmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZmxleC0xXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiaGlkZGVuIG1kOmJhc2lzLTEvMyBweS0xIGJhc2lzLWZ1bGwgbWQ6ZmxleCBpdGVtcy1jZW50ZXIgZmxleC1yb3cgb3JkZXItMVwiPlxuXHRcdFx0XHRAZm9yIChhY3Rpb24gb2YgYWN0aW9uTGlzdCgpOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgYWN0aW9uKSB7XG5cdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRzaXplPVwic21hbGxcIlxuXHRcdFx0XHRcdFx0W2ljb25dPVwiZ2V0UHJtLmRhdGE/Lmljb25cIlxuXHRcdFx0XHRcdFx0W2xvYWRpbmddPVwiYWN0aW9uLmxvYWRpbmdcIlxuXHRcdFx0XHRcdFx0W2xhYmVsXT1cImFjdGlvbi5pMThuS2V5ID8gKGFjdGlvbi5pMThuS2V5IHwgdHJhbnNsYXRlKSA6IGFjdGlvbi5sYWJlbFwiXG5cdFx0XHRcdFx0XHRbZGlzYWJsZWRdPVwiYWN0aW9uLmJ0bkRpc2FibGVkID8gYWN0aW9uLmJ0bkRpc2FibGVkKGdldFBybS5kYXRhKSA6IGZhbHNlXCJcblx0XHRcdFx0XHRcdFtzdHlsZUNsYXNzXT1cIlxuXHRcdFx0XHRcdFx0XHQoYWN0aW9uLmF1dGggfHwgMCkgPiAoYXV0aExldmVsKCkgfHwgMCkgfHwgISFhY3Rpb24uYnRuSGlkZGVuPy4oZ2V0UHJtLmRhdGEpXG5cdFx0XHRcdFx0XHRcdFx0PyAnZm9ybS1hY3Rpb24gaGlkZGVuJ1xuXHRcdFx0XHRcdFx0XHRcdDogJ2Zvcm0tYWN0aW9uIGJsb2NrIG1yLVsuNXJlbV0nXG5cdFx0XHRcdFx0XHRcIlxuXHRcdFx0XHRcdFx0KG9uQ2xpY2spPVwiYWN0aW9uLm9uQ2xpY2sgIT0gJycgJiYgYWN0aW9uLm9uQ2xpY2s/LihnZXRQcm0uZGF0YSwgYWN0aW9uKVwiPlxuXHRcdFx0XHRcdDwvcC1idXR0b24+XG5cdFx0XHRcdH1cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cIm1kOmJhc2lzLTIvMyBiYXNpcy1mdWxsIGZsZXggbWQ6ZmxleC1yb3ctcmV2ZXJzZSBmbGV4LXJvdyBtZDpvcmRlci0yIG9yZGVyLWZpcnN0IHctZnVsbFwiPlxuXHRcdFx0XHRAaWYgKHN0ZXBzVmlzaWJsZSkge1xuXHRcdFx0XHRcdDxjdXN0b20tc3RlcHNcblx0XHRcdFx0XHRcdCNjdXN0b21TdGVwc1xuXHRcdFx0XHRcdFx0Y2xhc3M9XCJ3LWZ1bGxcIlxuXHRcdFx0XHRcdFx0W3N0ZXBzXT1cInN0YXR1c1N0ZXBzKClcIlxuXHRcdFx0XHRcdFx0W21vZGVsTG9nXT1cInNob3dMb2coKVwiXG5cdFx0XHRcdFx0XHRbY3VycmVudF09XCJnZXRQcm0uZGF0YSAmJiBnZXRQcm0uZGF0YVtzdGF0dXNLZXkoKV0gIT09IHVuZGVmaW5lZCA/IGdldFBybS5kYXRhW3N0YXR1c0tleSgpXSA6IDBcIlxuXHRcdFx0XHRcdFx0W2F1dGhMZXZlbF09XCJhdXRoTGV2ZWwoKVwiXG5cdFx0XHRcdFx0XHRbaXNDbGlja109XCJ0aGlzLnN0YXR1c0NvbmYoKS5pc0NsaWNrXCJcblx0XHRcdFx0XHRcdChjaGFuZ2UpPVwic3RhdHVzQ2hhbmdlKCRldmVudCwgY3VzdG9tU3RlcHMpXCI+XG5cdFx0XHRcdFx0PC9jdXN0b20tc3RlcHM+XG5cdFx0XHRcdH1cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRcdEBpZiAoc2hvd0xvZygpKSB7XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibGc6dy1bNDAwcHhdIG1kOnctWzMwMHB4XSBoaWRkZW4gbWQ6YmxvY2tcIj48L2Rpdj5cblx0XHR9XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwibWFpbiBmbGV4IGZsZXgtd3JhcFwiPlxuXHRcdDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbWQ6ZmxleC0xIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG9cIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBteC0yIGZvcm0tcGFuZWxcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInAtMiBmbGV4LTFcIj5cblx0XHRcdFx0XHQ8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm0oKS5mb3JtIVwiPlxuXHRcdFx0XHRcdFx0PGN1c3RvbS1mb3JtXG5cdFx0XHRcdFx0XHRcdCNjRm9ybVxuXHRcdFx0XHRcdFx0XHRbb3B0aW9uc109XCJmb3JtT3B0aW9uc1wiXG5cdFx0XHRcdFx0XHRcdFt1cHNlcnRdPVwidXBzZXJ0UHJtXCJcblx0XHRcdFx0XHRcdFx0W21vZGVsXT1cImdldFBybS5kYXRhID8/IHt9XCI+PC9jdXN0b20tZm9ybT5cblx0XHRcdFx0XHQ8L2Zvcm0+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRAaWYgKGdyaWRMaXN0KCkgJiYgZ3JpZExpc3QoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInJlbGF0aXZlIG1iLTJcIj5cblx0XHRcdFx0XHRcdDxwLXRhYnMgWyh2YWx1ZSldPVwiaW5kZXhWYWx1ZVwiPlxuXHRcdFx0XHRcdFx0XHQ8cC10YWJsaXN0PlxuXHRcdFx0XHRcdFx0XHRcdEBmb3IgKGZjaGlsZCBvZiBncmlkTGlzdCgpOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgZmNoaWxkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQ8cC10YWJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W3ZhbHVlXT1cImlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwidGFiQ2xpY2soKVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7eyBmY2hpbGQuaTE4bktleSA/IGkxOG4uZmFueWkoZmNoaWxkLmkxOG5LZXkpIDogZmNoaWxkLnRpdGxlIH19XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3AtdGFiPlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0PC9wLXRhYmxpc3Q+XG5cdFx0XHRcdFx0XHQ8L3AtdGFicz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0fVxuXHRcdFx0XHRAZm9yIChncmlkIG9mIGdyaWRMaXN0KCk7IGxldCBpID0gJGluZGV4OyB0cmFjayBncmlkKSB7XG5cdFx0XHRcdFx0QGlmICghIWdyaWQ/LnNsb3RLZXkgJiYgcGFnZUZvcm1TbG90KSB7XG5cdFx0XHRcdFx0XHQ8ZGl2IFtoaWRkZW5dPVwiaW5kZXhWYWx1ZSAhPSBpXCIgW25nU3R5bGVdPVwieydoZWlnaHQnOiBncmlkLmdyaWRPcHRpb25zLnNjcm9sbEhlaWdodH1cIj5cblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VGb3JtU2xvdC50ZW1wbGF0ZVJlZjsgY29udGV4dDogZ2V0UGFnZUZvcm1TbG90Q29udGV4dChncmlkLCBpKVwiPiA8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdFx0QGlmIChncmlkLnR5cGUgPT0gJ2dyaWQnKSB7XG5cdFx0XHRcdFx0XHRcdDxjdXN0b20tZ3JpZFxuXHRcdFx0XHRcdFx0XHRcdCNjdXN0b21HcmlkXG5cdFx0XHRcdFx0XHRcdFx0W2hpZGRlbl09XCJpbmRleFZhbHVlICE9IGlcIlxuXHRcdFx0XHRcdFx0XHRcdFtyb3dEYXRhXT1cImdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5IV1cIlxuXHRcdFx0XHRcdFx0XHRcdFt1cHNlcnRdPVwidXBzZXJ0UHJtXCJcblx0XHRcdFx0XHRcdFx0XHQoZGVsZXRlRW1pdCk9XCJkZWxSb3dzKCRldmVudClcIlxuXHRcdFx0XHRcdFx0XHRcdFthZGRUeXBlXT1cImdyaWQuc3ViVGFibGVTb3VyY2VcIlxuXHRcdFx0XHRcdFx0XHRcdChhZGRFbWl0KT1cImRhdGFTb3VyY2VTaG93KClcIlxuXHRcdFx0XHRcdFx0XHRcdFtncmlkT3B0aW9uc109XCJncmlkLmdyaWRPcHRpb25zXCJcblx0XHRcdFx0XHRcdFx0XHRbZ3JpZERpc2FibGVdPVwiZ3JpZERpc2FibGVcIlxuXHRcdFx0XHRcdFx0XHRcdFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuXHRcdFx0XHRcdFx0XHRcdFtzaG93RGVsZXRlXT1cImdyaWQuc2hvd0RlbGV0ZVwiXG5cdFx0XHRcdFx0XHRcdFx0W3NlbGVjdERhdGFdPVwiZ3JpZC5zZWxlY3REYXRhXCJcblx0XHRcdFx0XHRcdFx0XHRbYWRkU29ydF09XCJncmlkLmFkZFNvcnRcIj5cblx0XHRcdFx0XHRcdFx0PC9jdXN0b20tZ3JpZD5cblx0XHRcdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQ8Y3VzdG9tLWZvcm1cblx0XHRcdFx0XHRcdFx0XHQjdGFiRm9ybVxuXHRcdFx0XHRcdFx0XHRcdFtoaWRkZW5dPVwiaW5kZXhWYWx1ZSAhPSBpXCJcblx0XHRcdFx0XHRcdFx0XHRbb3B0aW9uc109XCJncmlkXCJcblx0XHRcdFx0XHRcdFx0XHRbdXBzZXJ0XT1cInVwc2VydFBybVwiXG5cdFx0XHRcdFx0XHRcdFx0W21vZGVsXT1cInN1YkZvcm1Nb2RlbFtncmlkLnN1YkRhdGFLZXkhXSB8fCB7fVwiPlxuXHRcdFx0XHRcdFx0XHQ8L2N1c3RvbS1mb3JtPlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0QGlmIChzaG93TG9nKCkpIHtcblx0XHRcdDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbGc6dy1bNDAwcHhdIG1kOnctWzMwMHB4XSBtZDpoLWZ1bGwgbWQ6b3ZlcmZsb3cteS1hdXRvIGhpZGRlbiBtZDpibG9ja1wiPlxuXHRcdFx0XHQ8Y3VzdG9tLWxvZyBbbG9nc109XCJnZXRQcm0uZGF0YT8ubG9nID8/IFtdXCI+PC9jdXN0b20tbG9nPlxuXHRcdFx0PC9kaXY+XG5cdFx0fVxuXHQ8L2Rpdj5cbjwvZGl2PlxuPHJvdy1zZWxlY3RvclxuXHRbKHZpc2libGUpXT1cInZpc2libGVcIlxuXHRbc2VhcmNoUHJtXT1cImRpYWxvZ1NlYXJjaFBybVwiXG5cdFtncmlkT3B0aW9uc109XCJzZWxlY3RPcHRpb25zXCJcblx0W3NlbGVjdGlvbktleXNdPVwic2VsZWN0aW9uS2V5c1wiXG5cdChvbk9rKT1cIm9uT2soJGV2ZW50KVwiXG5cdChjYW5jZWxTZWxlY3QpPVwib25DYW5jZWxTZWxlY3RlZCgkZXZlbnQpXCI+XG48L3Jvdy1zZWxlY3Rvcj5cbiJdfQ==
@@ -73,11 +73,11 @@ export class RowSelectorComponent {
73
73
  }
74
74
  }
75
75
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RowSelectorComponent, deps: [{ token: i1.ActionService }], target: i0.ɵɵFactoryTarget.Component }); }
76
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: RowSelectorComponent, isStandalone: true, selector: "row-selector", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, selectionKeys: { classPropertyName: "selectionKeys", publicName: "selectionKeys", isSignal: true, isRequired: false, transformFunction: null }, gridOptions: { classPropertyName: "gridOptions", publicName: "gridOptions", isSignal: true, isRequired: false, transformFunction: null }, searchPrm: { classPropertyName: "searchPrm", publicName: "searchPrm", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onOk: "onOk", visible: "visibleChange", cancelSelect: "cancelSelect" }, viewQueries: [{ propertyName: "grid", first: true, predicate: GridComponent, descendants: true }], ngImport: i0, template: "<p-dialog\n\t[header]=\"title()\"\n\t[modal]=\"true\"\n\t[style]=\"{ width: '50vw' }\"\n\t(onHide)=\"cancel()\"\n\t[maximizable]=\"true\"\n\t[appendTo]=\"'body'\"\n\t[focusOnShow]=\"false\"\n\t(onShow)=\"onShow()\"\n\t(onHide)=\"onHide()\"\n\t(onMaximize)=\"onMaximize($event)\"\n\t[(visible)]=\"visible\">\n\t@if (innerVisible) {\n\t\t<div class=\"flex flex-col gap-2\">\n\t\t\t@if (showSearch()) {\n\t\t\t\t<custom-search [gridOptions]=\"gridOptions()\"></custom-search>\n\t\t\t}\n\t\t\t<custom-grid\n\t\t\t\t[showAct]=\"false\"\n\t\t\t\t[searchPrm]=\"searchPrm()\"\n\t\t\t\t[selectionKeys]=\"selectionKeys()\"\n\t\t\t\t[gridOptions]=\"gridOptions()\"></custom-grid>\n\t\t\t<div class=\"flex justify-end gap-2\">\n\t\t\t\t<p-button\n\t\t\t\t\tlabel=\"\u53D6\u6D88\"\n\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\tseverity=\"secondary\"\n\t\t\t\t\t(click)=\"cancel()\" />\n\t\t\t\t<p-button\n\t\t\t\t\tlabel=\"\u786E\u5B9A\"\n\t\t\t\t\t[outlined]=\"true\"\n\t\t\t\t\t(click)=\"ok()\" />\n\t\t\t</div>\n\t\t</div>\n\t}\n</p-dialog>\n", styles: [":host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:1}:host ::ng-deep .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-label{padding:0}:host ::ng-deep .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-select .p-select-dropdown{display:none}:host ::ng-deep .p-select .p-select-clear-icon{display:none}:host ::ng-deep .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .p-multiselect-label{padding:0}:host ::ng-deep .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-textarea{border-radius:0;box-shadow:none;padding:0 .25rem;background:#fff;resize:none}:host ::ng-deep .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-treeselect-label{padding:0}:host ::ng-deep .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-menubar{border-width:0;padding:0}:host ::ng-deep .p-menubar-submenu{z-index:3}:host ::ng-deep .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .p-fileupload-header{padding:0}:host ::ng-deep .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-invalid.ng-dirty>.p-datepicker .p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .cm-activeLineGutter{background-color:#fff}\n"], dependencies: [{ 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: DialogModule }, { kind: "component", type: i3.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: GridComponent, selector: "custom-grid", inputs: ["gridOptions", "selectionKeys", "upsert", "rowData", "searchPrm", "addType", "selectData", "showAct", "actPos", "authLevel", "showDelete", "gridDisable", "addSort"], outputs: ["deleteEmit", "addEmit"] }, { kind: "component", type: SearchComponent, selector: "custom-search", inputs: ["searchPrm", "gridOptions"] }] }); }
76
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: RowSelectorComponent, isStandalone: true, selector: "row-selector", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, selectionKeys: { classPropertyName: "selectionKeys", publicName: "selectionKeys", isSignal: true, isRequired: false, transformFunction: null }, gridOptions: { classPropertyName: "gridOptions", publicName: "gridOptions", isSignal: true, isRequired: false, transformFunction: null }, searchPrm: { classPropertyName: "searchPrm", publicName: "searchPrm", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onOk: "onOk", visible: "visibleChange", cancelSelect: "cancelSelect" }, viewQueries: [{ propertyName: "grid", first: true, predicate: GridComponent, descendants: true }], ngImport: i0, template: "<p-dialog\n\t[header]=\"title()\"\n\t[modal]=\"true\"\n\t[style]=\"{ width: '50vw' }\"\n\t(onHide)=\"cancel()\"\n\t[maximizable]=\"true\"\n\t[appendTo]=\"'body'\"\n\t[focusOnShow]=\"false\"\n\t(onShow)=\"onShow()\"\n\t(onHide)=\"onHide()\"\n\t(onMaximize)=\"onMaximize($event)\"\n\t[(visible)]=\"visible\">\n\t@if (innerVisible) {\n\t\t<div class=\"flex flex-col gap-2\">\n\t\t\t@if (showSearch()) {\n\t\t\t\t<custom-search [gridOptions]=\"gridOptions()\"></custom-search>\n\t\t\t}\n\t\t\t<custom-grid\n\t\t\t\t[showAct]=\"false\"\n\t\t\t\t[searchPrm]=\"searchPrm()\"\n\t\t\t\t[selectionKeys]=\"selectionKeys()\"\n\t\t\t\t[gridOptions]=\"gridOptions()\"></custom-grid>\n\t\t\t<div class=\"flex justify-end gap-2\">\n\t\t\t\t<p-button\n\t\t\t\t\tlabel=\"\u53D6\u6D88\"\n\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\tseverity=\"secondary\"\n\t\t\t\t\t(click)=\"cancel()\" />\n\t\t\t\t<p-button\n\t\t\t\t\tlabel=\"\u786E\u5B9A\"\n\t\t\t\t\t[outlined]=\"true\"\n\t\t\t\t\t(click)=\"ok()\" />\n\t\t\t</div>\n\t\t</div>\n\t}\n</p-dialog>\n", styles: [":host ::ng-deep .imm-form-type .p-disabled,:host ::ng-deep .imm-form-type .p-component:disabled{opacity:1}:host ::ng-deep .imm-form-type .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .imm-form-type .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-select-label{padding:0}:host ::ng-deep .imm-form-type .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .imm-form-type .p-select .p-select-dropdown{display:none}:host ::ng-deep .imm-form-type .p-select .p-select-clear-icon{display:none}:host ::ng-deep .imm-form-type .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .imm-form-type .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .imm-form-type .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .imm-form-type .p-multiselect-label{padding:0}:host ::ng-deep .imm-form-type .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .imm-form-type .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .imm-form-type .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-textarea{border-radius:0;box-shadow:none;padding:0 .25rem;background:#fff;resize:none}:host ::ng-deep .imm-form-type .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .imm-form-type .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .imm-form-type .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .imm-form-type .p-treeselect-label{padding:0}:host ::ng-deep .imm-form-type .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .imm-form-type .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .imm-form-type .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-menubar{border-width:0;padding:0}:host ::ng-deep .imm-form-type .p-menubar-submenu{z-index:3}:host ::ng-deep .imm-form-type .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .imm-form-type .p-fileupload-header{padding:0}:host ::ng-deep .imm-form-type .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .imm-form-type .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .ng-invalid.ng-dirty>.p-datepicker .p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .imm-form-type .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .imm-form-type .cm-activeLineGutter{background-color:#fff}\n"], dependencies: [{ 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: DialogModule }, { kind: "component", type: i3.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: GridComponent, selector: "custom-grid", inputs: ["gridOptions", "selectionKeys", "upsert", "rowData", "searchPrm", "addType", "selectData", "showAct", "actPos", "authLevel", "showDelete", "gridDisable", "addSort"], outputs: ["deleteEmit", "addEmit"] }, { kind: "component", type: SearchComponent, selector: "custom-search", inputs: ["searchPrm", "gridOptions"] }] }); }
77
77
  }
78
78
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RowSelectorComponent, decorators: [{
79
79
  type: Component,
80
- args: [{ selector: 'row-selector', standalone: true, imports: [ButtonModule, DialogModule, GridComponent, SearchComponent], template: "<p-dialog\n\t[header]=\"title()\"\n\t[modal]=\"true\"\n\t[style]=\"{ width: '50vw' }\"\n\t(onHide)=\"cancel()\"\n\t[maximizable]=\"true\"\n\t[appendTo]=\"'body'\"\n\t[focusOnShow]=\"false\"\n\t(onShow)=\"onShow()\"\n\t(onHide)=\"onHide()\"\n\t(onMaximize)=\"onMaximize($event)\"\n\t[(visible)]=\"visible\">\n\t@if (innerVisible) {\n\t\t<div class=\"flex flex-col gap-2\">\n\t\t\t@if (showSearch()) {\n\t\t\t\t<custom-search [gridOptions]=\"gridOptions()\"></custom-search>\n\t\t\t}\n\t\t\t<custom-grid\n\t\t\t\t[showAct]=\"false\"\n\t\t\t\t[searchPrm]=\"searchPrm()\"\n\t\t\t\t[selectionKeys]=\"selectionKeys()\"\n\t\t\t\t[gridOptions]=\"gridOptions()\"></custom-grid>\n\t\t\t<div class=\"flex justify-end gap-2\">\n\t\t\t\t<p-button\n\t\t\t\t\tlabel=\"\u53D6\u6D88\"\n\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\tseverity=\"secondary\"\n\t\t\t\t\t(click)=\"cancel()\" />\n\t\t\t\t<p-button\n\t\t\t\t\tlabel=\"\u786E\u5B9A\"\n\t\t\t\t\t[outlined]=\"true\"\n\t\t\t\t\t(click)=\"ok()\" />\n\t\t\t</div>\n\t\t</div>\n\t}\n</p-dialog>\n", styles: [":host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:1}:host ::ng-deep .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-label{padding:0}:host ::ng-deep .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-select .p-select-dropdown{display:none}:host ::ng-deep .p-select .p-select-clear-icon{display:none}:host ::ng-deep .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .p-multiselect-label{padding:0}:host ::ng-deep .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-textarea{border-radius:0;box-shadow:none;padding:0 .25rem;background:#fff;resize:none}:host ::ng-deep .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-treeselect-label{padding:0}:host ::ng-deep .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-menubar{border-width:0;padding:0}:host ::ng-deep .p-menubar-submenu{z-index:3}:host ::ng-deep .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .p-fileupload-header{padding:0}:host ::ng-deep .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-invalid.ng-dirty>.p-datepicker .p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .cm-activeLineGutter{background-color:#fff}\n"] }]
80
+ args: [{ selector: 'row-selector', standalone: true, imports: [ButtonModule, DialogModule, GridComponent, SearchComponent], template: "<p-dialog\n\t[header]=\"title()\"\n\t[modal]=\"true\"\n\t[style]=\"{ width: '50vw' }\"\n\t(onHide)=\"cancel()\"\n\t[maximizable]=\"true\"\n\t[appendTo]=\"'body'\"\n\t[focusOnShow]=\"false\"\n\t(onShow)=\"onShow()\"\n\t(onHide)=\"onHide()\"\n\t(onMaximize)=\"onMaximize($event)\"\n\t[(visible)]=\"visible\">\n\t@if (innerVisible) {\n\t\t<div class=\"flex flex-col gap-2\">\n\t\t\t@if (showSearch()) {\n\t\t\t\t<custom-search [gridOptions]=\"gridOptions()\"></custom-search>\n\t\t\t}\n\t\t\t<custom-grid\n\t\t\t\t[showAct]=\"false\"\n\t\t\t\t[searchPrm]=\"searchPrm()\"\n\t\t\t\t[selectionKeys]=\"selectionKeys()\"\n\t\t\t\t[gridOptions]=\"gridOptions()\"></custom-grid>\n\t\t\t<div class=\"flex justify-end gap-2\">\n\t\t\t\t<p-button\n\t\t\t\t\tlabel=\"\u53D6\u6D88\"\n\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\tseverity=\"secondary\"\n\t\t\t\t\t(click)=\"cancel()\" />\n\t\t\t\t<p-button\n\t\t\t\t\tlabel=\"\u786E\u5B9A\"\n\t\t\t\t\t[outlined]=\"true\"\n\t\t\t\t\t(click)=\"ok()\" />\n\t\t\t</div>\n\t\t</div>\n\t}\n</p-dialog>\n", styles: [":host ::ng-deep .imm-form-type .p-disabled,:host ::ng-deep .imm-form-type .p-component:disabled{opacity:1}:host ::ng-deep .imm-form-type .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .imm-form-type .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-select-label{padding:0}:host ::ng-deep .imm-form-type .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .imm-form-type .p-select .p-select-dropdown{display:none}:host ::ng-deep .imm-form-type .p-select .p-select-clear-icon{display:none}:host ::ng-deep .imm-form-type .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .imm-form-type .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .imm-form-type .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .imm-form-type .p-multiselect-label{padding:0}:host ::ng-deep .imm-form-type .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .imm-form-type .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .imm-form-type .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-textarea{border-radius:0;box-shadow:none;padding:0 .25rem;background:#fff;resize:none}:host ::ng-deep .imm-form-type .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .imm-form-type .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .imm-form-type .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .imm-form-type .p-treeselect-label{padding:0}:host ::ng-deep .imm-form-type .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .imm-form-type .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .imm-form-type .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .imm-form-type .p-menubar{border-width:0;padding:0}:host ::ng-deep .imm-form-type .p-menubar-submenu{z-index:3}:host ::ng-deep .imm-form-type .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .imm-form-type .p-fileupload-header{padding:0}:host ::ng-deep .imm-form-type .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .imm-form-type .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .ng-invalid.ng-dirty>.p-datepicker .p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .imm-form-type .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .imm-form-type .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .imm-form-type .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .imm-form-type .cm-activeLineGutter{background-color:#fff}\n"] }]
81
81
  }], ctorParameters: () => [{ type: i1.ActionService }], propDecorators: { onOk: [{
82
82
  type: Output
83
83
  }], grid: [{
@@ -86,4 +86,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
86
86
  }], cancelSelect: [{
87
87
  type: Output
88
88
  }] } });
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcm93LXNlbGVjdG9yL3Jvdy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3Jvdy1zZWxlY3Rvci9yb3ctc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxhQUFhLEVBQWUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQVMzQyxNQUFNLE9BQU8sb0JBQW9CO0lBYWhDLFlBQW9CLE1BQXFCO1FBQXJCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFaL0IsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFFM0MsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMzQixVQUFLLEdBQUcsS0FBSyxDQUFTLElBQUksQ0FBQyxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsS0FBSyxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLGdCQUFXLEdBQUcsS0FBSyxDQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLGNBQVMsR0FBRyxLQUFLLENBQVMsRUFBRSxDQUFD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QUUsQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0YsQ0FBQzsrR0FyRVcsb0JBQW9CO21HQUFwQixvQkFBb0IsdytCQUVyQixhQUFhLGdEQ2xCekIsa2dDQW9DQSx1ckxEeEJXLFlBQVksaWJBQUUsWUFBWSxvNkJBQUUsYUFBYSwyUUFBRSxlQUFlOzs0RkFJeEQsb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNDLGNBQWMsY0FDWixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUM7a0ZBSzNELElBQUk7c0JBQWIsTUFBTTtnQkFDbUIsSUFBSTtzQkFBN0IsU0FBUzt1QkFBQyxhQUFhO2dCQVVkLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGlucHV0LCBtb2RlbCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcbmltcG9ydCB7IFNlYXJjaCB9IGZyb20gJy4uL2FtL2FtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkQ29tcG9uZW50LCBHcmlkT3B0aW9ucyB9IGZyb20gJy4uL2dyaWQvZ3JpZC9ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gvc2VhcmNoL3NlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdyb3ctc2VsZWN0b3InLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbQnV0dG9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIEdyaWRDb21wb25lbnQsIFNlYXJjaENvbXBvbmVudF0sXG5cdHRlbXBsYXRlVXJsOiAnLi9yb3ctc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybDogJy4vcm93LXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgUm93U2VsZWN0b3JDb21wb25lbnQge1xuXHRAT3V0cHV0KCkgb25PayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cdEBWaWV3Q2hpbGQoR3JpZENvbXBvbmVudCkgZ3JpZCE6IEdyaWRDb21wb25lbnQ7XG5cdGRhdGVQaXBlID0gaW5qZWN0KERhdGVQaXBlKVxuXHR0aXRsZSA9IGlucHV0PHN0cmluZz4oJ+mAieaLqScpO1xuXHRzZWxlY3Rpb25LZXlzID0gaW5wdXQ8YW55W10+KFtdKTtcblx0Z3JpZE9wdGlvbnMgPSBpbnB1dDxHcmlkT3B0aW9ucz4oe30pO1xuXHRzZWFyY2hQcm0gPSBpbnB1dDxTZWFyY2g+KHt9KTtcblx0dmlzaWJsZSA9IG1vZGVsPGJvb2xlYW4+KGZhbHNlKTtcblx0aW5uZXJWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG5cdHNob3dTZWFyY2ggPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblx0c2VsZWN0Q2FuY2VsOmFueVtdID0gW11cblx0QE91dHB1dCgpIGNhbmNlbFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aW9uOiBBY3Rpb25TZXJ2aWNlKSB7fVxuXG5cdGFwaSgpIHtcblx0XHRyZXR1cm4gdGhpcy5ncmlkLmdldEdyaWQoKS5hcGk7XG5cdH1cblxuXHRjYW5jZWwoKSB7XG5cdFx0dGhpcy52aXNpYmxlLnNldChmYWxzZSk7XG5cdH1cblxuXHRvaygpIHtcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldFNlbGVjdGVkRGF0YSgpLm1hcCgoaXRlbSkgPT4ge1xuXHRcdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblx0XHRcdHRoaXMuZ3JpZE9wdGlvbnMoKS5jb2x1bW5EZWZzPy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXN1bHRbY29sLmZpZWxkXSA9IGl0ZW1bY29sLmZpZWxkXTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9KTtcblx0XHR0aGlzLm9uT2suZW1pdChyZXN1bHQpO1xuXHRcdHRoaXMuc2VsZWN0Q2FuY2VsLmxlbmd0aCA+IDAgJiYgdGhpcy5jYW5jZWxTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdENhbmNlbClcblx0XHR0aGlzLnZpc2libGUuc2V0KGZhbHNlKTtcblx0fVxuXG5cdGdldFNlbGVjdGVkRGF0YSgpOiBhbnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXHRcdGNvbnN0IHNlbGVjdGlvbktleXMgPSB0aGlzLnNlbGVjdGlvbktleXMoKTtcblx0XHRjb25zdCBkYXRhS2V5ID0gdGhpcy5ncmlkT3B0aW9ucygpLmRhdGFLZXkgfHwgJ2lkJ1xuXHRcdHRoaXMuYXBpKCkuZm9yRWFjaE5vZGUoKG5vZGU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qga2V5VmFsdWUgPSBub2RlLmRhdGEgPyBub2RlLmRhdGFbZGF0YUtleV06IC0xXG5cdFx0XHRpZighbm9kZS5pc1NlbGVjdGVkKCkgJiYgc2VsZWN0aW9uS2V5cy5pbmNsdWRlcyhrZXlWYWx1ZSkpe1xuXHRcdFx0XHR0aGlzLnNlbGVjdENhbmNlbC5wdXNoKG5vZGUuZGF0YSlcblx0XHRcdH1cblxuXHRcdFx0bm9kZS5pc1NlbGVjdGVkKCkgJiYgcmVzdWx0LnB1c2goeyAuLi5ub2RlLmRhdGEgfSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLmlubmVyVmlzaWJsZSA9IHRydWU7XG5cdFx0dGhpcy5hY3Rpb24uc2V0UG9wTW9kZSh0cnVlKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLmlubmVyVmlzaWJsZSA9IGZhbHNlO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5hY3Rpb24uc2V0UG9wTW9kZShmYWxzZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRvbk1heGltaXplKGV2ZW50OiBhbnkpIHtcblx0XHRpZiAoZXZlbnQubWF4aW1pemVkKSB7XG5cdFx0XHR0aGlzLmdyaWQuc2V0U2Nyb2xsSGVpZ2h0KCdjYWxjKDEwMHZoIC0gMTUwcHgpJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZ3JpZC5zZXRTY3JvbGxIZWlnaHQoKTtcblx0XHR9XG5cdH1cbn1cbiIsIjxwLWRpYWxvZ1xuXHRbaGVhZGVyXT1cInRpdGxlKClcIlxuXHRbbW9kYWxdPVwidHJ1ZVwiXG5cdFtzdHlsZV09XCJ7IHdpZHRoOiAnNTB2dycgfVwiXG5cdChvbkhpZGUpPVwiY2FuY2VsKClcIlxuXHRbbWF4aW1pemFibGVdPVwidHJ1ZVwiXG5cdFthcHBlbmRUb109XCInYm9keSdcIlxuXHRbZm9jdXNPblNob3ddPVwiZmFsc2VcIlxuXHQob25TaG93KT1cIm9uU2hvdygpXCJcblx0KG9uSGlkZSk9XCJvbkhpZGUoKVwiXG5cdChvbk1heGltaXplKT1cIm9uTWF4aW1pemUoJGV2ZW50KVwiXG5cdFsodmlzaWJsZSldPVwidmlzaWJsZVwiPlxuXHRAaWYgKGlubmVyVmlzaWJsZSkge1xuXHRcdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG5cdFx0XHRAaWYgKHNob3dTZWFyY2goKSkge1xuXHRcdFx0XHQ8Y3VzdG9tLXNlYXJjaCBbZ3JpZE9wdGlvbnNdPVwiZ3JpZE9wdGlvbnMoKVwiPjwvY3VzdG9tLXNlYXJjaD5cblx0XHRcdH1cblx0XHRcdDxjdXN0b20tZ3JpZFxuXHRcdFx0XHRbc2hvd0FjdF09XCJmYWxzZVwiXG5cdFx0XHRcdFtzZWFyY2hQcm1dPVwic2VhcmNoUHJtKClcIlxuXHRcdFx0XHRbc2VsZWN0aW9uS2V5c109XCJzZWxlY3Rpb25LZXlzKClcIlxuXHRcdFx0XHRbZ3JpZE9wdGlvbnNdPVwiZ3JpZE9wdGlvbnMoKVwiPjwvY3VzdG9tLWdyaWQ+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAtMlwiPlxuXHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRsYWJlbD1cIuWPlua2iFwiXG5cdFx0XHRcdFx0W3RleHRdPVwidHJ1ZVwiXG5cdFx0XHRcdFx0c2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuXHRcdFx0XHRcdChjbGljayk9XCJjYW5jZWwoKVwiIC8+XG5cdFx0XHRcdDxwLWJ1dHRvblxuXHRcdFx0XHRcdGxhYmVsPVwi56Gu5a6aXCJcblx0XHRcdFx0XHRbb3V0bGluZWRdPVwidHJ1ZVwiXG5cdFx0XHRcdFx0KGNsaWNrKT1cIm9rKClcIiAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdH1cbjwvcC1kaWFsb2c+XG4iXX0=
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcm93LXNlbGVjdG9yL3Jvdy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3Jvdy1zZWxlY3Rvci9yb3ctc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxhQUFhLEVBQWUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQVMzQyxNQUFNLE9BQU8sb0JBQW9CO0lBYWhDLFlBQW9CLE1BQXFCO1FBQXJCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFaL0IsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFFM0MsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMzQixVQUFLLEdBQUcsS0FBSyxDQUFTLElBQUksQ0FBQyxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsS0FBSyxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLGdCQUFXLEdBQUcsS0FBSyxDQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLGNBQVMsR0FBRyxLQUFLLENBQVMsRUFBRSxDQUFD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QUUsQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0YsQ0FBQzsrR0FyRVcsb0JBQW9CO21HQUFwQixvQkFBb0IsdytCQUVyQixhQUFhLGdEQ2xCekIsa2dDQW9DQSxxcE5EeEJXLFlBQVksaWJBQUUsWUFBWSxvNkJBQUUsYUFBYSwyUUFBRSxlQUFlOzs0RkFJeEQsb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNDLGNBQWMsY0FDWixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUM7a0ZBSzNELElBQUk7c0JBQWIsTUFBTTtnQkFDbUIsSUFBSTtzQkFBN0IsU0FBUzt1QkFBQyxhQUFhO2dCQVVkLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGlucHV0LCBtb2RlbCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcbmltcG9ydCB7IFNlYXJjaCB9IGZyb20gJy4uL2FtL2FtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkQ29tcG9uZW50LCBHcmlkT3B0aW9ucyB9IGZyb20gJy4uL2dyaWQvZ3JpZC9ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gvc2VhcmNoL3NlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdyb3ctc2VsZWN0b3InLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbQnV0dG9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIEdyaWRDb21wb25lbnQsIFNlYXJjaENvbXBvbmVudF0sXG5cdHRlbXBsYXRlVXJsOiAnLi9yb3ctc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybDogJy4vcm93LXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgUm93U2VsZWN0b3JDb21wb25lbnQge1xuXHRAT3V0cHV0KCkgb25PayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cdEBWaWV3Q2hpbGQoR3JpZENvbXBvbmVudCkgZ3JpZCE6IEdyaWRDb21wb25lbnQ7XG5cdGRhdGVQaXBlID0gaW5qZWN0KERhdGVQaXBlKVxuXHR0aXRsZSA9IGlucHV0PHN0cmluZz4oJ+mAieaLqScpO1xuXHRzZWxlY3Rpb25LZXlzID0gaW5wdXQ8YW55W10+KFtdKTtcblx0Z3JpZE9wdGlvbnMgPSBpbnB1dDxHcmlkT3B0aW9ucz4oe30pO1xuXHRzZWFyY2hQcm0gPSBpbnB1dDxTZWFyY2g+KHt9KTtcblx0dmlzaWJsZSA9IG1vZGVsPGJvb2xlYW4+KGZhbHNlKTtcblx0aW5uZXJWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG5cdHNob3dTZWFyY2ggPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblx0c2VsZWN0Q2FuY2VsOmFueVtdID0gW11cblx0QE91dHB1dCgpIGNhbmNlbFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aW9uOiBBY3Rpb25TZXJ2aWNlKSB7fVxuXG5cdGFwaSgpIHtcblx0XHRyZXR1cm4gdGhpcy5ncmlkLmdldEdyaWQoKS5hcGk7XG5cdH1cblxuXHRjYW5jZWwoKSB7XG5cdFx0dGhpcy52aXNpYmxlLnNldChmYWxzZSk7XG5cdH1cblxuXHRvaygpIHtcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldFNlbGVjdGVkRGF0YSgpLm1hcCgoaXRlbSkgPT4ge1xuXHRcdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblx0XHRcdHRoaXMuZ3JpZE9wdGlvbnMoKS5jb2x1bW5EZWZzPy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXN1bHRbY29sLmZpZWxkXSA9IGl0ZW1bY29sLmZpZWxkXTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9KTtcblx0XHR0aGlzLm9uT2suZW1pdChyZXN1bHQpO1xuXHRcdHRoaXMuc2VsZWN0Q2FuY2VsLmxlbmd0aCA+IDAgJiYgdGhpcy5jYW5jZWxTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdENhbmNlbClcblx0XHR0aGlzLnZpc2libGUuc2V0KGZhbHNlKTtcblx0fVxuXG5cdGdldFNlbGVjdGVkRGF0YSgpOiBhbnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXHRcdGNvbnN0IHNlbGVjdGlvbktleXMgPSB0aGlzLnNlbGVjdGlvbktleXMoKTtcblx0XHRjb25zdCBkYXRhS2V5ID0gdGhpcy5ncmlkT3B0aW9ucygpLmRhdGFLZXkgfHwgJ2lkJ1xuXHRcdHRoaXMuYXBpKCkuZm9yRWFjaE5vZGUoKG5vZGU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qga2V5VmFsdWUgPSBub2RlLmRhdGEgPyBub2RlLmRhdGFbZGF0YUtleV06IC0xXG5cdFx0XHRpZighbm9kZS5pc1NlbGVjdGVkKCkgJiYgc2VsZWN0aW9uS2V5cy5pbmNsdWRlcyhrZXlWYWx1ZSkpe1xuXHRcdFx0XHR0aGlzLnNlbGVjdENhbmNlbC5wdXNoKG5vZGUuZGF0YSlcblx0XHRcdH1cblxuXHRcdFx0bm9kZS5pc1NlbGVjdGVkKCkgJiYgcmVzdWx0LnB1c2goeyAuLi5ub2RlLmRhdGEgfSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLmlubmVyVmlzaWJsZSA9IHRydWU7XG5cdFx0dGhpcy5hY3Rpb24uc2V0UG9wTW9kZSh0cnVlKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLmlubmVyVmlzaWJsZSA9IGZhbHNlO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5hY3Rpb24uc2V0UG9wTW9kZShmYWxzZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRvbk1heGltaXplKGV2ZW50OiBhbnkpIHtcblx0XHRpZiAoZXZlbnQubWF4aW1pemVkKSB7XG5cdFx0XHR0aGlzLmdyaWQuc2V0U2Nyb2xsSGVpZ2h0KCdjYWxjKDEwMHZoIC0gMTUwcHgpJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZ3JpZC5zZXRTY3JvbGxIZWlnaHQoKTtcblx0XHR9XG5cdH1cbn1cbiIsIjxwLWRpYWxvZ1xuXHRbaGVhZGVyXT1cInRpdGxlKClcIlxuXHRbbW9kYWxdPVwidHJ1ZVwiXG5cdFtzdHlsZV09XCJ7IHdpZHRoOiAnNTB2dycgfVwiXG5cdChvbkhpZGUpPVwiY2FuY2VsKClcIlxuXHRbbWF4aW1pemFibGVdPVwidHJ1ZVwiXG5cdFthcHBlbmRUb109XCInYm9keSdcIlxuXHRbZm9jdXNPblNob3ddPVwiZmFsc2VcIlxuXHQob25TaG93KT1cIm9uU2hvdygpXCJcblx0KG9uSGlkZSk9XCJvbkhpZGUoKVwiXG5cdChvbk1heGltaXplKT1cIm9uTWF4aW1pemUoJGV2ZW50KVwiXG5cdFsodmlzaWJsZSldPVwidmlzaWJsZVwiPlxuXHRAaWYgKGlubmVyVmlzaWJsZSkge1xuXHRcdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG5cdFx0XHRAaWYgKHNob3dTZWFyY2goKSkge1xuXHRcdFx0XHQ8Y3VzdG9tLXNlYXJjaCBbZ3JpZE9wdGlvbnNdPVwiZ3JpZE9wdGlvbnMoKVwiPjwvY3VzdG9tLXNlYXJjaD5cblx0XHRcdH1cblx0XHRcdDxjdXN0b20tZ3JpZFxuXHRcdFx0XHRbc2hvd0FjdF09XCJmYWxzZVwiXG5cdFx0XHRcdFtzZWFyY2hQcm1dPVwic2VhcmNoUHJtKClcIlxuXHRcdFx0XHRbc2VsZWN0aW9uS2V5c109XCJzZWxlY3Rpb25LZXlzKClcIlxuXHRcdFx0XHRbZ3JpZE9wdGlvbnNdPVwiZ3JpZE9wdGlvbnMoKVwiPjwvY3VzdG9tLWdyaWQ+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAtMlwiPlxuXHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRsYWJlbD1cIuWPlua2iFwiXG5cdFx0XHRcdFx0W3RleHRdPVwidHJ1ZVwiXG5cdFx0XHRcdFx0c2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuXHRcdFx0XHRcdChjbGljayk9XCJjYW5jZWwoKVwiIC8+XG5cdFx0XHRcdDxwLWJ1dHRvblxuXHRcdFx0XHRcdGxhYmVsPVwi56Gu5a6aXCJcblx0XHRcdFx0XHRbb3V0bGluZWRdPVwidHJ1ZVwiXG5cdFx0XHRcdFx0KGNsaWNrKT1cIm9rKClcIiAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdH1cbjwvcC1kaWFsb2c+XG4iXX0=