ets-fe-ng-sdk 17.0.367 → 17.0.369

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 (25) hide show
  1. package/esm2022/lib/Reusables/reusable-comps/find-item/find-item.component.mjs +2 -2
  2. package/esm2022/lib/Shared/components/autocomplete/autocomplete-td-rf/autocomplete-td-rf.component.mjs +3 -3
  3. package/esm2022/lib/Shared/components/autocomplete/autocomplete.component.mjs +4 -3
  4. package/esm2022/lib/Shared/components/editable-text-case/editable-text-case.component.mjs +2 -2
  5. package/esm2022/lib/Shared/components/form-generator/form-generator.component.mjs +2 -2
  6. package/esm2022/lib/Shared/components/input/day-hour-min-input/day-hour-min-input.component.mjs +1 -1
  7. package/esm2022/lib/Shared/components/input/input-base.component.mjs +7 -3
  8. package/esm2022/lib/Shared/components/input/input-basic.component.mjs +5 -12
  9. package/esm2022/lib/Shared/components/input/input-control.component.mjs +3 -3
  10. package/esm2022/lib/Shared/components/input/input-td-rf.component.mjs +3 -3
  11. package/esm2022/lib/Shared/components/input/input.component.mjs +3 -3
  12. package/esm2022/lib/Shared/components/input-table/input-table.component.mjs +2 -2
  13. package/esm2022/lib/Shared/components/table-https/table-https.component.mjs +3 -3
  14. package/esm2022/lib/Shared/components/table-input/table-input-row/table-input-row.component.mjs +2 -2
  15. package/esm2022/lib/Shared/components/table-plain/table-plain.component.mjs +3 -3
  16. package/fesm2022/ets-fe-ng-sdk.mjs +30 -32
  17. package/fesm2022/ets-fe-ng-sdk.mjs.map +1 -1
  18. package/lib/Services/utility.service.d.ts +1 -1
  19. package/lib/Shared/components/btn/btn.component.d.ts +3 -3
  20. package/lib/Shared/components/form-generator/form-generated-value/form-generated-value.component.d.ts +1 -1
  21. package/lib/Shared/components/index-comp-layout/index-comp-layout.component.d.ts +1 -1
  22. package/lib/Shared/components/info-dialog/info-dialog.component.d.ts +1 -1
  23. package/lib/Shared/components/input/input-base.component.d.ts +3 -1
  24. package/lib/Shared/components/input/input-basic.component.d.ts +1 -3
  25. package/package.json +1 -1
@@ -317,7 +317,7 @@ export class FindItemComponent extends BaseFormGenerator {
317
317
  this.selectionSignal.set(this.tableHTTPSREF?.selectedItemsSignal() || this.tablePlainRef?.selectedItemsSignal());
318
318
  }
319
319
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FindItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
320
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: FindItemComponent, isStandalone: true, selector: "app-find-item,find-item", inputs: { autoFormatSchema: { classPropertyName: "autoFormatSchema", publicName: "autoFormatSchema", isSignal: true, isRequired: false, transformFunction: null }, autoOrder: { classPropertyName: "autoOrder", publicName: "autoOrder", isSignal: true, isRequired: false, transformFunction: null }, centerCells: { classPropertyName: "centerCells", publicName: "centerCells", isSignal: true, isRequired: false, transformFunction: null }, displayedColumns: { classPropertyName: "displayedColumns", publicName: "displayedColumns", isSignal: true, isRequired: false, transformFunction: null }, gridClass: { classPropertyName: "gridClass", publicName: "gridClass", isSignal: true, isRequired: false, transformFunction: null }, hideForm: { classPropertyName: "hideForm", publicName: "hideForm", isSignal: true, isRequired: false, transformFunction: null }, expandedRowTemplate: { classPropertyName: "expandedRowTemplate", publicName: "expandedRowTemplate", isSignal: true, isRequired: false, transformFunction: null }, isTablePaginated: { classPropertyName: "isTablePaginated", publicName: "isTablePaginated", isSignal: true, isRequired: false, transformFunction: null }, isExpandable: { classPropertyName: "isExpandable", publicName: "isExpandable", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, nowrap: { classPropertyName: "nowrap", publicName: "nowrap", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "rowOptions", isSignal: true, isRequired: false, transformFunction: null }, orderDirection: { classPropertyName: "orderDirection", publicName: "orderDirection", isSignal: true, isRequired: false, transformFunction: null }, orderField: { classPropertyName: "orderField", publicName: "orderField", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, searchFunction: { classPropertyName: "searchFunction", publicName: "searchFunction", isSignal: true, isRequired: false, transformFunction: null }, showData: { classPropertyName: "showData", publicName: "showData", isSignal: true, isRequired: false, transformFunction: null }, searchIfNoQuery: { classPropertyName: "searchIfNoQuery", publicName: "searchIfNoQuery", isSignal: true, isRequired: false, transformFunction: null }, showExport: { classPropertyName: "showExport", publicName: "showExport", isSignal: true, isRequired: false, transformFunction: null }, showFilter: { classPropertyName: "showFilter", publicName: "showFilter", isSignal: true, isRequired: false, transformFunction: null }, showRefreshBtn: { classPropertyName: "showRefreshBtn", publicName: "showRefreshBtn", isSignal: true, isRequired: false, transformFunction: null }, startSectionTemplate: { classPropertyName: "startSectionTemplate", publicName: "startSectionTemplate", isSignal: true, isRequired: false, transformFunction: null }, showSearchBtn: { classPropertyName: "showSearchBtn", publicName: "showSearchBtn", isSignal: true, isRequired: false, transformFunction: null }, showClearBtn: { classPropertyName: "showClearBtn", publicName: "showClearBtn", isSignal: true, isRequired: false, transformFunction: null }, showValidationMsg: { classPropertyName: "showValidationMsg", publicName: "showValidationMsg", isSignal: true, isRequired: false, transformFunction: null }, createBtnRoute: { classPropertyName: "createBtnRoute", publicName: "createBtnRoute", isSignal: true, isRequired: false, transformFunction: null }, showAdditionalColumns: { classPropertyName: "showAdditionalColumns", publicName: "showAdditionalColumns", isSignal: true, isRequired: false, transformFunction: null }, smallerFonts: { classPropertyName: "smallerFonts", publicName: "smallerFonts", isSignal: true, isRequired: false, transformFunction: null }, useSelection: { classPropertyName: "useSelection", publicName: "useSelection", isSignal: true, isRequired: false, transformFunction: null }, createButton: { classPropertyName: "createButton", publicName: "createButton", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: false, transformFunction: null }, searchObservableFunc: { classPropertyName: "searchObservableFunc", publicName: "searchObservableFunc", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { _rowClick: "rowClick", clickedCreate: "clickedCreate" }, viewQueries: [{ propertyName: "tableHTTPSREFSignal", first: true, predicate: TableHttpsComponent, descendants: true, isSignal: true }, { propertyName: "tablePlainRefSignal", first: true, predicate: TablePlainComponent, descendants: true, isSignal: true }, { propertyName: "tableHTTPSREF", first: true, predicate: TableHttpsComponent, descendants: true }, { propertyName: "tablePlainRef", first: true, predicate: TablePlainComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<loader [loading]=\"loading()\">\n @if (!hideForm() && searchForm()) {\n <form [formGroup]=\"searchForm()\" (ngSubmit)=\"search()\">\n <div class=\"row align-items-center\">\n @for (scheme of computedFormSchema(); track scheme) {\n <div class=\"{{ gridClass() }} \">\n <div class=\"row align-items-end\">\n @switch (true) {\n @case (scheme.type == 'tel') {\n <div class=\"col\">\n <app-phone-number\n [form]=\"scheme.form\"\n [label]=\"scheme.label\"\n [name]=\"scheme.field\"\n [showLabel]=\"false\"\n [showValidation]=\"scheme.showValidation\"\n [showValidationIcon]=\"scheme.showValidationIcon\"\n [countryCode3]=\"scheme.countryCode3\"\n [disabled]=\"scheme.disabledIf | functionCaller2: searchFormValue() : (scheme.field | toAny)\"\n #inputTag />\n @if (showValidationMsg()) {\n <app-validation-message [input]=\"inputTag\" />\n }\n </div>\n }\n @case (scheme.type == 'autocomplete') {\n <div class=\"col\">\n <app-autocomplete\n [form]=\"scheme.form\"\n [label]=\"scheme.label\"\n [labelField]=\"scheme.labelField\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [labelType]=\"scheme.labelType | toAny\"\n [optionsFunc]=\"scheme.optionsFunc\"\n [name]=\"scheme.field\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [valueField]=\"scheme.valueField\"\n [options]=\"scheme.options\"\n [hint]=\"scheme.hint\"\n [disabled]=\"scheme.disabledIf | functionCaller2: searchFormValue : (scheme.field | toAny)\"\n #inputTag />\n @if (showValidationMsg()) {\n <app-validation-message [input]=\"inputTag\" />\n }\n </div>\n }\n @default {\n <div class=\"col\">\n <form>\n <div class=\"gx-2 row align-items-end\">\n <div class=\"col\">\n <app-input-basic\n #formField\n [name]=\"scheme.field\"\n [form]=\"scheme.form\"\n [type]=\"scheme.type\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [valueField]=\"scheme.valueField\"\n [labelType]=\"scheme.labelType | toAny\"\n [checkedSignal]=\"scheme.checked\"\n [showValidation]=\"!!scheme.asyncValidators\"\n [showValidationIcon]=\"!!scheme.asyncValidators\"\n [noFormat]=\"true\"\n [labelField]=\"scheme.labelField\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [options]=\"scheme.options\"\n [decimalPoints]=\"scheme.decimalPoints\"\n [hint]=\"scheme.hint\"\n [max]=\"scheme.max\"\n [min]=\"scheme.min\"\n [placeholder]=\"scheme.placeholder\"\n [label]=\"scheme.label\"\n [disabled]=\"scheme.disabledIf | functionCaller2: searchFormValue : (scheme.field | toAny)\" />\n </div>\n @if (scheme.standalone && scheme.action) {\n <div class=\"col-auto\">\n <app-btn\n group=\"show\"\n [disabled]=\"!formField?.validSignal()\"\n actionType=\"submit\"\n (mclick)=\"scheme.action(allSearchFormValue(), formField.valueSignal(), standaloneForm())\" />\n </div>\n }\n @if (scheme.action && !scheme.standalone) {\n <div class=\"col-auto\">\n <app-btn\n [icon]=\"scheme.icon\"\n [iconBtn]=\"true\"\n actionType=\"submit\"\n (mclick)=\"scheme.action(allSearchFormValue(), formField.valueSignal(), searchForm())\" />\n </div>\n }\n </div>\n </form>\n </div>\n @if (showValidationMsg()) {\n <app-validation-message [input]=\"formField\" />\n }\n }\n }\n </div>\n </div>\n }\n <div class=\"col-md justify-content-end d-flex\">\n @if (showClearBtn()) {\n <app-btn type=\"danger-outline\" text=\"Clear\" icon=\"delete\" (mclick)=\"clearFilters()\" />\n }\n <span class=\"mx-1\"></span>\n @if (showSearchBtn()) {\n <app-btn\n [group]=\"'search'\"\n [iconBtn]=\"true\"\n text=\"Search\"\n actionType=\"submit\"\n [excludeLogging]=\"true\"\n [disabled]=\"!searchFunction() && !isTablePaginated()\"\n (mclick)=\"search()\" />\n }\n @if (createButton()) {\n <span class=\"mx-1\"></span>\n @if (createBtnRoute()) {\n <app-btn type=\"outline\" text=\"Create\" icon=\"add\" (mclick)=\"clickedCreate.emit()\" routerLink=\"{{ createBtnRoute() }}\" />\n } @else {\n <app-btn type=\"outline\" text=\"Create\" icon=\"add\" (mclick)=\"clickedCreate.emit()\" />\n }\n }\n </div>\n </div>\n </form>\n }\n\n <ng-content select=\"[tablePanel]\"></ng-content>\n\n @if (displayedColumns()?.length) {\n <div class=\"mt-3\" [hidden]=\"!showData() || (!data() && !isTablePaginated())\">\n <ng-container>\n @if (isTablePaginated()) {\n <table-https\n #tableHTTPS\n [searchIfNoQuery]=\"searchIfNoQuery()\"\n [displayedColumns]=\"displayedColumns()\"\n [observableFunc]=\"searchObservableFunc()\"\n (rowClick)=\"rowClick($event)\"\n (selectionChanged)=\"setSelection()\"\n [centerCells]=\"centerCells()\"\n [expandedRowTemplate]=\"expandedRowTemplate()\"\n [isExpandable]=\"isExpandable()\"\n [label]=\"label()\"\n [nowrap]=\"nowrap()\"\n [orderDirection]=\"orderDirection()\"\n [orderField]=\"orderField()\"\n [pageSize]=\"pageSize()\"\n [rowOptions]=\"options()\"\n [showAdditionalColumns]=\"showAdditionalColumns()\"\n [showExport]=\"showExport()\"\n [showRefreshBtn]=\"showRefreshBtn()\"\n [smallerFonts]=\"smallerFonts()\"\n [startSectionTemplate]=\"startSectionTemplate()\"\n [useSelection]=\"useSelection()\"\n noItemTxt=\"No results found\" />\n } @else {\n <table-plain\n [distinct]=\"true\"\n [showPager]=\"true\"\n [pageSize]=\"pageSize()\"\n [centerCells]=\"false\"\n [startSectionTemplate]=\"startSectionTemplate()\"\n [smallerFonts]=\"smallerFonts()\"\n [nowrap]=\"nowrap()\"\n [showFilter]=\"showFilter()\"\n [showExport]=\"showExport()\"\n [isExpandable]=\"isExpandable()\"\n [expandedRowTemplate]=\"expandedRowTemplate()\"\n [label]=\"label()\"\n noItemTxt=\"No results found\"\n (rowClick)=\"rowClick($event)\"\n [orderField]=\"orderField()\"\n [rowOptions]=\"options()\"\n [showAdditionalColumns]=\"showAdditionalColumns()\"\n [orderDirection]=\"orderDirection()\"\n [displayedColumns]=\"displayedColumns()\"\n (selectionChanged)=\"setSelection()\"\n [data]=\"data()\" />\n }\n </ng-container>\n </div>\n }\n</loader>\n", styles: [""], dependencies: [{ kind: "component", type: LoaderComponent, selector: "loader", inputs: ["class", "text", "loading", "height", "width", "ratioHW"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: PhoneNumberComponent, selector: "app-phone-number", inputs: ["showLabel", "countryCode3", "config"], outputs: ["onCountrySelect"] }, { kind: "component", type: ValidationMessageComponent, selector: "app-validation-message", inputs: ["debug", "label", "hideOverflow", "minLength", "maxLength", "ignoreDirtiness", "customMessage", "control", "input"], outputs: ["labelChange"] }, { kind: "component", type: AutocompleteComponent, selector: "app-autocomplete,autocomplete", inputs: ["showRequiredTag", "validate", "options"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: InputBasicComponent, selector: "app-input-basic,app-input", inputs: ["accept", "autocomplete", "input", "contextData", "decimalPoints", "files", "hide", "hint", "labelLink", "lblCl", "light", "loading", "multiple", "optionsFunc", "theme", "vms", "xsmall", "setCurrentDate", "options"], outputs: ["mSelectOptionChange", "mSelectedOptionLabel"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: TableHttpsComponent, selector: "table-https", inputs: ["observableFunc", "pageNumber", "queryData", "searchIfNoQuery", "showRefreshBtn"], outputs: ["queryDataChange", "dataFetched"] }, { kind: "component", type: TablePlainComponent, selector: "table-plain", inputs: ["customSelectClass", "idField", "obsDataSource", "showFilter", "showPager", "disableSelectionByField", "data", "filterFields", "filterFieldsMap", "selectionPerPage"], outputs: ["view", "dataChanged", "filterChange", "listMutated"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: FunctionCaller2, name: "functionCaller2" }, { kind: "pipe", type: ToAnyPipe, name: "toAny" }] }); }
320
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: FindItemComponent, isStandalone: true, selector: "app-find-item,find-item", inputs: { autoFormatSchema: { classPropertyName: "autoFormatSchema", publicName: "autoFormatSchema", isSignal: true, isRequired: false, transformFunction: null }, autoOrder: { classPropertyName: "autoOrder", publicName: "autoOrder", isSignal: true, isRequired: false, transformFunction: null }, centerCells: { classPropertyName: "centerCells", publicName: "centerCells", isSignal: true, isRequired: false, transformFunction: null }, displayedColumns: { classPropertyName: "displayedColumns", publicName: "displayedColumns", isSignal: true, isRequired: false, transformFunction: null }, gridClass: { classPropertyName: "gridClass", publicName: "gridClass", isSignal: true, isRequired: false, transformFunction: null }, hideForm: { classPropertyName: "hideForm", publicName: "hideForm", isSignal: true, isRequired: false, transformFunction: null }, expandedRowTemplate: { classPropertyName: "expandedRowTemplate", publicName: "expandedRowTemplate", isSignal: true, isRequired: false, transformFunction: null }, isTablePaginated: { classPropertyName: "isTablePaginated", publicName: "isTablePaginated", isSignal: true, isRequired: false, transformFunction: null }, isExpandable: { classPropertyName: "isExpandable", publicName: "isExpandable", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, nowrap: { classPropertyName: "nowrap", publicName: "nowrap", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "rowOptions", isSignal: true, isRequired: false, transformFunction: null }, orderDirection: { classPropertyName: "orderDirection", publicName: "orderDirection", isSignal: true, isRequired: false, transformFunction: null }, orderField: { classPropertyName: "orderField", publicName: "orderField", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, searchFunction: { classPropertyName: "searchFunction", publicName: "searchFunction", isSignal: true, isRequired: false, transformFunction: null }, showData: { classPropertyName: "showData", publicName: "showData", isSignal: true, isRequired: false, transformFunction: null }, searchIfNoQuery: { classPropertyName: "searchIfNoQuery", publicName: "searchIfNoQuery", isSignal: true, isRequired: false, transformFunction: null }, showExport: { classPropertyName: "showExport", publicName: "showExport", isSignal: true, isRequired: false, transformFunction: null }, showFilter: { classPropertyName: "showFilter", publicName: "showFilter", isSignal: true, isRequired: false, transformFunction: null }, showRefreshBtn: { classPropertyName: "showRefreshBtn", publicName: "showRefreshBtn", isSignal: true, isRequired: false, transformFunction: null }, startSectionTemplate: { classPropertyName: "startSectionTemplate", publicName: "startSectionTemplate", isSignal: true, isRequired: false, transformFunction: null }, showSearchBtn: { classPropertyName: "showSearchBtn", publicName: "showSearchBtn", isSignal: true, isRequired: false, transformFunction: null }, showClearBtn: { classPropertyName: "showClearBtn", publicName: "showClearBtn", isSignal: true, isRequired: false, transformFunction: null }, showValidationMsg: { classPropertyName: "showValidationMsg", publicName: "showValidationMsg", isSignal: true, isRequired: false, transformFunction: null }, createBtnRoute: { classPropertyName: "createBtnRoute", publicName: "createBtnRoute", isSignal: true, isRequired: false, transformFunction: null }, showAdditionalColumns: { classPropertyName: "showAdditionalColumns", publicName: "showAdditionalColumns", isSignal: true, isRequired: false, transformFunction: null }, smallerFonts: { classPropertyName: "smallerFonts", publicName: "smallerFonts", isSignal: true, isRequired: false, transformFunction: null }, useSelection: { classPropertyName: "useSelection", publicName: "useSelection", isSignal: true, isRequired: false, transformFunction: null }, createButton: { classPropertyName: "createButton", publicName: "createButton", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: false, transformFunction: null }, searchObservableFunc: { classPropertyName: "searchObservableFunc", publicName: "searchObservableFunc", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { _rowClick: "rowClick", clickedCreate: "clickedCreate" }, viewQueries: [{ propertyName: "tableHTTPSREFSignal", first: true, predicate: TableHttpsComponent, descendants: true, isSignal: true }, { propertyName: "tablePlainRefSignal", first: true, predicate: TablePlainComponent, descendants: true, isSignal: true }, { propertyName: "tableHTTPSREF", first: true, predicate: TableHttpsComponent, descendants: true }, { propertyName: "tablePlainRef", first: true, predicate: TablePlainComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<loader [loading]=\"loading()\">\n @if (!hideForm() && searchForm()) {\n <form [formGroup]=\"searchForm()\" (ngSubmit)=\"search()\">\n <div class=\"row align-items-center\">\n @for (scheme of computedFormSchema(); track scheme) {\n <div class=\"{{ gridClass() }} \">\n <div class=\"row align-items-end\">\n @switch (true) {\n @case (scheme.type == 'tel') {\n <div class=\"col\">\n <app-phone-number\n [form]=\"scheme.form\"\n [label]=\"scheme.label\"\n [name]=\"scheme.field\"\n [showLabel]=\"false\"\n [showValidation]=\"scheme.showValidation\"\n [showValidationIcon]=\"scheme.showValidationIcon\"\n [countryCode3]=\"scheme.countryCode3\"\n [disabled]=\"scheme.disabledIf | functionCaller2: searchFormValue() : (scheme.field | toAny)\"\n #inputTag />\n @if (showValidationMsg()) {\n <app-validation-message [input]=\"inputTag\" />\n }\n </div>\n }\n @case (scheme.type == 'autocomplete') {\n <div class=\"col\">\n <app-autocomplete\n [form]=\"scheme.form\"\n [label]=\"scheme.label\"\n [labelField]=\"scheme.labelField\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [labelType]=\"scheme.labelType | toAny\"\n [optionsFunc]=\"scheme.optionsFunc\"\n [name]=\"scheme.field\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [valueField]=\"scheme.valueField\"\n [options]=\"scheme.options\"\n [hint]=\"scheme.hint\"\n [disabled]=\"scheme.disabledIf | functionCaller2: searchFormValue : (scheme.field | toAny)\"\n #inputTag />\n @if (showValidationMsg()) {\n <app-validation-message [input]=\"inputTag\" />\n }\n </div>\n }\n @default {\n <div class=\"col\">\n <form>\n <div class=\"gx-2 row align-items-end\">\n <div class=\"col\">\n <app-input-basic\n #formField\n [name]=\"scheme.field\"\n [form]=\"scheme.form\"\n [type]=\"scheme.type\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [valueField]=\"scheme.valueField\"\n [labelType]=\"scheme.labelType | toAny\"\n [checkedSignal]=\"scheme.checked\"\n [showValidation]=\"!!scheme.asyncValidators\"\n [showValidationIcon]=\"!!scheme.asyncValidators\"\n [noFormat]=\"true\"\n [labelField]=\"scheme.labelField\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [options]=\"scheme.options\"\n [decimalPoints]=\"scheme.decimalPoints\"\n [hint]=\"scheme.hint\"\n [max]=\"scheme.max\"\n [min]=\"scheme.min\"\n [placeholder]=\"scheme.placeholder\"\n [label]=\"scheme.label\"\n [disabled]=\"scheme.disabledIf | functionCaller2: searchFormValue : (scheme.field | toAny)\" />\n </div>\n @if (scheme.standalone && scheme.action) {\n <div class=\"col-auto\">\n <app-btn\n group=\"show\"\n [disabled]=\"!formField?.validSignal()\"\n actionType=\"submit\"\n (mclick)=\"scheme.action(allSearchFormValue(), formField.valueSignal(), standaloneForm())\" />\n </div>\n }\n @if (scheme.action && !scheme.standalone) {\n <div class=\"col-auto\">\n <app-btn\n [icon]=\"scheme.icon\"\n [iconBtn]=\"true\"\n actionType=\"submit\"\n (mclick)=\"scheme.action(allSearchFormValue(), formField.valueSignal(), searchForm())\" />\n </div>\n }\n </div>\n </form>\n </div>\n @if (showValidationMsg()) {\n <app-validation-message [input]=\"formField\" />\n }\n }\n }\n </div>\n </div>\n }\n <div class=\"col-md justify-content-end d-flex\">\n @if (showClearBtn()) {\n <app-btn type=\"danger-outline\" text=\"Clear\" icon=\"delete\" (mclick)=\"clearFilters()\" />\n }\n <span class=\"mx-1\"></span>\n @if (showSearchBtn()) {\n <app-btn\n [group]=\"'search'\"\n [iconBtn]=\"true\"\n text=\"Search\"\n actionType=\"submit\"\n [excludeLogging]=\"true\"\n [disabled]=\"!searchFunction() && !isTablePaginated()\"\n (mclick)=\"search()\" />\n }\n @if (createButton()) {\n <span class=\"mx-1\"></span>\n @if (createBtnRoute()) {\n <app-btn type=\"outline\" text=\"Create\" icon=\"add\" (mclick)=\"clickedCreate.emit()\" routerLink=\"{{ createBtnRoute() }}\" />\n } @else {\n <app-btn type=\"outline\" text=\"Create\" icon=\"add\" (mclick)=\"clickedCreate.emit()\" />\n }\n }\n </div>\n </div>\n </form>\n }\n\n <ng-content select=\"[tablePanel]\"></ng-content>\n\n @if (displayedColumns()?.length) {\n <div class=\"mt-3\" [hidden]=\"!showData() || (!data() && !isTablePaginated())\">\n <ng-container>\n @if (isTablePaginated()) {\n <table-https\n #tableHTTPS\n [searchIfNoQuery]=\"searchIfNoQuery()\"\n [displayedColumns]=\"displayedColumns()\"\n [observableFunc]=\"searchObservableFunc()\"\n (rowClick)=\"rowClick($event)\"\n (selectionChanged)=\"setSelection()\"\n [centerCells]=\"centerCells()\"\n [expandedRowTemplate]=\"expandedRowTemplate()\"\n [isExpandable]=\"isExpandable()\"\n [label]=\"label()\"\n [nowrap]=\"nowrap()\"\n [orderDirection]=\"orderDirection()\"\n [orderField]=\"orderField()\"\n [pageSize]=\"pageSize()\"\n [rowOptions]=\"options()\"\n [showAdditionalColumns]=\"showAdditionalColumns()\"\n [showExport]=\"showExport()\"\n [showRefreshBtn]=\"showRefreshBtn()\"\n [smallerFonts]=\"smallerFonts()\"\n [startSectionTemplate]=\"startSectionTemplate()\"\n [useSelection]=\"useSelection()\"\n noItemTxt=\"No results found\" />\n } @else {\n <table-plain\n [distinct]=\"true\"\n [showPager]=\"true\"\n [pageSize]=\"pageSize()\"\n [centerCells]=\"false\"\n [startSectionTemplate]=\"startSectionTemplate()\"\n [smallerFonts]=\"smallerFonts()\"\n [nowrap]=\"nowrap()\"\n [showFilter]=\"showFilter()\"\n [showExport]=\"showExport()\"\n [isExpandable]=\"isExpandable()\"\n [expandedRowTemplate]=\"expandedRowTemplate()\"\n [label]=\"label()\"\n noItemTxt=\"No results found\"\n (rowClick)=\"rowClick($event)\"\n [orderField]=\"orderField()\"\n [rowOptions]=\"options()\"\n [showAdditionalColumns]=\"showAdditionalColumns()\"\n [orderDirection]=\"orderDirection()\"\n [displayedColumns]=\"displayedColumns()\"\n (selectionChanged)=\"setSelection()\"\n [data]=\"data()\" />\n }\n </ng-container>\n </div>\n }\n</loader>\n", styles: [""], dependencies: [{ kind: "component", type: LoaderComponent, selector: "loader", inputs: ["class", "text", "loading", "height", "width", "ratioHW"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: PhoneNumberComponent, selector: "app-phone-number", inputs: ["showLabel", "countryCode3", "config"], outputs: ["onCountrySelect"] }, { kind: "component", type: ValidationMessageComponent, selector: "app-validation-message", inputs: ["debug", "label", "hideOverflow", "minLength", "maxLength", "ignoreDirtiness", "customMessage", "control", "input"], outputs: ["labelChange"] }, { kind: "component", type: AutocompleteComponent, selector: "app-autocomplete,autocomplete", inputs: ["showRequiredTag", "validate", "options"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: InputBasicComponent, selector: "app-input-basic,app-input", inputs: ["accept", "autocomplete", "input", "contextData", "decimalPoints", "files", "hide", "hint", "labelLink", "lblCl", "light", "loading", "multiple", "optionsFunc", "theme", "vms", "xsmall", "setCurrentDate", "options"], outputs: ["mSelectedOptionLabel"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: TableHttpsComponent, selector: "table-https", inputs: ["observableFunc", "pageNumber", "queryData", "searchIfNoQuery", "showRefreshBtn"], outputs: ["queryDataChange", "dataFetched"] }, { kind: "component", type: TablePlainComponent, selector: "table-plain", inputs: ["customSelectClass", "idField", "obsDataSource", "showFilter", "showPager", "disableSelectionByField", "data", "filterFields", "filterFieldsMap", "selectionPerPage"], outputs: ["view", "dataChanged", "filterChange", "listMutated"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: FunctionCaller2, name: "functionCaller2" }, { kind: "pipe", type: ToAnyPipe, name: "toAny" }] }); }
321
321
  }
322
322
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FindItemComponent, decorators: [{
323
323
  type: Component,
@@ -357,4 +357,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
357
357
  type: Input,
358
358
  args: ['formSchema']
359
359
  }] } });
360
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9SZXVzYWJsZXMvcmV1c2FibGUtY29tcHMvZmluZC1pdGVtL2ZpbmQtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvUmV1c2FibGVzL3JldXNhYmxlLWNvbXBzL2ZpbmQtaXRlbS9maW5kLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBRVQsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsV0FBVyxFQUNYLFNBQVMsRUFDVCxXQUFXLEVBQ1gsbUJBQW1CLEdBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUdMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsWUFBWSxFQUVaLE1BQU0sRUFDTixhQUFhLEVBQ2IsR0FBRyxFQUNILEdBQUcsRUFDSCxLQUFLLEdBQ04sTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpRkFBaUYsQ0FBQztBQUN0SCxPQUFPLEVBRUwsbUJBQW1CLEdBQ3BCLE1BQU0sOERBQThELENBQUM7QUFRdEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFN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LHFCQUFxQjt3QkFDckIsVUFBVTt3QkFDVixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsU0FBUzt3QkFDVCxtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsU0FBUztxQkFDVjs4QkEyRG1CLFNBQVM7c0JBQTVCLE1BQU07dUJBQUMsVUFBVTtnQkFDUixhQUFhO3NCQUF0QixNQUFNO2dCQUN5QixhQUFhO3NCQUE1QyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDRSxhQUFhO3NCQUE1QyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFZTCxXQUFXO3NCQUFuQyxLQUFLO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIFRlbXBsYXRlUmVmLFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgaW5qZWN0LFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBGb3Jtc01vZHVsZSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBkZWJvdW5jZSxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBsYXN0VmFsdWVGcm9tLFxuICBtYXAsXG4gIHRhcCxcbiAgdGltZXIsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXNlckFjdGl2aXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL1JldXNhYmxlcy9yZXVzYWJsZS1wYWdlcy91c2VyLWFjdGl2aXR5L3VhLWV4dHJhcy91c2VyLWFjdGl2aXR5LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgSVRhYmxlU2VhcmNoUmVzcCxcbiAgVGFibGVIdHRwc0NvbXBvbmVudCxcbn0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvdGFibGUtaHR0cHMvdGFibGUtaHR0cHMuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIElPYmplY3RMaXRlcmFsLFxuICBJUm93T3B0aW9uLFxuICBJU3RyaWN0Rm9ybUdyb3VwLFxuICBTb3J0VHlwZSxcbiAgVGFibGVDb2wsXG59IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9tb2RlbHMvaW5kZXgubW9kZWwnO1xuaW1wb3J0IHsgRVVBIH0gZnJvbSAnLi4vLi4vcmV1c2FibGUtcGFnZXMvdXNlci1hY3Rpdml0eS91YS1leHRyYXMvdXNlci1hY3Rpdml0eS5tb2RlbCc7XG5pbXBvcnQgeyBGdW5jdGlvbkNhbGxlcjIsIFRvQW55UGlwZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9waXBlcy91dGlsaXR5LnBpcGUnO1xuaW1wb3J0IHsgVGFibGVQbGFpbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlLXBsYWluL3RhYmxlLXBsYWluLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdG5Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvY29tcG9uZW50cy9idG4vYnRuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dEJhc2ljQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvaW5wdXQtYmFzaWMuY29tcG9uZW50JztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50JztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvdmFsaWRhdGlvbi1tZXNzYWdlL3ZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGhvbmVOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvY29tcG9uZW50cy9waG9uZS1udW1iZXIvcGhvbmUtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciwgTmdTd2l0Y2gsIE5nU3dpdGNoQ2FzZSwgTmdTd2l0Y2hEZWZhdWx0LCBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvbG9hZGVyL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvaW5kZXguY29uZmlnJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUZvcm1HZW5lcmF0b3IsXG4gIElCYXNlRm9ybVNjaGVtYSxcbn0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IuYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1maW5kLWl0ZW0sZmluZC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbmQtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbmQtaXRlbS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTG9hZGVyQ29tcG9uZW50LFxuICAgIE5nSWYsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTmdGb3IsXG4gICAgTmdTd2l0Y2gsXG4gICAgTmdTd2l0Y2hDYXNlLFxuICAgIFBob25lTnVtYmVyQ29tcG9uZW50LFxuICAgIFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50LFxuICAgIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBSb3V0ZXJMaW5rLFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBJbnB1dEJhc2ljQ29tcG9uZW50LFxuICAgIEJ0bkNvbXBvbmVudCxcbiAgICBUYWJsZUh0dHBzQ29tcG9uZW50LFxuICAgIFRhYmxlUGxhaW5Db21wb25lbnQsXG4gICAgQXN5bmNQaXBlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRnVuY3Rpb25DYWxsZXIyLFxuICAgIFRvQW55UGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmluZEl0ZW1Db21wb25lbnQ8XG4gICAgVFF1ZXJ5IGV4dGVuZHMgSU9iamVjdExpdGVyYWwgPSBhbnksXG4gICAgVFJvdyBleHRlbmRzIElPYmplY3RMaXRlcmFsID0gYW55LFxuICA+XG4gIGV4dGVuZHMgQmFzZUZvcm1HZW5lcmF0b3I8VFF1ZXJ5LCBJU2VhcmNoRm9ybVNjaGVtYTxUUXVlcnksIFRSb3c+PlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICAvKipcbiAgICogV2hldGhlciB0byBzb3J0IHNjaGVtYVxuICAgKi9cbiAgYXV0b0Zvcm1hdFNjaGVtYSA9IGlucHV0KHRydWUpO1xuICBhdXRvT3JkZXIgPSBpbnB1dCh0cnVlKTtcbiAgY2VudGVyQ2VsbHMgPSBpbnB1dDxib29sZWFuPigpO1xuICBkaXNwbGF5ZWRDb2x1bW5zID0gaW5wdXQ8VGFibGVDb2xbXT4oKTtcbiAgLyoqXG4gICAqIFJvdyBncmlkIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGdyaWRDbGFzcyA9IGlucHV0KCdjb2wtbWQtNCBjb2wteHhsLTMnKTtcbiAgaGlkZUZvcm0gPSBpbnB1dChmYWxzZSk7XG4gIGV4cGFuZGVkUm93VGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xuICBpc1RhYmxlUGFnaW5hdGVkID0gaW5wdXQoZmFsc2UpO1xuICBpc0V4cGFuZGFibGUgPSBpbnB1dChmYWxzZSk7XG4gIGxhYmVsID0gaW5wdXQ8c3RyaW5nPigpO1xuICBub3dyYXAgPSBpbnB1dChmYWxzZSk7XG4gIG9wdGlvbnMgPSBpbnB1dDxJUm93T3B0aW9uPFRSb3c+W10+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3Jvd09wdGlvbnMnIH0pO1xuICBvcmRlckRpcmVjdGlvbiA9IGlucHV0PFNvcnRUeXBlPignYXNjJyk7XG4gIG9yZGVyRmllbGQgPSBpbnB1dDxrZXlvZiBUUm93PigpO1xuICBwYWdlU2l6ZSA9IGlucHV0KDEwKTtcbiAgc2VhcmNoRnVuY3Rpb24gPSBpbnB1dDwoZGF0YTogYW55KSA9PiBPYnNlcnZhYmxlPFRSb3dbXSB8IHsgY29udGVudDogVFJvd1tdIH0+PigpO1xuICBzaG93RGF0YSA9IGlucHV0KHRydWUpO1xuICBzZWFyY2hJZk5vUXVlcnkgPSBpbnB1dCh0cnVlKTtcbiAgc2hvd0V4cG9ydCA9IGlucHV0KHRydWUpO1xuICBzaG93RmlsdGVyID0gaW5wdXQoZmFsc2UpO1xuICBzaG93UmVmcmVzaEJ0biA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHN0YXJ0U2VjdGlvblRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+PigpO1xuICBmb3JtOiBGb3JtR3JvdXA7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgdGhlIHNlYXJjaCBidXR0b24gc2hvdWxkIGJlIHNob3duXG4gICAqL1xuICBzaG93U2VhcmNoQnRuID0gaW5wdXQodHJ1ZSk7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgdGhlIGNsZWFyIGZvcm0gYnV0dG9uIHNob3VsZCBiZSBzaG93blxuICAgKi9cbiAgc2hvd0NsZWFyQnRuID0gaW5wdXQodHJ1ZSk7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgdmFsaWRhdGlvbiBtZXNzYWdlcyBzaG91bGQgYmUgc2hvd25cbiAgICovXG4gIHNob3dWYWxpZGF0aW9uTXNnID0gaW5wdXQodHJ1ZSk7XG4gIGNyZWF0ZUJ0blJvdXRlID0gaW5wdXQoJy4uL2NyZWF0ZScpO1xuICAvKipcbiAgICogVXNlZCB0byBzcGVjaWZ5IGlmIHNob3cgYWRkaXRpb25hbCBjb2x1bW4gYnV0dG9uIHdpaWwgYmUgZGlzcGxheWVkIG9yIG5vdC5cbiAgICovXG4gIHNob3dBZGRpdGlvbmFsQ29sdW1ucyA9IGlucHV0KHRydWUpO1xuICBzbWFsbGVyRm9udHMgPSBpbnB1dChmYWxzZSk7XG4gIC8qKiBVc2UgY2hlY2tib3hlcyAqL1xuICB1c2VTZWxlY3Rpb24gPSBpbnB1dChmYWxzZSk7XG5cbiAgQE91dHB1dCgncm93Q2xpY2snKSBfcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNsaWNrZWRDcmVhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBWaWV3Q2hpbGQoVGFibGVIdHRwc0NvbXBvbmVudCkgdGFibGVIVFRQU1JFRjogVGFibGVIdHRwc0NvbXBvbmVudDxUUm93PjtcbiAgQFZpZXdDaGlsZChUYWJsZVBsYWluQ29tcG9uZW50KSB0YWJsZVBsYWluUmVmOiBUYWJsZVBsYWluQ29tcG9uZW50PFRSb3c+O1xuICB0YWJsZUhUVFBTUkVGU2lnbmFsID0gdmlld0NoaWxkPFRhYmxlSHR0cHNDb21wb25lbnQ8VFJvdz4+KFRhYmxlSHR0cHNDb21wb25lbnQpO1xuICB0YWJsZVBsYWluUmVmU2lnbmFsID0gdmlld0NoaWxkPFRhYmxlUGxhaW5Db21wb25lbnQ8VFJvdz4+KFRhYmxlUGxhaW5Db21wb25lbnQpO1xuICBkYXRhID0gc2lnbmFsPFRSb3dbXT4oW10pO1xuICBsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgc2VhcmNoRm9ybSA9IHNpZ25hbDxGb3JtR3JvdXAgfCB1bmRlZmluZWQ+KG5ldyBGb3JtR3JvdXAoe30pKTtcbiAgc3RhbmRhbG9uZUZvcm0gPSBzaWduYWw8Rm9ybUdyb3VwIHwgdW5kZWZpbmVkPihuZXcgRm9ybUdyb3VwKHt9KSk7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgc2hvdyBjcmVhdGUgYnV0dG9uIGlzIG5lZWRlZC5cbiAgICovXG4gIGNyZWF0ZUJ1dHRvbiA9IGlucHV0KGZhbHNlKTtcblxuICBASW5wdXQoJ2Zvcm1TY2hlbWEnKSBzZXQgX2Zvcm1TY2hlbWEodjogSVNlYXJjaEZvcm1TY2hlbWE8VFF1ZXJ5LCBUUm93PltdKSB7XG4gICAgdGhpcy5pbml0KGNsb25lRGVlcCh2Py5maWx0ZXIoKHgpID0+IHgpKSk7XG4gIH1cblxuICBzZWFyY2hPYnNlcnZhYmxlRnVuYyA9IGlucHV0PChkYXRhOiBhbnkpID0+IE9ic2VydmFibGU8SVRhYmxlU2VhcmNoUmVzcDxUUm93Pj4+KCk7XG4gIHJlYWRvbmx5IGRlbGltaXRlckZpZWxkID0gJ35+fic7XG4gIHJlYWRvbmx5IGRlbGltaXRlcldvcmQgPSAnfn4nO1xuICBwcm90ZWN0ZWQgc2VhcmNoVHJpZ2dlciA9IG5ldyBTdWJqZWN0PElPYmplY3RMaXRlcmFsPigpO1xuXG4gIGNvbXB1dGVkRm9ybVNjaGVtYSA9IGNvbXB1dGVkPElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz5bXT4oXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZm9ybVNjaGVtYSA9IHRoaXMuZm9ybVNjaGVtYSgpIHx8IFtdLFxuICAgICAgICBzdGFuZGFsb25lRm9ybSA9IHRoaXMuc3RhbmRhbG9uZUZvcm0oKSxcbiAgICAgICAgc2VhcmNoRm9ybSA9IHRoaXMuc2VhcmNoRm9ybSgpO1xuXG4gICAgICByZXR1cm4gZm9ybVNjaGVtYVxuICAgICAgICAuZmlsdGVyKCh4KSA9PiAheC5oaWRkZW4pXG4gICAgICAgIC5tYXAoKHNjaGVtZSkgPT4ge1xuICAgICAgICAgIHNjaGVtZS5mb3JtID0gc2NoZW1lLnN0YW5kYWxvbmUgPyBzdGFuZGFsb25lRm9ybSA6IHNlYXJjaEZvcm07XG4gICAgICAgICAgcmV0dXJuIHNjaGVtZTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICB7IGVxdWFsOiBpc0VxdWFsIH0sXG4gICk7XG5cbiAgcHVibGljIHVhUyA9IGluamVjdChVc2VyQWN0aXZpdHlTZXJ2aWNlKTtcbiAgcHVibGljIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwdWJsaWMgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzdWJzMiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuY3JlYXRlU3Vic2NyaXB0aW9uTWFuYWdlcigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vICB0aGlzLmZldGNoU2F2ZWRRdWVyeSgpXG4gICAgbGV0IHNlYXJjaERlYm91bmNlVGltZSA9IDUwMCxcbiAgICAgIHNlYXJjaENvdW50ID0gMDtcbiAgICB0aGlzLnN1YnMyLnB1c2goXG4gICAgICB0aGlzLnNlYXJjaFRyaWdnZXJcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gdGFwKCgpID0+IHtcbiAgICAgICAgICAvLyAgIGRlYnVnZ2VyO1xuICAgICAgICAgIC8vIH0pLFxuICAgICAgICAgIGRlYm91bmNlKCgpID0+IHRpbWVyKHNlYXJjaERlYm91bmNlVGltZSkpLFxuICAgICAgICAgIHRhcCgocikgPT4gdGhpcy5fc2VhcmNoKCkpLFxuICAgICAgICAgIGZpbHRlcigoKSA9PiBzZWFyY2hEZWJvdW5jZVRpbWUgIT0gMCksXG4gICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIGlmICgrK3NlYXJjaENvdW50ID09IDEpIHNlYXJjaERlYm91bmNlVGltZSA9IDA7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25EZXN0cm95KCkge1xuICAgIHRoaXMuc3ViczI/LmNsZWFyKCk7XG4gICAgcmV0dXJuIHN1cGVyLm9uRGVzdHJveSgpO1xuICB9XG5cbiAgZmV0Y2hTYXZlZFF1ZXJ5KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcmV2UXVlcnlTdHJpbmcgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KCdxJyk7XG4gICAgICBpZiAocHJldlF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHByZXZRdWVyeTogeyBbZjogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgY29uc3QgZmllbGRzID0gcHJldlF1ZXJ5U3RyaW5nLnNwbGl0KHRoaXMuZGVsaW1pdGVyRmllbGQpO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IGYgPSBmaWVsZC5zcGxpdCh0aGlzLmRlbGltaXRlcldvcmQpO1xuICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgICAgIGlmIChmWzFdID09IG51bGwgfHwgZlsxXSA9PSAnbnVsbCcpIGNvbnRpbnVlO1xuICAgICAgICAgIHByZXZRdWVyeVtmWzBdXSA9IGZbMV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtKCk/LnBhdGNoVmFsdWUocHJldlF1ZXJ5KTtcbiAgICAgICAgaWYgKE9iamVjdC52YWx1ZXMocHJldlF1ZXJ5KS5zb21lKCh4KSA9PiB4ICE9IG51bGwpKSB0aGlzLnNlYXJjaCgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBpbml0KHNjaGVtYTogSVNlYXJjaEZvcm1TY2hlbWE8VFF1ZXJ5LCBUUm93PltdKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3koKTtcbiAgICBpZiAoIXNjaGVtYT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhzY2hlbWEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICB0aGlzLmhhbmRsZUFsbFNjaGVtYShzY2hlbWEpO1xuICAgIGZvciAoY29uc3Qgc2NoZW1lIG9mIHRoaXMuZm9ybVNjaGVtYSgpKSB0aGlzLmhhbmRsZUZvcm1TY2hlbWUoc2NoZW1lKTtcbiAgICBmb3IgKGNvbnN0IHNjaGVtZSBvZiB0aGlzLmZvcm1TY2hlbWEoKSlcbiAgICAgIGlmIChzY2hlbWUudHJpZ2dlck9uQ2hhbmdlT25Jbml0KVxuICAgICAgICBzY2hlbWUub25DaGFuZ2VGdW5jKHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpLCB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKVtzY2hlbWUuZmllbGRdLCB0aGlzKTtcbiAgfVxuXG4gIGhhbmRsZUFsbFNjaGVtYShzY2hlbWE6IElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz5bXSkge1xuICAgIHNjaGVtYS5mb3JFYWNoKCh4KSA9PiAoeC50eXBlID0geC50eXBlIHx8ICd0ZXh0JykpO1xuICAgIGlmICh0aGlzLmF1dG9Gb3JtYXRTY2hlbWEoKSB8fCB0aGlzLmF1dG9PcmRlcigpKSB7XG4gICAgICBpZiAodGhpcy5hdXRvRm9ybWF0U2NoZW1hKCkpIHtcbiAgICAgICAgc2NoZW1hXG4gICAgICAgICAgLmZpbHRlcigoeCkgPT4geC50eXBlID09ICdzZWxlY3QnKVxuICAgICAgICAgIC5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICBpZiAoeC5vcHRpb25zPy5sZW5ndGggPiA1IHx8ICF4Lm9wdGlvbnMpIHgudHlwZSA9ICdhdXRvY29tcGxldGUnO1xuICAgICAgICAgIH0pO1xuICAgICAgICBzY2hlbWFcbiAgICAgICAgICAuZmlsdGVyKCh4KSA9PiB4LnR5cGUgPT0gJ2NoZWNrYm94JylcbiAgICAgICAgICAuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgeC50eXBlID0gJ3NlbGVjdCc7XG4gICAgICAgICAgICB4Lm9wdGlvbnMgPSBDb25maWcuYm9vbExpc3Q7XG4gICAgICAgICAgICB4LmxhYmVsRmllbGQgPSAndGl0bGUnO1xuICAgICAgICAgICAgeC52YWx1ZUZpZWxkID0gJ2NvZGUnO1xuICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhzY2hlbWEpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYXV0b09yZGVyKCkpIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hLnNvcnQyKCdsYWJlbCcsIHRydWUpO1xuICAgICAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhbXG4gICAgICAgICAgLi4uc2NoZW1hPy5maWx0ZXIoKHgpID0+IHguYWN0aW9uICYmIHgudHlwZSAhPSAnY2hlY2tib3gnKSxcbiAgICAgICAgICAuLi5zY2hlbWE/LmZpbHRlcigoeCkgPT4gIXguYWN0aW9uICYmIHgudHlwZSAhPSAnY2hlY2tib3gnKSxcbiAgICAgICAgICAuLi5zY2hlbWE/LmZpbHRlcigoeCkgPT4geC50eXBlID09ICdjaGVja2JveCcpLFxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgdGhpcy5fc2V0Rm9ybVNjaGVtYXMoc2NoZW1hKTtcblxuICAgIHNjaGVtYS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICBpZiAocy5zdGFuZGFsb25lKVxuICAgICAgICB0aGlzLnN0YW5kYWxvbmVGb3JtKCkucmVnaXN0ZXJDb250cm9sKFxuICAgICAgICAgIHMuZmllbGQudG9TdHJpbmcoKSxcbiAgICAgICAgICBuZXcgRm9ybUNvbnRyb2wobnVsbCwgcy52YWxpZGF0b3JzLCBzLmFzeW5jVmFsaWRhdG9ycyksXG4gICAgICAgICk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMuc2VhcmNoRm9ybSgpLnJlZ2lzdGVyQ29udHJvbChcbiAgICAgICAgICBzLmZpZWxkLnRvU3RyaW5nKCksXG4gICAgICAgICAgbmV3IEZvcm1Db250cm9sKHMudmFsdWUsIHMudmFsaWRhdG9ycywgcy5hc3luY1ZhbGlkYXRvcnMpLFxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlRm9ybVNjaGVtZShzY2hlbWU6IElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz4pIHtcbiAgICBzY2hlbWUuaWQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpO1xuICAgIHRoaXMudXBkYXRlRm9ybVNjaGVtYShzY2hlbWUuZmllbGQsIHNjaGVtZSk7XG5cbiAgICBpZiAoc2NoZW1lLm9wdGlvbnNJbml0RnVuYylcbiAgICAgIHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHNjaGVtZS5vcHRpb25zID0gcjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgICAgICAvLyB0aGlzLm9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkXSA9IHI7XG4gICAgICB9KTtcblxuICAgIGlmIChzY2hlbWUub3B0aW9uc0luaXRGdW5jMilcbiAgICAgIHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMyKCkuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHNjaGVtZS5vcHRpb25zID0gcjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgICAgICAvLyB0aGlzLm9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkXSA9IHI7XG4gICAgICB9KTtcblxuICAgIGlmIChzY2hlbWUub25DaGFuZ2VGdW5jKSB7XG4gICAgICBjb25zdCBzdWIgPSB0aGlzLnNlYXJjaEZvcm0oKVxuICAgICAgICA/LmNvbnRyb2xzW3NjaGVtZS5maWVsZD8udG9TdHJpbmcoKV0/LnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgwKSlcbiAgICAgICAgLnN1YnNjcmliZSgocikgPT4gc2NoZW1lLm9uQ2hhbmdlRnVuYyh0aGlzLnNlYXJjaEZvcm0oKT8uZ2V0UmF3VmFsdWUoKSwgciwgdGhpcykpO1xuICAgICAgdGhpcy5zdWJzW3NjaGVtZS5maWVsZCBhcyBzdHJpbmddID0gc3ViO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZvcm1TY2hlbWEoXG4gICAgZmllbGROYW1lOiBrZXlvZiBUUXVlcnksXG4gICAgc2NoZW1lOiBQYXJ0aWFsPElTZWFyY2hGb3JtU2NoZW1hPHsgW2sgaW4ga2V5b2YgVFF1ZXJ5XTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PiB8IGFueSB9Pj4sXG4gICkge1xuICAgIHJldHVybiBzdXBlci5fdXBkYXRlRm9ybVNjaGVtYShmaWVsZE5hbWUgYXMgc3RyaW5nLCBzY2hlbWUpO1xuICB9XG5cbiAgdXBkYXRlQWxsRm9ybVNjaGVtYShcbiAgICBtYXA6IChmb3JtRmllbGQ6IElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz4pID0+IElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz4sXG4gICkge1xuICAgIHJldHVybiBzdXBlci5fdXBkYXRlQWxsRm9ybVNjaGVtYShtYXApO1xuICB9XG5cbiAgZGV0YWNoRm9ybVNjaGVtZShmaWVsZE5hbWU/OiBrZXlvZiBUUXVlcnkpIHtcbiAgICB0aGlzLnN1YnNbZmllbGROYW1lIGFzIHN0cmluZ10/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzZWFyY2hGb3JtVmFsdWUgPSB0b1NpZ25hbChcbiAgICB0aGlzLnNlYXJjaEZvcm0oKS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIG1hcCgoKSA9PiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmRlbGV0ZU51bGwodGhpcy5zZWFyY2hGb3JtKCk/LmdldFJhd1ZhbHVlKCkpKSxcbiAgICApLFxuICApO1xuICBzdGFuZGFsb25lRm9ybVZhbHVlID0gdG9TaWduYWwodGhpcy5zdGFuZGFsb25lRm9ybSgpLnZhbHVlQ2hhbmdlcyk7XG4gIGFsbFNlYXJjaEZvcm1WYWx1ZSA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgLi4udGhpcy5zZWFyY2hGb3JtVmFsdWUoKSxcbiAgICAuLi50aGlzLnN0YW5kYWxvbmVGb3JtVmFsdWUoKSxcbiAgfSkpO1xuXG4gIHRyYWNrQnlSb3dJRCA9IChpbmRleCwgaXRlbSkgPT4ge1xuICAgIHJldHVybiBpdGVtPy52YWx1ZT8uX19yb3dJRDtcbiAgfTtcblxuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy5zZWFyY2hGb3JtKCk/LnJlc2V0KCk7XG4gICAgdGhpcy5zZWFyY2goKTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5zZWFyY2goKTtcbiAgfVxuXG4gIHNlYXJjaCgpIHtcbiAgICB0aGlzLnNlYXJjaFRyaWdnZXIubmV4dCh0aGlzLnNlYXJjaEZvcm0oKS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBfc2VhcmNoKCkge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmICghdGhpcy5zZWFyY2hGb3JtKSByZXR1cm47XG4gICAgY29uc3QgcmVxID0gdGhpcy51dGlsaXR5U2VydmljZS5kZWxldGVOdWxsKGNsb25lRGVlcCh0aGlzLnNlYXJjaEZvcm0oKT8uZ2V0UmF3VmFsdWUoKSkpO1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmICh0aGlzLmlzVGFibGVQYWdpbmF0ZWQoKSkge1xuICAgICAgaWYgKCF0aGlzLmRhdGEoKSkgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuZGF0YS5zZXQoW10pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGFibGVIVFRQU1JFRj8uc2VhcmNoKHJlcSk7XG4gICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaEZ1bmN0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgbGFzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLnNlYXJjaEZ1bmN0aW9uKCkoe1xuICAgICAgICAgICAgLi4ucmVxLFxuICAgICAgICAgICAgc29ydEJ5OiB0aGlzLm9yZGVyRmllbGQoKSB8fCAnY3JlYXRlZE9uJyxcbiAgICAgICAgICAgIHNvcnREaXJlY3Rpb246IHRoaXMub3JkZXJEaXJlY3Rpb24oKT8udG9VcHBlckNhc2UoKSB8fCAnREVTQycsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZGF0YS5zZXQoZGF0YT8uWydjb250ZW50J10gfHwgZGF0YSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihFcnJvcik7XG4gICAgICB9XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudWFTLmFkZCh7XG4gICAgICAgIGNvZGU6IEVVQS5zZWFyY2hlZCxcbiAgICAgICAgYWN0aXZpdHlEZXNjcmlwdGlvbjogdGhpcy5sYWJlbCgpICsgJyAnICsgSlNPTi5zdHJpbmdpZnkocmVxKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gIH1cblxuICBzYXZlUXVlcnkocXVlcnkgPSB0aGlzLnNlYXJjaEZvcm1WYWx1ZSgpKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgIHE6IE9iamVjdC5rZXlzKHF1ZXJ5KVxuICAgICAgICAgIC5maWx0ZXIoKHgpID0+IHF1ZXJ5W3hdICE9IG51bGwpXG4gICAgICAgICAgLm1hcCgoaykgPT4gYCR7a30ke3RoaXMuZGVsaW1pdGVyV29yZH0ke3F1ZXJ5W2tdfWApXG4gICAgICAgICAgLmpvaW4odGhpcy5kZWxpbWl0ZXJGaWVsZCksXG4gICAgICB9LFxuICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgIH0pO1xuICB9XG4gIHJvd0NsaWNrKGUpIHtcbiAgICB0aGlzLl9yb3dDbGljay5lbWl0KGUpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUhUVFBTUkVGPy5zZWxlY3RlZEl0ZW1zIHx8IHRoaXMudGFibGVQbGFpblJlZj8uc2VsZWN0ZWRJdGVtcztcbiAgfVxuICBzZWxlY3Rpb25TaWduYWwgPSBzaWduYWw8VFJvd1tdPihbXSk7XG5cbiAgaXNBbnlTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0aCA9IHRoaXMudGFibGVIVFRQU1JFRlNpZ25hbCgpPy5pc0FueVNlbGVjdGVkKCksXG4gICAgICB0cCA9IHRoaXMudGFibGVQbGFpblJlZlNpZ25hbCgpPy5pc0FueVNlbGVjdGVkKCk7XG4gICAgcmV0dXJuIHRoIHx8IHRwO1xuICB9KTtcbiAgcHJvdGVjdGVkIHNldFNlbGVjdGlvbigpIHtcbiAgICB0aGlzLnNlbGVjdGlvblNpZ25hbC5zZXQoXG4gICAgICB0aGlzLnRhYmxlSFRUUFNSRUY/LnNlbGVjdGVkSXRlbXNTaWduYWwoKSB8fCB0aGlzLnRhYmxlUGxhaW5SZWY/LnNlbGVjdGVkSXRlbXNTaWduYWwoKSxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlYXJjaEZvcm1TY2hlbWE8XG4gIFRRdWVyeSBleHRlbmRzIElPYmplY3RMaXRlcmFsID0gYW55LFxuICBUUm93IGV4dGVuZHMgSU9iamVjdExpdGVyYWwgPSBhbnksXG4+IGV4dGVuZHMgSUJhc2VGb3JtU2NoZW1hPFxuICAgIFRRdWVyeSxcbiAgICBGaW5kSXRlbUNvbXBvbmVudDxUUXVlcnksIFRSb3c+LFxuICAgIHtcbiAgICAgIFtLIGluIGtleW9mIFRRdWVyeV06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gICAgfVxuICA+IHtcbiAgc3RhbmRhbG9uZT86IGJvb2xlYW47XG4gIGFjdGlvbj86IChyb3c6IFRSb3csIGNlbGw6IGFueSwgZm9ybT86IEZvcm1Hcm91cDxJU3RyaWN0Rm9ybUdyb3VwPFRRdWVyeT4+KSA9PiBhbnk7XG59XG4iLCI8bG9hZGVyIFtsb2FkaW5nXT1cImxvYWRpbmcoKVwiPlxuICBAaWYgKCFoaWRlRm9ybSgpICYmIHNlYXJjaEZvcm0oKSkge1xuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic2VhcmNoRm9ybSgpXCIgKG5nU3VibWl0KT1cInNlYXJjaCgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICBAZm9yIChzY2hlbWUgb2YgY29tcHV0ZWRGb3JtU2NoZW1hKCk7IHRyYWNrIHNjaGVtZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ7eyBncmlkQ2xhc3MoKSB9fSBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtZW5kXCI+XG4gICAgICAgICAgICAgIEBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgICAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ3RlbCcpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1waG9uZS1udW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJzY2hlbWUuZm9ybVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInNjaGVtZS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25dPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25JY29uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbkljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb3VudHJ5Q29kZTNdPVwic2NoZW1lLmNvdW50cnlDb2RlM1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZElmIHwgZnVuY3Rpb25DYWxsZXIyOiBzZWFyY2hGb3JtVmFsdWUoKSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSlcIlxuICAgICAgICAgICAgICAgICAgICAgICNpbnB1dFRhZyAvPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dWYWxpZGF0aW9uTXNnKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8YXBwLXZhbGlkYXRpb24tbWVzc2FnZSBbaW5wdXRdPVwiaW5wdXRUYWdcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGNhc2UgKHNjaGVtZS50eXBlID09ICdhdXRvY29tcGxldGUnKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbEZpZWxkXT1cInNjaGVtZS5sYWJlbEZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXV0b1BpY2tWYWx1ZUZpZWxkXT1cInNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFR5cGVdPVwic2NoZW1lLmxhYmVsVHlwZSB8IHRvQW55XCJcbiAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc0Z1bmNdPVwic2NoZW1lLm9wdGlvbnNGdW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJzY2hlbWUuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwic2NoZW1lLnZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZElmIHwgZnVuY3Rpb25DYWxsZXIyOiBzZWFyY2hGb3JtVmFsdWUgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAjaW5wdXRUYWcgLz5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93VmFsaWRhdGlvbk1zZygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGFwcC12YWxpZGF0aW9uLW1lc3NhZ2UgW2lucHV0XT1cImlucHV0VGFnXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImd4LTIgcm93IGFsaWduLWl0ZW1zLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWlucHV0LWJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Zvcm1GaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInNjaGVtZS50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b1BpY2tWYWx1ZUZpZWxkXT1cInNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cInNjaGVtZS52YWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxUeXBlXT1cInNjaGVtZS5sYWJlbFR5cGUgfCB0b0FueVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRTaWduYWxdPVwic2NoZW1lLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbl09XCIhIXNjaGVtZS5hc3luY1ZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbkljb25dPVwiISFzY2hlbWUuYXN5bmNWYWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm9Gb3JtYXRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic2NoZW1lLm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWNpbWFsUG9pbnRzXT1cInNjaGVtZS5kZWNpbWFsUG9pbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heF09XCJzY2hlbWUubWF4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cInNjaGVtZS5taW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzY2hlbWUucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogc2VhcmNoRm9ybVZhbHVlIDogKHNjaGVtZS5maWVsZCB8IHRvQW55KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2NoZW1lLnN0YW5kYWxvbmUgJiYgc2NoZW1lLmFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9XCJzaG93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZm9ybUZpZWxkPy52YWxpZFNpZ25hbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1jbGljayk9XCJzY2hlbWUuYWN0aW9uKGFsbFNlYXJjaEZvcm1WYWx1ZSgpLCBmb3JtRmllbGQudmFsdWVTaWduYWwoKSwgc3RhbmRhbG9uZUZvcm0oKSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2NoZW1lLmFjdGlvbiAmJiAhc2NoZW1lLnN0YW5kYWxvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1idG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cInNjaGVtZS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uQnRuXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWNsaWNrKT1cInNjaGVtZS5hY3Rpb24oYWxsU2VhcmNoRm9ybVZhbHVlKCksIGZvcm1GaWVsZC52YWx1ZVNpZ25hbCgpLCBzZWFyY2hGb3JtKCkpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgQGlmIChzaG93VmFsaWRhdGlvbk1zZygpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtdmFsaWRhdGlvbi1tZXNzYWdlIFtpbnB1dF09XCJmb3JtRmllbGRcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGQtZmxleFwiPlxuICAgICAgICAgIEBpZiAoc2hvd0NsZWFyQnRuKCkpIHtcbiAgICAgICAgICAgIDxhcHAtYnRuIHR5cGU9XCJkYW5nZXItb3V0bGluZVwiIHRleHQ9XCJDbGVhclwiIGljb249XCJkZWxldGVcIiAobWNsaWNrKT1cImNsZWFyRmlsdGVycygpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xXCI+PC9zcGFuPlxuICAgICAgICAgIEBpZiAoc2hvd1NlYXJjaEJ0bigpKSB7XG4gICAgICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgICAgICBbZ3JvdXBdPVwiJ3NlYXJjaCdcIlxuICAgICAgICAgICAgICBbaWNvbkJ0bl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgdGV4dD1cIlNlYXJjaFwiXG4gICAgICAgICAgICAgIGFjdGlvblR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICBbZXhjbHVkZUxvZ2dpbmddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VhcmNoRnVuY3Rpb24oKSAmJiAhaXNUYWJsZVBhZ2luYXRlZCgpXCJcbiAgICAgICAgICAgICAgKG1jbGljayk9XCJzZWFyY2goKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoY3JlYXRlQnV0dG9uKCkpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoY3JlYXRlQnRuUm91dGUoKSkge1xuICAgICAgICAgICAgICA8YXBwLWJ0biB0eXBlPVwib3V0bGluZVwiIHRleHQ9XCJDcmVhdGVcIiBpY29uPVwiYWRkXCIgKG1jbGljayk9XCJjbGlja2VkQ3JlYXRlLmVtaXQoKVwiIHJvdXRlckxpbms9XCJ7eyBjcmVhdGVCdG5Sb3V0ZSgpIH19XCIgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8YXBwLWJ0biB0eXBlPVwib3V0bGluZVwiIHRleHQ9XCJDcmVhdGVcIiBpY29uPVwiYWRkXCIgKG1jbGljayk9XCJjbGlja2VkQ3JlYXRlLmVtaXQoKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgfVxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0YWJsZVBhbmVsXVwiPjwvbmctY29udGVudD5cblxuICBAaWYgKGRpc3BsYXllZENvbHVtbnMoKT8ubGVuZ3RoKSB7XG4gICAgPGRpdiBjbGFzcz1cIm10LTNcIiBbaGlkZGVuXT1cIiFzaG93RGF0YSgpIHx8ICghZGF0YSgpICYmICFpc1RhYmxlUGFnaW5hdGVkKCkpXCI+XG4gICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICBAaWYgKGlzVGFibGVQYWdpbmF0ZWQoKSkge1xuICAgICAgICAgIDx0YWJsZS1odHRwc1xuICAgICAgICAgICAgI3RhYmxlSFRUUFNcbiAgICAgICAgICAgIFtzZWFyY2hJZk5vUXVlcnldPVwic2VhcmNoSWZOb1F1ZXJ5KClcIlxuICAgICAgICAgICAgW2Rpc3BsYXllZENvbHVtbnNdPVwiZGlzcGxheWVkQ29sdW1ucygpXCJcbiAgICAgICAgICAgIFtvYnNlcnZhYmxlRnVuY109XCJzZWFyY2hPYnNlcnZhYmxlRnVuYygpXCJcbiAgICAgICAgICAgIChyb3dDbGljayk9XCJyb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2VkKT1cInNldFNlbGVjdGlvbigpXCJcbiAgICAgICAgICAgIFtjZW50ZXJDZWxsc109XCJjZW50ZXJDZWxscygpXCJcbiAgICAgICAgICAgIFtleHBhbmRlZFJvd1RlbXBsYXRlXT1cImV4cGFuZGVkUm93VGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbaXNFeHBhbmRhYmxlXT1cImlzRXhwYW5kYWJsZSgpXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbCgpXCJcbiAgICAgICAgICAgIFtub3dyYXBdPVwibm93cmFwKClcIlxuICAgICAgICAgICAgW29yZGVyRGlyZWN0aW9uXT1cIm9yZGVyRGlyZWN0aW9uKClcIlxuICAgICAgICAgICAgW29yZGVyRmllbGRdPVwib3JkZXJGaWVsZCgpXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZSgpXCJcbiAgICAgICAgICAgIFtyb3dPcHRpb25zXT1cIm9wdGlvbnMoKVwiXG4gICAgICAgICAgICBbc2hvd0FkZGl0aW9uYWxDb2x1bW5zXT1cInNob3dBZGRpdGlvbmFsQ29sdW1ucygpXCJcbiAgICAgICAgICAgIFtzaG93RXhwb3J0XT1cInNob3dFeHBvcnQoKVwiXG4gICAgICAgICAgICBbc2hvd1JlZnJlc2hCdG5dPVwic2hvd1JlZnJlc2hCdG4oKVwiXG4gICAgICAgICAgICBbc21hbGxlckZvbnRzXT1cInNtYWxsZXJGb250cygpXCJcbiAgICAgICAgICAgIFtzdGFydFNlY3Rpb25UZW1wbGF0ZV09XCJzdGFydFNlY3Rpb25UZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgIFt1c2VTZWxlY3Rpb25dPVwidXNlU2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgbm9JdGVtVHh0PVwiTm8gcmVzdWx0cyBmb3VuZFwiIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDx0YWJsZS1wbGFpblxuICAgICAgICAgICAgW2Rpc3RpbmN0XT1cInRydWVcIlxuICAgICAgICAgICAgW3Nob3dQYWdlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZSgpXCJcbiAgICAgICAgICAgIFtjZW50ZXJDZWxsc109XCJmYWxzZVwiXG4gICAgICAgICAgICBbc3RhcnRTZWN0aW9uVGVtcGxhdGVdPVwic3RhcnRTZWN0aW9uVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbc21hbGxlckZvbnRzXT1cInNtYWxsZXJGb250cygpXCJcbiAgICAgICAgICAgIFtub3dyYXBdPVwibm93cmFwKClcIlxuICAgICAgICAgICAgW3Nob3dGaWx0ZXJdPVwic2hvd0ZpbHRlcigpXCJcbiAgICAgICAgICAgIFtzaG93RXhwb3J0XT1cInNob3dFeHBvcnQoKVwiXG4gICAgICAgICAgICBbaXNFeHBhbmRhYmxlXT1cImlzRXhwYW5kYWJsZSgpXCJcbiAgICAgICAgICAgIFtleHBhbmRlZFJvd1RlbXBsYXRlXT1cImV4cGFuZGVkUm93VGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwibGFiZWwoKVwiXG4gICAgICAgICAgICBub0l0ZW1UeHQ9XCJObyByZXN1bHRzIGZvdW5kXCJcbiAgICAgICAgICAgIChyb3dDbGljayk9XCJyb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIFtvcmRlckZpZWxkXT1cIm9yZGVyRmllbGQoKVwiXG4gICAgICAgICAgICBbcm93T3B0aW9uc109XCJvcHRpb25zKClcIlxuICAgICAgICAgICAgW3Nob3dBZGRpdGlvbmFsQ29sdW1uc109XCJzaG93QWRkaXRpb25hbENvbHVtbnMoKVwiXG4gICAgICAgICAgICBbb3JkZXJEaXJlY3Rpb25dPVwib3JkZXJEaXJlY3Rpb24oKVwiXG4gICAgICAgICAgICBbZGlzcGxheWVkQ29sdW1uc109XCJkaXNwbGF5ZWRDb2x1bW5zKClcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZWQpPVwic2V0U2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgW2RhdGFdPVwiZGF0YSgpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIH1cbjwvbG9hZGVyPlxuIl19
360
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9SZXVzYWJsZXMvcmV1c2FibGUtY29tcHMvZmluZC1pdGVtL2ZpbmQtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvUmV1c2FibGVzL3JldXNhYmxlLWNvbXBzL2ZpbmQtaXRlbS9maW5kLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBRVQsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsV0FBVyxFQUNYLFNBQVMsRUFDVCxXQUFXLEVBQ1gsbUJBQW1CLEdBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUdMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsWUFBWSxFQUVaLE1BQU0sRUFDTixhQUFhLEVBQ2IsR0FBRyxFQUNILEdBQUcsRUFDSCxLQUFLLEdBQ04sTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpRkFBaUYsQ0FBQztBQUN0SCxPQUFPLEVBRUwsbUJBQW1CLEdBQ3BCLE1BQU0sOERBQThELENBQUM7QUFRdEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFN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LHFCQUFxQjt3QkFDckIsVUFBVTt3QkFDVixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsU0FBUzt3QkFDVCxtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsU0FBUztxQkFDVjs4QkEyRG1CLFNBQVM7c0JBQTVCLE1BQU07dUJBQUMsVUFBVTtnQkFDUixhQUFhO3NCQUF0QixNQUFNO2dCQUN5QixhQUFhO3NCQUE1QyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDRSxhQUFhO3NCQUE1QyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFZTCxXQUFXO3NCQUFuQyxLQUFLO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIFRlbXBsYXRlUmVmLFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgaW5qZWN0LFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBGb3Jtc01vZHVsZSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBkZWJvdW5jZSxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBsYXN0VmFsdWVGcm9tLFxuICBtYXAsXG4gIHRhcCxcbiAgdGltZXIsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXNlckFjdGl2aXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL1JldXNhYmxlcy9yZXVzYWJsZS1wYWdlcy91c2VyLWFjdGl2aXR5L3VhLWV4dHJhcy91c2VyLWFjdGl2aXR5LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgSVRhYmxlU2VhcmNoUmVzcCxcbiAgVGFibGVIdHRwc0NvbXBvbmVudCxcbn0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvdGFibGUtaHR0cHMvdGFibGUtaHR0cHMuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIElPYmplY3RMaXRlcmFsLFxuICBJUm93T3B0aW9uLFxuICBJU3RyaWN0Rm9ybUdyb3VwLFxuICBTb3J0VHlwZSxcbiAgVGFibGVDb2wsXG59IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9tb2RlbHMvaW5kZXgubW9kZWwnO1xuaW1wb3J0IHsgRVVBIH0gZnJvbSAnLi4vLi4vcmV1c2FibGUtcGFnZXMvdXNlci1hY3Rpdml0eS91YS1leHRyYXMvdXNlci1hY3Rpdml0eS5tb2RlbCc7XG5pbXBvcnQgeyBGdW5jdGlvbkNhbGxlcjIsIFRvQW55UGlwZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9waXBlcy91dGlsaXR5LnBpcGUnO1xuaW1wb3J0IHsgVGFibGVQbGFpbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlLXBsYWluL3RhYmxlLXBsYWluLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdG5Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvY29tcG9uZW50cy9idG4vYnRuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dEJhc2ljQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvaW5wdXQtYmFzaWMuY29tcG9uZW50JztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50JztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvdmFsaWRhdGlvbi1tZXNzYWdlL3ZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGhvbmVOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvY29tcG9uZW50cy9waG9uZS1udW1iZXIvcGhvbmUtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciwgTmdTd2l0Y2gsIE5nU3dpdGNoQ2FzZSwgTmdTd2l0Y2hEZWZhdWx0LCBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvbG9hZGVyL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvaW5kZXguY29uZmlnJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUZvcm1HZW5lcmF0b3IsXG4gIElCYXNlRm9ybVNjaGVtYSxcbn0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IuYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1maW5kLWl0ZW0sZmluZC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbmQtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbmQtaXRlbS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTG9hZGVyQ29tcG9uZW50LFxuICAgIE5nSWYsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTmdGb3IsXG4gICAgTmdTd2l0Y2gsXG4gICAgTmdTd2l0Y2hDYXNlLFxuICAgIFBob25lTnVtYmVyQ29tcG9uZW50LFxuICAgIFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50LFxuICAgIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBSb3V0ZXJMaW5rLFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBJbnB1dEJhc2ljQ29tcG9uZW50LFxuICAgIEJ0bkNvbXBvbmVudCxcbiAgICBUYWJsZUh0dHBzQ29tcG9uZW50LFxuICAgIFRhYmxlUGxhaW5Db21wb25lbnQsXG4gICAgQXN5bmNQaXBlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRnVuY3Rpb25DYWxsZXIyLFxuICAgIFRvQW55UGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmluZEl0ZW1Db21wb25lbnQ8XG4gICAgVFF1ZXJ5IGV4dGVuZHMgSU9iamVjdExpdGVyYWwgPSBhbnksXG4gICAgVFJvdyBleHRlbmRzIElPYmplY3RMaXRlcmFsID0gYW55LFxuICA+XG4gIGV4dGVuZHMgQmFzZUZvcm1HZW5lcmF0b3I8VFF1ZXJ5LCBJU2VhcmNoRm9ybVNjaGVtYTxUUXVlcnksIFRSb3c+PlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICAvKipcbiAgICogV2hldGhlciB0byBzb3J0IHNjaGVtYVxuICAgKi9cbiAgYXV0b0Zvcm1hdFNjaGVtYSA9IGlucHV0KHRydWUpO1xuICBhdXRvT3JkZXIgPSBpbnB1dCh0cnVlKTtcbiAgY2VudGVyQ2VsbHMgPSBpbnB1dDxib29sZWFuPigpO1xuICBkaXNwbGF5ZWRDb2x1bW5zID0gaW5wdXQ8VGFibGVDb2xbXT4oKTtcbiAgLyoqXG4gICAqIFJvdyBncmlkIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGdyaWRDbGFzcyA9IGlucHV0KCdjb2wtbWQtNCBjb2wteHhsLTMnKTtcbiAgaGlkZUZvcm0gPSBpbnB1dChmYWxzZSk7XG4gIGV4cGFuZGVkUm93VGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xuICBpc1RhYmxlUGFnaW5hdGVkID0gaW5wdXQoZmFsc2UpO1xuICBpc0V4cGFuZGFibGUgPSBpbnB1dChmYWxzZSk7XG4gIGxhYmVsID0gaW5wdXQ8c3RyaW5nPigpO1xuICBub3dyYXAgPSBpbnB1dChmYWxzZSk7XG4gIG9wdGlvbnMgPSBpbnB1dDxJUm93T3B0aW9uPFRSb3c+W10+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3Jvd09wdGlvbnMnIH0pO1xuICBvcmRlckRpcmVjdGlvbiA9IGlucHV0PFNvcnRUeXBlPignYXNjJyk7XG4gIG9yZGVyRmllbGQgPSBpbnB1dDxrZXlvZiBUUm93PigpO1xuICBwYWdlU2l6ZSA9IGlucHV0KDEwKTtcbiAgc2VhcmNoRnVuY3Rpb24gPSBpbnB1dDwoZGF0YTogYW55KSA9PiBPYnNlcnZhYmxlPFRSb3dbXSB8IHsgY29udGVudDogVFJvd1tdIH0+PigpO1xuICBzaG93RGF0YSA9IGlucHV0KHRydWUpO1xuICBzZWFyY2hJZk5vUXVlcnkgPSBpbnB1dCh0cnVlKTtcbiAgc2hvd0V4cG9ydCA9IGlucHV0KHRydWUpO1xuICBzaG93RmlsdGVyID0gaW5wdXQoZmFsc2UpO1xuICBzaG93UmVmcmVzaEJ0biA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHN0YXJ0U2VjdGlvblRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+PigpO1xuICBmb3JtOiBGb3JtR3JvdXA7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgdGhlIHNlYXJjaCBidXR0b24gc2hvdWxkIGJlIHNob3duXG4gICAqL1xuICBzaG93U2VhcmNoQnRuID0gaW5wdXQodHJ1ZSk7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgdGhlIGNsZWFyIGZvcm0gYnV0dG9uIHNob3VsZCBiZSBzaG93blxuICAgKi9cbiAgc2hvd0NsZWFyQnRuID0gaW5wdXQodHJ1ZSk7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgdmFsaWRhdGlvbiBtZXNzYWdlcyBzaG91bGQgYmUgc2hvd25cbiAgICovXG4gIHNob3dWYWxpZGF0aW9uTXNnID0gaW5wdXQodHJ1ZSk7XG4gIGNyZWF0ZUJ0blJvdXRlID0gaW5wdXQoJy4uL2NyZWF0ZScpO1xuICAvKipcbiAgICogVXNlZCB0byBzcGVjaWZ5IGlmIHNob3cgYWRkaXRpb25hbCBjb2x1bW4gYnV0dG9uIHdpaWwgYmUgZGlzcGxheWVkIG9yIG5vdC5cbiAgICovXG4gIHNob3dBZGRpdGlvbmFsQ29sdW1ucyA9IGlucHV0KHRydWUpO1xuICBzbWFsbGVyRm9udHMgPSBpbnB1dChmYWxzZSk7XG4gIC8qKiBVc2UgY2hlY2tib3hlcyAqL1xuICB1c2VTZWxlY3Rpb24gPSBpbnB1dChmYWxzZSk7XG5cbiAgQE91dHB1dCgncm93Q2xpY2snKSBfcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNsaWNrZWRDcmVhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBWaWV3Q2hpbGQoVGFibGVIdHRwc0NvbXBvbmVudCkgdGFibGVIVFRQU1JFRjogVGFibGVIdHRwc0NvbXBvbmVudDxUUm93PjtcbiAgQFZpZXdDaGlsZChUYWJsZVBsYWluQ29tcG9uZW50KSB0YWJsZVBsYWluUmVmOiBUYWJsZVBsYWluQ29tcG9uZW50PFRSb3c+O1xuICB0YWJsZUhUVFBTUkVGU2lnbmFsID0gdmlld0NoaWxkPFRhYmxlSHR0cHNDb21wb25lbnQ8VFJvdz4+KFRhYmxlSHR0cHNDb21wb25lbnQpO1xuICB0YWJsZVBsYWluUmVmU2lnbmFsID0gdmlld0NoaWxkPFRhYmxlUGxhaW5Db21wb25lbnQ8VFJvdz4+KFRhYmxlUGxhaW5Db21wb25lbnQpO1xuICBkYXRhID0gc2lnbmFsPFRSb3dbXT4oW10pO1xuICBsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgc2VhcmNoRm9ybSA9IHNpZ25hbDxGb3JtR3JvdXAgfCB1bmRlZmluZWQ+KG5ldyBGb3JtR3JvdXAoe30pKTtcbiAgc3RhbmRhbG9uZUZvcm0gPSBzaWduYWw8Rm9ybUdyb3VwIHwgdW5kZWZpbmVkPihuZXcgRm9ybUdyb3VwKHt9KSk7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgc2hvdyBjcmVhdGUgYnV0dG9uIGlzIG5lZWRlZC5cbiAgICovXG4gIGNyZWF0ZUJ1dHRvbiA9IGlucHV0KGZhbHNlKTtcblxuICBASW5wdXQoJ2Zvcm1TY2hlbWEnKSBzZXQgX2Zvcm1TY2hlbWEodjogSVNlYXJjaEZvcm1TY2hlbWE8VFF1ZXJ5LCBUUm93PltdKSB7XG4gICAgdGhpcy5pbml0KGNsb25lRGVlcCh2Py5maWx0ZXIoKHgpID0+IHgpKSk7XG4gIH1cblxuICBzZWFyY2hPYnNlcnZhYmxlRnVuYyA9IGlucHV0PChkYXRhOiBhbnkpID0+IE9ic2VydmFibGU8SVRhYmxlU2VhcmNoUmVzcDxUUm93Pj4+KCk7XG4gIHJlYWRvbmx5IGRlbGltaXRlckZpZWxkID0gJ35+fic7XG4gIHJlYWRvbmx5IGRlbGltaXRlcldvcmQgPSAnfn4nO1xuICBwcm90ZWN0ZWQgc2VhcmNoVHJpZ2dlciA9IG5ldyBTdWJqZWN0PElPYmplY3RMaXRlcmFsPigpO1xuXG4gIGNvbXB1dGVkRm9ybVNjaGVtYSA9IGNvbXB1dGVkPElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz5bXT4oXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZm9ybVNjaGVtYSA9IHRoaXMuZm9ybVNjaGVtYSgpIHx8IFtdLFxuICAgICAgICBzdGFuZGFsb25lRm9ybSA9IHRoaXMuc3RhbmRhbG9uZUZvcm0oKSxcbiAgICAgICAgc2VhcmNoRm9ybSA9IHRoaXMuc2VhcmNoRm9ybSgpO1xuXG4gICAgICByZXR1cm4gZm9ybVNjaGVtYVxuICAgICAgICAuZmlsdGVyKCh4KSA9PiAheC5oaWRkZW4pXG4gICAgICAgIC5tYXAoKHNjaGVtZSkgPT4ge1xuICAgICAgICAgIHNjaGVtZS5mb3JtID0gc2NoZW1lLnN0YW5kYWxvbmUgPyBzdGFuZGFsb25lRm9ybSA6IHNlYXJjaEZvcm07XG4gICAgICAgICAgcmV0dXJuIHNjaGVtZTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICB7IGVxdWFsOiBpc0VxdWFsIH0sXG4gICk7XG5cbiAgcHVibGljIHVhUyA9IGluamVjdChVc2VyQWN0aXZpdHlTZXJ2aWNlKTtcbiAgcHVibGljIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwdWJsaWMgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzdWJzMiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuY3JlYXRlU3Vic2NyaXB0aW9uTWFuYWdlcigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vICB0aGlzLmZldGNoU2F2ZWRRdWVyeSgpXG4gICAgbGV0IHNlYXJjaERlYm91bmNlVGltZSA9IDUwMCxcbiAgICAgIHNlYXJjaENvdW50ID0gMDtcbiAgICB0aGlzLnN1YnMyLnB1c2goXG4gICAgICB0aGlzLnNlYXJjaFRyaWdnZXJcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gdGFwKCgpID0+IHtcbiAgICAgICAgICAvLyAgIGRlYnVnZ2VyO1xuICAgICAgICAgIC8vIH0pLFxuICAgICAgICAgIGRlYm91bmNlKCgpID0+IHRpbWVyKHNlYXJjaERlYm91bmNlVGltZSkpLFxuICAgICAgICAgIHRhcCgocikgPT4gdGhpcy5fc2VhcmNoKCkpLFxuICAgICAgICAgIGZpbHRlcigoKSA9PiBzZWFyY2hEZWJvdW5jZVRpbWUgIT0gMCksXG4gICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIGlmICgrK3NlYXJjaENvdW50ID09IDEpIHNlYXJjaERlYm91bmNlVGltZSA9IDA7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25EZXN0cm95KCkge1xuICAgIHRoaXMuc3ViczI/LmNsZWFyKCk7XG4gICAgcmV0dXJuIHN1cGVyLm9uRGVzdHJveSgpO1xuICB9XG5cbiAgZmV0Y2hTYXZlZFF1ZXJ5KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcmV2UXVlcnlTdHJpbmcgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KCdxJyk7XG4gICAgICBpZiAocHJldlF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHByZXZRdWVyeTogeyBbZjogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgY29uc3QgZmllbGRzID0gcHJldlF1ZXJ5U3RyaW5nLnNwbGl0KHRoaXMuZGVsaW1pdGVyRmllbGQpO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IGYgPSBmaWVsZC5zcGxpdCh0aGlzLmRlbGltaXRlcldvcmQpO1xuICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgICAgIGlmIChmWzFdID09IG51bGwgfHwgZlsxXSA9PSAnbnVsbCcpIGNvbnRpbnVlO1xuICAgICAgICAgIHByZXZRdWVyeVtmWzBdXSA9IGZbMV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtKCk/LnBhdGNoVmFsdWUocHJldlF1ZXJ5KTtcbiAgICAgICAgaWYgKE9iamVjdC52YWx1ZXMocHJldlF1ZXJ5KS5zb21lKCh4KSA9PiB4ICE9IG51bGwpKSB0aGlzLnNlYXJjaCgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBpbml0KHNjaGVtYTogSVNlYXJjaEZvcm1TY2hlbWE8VFF1ZXJ5LCBUUm93PltdKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3koKTtcbiAgICBpZiAoIXNjaGVtYT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhzY2hlbWEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICB0aGlzLmhhbmRsZUFsbFNjaGVtYShzY2hlbWEpO1xuICAgIGZvciAoY29uc3Qgc2NoZW1lIG9mIHRoaXMuZm9ybVNjaGVtYSgpKSB0aGlzLmhhbmRsZUZvcm1TY2hlbWUoc2NoZW1lKTtcbiAgICBmb3IgKGNvbnN0IHNjaGVtZSBvZiB0aGlzLmZvcm1TY2hlbWEoKSlcbiAgICAgIGlmIChzY2hlbWUudHJpZ2dlck9uQ2hhbmdlT25Jbml0KVxuICAgICAgICBzY2hlbWUub25DaGFuZ2VGdW5jKHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpLCB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKVtzY2hlbWUuZmllbGRdLCB0aGlzKTtcbiAgfVxuXG4gIGhhbmRsZUFsbFNjaGVtYShzY2hlbWE6IElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz5bXSkge1xuICAgIHNjaGVtYS5mb3JFYWNoKCh4KSA9PiAoeC50eXBlID0geC50eXBlIHx8ICd0ZXh0JykpO1xuICAgIGlmICh0aGlzLmF1dG9Gb3JtYXRTY2hlbWEoKSB8fCB0aGlzLmF1dG9PcmRlcigpKSB7XG4gICAgICBpZiAodGhpcy5hdXRvRm9ybWF0U2NoZW1hKCkpIHtcbiAgICAgICAgc2NoZW1hXG4gICAgICAgICAgLmZpbHRlcigoeCkgPT4geC50eXBlID09ICdzZWxlY3QnKVxuICAgICAgICAgIC5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICBpZiAoeC5vcHRpb25zPy5sZW5ndGggPiA1IHx8ICF4Lm9wdGlvbnMpIHgudHlwZSA9ICdhdXRvY29tcGxldGUnO1xuICAgICAgICAgIH0pO1xuICAgICAgICBzY2hlbWFcbiAgICAgICAgICAuZmlsdGVyKCh4KSA9PiB4LnR5cGUgPT0gJ2NoZWNrYm94JylcbiAgICAgICAgICAuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgeC50eXBlID0gJ3NlbGVjdCc7XG4gICAgICAgICAgICB4Lm9wdGlvbnMgPSBDb25maWcuYm9vbExpc3Q7XG4gICAgICAgICAgICB4LmxhYmVsRmllbGQgPSAndGl0bGUnO1xuICAgICAgICAgICAgeC52YWx1ZUZpZWxkID0gJ2NvZGUnO1xuICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhzY2hlbWEpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYXV0b09yZGVyKCkpIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hLnNvcnQyKCdsYWJlbCcsIHRydWUpO1xuICAgICAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhbXG4gICAgICAgICAgLi4uc2NoZW1hPy5maWx0ZXIoKHgpID0+IHguYWN0aW9uICYmIHgudHlwZSAhPSAnY2hlY2tib3gnKSxcbiAgICAgICAgICAuLi5zY2hlbWE/LmZpbHRlcigoeCkgPT4gIXguYWN0aW9uICYmIHgudHlwZSAhPSAnY2hlY2tib3gnKSxcbiAgICAgICAgICAuLi5zY2hlbWE/LmZpbHRlcigoeCkgPT4geC50eXBlID09ICdjaGVja2JveCcpLFxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgdGhpcy5fc2V0Rm9ybVNjaGVtYXMoc2NoZW1hKTtcblxuICAgIHNjaGVtYS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICBpZiAocy5zdGFuZGFsb25lKVxuICAgICAgICB0aGlzLnN0YW5kYWxvbmVGb3JtKCkucmVnaXN0ZXJDb250cm9sKFxuICAgICAgICAgIHMuZmllbGQudG9TdHJpbmcoKSxcbiAgICAgICAgICBuZXcgRm9ybUNvbnRyb2wobnVsbCwgcy52YWxpZGF0b3JzLCBzLmFzeW5jVmFsaWRhdG9ycyksXG4gICAgICAgICk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMuc2VhcmNoRm9ybSgpLnJlZ2lzdGVyQ29udHJvbChcbiAgICAgICAgICBzLmZpZWxkLnRvU3RyaW5nKCksXG4gICAgICAgICAgbmV3IEZvcm1Db250cm9sKHMudmFsdWUsIHMudmFsaWRhdG9ycywgcy5hc3luY1ZhbGlkYXRvcnMpLFxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlRm9ybVNjaGVtZShzY2hlbWU6IElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz4pIHtcbiAgICBzY2hlbWUuaWQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpO1xuICAgIHRoaXMudXBkYXRlRm9ybVNjaGVtYShzY2hlbWUuZmllbGQsIHNjaGVtZSk7XG5cbiAgICBpZiAoc2NoZW1lLm9wdGlvbnNJbml0RnVuYylcbiAgICAgIHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHNjaGVtZS5vcHRpb25zID0gcjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgICAgICAvLyB0aGlzLm9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkXSA9IHI7XG4gICAgICB9KTtcblxuICAgIGlmIChzY2hlbWUub3B0aW9uc0luaXRGdW5jMilcbiAgICAgIHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMyKCkuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHNjaGVtZS5vcHRpb25zID0gcjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgICAgICAvLyB0aGlzLm9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkXSA9IHI7XG4gICAgICB9KTtcblxuICAgIGlmIChzY2hlbWUub25DaGFuZ2VGdW5jKSB7XG4gICAgICBjb25zdCBzdWIgPSB0aGlzLnNlYXJjaEZvcm0oKVxuICAgICAgICA/LmNvbnRyb2xzW3NjaGVtZS5maWVsZD8udG9TdHJpbmcoKV0/LnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgwKSlcbiAgICAgICAgLnN1YnNjcmliZSgocikgPT4gc2NoZW1lLm9uQ2hhbmdlRnVuYyh0aGlzLnNlYXJjaEZvcm0oKT8uZ2V0UmF3VmFsdWUoKSwgciwgdGhpcykpO1xuICAgICAgdGhpcy5zdWJzW3NjaGVtZS5maWVsZCBhcyBzdHJpbmddID0gc3ViO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZvcm1TY2hlbWEoXG4gICAgZmllbGROYW1lOiBrZXlvZiBUUXVlcnksXG4gICAgc2NoZW1lOiBQYXJ0aWFsPElTZWFyY2hGb3JtU2NoZW1hPHsgW2sgaW4ga2V5b2YgVFF1ZXJ5XTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PiB8IGFueSB9Pj4sXG4gICkge1xuICAgIHJldHVybiBzdXBlci5fdXBkYXRlRm9ybVNjaGVtYShmaWVsZE5hbWUgYXMgc3RyaW5nLCBzY2hlbWUpO1xuICB9XG5cbiAgdXBkYXRlQWxsRm9ybVNjaGVtYShcbiAgICBtYXA6IChmb3JtRmllbGQ6IElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz4pID0+IElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz4sXG4gICkge1xuICAgIHJldHVybiBzdXBlci5fdXBkYXRlQWxsRm9ybVNjaGVtYShtYXApO1xuICB9XG5cbiAgZGV0YWNoRm9ybVNjaGVtZShmaWVsZE5hbWU/OiBrZXlvZiBUUXVlcnkpIHtcbiAgICB0aGlzLnN1YnNbZmllbGROYW1lIGFzIHN0cmluZ10/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzZWFyY2hGb3JtVmFsdWUgPSB0b1NpZ25hbChcbiAgICB0aGlzLnNlYXJjaEZvcm0oKS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIG1hcCgoKSA9PiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmRlbGV0ZU51bGwodGhpcy5zZWFyY2hGb3JtKCk/LmdldFJhd1ZhbHVlKCkpKSxcbiAgICApLFxuICApO1xuICBzdGFuZGFsb25lRm9ybVZhbHVlID0gdG9TaWduYWwodGhpcy5zdGFuZGFsb25lRm9ybSgpLnZhbHVlQ2hhbmdlcyk7XG4gIGFsbFNlYXJjaEZvcm1WYWx1ZSA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgLi4udGhpcy5zZWFyY2hGb3JtVmFsdWUoKSxcbiAgICAuLi50aGlzLnN0YW5kYWxvbmVGb3JtVmFsdWUoKSxcbiAgfSkpO1xuXG4gIHRyYWNrQnlSb3dJRCA9IChpbmRleCwgaXRlbSkgPT4ge1xuICAgIHJldHVybiBpdGVtPy52YWx1ZT8uX19yb3dJRDtcbiAgfTtcblxuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy5zZWFyY2hGb3JtKCk/LnJlc2V0KCk7XG4gICAgdGhpcy5zZWFyY2goKTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5zZWFyY2goKTtcbiAgfVxuXG4gIHNlYXJjaCgpIHtcbiAgICB0aGlzLnNlYXJjaFRyaWdnZXIubmV4dCh0aGlzLnNlYXJjaEZvcm0oKS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBfc2VhcmNoKCkge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmICghdGhpcy5zZWFyY2hGb3JtKSByZXR1cm47XG4gICAgY29uc3QgcmVxID0gdGhpcy51dGlsaXR5U2VydmljZS5kZWxldGVOdWxsKGNsb25lRGVlcCh0aGlzLnNlYXJjaEZvcm0oKT8uZ2V0UmF3VmFsdWUoKSkpO1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmICh0aGlzLmlzVGFibGVQYWdpbmF0ZWQoKSkge1xuICAgICAgaWYgKCF0aGlzLmRhdGEoKSkgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuZGF0YS5zZXQoW10pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGFibGVIVFRQU1JFRj8uc2VhcmNoKHJlcSk7XG4gICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaEZ1bmN0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgbGFzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLnNlYXJjaEZ1bmN0aW9uKCkoe1xuICAgICAgICAgICAgLi4ucmVxLFxuICAgICAgICAgICAgc29ydEJ5OiB0aGlzLm9yZGVyRmllbGQoKSB8fCAnY3JlYXRlZE9uJyxcbiAgICAgICAgICAgIHNvcnREaXJlY3Rpb246IHRoaXMub3JkZXJEaXJlY3Rpb24oKT8udG9VcHBlckNhc2UoKSB8fCAnREVTQycsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZGF0YS5zZXQoZGF0YT8uWydjb250ZW50J10gfHwgZGF0YSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihFcnJvcik7XG4gICAgICB9XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudWFTLmFkZCh7XG4gICAgICAgIGNvZGU6IEVVQS5zZWFyY2hlZCxcbiAgICAgICAgYWN0aXZpdHlEZXNjcmlwdGlvbjogdGhpcy5sYWJlbCgpICsgJyAnICsgSlNPTi5zdHJpbmdpZnkocmVxKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gIH1cblxuICBzYXZlUXVlcnkocXVlcnkgPSB0aGlzLnNlYXJjaEZvcm1WYWx1ZSgpKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgIHE6IE9iamVjdC5rZXlzKHF1ZXJ5KVxuICAgICAgICAgIC5maWx0ZXIoKHgpID0+IHF1ZXJ5W3hdICE9IG51bGwpXG4gICAgICAgICAgLm1hcCgoaykgPT4gYCR7a30ke3RoaXMuZGVsaW1pdGVyV29yZH0ke3F1ZXJ5W2tdfWApXG4gICAgICAgICAgLmpvaW4odGhpcy5kZWxpbWl0ZXJGaWVsZCksXG4gICAgICB9LFxuICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgIH0pO1xuICB9XG4gIHJvd0NsaWNrKGUpIHtcbiAgICB0aGlzLl9yb3dDbGljay5lbWl0KGUpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUhUVFBTUkVGPy5zZWxlY3RlZEl0ZW1zIHx8IHRoaXMudGFibGVQbGFpblJlZj8uc2VsZWN0ZWRJdGVtcztcbiAgfVxuICBzZWxlY3Rpb25TaWduYWwgPSBzaWduYWw8VFJvd1tdPihbXSk7XG5cbiAgaXNBbnlTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0aCA9IHRoaXMudGFibGVIVFRQU1JFRlNpZ25hbCgpPy5pc0FueVNlbGVjdGVkKCksXG4gICAgICB0cCA9IHRoaXMudGFibGVQbGFpblJlZlNpZ25hbCgpPy5pc0FueVNlbGVjdGVkKCk7XG4gICAgcmV0dXJuIHRoIHx8IHRwO1xuICB9KTtcbiAgcHJvdGVjdGVkIHNldFNlbGVjdGlvbigpIHtcbiAgICB0aGlzLnNlbGVjdGlvblNpZ25hbC5zZXQoXG4gICAgICB0aGlzLnRhYmxlSFRUUFNSRUY/LnNlbGVjdGVkSXRlbXNTaWduYWwoKSB8fCB0aGlzLnRhYmxlUGxhaW5SZWY/LnNlbGVjdGVkSXRlbXNTaWduYWwoKSxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlYXJjaEZvcm1TY2hlbWE8XG4gIFRRdWVyeSBleHRlbmRzIElPYmplY3RMaXRlcmFsID0gYW55LFxuICBUUm93IGV4dGVuZHMgSU9iamVjdExpdGVyYWwgPSBhbnksXG4+IGV4dGVuZHMgSUJhc2VGb3JtU2NoZW1hPFxuICAgIFRRdWVyeSxcbiAgICBGaW5kSXRlbUNvbXBvbmVudDxUUXVlcnksIFRSb3c+LFxuICAgIHtcbiAgICAgIFtLIGluIGtleW9mIFRRdWVyeV06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gICAgfVxuICA+IHtcbiAgc3RhbmRhbG9uZT86IGJvb2xlYW47XG4gIGFjdGlvbj86IChyb3c6IFRSb3csIGNlbGw6IGFueSwgZm9ybT86IEZvcm1Hcm91cDxJU3RyaWN0Rm9ybUdyb3VwPFRRdWVyeT4+KSA9PiBhbnk7XG59XG4iLCI8bG9hZGVyIFtsb2FkaW5nXT1cImxvYWRpbmcoKVwiPlxuICBAaWYgKCFoaWRlRm9ybSgpICYmIHNlYXJjaEZvcm0oKSkge1xuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic2VhcmNoRm9ybSgpXCIgKG5nU3VibWl0KT1cInNlYXJjaCgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICBAZm9yIChzY2hlbWUgb2YgY29tcHV0ZWRGb3JtU2NoZW1hKCk7IHRyYWNrIHNjaGVtZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ7eyBncmlkQ2xhc3MoKSB9fSBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtZW5kXCI+XG4gICAgICAgICAgICAgIEBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgICAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ3RlbCcpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1waG9uZS1udW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJzY2hlbWUuZm9ybVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInNjaGVtZS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25dPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25JY29uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbkljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb3VudHJ5Q29kZTNdPVwic2NoZW1lLmNvdW50cnlDb2RlM1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZElmIHwgZnVuY3Rpb25DYWxsZXIyOiBzZWFyY2hGb3JtVmFsdWUoKSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSlcIlxuICAgICAgICAgICAgICAgICAgICAgICNpbnB1dFRhZyAvPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dWYWxpZGF0aW9uTXNnKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8YXBwLXZhbGlkYXRpb24tbWVzc2FnZSBbaW5wdXRdPVwiaW5wdXRUYWdcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGNhc2UgKHNjaGVtZS50eXBlID09ICdhdXRvY29tcGxldGUnKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbEZpZWxkXT1cInNjaGVtZS5sYWJlbEZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXV0b1BpY2tWYWx1ZUZpZWxkXT1cInNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFR5cGVdPVwic2NoZW1lLmxhYmVsVHlwZSB8IHRvQW55XCJcbiAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc0Z1bmNdPVwic2NoZW1lLm9wdGlvbnNGdW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJzY2hlbWUuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwic2NoZW1lLnZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZElmIHwgZnVuY3Rpb25DYWxsZXIyOiBzZWFyY2hGb3JtVmFsdWUgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAjaW5wdXRUYWcgLz5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93VmFsaWRhdGlvbk1zZygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGFwcC12YWxpZGF0aW9uLW1lc3NhZ2UgW2lucHV0XT1cImlucHV0VGFnXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImd4LTIgcm93IGFsaWduLWl0ZW1zLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWlucHV0LWJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Zvcm1GaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInNjaGVtZS50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b1BpY2tWYWx1ZUZpZWxkXT1cInNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cInNjaGVtZS52YWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxUeXBlXT1cInNjaGVtZS5sYWJlbFR5cGUgfCB0b0FueVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRTaWduYWxdPVwic2NoZW1lLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbl09XCIhIXNjaGVtZS5hc3luY1ZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbkljb25dPVwiISFzY2hlbWUuYXN5bmNWYWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm9Gb3JtYXRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic2NoZW1lLm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWNpbWFsUG9pbnRzXT1cInNjaGVtZS5kZWNpbWFsUG9pbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heF09XCJzY2hlbWUubWF4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cInNjaGVtZS5taW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzY2hlbWUucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogc2VhcmNoRm9ybVZhbHVlIDogKHNjaGVtZS5maWVsZCB8IHRvQW55KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2NoZW1lLnN0YW5kYWxvbmUgJiYgc2NoZW1lLmFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9XCJzaG93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZm9ybUZpZWxkPy52YWxpZFNpZ25hbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1jbGljayk9XCJzY2hlbWUuYWN0aW9uKGFsbFNlYXJjaEZvcm1WYWx1ZSgpLCBmb3JtRmllbGQudmFsdWVTaWduYWwoKSwgc3RhbmRhbG9uZUZvcm0oKSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2NoZW1lLmFjdGlvbiAmJiAhc2NoZW1lLnN0YW5kYWxvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1idG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cInNjaGVtZS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uQnRuXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWNsaWNrKT1cInNjaGVtZS5hY3Rpb24oYWxsU2VhcmNoRm9ybVZhbHVlKCksIGZvcm1GaWVsZC52YWx1ZVNpZ25hbCgpLCBzZWFyY2hGb3JtKCkpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgQGlmIChzaG93VmFsaWRhdGlvbk1zZygpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtdmFsaWRhdGlvbi1tZXNzYWdlIFtpbnB1dF09XCJmb3JtRmllbGRcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGQtZmxleFwiPlxuICAgICAgICAgIEBpZiAoc2hvd0NsZWFyQnRuKCkpIHtcbiAgICAgICAgICAgIDxhcHAtYnRuIHR5cGU9XCJkYW5nZXItb3V0bGluZVwiIHRleHQ9XCJDbGVhclwiIGljb249XCJkZWxldGVcIiAobWNsaWNrKT1cImNsZWFyRmlsdGVycygpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xXCI+PC9zcGFuPlxuICAgICAgICAgIEBpZiAoc2hvd1NlYXJjaEJ0bigpKSB7XG4gICAgICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgICAgICBbZ3JvdXBdPVwiJ3NlYXJjaCdcIlxuICAgICAgICAgICAgICBbaWNvbkJ0bl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgdGV4dD1cIlNlYXJjaFwiXG4gICAgICAgICAgICAgIGFjdGlvblR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICBbZXhjbHVkZUxvZ2dpbmddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VhcmNoRnVuY3Rpb24oKSAmJiAhaXNUYWJsZVBhZ2luYXRlZCgpXCJcbiAgICAgICAgICAgICAgKG1jbGljayk9XCJzZWFyY2goKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoY3JlYXRlQnV0dG9uKCkpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoY3JlYXRlQnRuUm91dGUoKSkge1xuICAgICAgICAgICAgICA8YXBwLWJ0biB0eXBlPVwib3V0bGluZVwiIHRleHQ9XCJDcmVhdGVcIiBpY29uPVwiYWRkXCIgKG1jbGljayk9XCJjbGlja2VkQ3JlYXRlLmVtaXQoKVwiIHJvdXRlckxpbms9XCJ7eyBjcmVhdGVCdG5Sb3V0ZSgpIH19XCIgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8YXBwLWJ0biB0eXBlPVwib3V0bGluZVwiIHRleHQ9XCJDcmVhdGVcIiBpY29uPVwiYWRkXCIgKG1jbGljayk9XCJjbGlja2VkQ3JlYXRlLmVtaXQoKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgfVxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0YWJsZVBhbmVsXVwiPjwvbmctY29udGVudD5cblxuICBAaWYgKGRpc3BsYXllZENvbHVtbnMoKT8ubGVuZ3RoKSB7XG4gICAgPGRpdiBjbGFzcz1cIm10LTNcIiBbaGlkZGVuXT1cIiFzaG93RGF0YSgpIHx8ICghZGF0YSgpICYmICFpc1RhYmxlUGFnaW5hdGVkKCkpXCI+XG4gICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICBAaWYgKGlzVGFibGVQYWdpbmF0ZWQoKSkge1xuICAgICAgICAgIDx0YWJsZS1odHRwc1xuICAgICAgICAgICAgI3RhYmxlSFRUUFNcbiAgICAgICAgICAgIFtzZWFyY2hJZk5vUXVlcnldPVwic2VhcmNoSWZOb1F1ZXJ5KClcIlxuICAgICAgICAgICAgW2Rpc3BsYXllZENvbHVtbnNdPVwiZGlzcGxheWVkQ29sdW1ucygpXCJcbiAgICAgICAgICAgIFtvYnNlcnZhYmxlRnVuY109XCJzZWFyY2hPYnNlcnZhYmxlRnVuYygpXCJcbiAgICAgICAgICAgIChyb3dDbGljayk9XCJyb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2VkKT1cInNldFNlbGVjdGlvbigpXCJcbiAgICAgICAgICAgIFtjZW50ZXJDZWxsc109XCJjZW50ZXJDZWxscygpXCJcbiAgICAgICAgICAgIFtleHBhbmRlZFJvd1RlbXBsYXRlXT1cImV4cGFuZGVkUm93VGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbaXNFeHBhbmRhYmxlXT1cImlzRXhwYW5kYWJsZSgpXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbCgpXCJcbiAgICAgICAgICAgIFtub3dyYXBdPVwibm93cmFwKClcIlxuICAgICAgICAgICAgW29yZGVyRGlyZWN0aW9uXT1cIm9yZGVyRGlyZWN0aW9uKClcIlxuICAgICAgICAgICAgW29yZGVyRmllbGRdPVwib3JkZXJGaWVsZCgpXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZSgpXCJcbiAgICAgICAgICAgIFtyb3dPcHRpb25zXT1cIm9wdGlvbnMoKVwiXG4gICAgICAgICAgICBbc2hvd0FkZGl0aW9uYWxDb2x1bW5zXT1cInNob3dBZGRpdGlvbmFsQ29sdW1ucygpXCJcbiAgICAgICAgICAgIFtzaG93RXhwb3J0XT1cInNob3dFeHBvcnQoKVwiXG4gICAgICAgICAgICBbc2hvd1JlZnJlc2hCdG5dPVwic2hvd1JlZnJlc2hCdG4oKVwiXG4gICAgICAgICAgICBbc21hbGxlckZvbnRzXT1cInNtYWxsZXJGb250cygpXCJcbiAgICAgICAgICAgIFtzdGFydFNlY3Rpb25UZW1wbGF0ZV09XCJzdGFydFNlY3Rpb25UZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgIFt1c2VTZWxlY3Rpb25dPVwidXNlU2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgbm9JdGVtVHh0PVwiTm8gcmVzdWx0cyBmb3VuZFwiIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDx0YWJsZS1wbGFpblxuICAgICAgICAgICAgW2Rpc3RpbmN0XT1cInRydWVcIlxuICAgICAgICAgICAgW3Nob3dQYWdlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZSgpXCJcbiAgICAgICAgICAgIFtjZW50ZXJDZWxsc109XCJmYWxzZVwiXG4gICAgICAgICAgICBbc3RhcnRTZWN0aW9uVGVtcGxhdGVdPVwic3RhcnRTZWN0aW9uVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbc21hbGxlckZvbnRzXT1cInNtYWxsZXJGb250cygpXCJcbiAgICAgICAgICAgIFtub3dyYXBdPVwibm93cmFwKClcIlxuICAgICAgICAgICAgW3Nob3dGaWx0ZXJdPVwic2hvd0ZpbHRlcigpXCJcbiAgICAgICAgICAgIFtzaG93RXhwb3J0XT1cInNob3dFeHBvcnQoKVwiXG4gICAgICAgICAgICBbaXNFeHBhbmRhYmxlXT1cImlzRXhwYW5kYWJsZSgpXCJcbiAgICAgICAgICAgIFtleHBhbmRlZFJvd1RlbXBsYXRlXT1cImV4cGFuZGVkUm93VGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwibGFiZWwoKVwiXG4gICAgICAgICAgICBub0l0ZW1UeHQ9XCJObyByZXN1bHRzIGZvdW5kXCJcbiAgICAgICAgICAgIChyb3dDbGljayk9XCJyb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIFtvcmRlckZpZWxkXT1cIm9yZGVyRmllbGQoKVwiXG4gICAgICAgICAgICBbcm93T3B0aW9uc109XCJvcHRpb25zKClcIlxuICAgICAgICAgICAgW3Nob3dBZGRpdGlvbmFsQ29sdW1uc109XCJzaG93QWRkaXRpb25hbENvbHVtbnMoKVwiXG4gICAgICAgICAgICBbb3JkZXJEaXJlY3Rpb25dPVwib3JkZXJEaXJlY3Rpb24oKVwiXG4gICAgICAgICAgICBbZGlzcGxheWVkQ29sdW1uc109XCJkaXNwbGF5ZWRDb2x1bW5zKClcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZWQpPVwic2V0U2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgW2RhdGFdPVwiZGF0YSgpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIH1cbjwvbG9hZGVyPlxuIl19
@@ -93,7 +93,7 @@ export class AutocompleteTdRfComponent extends InputTD_RFComponent {
93
93
  // }, 600);
94
94
  }
95
95
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: AutocompleteTdRfComponent, deps: [{ token: i1.AutocompleteService }], target: i0.ɵɵFactoryTarget.Component }); }
96
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: AutocompleteTdRfComponent, isStandalone: true, selector: "autocomplete-td-rf,app-autocomplete-td-rf", inputs: { validate: "validate", _options: ["options", "_options"] }, viewQueries: [{ propertyName: "autoCompleteRef", first: true, predicate: MatAutocomplete, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"row align-items-center\">\n <!-- {{options()|json}} -->\n @if (computedShowLabel()) {\n <app-input-label\n [colored]=\"coloredSignal()\"\n [form]=\"form()|toAny\"\n [hint]=\"hint\"\n [id]=\"idSignal()\"\n [invalidCheckbox]=\"invalidCheckboxSignal()\"\n [isRequired]=\"isRequiredSignal()\"\n [label]=\"labelSignal()\"\n [lblCl]=\"lblCl\"\n [light]=\"light\"\n [mini]=\"miniSignal()\"\n [showRequiredTag]=\"showRequiredTagSignal()\"\n [showLabel]=\"showLabelSignal()\"\n [small]=\"smallSignal()\"\n [stacked]=\"stackedSignal()\"\n [theme]=\"theme\"\n [xsmall]=\"xsmall\" />\n }\n <div class=\"{{ stackedSignal() ? 'col-12' : 'col-md' }} position-relative\">\n <form [formGroup]=\"form()|toAny\" class=\"position-relative\">\n <input\n type=\"text\"\n data-noformat=\"true\"\n [formControlName]=\"nameStrSignal()\"\n placeholder=\"{{ placeholder() }}\"\n [id]=\"idSignal()\"\n (keyup)=\"fetchOptions($event)\"\n [class]=\"inputClassSignal()\"\n [required]=\"requiredSignal()\"\n [readonly]=\"readonlySignal()\"\n #trigger=\"matAutocompleteTrigger\"\n [matAutocomplete]=\"auto\"\n #inp />\n @if (!disabledSignal()) {\n <i class=\"input-icon fa fa-search\" (click)=\"$event.stopPropagation(); trigger.openPanel()\"></i>\n }\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayWith\" class=\"options-w-auto\" (optionSelected)=\"selected($event)\">\n <!-- <ng-container *ngIf=\"duplicateCheck; else elseNoDulicateTemplate\">\n <mat-option\n *ngFor=\"let item of filteredOptions|removeUsedOptionsReactive:(form.parent|toAny):(form.value):'value':name;trackBy:iS.trackByValue\"\n [value]=\"item.value\">\n <div class=\"option\" [matTooltip]=\"ele.innerText\" [matTooltipDisabled]=\"ele.scrollWidth<=ele.offsetWidth\"\n #ele>\n {{ item.label | appTranslate: translateOptions | async }}\n </div>\n </mat-option>\n </ng-container>\n <ng-template #elseNoDulicateTemplate>\n <mat-option\n *ngFor=\"let item of filteredOptions;trackBy:iS.trackByValue\"\n [value]=\"item.value\">\n <div class=\"option\" [matTooltip]=\"ele.innerText\" [matTooltipDisabled]=\"ele.scrollWidth<=ele.offsetWidth\"\n #ele>\n {{ item.label | appTranslate: translateOptions | async }}\n </div>\n </mat-option>\n </ng-template> -->\n\n @if (showEmptyOptionSignal()) {\n <mat-option selected [value]=\"null\" class=\"empty-option\">\n {{ optionsFunc ? 'Type to search' : placeholder() }}\n </mat-option>\n }\n @for (item of filteredOptions(); track iS.trackByValue) {\n <mat-option [value]=\"item.value\">\n <div class=\"option\" [matTooltip]=\"ele.innerText\" [matTooltipShowDelay]=\"1000\" [matTooltipDisabled]=\"ele.scrollWidth <= ele.offsetWidth\" #ele>\n {{ item.label | appTranslate: translateOptions() | async }}\n </div>\n </mat-option>\n }\n </mat-autocomplete>\n @if (dirtySignal() && showValidationSignal() && showValidationIconSignal()) {\n <div [ngClass]=\"{ valid: validSignal() }\" class=\"validity-icon\"><i class=\"fa fa-check\"></i></div>\n <div [ngClass]=\"{ pending: pendingSignal() }\" class=\"validity-icon\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n <div [ngClass]=\"{ invalid: invalidSignal() }\" class=\"validity-icon\"><i class=\"fa fa-times\"></i></div>\n }\n @if (loading) {\n <div class=\"d-flex text-primary me-1 validity-icon\"><i class=\"fa fa-spinner fa-spin\"></i></div>\n }\n </form>\n </div>\n</div>\n@if (showValidationMsgSignal()) {\n <app-validation-message [label]=\"labelSignal()\" [control]=\"control()\" />\n}\n", styles: ["i.input-icon{position:absolute;top:15px;right:7px;opacity:.4;font-size:10px}.option{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"], dependencies: [{ kind: "component", type: InputLabelComponent, selector: "app-input-label", inputs: ["colored", "form", "hint", "inlineHint", "id", "invalidCheckbox", "isRequired", "label", "labelLink", "lblCl", "light", "mini", "showLabel", "showRequiredTag", "small", "stacked", "theme", "xsmall"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ValidationMessageComponent, selector: "app-validation-message", inputs: ["debug", "label", "hideOverflow", "minLength", "maxLength", "ignoreDirtiness", "customMessage", "control", "input"], outputs: ["labelChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: ToAnyPipe, name: "toAny" }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }] }); }
96
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: AutocompleteTdRfComponent, isStandalone: true, selector: "autocomplete-td-rf,app-autocomplete-td-rf", inputs: { validate: "validate", _options: ["options", "_options"] }, viewQueries: [{ propertyName: "autoCompleteRef", first: true, predicate: MatAutocomplete, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"row align-items-center\">\n <!-- {{options()|json}} -->\n @if (verbose()) {\n <div>disabledSignal: {{ disabledSignal() }}</div>\n <div>validSignal: {{ validSignal() }}</div>\n <div>invalidSignal: {{ invalidSignal() }}</div>\n <div>valueSignal: {{ valueSignal()|json }}</div>\n <div>hasValue: {{ hasValue() }}</div>\n <div>dirtySignal: {{ dirtySignal() }}</div>\n <div>touchedSignal: {{ touchedSignal() }}</div>\n <div>errorsSignal: {{ errorsSignaljson() }}</div>\n <div>pendingSignal: {{ pendingSignal() }}</div>\n <div>pristineSignal: {{ pristineSignal() }}</div>\n <div>controlRequiredSignal: {{ controlRequiredSignal() }}</div>\n <div>isRequiredSignal: {{ isRequiredSignal() }}</div>\n <div class=\"\">onControlObtainedList Length: {{ onControlObtainedList().length }}</div>\n }\n @if (computedShowLabel()) {\n <app-input-label\n [colored]=\"coloredSignal()\"\n [form]=\"form()|toAny\"\n [hint]=\"hint\"\n [id]=\"idSignal()\"\n [invalidCheckbox]=\"invalidCheckboxSignal()\"\n [isRequired]=\"isRequiredSignal()\"\n [label]=\"labelSignal()\"\n [lblCl]=\"lblCl\"\n [light]=\"light\"\n [mini]=\"miniSignal()\"\n [showRequiredTag]=\"showRequiredTagSignal()\"\n [showLabel]=\"showLabelSignal()\"\n [small]=\"smallSignal()\"\n [stacked]=\"stackedSignal()\"\n [theme]=\"theme\"\n [xsmall]=\"xsmall\" />\n }\n <div class=\"{{ stackedSignal() ? 'col-12' : 'col-md' }} position-relative\">\n <form [formGroup]=\"form()|toAny\" class=\"position-relative\">\n <input\n type=\"text\"\n data-noformat=\"true\"\n [formControlName]=\"nameStrSignal()\"\n placeholder=\"{{ placeholder() }}\"\n [id]=\"idSignal()\"\n (keyup)=\"fetchOptions($event)\"\n [class]=\"inputClassSignal()\"\n [required]=\"requiredSignal()\"\n [readonly]=\"readonlySignal()\"\n #trigger=\"matAutocompleteTrigger\"\n [matAutocomplete]=\"auto\"\n #inp />\n @if (!disabledSignal()) {\n <i class=\"input-icon fa fa-search\" (click)=\"$event.stopPropagation(); trigger.openPanel()\"></i>\n }\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayWith\" class=\"options-w-auto\" (optionSelected)=\"selected($event)\">\n <!-- <ng-container *ngIf=\"duplicateCheck; else elseNoDulicateTemplate\">\n <mat-option\n *ngFor=\"let item of filteredOptions|removeUsedOptionsReactive:(form.parent|toAny):(form.value):'value':name;trackBy:iS.trackByValue\"\n [value]=\"item.value\">\n <div class=\"option\" [matTooltip]=\"ele.innerText\" [matTooltipDisabled]=\"ele.scrollWidth<=ele.offsetWidth\"\n #ele>\n {{ item.label | appTranslate: translateOptions | async }}\n </div>\n </mat-option>\n </ng-container>\n <ng-template #elseNoDulicateTemplate>\n <mat-option\n *ngFor=\"let item of filteredOptions;trackBy:iS.trackByValue\"\n [value]=\"item.value\">\n <div class=\"option\" [matTooltip]=\"ele.innerText\" [matTooltipDisabled]=\"ele.scrollWidth<=ele.offsetWidth\"\n #ele>\n {{ item.label | appTranslate: translateOptions | async }}\n </div>\n </mat-option>\n </ng-template> -->\n\n @if (showEmptyOptionSignal()) {\n <mat-option selected [value]=\"null\" class=\"empty-option\">\n {{ optionsFunc ? 'Type to search' : placeholder() }}\n </mat-option>\n }\n @for (item of filteredOptions(); track iS.trackByValue) {\n <mat-option [value]=\"item.value\" (onSelectionChange)=\"selectedOption(item)\">\n <div class=\"option\" [matTooltip]=\"ele.innerText\" [matTooltipShowDelay]=\"1000\" [matTooltipDisabled]=\"ele.scrollWidth <= ele.offsetWidth\" #ele>\n {{ item.label | appTranslate: translateOptions() | async }} \n </div>\n </mat-option>\n }\n </mat-autocomplete>\n @if (dirtySignal() && showValidationSignal() && showValidationIconSignal()) {\n <div [ngClass]=\"{ valid: validSignal() }\" class=\"validity-icon\"><i class=\"fa fa-check\"></i></div>\n <div [ngClass]=\"{ pending: pendingSignal() }\" class=\"validity-icon\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n <div [ngClass]=\"{ invalid: invalidSignal() }\" class=\"validity-icon\"><i class=\"fa fa-times\"></i></div>\n }\n @if (loading) {\n <div class=\"d-flex text-primary me-1 validity-icon\"><i class=\"fa fa-spinner fa-spin\"></i></div>\n }\n </form>\n </div>\n</div>\n@if (showValidationMsgSignal()) {\n <app-validation-message [label]=\"labelSignal()\" [control]=\"control()\" />\n}\n", styles: ["i.input-icon{position:absolute;top:15px;right:7px;opacity:.4;font-size:10px}.option{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"], dependencies: [{ kind: "component", type: InputLabelComponent, selector: "app-input-label", inputs: ["colored", "form", "hint", "inlineHint", "id", "invalidCheckbox", "isRequired", "label", "labelLink", "lblCl", "light", "mini", "showLabel", "showRequiredTag", "small", "stacked", "theme", "xsmall"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ValidationMessageComponent, selector: "app-validation-message", inputs: ["debug", "label", "hideOverflow", "minLength", "maxLength", "ignoreDirtiness", "customMessage", "control", "input"], outputs: ["labelChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: ToAnyPipe, name: "toAny" }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }] }); }
97
97
  }
98
98
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: AutocompleteTdRfComponent, decorators: [{
99
99
  type: Component,
@@ -113,7 +113,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
113
113
  ToAnyPipe,
114
114
  TranslatePipe,
115
115
  InputClassPipe,
116
- ], template: "<div class=\"row align-items-center\">\n <!-- {{options()|json}} -->\n @if (computedShowLabel()) {\n <app-input-label\n [colored]=\"coloredSignal()\"\n [form]=\"form()|toAny\"\n [hint]=\"hint\"\n [id]=\"idSignal()\"\n [invalidCheckbox]=\"invalidCheckboxSignal()\"\n [isRequired]=\"isRequiredSignal()\"\n [label]=\"labelSignal()\"\n [lblCl]=\"lblCl\"\n [light]=\"light\"\n [mini]=\"miniSignal()\"\n [showRequiredTag]=\"showRequiredTagSignal()\"\n [showLabel]=\"showLabelSignal()\"\n [small]=\"smallSignal()\"\n [stacked]=\"stackedSignal()\"\n [theme]=\"theme\"\n [xsmall]=\"xsmall\" />\n }\n <div class=\"{{ stackedSignal() ? 'col-12' : 'col-md' }} position-relative\">\n <form [formGroup]=\"form()|toAny\" class=\"position-relative\">\n <input\n type=\"text\"\n data-noformat=\"true\"\n [formControlName]=\"nameStrSignal()\"\n placeholder=\"{{ placeholder() }}\"\n [id]=\"idSignal()\"\n (keyup)=\"fetchOptions($event)\"\n [class]=\"inputClassSignal()\"\n [required]=\"requiredSignal()\"\n [readonly]=\"readonlySignal()\"\n #trigger=\"matAutocompleteTrigger\"\n [matAutocomplete]=\"auto\"\n #inp />\n @if (!disabledSignal()) {\n <i class=\"input-icon fa fa-search\" (click)=\"$event.stopPropagation(); trigger.openPanel()\"></i>\n }\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayWith\" class=\"options-w-auto\" (optionSelected)=\"selected($event)\">\n <!-- <ng-container *ngIf=\"duplicateCheck; else elseNoDulicateTemplate\">\n <mat-option\n *ngFor=\"let item of filteredOptions|removeUsedOptionsReactive:(form.parent|toAny):(form.value):'value':name;trackBy:iS.trackByValue\"\n [value]=\"item.value\">\n <div class=\"option\" [matTooltip]=\"ele.innerText\" [matTooltipDisabled]=\"ele.scrollWidth<=ele.offsetWidth\"\n #ele>\n {{ item.label | appTranslate: translateOptions | async }}\n </div>\n </mat-option>\n </ng-container>\n <ng-template #elseNoDulicateTemplate>\n <mat-option\n *ngFor=\"let item of filteredOptions;trackBy:iS.trackByValue\"\n [value]=\"item.value\">\n <div class=\"option\" [matTooltip]=\"ele.innerText\" [matTooltipDisabled]=\"ele.scrollWidth<=ele.offsetWidth\"\n #ele>\n {{ item.label | appTranslate: translateOptions | async }}\n </div>\n </mat-option>\n </ng-template> -->\n\n @if (showEmptyOptionSignal()) {\n <mat-option selected [value]=\"null\" class=\"empty-option\">\n {{ optionsFunc ? 'Type to search' : placeholder() }}\n </mat-option>\n }\n @for (item of filteredOptions(); track iS.trackByValue) {\n <mat-option [value]=\"item.value\">\n <div class=\"option\" [matTooltip]=\"ele.innerText\" [matTooltipShowDelay]=\"1000\" [matTooltipDisabled]=\"ele.scrollWidth <= ele.offsetWidth\" #ele>\n {{ item.label | appTranslate: translateOptions() | async }}\n </div>\n </mat-option>\n }\n </mat-autocomplete>\n @if (dirtySignal() && showValidationSignal() && showValidationIconSignal()) {\n <div [ngClass]=\"{ valid: validSignal() }\" class=\"validity-icon\"><i class=\"fa fa-check\"></i></div>\n <div [ngClass]=\"{ pending: pendingSignal() }\" class=\"validity-icon\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n <div [ngClass]=\"{ invalid: invalidSignal() }\" class=\"validity-icon\"><i class=\"fa fa-times\"></i></div>\n }\n @if (loading) {\n <div class=\"d-flex text-primary me-1 validity-icon\"><i class=\"fa fa-spinner fa-spin\"></i></div>\n }\n </form>\n </div>\n</div>\n@if (showValidationMsgSignal()) {\n <app-validation-message [label]=\"labelSignal()\" [control]=\"control()\" />\n}\n", styles: ["i.input-icon{position:absolute;top:15px;right:7px;opacity:.4;font-size:10px}.option{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"] }]
116
+ ], template: "<div class=\"row align-items-center\">\n <!-- {{options()|json}} -->\n @if (verbose()) {\n <div>disabledSignal: {{ disabledSignal() }}</div>\n <div>validSignal: {{ validSignal() }}</div>\n <div>invalidSignal: {{ invalidSignal() }}</div>\n <div>valueSignal: {{ valueSignal()|json }}</div>\n <div>hasValue: {{ hasValue() }}</div>\n <div>dirtySignal: {{ dirtySignal() }}</div>\n <div>touchedSignal: {{ touchedSignal() }}</div>\n <div>errorsSignal: {{ errorsSignaljson() }}</div>\n <div>pendingSignal: {{ pendingSignal() }}</div>\n <div>pristineSignal: {{ pristineSignal() }}</div>\n <div>controlRequiredSignal: {{ controlRequiredSignal() }}</div>\n <div>isRequiredSignal: {{ isRequiredSignal() }}</div>\n <div class=\"\">onControlObtainedList Length: {{ onControlObtainedList().length }}</div>\n }\n @if (computedShowLabel()) {\n <app-input-label\n [colored]=\"coloredSignal()\"\n [form]=\"form()|toAny\"\n [hint]=\"hint\"\n [id]=\"idSignal()\"\n [invalidCheckbox]=\"invalidCheckboxSignal()\"\n [isRequired]=\"isRequiredSignal()\"\n [label]=\"labelSignal()\"\n [lblCl]=\"lblCl\"\n [light]=\"light\"\n [mini]=\"miniSignal()\"\n [showRequiredTag]=\"showRequiredTagSignal()\"\n [showLabel]=\"showLabelSignal()\"\n [small]=\"smallSignal()\"\n [stacked]=\"stackedSignal()\"\n [theme]=\"theme\"\n [xsmall]=\"xsmall\" />\n }\n <div class=\"{{ stackedSignal() ? 'col-12' : 'col-md' }} position-relative\">\n <form [formGroup]=\"form()|toAny\" class=\"position-relative\">\n <input\n type=\"text\"\n data-noformat=\"true\"\n [formControlName]=\"nameStrSignal()\"\n placeholder=\"{{ placeholder() }}\"\n [id]=\"idSignal()\"\n (keyup)=\"fetchOptions($event)\"\n [class]=\"inputClassSignal()\"\n [required]=\"requiredSignal()\"\n [readonly]=\"readonlySignal()\"\n #trigger=\"matAutocompleteTrigger\"\n [matAutocomplete]=\"auto\"\n #inp />\n @if (!disabledSignal()) {\n <i class=\"input-icon fa fa-search\" (click)=\"$event.stopPropagation(); trigger.openPanel()\"></i>\n }\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayWith\" class=\"options-w-auto\" (optionSelected)=\"selected($event)\">\n <!-- <ng-container *ngIf=\"duplicateCheck; else elseNoDulicateTemplate\">\n <mat-option\n *ngFor=\"let item of filteredOptions|removeUsedOptionsReactive:(form.parent|toAny):(form.value):'value':name;trackBy:iS.trackByValue\"\n [value]=\"item.value\">\n <div class=\"option\" [matTooltip]=\"ele.innerText\" [matTooltipDisabled]=\"ele.scrollWidth<=ele.offsetWidth\"\n #ele>\n {{ item.label | appTranslate: translateOptions | async }}\n </div>\n </mat-option>\n </ng-container>\n <ng-template #elseNoDulicateTemplate>\n <mat-option\n *ngFor=\"let item of filteredOptions;trackBy:iS.trackByValue\"\n [value]=\"item.value\">\n <div class=\"option\" [matTooltip]=\"ele.innerText\" [matTooltipDisabled]=\"ele.scrollWidth<=ele.offsetWidth\"\n #ele>\n {{ item.label | appTranslate: translateOptions | async }}\n </div>\n </mat-option>\n </ng-template> -->\n\n @if (showEmptyOptionSignal()) {\n <mat-option selected [value]=\"null\" class=\"empty-option\">\n {{ optionsFunc ? 'Type to search' : placeholder() }}\n </mat-option>\n }\n @for (item of filteredOptions(); track iS.trackByValue) {\n <mat-option [value]=\"item.value\" (onSelectionChange)=\"selectedOption(item)\">\n <div class=\"option\" [matTooltip]=\"ele.innerText\" [matTooltipShowDelay]=\"1000\" [matTooltipDisabled]=\"ele.scrollWidth <= ele.offsetWidth\" #ele>\n {{ item.label | appTranslate: translateOptions() | async }} \n </div>\n </mat-option>\n }\n </mat-autocomplete>\n @if (dirtySignal() && showValidationSignal() && showValidationIconSignal()) {\n <div [ngClass]=\"{ valid: validSignal() }\" class=\"validity-icon\"><i class=\"fa fa-check\"></i></div>\n <div [ngClass]=\"{ pending: pendingSignal() }\" class=\"validity-icon\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n <div [ngClass]=\"{ invalid: invalidSignal() }\" class=\"validity-icon\"><i class=\"fa fa-times\"></i></div>\n }\n @if (loading) {\n <div class=\"d-flex text-primary me-1 validity-icon\"><i class=\"fa fa-spinner fa-spin\"></i></div>\n }\n </form>\n </div>\n</div>\n@if (showValidationMsgSignal()) {\n <app-validation-message [label]=\"labelSignal()\" [control]=\"control()\" />\n}\n", styles: ["i.input-icon{position:absolute;top:15px;right:7px;opacity:.4;font-size:10px}.option{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"] }]
117
117
  }], ctorParameters: () => [{ type: i1.AutocompleteService }], propDecorators: { validate: [{
118
118
  type: Input
119
119
  }], _options: [{
@@ -123,4 +123,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
123
123
  type: ViewChild,
124
124
  args: [MatAutocomplete]
125
125
  }] } });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXRkLXJmLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLXRkLXJmL2F1dG9jb21wbGV0ZS10ZC1yZi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2hhcmVkL2NvbXBvbmVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBbUIsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUNMLGVBQWUsRUFFZixxQkFBcUIsR0FDdEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQVMsYUFBYSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBYSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDekcsT0FBTyxFQUFFLGdCQUFnQixF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QUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLHFCQUFxQjtRQUNyQiw4Q0FBOEM7UUFDOUMsV0FBVztJQUNiLENBQUM7OEdBN0RVLHlCQUF5QjtrR0FBekIseUJBQXlCLDJOQVV6QixlQUFlLHVFQ3ZENUIsNjhIQTBGQSwwTUQ3REksbUJBQW1CLDRRQUNuQixXQUFXLHczQkFDWCxtQkFBbUIsK1VBRW5CLHFCQUFxQix3MUJBRXJCLGVBQWUsOEJBQ2YsZ0JBQWdCLDZUQUNoQixPQUFPLG9GQUNQLDBCQUEwQixzTkFDMUIsU0FBUyx5Q0FDVCxTQUFTLHlDQUNULGFBQWE7OzJGQUlKLHlCQUF5QjtrQkF2QnJDLFNBQVM7K0JBQ0UsMkNBQTJDLGNBR3pDLElBQUksV0FDUDt3QkFDUCxJQUFJO3dCQUNKLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLFFBQVE7d0JBQ1IscUJBQXFCO3dCQUNyQixLQUFLO3dCQUNMLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixPQUFPO3dCQUNQLDBCQUEwQjt3QkFDMUIsU0FBUzt3QkFDVCxTQUFTO3dCQUNULGFBQWE7d0JBQ2IsY0FBYztxQkFDZjt3RkFNUSxRQUFRO3NCQUFoQixLQUFLO2dCQUN5QixRQUFRO3NCQUF0QyxLQUFLO3VCQUFDLFNBQVM7Z0JBS1ksZUFBZTtzQkFBMUMsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkLCBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgTWF0QXV0b2NvbXBsZXRlLFxuICBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50LFxuICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBtZXJnZSwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElPcHRpb24gfSBmcm9tICcuLi8uLi9pbnB1dC9pbnB1dC1iYXNpYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRURF9SRkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2lucHV0L2lucHV0LXRkLXJmLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnB1dC9pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZVNlcnZpY2UgfSBmcm9tICcuLi9hdXRvY29tcGxldGUuc2VydmljZSc7XG5pbXBvcnQgeyBJbnB1dENsYXNzUGlwZSB9IGZyb20gJy4uLy4uL2lucHV0L2lucHV0cy1waXBlcy5waXBlJztcbmltcG9ydCB7IFRvQW55UGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL3V0aWxpdHkucGlwZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC92YWxpZGF0aW9uLW1lc3NhZ2UvdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBNYXRPcHRpb24sIE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgSW5wdXRMYWJlbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2lucHV0L2lucHV0LWxhYmVsL2lucHV0LWxhYmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciwgTmdDbGFzcywgQXN5bmNQaXBlLCBKc29uUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F1dG9jb21wbGV0ZS10ZC1yZixhcHAtYXV0b2NvbXBsZXRlLXRkLXJmJyxcbiAgdGVtcGxhdGVVcmw6ICcuLi9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIElucHV0TGFiZWxDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBKc29uUGlwZSxcbiAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgTmdGb3IsXG4gICAgTWF0T3B0aW9uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTmdDbGFzcyxcbiAgICBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCxcbiAgICBBc3luY1BpcGUsXG4gICAgVG9BbnlQaXBlLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgSW5wdXRDbGFzc1BpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9jb21wbGV0ZVRkUmZDb21wb25lbnQ8VE9wdGlvbj4gZXh0ZW5kcyBJbnB1dFREX1JGQ29tcG9uZW50PFRPcHRpb24+IHtcbiAgZmlsdGVyZWRPcHRpb25zID0gY29tcHV0ZWQ8SU9wdGlvbltdPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0b1MuZmlsdGVyT3B0aW9ucyh0aGlzLnZhbHVlU2lnbmFsKCksIHRoaXMub3B0aW9ucygpKTtcbiAgfSk7XG4gIEBJbnB1dCgpIHZhbGlkYXRlID0gdHJ1ZTtcbiAgQElucHV0KCdvcHRpb25zJykgb3ZlcnJpZGUgc2V0IF9vcHRpb25zKHY6IFRPcHRpb25bXSkge1xuICAgIHN1cGVyLl9vcHRpb25zID0gdjtcbiAgICBpZiAodGhpcy5hdXRvQ29tcGxldGVSZWYgJiYgdGhpcy5jb250cm9sKCk/LmdldFJhd1ZhbHVlKCkpXG4gICAgICB0aGlzLmNvbnRyb2woKS5zZXRWYWx1ZSh0aGlzLmNvbnRyb2woKT8uZ2V0UmF3VmFsdWUoKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlKSBhdXRvQ29tcGxldGVSZWY6IE1hdEF1dG9jb21wbGV0ZTtcblxuICBwcm90ZWN0ZWQgdmFsdWVDaGFuZ2VkID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBhdXRvUzogQXV0b2NvbXBsZXRlU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIGxldCB2UzogU3Vic2NyaXB0aW9uO1xuICAgIHRoaXMuYWRkT25Db250cm9sT2J0YWluZWRIb29rKCdpbmNsdWRlc09wdGlvbicsIChjb250cm9sKSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2w/Lmhhc1ZhbGlkYXRvcih0aGlzLmluY2x1ZGVzT3B0aW9uKSkgY29udHJvbD8uYWRkVmFsaWRhdG9ycyh0aGlzLmluY2x1ZGVzT3B0aW9uKTtcbiAgICAgIGVsc2UgZGVidWdnZXI7XG4gICAgICB2Uz8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHZTID0gY29udHJvbD8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgICAvLyBkZWJ1Z2dlclxuICAgICAgICBzdXBlci5jaGFuZ2UoeyB0YXJnZXQ6IHsgdmFsdWU6IHIgfSB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLm9wdGlvbnNGdW5jKVxuICAgICAgdGhpcy52YWx1ZUNoYW5nZWRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+ICh0aGlzLmxvYWRpbmcgPSB0cnVlKSksXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDYwMCksXG4gICAgICAgICAgZmlsdGVyKCh2KSA9PiB2ICE9IG51bGwgJiYgdiAhPSAnJyksXG4gICAgICAgICAgc3dpdGNoTWFwKCh2KSA9PiB0aGlzLm9wdGlvbnNGdW5jKHYpKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgICAgLy8gZGVidWdnZXJcbiAgICAgICAgICB0aGlzLl9vcHRpb25zID0gcjtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gIH1cblxuICBmZXRjaE9wdGlvbnMoJGV2ZW50OiBFdmVudCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNGdW5jKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZWQubmV4dCh0aGlzLmNvbnRyb2woKT8uZ2V0UmF3VmFsdWUoKSk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICB9XG5cbiAgc2VsZWN0ZWQoJGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KSB7XG4gICAgdGhpcy5tU2VsZWN0ZWRPcHRpb25MYWJlbC5lbWl0KHRoaXMuZGlzcGxheVdpdGgodGhpcy5jb250cm9sKCk/LmdldFJhd1ZhbHVlKCkpKTtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIHRoaXMuZmlsdGVyZWRPcHRpb25zLnNldCh0aGlzLm9wdGlvbnMoKSk7XG4gICAgLy8gfSwgNjAwKTtcbiAgfVxuXG4gIGRpc3BsYXlXaXRoID0gKHZhbDogYW55KSA9PlxuICAgIC8vIHtcbiAgICAvLyBpZiAodGhpcy5kZWJ1ZygpKSBkZWJ1Z2dlcjtcbiAgICB2YWwgaW5zdGFuY2VvZiBNYXRPcHRpb25cbiAgICAgID8gdGhpcy5kaXNwbGF5V2l0aCh2YWwudmFsdWUpXG4gICAgICA6IHRoaXMuZG9lc09wdGlvbkV4aXN0KHZhbCk/LmxhYmVsIHx8IHZhbDtcbiAgLy8gfTtcblxuICBpbmNsdWRlc09wdGlvbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICBpZiAodGhpcy5kZWJ1ZygpKSBkZWJ1Z2dlcjtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sPy52YWx1ZTtcbiAgICBpZiAoIXZhbCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMoKSB8fCB0aGlzLm9wdGlvbnMoKS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIC8vIGRlYnVnZ2VyXG4gICAgaWYgKHRoaXMuZG9lc09wdGlvbkV4aXN0KHZhbCkpIHJldHVybiBudWxsO1xuICAgIGVsc2UgcmV0dXJuIHsgbm90Rm91bmQ6IHRydWUgfTtcbiAgfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gIDwhLS0ge3tvcHRpb25zKCl8anNvbn19IC0tPlxuICBAaWYgKGNvbXB1dGVkU2hvd0xhYmVsKCkpIHtcbiAgICA8YXBwLWlucHV0LWxhYmVsXG4gICAgICBbY29sb3JlZF09XCJjb2xvcmVkU2lnbmFsKClcIlxuICAgICAgW2Zvcm1dPVwiZm9ybSgpfHRvQW55XCJcbiAgICAgIFtoaW50XT1cImhpbnRcIlxuICAgICAgW2lkXT1cImlkU2lnbmFsKClcIlxuICAgICAgW2ludmFsaWRDaGVja2JveF09XCJpbnZhbGlkQ2hlY2tib3hTaWduYWwoKVwiXG4gICAgICBbaXNSZXF1aXJlZF09XCJpc1JlcXVpcmVkU2lnbmFsKClcIlxuICAgICAgW2xhYmVsXT1cImxhYmVsU2lnbmFsKClcIlxuICAgICAgW2xibENsXT1cImxibENsXCJcbiAgICAgIFtsaWdodF09XCJsaWdodFwiXG4gICAgICBbbWluaV09XCJtaW5pU2lnbmFsKClcIlxuICAgICAgW3Nob3dSZXF1aXJlZFRhZ109XCJzaG93UmVxdWlyZWRUYWdTaWduYWwoKVwiXG4gICAgICBbc2hvd0xhYmVsXT1cInNob3dMYWJlbFNpZ25hbCgpXCJcbiAgICAgIFtzbWFsbF09XCJzbWFsbFNpZ25hbCgpXCJcbiAgICAgIFtzdGFja2VkXT1cInN0YWNrZWRTaWduYWwoKVwiXG4gICAgICBbdGhlbWVdPVwidGhlbWVcIlxuICAgICAgW3hzbWFsbF09XCJ4c21hbGxcIiAvPlxuICB9XG4gIDxkaXYgY2xhc3M9XCJ7eyBzdGFja2VkU2lnbmFsKCkgPyAnY29sLTEyJyA6ICdjb2wtbWQnIH19IHBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtKCl8dG9BbnlcIiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBkYXRhLW5vZm9ybWF0PVwidHJ1ZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibmFtZVN0clNpZ25hbCgpXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlcigpIH19XCJcbiAgICAgICAgW2lkXT1cImlkU2lnbmFsKClcIlxuICAgICAgICAoa2V5dXApPVwiZmV0Y2hPcHRpb25zKCRldmVudClcIlxuICAgICAgICBbY2xhc3NdPVwiaW5wdXRDbGFzc1NpZ25hbCgpXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkU2lnbmFsKClcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlTaWduYWwoKVwiXG4gICAgICAgICN0cmlnZ2VyPVwibWF0QXV0b2NvbXBsZXRlVHJpZ2dlclwiXG4gICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICNpbnAgLz5cbiAgICAgIEBpZiAoIWRpc2FibGVkU2lnbmFsKCkpIHtcbiAgICAgICAgPGkgY2xhc3M9XCJpbnB1dC1pY29uIGZhIGZhLXNlYXJjaFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHRyaWdnZXIub3BlblBhbmVsKClcIj48L2k+XG4gICAgICB9XG4gICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5V2l0aFwiIGNsYXNzPVwib3B0aW9ucy13LWF1dG9cIiAob3B0aW9uU2VsZWN0ZWQpPVwic2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJkdXBsaWNhdGVDaGVjazsgZWxzZSBlbHNlTm9EdWxpY2F0ZVRlbXBsYXRlXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkT3B0aW9uc3xyZW1vdmVVc2VkT3B0aW9uc1JlYWN0aXZlOihmb3JtLnBhcmVudHx0b0FueSk6KGZvcm0udmFsdWUpOid2YWx1ZSc6bmFtZTt0cmFja0J5OmlTLnRyYWNrQnlWYWx1ZVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvblwiIFttYXRUb29sdGlwXT1cImVsZS5pbm5lclRleHRcIiBbbWF0VG9vbHRpcERpc2FibGVkXT1cImVsZS5zY3JvbGxXaWR0aDw9ZWxlLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICAgICAgI2VsZT5cbiAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB8IGFwcFRyYW5zbGF0ZTogdHJhbnNsYXRlT3B0aW9ucyB8IGFzeW5jIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VOb0R1bGljYXRlVGVtcGxhdGU+XG4gICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkT3B0aW9uczt0cmFja0J5OmlTLnRyYWNrQnlWYWx1ZVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvblwiIFttYXRUb29sdGlwXT1cImVsZS5pbm5lclRleHRcIiBbbWF0VG9vbHRpcERpc2FibGVkXT1cImVsZS5zY3JvbGxXaWR0aDw9ZWxlLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICAgICAgI2VsZT5cbiAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB8IGFwcFRyYW5zbGF0ZTogdHJhbnNsYXRlT3B0aW9ucyB8IGFzeW5jIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+IC0tPlxuXG4gICAgICAgIEBpZiAoc2hvd0VtcHR5T3B0aW9uU2lnbmFsKCkpIHtcbiAgICAgICAgICA8bWF0LW9wdGlvbiBzZWxlY3RlZCBbdmFsdWVdPVwibnVsbFwiIGNsYXNzPVwiZW1wdHktb3B0aW9uXCI+XG4gICAgICAgICAgICB7eyBvcHRpb25zRnVuYyA/ICdUeXBlIHRvIHNlYXJjaCcgOiBwbGFjZWhvbGRlcigpIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgZmlsdGVyZWRPcHRpb25zKCk7IHRyYWNrIGlTLnRyYWNrQnlWYWx1ZSkge1xuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uXCIgW21hdFRvb2x0aXBdPVwiZWxlLmlubmVyVGV4dFwiIFttYXRUb29sdGlwU2hvd0RlbGF5XT1cIjEwMDBcIiBbbWF0VG9vbHRpcERpc2FibGVkXT1cImVsZS5zY3JvbGxXaWR0aCA8PSBlbGUub2Zmc2V0V2lkdGhcIiAjZWxlPlxuICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIHwgYXBwVHJhbnNsYXRlOiB0cmFuc2xhdGVPcHRpb25zKCkgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICB9XG4gICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICBAaWYgKGRpcnR5U2lnbmFsKCkgJiYgc2hvd1ZhbGlkYXRpb25TaWduYWwoKSAmJiBzaG93VmFsaWRhdGlvbkljb25TaWduYWwoKSkge1xuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgdmFsaWQ6IHZhbGlkU2lnbmFsKCkgfVwiIGNsYXNzPVwidmFsaWRpdHktaWNvblwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+PC9kaXY+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBwZW5kaW5nOiBwZW5kaW5nU2lnbmFsKCkgfVwiIGNsYXNzPVwidmFsaWRpdHktaWNvblwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc3Bpbm5lciBmYS1zcGluXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGludmFsaWQ6IGludmFsaWRTaWduYWwoKSB9XCIgY2xhc3M9XCJ2YWxpZGl0eS1pY29uXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lc1wiPjwvaT48L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAobG9hZGluZykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHRleHQtcHJpbWFyeSBtZS0xIHZhbGlkaXR5LWljb25cIj48aSBjbGFzcz1cImZhIGZhLXNwaW5uZXIgZmEtc3BpblwiPjwvaT48L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuPC9kaXY+XG5AaWYgKHNob3dWYWxpZGF0aW9uTXNnU2lnbmFsKCkpIHtcbiAgPGFwcC12YWxpZGF0aW9uLW1lc3NhZ2UgW2xhYmVsXT1cImxhYmVsU2lnbmFsKClcIiBbY29udHJvbF09XCJjb250cm9sKClcIiAvPlxufVxuIl19
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXRkLXJmLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLXRkLXJmL2F1dG9jb21wbGV0ZS10ZC1yZi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2hhcmVkL2NvbXBvbmVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBbUIsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUNMLGVBQWUsRUFFZixxQkFBcUIsR0FDdEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQVMsYUFBYSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBYSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDekcsT0FBTyxFQUFFLGdCQUFnQixF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QUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLHFCQUFxQjtRQUNyQiw4Q0FBOEM7UUFDOUMsV0FBVztJQUNiLENBQUM7OEdBN0RVLHlCQUF5QjtrR0FBekIseUJBQXlCLDJOQVV6QixlQUFlLHVFQ3ZENUIsMHZKQXlHQSwwTUQ1RUksbUJBQW1CLDRRQUNuQixXQUFXLHczQkFDWCxtQkFBbUIsMlVBQ25CLFFBQVEsNENBQ1IscUJBQXFCLHcxQkFFckIsZUFBZSw4QkFDZixnQkFBZ0IsNlRBQ2hCLE9BQU8sb0ZBQ1AsMEJBQTBCLHNOQUMxQixTQUFTLHlDQUNULFNBQVMseUNBQ1QsYUFBYTs7MkZBSUoseUJBQXlCO2tCQXZCckMsU0FBUzsrQkFDRSwyQ0FBMkMsY0FHekMsSUFBSSxXQUNQO3dCQUNQLElBQUk7d0JBQ0osbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsUUFBUTt3QkFDUixxQkFBcUI7d0JBQ3JCLEtBQUs7d0JBQ0wsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AsMEJBQTBCO3dCQUMxQixTQUFTO3dCQUNULFNBQVM7d0JBQ1QsYUFBYTt3QkFDYixjQUFjO3FCQUNmO3dGQU1RLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ3lCLFFBQVE7c0JBQXRDLEtBQUs7dUJBQUMsU0FBUztnQkFLWSxlQUFlO3NCQUExQyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBNYXRBdXRvY29tcGxldGUsXG4gIE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQsXG4gIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IG1lcmdlLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSU9wdGlvbiB9IGZyb20gJy4uLy4uL2lucHV0L2lucHV0LWJhc2ljLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dFREX1JGQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW5wdXQvaW5wdXQtdGQtcmYuY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0U2VydmljZSB9IGZyb20gJy4uLy4uL2lucHV0L2lucHV0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlU2VydmljZSB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IElucHV0Q2xhc3NQaXBlIH0gZnJvbSAnLi4vLi4vaW5wdXQvaW5wdXRzLXBpcGVzLnBpcGUnO1xuaW1wb3J0IHsgVG9BbnlQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvdXRpbGl0eS5waXBlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2lucHV0L3ZhbGlkYXRpb24tbWVzc2FnZS92YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdE9wdGlvbiwgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBJbnB1dExhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW5wdXQvaW5wdXQtbGFiZWwvaW5wdXQtbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7IE5nSWYsIE5nRm9yLCBOZ0NsYXNzLCBBc3luY1BpcGUsIEpzb25QaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXV0b2NvbXBsZXRlLXRkLXJmLGFwcC1hdXRvY29tcGxldGUtdGQtcmYnLFxuICB0ZW1wbGF0ZVVybDogJy4uL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9hdXRvY29tcGxldGUuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nSWYsXG4gICAgSW5wdXRMYWJlbENvbXBvbmVudCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEpzb25QaXBlLFxuICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcbiAgICBOZ0ZvcixcbiAgICBNYXRPcHRpb25Nb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBOZ0NsYXNzLFxuICAgIFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBUb0FueVBpcGUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBJbnB1dENsYXNzUGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlVGRSZkNvbXBvbmVudDxUT3B0aW9uPiBleHRlbmRzIElucHV0VERfUkZDb21wb25lbnQ8VE9wdGlvbj4ge1xuICBmaWx0ZXJlZE9wdGlvbnMgPSBjb21wdXRlZDxJT3B0aW9uW10+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRvUy5maWx0ZXJPcHRpb25zKHRoaXMudmFsdWVTaWduYWwoKSwgdGhpcy5vcHRpb25zKCkpO1xuICB9KTtcbiAgQElucHV0KCkgdmFsaWRhdGUgPSB0cnVlO1xuICBASW5wdXQoJ29wdGlvbnMnKSBvdmVycmlkZSBzZXQgX29wdGlvbnModjogVE9wdGlvbltdKSB7XG4gICAgc3VwZXIuX29wdGlvbnMgPSB2O1xuICAgIGlmICh0aGlzLmF1dG9Db21wbGV0ZVJlZiAmJiB0aGlzLmNvbnRyb2woKT8uZ2V0UmF3VmFsdWUoKSlcbiAgICAgIHRoaXMuY29udHJvbCgpLnNldFZhbHVlKHRoaXMuY29udHJvbCgpPy5nZXRSYXdWYWx1ZSgpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgQFZpZXdDaGlsZChNYXRBdXRvY29tcGxldGUpIGF1dG9Db21wbGV0ZVJlZjogTWF0QXV0b2NvbXBsZXRlO1xuXG4gIHByb3RlY3RlZCB2YWx1ZUNoYW5nZWQgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGF1dG9TOiBBdXRvY29tcGxldGVTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgbGV0IHZTOiBTdWJzY3JpcHRpb247XG4gICAgdGhpcy5hZGRPbkNvbnRyb2xPYnRhaW5lZEhvb2soJ2luY2x1ZGVzT3B0aW9uJywgKGNvbnRyb2wpID0+IHtcbiAgICAgIGlmICghY29udHJvbD8uaGFzVmFsaWRhdG9yKHRoaXMuaW5jbHVkZXNPcHRpb24pKSBjb250cm9sPy5hZGRWYWxpZGF0b3JzKHRoaXMuaW5jbHVkZXNPcHRpb24pO1xuICAgICAgZWxzZSBkZWJ1Z2dlcjtcbiAgICAgIHZTPy51bnN1YnNjcmliZSgpO1xuICAgICAgdlMgPSBjb250cm9sPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIC8vIGRlYnVnZ2VyXG4gICAgICAgIHN1cGVyLmNoYW5nZSh7IHRhcmdldDogeyB2YWx1ZTogciB9IH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHRoaXMub3B0aW9uc0Z1bmMpXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4gKHRoaXMubG9hZGluZyA9IHRydWUpKSxcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoNjAwKSxcbiAgICAgICAgICBmaWx0ZXIoKHYpID0+IHYgIT0gbnVsbCAmJiB2ICE9ICcnKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKHYpID0+IHRoaXMub3B0aW9uc0Z1bmModikpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgICAgICAvLyBkZWJ1Z2dlclxuICAgICAgICAgIHRoaXMuX29wdGlvbnMgPSByO1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgfVxuXG4gIGZldGNoT3B0aW9ucygkZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0Z1bmMpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlZC5uZXh0KHRoaXMuY29udHJvbCgpPy5nZXRSYXdWYWx1ZSgpKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gIH1cblxuICBzZWxlY3RlZCgkZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpIHtcbiAgICB0aGlzLm1TZWxlY3RlZE9wdGlvbkxhYmVsLmVtaXQodGhpcy5kaXNwbGF5V2l0aCh0aGlzLmNvbnRyb2woKT8uZ2V0UmF3VmFsdWUoKSkpO1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMuc2V0KHRoaXMub3B0aW9ucygpKTtcbiAgICAvLyB9LCA2MDApO1xuICB9XG5cbiAgZGlzcGxheVdpdGggPSAodmFsOiBhbnkpID0+XG4gICAgLy8ge1xuICAgIC8vIGlmICh0aGlzLmRlYnVnKCkpIGRlYnVnZ2VyO1xuICAgIHZhbCBpbnN0YW5jZW9mIE1hdE9wdGlvblxuICAgICAgPyB0aGlzLmRpc3BsYXlXaXRoKHZhbC52YWx1ZSlcbiAgICAgIDogdGhpcy5kb2VzT3B0aW9uRXhpc3QodmFsKT8ubGFiZWwgfHwgdmFsO1xuICAvLyB9O1xuXG4gIGluY2x1ZGVzT3B0aW9uID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgIGlmICh0aGlzLmRlYnVnKCkpIGRlYnVnZ2VyO1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2w/LnZhbHVlO1xuICAgIGlmICghdmFsKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXRoaXMub3B0aW9ucygpIHx8IHRoaXMub3B0aW9ucygpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgLy8gZGVidWdnZXJcbiAgICBpZiAodGhpcy5kb2VzT3B0aW9uRXhpc3QodmFsKSkgcmV0dXJuIG51bGw7XG4gICAgZWxzZSByZXR1cm4geyBub3RGb3VuZDogdHJ1ZSB9O1xuICB9O1xufVxuIiwiPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgPCEtLSB7e29wdGlvbnMoKXxqc29ufX0gLS0+XG4gIEBpZiAodmVyYm9zZSgpKSB7XG4gICAgPGRpdj5kaXNhYmxlZFNpZ25hbDoge3sgZGlzYWJsZWRTaWduYWwoKSB9fTwvZGl2PlxuICAgIDxkaXY+dmFsaWRTaWduYWw6IHt7IHZhbGlkU2lnbmFsKCkgfX08L2Rpdj5cbiAgICA8ZGl2PmludmFsaWRTaWduYWw6IHt7IGludmFsaWRTaWduYWwoKSB9fTwvZGl2PlxuICAgIDxkaXY+dmFsdWVTaWduYWw6IHt7IHZhbHVlU2lnbmFsKCl8anNvbiB9fTwvZGl2PlxuICAgIDxkaXY+aGFzVmFsdWU6IHt7IGhhc1ZhbHVlKCkgfX08L2Rpdj5cbiAgICA8ZGl2PmRpcnR5U2lnbmFsOiB7eyBkaXJ0eVNpZ25hbCgpIH19PC9kaXY+XG4gICAgPGRpdj50b3VjaGVkU2lnbmFsOiB7eyB0b3VjaGVkU2lnbmFsKCkgfX08L2Rpdj5cbiAgICA8ZGl2PmVycm9yc1NpZ25hbDoge3sgZXJyb3JzU2lnbmFsanNvbigpIH19PC9kaXY+XG4gICAgPGRpdj5wZW5kaW5nU2lnbmFsOiB7eyBwZW5kaW5nU2lnbmFsKCkgfX08L2Rpdj5cbiAgICA8ZGl2PnByaXN0aW5lU2lnbmFsOiB7eyBwcmlzdGluZVNpZ25hbCgpIH19PC9kaXY+XG4gICAgPGRpdj5jb250cm9sUmVxdWlyZWRTaWduYWw6IHt7IGNvbnRyb2xSZXF1aXJlZFNpZ25hbCgpIH19PC9kaXY+XG4gICAgPGRpdj5pc1JlcXVpcmVkU2lnbmFsOiB7eyBpc1JlcXVpcmVkU2lnbmFsKCkgfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiXCI+b25Db250cm9sT2J0YWluZWRMaXN0IExlbmd0aDoge3sgb25Db250cm9sT2J0YWluZWRMaXN0KCkubGVuZ3RoIH19PC9kaXY+XG4gIH1cbiAgQGlmIChjb21wdXRlZFNob3dMYWJlbCgpKSB7XG4gICAgPGFwcC1pbnB1dC1sYWJlbFxuICAgICAgW2NvbG9yZWRdPVwiY29sb3JlZFNpZ25hbCgpXCJcbiAgICAgIFtmb3JtXT1cImZvcm0oKXx0b0FueVwiXG4gICAgICBbaGludF09XCJoaW50XCJcbiAgICAgIFtpZF09XCJpZFNpZ25hbCgpXCJcbiAgICAgIFtpbnZhbGlkQ2hlY2tib3hdPVwiaW52YWxpZENoZWNrYm94U2lnbmFsKClcIlxuICAgICAgW2lzUmVxdWlyZWRdPVwiaXNSZXF1aXJlZFNpZ25hbCgpXCJcbiAgICAgIFtsYWJlbF09XCJsYWJlbFNpZ25hbCgpXCJcbiAgICAgIFtsYmxDbF09XCJsYmxDbFwiXG4gICAgICBbbGlnaHRdPVwibGlnaHRcIlxuICAgICAgW21pbmldPVwibWluaVNpZ25hbCgpXCJcbiAgICAgIFtzaG93UmVxdWlyZWRUYWddPVwic2hvd1JlcXVpcmVkVGFnU2lnbmFsKClcIlxuICAgICAgW3Nob3dMYWJlbF09XCJzaG93TGFiZWxTaWduYWwoKVwiXG4gICAgICBbc21hbGxdPVwic21hbGxTaWduYWwoKVwiXG4gICAgICBbc3RhY2tlZF09XCJzdGFja2VkU2lnbmFsKClcIlxuICAgICAgW3RoZW1lXT1cInRoZW1lXCJcbiAgICAgIFt4c21hbGxdPVwieHNtYWxsXCIgLz5cbiAgfVxuICA8ZGl2IGNsYXNzPVwie3sgc3RhY2tlZFNpZ25hbCgpID8gJ2NvbC0xMicgOiAnY29sLW1kJyB9fSBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybSgpfHRvQW55XCIgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgZGF0YS1ub2Zvcm1hdD1cInRydWVcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5hbWVTdHJTaWduYWwoKVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgcGxhY2Vob2xkZXIoKSB9fVwiXG4gICAgICAgIFtpZF09XCJpZFNpZ25hbCgpXCJcbiAgICAgICAgKGtleXVwKT1cImZldGNoT3B0aW9ucygkZXZlbnQpXCJcbiAgICAgICAgW2NsYXNzXT1cImlucHV0Q2xhc3NTaWduYWwoKVwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFNpZ25hbCgpXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5U2lnbmFsKClcIlxuICAgICAgICAjdHJpZ2dlcj1cIm1hdEF1dG9jb21wbGV0ZVRyaWdnZXJcIlxuICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgICAgICAjaW5wIC8+XG4gICAgICBAaWYgKCFkaXNhYmxlZFNpZ25hbCgpKSB7XG4gICAgICAgIDxpIGNsYXNzPVwiaW5wdXQtaWNvbiBmYSBmYS1zZWFyY2hcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB0cmlnZ2VyLm9wZW5QYW5lbCgpXCI+PC9pPlxuICAgICAgfVxuICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheVdpdGhcIiBjbGFzcz1cIm9wdGlvbnMtdy1hdXRvXCIgKG9wdGlvblNlbGVjdGVkKT1cInNlbGVjdGVkKCRldmVudClcIj5cbiAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZHVwbGljYXRlQ2hlY2s7IGVsc2UgZWxzZU5vRHVsaWNhdGVUZW1wbGF0ZVwiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZE9wdGlvbnN8cmVtb3ZlVXNlZE9wdGlvbnNSZWFjdGl2ZTooZm9ybS5wYXJlbnR8dG9BbnkpOihmb3JtLnZhbHVlKTondmFsdWUnOm5hbWU7dHJhY2tCeTppUy50cmFja0J5VmFsdWVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25cIiBbbWF0VG9vbHRpcF09XCJlbGUuaW5uZXJUZXh0XCIgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJlbGUuc2Nyb2xsV2lkdGg8PWVsZS5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgICAgICNlbGU+XG4gICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfCBhcHBUcmFuc2xhdGU6IHRyYW5zbGF0ZU9wdGlvbnMgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlTm9EdWxpY2F0ZVRlbXBsYXRlPlxuICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZE9wdGlvbnM7dHJhY2tCeTppUy50cmFja0J5VmFsdWVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25cIiBbbWF0VG9vbHRpcF09XCJlbGUuaW5uZXJUZXh0XCIgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJlbGUuc2Nyb2xsV2lkdGg8PWVsZS5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgICAgICNlbGU+XG4gICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfCBhcHBUcmFuc2xhdGU6IHRyYW5zbGF0ZU9wdGlvbnMgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPiAtLT5cblxuICAgICAgICBAaWYgKHNob3dFbXB0eU9wdGlvblNpZ25hbCgpKSB7XG4gICAgICAgICAgPG1hdC1vcHRpb24gc2VsZWN0ZWQgW3ZhbHVlXT1cIm51bGxcIiBjbGFzcz1cImVtcHR5LW9wdGlvblwiPlxuICAgICAgICAgICAge3sgb3B0aW9uc0Z1bmMgPyAnVHlwZSB0byBzZWFyY2gnIDogcGxhY2Vob2xkZXIoKSB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChpdGVtIG9mIGZpbHRlcmVkT3B0aW9ucygpOyB0cmFjayBpUy50cmFja0J5VmFsdWUpIHtcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiIChvblNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3RlZE9wdGlvbihpdGVtKVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvblwiIFttYXRUb29sdGlwXT1cImVsZS5pbm5lclRleHRcIiBbbWF0VG9vbHRpcFNob3dEZWxheV09XCIxMDAwXCIgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJlbGUuc2Nyb2xsV2lkdGggPD0gZWxlLm9mZnNldFdpZHRoXCIgI2VsZT5cbiAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB8IGFwcFRyYW5zbGF0ZTogdHJhbnNsYXRlT3B0aW9ucygpIHwgYXN5bmMgfX0gXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIH1cbiAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgIEBpZiAoZGlydHlTaWduYWwoKSAmJiBzaG93VmFsaWRhdGlvblNpZ25hbCgpICYmIHNob3dWYWxpZGF0aW9uSWNvblNpZ25hbCgpKSB7XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyB2YWxpZDogdmFsaWRTaWduYWwoKSB9XCIgY2xhc3M9XCJ2YWxpZGl0eS1pY29uXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT48L2Rpdj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IHBlbmRpbmc6IHBlbmRpbmdTaWduYWwoKSB9XCIgY2xhc3M9XCJ2YWxpZGl0eS1pY29uXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zcGlubmVyIGZhLXNwaW5cIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgaW52YWxpZDogaW52YWxpZFNpZ25hbCgpIH1cIiBjbGFzcz1cInZhbGlkaXR5LWljb25cIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzXCI+PC9pPjwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggdGV4dC1wcmltYXJ5IG1lLTEgdmFsaWRpdHktaWNvblwiPjxpIGNsYXNzPVwiZmEgZmEtc3Bpbm5lciBmYS1zcGluXCI+PC9pPjwvZGl2PlxuICAgICAgfVxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG48L2Rpdj5cbkBpZiAoc2hvd1ZhbGlkYXRpb25Nc2dTaWduYWwoKSkge1xuICA8YXBwLXZhbGlkYXRpb24tbWVzc2FnZSBbbGFiZWxdPVwibGFiZWxTaWduYWwoKVwiIFtjb250cm9sXT1cImNvbnRyb2woKVwiIC8+XG59XG4iXX0=