@c8y/ngx-components 1021.36.0 → 1021.37.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/alarms/alarms-view.service.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
- package/core/common/forOf.directive.d.ts.map +1 -1
- package/core/file-picker/file-picker.component.d.ts +4 -2
- package/core/file-picker/file-picker.component.d.ts.map +1 -1
- package/core/forms/validation-pattern.d.ts +8 -0
- package/core/forms/validation-pattern.d.ts.map +1 -1
- package/esm2022/alarms/alarms-view.service.mjs +3 -1
- package/esm2022/alarms/alarms.component.mjs +2 -2
- package/esm2022/assets-navigator/asset-selector/asset-selector.component.mjs +3 -3
- package/esm2022/context-dashboard/context-dashboard.component.mjs +8 -2
- package/esm2022/core/common/forOf.directive.mjs +5 -1
- package/esm2022/core/file-picker/file-picker.component.mjs +7 -5
- package/esm2022/core/forms/validation-pattern.mjs +9 -1
- package/esm2022/core/navigator/navigator-bottom/navigator-bottom.component.mjs +3 -3
- package/esm2022/operations/operations-list/operations-list-item.component.mjs +14 -6
- package/esm2022/operations/operations-list/operations-list.component.mjs +13 -5
- package/esm2022/repository/configuration/list/configuration-detail.component.mjs +5 -4
- package/esm2022/repository/firmware/list/add-firmware-modal.component.mjs +5 -4
- package/esm2022/repository/software/list/add-software-modal.component.mjs +5 -4
- package/fesm2022/c8y-ngx-components-alarms.mjs +3 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +2 -2
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +6 -0
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +25 -9
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +10 -9
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +4 -3
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +4 -3
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +84 -71
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +10 -4
- package/locales/es.po +10 -4
- package/locales/fr.po +10 -4
- package/locales/ja_JP.po +10 -5
- package/locales/ko.po +10 -5
- package/locales/locales.pot +8 -2
- package/locales/nl.po +10 -4
- package/locales/pl.po +10 -4
- package/locales/pt_BR.po +10 -4
- package/locales/zh_CN.po +10 -5
- package/locales/zh_TW.po +10 -5
- package/operations/operations-list/operations-list-item.component.d.ts +3 -1
- package/operations/operations-list/operations-list-item.component.d.ts.map +1 -1
- package/operations/operations-list/operations-list.component.d.ts +1 -0
- package/operations/operations-list/operations-list.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/repository/configuration/list/configuration-detail.component.d.ts +2 -1
- package/repository/configuration/list/configuration-detail.component.d.ts.map +1 -1
- package/repository/firmware/list/add-firmware-modal.component.d.ts +2 -1
- package/repository/firmware/list/add-firmware-modal.component.d.ts.map +1 -1
- package/repository/software/list/add-software-modal.component.d.ts +2 -1
- package/repository/software/list/add-software-modal.component.d.ts.map +1 -1
|
@@ -312,7 +312,7 @@ export class AssetSelectorComponent extends AssetSelectorBase {
|
|
|
312
312
|
multi: true
|
|
313
313
|
},
|
|
314
314
|
AssetSelectorService
|
|
315
|
-
], viewQueries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom p-r-16 p-l-16 sticky-top\"\n [ngStyle]=\"{ 'z-index': config.singleColumn && config.search ? '30' : '20' }\"\n #header\n [ngClass]=\"{\n 'p-absolute miller-column__selection d-flex flex-wrap a-i-center': config.view === 'miller',\n 'miller-column__search': config.search,\n 'miller-column__multi': config.multi\n }\"\n *ngIf=\"\n !selectedDevice &&\n index === 0 &&\n (config.search || config.multi || config.label?.length || config.showSelected)\n \"\n>\n <p\n class=\"text-medium flex-no-shrink a-s-center\"\n [ngClass]=\"{\n 'm-b-4': config.search && root && config.singleColumn,\n 'm-r-8': !config.singleColumn && !config.search,\n 'fit-w': config.singleColumn\n }\"\n *ngIf=\"config.label?.length\"\n >\n {{ config.label | translate }}\n </p>\n <c8y-search-input\n [ngStyle]=\"{ 'min-width': !config.singleColumn && config.label.length ? '50%' : 'inherit' }\"\n *ngIf=\"config.search && root\"\n (onClick)=\"onSearchResultClick($event)\"\n (reset)=\"onSearchResultReset($event)\"\n [mode]=\"'select'\"\n [container]=\"container\"\n [groupsOnly]=\"config.groupsOnly\"\n [ngClass]=\"{\n 'm-l-auto': !config.singleColumn && config.label.length,\n 'fit-w': config.singleColumn || !config.label.length\n }\"\n ></c8y-search-input>\n <div\n class=\"bg-inherit d-flex gap-4 fit-w\"\n *ngIf=\"config.showSelected\"\n [ngClass]=\"{ 'm-t-4': config.search }\"\n >\n <span class=\"text-label-small m-r-4 a-s-center l-h-1\">{{ 'Selected' | translate }}</span>\n <div class=\"flex-grow inner-scroll d-flex gap-4 a-i-center\">\n <ng-container *ngIf=\"!selected.length\">\n <em class=\"text-12 text-muted d-flex a-i-center fit-h-20\">{{ 'None' | translate }}</em>\n </ng-container>\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let selectedItem of selected\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ selectedItem.name }}\"\n [disabled]=\"disabled\"\n type=\"button\"\n (click)=\"config.multi ? deselect(selectedItem) : deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ selectedItem.name || (ASSET_CONST | translate: { assetId: selectedItem.id }) }}\n </span>\n </div>\n </div>\n</div>\n\n<div\n class=\"p-r-16\"\n *ngIf=\"selectedDevice\"\n>\n <div class=\"d-flex p-b-4\">\n <p\n class=\"text-medium p-t-8 m-r-8\"\n *ngIf=\"selectedDevice; else multiAssets\"\n >\n {{ 'Selected asset' | translate }}\n </p>\n <ng-template #multiAssets>\n <p class=\"text-medium m-r-8\">{{ 'Selected assets' | translate }}</p>\n </ng-template>\n <button\n class=\"btn btn-default btn-xs a-s-center m-t-4 m-l-auto\"\n title=\"{{ 'Change' | translate }}\"\n type=\"button\"\n (click)=\"clearSelectedDevices()\"\n >\n {{ 'Change' | translate }}\n </button>\n </div>\n <div class=\"d-flex\">\n <i\n class=\"text-success p-l-0 p-r-8\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <i\n class=\"m-r-4 icon-20\"\n [c8yIcon]=\"selectedDevice | getGroupIcon | async\"\n ></i>\n <span>{{ selectedDevice.name }}</span>\n </div>\n</div>\n\n<!-- miller columns header -->\n<div\n class=\"miller-column__header sticky-top bg-inherit separator-bottom\"\n *ngIf=\"\n config.view === 'miller' &&\n ((config.showFilter && !rootNode.root) || config.columnHeaders) &&\n !selectedDevice\n \"\n [ngClass]=\"{ 'p-t-8': config.search }\"\n>\n <
|
|
315
|
+
], viewQueries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom p-r-16 p-l-16 sticky-top\"\n [ngStyle]=\"{ 'z-index': config.singleColumn && config.search ? '30' : '20' }\"\n #header\n [ngClass]=\"{\n 'p-absolute miller-column__selection d-flex flex-wrap a-i-center': config.view === 'miller',\n 'miller-column__search': config.search,\n 'miller-column__multi': config.multi\n }\"\n *ngIf=\"\n !selectedDevice &&\n index === 0 &&\n (config.search || config.multi || config.label?.length || config.showSelected)\n \"\n>\n <p\n class=\"text-medium flex-no-shrink a-s-center\"\n [ngClass]=\"{\n 'm-b-4': config.search && root && config.singleColumn,\n 'm-r-8': !config.singleColumn && !config.search,\n 'fit-w': config.singleColumn\n }\"\n *ngIf=\"config.label?.length\"\n >\n {{ config.label | translate }}\n </p>\n <c8y-search-input\n [ngStyle]=\"{ 'min-width': !config.singleColumn && config.label.length ? '50%' : 'inherit' }\"\n *ngIf=\"config.search && root\"\n (onClick)=\"onSearchResultClick($event)\"\n (reset)=\"onSearchResultReset($event)\"\n [mode]=\"'select'\"\n [container]=\"container\"\n [groupsOnly]=\"config.groupsOnly\"\n [ngClass]=\"{\n 'm-l-auto': !config.singleColumn && config.label.length,\n 'fit-w': config.singleColumn || !config.label.length\n }\"\n ></c8y-search-input>\n <div\n class=\"bg-inherit d-flex gap-4 fit-w\"\n *ngIf=\"config.showSelected\"\n [ngClass]=\"{ 'm-t-4': config.search }\"\n >\n <span class=\"text-label-small m-r-4 a-s-center l-h-1\">{{ 'Selected' | translate }}</span>\n <div class=\"flex-grow inner-scroll d-flex gap-4 a-i-center\">\n <ng-container *ngIf=\"!selected.length\">\n <em class=\"text-12 text-muted d-flex a-i-center fit-h-20\">{{ 'None' | translate }}</em>\n </ng-container>\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let selectedItem of selected\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ selectedItem.name }}\"\n [disabled]=\"disabled\"\n type=\"button\"\n (click)=\"config.multi ? deselect(selectedItem) : deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ selectedItem.name || (ASSET_CONST | translate: { assetId: selectedItem.id }) }}\n </span>\n </div>\n </div>\n</div>\n\n<div\n class=\"p-r-16\"\n *ngIf=\"selectedDevice\"\n>\n <div class=\"d-flex p-b-4\">\n <p\n class=\"text-medium p-t-8 m-r-8\"\n *ngIf=\"selectedDevice; else multiAssets\"\n >\n {{ 'Selected asset' | translate }}\n </p>\n <ng-template #multiAssets>\n <p class=\"text-medium m-r-8\">{{ 'Selected assets' | translate }}</p>\n </ng-template>\n <button\n class=\"btn btn-default btn-xs a-s-center m-t-4 m-l-auto\"\n title=\"{{ 'Change' | translate }}\"\n type=\"button\"\n (click)=\"clearSelectedDevices()\"\n >\n {{ 'Change' | translate }}\n </button>\n </div>\n <div class=\"d-flex\">\n <i\n class=\"text-success p-l-0 p-r-8\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <i\n class=\"m-r-4 icon-20\"\n [c8yIcon]=\"selectedDevice | getGroupIcon | async\"\n ></i>\n <span>{{ selectedDevice.name }}</span>\n </div>\n</div>\n\n<!-- miller columns header -->\n<div\n class=\"miller-column__header sticky-top bg-inherit separator-bottom\"\n *ngIf=\"\n config.view === 'miller' &&\n ((config.showFilter && !rootNode.root) || config.columnHeaders) &&\n !selectedDevice\n \"\n [ngClass]=\"{ 'p-t-8': config.search }\"\n>\n <div class=\"d-flex\" *ngIf=\"config.singleColumn && index !== 0\">\n <i\n class=\"m-r-4\"\n c8yIcon=\"home\"\n ></i>\n <p\n class=\"text-12 text-muted text-truncate text-rtl m-b-4\"\n title=\"{{ rootNode.breadcrumb || rootNode.label | translate }}\"\n >\n {{ rootNode.breadcrumb || rootNode.label | translate }}\n </p>\n </div>\n <div\n class=\"d-flex a-i-center\"\n *ngIf=\"config.columnHeaders || config.singleColumn\"\n >\n <button\n class=\"btn btn-default btn-xs m-r-8 p-t-0 p-b-0 p-l-4 p-r-4 l-h-1\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n *ngIf=\"config.singleColumn && !rootNode.root && index !== 0\"\n (click)=\"back()\"\n >\n <i c8yIcon=\"angle-left\"></i>\n </button>\n <label\n class=\"c8y-radio checkbox-inline m-r-8\"\n *ngIf=\"!rootNode.root && index === 0 && (config.groupsSelectable || !rootNode.isGroup())\"\n >\n <input\n title=\"{{ 'Select group' | translate }}\"\n type=\"radio\"\n (change)=\"select(rootNode.mo)\"\n [checked]=\"isGroupSelected()\"\n />\n <span></span>\n </label>\n\n <i\n class=\"icon-20 c8y-icon-duocolor m-r-4\"\n [c8yIcon]=\"this.rootNode.mo | getGroupIcon: true : this.rootNode.icon | async\"\n *ngIf=\"config.columnHeaders && (config.singleColumn || (!rootNode.root && index === 0))\"\n ></i>\n <p\n class=\"text-truncate\"\n title=\"{{ rootNode.label | translate }}\"\n *ngIf=\"config.columnHeaders\"\n [ngClass]=\"{\n 'text-label-small': !config.singleColumn,\n 'text-medium': config.singleColumn\n }\"\n >\n {{ rootNode.label | translate }}\n </p>\n </div>\n\n <div\n *ngIf=\"!rootNode.root && config.showFilter\"\n [ngClass]=\"{ 'p-t-4': config.columnHeaders }\"\n >\n <div class=\"input-group input-group-sm input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Filter this column\u2026' | translate }}\"\n [(ngModel)]=\"filterText\"\n (keyup.enter)=\"applyFilter('*' + filterText + '*')\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\"{{ 'Apply filter' | translate }}\"\n type=\"button\"\n (click)=\"applyFilter('*' + filterText + '*')\"\n >\n <i c8yIcon=\"filter\"></i>\n </button>\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\" {{ 'Clear filters' | translate }}\"\n type=\"button\"\n (click)=\"clearFilters()\"\n *ngIf=\"filterText.length\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n </div>\n</div>\n\n<c8y-asset-selector-node\n class=\"d-block bg-inherit p-relative\"\n style=\"z-index: 9\"\n *ngIf=\"rootNode && !selectedDevice\"\n [node]=\"rootNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"selected\"\n [multi]=\"config.multi\"\n [view]=\"config.view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn.bind(this)\"\n (isLoadingState)=\"onLoading($event)\"\n (onSelect)=\"onSelect($event)\"\n (onDeselect)=\"onDeselect($event)\"\n [ngClass]=\"{ 'collapse show': !rootNode.root && !rootNode.hidden && config.view !== 'miller' }\"\n></c8y-asset-selector-node>\n", dependencies: [{ kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.SearchInputComponent, selector: "c8y-search-input", inputs: ["mode", "enableCustomTemplatePlaceholder", "customPlaceholder", "externalTerm", "customDataQuery", "container", "groupsOnly"], outputs: ["filter", "search", "reset", "onClick"] }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: ["node", "rootNode", "preselected", "showPath", "multi", "view", "index", "active", "handleNextMillerViewColumn", "disabled"], outputs: ["isLoadingState", "onSelect", "onDeselect"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.GetGroupIconPipe, name: "getGroupIcon" }] }); }
|
|
316
316
|
}
|
|
317
317
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetSelectorComponent, decorators: [{
|
|
318
318
|
type: Component,
|
|
@@ -328,7 +328,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
328
328
|
multi: true
|
|
329
329
|
},
|
|
330
330
|
AssetSelectorService
|
|
331
|
-
], template: "<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom p-r-16 p-l-16 sticky-top\"\n [ngStyle]=\"{ 'z-index': config.singleColumn && config.search ? '30' : '20' }\"\n #header\n [ngClass]=\"{\n 'p-absolute miller-column__selection d-flex flex-wrap a-i-center': config.view === 'miller',\n 'miller-column__search': config.search,\n 'miller-column__multi': config.multi\n }\"\n *ngIf=\"\n !selectedDevice &&\n index === 0 &&\n (config.search || config.multi || config.label?.length || config.showSelected)\n \"\n>\n <p\n class=\"text-medium flex-no-shrink a-s-center\"\n [ngClass]=\"{\n 'm-b-4': config.search && root && config.singleColumn,\n 'm-r-8': !config.singleColumn && !config.search,\n 'fit-w': config.singleColumn\n }\"\n *ngIf=\"config.label?.length\"\n >\n {{ config.label | translate }}\n </p>\n <c8y-search-input\n [ngStyle]=\"{ 'min-width': !config.singleColumn && config.label.length ? '50%' : 'inherit' }\"\n *ngIf=\"config.search && root\"\n (onClick)=\"onSearchResultClick($event)\"\n (reset)=\"onSearchResultReset($event)\"\n [mode]=\"'select'\"\n [container]=\"container\"\n [groupsOnly]=\"config.groupsOnly\"\n [ngClass]=\"{\n 'm-l-auto': !config.singleColumn && config.label.length,\n 'fit-w': config.singleColumn || !config.label.length\n }\"\n ></c8y-search-input>\n <div\n class=\"bg-inherit d-flex gap-4 fit-w\"\n *ngIf=\"config.showSelected\"\n [ngClass]=\"{ 'm-t-4': config.search }\"\n >\n <span class=\"text-label-small m-r-4 a-s-center l-h-1\">{{ 'Selected' | translate }}</span>\n <div class=\"flex-grow inner-scroll d-flex gap-4 a-i-center\">\n <ng-container *ngIf=\"!selected.length\">\n <em class=\"text-12 text-muted d-flex a-i-center fit-h-20\">{{ 'None' | translate }}</em>\n </ng-container>\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let selectedItem of selected\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ selectedItem.name }}\"\n [disabled]=\"disabled\"\n type=\"button\"\n (click)=\"config.multi ? deselect(selectedItem) : deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ selectedItem.name || (ASSET_CONST | translate: { assetId: selectedItem.id }) }}\n </span>\n </div>\n </div>\n</div>\n\n<div\n class=\"p-r-16\"\n *ngIf=\"selectedDevice\"\n>\n <div class=\"d-flex p-b-4\">\n <p\n class=\"text-medium p-t-8 m-r-8\"\n *ngIf=\"selectedDevice; else multiAssets\"\n >\n {{ 'Selected asset' | translate }}\n </p>\n <ng-template #multiAssets>\n <p class=\"text-medium m-r-8\">{{ 'Selected assets' | translate }}</p>\n </ng-template>\n <button\n class=\"btn btn-default btn-xs a-s-center m-t-4 m-l-auto\"\n title=\"{{ 'Change' | translate }}\"\n type=\"button\"\n (click)=\"clearSelectedDevices()\"\n >\n {{ 'Change' | translate }}\n </button>\n </div>\n <div class=\"d-flex\">\n <i\n class=\"text-success p-l-0 p-r-8\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <i\n class=\"m-r-4 icon-20\"\n [c8yIcon]=\"selectedDevice | getGroupIcon | async\"\n ></i>\n <span>{{ selectedDevice.name }}</span>\n </div>\n</div>\n\n<!-- miller columns header -->\n<div\n class=\"miller-column__header sticky-top bg-inherit separator-bottom\"\n *ngIf=\"\n config.view === 'miller' &&\n ((config.showFilter && !rootNode.root) || config.columnHeaders) &&\n !selectedDevice\n \"\n [ngClass]=\"{ 'p-t-8': config.search }\"\n>\n <
|
|
331
|
+
], template: "<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom p-r-16 p-l-16 sticky-top\"\n [ngStyle]=\"{ 'z-index': config.singleColumn && config.search ? '30' : '20' }\"\n #header\n [ngClass]=\"{\n 'p-absolute miller-column__selection d-flex flex-wrap a-i-center': config.view === 'miller',\n 'miller-column__search': config.search,\n 'miller-column__multi': config.multi\n }\"\n *ngIf=\"\n !selectedDevice &&\n index === 0 &&\n (config.search || config.multi || config.label?.length || config.showSelected)\n \"\n>\n <p\n class=\"text-medium flex-no-shrink a-s-center\"\n [ngClass]=\"{\n 'm-b-4': config.search && root && config.singleColumn,\n 'm-r-8': !config.singleColumn && !config.search,\n 'fit-w': config.singleColumn\n }\"\n *ngIf=\"config.label?.length\"\n >\n {{ config.label | translate }}\n </p>\n <c8y-search-input\n [ngStyle]=\"{ 'min-width': !config.singleColumn && config.label.length ? '50%' : 'inherit' }\"\n *ngIf=\"config.search && root\"\n (onClick)=\"onSearchResultClick($event)\"\n (reset)=\"onSearchResultReset($event)\"\n [mode]=\"'select'\"\n [container]=\"container\"\n [groupsOnly]=\"config.groupsOnly\"\n [ngClass]=\"{\n 'm-l-auto': !config.singleColumn && config.label.length,\n 'fit-w': config.singleColumn || !config.label.length\n }\"\n ></c8y-search-input>\n <div\n class=\"bg-inherit d-flex gap-4 fit-w\"\n *ngIf=\"config.showSelected\"\n [ngClass]=\"{ 'm-t-4': config.search }\"\n >\n <span class=\"text-label-small m-r-4 a-s-center l-h-1\">{{ 'Selected' | translate }}</span>\n <div class=\"flex-grow inner-scroll d-flex gap-4 a-i-center\">\n <ng-container *ngIf=\"!selected.length\">\n <em class=\"text-12 text-muted d-flex a-i-center fit-h-20\">{{ 'None' | translate }}</em>\n </ng-container>\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let selectedItem of selected\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ selectedItem.name }}\"\n [disabled]=\"disabled\"\n type=\"button\"\n (click)=\"config.multi ? deselect(selectedItem) : deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ selectedItem.name || (ASSET_CONST | translate: { assetId: selectedItem.id }) }}\n </span>\n </div>\n </div>\n</div>\n\n<div\n class=\"p-r-16\"\n *ngIf=\"selectedDevice\"\n>\n <div class=\"d-flex p-b-4\">\n <p\n class=\"text-medium p-t-8 m-r-8\"\n *ngIf=\"selectedDevice; else multiAssets\"\n >\n {{ 'Selected asset' | translate }}\n </p>\n <ng-template #multiAssets>\n <p class=\"text-medium m-r-8\">{{ 'Selected assets' | translate }}</p>\n </ng-template>\n <button\n class=\"btn btn-default btn-xs a-s-center m-t-4 m-l-auto\"\n title=\"{{ 'Change' | translate }}\"\n type=\"button\"\n (click)=\"clearSelectedDevices()\"\n >\n {{ 'Change' | translate }}\n </button>\n </div>\n <div class=\"d-flex\">\n <i\n class=\"text-success p-l-0 p-r-8\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <i\n class=\"m-r-4 icon-20\"\n [c8yIcon]=\"selectedDevice | getGroupIcon | async\"\n ></i>\n <span>{{ selectedDevice.name }}</span>\n </div>\n</div>\n\n<!-- miller columns header -->\n<div\n class=\"miller-column__header sticky-top bg-inherit separator-bottom\"\n *ngIf=\"\n config.view === 'miller' &&\n ((config.showFilter && !rootNode.root) || config.columnHeaders) &&\n !selectedDevice\n \"\n [ngClass]=\"{ 'p-t-8': config.search }\"\n>\n <div class=\"d-flex\" *ngIf=\"config.singleColumn && index !== 0\">\n <i\n class=\"m-r-4\"\n c8yIcon=\"home\"\n ></i>\n <p\n class=\"text-12 text-muted text-truncate text-rtl m-b-4\"\n title=\"{{ rootNode.breadcrumb || rootNode.label | translate }}\"\n >\n {{ rootNode.breadcrumb || rootNode.label | translate }}\n </p>\n </div>\n <div\n class=\"d-flex a-i-center\"\n *ngIf=\"config.columnHeaders || config.singleColumn\"\n >\n <button\n class=\"btn btn-default btn-xs m-r-8 p-t-0 p-b-0 p-l-4 p-r-4 l-h-1\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n *ngIf=\"config.singleColumn && !rootNode.root && index !== 0\"\n (click)=\"back()\"\n >\n <i c8yIcon=\"angle-left\"></i>\n </button>\n <label\n class=\"c8y-radio checkbox-inline m-r-8\"\n *ngIf=\"!rootNode.root && index === 0 && (config.groupsSelectable || !rootNode.isGroup())\"\n >\n <input\n title=\"{{ 'Select group' | translate }}\"\n type=\"radio\"\n (change)=\"select(rootNode.mo)\"\n [checked]=\"isGroupSelected()\"\n />\n <span></span>\n </label>\n\n <i\n class=\"icon-20 c8y-icon-duocolor m-r-4\"\n [c8yIcon]=\"this.rootNode.mo | getGroupIcon: true : this.rootNode.icon | async\"\n *ngIf=\"config.columnHeaders && (config.singleColumn || (!rootNode.root && index === 0))\"\n ></i>\n <p\n class=\"text-truncate\"\n title=\"{{ rootNode.label | translate }}\"\n *ngIf=\"config.columnHeaders\"\n [ngClass]=\"{\n 'text-label-small': !config.singleColumn,\n 'text-medium': config.singleColumn\n }\"\n >\n {{ rootNode.label | translate }}\n </p>\n </div>\n\n <div\n *ngIf=\"!rootNode.root && config.showFilter\"\n [ngClass]=\"{ 'p-t-4': config.columnHeaders }\"\n >\n <div class=\"input-group input-group-sm input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Filter this column\u2026' | translate }}\"\n [(ngModel)]=\"filterText\"\n (keyup.enter)=\"applyFilter('*' + filterText + '*')\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\"{{ 'Apply filter' | translate }}\"\n type=\"button\"\n (click)=\"applyFilter('*' + filterText + '*')\"\n >\n <i c8yIcon=\"filter\"></i>\n </button>\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\" {{ 'Clear filters' | translate }}\"\n type=\"button\"\n (click)=\"clearFilters()\"\n *ngIf=\"filterText.length\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n </div>\n</div>\n\n<c8y-asset-selector-node\n class=\"d-block bg-inherit p-relative\"\n style=\"z-index: 9\"\n *ngIf=\"rootNode && !selectedDevice\"\n [node]=\"rootNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"selected\"\n [multi]=\"config.multi\"\n [view]=\"config.view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn.bind(this)\"\n (isLoadingState)=\"onLoading($event)\"\n (onSelect)=\"onSelect($event)\"\n (onDeselect)=\"onDeselect($event)\"\n [ngClass]=\"{ 'collapse show': !rootNode.root && !rootNode.hidden && config.view !== 'miller' }\"\n></c8y-asset-selector-node>\n" }]
|
|
332
332
|
}], ctorParameters: () => [{ type: i1.GroupNodeService }, { type: i2.InventoryService }, { type: i3.AssetSelectorService }, { type: i0.ChangeDetectorRef }], propDecorators: { config: [{
|
|
333
333
|
type: Input
|
|
334
334
|
}], active: [{
|
|
@@ -363,4 +363,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
363
363
|
type: ViewChild,
|
|
364
364
|
args: ['header']
|
|
365
365
|
}] } });
|
|
366
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXNzZXRzLW5hdmlnYXRvci9hc3NldC1zZWxlY3Rvci9hc3NldC1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9hc3NldHMtbmF2aWdhdG9yL2Fzc2V0LXNlbGVjdG9yL2Fzc2V0LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQStCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUdMLHNCQUFzQixFQUN2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7QUFFOUM7O0dBRUc7QUFr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QUFLO2dCQUlHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFJSSxVQUFVO3NCQUFuQixNQUFNO2dCQUlHLGVBQWU7c0JBQXhCLE1BQU07Z0JBSUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFJRyxNQUFNO3NCQUFmLE1BQU07Z0JBcUJDLE1BQU07c0JBRGIsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUlkZW50aWZpZWQsIElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFzc2V0U2VsZWN0b3JCYXNlIH0gZnJvbSAnLi9hc3NldC1zZWxlY3Rvci1iYXNlJztcbmltcG9ydCB7XG4gIEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQsXG4gIEFzc2V0U2VsZWN0b3JPcHRpb25zLFxuICBDT05GSUdfT1BUSU9OU19ERUZBVUxUXG59IGZyb20gJy4vYXNzZXQtc2VsZWN0b3IubW9kZWwnO1xuaW1wb3J0IHsgQXNzZXRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuL2Fzc2V0LXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JvdXBOb2RlIH0gZnJvbSAnLi9ncm91cC1ub2RlJztcbmltcG9ydCB7IEdyb3VwTm9kZVNlcnZpY2UgfSBmcm9tICcuL2dyb3VwLW5vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBVbmFzc2lnbmVkRGV2aWNlc05vZGUgfSBmcm9tICcuL3VuYXNzaWduZWQtZGV2aWNlcy1ub2RlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuLyoqXG4gKiBEaXNwbGF5cyBhIGhpZXJhcmNoaWNhbCB0cmVlIHNlbGVjdG9yIGZvciBhc3NldHMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hc3NldC1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBc3NldFNlbGVjdG9yQ29tcG9uZW50KVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFzc2V0U2VsZWN0b3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIEFzc2V0U2VsZWN0b3JTZXJ2aWNlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXNzZXRTZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIEFzc2V0U2VsZWN0b3JCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIENvbmZpZyBvYmplY3QgY29udGFpbmluZyBhbGwgb3B0aW9ucyBmb3IgdGhlIGFzc2V0IHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiBBc3NldFNlbGVjdG9yT3B0aW9ucyA9IHt9O1xuICAvKipcbiAgICogRGVmaW5lcyB0aGUgbm9kZSwgd2hpY2ggc2hvdWxkIGJlIGRpc3BsYXllZCBhcyBhY3RpdmUuXG4gICAqL1xuICBASW5wdXQoKSBhY3RpdmU6IEdyb3VwTm9kZTtcbiAgLyoqXG4gICAqIFVzZWQgb25seSBmb3IgbWlsbGVyLXZpZXcsIGRpc3BsYXlzIHRoZSBjb2x1bW4gbGV2ZWwgZm9yIHRoZSBjdXJyZW50IG5vZGUuXG4gICAqIEUuZyBpZiB0aGUgaW5kZXggaXMgb25lLCB0aGlzIHdpbGwgYmUgc2Vjb25kIGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpIGluZGV4ID0gMDtcbiAgLyoqXG4gICAqIFRoZSBhc3NldCB0byB1c2UgYXMgcm9vdC5cbiAgICovXG4gIEBJbnB1dCgpIGFzc2V0OiBJSWRlbnRpZmllZCA9IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBzZWxlY3RlZCBkZXZpY2UuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RlZERldmljZTogSU1hbmFnZWRPYmplY3QgPSB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBwcmVkZWZpbmVkIG5vZGVzLlxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWQ6IEFycmF5PFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+PiB8IElJZGVudGlmaWVkW10gfCBJSWRlbnRpZmllZCA9IFtdO1xuICAvKipcbiAgICogVGhlIG5vZGUgdG8gdXNlIGFzIHJvb3QuIFlvdSBjYW4gZWl0aGVyIHNldCB0aGlzLCBvciB0aGUgYXNzZXQgdG8gc3RhcnQgZnJvbS5cbiAgICovXG4gIEBJbnB1dCgpIHJvb3ROb2RlOiBHcm91cE5vZGU7XG4gIC8qKlxuICAgKiBBbGwgY3VycmVudGx5IHNlbGVjdGVkIGFzc2V0cy5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IElJZGVudGlmaWVkW10gfCBJSWRlbnRpZmllZCA9IFtdO1xuICBASW5wdXQoKSBjb250YWluZXI6ICcnIHwgJ2JvZHknID0gJ2JvZHknO1xuICBASW5wdXQoKSBpc05vZGVTZWxlY3RhYmxlOiBib29sZWFuIHwgKChub2RlOiBJSWRlbnRpZmllZCkgPT4gYm9vbGVhbikgPSB0cnVlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAvKipcbiAgICogRW1pdHMgaWYgb25lIGl0ZW0gd2FzIHNlbGVjdGVkIChhbGwgY3VycmVudGx5IHNlbGVjdGVkIG5vZGVzKS5cbiAgICovXG4gIEBPdXRwdXQoKSBvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBc3NldFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuICAvKipcbiAgICogRW1pdHMgaWYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBhc3NldCBpcyBjbGVhcmVkLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uQ2xlYXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIFVzZWQgb25seSBmb3IgbWlsbGVyIHZpZXcuIEVtaXQgdGhlIHNlbGVjdGVkIG5vZGUgYW5kIHVzZSBpdCBhcyBhICdyb290Tm9kZScgZm9yIHRoZSBuZXcgY29sdW1uLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uUm93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBjdXJyZW50IGxvYWRpbmcgc3RhdGUgb2YgdGhlIG5vZGUuXG4gICAqL1xuICBAT3V0cHV0KCkgb25Mb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBmaWx0ZXIgYXBwbGllZC5cbiAgICovXG4gIGZpbHRlclRleHQgPSAnJztcbiAgLyoqXG4gICAqIERpc3BsYXlzIHRoZSBnbG9iYWwgc2VhcmNoIGF0IGFsbCB0aW1lcyBpZiB0aGUgbWlsbGVyIHZpZXcgaXMgdXNlZFxuICAgKiBvbiByb290IGdyb3VwIGxldmVsLlxuICAgKi9cbiAgcm9vdCA9IGZhbHNlO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgaGVhZGVyIGhpZ2h0IGluIHBpeGVsLlxuICAgKi9cbiAgZ2V0SGVhZGVySGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG4gIHJlYWRvbmx5IEFTU0VUX0NPTlNUID0gZ2V0dGV4dCgnQXNzZXQge3sgYXNzZXRJZCB9fScpO1xuXG4gIEBWaWV3Q2hpbGQoJ2hlYWRlcicpXG4gIHByaXZhdGUgaGVhZGVyOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlIG9ubHkgRElcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBncm91cE5vZGVTZXJ2aWNlOiBHcm91cE5vZGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFzc2V0U2VsZWN0b3JTZXJ2aWNlOiBBc3NldFNlbGVjdG9yU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKGdyb3VwTm9kZVNlcnZpY2UsIGludmVudG9yeSwgYXNzZXRTZWxlY3RvclNlcnZpY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGVuIGEgbm9kZSB3YXMgc2VsZWN0ZWQsIGlmIGEgbmV3IGNvbHVtbiBuZWVkcyB0byBiZSBhZGRlZC5cbiAgICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdGhhdCB3YXMgY2xpY2tlZC5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoaXMgbm9kZS5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY2xpY2sgd2FzIGhhbmRsZWQgYW5kIGEgbmV3IGNvbHVtbiB3YXMgYWRkZWQuXG4gICAqL1xuICBoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbihub2RlOiBHcm91cE5vZGUsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBub2RlQ29weSA9IE9iamVjdC5jcmVhdGUobm9kZSk7XG4gICAgY29uc3QgaXNTYW1lQXNSb290ID0gdGhpcy5yb290Tm9kZSA9PT0gbm9kZTtcbiAgICBjb25zdCBpc1VuYXNzaWduZWREZXZpY2VzTm9kZSA9IG5vZGUudG9TdHJpbmcoKSA9PT0gVW5hc3NpZ25lZERldmljZXNOb2RlLk5BTUU7XG4gICAgY29uc3QgaXNOZXdDb2x1bW5OZWVkZWQgPVxuICAgICAgIWlzU2FtZUFzUm9vdCAmJiAobm9kZS5pc0dyb3VwKCkgfHwgaXNVbmFzc2lnbmVkRGV2aWNlc05vZGUgfHwgbm9kZS5oYXNDaGlsZERldmljZXMoKSk7XG5cbiAgICBpZiAoaXNOZXdDb2x1bW5OZWVkZWQpIHtcbiAgICAgIHRoaXMub25Sb3dTZWxlY3RlZC5lbWl0KHsgbm9kZUNvcHksIGluZGV4IH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFzc2V0U2VsZWN0b3JTZXJ2aWNlLnNldElzTm9kZVNlbGVjdGFibGUodGhpcy5pc05vZGVTZWxlY3RhYmxlKTtcbiAgICBpZiAodGhpcy5pbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5jb25maWcgPSB7IC4uLkNPTkZJR19PUFRJT05TX0RFRkFVTFQsIC4uLnRoaXMuY29uZmlnIH07XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZFJlc2V0TmFtZUZpbHRlciA9XG4gICAgICB0aGlzLnJvb3ROb2RlICYmIHRoaXMucm9vdE5vZGUubW8gJiYgdGhpcy5jb25maWcudmlldyA9PT0gJ21pbGxlcic7XG4gICAgaWYgKHNob3VsZFJlc2V0TmFtZUZpbHRlcikge1xuICAgICAgYXdhaXQgdGhpcy5hcHBseUZpbHRlcignJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNPbmx5QXNzZXROb2RlRGVmaW5lZCA9IHRoaXMuYXNzZXQ7XG4gICAgaWYgKGlzT25seUFzc2V0Tm9kZURlZmluZWQpIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmFnZWRPYmplY3RSb290Tm9kZSh0aGlzLmFzc2V0KTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0FueU5vZGVEZWZpbmVkID1cbiAgICAgICF0aGlzLnJvb3ROb2RlICYmICghdGhpcy5hc3NldCB8fCBPYmplY3Qua2V5cyh0aGlzLmFzc2V0KS5sZW5ndGggPT09IDApO1xuICAgIGlmIChpc0FueU5vZGVEZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvb3ROb2RlID0gdGhpcy5jcmVhdGVEZWZhdWx0Um9vdE5vZGUoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy5zaG93VW5hc3NpZ25lZERldmljZXMgJiZcbiAgICAgICghdGhpcy5hc3NldCB8fCBPYmplY3Qua2V5cyh0aGlzLmFzc2V0KS5sZW5ndGggPT09IDApICYmXG4gICAgICB0aGlzLnJvb3ROb2RlLnJvb3RcbiAgICApIHtcbiAgICAgIHRoaXMucm9vdE5vZGUuYWRkKFxuICAgICAgICBuZXcgVW5hc3NpZ25lZERldmljZXNOb2RlKHRoaXMuZ3JvdXBOb2RlU2VydmljZSwge1xuICAgICAgICAgIHNob3dDaGlsZERldmljZXM6IHRoaXMuY29uZmlnLnNob3dDaGlsZERldmljZXNcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucm9vdCA9IHRoaXMucm9vdE5vZGUucm9vdDtcbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5pc05vZGVTZWxlY3RhYmxlKSB7XG4gICAgICB0aGlzLmFzc2V0U2VsZWN0b3JTZXJ2aWNlLnNldElzTm9kZVNlbGVjdGFibGUodGhpcy5pc05vZGVTZWxlY3RhYmxlKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlcy5hc3NldCAmJlxuICAgICAgY2hhbmdlcy5hc3NldC5jdXJyZW50VmFsdWUgJiZcbiAgICAgIE9iamVjdC5rZXlzKGNoYW5nZXMuYXNzZXQuY3VycmVudFZhbHVlKS5sZW5ndGggIT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmFnZWRPYmplY3RSb290Tm9kZShjaGFuZ2VzLmFzc2V0LmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaGVhZGVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZ2V0SGVhZGVySGVpZ2h0JC5uZXh0KHRoaXMuaGVhZGVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0SGVhZGVySGVpZ2h0JC5uZXh0KDApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcm9vdCB0byBvbmUgbGV2ZWwgYmFjay5cbiAgICovXG4gIGJhY2soKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4IC0gMTtcbiAgICBjb25zdCBub2RlQ29weSA9IE9iamVjdC5jcmVhdGUodGhpcy5yb290Tm9kZS5wYXJlbnRzWzBdKTtcbiAgICB0aGlzLm9uUm93U2VsZWN0ZWQuZW1pdCh7IG5vZGVDb3B5LCBpbmRleCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGN1cnJlbnQgZmlsdGVyLlxuICAgKi9cbiAgY2xlYXJGaWx0ZXJzKCkge1xuICAgIHRoaXMuZmlsdGVyVGV4dCA9ICcnO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIoJycpO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZERldmljZXMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZERldmljZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcGx5RmlsdGVyKCcnKTtcbiAgICB0aGlzLm9uQ2xlYXJTZWxlY3RlZC5lbWl0KCk7XG4gIH1cblxuICBpc0dyb3VwU2VsZWN0ZWQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQuc29tZShzZWxlY3RlZE5vZGUgPT4gc2VsZWN0ZWROb2RlLmlkID09PSB0aGlzLnJvb3ROb2RlLm1vPy5pZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBncm91cE5hbWVGaWx0ZXIobmFtZUZpbHRlcjogc3RyaW5nLCBtb0lkLCBzaG93VW5hc3NpZ25lZERldmljZXM/OiBib29sZWFuKSB7XG4gICAgaWYgKG5hbWVGaWx0ZXIpIHtcbiAgICAgIGNvbnN0IGZpbHRlckJ5TmFtZSA9IHNob3dVbmFzc2lnbmVkRGV2aWNlc1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIF9fZmlsdGVyOiB7XG4gICAgICAgICAgICAgIG5hbWU6IG5hbWVGaWx0ZXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfX29yZGVyYnk6IFt7IG5hbWU6IDEgfV1cbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgICAgICAgbmFtZTogbmFtZUZpbHRlcixcbiAgICAgICAgICAgICAgX19ieWdyb3VwaWQ6IG1vSWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuYXNzZXRTZWxlY3RvclNlcnZpY2UucXVlcmllc1V0aWwuYnVpbGRRdWVyeShmaWx0ZXJCeU5hbWUpO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0ge1xuICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgX19ieWdyb3VwaWQ6IG1vSWRcbiAgICAgIH0sXG4gICAgICBfX29yZGVyYnk6IFt7IG5hbWU6IDEgfV1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFzc2V0U2VsZWN0b3JTZXJ2aWNlLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoZGVmYXVsdEZpbHRlcik7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhIGZpbHRlci5cbiAgICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRvIGFwcGx5LlxuICAgKi9cbiAgYXN5bmMgYXBwbHlGaWx0ZXIoZmlsdGVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJvb3ROb2RlLmZpbHRlclF1ZXJ5JC5uZXh0KFxuICAgICAgdGhpcy5ncm91cE5hbWVGaWx0ZXIoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgdGhpcy5yb290Tm9kZS5tby5pZCxcbiAgICAgICAgdGhpcy5pc1VuYXNzaWduZWREZXZpY2VzTm9kZSgpID8gdHJ1ZSA6IGZhbHNlXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnJvb3ROb2RlLnJlZnJlc2goKTtcbiAgICB0aGlzLm9uTG9hZC5lbWl0KHtcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBmaWx0ZXJUZXh0OiB0aGlzLmZpbHRlclRleHQsXG4gICAgICBpbmRleDogdGhpcy5pbmRleCxcbiAgICAgIHNlbGVjdGVkRGV2aWNlOiB0aGlzLnNlbGVjdGVkRGV2aWNlXG4gICAgfSk7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIFVuYXNzaWduZWREZXZpY2Ugbm9kZSBpcyB0aGUgcm9vdE5vZGUuXG4gICAqL1xuICBpc1VuYXNzaWduZWREZXZpY2VzTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb290Tm9kZS50b1N0cmluZygpID09PSBVbmFzc2lnbmVkRGV2aWNlc05vZGUuTkFNRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciByZXNldHMgdGhlIHNlYXJjaCByZXN1bHQuXG4gICAqL1xuICBvblNlYXJjaFJlc3VsdFJlc2V0KHNlbGVjdGVkSXRlbSkge1xuICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRSb290Tm9kZSgpO1xuICAgICAgaWYgKHRoaXMuY29uZmlnLnNob3dVbmFzc2lnbmVkRGV2aWNlcykge1xuICAgICAgICB0aGlzLnJvb3ROb2RlLmFkZChcbiAgICAgICAgICBuZXcgVW5hc3NpZ25lZERldmljZXNOb2RlKHRoaXMuZ3JvdXBOb2RlU2VydmljZSwge1xuICAgICAgICAgICAgc2hvd0NoaWxkRGV2aWNlczogdGhpcy5jb25maWcuc2hvd0NoaWxkRGV2aWNlc1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb25maWcudmlldyA9PT0gJ21pbGxlcicpIHtcbiAgICAgICAgdGhpcy5vblJvd1NlbGVjdGVkLmVtaXQoeyByb290OiB0cnVlIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJvb3ROb2RlLmNsaWNrKHsgb3BlbjogdHJ1ZSB9KTtcbiAgICAgIHRoaXMucm9vdE5vZGUubm9kZXNGZXRjaGVkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmNkLmRldGVjdENoYW5nZXMoKSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnZpZXcgPT09ICd0cmVlJykge1xuICAgICAgICB0aGlzLnJvb3ROb2RlLm9wZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgaWYgdGhlIHVzZXIgY2xpY2tzIG9uIGEgc2VhcmNoIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIG9uU2VhcmNoUmVzdWx0Q2xpY2sobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgY2FuU2VsZWN0Tm9kZSA9IHRoaXMuY29uZmlnLmdyb3Vwc1NlbGVjdGFibGUgfHwgIXRoaXMuZ3JvdXBOb2RlU2VydmljZS5pc0dyb3VwKG1vKTtcbiAgICBpZiAodGhpcy5jb25maWcudmlldyA9PT0gJ21pbGxlcicpIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmFnZWRPYmplY3RSb290Tm9kZShtbyk7XG4gICAgICB0aGlzLnJvb3ROb2RlLmNsaWNrKHsgb3BlbjogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IG5vZGVDb3B5ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnJvb3ROb2RlKTtcbiAgICAgIHRoaXMub25Sb3dTZWxlY3RlZC5lbWl0KHtcbiAgICAgICAgbm9kZUNvcHksXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBzZWxlY3RlZERldmljZXM6IHRoaXMuc2VsZWN0ZWREZXZpY2UsXG4gICAgICAgIHJvb3Q6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29uZmlnLm11bHRpKSB7XG4gICAgICB0aGlzLmRlc2VsZWN0QWxsKCk7XG4gICAgfVxuICAgIGlmIChjYW5TZWxlY3ROb2RlKSB7XG4gICAgICB0aGlzLnNlbGVjdChtbyk7XG4gICAgfVxuICB9XG5cbiAgb25Mb2FkaW5nKGlzTG9hZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMub25Mb2FkLmVtaXQoeyBsb2FkaW5nOiBpc0xvYWRpbmcsIGZpbHRlclRleHQ6IHRoaXMuZmlsdGVyVGV4dCB9KTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25TZWxlY3QobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5zZWxlY3QobW8pO1xuICB9XG5cbiAgb25EZXNlbGVjdChjb25maWc6IHsgZGVzZWxlY3RNb2RlOiAnc2luZ2xlJyB8ICdhbGwnOyBtbzogSU1hbmFnZWRPYmplY3QgfSkge1xuICAgIHN3aXRjaCAoY29uZmlnPy5kZXNlbGVjdE1vZGUpIHtcbiAgICAgIGNhc2UgJ3NpbmdsZSc6XG4gICAgICAgIHRoaXMuZGVzZWxlY3QoY29uZmlnLm1vKTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhbGwnOlxuICAgICAgICB0aGlzLmRlc2VsZWN0QWxsKGNvbmZpZy5tbyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImJnLWluaGVyaXQgcC10LTggcC1iLTggc2VwYXJhdG9yLWJvdHRvbSBwLXItMTYgcC1sLTE2IHN0aWNreS10b3BcIlxuICBbbmdTdHlsZV09XCJ7ICd6LWluZGV4JzogY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBjb25maWcuc2VhcmNoID8gJzMwJyA6ICcyMCcgfVwiXG4gICNoZWFkZXJcbiAgW25nQ2xhc3NdPVwie1xuICAgICdwLWFic29sdXRlIG1pbGxlci1jb2x1bW5fX3NlbGVjdGlvbiBkLWZsZXggZmxleC13cmFwIGEtaS1jZW50ZXInOiBjb25maWcudmlldyA9PT0gJ21pbGxlcicsXG4gICAgJ21pbGxlci1jb2x1bW5fX3NlYXJjaCc6IGNvbmZpZy5zZWFyY2gsXG4gICAgJ21pbGxlci1jb2x1bW5fX211bHRpJzogY29uZmlnLm11bHRpXG4gIH1cIlxuICAqbmdJZj1cIlxuICAgICFzZWxlY3RlZERldmljZSAmJlxuICAgIGluZGV4ID09PSAwICYmXG4gICAgKGNvbmZpZy5zZWFyY2ggfHwgY29uZmlnLm11bHRpIHx8IGNvbmZpZy5sYWJlbD8ubGVuZ3RoIHx8IGNvbmZpZy5zaG93U2VsZWN0ZWQpXG4gIFwiXG4+XG4gIDxwXG4gICAgY2xhc3M9XCJ0ZXh0LW1lZGl1bSBmbGV4LW5vLXNocmluayBhLXMtY2VudGVyXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnbS1iLTQnOiBjb25maWcuc2VhcmNoICYmIHJvb3QgJiYgY29uZmlnLnNpbmdsZUNvbHVtbixcbiAgICAgICdtLXItOCc6ICFjb25maWcuc2luZ2xlQ29sdW1uICYmICFjb25maWcuc2VhcmNoLFxuICAgICAgJ2ZpdC13JzogY29uZmlnLnNpbmdsZUNvbHVtblxuICAgIH1cIlxuICAgICpuZ0lmPVwiY29uZmlnLmxhYmVsPy5sZW5ndGhcIlxuICA+XG4gICAge3sgY29uZmlnLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gIDwvcD5cbiAgPGM4eS1zZWFyY2gtaW5wdXRcbiAgICBbbmdTdHlsZV09XCJ7ICdtaW4td2lkdGgnOiAhY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBjb25maWcubGFiZWwubGVuZ3RoID8gJzUwJScgOiAnaW5oZXJpdCcgfVwiXG4gICAgKm5nSWY9XCJjb25maWcuc2VhcmNoICYmIHJvb3RcIlxuICAgIChvbkNsaWNrKT1cIm9uU2VhcmNoUmVzdWx0Q2xpY2soJGV2ZW50KVwiXG4gICAgKHJlc2V0KT1cIm9uU2VhcmNoUmVzdWx0UmVzZXQoJGV2ZW50KVwiXG4gICAgW21vZGVdPVwiJ3NlbGVjdCdcIlxuICAgIFtjb250YWluZXJdPVwiY29udGFpbmVyXCJcbiAgICBbZ3JvdXBzT25seV09XCJjb25maWcuZ3JvdXBzT25seVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ20tbC1hdXRvJzogIWNvbmZpZy5zaW5nbGVDb2x1bW4gJiYgY29uZmlnLmxhYmVsLmxlbmd0aCxcbiAgICAgICdmaXQtdyc6IGNvbmZpZy5zaW5nbGVDb2x1bW4gfHwgIWNvbmZpZy5sYWJlbC5sZW5ndGhcbiAgICB9XCJcbiAgPjwvYzh5LXNlYXJjaC1pbnB1dD5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYmctaW5oZXJpdCBkLWZsZXggZ2FwLTQgZml0LXdcIlxuICAgICpuZ0lmPVwiY29uZmlnLnNob3dTZWxlY3RlZFwiXG4gICAgW25nQ2xhc3NdPVwieyAnbS10LTQnOiBjb25maWcuc2VhcmNoIH1cIlxuICA+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tci00IGEtcy1jZW50ZXIgbC1oLTFcIj57eyAnU2VsZWN0ZWQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3cgaW5uZXItc2Nyb2xsIGQtZmxleCBnYXAtNCBhLWktY2VudGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbGVjdGVkLmxlbmd0aFwiPlxuICAgICAgICA8ZW0gY2xhc3M9XCJ0ZXh0LTEyIHRleHQtbXV0ZWQgZC1mbGV4IGEtaS1jZW50ZXIgZml0LWgtMjBcIj57eyAnTm9uZScgfCB0cmFuc2xhdGUgfX08L2VtPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInRhZyB0YWctLWluZm8gY2hpcFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBzZWxlY3RlZEl0ZW0gb2Ygc2VsZWN0ZWRcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXhzIGJ0bi1jbGVhbiB0ZXh0LTEwXCJcbiAgICAgICAgICB0aXRsZT1cInt7IHNlbGVjdGVkSXRlbS5uYW1lIH19XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJjb25maWcubXVsdGkgPyBkZXNlbGVjdChzZWxlY3RlZEl0ZW0pIDogZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB7eyBzZWxlY3RlZEl0ZW0ubmFtZSB8fCAoQVNTRVRfQ09OU1QgfCB0cmFuc2xhdGU6IHsgYXNzZXRJZDogc2VsZWN0ZWRJdGVtLmlkIH0pIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXZcbiAgY2xhc3M9XCJwLXItMTZcIlxuICAqbmdJZj1cInNlbGVjdGVkRGV2aWNlXCJcbj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBwLWItNFwiPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInRleHQtbWVkaXVtIHAtdC04IG0tci04XCJcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWREZXZpY2U7IGVsc2UgbXVsdGlBc3NldHNcIlxuICAgID5cbiAgICAgIHt7ICdTZWxlY3RlZCBhc3NldCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3A+XG4gICAgPG5nLXRlbXBsYXRlICNtdWx0aUFzc2V0cz5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1tZWRpdW0gbS1yLThcIj57eyAnU2VsZWN0ZWQgYXNzZXRzJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi14cyBhLXMtY2VudGVyIG0tdC00IG0tbC1hdXRvXCJcbiAgICAgIHRpdGxlPVwie3sgJ0NoYW5nZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZERldmljZXMoKVwiXG4gICAgPlxuICAgICAge3sgJ0NoYW5nZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJ0ZXh0LXN1Y2Nlc3MgcC1sLTAgcC1yLThcIlxuICAgICAgW2M4eUljb25dPVwiJ2NoZWNrLWNpcmNsZSdcIlxuICAgID48L2k+XG4gICAgPGlcbiAgICAgIGNsYXNzPVwibS1yLTQgaWNvbi0yMFwiXG4gICAgICBbYzh5SWNvbl09XCJzZWxlY3RlZERldmljZSB8IGdldEdyb3VwSWNvbiB8IGFzeW5jXCJcbiAgICA+PC9pPlxuICAgIDxzcGFuPnt7IHNlbGVjdGVkRGV2aWNlLm5hbWUgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gbWlsbGVyIGNvbHVtbnMgaGVhZGVyIC0tPlxuPGRpdlxuICBjbGFzcz1cIm1pbGxlci1jb2x1bW5fX2hlYWRlciBzdGlja3ktdG9wIGJnLWluaGVyaXQgc2VwYXJhdG9yLWJvdHRvbVwiXG4gICpuZ0lmPVwiXG4gICAgY29uZmlnLnZpZXcgPT09ICdtaWxsZXInICYmXG4gICAgKChjb25maWcuc2hvd0ZpbHRlciAmJiAhcm9vdE5vZGUucm9vdCkgfHwgY29uZmlnLmNvbHVtbkhlYWRlcnMpICYmXG4gICAgIXNlbGVjdGVkRGV2aWNlXG4gIFwiXG4gIFtuZ0NsYXNzXT1cInsgJ3AtdC04JzogY29uZmlnLnNlYXJjaCB9XCJcbj5cbiAgPHBcbiAgICBjbGFzcz1cInRleHQtMTIgdGV4dC1tdXRlZCB0ZXh0LXRydW5jYXRlIG0tYi00XCJcbiAgICB0aXRsZT1cInt7IHJvb3ROb2RlLmJyZWFkY3J1bWIgfHwgcm9vdE5vZGUubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICpuZ0lmPVwiY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBpbmRleCAhPT0gMFwiXG4gID5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICBjOHlJY29uPVwiaG9tZVwiXG4gICAgPjwvaT5cbiAgICB7eyByb290Tm9kZS5icmVhZGNydW1iIHx8IHJvb3ROb2RlLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gIDwvcD5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgICpuZ0lmPVwiY29uZmlnLmNvbHVtbkhlYWRlcnMgfHwgY29uZmlnLnNpbmdsZUNvbHVtblwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4teHMgbS1yLTggcC10LTAgcC1iLTAgcC1sLTQgcC1yLTQgbC1oLTFcIlxuICAgICAgdGl0bGU9XCJ7eyAnQmFjaycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAqbmdJZj1cImNvbmZpZy5zaW5nbGVDb2x1bW4gJiYgIXJvb3ROb2RlLnJvb3QgJiYgaW5kZXggIT09IDBcIlxuICAgICAgKGNsaWNrKT1cImJhY2soKVwiXG4gICAgPlxuICAgICAgPGkgYzh5SWNvbj1cImFuZ2xlLWxlZnRcIj48L2k+XG4gICAgPC9idXR0b24+XG4gICAgPGxhYmVsXG4gICAgICBjbGFzcz1cImM4eS1yYWRpbyBjaGVja2JveC1pbmxpbmUgbS1yLThcIlxuICAgICAgKm5nSWY9XCIhcm9vdE5vZGUucm9vdCAmJiBpbmRleCA9PT0gMCAmJiAoY29uZmlnLmdyb3Vwc1NlbGVjdGFibGUgfHwgIXJvb3ROb2RlLmlzR3JvdXAoKSlcIlxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0aXRsZT1cInt7ICdTZWxlY3QgZ3JvdXAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3Qocm9vdE5vZGUubW8pXCJcbiAgICAgICAgW2NoZWNrZWRdPVwiaXNHcm91cFNlbGVjdGVkKClcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuXG4gICAgPGlcbiAgICAgIGNsYXNzPVwiaWNvbi0yMCBjOHktaWNvbi1kdW9jb2xvciBtLXItNFwiXG4gICAgICBbYzh5SWNvbl09XCJ0aGlzLnJvb3ROb2RlLm1vIHwgZ2V0R3JvdXBJY29uOiB0cnVlIDogdGhpcy5yb290Tm9kZS5pY29uIHwgYXN5bmNcIlxuICAgICAgKm5nSWY9XCJjb25maWcuY29sdW1uSGVhZGVycyAmJiAoY29uZmlnLnNpbmdsZUNvbHVtbiB8fCAoIXJvb3ROb2RlLnJvb3QgJiYgaW5kZXggPT09IDApKVwiXG4gICAgPjwvaT5cbiAgICA8cFxuICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgIHRpdGxlPVwie3sgcm9vdE5vZGUubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgKm5nSWY9XCJjb25maWcuY29sdW1uSGVhZGVyc1wiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICd0ZXh0LWxhYmVsLXNtYWxsJzogIWNvbmZpZy5zaW5nbGVDb2x1bW4sXG4gICAgICAgICd0ZXh0LW1lZGl1bSc6IGNvbmZpZy5zaW5nbGVDb2x1bW5cbiAgICAgIH1cIlxuICAgID5cbiAgICAgIHt7IHJvb3ROb2RlLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgKm5nSWY9XCIhcm9vdE5vZGUucm9vdCAmJiBjb25maWcuc2hvd0ZpbHRlclwiXG4gICAgW25nQ2xhc3NdPVwieyAncC10LTQnOiBjb25maWcuY29sdW1uSGVhZGVycyB9XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBpbnB1dC1ncm91cC1zZWFyY2hcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ0ZpbHRlciB0aGlzIGNvbHVtbuKApicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlclRleHRcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlGaWx0ZXIoJyonICsgZmlsdGVyVGV4dCArICcqJylcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IHAtci04IHAtbC00XCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdBcHBseSBmaWx0ZXInIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXIoJyonICsgZmlsdGVyVGV4dCArICcqJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgYzh5SWNvbj1cImZpbHRlclwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IHAtci04IHAtbC00XCJcbiAgICAgICAgICB0aXRsZT1cIiB7eyAnQ2xlYXIgZmlsdGVycycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiXG4gICAgICAgICAgKm5nSWY9XCJmaWx0ZXJUZXh0Lmxlbmd0aFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48Yzh5LWFzc2V0LXNlbGVjdG9yLW5vZGVcbiAgY2xhc3M9XCJkLWJsb2NrIGJnLWluaGVyaXQgcC1yZWxhdGl2ZVwiXG4gIHN0eWxlPVwiei1pbmRleDogOVwiXG4gICpuZ0lmPVwicm9vdE5vZGUgJiYgIXNlbGVjdGVkRGV2aWNlXCJcbiAgW25vZGVdPVwicm9vdE5vZGVcIlxuICBbcm9vdE5vZGVdPVwicm9vdE5vZGVcIlxuICBbcHJlc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICBbbXVsdGldPVwiY29uZmlnLm11bHRpXCJcbiAgW3ZpZXddPVwiY29uZmlnLnZpZXdcIlxuICBbaW5kZXhdPVwiaW5kZXhcIlxuICBbYWN0aXZlXT1cImFjdGl2ZVwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbl09XCJoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbi5iaW5kKHRoaXMpXCJcbiAgKGlzTG9hZGluZ1N0YXRlKT1cIm9uTG9hZGluZygkZXZlbnQpXCJcbiAgKG9uU2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAob25EZXNlbGVjdCk9XCJvbkRlc2VsZWN0KCRldmVudClcIlxuICBbbmdDbGFzc109XCJ7ICdjb2xsYXBzZSBzaG93JzogIXJvb3ROb2RlLnJvb3QgJiYgIXJvb3ROb2RlLmhpZGRlbiAmJiBjb25maWcudmlldyAhPT0gJ21pbGxlcicgfVwiXG4+PC9jOHktYXNzZXQtc2VsZWN0b3Itbm9kZT5cbiJdfQ==
|
|
366
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXNzZXRzLW5hdmlnYXRvci9hc3NldC1zZWxlY3Rvci9hc3NldC1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9hc3NldHMtbmF2aWdhdG9yL2Fzc2V0LXNlbGVjdG9yL2Fzc2V0LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQStCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUdMLHNCQUFzQixFQUN2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7QUFFOUM7O0dBRUc7QUFrQkgsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGlCQUFpQjtJQTJFM0Q7O09BRUc7SUFDSCxZQUNZLGdCQUFrQyxFQUNsQyxTQUEyQixFQUMzQixvQkFBMEMsRUFDMUMsRUFBcUI7UUFFL0IsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBTC9DLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQWpGakM7O1dBRUc7UUFDTSxXQUFNLEdBQXlCLEVBQUUsQ0FBQztRQUszQzs7O1dBR0c7UUFDTSxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ25COztXQUVHO1FBQ00sVUFBSyxHQUFnQixTQUFTLENBQUM7UUFDeEM7O1dBRUc7UUFDTSxtQkFBYyxHQUFtQixTQUFTLENBQUM7UUFDcEQ7O1dBRUc7UUFDTSxhQUFRLEdBQWlFLEVBQUUsQ0FBQztRQUtyRjs7V0FFRztRQUNNLGtCQUFhLEdBQWdDLEVBQUUsQ0FBQztRQUNoRCxjQUFTLEdBQWdCLE1BQU0sQ0FBQztRQUNoQyxxQkFBZ0IsR0FBK0MsSUFBSSxDQUFDO1FBQ3BFLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDMUI7O1dBRUc7UUFDTyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQTZCLENBQUM7UUFDckU7O1dBRUc7UUFDTyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDckQ7O1dBRUc7UUFDTyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbEQ7O1dBRUc7UUFDTyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMzQzs7V0FFRztRQUNILGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEI7OztXQUdHO1FBQ0gsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUNiOztXQUVHO1FBQ0gsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ25DOztXQUVHO1FBQ0gscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsZ0JBQVcsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQWV0RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwwQkFBMEIsQ0FBQyxJQUFlLEVBQUUsS0FBYTtRQUN2RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDO1FBQzVDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLHFCQUFxQixDQUFDLElBQUksQ0FBQztRQUMvRSxNQUFNLGlCQUFpQixHQUNyQixDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSx1QkFBdUIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUV6RixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM3QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JFLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxzQkFBc0IsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsTUFBTSxxQkFBcUIsR0FDekIsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7UUFDckUsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBRUQsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzFDLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FDcEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMvQyxDQUFDO1FBRUQsSUFDRSxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQjtZQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUNsQixDQUFDO1lBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ2YsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQy9DLGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCO2FBQy9DLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBc0I7UUFDdEMsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELElBQ0UsT0FBTyxDQUFDLEtBQUs7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQ3BELENBQUM7WUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckYsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDYixxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3JFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUk7UUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUM3QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDakYsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQWtCLEVBQUUsSUFBSSxFQUFFLHFCQUErQjtRQUN2RSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxZQUFZLEdBQUcscUJBQXFCO2dCQUN4QyxDQUFDLENBQUM7b0JBQ0UsUUFBUSxFQUFFO3dCQUNSLElBQUksRUFBRSxVQUFVO3FCQUNqQjtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDekI7Z0JBQ0gsQ0FBQyxDQUFDO29CQUNFLFFBQVEsRUFBRTt3QkFDUixJQUFJLEVBQUUsVUFBVTt3QkFDaEIsV0FBVyxFQUFFLElBQUk7cUJBQ2xCO2lCQUNGLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRztZQUNwQixRQUFRLEVBQUU7Z0JBQ1IsV0FBVyxFQUFFLElBQUk7YUFDbEI7WUFDRCxTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztTQUN6QixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFjO1FBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDN0IsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsTUFBTSxFQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFDbkIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUM5QyxDQUNGLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2YsT0FBTyxFQUFFLElBQUk7WUFDYixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztTQUNwQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUsscUJBQXFCLENBQUMsSUFBSSxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQixDQUFDLFlBQVk7UUFDOUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDZixJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDL0MsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7aUJBQy9DLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZO2lCQUN2QixJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsRUFDbEMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FDN0I7aUJBQ0EsU0FBUyxFQUFFLENBQUM7WUFFZixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQUMsRUFBa0I7UUFDMUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCLFFBQVE7Z0JBQ1IsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUNwQyxJQUFJLEVBQUUsSUFBSTthQUNYLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxTQUFrQjtRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFFBQVEsQ0FBQyxFQUFrQjtRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBOEQ7UUFDdkUsUUFBUSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDN0IsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBQ1IsS0FBSyxLQUFLO2dCQUNSLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QixNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7OEdBM1VVLHNCQUFzQjtrR0FBdEIsc0JBQXNCLDRiQWR0QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUM7YUFDdEQ7WUFDRDtnQkFDRSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDckQsS0FBSyxFQUFFLElBQUk7YUFDWjtZQUNELG9CQUFvQjtTQUNyQix3S0M5Q0gsbTlOQThOQTs7MkZEOUthLHNCQUFzQjtrQkFqQmxDLFNBQVM7K0JBQ0Usb0JBQW9CLGFBRW5CO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHVCQUF1QixDQUFDO3lCQUN0RDt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7NEJBQ3JELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNELG9CQUFvQjtxQkFDckI7dUxBTVEsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUlHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFJSSxVQUFVO3NCQUFuQixNQUFNO2dCQUlHLGVBQWU7c0JBQXhCLE1BQU07Z0JBSUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFJRyxNQUFNO3NCQUFmLE1BQU07Z0JBcUJDLE1BQU07c0JBRGIsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUlkZW50aWZpZWQsIElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFzc2V0U2VsZWN0b3JCYXNlIH0gZnJvbSAnLi9hc3NldC1zZWxlY3Rvci1iYXNlJztcbmltcG9ydCB7XG4gIEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQsXG4gIEFzc2V0U2VsZWN0b3JPcHRpb25zLFxuICBDT05GSUdfT1BUSU9OU19ERUZBVUxUXG59IGZyb20gJy4vYXNzZXQtc2VsZWN0b3IubW9kZWwnO1xuaW1wb3J0IHsgQXNzZXRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuL2Fzc2V0LXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JvdXBOb2RlIH0gZnJvbSAnLi9ncm91cC1ub2RlJztcbmltcG9ydCB7IEdyb3VwTm9kZVNlcnZpY2UgfSBmcm9tICcuL2dyb3VwLW5vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBVbmFzc2lnbmVkRGV2aWNlc05vZGUgfSBmcm9tICcuL3VuYXNzaWduZWQtZGV2aWNlcy1ub2RlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuLyoqXG4gKiBEaXNwbGF5cyBhIGhpZXJhcmNoaWNhbCB0cmVlIHNlbGVjdG9yIGZvciBhc3NldHMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hc3NldC1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NldC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBc3NldFNlbGVjdG9yQ29tcG9uZW50KVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFzc2V0U2VsZWN0b3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIEFzc2V0U2VsZWN0b3JTZXJ2aWNlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXNzZXRTZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIEFzc2V0U2VsZWN0b3JCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIENvbmZpZyBvYmplY3QgY29udGFpbmluZyBhbGwgb3B0aW9ucyBmb3IgdGhlIGFzc2V0IHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiBBc3NldFNlbGVjdG9yT3B0aW9ucyA9IHt9O1xuICAvKipcbiAgICogRGVmaW5lcyB0aGUgbm9kZSwgd2hpY2ggc2hvdWxkIGJlIGRpc3BsYXllZCBhcyBhY3RpdmUuXG4gICAqL1xuICBASW5wdXQoKSBhY3RpdmU6IEdyb3VwTm9kZTtcbiAgLyoqXG4gICAqIFVzZWQgb25seSBmb3IgbWlsbGVyLXZpZXcsIGRpc3BsYXlzIHRoZSBjb2x1bW4gbGV2ZWwgZm9yIHRoZSBjdXJyZW50IG5vZGUuXG4gICAqIEUuZyBpZiB0aGUgaW5kZXggaXMgb25lLCB0aGlzIHdpbGwgYmUgc2Vjb25kIGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpIGluZGV4ID0gMDtcbiAgLyoqXG4gICAqIFRoZSBhc3NldCB0byB1c2UgYXMgcm9vdC5cbiAgICovXG4gIEBJbnB1dCgpIGFzc2V0OiBJSWRlbnRpZmllZCA9IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBzZWxlY3RlZCBkZXZpY2UuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RlZERldmljZTogSU1hbmFnZWRPYmplY3QgPSB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBwcmVkZWZpbmVkIG5vZGVzLlxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWQ6IEFycmF5PFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+PiB8IElJZGVudGlmaWVkW10gfCBJSWRlbnRpZmllZCA9IFtdO1xuICAvKipcbiAgICogVGhlIG5vZGUgdG8gdXNlIGFzIHJvb3QuIFlvdSBjYW4gZWl0aGVyIHNldCB0aGlzLCBvciB0aGUgYXNzZXQgdG8gc3RhcnQgZnJvbS5cbiAgICovXG4gIEBJbnB1dCgpIHJvb3ROb2RlOiBHcm91cE5vZGU7XG4gIC8qKlxuICAgKiBBbGwgY3VycmVudGx5IHNlbGVjdGVkIGFzc2V0cy5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IElJZGVudGlmaWVkW10gfCBJSWRlbnRpZmllZCA9IFtdO1xuICBASW5wdXQoKSBjb250YWluZXI6ICcnIHwgJ2JvZHknID0gJ2JvZHknO1xuICBASW5wdXQoKSBpc05vZGVTZWxlY3RhYmxlOiBib29sZWFuIHwgKChub2RlOiBJSWRlbnRpZmllZCkgPT4gYm9vbGVhbikgPSB0cnVlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAvKipcbiAgICogRW1pdHMgaWYgb25lIGl0ZW0gd2FzIHNlbGVjdGVkIChhbGwgY3VycmVudGx5IHNlbGVjdGVkIG5vZGVzKS5cbiAgICovXG4gIEBPdXRwdXQoKSBvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBc3NldFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuICAvKipcbiAgICogRW1pdHMgaWYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBhc3NldCBpcyBjbGVhcmVkLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uQ2xlYXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIFVzZWQgb25seSBmb3IgbWlsbGVyIHZpZXcuIEVtaXQgdGhlIHNlbGVjdGVkIG5vZGUgYW5kIHVzZSBpdCBhcyBhICdyb290Tm9kZScgZm9yIHRoZSBuZXcgY29sdW1uLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uUm93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBjdXJyZW50IGxvYWRpbmcgc3RhdGUgb2YgdGhlIG5vZGUuXG4gICAqL1xuICBAT3V0cHV0KCkgb25Mb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBmaWx0ZXIgYXBwbGllZC5cbiAgICovXG4gIGZpbHRlclRleHQgPSAnJztcbiAgLyoqXG4gICAqIERpc3BsYXlzIHRoZSBnbG9iYWwgc2VhcmNoIGF0IGFsbCB0aW1lcyBpZiB0aGUgbWlsbGVyIHZpZXcgaXMgdXNlZFxuICAgKiBvbiByb290IGdyb3VwIGxldmVsLlxuICAgKi9cbiAgcm9vdCA9IGZhbHNlO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgaGVhZGVyIGhpZ2h0IGluIHBpeGVsLlxuICAgKi9cbiAgZ2V0SGVhZGVySGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG4gIHJlYWRvbmx5IEFTU0VUX0NPTlNUID0gZ2V0dGV4dCgnQXNzZXQge3sgYXNzZXRJZCB9fScpO1xuXG4gIEBWaWV3Q2hpbGQoJ2hlYWRlcicpXG4gIHByaXZhdGUgaGVhZGVyOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlIG9ubHkgRElcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBncm91cE5vZGVTZXJ2aWNlOiBHcm91cE5vZGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFzc2V0U2VsZWN0b3JTZXJ2aWNlOiBBc3NldFNlbGVjdG9yU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKGdyb3VwTm9kZVNlcnZpY2UsIGludmVudG9yeSwgYXNzZXRTZWxlY3RvclNlcnZpY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGVuIGEgbm9kZSB3YXMgc2VsZWN0ZWQsIGlmIGEgbmV3IGNvbHVtbiBuZWVkcyB0byBiZSBhZGRlZC5cbiAgICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdGhhdCB3YXMgY2xpY2tlZC5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoaXMgbm9kZS5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY2xpY2sgd2FzIGhhbmRsZWQgYW5kIGEgbmV3IGNvbHVtbiB3YXMgYWRkZWQuXG4gICAqL1xuICBoYW5kbGVOZXh0TWlsbGVyVmlld0NvbHVtbihub2RlOiBHcm91cE5vZGUsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBub2RlQ29weSA9IE9iamVjdC5jcmVhdGUobm9kZSk7XG4gICAgY29uc3QgaXNTYW1lQXNSb290ID0gdGhpcy5yb290Tm9kZSA9PT0gbm9kZTtcbiAgICBjb25zdCBpc1VuYXNzaWduZWREZXZpY2VzTm9kZSA9IG5vZGUudG9TdHJpbmcoKSA9PT0gVW5hc3NpZ25lZERldmljZXNOb2RlLk5BTUU7XG4gICAgY29uc3QgaXNOZXdDb2x1bW5OZWVkZWQgPVxuICAgICAgIWlzU2FtZUFzUm9vdCAmJiAobm9kZS5pc0dyb3VwKCkgfHwgaXNVbmFzc2lnbmVkRGV2aWNlc05vZGUgfHwgbm9kZS5oYXNDaGlsZERldmljZXMoKSk7XG5cbiAgICBpZiAoaXNOZXdDb2x1bW5OZWVkZWQpIHtcbiAgICAgIHRoaXMub25Sb3dTZWxlY3RlZC5lbWl0KHsgbm9kZUNvcHksIGluZGV4IH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFzc2V0U2VsZWN0b3JTZXJ2aWNlLnNldElzTm9kZVNlbGVjdGFibGUodGhpcy5pc05vZGVTZWxlY3RhYmxlKTtcbiAgICBpZiAodGhpcy5pbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5jb25maWcgPSB7IC4uLkNPTkZJR19PUFRJT05TX0RFRkFVTFQsIC4uLnRoaXMuY29uZmlnIH07XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZFJlc2V0TmFtZUZpbHRlciA9XG4gICAgICB0aGlzLnJvb3ROb2RlICYmIHRoaXMucm9vdE5vZGUubW8gJiYgdGhpcy5jb25maWcudmlldyA9PT0gJ21pbGxlcic7XG4gICAgaWYgKHNob3VsZFJlc2V0TmFtZUZpbHRlcikge1xuICAgICAgYXdhaXQgdGhpcy5hcHBseUZpbHRlcignJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNPbmx5QXNzZXROb2RlRGVmaW5lZCA9IHRoaXMuYXNzZXQ7XG4gICAgaWYgKGlzT25seUFzc2V0Tm9kZURlZmluZWQpIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmFnZWRPYmplY3RSb290Tm9kZSh0aGlzLmFzc2V0KTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0FueU5vZGVEZWZpbmVkID1cbiAgICAgICF0aGlzLnJvb3ROb2RlICYmICghdGhpcy5hc3NldCB8fCBPYmplY3Qua2V5cyh0aGlzLmFzc2V0KS5sZW5ndGggPT09IDApO1xuICAgIGlmIChpc0FueU5vZGVEZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvb3ROb2RlID0gdGhpcy5jcmVhdGVEZWZhdWx0Um9vdE5vZGUoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy5zaG93VW5hc3NpZ25lZERldmljZXMgJiZcbiAgICAgICghdGhpcy5hc3NldCB8fCBPYmplY3Qua2V5cyh0aGlzLmFzc2V0KS5sZW5ndGggPT09IDApICYmXG4gICAgICB0aGlzLnJvb3ROb2RlLnJvb3RcbiAgICApIHtcbiAgICAgIHRoaXMucm9vdE5vZGUuYWRkKFxuICAgICAgICBuZXcgVW5hc3NpZ25lZERldmljZXNOb2RlKHRoaXMuZ3JvdXBOb2RlU2VydmljZSwge1xuICAgICAgICAgIHNob3dDaGlsZERldmljZXM6IHRoaXMuY29uZmlnLnNob3dDaGlsZERldmljZXNcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucm9vdCA9IHRoaXMucm9vdE5vZGUucm9vdDtcbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5pc05vZGVTZWxlY3RhYmxlKSB7XG4gICAgICB0aGlzLmFzc2V0U2VsZWN0b3JTZXJ2aWNlLnNldElzTm9kZVNlbGVjdGFibGUodGhpcy5pc05vZGVTZWxlY3RhYmxlKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlcy5hc3NldCAmJlxuICAgICAgY2hhbmdlcy5hc3NldC5jdXJyZW50VmFsdWUgJiZcbiAgICAgIE9iamVjdC5rZXlzKGNoYW5nZXMuYXNzZXQuY3VycmVudFZhbHVlKS5sZW5ndGggIT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmFnZWRPYmplY3RSb290Tm9kZShjaGFuZ2VzLmFzc2V0LmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaGVhZGVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZ2V0SGVhZGVySGVpZ2h0JC5uZXh0KHRoaXMuaGVhZGVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0SGVhZGVySGVpZ2h0JC5uZXh0KDApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcm9vdCB0byBvbmUgbGV2ZWwgYmFjay5cbiAgICovXG4gIGJhY2soKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4IC0gMTtcbiAgICBjb25zdCBub2RlQ29weSA9IE9iamVjdC5jcmVhdGUodGhpcy5yb290Tm9kZS5wYXJlbnRzWzBdKTtcbiAgICB0aGlzLm9uUm93U2VsZWN0ZWQuZW1pdCh7IG5vZGVDb3B5LCBpbmRleCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGN1cnJlbnQgZmlsdGVyLlxuICAgKi9cbiAgY2xlYXJGaWx0ZXJzKCkge1xuICAgIHRoaXMuZmlsdGVyVGV4dCA9ICcnO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIoJycpO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZERldmljZXMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZERldmljZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcGx5RmlsdGVyKCcnKTtcbiAgICB0aGlzLm9uQ2xlYXJTZWxlY3RlZC5lbWl0KCk7XG4gIH1cblxuICBpc0dyb3VwU2VsZWN0ZWQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQuc29tZShzZWxlY3RlZE5vZGUgPT4gc2VsZWN0ZWROb2RlLmlkID09PSB0aGlzLnJvb3ROb2RlLm1vPy5pZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBncm91cE5hbWVGaWx0ZXIobmFtZUZpbHRlcjogc3RyaW5nLCBtb0lkLCBzaG93VW5hc3NpZ25lZERldmljZXM/OiBib29sZWFuKSB7XG4gICAgaWYgKG5hbWVGaWx0ZXIpIHtcbiAgICAgIGNvbnN0IGZpbHRlckJ5TmFtZSA9IHNob3dVbmFzc2lnbmVkRGV2aWNlc1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIF9fZmlsdGVyOiB7XG4gICAgICAgICAgICAgIG5hbWU6IG5hbWVGaWx0ZXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfX29yZGVyYnk6IFt7IG5hbWU6IDEgfV1cbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgICAgICAgbmFtZTogbmFtZUZpbHRlcixcbiAgICAgICAgICAgICAgX19ieWdyb3VwaWQ6IG1vSWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuYXNzZXRTZWxlY3RvclNlcnZpY2UucXVlcmllc1V0aWwuYnVpbGRRdWVyeShmaWx0ZXJCeU5hbWUpO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0ge1xuICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgX19ieWdyb3VwaWQ6IG1vSWRcbiAgICAgIH0sXG4gICAgICBfX29yZGVyYnk6IFt7IG5hbWU6IDEgfV1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFzc2V0U2VsZWN0b3JTZXJ2aWNlLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoZGVmYXVsdEZpbHRlcik7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhIGZpbHRlci5cbiAgICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRvIGFwcGx5LlxuICAgKi9cbiAgYXN5bmMgYXBwbHlGaWx0ZXIoZmlsdGVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJvb3ROb2RlLmZpbHRlclF1ZXJ5JC5uZXh0KFxuICAgICAgdGhpcy5ncm91cE5hbWVGaWx0ZXIoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgdGhpcy5yb290Tm9kZS5tby5pZCxcbiAgICAgICAgdGhpcy5pc1VuYXNzaWduZWREZXZpY2VzTm9kZSgpID8gdHJ1ZSA6IGZhbHNlXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnJvb3ROb2RlLnJlZnJlc2goKTtcbiAgICB0aGlzLm9uTG9hZC5lbWl0KHtcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBmaWx0ZXJUZXh0OiB0aGlzLmZpbHRlclRleHQsXG4gICAgICBpbmRleDogdGhpcy5pbmRleCxcbiAgICAgIHNlbGVjdGVkRGV2aWNlOiB0aGlzLnNlbGVjdGVkRGV2aWNlXG4gICAgfSk7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIFVuYXNzaWduZWREZXZpY2Ugbm9kZSBpcyB0aGUgcm9vdE5vZGUuXG4gICAqL1xuICBpc1VuYXNzaWduZWREZXZpY2VzTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb290Tm9kZS50b1N0cmluZygpID09PSBVbmFzc2lnbmVkRGV2aWNlc05vZGUuTkFNRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciByZXNldHMgdGhlIHNlYXJjaCByZXN1bHQuXG4gICAqL1xuICBvblNlYXJjaFJlc3VsdFJlc2V0KHNlbGVjdGVkSXRlbSkge1xuICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSB0aGlzLmNyZWF0ZURlZmF1bHRSb290Tm9kZSgpO1xuICAgICAgaWYgKHRoaXMuY29uZmlnLnNob3dVbmFzc2lnbmVkRGV2aWNlcykge1xuICAgICAgICB0aGlzLnJvb3ROb2RlLmFkZChcbiAgICAgICAgICBuZXcgVW5hc3NpZ25lZERldmljZXNOb2RlKHRoaXMuZ3JvdXBOb2RlU2VydmljZSwge1xuICAgICAgICAgICAgc2hvd0NoaWxkRGV2aWNlczogdGhpcy5jb25maWcuc2hvd0NoaWxkRGV2aWNlc1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb25maWcudmlldyA9PT0gJ21pbGxlcicpIHtcbiAgICAgICAgdGhpcy5vblJvd1NlbGVjdGVkLmVtaXQoeyByb290OiB0cnVlIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJvb3ROb2RlLmNsaWNrKHsgb3BlbjogdHJ1ZSB9KTtcbiAgICAgIHRoaXMucm9vdE5vZGUubm9kZXNGZXRjaGVkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmNkLmRldGVjdENoYW5nZXMoKSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnZpZXcgPT09ICd0cmVlJykge1xuICAgICAgICB0aGlzLnJvb3ROb2RlLm9wZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgaWYgdGhlIHVzZXIgY2xpY2tzIG9uIGEgc2VhcmNoIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIG9uU2VhcmNoUmVzdWx0Q2xpY2sobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgY2FuU2VsZWN0Tm9kZSA9IHRoaXMuY29uZmlnLmdyb3Vwc1NlbGVjdGFibGUgfHwgIXRoaXMuZ3JvdXBOb2RlU2VydmljZS5pc0dyb3VwKG1vKTtcbiAgICBpZiAodGhpcy5jb25maWcudmlldyA9PT0gJ21pbGxlcicpIHtcbiAgICAgIHRoaXMucm9vdE5vZGUgPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmFnZWRPYmplY3RSb290Tm9kZShtbyk7XG4gICAgICB0aGlzLnJvb3ROb2RlLmNsaWNrKHsgb3BlbjogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IG5vZGVDb3B5ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnJvb3ROb2RlKTtcbiAgICAgIHRoaXMub25Sb3dTZWxlY3RlZC5lbWl0KHtcbiAgICAgICAgbm9kZUNvcHksXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBzZWxlY3RlZERldmljZXM6IHRoaXMuc2VsZWN0ZWREZXZpY2UsXG4gICAgICAgIHJvb3Q6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29uZmlnLm11bHRpKSB7XG4gICAgICB0aGlzLmRlc2VsZWN0QWxsKCk7XG4gICAgfVxuICAgIGlmIChjYW5TZWxlY3ROb2RlKSB7XG4gICAgICB0aGlzLnNlbGVjdChtbyk7XG4gICAgfVxuICB9XG5cbiAgb25Mb2FkaW5nKGlzTG9hZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMub25Mb2FkLmVtaXQoeyBsb2FkaW5nOiBpc0xvYWRpbmcsIGZpbHRlclRleHQ6IHRoaXMuZmlsdGVyVGV4dCB9KTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25TZWxlY3QobW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5zZWxlY3QobW8pO1xuICB9XG5cbiAgb25EZXNlbGVjdChjb25maWc6IHsgZGVzZWxlY3RNb2RlOiAnc2luZ2xlJyB8ICdhbGwnOyBtbzogSU1hbmFnZWRPYmplY3QgfSkge1xuICAgIHN3aXRjaCAoY29uZmlnPy5kZXNlbGVjdE1vZGUpIHtcbiAgICAgIGNhc2UgJ3NpbmdsZSc6XG4gICAgICAgIHRoaXMuZGVzZWxlY3QoY29uZmlnLm1vKTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhbGwnOlxuICAgICAgICB0aGlzLmRlc2VsZWN0QWxsKGNvbmZpZy5tbyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImJnLWluaGVyaXQgcC10LTggcC1iLTggc2VwYXJhdG9yLWJvdHRvbSBwLXItMTYgcC1sLTE2IHN0aWNreS10b3BcIlxuICBbbmdTdHlsZV09XCJ7ICd6LWluZGV4JzogY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBjb25maWcuc2VhcmNoID8gJzMwJyA6ICcyMCcgfVwiXG4gICNoZWFkZXJcbiAgW25nQ2xhc3NdPVwie1xuICAgICdwLWFic29sdXRlIG1pbGxlci1jb2x1bW5fX3NlbGVjdGlvbiBkLWZsZXggZmxleC13cmFwIGEtaS1jZW50ZXInOiBjb25maWcudmlldyA9PT0gJ21pbGxlcicsXG4gICAgJ21pbGxlci1jb2x1bW5fX3NlYXJjaCc6IGNvbmZpZy5zZWFyY2gsXG4gICAgJ21pbGxlci1jb2x1bW5fX211bHRpJzogY29uZmlnLm11bHRpXG4gIH1cIlxuICAqbmdJZj1cIlxuICAgICFzZWxlY3RlZERldmljZSAmJlxuICAgIGluZGV4ID09PSAwICYmXG4gICAgKGNvbmZpZy5zZWFyY2ggfHwgY29uZmlnLm11bHRpIHx8IGNvbmZpZy5sYWJlbD8ubGVuZ3RoIHx8IGNvbmZpZy5zaG93U2VsZWN0ZWQpXG4gIFwiXG4+XG4gIDxwXG4gICAgY2xhc3M9XCJ0ZXh0LW1lZGl1bSBmbGV4LW5vLXNocmluayBhLXMtY2VudGVyXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnbS1iLTQnOiBjb25maWcuc2VhcmNoICYmIHJvb3QgJiYgY29uZmlnLnNpbmdsZUNvbHVtbixcbiAgICAgICdtLXItOCc6ICFjb25maWcuc2luZ2xlQ29sdW1uICYmICFjb25maWcuc2VhcmNoLFxuICAgICAgJ2ZpdC13JzogY29uZmlnLnNpbmdsZUNvbHVtblxuICAgIH1cIlxuICAgICpuZ0lmPVwiY29uZmlnLmxhYmVsPy5sZW5ndGhcIlxuICA+XG4gICAge3sgY29uZmlnLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gIDwvcD5cbiAgPGM4eS1zZWFyY2gtaW5wdXRcbiAgICBbbmdTdHlsZV09XCJ7ICdtaW4td2lkdGgnOiAhY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBjb25maWcubGFiZWwubGVuZ3RoID8gJzUwJScgOiAnaW5oZXJpdCcgfVwiXG4gICAgKm5nSWY9XCJjb25maWcuc2VhcmNoICYmIHJvb3RcIlxuICAgIChvbkNsaWNrKT1cIm9uU2VhcmNoUmVzdWx0Q2xpY2soJGV2ZW50KVwiXG4gICAgKHJlc2V0KT1cIm9uU2VhcmNoUmVzdWx0UmVzZXQoJGV2ZW50KVwiXG4gICAgW21vZGVdPVwiJ3NlbGVjdCdcIlxuICAgIFtjb250YWluZXJdPVwiY29udGFpbmVyXCJcbiAgICBbZ3JvdXBzT25seV09XCJjb25maWcuZ3JvdXBzT25seVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ20tbC1hdXRvJzogIWNvbmZpZy5zaW5nbGVDb2x1bW4gJiYgY29uZmlnLmxhYmVsLmxlbmd0aCxcbiAgICAgICdmaXQtdyc6IGNvbmZpZy5zaW5nbGVDb2x1bW4gfHwgIWNvbmZpZy5sYWJlbC5sZW5ndGhcbiAgICB9XCJcbiAgPjwvYzh5LXNlYXJjaC1pbnB1dD5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYmctaW5oZXJpdCBkLWZsZXggZ2FwLTQgZml0LXdcIlxuICAgICpuZ0lmPVwiY29uZmlnLnNob3dTZWxlY3RlZFwiXG4gICAgW25nQ2xhc3NdPVwieyAnbS10LTQnOiBjb25maWcuc2VhcmNoIH1cIlxuICA+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tci00IGEtcy1jZW50ZXIgbC1oLTFcIj57eyAnU2VsZWN0ZWQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3cgaW5uZXItc2Nyb2xsIGQtZmxleCBnYXAtNCBhLWktY2VudGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbGVjdGVkLmxlbmd0aFwiPlxuICAgICAgICA8ZW0gY2xhc3M9XCJ0ZXh0LTEyIHRleHQtbXV0ZWQgZC1mbGV4IGEtaS1jZW50ZXIgZml0LWgtMjBcIj57eyAnTm9uZScgfCB0cmFuc2xhdGUgfX08L2VtPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInRhZyB0YWctLWluZm8gY2hpcFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBzZWxlY3RlZEl0ZW0gb2Ygc2VsZWN0ZWRcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXhzIGJ0bi1jbGVhbiB0ZXh0LTEwXCJcbiAgICAgICAgICB0aXRsZT1cInt7IHNlbGVjdGVkSXRlbS5uYW1lIH19XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJjb25maWcubXVsdGkgPyBkZXNlbGVjdChzZWxlY3RlZEl0ZW0pIDogZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB7eyBzZWxlY3RlZEl0ZW0ubmFtZSB8fCAoQVNTRVRfQ09OU1QgfCB0cmFuc2xhdGU6IHsgYXNzZXRJZDogc2VsZWN0ZWRJdGVtLmlkIH0pIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXZcbiAgY2xhc3M9XCJwLXItMTZcIlxuICAqbmdJZj1cInNlbGVjdGVkRGV2aWNlXCJcbj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBwLWItNFwiPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInRleHQtbWVkaXVtIHAtdC04IG0tci04XCJcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWREZXZpY2U7IGVsc2UgbXVsdGlBc3NldHNcIlxuICAgID5cbiAgICAgIHt7ICdTZWxlY3RlZCBhc3NldCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3A+XG4gICAgPG5nLXRlbXBsYXRlICNtdWx0aUFzc2V0cz5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1tZWRpdW0gbS1yLThcIj57eyAnU2VsZWN0ZWQgYXNzZXRzJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi14cyBhLXMtY2VudGVyIG0tdC00IG0tbC1hdXRvXCJcbiAgICAgIHRpdGxlPVwie3sgJ0NoYW5nZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZERldmljZXMoKVwiXG4gICAgPlxuICAgICAge3sgJ0NoYW5nZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJ0ZXh0LXN1Y2Nlc3MgcC1sLTAgcC1yLThcIlxuICAgICAgW2M4eUljb25dPVwiJ2NoZWNrLWNpcmNsZSdcIlxuICAgID48L2k+XG4gICAgPGlcbiAgICAgIGNsYXNzPVwibS1yLTQgaWNvbi0yMFwiXG4gICAgICBbYzh5SWNvbl09XCJzZWxlY3RlZERldmljZSB8IGdldEdyb3VwSWNvbiB8IGFzeW5jXCJcbiAgICA+PC9pPlxuICAgIDxzcGFuPnt7IHNlbGVjdGVkRGV2aWNlLm5hbWUgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gbWlsbGVyIGNvbHVtbnMgaGVhZGVyIC0tPlxuPGRpdlxuICBjbGFzcz1cIm1pbGxlci1jb2x1bW5fX2hlYWRlciBzdGlja3ktdG9wIGJnLWluaGVyaXQgc2VwYXJhdG9yLWJvdHRvbVwiXG4gICpuZ0lmPVwiXG4gICAgY29uZmlnLnZpZXcgPT09ICdtaWxsZXInICYmXG4gICAgKChjb25maWcuc2hvd0ZpbHRlciAmJiAhcm9vdE5vZGUucm9vdCkgfHwgY29uZmlnLmNvbHVtbkhlYWRlcnMpICYmXG4gICAgIXNlbGVjdGVkRGV2aWNlXG4gIFwiXG4gIFtuZ0NsYXNzXT1cInsgJ3AtdC04JzogY29uZmlnLnNlYXJjaCB9XCJcbj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleFwiICpuZ0lmPVwiY29uZmlnLnNpbmdsZUNvbHVtbiAmJiBpbmRleCAhPT0gMFwiPlxuICAgIDxpXG4gICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgIGM4eUljb249XCJob21lXCJcbiAgICA+PC9pPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInRleHQtMTIgdGV4dC1tdXRlZCB0ZXh0LXRydW5jYXRlIHRleHQtcnRsIG0tYi00XCJcbiAgICAgIHRpdGxlPVwie3sgcm9vdE5vZGUuYnJlYWRjcnVtYiB8fCByb290Tm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgPlxuICAgICAge3sgcm9vdE5vZGUuYnJlYWRjcnVtYiB8fCByb290Tm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvcD5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCJcbiAgICAqbmdJZj1cImNvbmZpZy5jb2x1bW5IZWFkZXJzIHx8IGNvbmZpZy5zaW5nbGVDb2x1bW5cIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXhzIG0tci04IHAtdC0wIHAtYi0wIHAtbC00IHAtci00IGwtaC0xXCJcbiAgICAgIHRpdGxlPVwie3sgJ0JhY2snIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKm5nSWY9XCJjb25maWcuc2luZ2xlQ29sdW1uICYmICFyb290Tm9kZS5yb290ICYmIGluZGV4ICE9PSAwXCJcbiAgICAgIChjbGljayk9XCJiYWNrKClcIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJhbmdsZS1sZWZ0XCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICAgIDxsYWJlbFxuICAgICAgY2xhc3M9XCJjOHktcmFkaW8gY2hlY2tib3gtaW5saW5lIG0tci04XCJcbiAgICAgICpuZ0lmPVwiIXJvb3ROb2RlLnJvb3QgJiYgaW5kZXggPT09IDAgJiYgKGNvbmZpZy5ncm91cHNTZWxlY3RhYmxlIHx8ICFyb290Tm9kZS5pc0dyb3VwKCkpXCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdGl0bGU9XCJ7eyAnU2VsZWN0IGdyb3VwJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIChjaGFuZ2UpPVwic2VsZWN0KHJvb3ROb2RlLm1vKVwiXG4gICAgICAgIFtjaGVja2VkXT1cImlzR3JvdXBTZWxlY3RlZCgpXCJcbiAgICAgIC8+XG4gICAgICA8c3Bhbj48L3NwYW4+XG4gICAgPC9sYWJlbD5cblxuICAgIDxpXG4gICAgICBjbGFzcz1cImljb24tMjAgYzh5LWljb24tZHVvY29sb3IgbS1yLTRcIlxuICAgICAgW2M4eUljb25dPVwidGhpcy5yb290Tm9kZS5tbyB8IGdldEdyb3VwSWNvbjogdHJ1ZSA6IHRoaXMucm9vdE5vZGUuaWNvbiB8IGFzeW5jXCJcbiAgICAgICpuZ0lmPVwiY29uZmlnLmNvbHVtbkhlYWRlcnMgJiYgKGNvbmZpZy5zaW5nbGVDb2x1bW4gfHwgKCFyb290Tm9kZS5yb290ICYmIGluZGV4ID09PSAwKSlcIlxuICAgID48L2k+XG4gICAgPHBcbiAgICAgIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiXG4gICAgICB0aXRsZT1cInt7IHJvb3ROb2RlLmxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICpuZ0lmPVwiY29uZmlnLmNvbHVtbkhlYWRlcnNcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAndGV4dC1sYWJlbC1zbWFsbCc6ICFjb25maWcuc2luZ2xlQ29sdW1uLFxuICAgICAgICAndGV4dC1tZWRpdW0nOiBjb25maWcuc2luZ2xlQ29sdW1uXG4gICAgICB9XCJcbiAgICA+XG4gICAgICB7eyByb290Tm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvcD5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwiIXJvb3ROb2RlLnJvb3QgJiYgY29uZmlnLnNob3dGaWx0ZXJcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3AtdC00JzogY29uZmlnLmNvbHVtbkhlYWRlcnMgfVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc20gaW5wdXQtZ3JvdXAtc2VhcmNoXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdGaWx0ZXIgdGhpcyBjb2x1bW7igKYnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJUZXh0XCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RmlsdGVyKCcqJyArIGZpbHRlclRleHQgKyAnKicpXCJcbiAgICAgIC8+XG4gICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBwLXItOCBwLWwtNFwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnQXBwbHkgZmlsdGVyJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImFwcGx5RmlsdGVyKCcqJyArIGZpbHRlclRleHQgKyAnKicpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGM4eUljb249XCJmaWx0ZXJcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBwLXItOCBwLWwtNFwiXG4gICAgICAgICAgdGl0bGU9XCIge3sgJ0NsZWFyIGZpbHRlcnMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJGaWx0ZXJzKClcIlxuICAgICAgICAgICpuZ0lmPVwiZmlsdGVyVGV4dC5sZW5ndGhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGM4eS1hc3NldC1zZWxlY3Rvci1ub2RlXG4gIGNsYXNzPVwiZC1ibG9jayBiZy1pbmhlcml0IHAtcmVsYXRpdmVcIlxuICBzdHlsZT1cInotaW5kZXg6IDlcIlxuICAqbmdJZj1cInJvb3ROb2RlICYmICFzZWxlY3RlZERldmljZVwiXG4gIFtub2RlXT1cInJvb3ROb2RlXCJcbiAgW3Jvb3ROb2RlXT1cInJvb3ROb2RlXCJcbiAgW3ByZXNlbGVjdGVkXT1cInNlbGVjdGVkXCJcbiAgW211bHRpXT1cImNvbmZpZy5tdWx0aVwiXG4gIFt2aWV3XT1cImNvbmZpZy52aWV3XCJcbiAgW2luZGV4XT1cImluZGV4XCJcbiAgW2FjdGl2ZV09XCJhY3RpdmVcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbaGFuZGxlTmV4dE1pbGxlclZpZXdDb2x1bW5dPVwiaGFuZGxlTmV4dE1pbGxlclZpZXdDb2x1bW4uYmluZCh0aGlzKVwiXG4gIChpc0xvYWRpbmdTdGF0ZSk9XCJvbkxvYWRpbmcoJGV2ZW50KVwiXG4gIChvblNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgKG9uRGVzZWxlY3QpPVwib25EZXNlbGVjdCgkZXZlbnQpXCJcbiAgW25nQ2xhc3NdPVwieyAnY29sbGFwc2Ugc2hvdyc6ICFyb290Tm9kZS5yb290ICYmICFyb290Tm9kZS5oaWRkZW4gJiYgY29uZmlnLnZpZXcgIT09ICdtaWxsZXInIH1cIlxuPjwvYzh5LWFzc2V0LXNlbGVjdG9yLW5vZGU+XG4iXX0=
|