@cqa-lib/cqa-ui 1.1.4 → 1.1.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.
@@ -15,7 +15,6 @@ export class CompareRunsComponent {
15
15
  this.isLoadingRuns = false;
16
16
  this.hasMoreRuns = false;
17
17
  this.isComparingRuns = false;
18
- this.isTableDataLoading = false;
19
18
  this.searchRuns = new EventEmitter();
20
19
  this.loadMoreRuns = new EventEmitter();
21
20
  this.compareRuns = new EventEmitter();
@@ -425,10 +424,10 @@ export class CompareRunsComponent {
425
424
  }
426
425
  }
427
426
  CompareRunsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CompareRunsComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
428
- CompareRunsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: CompareRunsComponent, selector: "cqa-compare-runs", inputs: { runs: "runs", comparisonData: "comparisonData", isLoadingRuns: "isLoadingRuns", hasMoreRuns: "hasMoreRuns", isComparingRuns: "isComparingRuns", isTableDataLoading: "isTableDataLoading" }, outputs: { searchRuns: "searchRuns", loadMoreRuns: "loadMoreRuns", compareRuns: "compareRuns" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\" style=\"display: block; width: 100%;\">\n <div class=\"cqa-flex cqa-flex-col\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3 sm:cqa-gap-4 cqa-px-3 sm:cqa-px-4 cqa-py-4 sm:cqa-py-6\" style=\"border-bottom: 1px solid #E4E4E4\">\n <div class=\"cqa-grid cqa-grid-cols-1 md:cqa-grid-cols-2 cqa-gap-4 md:cqa-gap-16\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#636363]\">Run A (Base)</span>\n <cqa-dynamic-select \n [form]=\"form\" \n [config]=\"runASelectConfig\"\n (searchChange)=\"onSearchChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </cqa-dynamic-select>\n </div>\n \n <div class=\"cqa-hidden md:cqa-flex cqa-items-center cqa-justify-center\" style=\"position: absolute; left: 50%; transform: translateX(-50%); top: 70px;\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M4.16669 10H15.8334\" stroke=\"#636363\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M10 4.16699L15.8333 10.0003L10 15.8337\" stroke=\"#636363\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n \n <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#636363]\">Run B (Compare)</span>\n <cqa-dynamic-select \n [form]=\"form\" \n [config]=\"runBSelectConfig\"\n (searchChange)=\"onSearchChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </cqa-dynamic-select>\n </div>\n </div>\n \n <ng-container *ngIf=\"showComparison\">\n <div class=\"cqa-grid cqa-grid-cols-1 md:cqa-grid-cols-2 cqa-gap-4\">\n <div *ngIf=\"selectedRunA\" \n class=\"cqa-bg-white cqa-rounded-lg cqa-p-3 cqa-border cqa-border-solid\"\n [style.background-color]=\"runAStatusBgColor\"\n [style.border-color]=\"runAStatusBorderColor\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-mb-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B]\">Run #{{ selectedRunA.id }}</span>\n </div>\n <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-[10px] cqa-font-medium\"\n [style.background-color]=\"runAStatusColor\"\n [style.color]=\"'#FFFFFF'\">\n {{ runAStatusLabel }}\n </span>\n </div>\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Time: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatTime(selectedRunA.startTime) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Duration: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatDurationString(selectedRunA.duration) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Dataset: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunA.testDataSetName }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Device: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunA.device }}</span>\n </div>\n </div>\n </div>\n \n <div *ngIf=\"selectedRunB\" \n class=\"cqa-bg-white cqa-rounded-lg cqa-p-3 cqa-border cqa-border-solid\"\n [style.background-color]=\"runBStatusBgColor\"\n [style.border-color]=\"runBStatusBorderColor\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-mb-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B]\">Run #{{ selectedRunB.id }}</span>\n </div>\n <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-[10px] cqa-font-medium\"\n [style.background-color]=\"runBStatusColor\"\n [style.color]=\"'#FFFFFF'\">\n {{ runBStatusLabel }}\n </span>\n </div>\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Time: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatTime(selectedRunB.startTime) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Duration: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatDurationString(selectedRunB.duration) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Dataset: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunB.testDataSetName }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Device: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunB.device }}</span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div class=\"cqa-w-full cqa-flex cqa-justify-center\">\n <cqa-button \n variant=\"filled\" \n [disabled]=\"!canCompare\"\n (click)=\"onCompareClick()\">\n {{ isComparingRuns ? 'Comparing...' : 'Compare Runs' }}\n </cqa-button>\n </div>\n </div>\n\n <div *ngIf=\"showComparison && comparisonSummary && stepComparisons && stepComparisons.length > 0\" \n class=\"cqa-bg-white cqa-pt-3 cqa-pb-0 sm:cqa-pb-1 sm:cqa-pt-4 cqa-px-3 sm:cqa-px-6 cqa-flex cqa-items-center cqa-gap-3 sm:cqa-gap-4\">\n <p class=\"cqa-text-[12px] cqa-text-[#636363]\">Summary:</p>\n <div class=\"cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.91669 5.25H11.0834\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M2.91669 8.75H11.0834\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#0B0B0B]\">{{ comparisonSummary.unchanged }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Unchanged</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M12.6759 10.5003L8.00919 2.33363C7.90743 2.15408 7.75987 2.00474 7.58156 1.90083C7.40325 1.79693 7.20056 1.74219 6.99419 1.74219C6.78781 1.74219 6.58513 1.79693 6.40681 1.90083C6.2285 2.00474 6.08094 2.15408 5.97919 2.33363L1.31252 10.5003C1.20967 10.6784 1.15574 10.8806 1.15619 11.0863C1.15665 11.2919 1.21147 11.4939 1.31511 11.6715C1.41875 11.8492 1.56752 11.9963 1.74634 12.0979C1.92516 12.1996 2.12767 12.2521 2.33335 12.2503H11.6667C11.8714 12.2501 12.0724 12.196 12.2496 12.0935C12.4268 11.9911 12.5739 11.8438 12.6762 11.6664C12.7784 11.4891 12.8322 11.288 12.8322 11.0833C12.8321 10.8786 12.7782 10.6776 12.6759 10.5003Z\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 5.25V7.58333\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 9.91699H7.00583\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#E17100]\">{{ comparisonSummary.statusChanged }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Status Changed</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.91669 7H11.0834\" stroke=\"#00C950\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 2.91699V11.0837\" stroke=\"#00C950\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#00A63E]\">{{ comparisonSummary.added }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Added</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.91669 7H11.0834\" stroke=\"#FB2C36\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#FB2C36]\">{{ comparisonSummary.removed }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Removed</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M7.00002 12.8337C10.2217 12.8337 12.8334 10.222 12.8334 7.00033C12.8334 3.77866 10.2217 1.16699 7.00002 1.16699C3.77836 1.16699 1.16669 3.77866 1.16669 7.00033C1.16669 10.222 3.77836 12.8337 7.00002 12.8337Z\" stroke=\"#2B7FFF\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 3.5V7L9.33333 8.16667\" stroke=\"#2B7FFF\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#155DFC]\">{{ comparisonSummary.timing }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Timing Changed</span>\n </div>\n </div>\n </div>\n\n <div class=\"cqa-bg-white cqa-rounded-lg cqa-overflow-hidden\">\n <cqa-table-template\n [columns]=\"tableColumns\"\n [data]=\"stepComparisons\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyState\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [isTableDataLoading]=\"isTableDataLoading\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n </div>\n\n </div>\n</div>\n\n", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore"] }, { type: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.TableTemplateComponent, selector: "cqa-table-template", inputs: ["searchPlaceholder", "searchValue", "showClear", "showSearchBar", "filterConfig", "showFilterPanel", "showFilterButton", "otherButtonLabel", "otherButtonVariant", "showOtherButton", "showActionButton", "showSettingsButton", "showAutoRefreshButton", "data", "isEmptyState", "emptyStateConfig", "actions", "chips", "filterApplied", "columns", "selectedAutoRefreshInterval", "pageIndex", "pageSize", "serverSidePagination", "totalElements", "isTableLoading", "isTableDataLoading"], outputs: ["onSearchChange", "onApplyFilterClick", "onResetFilterClick", "onClearAll", "removeChip", "pageChange", "onReload", "onAutoRefreshClick"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
427
+ CompareRunsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: CompareRunsComponent, selector: "cqa-compare-runs", inputs: { runs: "runs", comparisonData: "comparisonData", isLoadingRuns: "isLoadingRuns", hasMoreRuns: "hasMoreRuns", isComparingRuns: "isComparingRuns" }, outputs: { searchRuns: "searchRuns", loadMoreRuns: "loadMoreRuns", compareRuns: "compareRuns" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\" style=\"display: block; width: 100%;\">\n <div class=\"cqa-flex cqa-flex-col\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3 sm:cqa-gap-4 cqa-px-3 sm:cqa-px-4 cqa-py-4 sm:cqa-py-6\" style=\"border-bottom: 1px solid #E4E4E4\">\n <div class=\"cqa-grid cqa-grid-cols-1 md:cqa-grid-cols-2 cqa-gap-4 md:cqa-gap-16 cqa-relative\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#636363]\">Run A (Base)</span>\n <cqa-dynamic-select \n [form]=\"form\" \n [config]=\"runASelectConfig\"\n (searchChange)=\"onSearchChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </cqa-dynamic-select>\n </div>\n \n <div class=\"cqa-hidden md:cqa-flex cqa-items-center cqa-justify-center\" style=\"position: absolute; left: 50%; transform: translateX(-50%); top: 30px;\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M4.16669 10H15.8334\" stroke=\"#636363\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M10 4.16699L15.8333 10.0003L10 15.8337\" stroke=\"#636363\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n \n <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#636363]\">Run B (Compare)</span>\n <cqa-dynamic-select \n [form]=\"form\" \n [config]=\"runBSelectConfig\"\n (searchChange)=\"onSearchChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </cqa-dynamic-select>\n </div>\n </div>\n \n <ng-container *ngIf=\"selectedRunA || selectedRunB\">\n <div class=\"cqa-grid cqa-grid-cols-1 md:cqa-grid-cols-2 cqa-gap-4\">\n <div *ngIf=\"selectedRunA\" \n class=\"cqa-bg-white cqa-rounded-lg cqa-p-3 cqa-border cqa-border-solid\"\n [style.background-color]=\"runAStatusBgColor\"\n [style.border-color]=\"runAStatusBorderColor\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-mb-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B]\">Run #{{ selectedRunA.id }}</span>\n </div>\n <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-[10px] cqa-font-medium\"\n [style.background-color]=\"runAStatusColor\"\n [style.color]=\"'#FFFFFF'\">\n {{ runAStatusLabel }}\n </span>\n </div>\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Time: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatTime(selectedRunA.startTime) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Duration: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatDurationString(selectedRunA.duration) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Dataset: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunA.testDataSetName }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Device: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunA.device }}</span>\n </div>\n </div>\n </div>\n \n <div *ngIf=\"selectedRunB\" \n class=\"cqa-bg-white cqa-rounded-lg cqa-p-3 cqa-border cqa-border-solid\"\n [style.background-color]=\"runBStatusBgColor\"\n [style.border-color]=\"runBStatusBorderColor\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-mb-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B]\">Run #{{ selectedRunB.id }}</span>\n </div>\n <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-[10px] cqa-font-medium\"\n [style.background-color]=\"runBStatusColor\"\n [style.color]=\"'#FFFFFF'\">\n {{ runBStatusLabel }}\n </span>\n </div>\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Time: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatTime(selectedRunB.startTime) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Duration: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatDurationString(selectedRunB.duration) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Dataset: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunB.testDataSetName }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Device: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunB.device }}</span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div class=\"cqa-w-full cqa-flex cqa-justify-center\">\n <cqa-button \n variant=\"filled\" \n [disabled]=\"!canCompare\"\n (click)=\"onCompareClick()\">\n {{ isComparingRuns ? 'Comparing...' : 'Compare Runs' }}\n </cqa-button>\n </div>\n </div>\n\n <div *ngIf=\"showComparison && comparisonSummary && stepComparisons && stepComparisons.length > 0\" \n class=\"cqa-bg-white cqa-pt-3 cqa-pb-0 sm:cqa-pb-1 sm:cqa-pt-4 cqa-px-3 sm:cqa-px-6 cqa-flex cqa-items-center cqa-gap-3 sm:cqa-gap-4\">\n <p class=\"cqa-text-[12px] cqa-text-[#636363]\">Summary:</p>\n <div class=\"cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.91669 5.25H11.0834\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M2.91669 8.75H11.0834\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#0B0B0B]\">{{ comparisonSummary.unchanged }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Unchanged</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M12.6759 10.5003L8.00919 2.33363C7.90743 2.15408 7.75987 2.00474 7.58156 1.90083C7.40325 1.79693 7.20056 1.74219 6.99419 1.74219C6.78781 1.74219 6.58513 1.79693 6.40681 1.90083C6.2285 2.00474 6.08094 2.15408 5.97919 2.33363L1.31252 10.5003C1.20967 10.6784 1.15574 10.8806 1.15619 11.0863C1.15665 11.2919 1.21147 11.4939 1.31511 11.6715C1.41875 11.8492 1.56752 11.9963 1.74634 12.0979C1.92516 12.1996 2.12767 12.2521 2.33335 12.2503H11.6667C11.8714 12.2501 12.0724 12.196 12.2496 12.0935C12.4268 11.9911 12.5739 11.8438 12.6762 11.6664C12.7784 11.4891 12.8322 11.288 12.8322 11.0833C12.8321 10.8786 12.7782 10.6776 12.6759 10.5003Z\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 5.25V7.58333\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 9.91699H7.00583\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#E17100]\">{{ comparisonSummary.statusChanged }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Status Changed</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.91669 7H11.0834\" stroke=\"#00C950\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 2.91699V11.0837\" stroke=\"#00C950\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#00A63E]\">{{ comparisonSummary.added }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Added</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.91669 7H11.0834\" stroke=\"#FB2C36\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#FB2C36]\">{{ comparisonSummary.removed }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Removed</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M7.00002 12.8337C10.2217 12.8337 12.8334 10.222 12.8334 7.00033C12.8334 3.77866 10.2217 1.16699 7.00002 1.16699C3.77836 1.16699 1.16669 3.77866 1.16669 7.00033C1.16669 10.222 3.77836 12.8337 7.00002 12.8337Z\" stroke=\"#2B7FFF\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 3.5V7L9.33333 8.16667\" stroke=\"#2B7FFF\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#155DFC]\">{{ comparisonSummary.timing }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Timing Changed</span>\n </div>\n </div>\n </div>\n\n <div class=\"cqa-bg-white cqa-rounded-lg cqa-overflow-hidden\">\n <cqa-table-template\n [columns]=\"tableColumns\"\n [data]=\"stepComparisons\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyState\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [isTableDataLoading]=\"isComparingRuns\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n </div>\n\n </div>\n</div>\n\n", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore"] }, { type: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.TableTemplateComponent, selector: "cqa-table-template", inputs: ["searchPlaceholder", "searchValue", "showClear", "showSearchBar", "filterConfig", "showFilterPanel", "showFilterButton", "otherButtonLabel", "otherButtonVariant", "showOtherButton", "showActionButton", "showSettingsButton", "showAutoRefreshButton", "data", "isEmptyState", "emptyStateConfig", "actions", "chips", "filterApplied", "columns", "selectedAutoRefreshInterval", "pageIndex", "pageSize", "serverSidePagination", "totalElements", "isTableLoading", "isTableDataLoading"], outputs: ["onSearchChange", "onApplyFilterClick", "onResetFilterClick", "onClearAll", "removeChip", "pageChange", "onReload", "onAutoRefreshClick"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
429
428
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CompareRunsComponent, decorators: [{
430
429
  type: Component,
431
- args: [{ selector: 'cqa-compare-runs', template: "<div class=\"cqa-ui-root\" style=\"display: block; width: 100%;\">\n <div class=\"cqa-flex cqa-flex-col\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3 sm:cqa-gap-4 cqa-px-3 sm:cqa-px-4 cqa-py-4 sm:cqa-py-6\" style=\"border-bottom: 1px solid #E4E4E4\">\n <div class=\"cqa-grid cqa-grid-cols-1 md:cqa-grid-cols-2 cqa-gap-4 md:cqa-gap-16\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#636363]\">Run A (Base)</span>\n <cqa-dynamic-select \n [form]=\"form\" \n [config]=\"runASelectConfig\"\n (searchChange)=\"onSearchChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </cqa-dynamic-select>\n </div>\n \n <div class=\"cqa-hidden md:cqa-flex cqa-items-center cqa-justify-center\" style=\"position: absolute; left: 50%; transform: translateX(-50%); top: 70px;\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M4.16669 10H15.8334\" stroke=\"#636363\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M10 4.16699L15.8333 10.0003L10 15.8337\" stroke=\"#636363\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n \n <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#636363]\">Run B (Compare)</span>\n <cqa-dynamic-select \n [form]=\"form\" \n [config]=\"runBSelectConfig\"\n (searchChange)=\"onSearchChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </cqa-dynamic-select>\n </div>\n </div>\n \n <ng-container *ngIf=\"showComparison\">\n <div class=\"cqa-grid cqa-grid-cols-1 md:cqa-grid-cols-2 cqa-gap-4\">\n <div *ngIf=\"selectedRunA\" \n class=\"cqa-bg-white cqa-rounded-lg cqa-p-3 cqa-border cqa-border-solid\"\n [style.background-color]=\"runAStatusBgColor\"\n [style.border-color]=\"runAStatusBorderColor\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-mb-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B]\">Run #{{ selectedRunA.id }}</span>\n </div>\n <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-[10px] cqa-font-medium\"\n [style.background-color]=\"runAStatusColor\"\n [style.color]=\"'#FFFFFF'\">\n {{ runAStatusLabel }}\n </span>\n </div>\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Time: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatTime(selectedRunA.startTime) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Duration: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatDurationString(selectedRunA.duration) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Dataset: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunA.testDataSetName }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Device: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunA.device }}</span>\n </div>\n </div>\n </div>\n \n <div *ngIf=\"selectedRunB\" \n class=\"cqa-bg-white cqa-rounded-lg cqa-p-3 cqa-border cqa-border-solid\"\n [style.background-color]=\"runBStatusBgColor\"\n [style.border-color]=\"runBStatusBorderColor\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-mb-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B]\">Run #{{ selectedRunB.id }}</span>\n </div>\n <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-[10px] cqa-font-medium\"\n [style.background-color]=\"runBStatusColor\"\n [style.color]=\"'#FFFFFF'\">\n {{ runBStatusLabel }}\n </span>\n </div>\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Time: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatTime(selectedRunB.startTime) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Duration: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatDurationString(selectedRunB.duration) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Dataset: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunB.testDataSetName }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Device: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunB.device }}</span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div class=\"cqa-w-full cqa-flex cqa-justify-center\">\n <cqa-button \n variant=\"filled\" \n [disabled]=\"!canCompare\"\n (click)=\"onCompareClick()\">\n {{ isComparingRuns ? 'Comparing...' : 'Compare Runs' }}\n </cqa-button>\n </div>\n </div>\n\n <div *ngIf=\"showComparison && comparisonSummary && stepComparisons && stepComparisons.length > 0\" \n class=\"cqa-bg-white cqa-pt-3 cqa-pb-0 sm:cqa-pb-1 sm:cqa-pt-4 cqa-px-3 sm:cqa-px-6 cqa-flex cqa-items-center cqa-gap-3 sm:cqa-gap-4\">\n <p class=\"cqa-text-[12px] cqa-text-[#636363]\">Summary:</p>\n <div class=\"cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.91669 5.25H11.0834\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M2.91669 8.75H11.0834\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#0B0B0B]\">{{ comparisonSummary.unchanged }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Unchanged</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M12.6759 10.5003L8.00919 2.33363C7.90743 2.15408 7.75987 2.00474 7.58156 1.90083C7.40325 1.79693 7.20056 1.74219 6.99419 1.74219C6.78781 1.74219 6.58513 1.79693 6.40681 1.90083C6.2285 2.00474 6.08094 2.15408 5.97919 2.33363L1.31252 10.5003C1.20967 10.6784 1.15574 10.8806 1.15619 11.0863C1.15665 11.2919 1.21147 11.4939 1.31511 11.6715C1.41875 11.8492 1.56752 11.9963 1.74634 12.0979C1.92516 12.1996 2.12767 12.2521 2.33335 12.2503H11.6667C11.8714 12.2501 12.0724 12.196 12.2496 12.0935C12.4268 11.9911 12.5739 11.8438 12.6762 11.6664C12.7784 11.4891 12.8322 11.288 12.8322 11.0833C12.8321 10.8786 12.7782 10.6776 12.6759 10.5003Z\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 5.25V7.58333\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 9.91699H7.00583\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#E17100]\">{{ comparisonSummary.statusChanged }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Status Changed</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.91669 7H11.0834\" stroke=\"#00C950\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 2.91699V11.0837\" stroke=\"#00C950\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#00A63E]\">{{ comparisonSummary.added }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Added</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.91669 7H11.0834\" stroke=\"#FB2C36\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#FB2C36]\">{{ comparisonSummary.removed }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Removed</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M7.00002 12.8337C10.2217 12.8337 12.8334 10.222 12.8334 7.00033C12.8334 3.77866 10.2217 1.16699 7.00002 1.16699C3.77836 1.16699 1.16669 3.77866 1.16669 7.00033C1.16669 10.222 3.77836 12.8337 7.00002 12.8337Z\" stroke=\"#2B7FFF\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 3.5V7L9.33333 8.16667\" stroke=\"#2B7FFF\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#155DFC]\">{{ comparisonSummary.timing }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Timing Changed</span>\n </div>\n </div>\n </div>\n\n <div class=\"cqa-bg-white cqa-rounded-lg cqa-overflow-hidden\">\n <cqa-table-template\n [columns]=\"tableColumns\"\n [data]=\"stepComparisons\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyState\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [isTableDataLoading]=\"isTableDataLoading\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n </div>\n\n </div>\n</div>\n\n", styles: [] }]
430
+ args: [{ selector: 'cqa-compare-runs', template: "<div class=\"cqa-ui-root\" style=\"display: block; width: 100%;\">\n <div class=\"cqa-flex cqa-flex-col\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3 sm:cqa-gap-4 cqa-px-3 sm:cqa-px-4 cqa-py-4 sm:cqa-py-6\" style=\"border-bottom: 1px solid #E4E4E4\">\n <div class=\"cqa-grid cqa-grid-cols-1 md:cqa-grid-cols-2 cqa-gap-4 md:cqa-gap-16 cqa-relative\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#636363]\">Run A (Base)</span>\n <cqa-dynamic-select \n [form]=\"form\" \n [config]=\"runASelectConfig\"\n (searchChange)=\"onSearchChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </cqa-dynamic-select>\n </div>\n \n <div class=\"cqa-hidden md:cqa-flex cqa-items-center cqa-justify-center\" style=\"position: absolute; left: 50%; transform: translateX(-50%); top: 30px;\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M4.16669 10H15.8334\" stroke=\"#636363\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M10 4.16699L15.8333 10.0003L10 15.8337\" stroke=\"#636363\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n \n <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#636363]\">Run B (Compare)</span>\n <cqa-dynamic-select \n [form]=\"form\" \n [config]=\"runBSelectConfig\"\n (searchChange)=\"onSearchChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </cqa-dynamic-select>\n </div>\n </div>\n \n <ng-container *ngIf=\"selectedRunA || selectedRunB\">\n <div class=\"cqa-grid cqa-grid-cols-1 md:cqa-grid-cols-2 cqa-gap-4\">\n <div *ngIf=\"selectedRunA\" \n class=\"cqa-bg-white cqa-rounded-lg cqa-p-3 cqa-border cqa-border-solid\"\n [style.background-color]=\"runAStatusBgColor\"\n [style.border-color]=\"runAStatusBorderColor\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-mb-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B]\">Run #{{ selectedRunA.id }}</span>\n </div>\n <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-[10px] cqa-font-medium\"\n [style.background-color]=\"runAStatusColor\"\n [style.color]=\"'#FFFFFF'\">\n {{ runAStatusLabel }}\n </span>\n </div>\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Time: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatTime(selectedRunA.startTime) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Duration: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatDurationString(selectedRunA.duration) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Dataset: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunA.testDataSetName }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Device: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunA.device }}</span>\n </div>\n </div>\n </div>\n \n <div *ngIf=\"selectedRunB\" \n class=\"cqa-bg-white cqa-rounded-lg cqa-p-3 cqa-border cqa-border-solid\"\n [style.background-color]=\"runBStatusBgColor\"\n [style.border-color]=\"runBStatusBorderColor\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-mb-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B]\">Run #{{ selectedRunB.id }}</span>\n </div>\n <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-[10px] cqa-font-medium\"\n [style.background-color]=\"runBStatusColor\"\n [style.color]=\"'#FFFFFF'\">\n {{ runBStatusLabel }}\n </span>\n </div>\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Time: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatTime(selectedRunB.startTime) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Duration: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatDurationString(selectedRunB.duration) }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Dataset: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunB.testDataSetName }}</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-xs cqa-text-[#636363]\">Device: </span>\n <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunB.device }}</span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div class=\"cqa-w-full cqa-flex cqa-justify-center\">\n <cqa-button \n variant=\"filled\" \n [disabled]=\"!canCompare\"\n (click)=\"onCompareClick()\">\n {{ isComparingRuns ? 'Comparing...' : 'Compare Runs' }}\n </cqa-button>\n </div>\n </div>\n\n <div *ngIf=\"showComparison && comparisonSummary && stepComparisons && stepComparisons.length > 0\" \n class=\"cqa-bg-white cqa-pt-3 cqa-pb-0 sm:cqa-pb-1 sm:cqa-pt-4 cqa-px-3 sm:cqa-px-6 cqa-flex cqa-items-center cqa-gap-3 sm:cqa-gap-4\">\n <p class=\"cqa-text-[12px] cqa-text-[#636363]\">Summary:</p>\n <div class=\"cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.91669 5.25H11.0834\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M2.91669 8.75H11.0834\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#0B0B0B]\">{{ comparisonSummary.unchanged }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Unchanged</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M12.6759 10.5003L8.00919 2.33363C7.90743 2.15408 7.75987 2.00474 7.58156 1.90083C7.40325 1.79693 7.20056 1.74219 6.99419 1.74219C6.78781 1.74219 6.58513 1.79693 6.40681 1.90083C6.2285 2.00474 6.08094 2.15408 5.97919 2.33363L1.31252 10.5003C1.20967 10.6784 1.15574 10.8806 1.15619 11.0863C1.15665 11.2919 1.21147 11.4939 1.31511 11.6715C1.41875 11.8492 1.56752 11.9963 1.74634 12.0979C1.92516 12.1996 2.12767 12.2521 2.33335 12.2503H11.6667C11.8714 12.2501 12.0724 12.196 12.2496 12.0935C12.4268 11.9911 12.5739 11.8438 12.6762 11.6664C12.7784 11.4891 12.8322 11.288 12.8322 11.0833C12.8321 10.8786 12.7782 10.6776 12.6759 10.5003Z\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 5.25V7.58333\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 9.91699H7.00583\" stroke=\"#FD9A00\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#E17100]\">{{ comparisonSummary.statusChanged }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Status Changed</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.91669 7H11.0834\" stroke=\"#00C950\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 2.91699V11.0837\" stroke=\"#00C950\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#00A63E]\">{{ comparisonSummary.added }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Added</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.91669 7H11.0834\" stroke=\"#FB2C36\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#FB2C36]\">{{ comparisonSummary.removed }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Removed</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M7.00002 12.8337C10.2217 12.8337 12.8334 10.222 12.8334 7.00033C12.8334 3.77866 10.2217 1.16699 7.00002 1.16699C3.77836 1.16699 1.16669 3.77866 1.16669 7.00033C1.16669 10.222 3.77836 12.8337 7.00002 12.8337Z\" stroke=\"#2B7FFF\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 3.5V7L9.33333 8.16667\" stroke=\"#2B7FFF\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </mat-icon>\n <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#155DFC]\">{{ comparisonSummary.timing }}</span>\n <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Timing Changed</span>\n </div>\n </div>\n </div>\n\n <div class=\"cqa-bg-white cqa-rounded-lg cqa-overflow-hidden\">\n <cqa-table-template\n [columns]=\"tableColumns\"\n [data]=\"stepComparisons\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyState\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [isTableDataLoading]=\"isComparingRuns\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n </div>\n\n </div>\n</div>\n\n", styles: [] }]
432
431
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { runs: [{
433
432
  type: Input
434
433
  }], comparisonData: [{
@@ -439,8 +438,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
439
438
  type: Input
440
439
  }], isComparingRuns: [{
441
440
  type: Input
442
- }], isTableDataLoading: [{
443
- type: Input
444
441
  }], searchRuns: [{
445
442
  type: Output
446
443
  }], loadMoreRuns: [{
@@ -448,4 +445,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
448
445
  }], compareRuns: [{
449
446
  type: Output
450
447
  }] } });
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS1ydW5zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcGFyZS1ydW5zL2NvbXBhcmUtcnVucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBhcmUtcnVucy9jb21wYXJlLXJ1bnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQW9DLE1BQU0sRUFBRSxZQUFZLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSzVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7OztBQW9GN0UsTUFBTSxPQUFPLG9CQUFvQjtJQWdDL0IsWUFDVSxFQUFlLEVBQ2YsR0FBc0I7UUFEdEIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBakN2QixTQUFJLEdBQXlCLEVBQUUsQ0FBQztRQUVoQyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFFbkMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFrQyxDQUFDO1FBQ2hFLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMxQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBUzNELG9CQUFlLEdBQXFCLEVBQUUsQ0FBQztRQUN2QyxpQkFBWSxHQUF5QixFQUFFLENBQUM7UUFFeEMsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBRXRCLHFCQUFnQixHQUFxQjtZQUNuQyxLQUFLLEVBQUUsb0JBQW9CO1lBQzNCLFdBQVcsRUFBRSw4RUFBOEU7WUFDM0YsUUFBUSxFQUFFLGtCQUFr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QUtuQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNUYWJsZUNvbHVtbiB9IGZyb20gJy4uL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZUNvbmZpZyB9IGZyb20gJy4uL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRU1QVFlfU1RBVEVfSU1BR0VTIH0gZnJvbSAnLi4vYXNzZXRzL2ltYWdlcy9pbWFnZS1hc3NldHMuY29uc3RhbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0RGV2aWNlIHtcbiAgaWQ6IG51bWJlcjtcbiAgdGVzdFBsYW5JZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICBicm93c2VyOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIGJyb3dzZXJWZXJzaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdERldmljZVNldHRpbmdzIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgb3NWZXJzaW9uOiBzdHJpbmc7XG4gIGJyb3dzZXI6IHN0cmluZztcbiAgYnJvd3NlclZlcnNpb246IHN0cmluZztcbiAgcmVzb2x1dGlvbjogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBkZXZpY2VOYW1lOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3REZXZpY2VSZXN1bHQge1xuICB0ZXN0RGV2aWNlOiBUZXN0RGV2aWNlO1xuICB0ZXN0RGV2aWNlU2V0dGluZ3M6IFRlc3REZXZpY2VTZXR0aW5ncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FzZVJlc3VsdERhdGEge1xuICBpZDogbnVtYmVyO1xuICB0ZXN0Q2FzZUlkOiBudW1iZXI7XG4gIHRlc3RQbGFuUmVzdWx0SWQ6IG51bWJlcjtcbiAgcmVzdWx0OiAnU1VDQ0VTUycgfCAnRkFJTFVSRScgfCAnQUJPUlRFRCcgfCAnSU5fUFJPR1JFU1MnO1xuICBzdGF0dXM6ICdTVEFUVVNfQ09NUExFVEVEJyB8ICdTVEFUVVNfSU5fUFJPR1JFU1MnIHwgJ1NUQVRVU19RVUVVRUQnO1xuICBzdGFydFRpbWU6IG51bWJlcjtcbiAgZW5kVGltZTogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICB0ZXN0RGF0YVNldE5hbWU6IHN0cmluZztcbiAgdGVzdERldmljZVJlc3VsdDogVGVzdERldmljZVJlc3VsdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW5EYXRhIHtcbiAgaWQ6IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbiAgcmVzdWx0OiAnU1VDQ0VTUycgfCAnRkFJTFVSRScgfCAnQUJPUlRFRCcgfCAnSU5fUFJPR1JFU1MnO1xuICBzdGFydFRpbWU6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgdGVzdERhdGFTZXROYW1lOiBzdHJpbmc7XG4gIGRldmljZTogc3RyaW5nO1xuICBicm93c2VyOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFyaXNvblN1bW1hcnkge1xuICB1bmNoYW5nZWQ6IG51bWJlcjtcbiAgc3RhdHVzQ2hhbmdlZDogbnVtYmVyO1xuICBhZGRlZDogbnVtYmVyO1xuICByZW1vdmVkOiBudW1iZXI7XG4gIHRpbWluZzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBDb21wYXJpc29uIHtcbiAgc3RlcElkOiBzdHJpbmc7XG4gIHN0ZXBUaXRsZTogc3RyaW5nO1xuICBydW5BU3RhdHVzPzogc3RyaW5nO1xuICBydW5BRHVyYXRpb24/OiBudW1iZXI7XG4gIHJ1bkJTdGF0dXM/OiBzdHJpbmc7XG4gIHJ1bkJEdXJhdGlvbj86IG51bWJlcjtcbiAgY2hhbmdlOiAnVU5DSEFOR0VEJyB8ICdTVEFUVVNfQ0hBTkdFRCcgfCAnVElNSU5HX0NIQU5HRUQnIHwgJ0FEREVEJyB8ICdSRU1PVkVEJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wYXJpc29uUmVzcG9uc2Uge1xuICBzdW1tYXJ5OiBDb21wYXJpc29uU3VtbWFyeTtcbiAgc3RlcHNDb21wYXJpc29uOiBTdGVwQ29tcGFyaXNvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBhcmVSZXF1ZXN0IHtcbiAgcnVuQUlkOiBudW1iZXI7XG4gIHJ1bkJJZDogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtY29tcGFyZS1ydW5zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXBhcmUtcnVucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgQ29tcGFyZVJ1bnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHJ1bnM6IFRlc3RDYXNlUmVzdWx0RGF0YVtdID0gW107XG4gIEBJbnB1dCgpIGNvbXBhcmlzb25EYXRhPzogQ29tcGFyaXNvblJlc3BvbnNlO1xuICBASW5wdXQoKSBpc0xvYWRpbmdSdW5zOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhhc01vcmVSdW5zOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzQ29tcGFyaW5nUnVuczogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc1RhYmxlRGF0YUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIEBPdXRwdXQoKSBzZWFyY2hSdW5zID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyBxdWVyeTogc3RyaW5nIH0+KCk7XG4gIEBPdXRwdXQoKSBsb2FkTW9yZVJ1bnMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGNvbXBhcmVSdW5zID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wYXJlUmVxdWVzdD4oKTtcblxuICBmb3JtITogRm9ybUdyb3VwO1xuICBydW5BU2VsZWN0Q29uZmlnITogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuICBydW5CU2VsZWN0Q29uZmlnITogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuXG4gIHNlbGVjdGVkUnVuQT86IFJ1bkRhdGE7XG4gIHNlbGVjdGVkUnVuQj86IFJ1bkRhdGE7XG4gIGNvbXBhcmlzb25TdW1tYXJ5PzogQ29tcGFyaXNvblN1bW1hcnk7XG4gIHN0ZXBDb21wYXJpc29uczogU3RlcENvbXBhcmlzb25bXSA9IFtdO1xuICB0YWJsZUNvbHVtbnM6IER5bmFtaWNUYWJsZUNvbHVtbltdID0gW107XG4gIFxuICBwYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgXG4gIGVtcHR5U3RhdGVDb25maWc6IEVtcHR5U3RhdGVDb25maWcgPSB7XG4gICAgdGl0bGU6ICdObyBDb21wYXJpc29uIERhdGEnLFxuICAgIGRlc2NyaXB0aW9uOiAnU2VsZWN0IHR3byBydW5zIHRvIGNvbXBhcmUgYW5kIHNlZSBkZXRhaWxlZCBzdGVwLWJ5LXN0ZXAgY29tcGFyaXNvbiByZXN1bHRzLicsXG4gICAgaW1hZ2VVcmw6IEVNUFRZX1NUQVRFX0lNQUdFUy5DT01QQVJFX1JVTlMsXG4gICAgYWN0aW9uczogW11cbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG4gICAgdGhpcy5zZXR1cFNlbGVjdENvbmZpZ3MoKTtcbiAgICB0aGlzLnNldHVwVGFibGVDb2x1bW5zKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3J1bnMnXSAmJiAhY2hhbmdlc1sncnVucyddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnNldHVwU2VsZWN0Q29uZmlncygpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIFxuICAgIGlmIChjaGFuZ2VzWydjb21wYXJpc29uRGF0YSddICYmIHRoaXMuY29tcGFyaXNvbkRhdGEpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ29tcGFyaXNvbkRhdGEoKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGNoYW5nZXNbJ2lzTG9hZGluZ1J1bnMnXSkge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RDb25maWdzTG9hZGluZygpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHJ1bkE6IFtudWxsXSxcbiAgICAgIHJ1bkI6IFtudWxsXVxuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFJ1bnMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBTZWxlY3RDb25maWdzKCk6IHZvaWQge1xuICAgIGNvbnN0IHJ1bkFJZCA9IHRoaXMuZm9ybT8uZ2V0KCdydW5BJyk/LnZhbHVlO1xuICAgIGNvbnN0IHJ1bkJJZCA9IHRoaXMuZm9ybT8uZ2V0KCdydW5CJyk/LnZhbHVlO1xuICAgIFxuICAgIGNvbnN0IGFsbE9wdGlvbnMgPSB0aGlzLnJ1bnMubWFwKHJ1biA9PiAoe1xuICAgICAgaWQ6IHJ1bi5pZCxcbiAgICAgIHZhbHVlOiBydW4uaWQsXG4gICAgICBsYWJlbDogdGhpcy5mb3JtYXRSdW5MYWJlbChydW4pLFxuICAgICAgbmFtZTogdGhpcy5mb3JtYXRSdW5MYWJlbChydW4pXG4gICAgfSkpO1xuXG4gICAgY29uc3QgcnVuQU9wdGlvbnMgPSBhbGxPcHRpb25zLmZpbHRlcihvcHQgPT4gb3B0LmlkICE9PSBydW5CSWQpO1xuICAgIGNvbnN0IHJ1bkJPcHRpb25zID0gYWxsT3B0aW9ucy5maWx0ZXIob3B0ID0+IG9wdC5pZCAhPT0gcnVuQUlkKTtcblxuICAgIHRoaXMucnVuQVNlbGVjdENvbmZpZyA9IHtcbiAgICAgIGtleTogJ3J1bkEnLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdTZWFyY2ggYW5kIHNlbGVjdCBydW4nLFxuICAgICAgb3B0aW9uczogcnVuQU9wdGlvbnMsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgc2VydmVyU2VhcmNoOiB0cnVlLFxuICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlUnVucyxcbiAgICAgIGlzTG9hZGluZzogdGhpcy5pc0xvYWRpbmdSdW5zLFxuICAgICAgb25TZWFyY2g6IChxdWVyeTogc3RyaW5nKSA9PiB0aGlzLmhhbmRsZVNlYXJjaFJ1bnMocXVlcnksICdydW5BJyksXG4gICAgICBvbkxvYWRNb3JlOiAocXVlcnk/OiBzdHJpbmcpID0+IHRoaXMuaGFuZGxlTG9hZE1vcmVSdW5zKHF1ZXJ5IHx8ICcnKVxuICAgIH07XG5cbiAgICB0aGlzLnJ1bkJTZWxlY3RDb25maWcgPSB7XG4gICAgICBrZXk6ICdydW5CJyxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VhcmNoIGFuZCBzZWxlY3QgcnVuJyxcbiAgICAgIG9wdGlvbnM6IHJ1bkJPcHRpb25zLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogdHJ1ZSxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVJ1bnMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nUnVucyxcbiAgICAgIG9uU2VhcmNoOiAocXVlcnk6IHN0cmluZykgPT4gdGhpcy5oYW5kbGVTZWFyY2hSdW5zKHF1ZXJ5LCAncnVuQicpLFxuICAgICAgb25Mb2FkTW9yZTogKHF1ZXJ5Pzogc3RyaW5nKSA9PiB0aGlzLmhhbmRsZUxvYWRNb3JlUnVucyhxdWVyeSB8fCAnJylcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRSdW5MYWJlbChydW46IFRlc3RDYXNlUmVzdWx0RGF0YSk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHJ1bi5zdGFydFRpbWUpO1xuICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBkYXRlLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgfSk7XG4gICAgcmV0dXJuIGBSdW4gIyR7cnVuLmlkfSDigKIgJHtmb3JtYXR0ZWREYXRlfWA7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdENvbmZpZ3NMb2FkaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJ1bkFTZWxlY3RDb25maWcpIHtcbiAgICAgIHRoaXMucnVuQVNlbGVjdENvbmZpZyA9IHtcbiAgICAgICAgLi4udGhpcy5ydW5BU2VsZWN0Q29uZmlnLFxuICAgICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nUnVucyxcbiAgICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlUnVuc1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMucnVuQlNlbGVjdENvbmZpZykge1xuICAgICAgdGhpcy5ydW5CU2VsZWN0Q29uZmlnID0ge1xuICAgICAgICAuLi50aGlzLnJ1bkJTZWxlY3RDb25maWcsXG4gICAgICAgIGlzTG9hZGluZzogdGhpcy5pc0xvYWRpbmdSdW5zLFxuICAgICAgICBoYXNNb3JlOiB0aGlzLmhhc01vcmVSdW5zXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNlYXJjaFJ1bnMocXVlcnk6IHN0cmluZywga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFJ1bnMuZW1pdCh7IGtleSwgcXVlcnkgfSk7XG4gIH1cblxuICBoYW5kbGVMb2FkTW9yZVJ1bnMocXVlcnk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubG9hZE1vcmVSdW5zLmVtaXQocXVlcnkpO1xuICB9XG5cbiAgb25TZWFyY2hDaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdvblNlYXJjaENoYW5nZScsIGV2ZW50KTtcbiAgICB0aGlzLnNlYXJjaFJ1bnMuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkxvYWRNb3JlKGV2ZW50OiB7IGtleTogc3RyaW5nOyBxdWVyeTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRNb3JlUnVucy5lbWl0KGV2ZW50LnF1ZXJ5KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRSdW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IHJ1bkFJZCA9IHRoaXMuZm9ybS5nZXQoJ3J1bkEnKT8udmFsdWU7XG4gICAgY29uc3QgcnVuQklkID0gdGhpcy5mb3JtLmdldCgncnVuQicpPy52YWx1ZTtcblxuICAgIGNvbnN0IHJ1bkEgPSB0aGlzLnJ1bnMuZmluZChyID0+IHIuaWQgPT09IHJ1bkFJZCk7XG4gICAgY29uc3QgcnVuQiA9IHRoaXMucnVucy5maW5kKHIgPT4gci5pZCA9PT0gcnVuQklkKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRSdW5BID0gcnVuQSA/IHRoaXMuY29udmVydFRvUnVuRGF0YShydW5BKSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlbGVjdGVkUnVuQiA9IHJ1bkIgPyB0aGlzLmNvbnZlcnRUb1J1bkRhdGEocnVuQikgOiB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnNldHVwU2VsZWN0Q29uZmlncygpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9SdW5EYXRhKGRhdGE6IFRlc3RDYXNlUmVzdWx0RGF0YSk6IFJ1bkRhdGEge1xuICAgIGNvbnN0IGRldmljZSA9IGRhdGEudGVzdERldmljZVJlc3VsdD8udGVzdERldmljZVNldHRpbmdzPy5kZXZpY2VOYW1lIHx8IFxuICAgICAgICAgICAgICAgICAgIGRhdGEudGVzdERldmljZVJlc3VsdD8udGVzdERldmljZVNldHRpbmdzPy5wbGF0Zm9ybSB8fCBcbiAgICAgICAgICAgICAgICAgICAnVW5rbm93biBEZXZpY2UnO1xuICAgIGNvbnN0IGJyb3dzZXIgPSBkYXRhLnRlc3REZXZpY2VSZXN1bHQ/LnRlc3REZXZpY2VTZXR0aW5ncz8uYnJvd3NlciB8fCAnVW5rbm93biBCcm93c2VyJztcbiAgICBjb25zdCBwbGF0Zm9ybSA9IGRhdGEudGVzdERldmljZVJlc3VsdD8udGVzdERldmljZVNldHRpbmdzPy5wbGF0Zm9ybSB8fCAnVW5rbm93biBQbGF0Zm9ybSc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBsYWJlbDogdGhpcy5mb3JtYXRSdW5MYWJlbChkYXRhKSxcbiAgICAgIHJlc3VsdDogZGF0YS5yZXN1bHQsXG4gICAgICBzdGFydFRpbWU6IGRhdGEuc3RhcnRUaW1lLFxuICAgICAgZHVyYXRpb246IGRhdGEuZHVyYXRpb24sXG4gICAgICB0ZXN0RGF0YVNldE5hbWU6IGRhdGEudGVzdERhdGFTZXROYW1lLFxuICAgICAgZGV2aWNlLFxuICAgICAgYnJvd3NlcixcbiAgICAgIHBsYXRmb3JtXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBUYWJsZUNvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZUNvbHVtbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGZpZWxkSWQ6ICdzdGVwJyxcbiAgICAgICAgZmllbGROYW1lOiAnU3RlcCcsXG4gICAgICAgIGZpZWxkVmFsdWU6ICdzdGVwVGl0bGUnLFxuICAgICAgICBpc1Nob3c6IHRydWUsXG4gICAgICAgIHdlaWdodDogMyxcbiAgICAgICAgcmVuZGVyOiAocm93OiBTdGVwQ29tcGFyaXNvbikgPT4ge1xuICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzBCMEIwQl1cIj4ke3Jvdy5zdGVwVGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgYDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmllbGRJZDogJ3J1bkEnLFxuICAgICAgICBmaWVsZE5hbWU6ICdSdW4gQScsXG4gICAgICAgIGlzU2hvdzogdHJ1ZSxcbiAgICAgICAgd2VpZ2h0OiAxLjUsXG4gICAgICAgIHJlbmRlcjogKHJvdzogU3RlcENvbXBhcmlzb24pID0+IHtcbiAgICAgICAgICBpZiAocm93LnJ1bkFTdGF0dXMgIT09ICdQQVNTRUQnICYmIHJvdy5ydW5BU3RhdHVzICE9PSAnRkFJTEVEJykge1xuICAgICAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjOUNBM0FGXVwiPuKAlDwvc3Bhbj4nO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlclN0YXR1c0ljb24ocm93LnJ1bkFTdGF0dXMpfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzZCNzI4MF1cIj4ke3RoaXMuZm9ybWF0RHVyYXRpb24ocm93LnJ1bkFEdXJhdGlvbiB8fCAwKX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaWVsZElkOiAncnVuQicsXG4gICAgICAgIGZpZWxkTmFtZTogJ1J1biBCJyxcbiAgICAgICAgaXNTaG93OiB0cnVlLFxuICAgICAgICB3ZWlnaHQ6IDEuNSxcbiAgICAgICAgcmVuZGVyOiAocm93OiBTdGVwQ29tcGFyaXNvbikgPT4ge1xuICAgICAgICAgIGlmIChyb3cucnVuQlN0YXR1cyAhPT0gJ1BBU1NFRCcgJiYgcm93LnJ1bkJTdGF0dXMgIT09ICdGQUlMRUQnKSB7XG4gICAgICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM2MzYzNjNdXCI+IOKAlCA8L3NwYW4+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0wLjVcIj5cbiAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlclN0YXR1c0ljb24ocm93LnJ1bkJTdGF0dXMpfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzYzNjM2M11cIj4ke3RoaXMuZm9ybWF0RHVyYXRpb24ocm93LnJ1bkJEdXJhdGlvbiB8fCAwKX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaWVsZElkOiAnY2hhbmdlJyxcbiAgICAgICAgZmllbGROYW1lOiAnQ2hhbmdlJyxcbiAgICAgICAgZmllbGRWYWx1ZTogJ2NoYW5nZScsXG4gICAgICAgIGlzU2hvdzogdHJ1ZSxcbiAgICAgICAgd2VpZ2h0OiAxLjUsXG4gICAgICAgIHJlbmRlcjogKHJvdzogU3RlcENvbXBhcmlzb24pID0+IHtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VMYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICAgICAnVU5DSEFOR0VEJzogJ1VuY2hhbmdlZCcsXG4gICAgICAgICAgICAnU1RBVFVTX0NIQU5HRUQnOiAnU3RhdHVzIENoYW5nZWQnLFxuICAgICAgICAgICAgJ1RJTUlOR19DSEFOR0VEJzogJ1RpbWluZyBDaGFuZ2VkJyxcbiAgICAgICAgICAgICdBRERFRCc6ICdBZGRlZCcsXG4gICAgICAgICAgICAnUkVNT1ZFRCc6ICdSZW1vdmVkJ1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgY2hhbmdlQ29sb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAgICAgJ1VOQ0hBTkdFRCc6ICcjNkI3MjgwJyxcbiAgICAgICAgICAgICdTVEFUVVNfQ0hBTkdFRCc6ICcjRjU5RTBCJyxcbiAgICAgICAgICAgICdUSU1JTkdfQ0hBTkdFRCc6ICcjM0I4MkY2JyxcbiAgICAgICAgICAgICdBRERFRCc6ICcjMTBCOTgxJyxcbiAgICAgICAgICAgICdSRU1PVkVEJzogJyNFRjQ0NDQnXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VCZ0NvbG9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgICAgICdVTkNIQU5HRUQnOiAnI0YzRjRGNicsXG4gICAgICAgICAgICAnU1RBVFVTX0NIQU5HRUQnOiAnI0ZFRjNDNycsXG4gICAgICAgICAgICAnVElNSU5HX0NIQU5HRUQnOiAnI0RCRUFGRScsXG4gICAgICAgICAgICAnQURERUQnOiAnI0QxRkFFNScsXG4gICAgICAgICAgICAnUkVNT1ZFRCc6ICcjRkVFMkUyJ1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNoYW5nZUxhYmVsc1tyb3cuY2hhbmdlXSB8fCByb3cuY2hhbmdlO1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gY2hhbmdlQ29sb3JzW3Jvdy5jaGFuZ2VdIHx8ICcjNkI3MjgwJztcbiAgICAgICAgICBjb25zdCBiZ0NvbG9yID0gY2hhbmdlQmdDb2xvcnNbcm93LmNoYW5nZV0gfHwgJyNGM0Y0RjYnO1xuXG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWlubGluZS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1weC0yIGNxYS1weS0wLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtdGV4dC1bMTBweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXctbWF4XCIgXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICR7YmdDb2xvcn07IGNvbG9yOiAke2NvbG9yfTtcIj5cbiAgICAgICAgICAgICAgJHtsYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyU3RhdHVzSWNvbihzdGF0dXM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdXBwZXJTdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcbiAgICBpZiAodXBwZXJTdGF0dXMgPT09ICdQQVNTRUQnKSB7XG4gICAgICByZXR1cm4gYFxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNNy45OTk5OCAxNC42NjYzQzExLjY4MTkgMTQuNjY2MyAxNC42NjY2IDExLjY4MTYgMTQuNjY2NiA3Ljk5OTY3QzE0LjY2NjYgNC4zMTc3OCAxMS42ODE5IDEuMzMzMDEgNy45OTk5OCAxLjMzMzAxQzQuMzE4MDggMS4zMzMwMSAxLjMzMzMxIDQuMzE3NzggMS4zMzMzMSA3Ljk5OTY3QzEuMzMzMzEgMTEuNjgxNiA0LjMxODA4IDE0LjY2NjMgNy45OTk5OCAxNC42NjYzWlwiIHN0cm9rZT1cIiMwMEM5NTBcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICA8cGF0aCBkPVwiTTYgOC4wMDAzM0w3LjMzMzMzIDkuMzMzNjZMMTAgNi42NjY5OVwiIHN0cm9rZT1cIiMwMEM5NTBcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgPC9zdmc+YDtcbiAgICB9IGVsc2UgaWYgKHVwcGVyU3RhdHVzID09PSAnRkFJTEVEJykge1xuICAgICAgcmV0dXJuIGBcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICA8cGF0aCBkPVwiTTguMDAwMDQgMTQuNjY3M0MxMS42ODE5IDE0LjY2NzMgMTQuNjY2NyAxMS42ODI1IDE0LjY2NjcgOC4wMDA2NUMxNC42NjY3IDQuMzE4NzUgMTEuNjgxOSAxLjMzMzk4IDguMDAwMDQgMS4zMzM5OEM0LjMxODE0IDEuMzMzOTggMS4zMzMzNyA0LjMxODc1IDEuMzMzMzcgOC4wMDA2NUMxLjMzMzM3IDExLjY4MjUgNC4zMTgxNCAxNC42NjczIDguMDAwMDQgMTQuNjY3M1pcIiBzdHJva2U9XCIjRkIyQzM2XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgPHBhdGggZD1cIk0xMCA2TDYgMTBcIiBzdHJva2U9XCIjRkIyQzM2XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgPHBhdGggZD1cIk02IDZMMTAgMTBcIiBzdHJva2U9XCIjRkIyQzM2XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgIDwvc3ZnPmA7XG4gICAgfSBlbHNlIGlmICh1cHBlclN0YXR1cyA9PT0gJ05PVF9FWEVDVVRFRCcpIHtcbiAgICAgIHJldHVybiBgXG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgPHBhdGggZD1cIk04LjAwMDA0IDE0LjY2NzNDMTEuNjgxOSAxNC42NjczIDE0LjY2NjcgMTEuNjgyNSAxNC42NjY3IDguMDAwNjVDMTQuNjY2NyA0LjMxODc1IDExLjY4MTkgMS4zMzM5OCA4LjAwMDA0IDEuMzMzOThDNC4zMTgxNCAxLjMzMzk4IDEuMzMzMzcgNC4zMTg3NSAxLjMzMzM3IDguMDAwNjVDMS4zMzMzNyAxMS42ODI1IDQuMzE4MTQgMTQuNjY3MyA4LjAwMDA0IDE0LjY2NzNaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgIDxwYXRoIGQ9XCJNNiA4SDEwXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICA8L3N2Zz5gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM2MzYzNjNdXCI+IOKAlCA8L3NwYW4+YDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdER1cmF0aW9uKG1pbGxpc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWNvbmRzID0gbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICBpZiAoc2Vjb25kcyA8IDYwKSB7XG4gICAgICByZXR1cm4gYCR7c2Vjb25kcy50b0ZpeGVkKDEpfXNgO1xuICAgIH1cbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApO1xuICAgIGNvbnN0IHJlbWFpbmluZ1NlY29uZHMgPSBNYXRoLmZsb29yKHNlY29uZHMgJSA2MCk7XG4gICAgcmV0dXJuIGAke21pbnV0ZXN9bSAke3JlbWFpbmluZ1NlY29uZHN9c2A7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvbXBhcmlzb25EYXRhKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb21wYXJpc29uRGF0YSkgcmV0dXJuO1xuXG4gICAgdGhpcy5jb21wYXJpc29uU3VtbWFyeSA9IHRoaXMuY29tcGFyaXNvbkRhdGEuc3VtbWFyeTtcbiAgICB0aGlzLnN0ZXBDb21wYXJpc29ucyA9IHRoaXMuY29tcGFyaXNvbkRhdGEuc3RlcHNDb21wYXJpc29uO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uUGFnZUNoYW5nZShldmVudDogeyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9KTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGV2ZW50LnBhZ2VTaXplO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICBnZXQgaXNFbXB0eVN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zaG93Q29tcGFyaXNvbiB8fCAhdGhpcy5zdGVwQ29tcGFyaXNvbnMgfHwgdGhpcy5zdGVwQ29tcGFyaXNvbnMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgb25Db21wYXJlQ2xpY2soKTogdm9pZCB7XG4gICAgY29uc3QgcnVuQUlkID0gdGhpcy5mb3JtLmdldCgncnVuQScpPy52YWx1ZTtcbiAgICBjb25zdCBydW5CSWQgPSB0aGlzLmZvcm0uZ2V0KCdydW5CJyk/LnZhbHVlO1xuXG4gICAgaWYgKHJ1bkFJZCAmJiBydW5CSWQgJiYgIXRoaXMuaXNDb21wYXJpbmdSdW5zKSB7XG4gICAgICB0aGlzLmNvbXBhcmVSdW5zLmVtaXQoe1xuICAgICAgICBydW5BSWQsXG4gICAgICAgIHJ1bkJJZFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNhbkNvbXBhcmUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcnVuQUlkID0gdGhpcy5mb3JtLmdldCgncnVuQScpPy52YWx1ZTtcbiAgICBjb25zdCBydW5CSWQgPSB0aGlzLmZvcm0uZ2V0KCdydW5CJyk/LnZhbHVlO1xuICAgIHJldHVybiAhIShydW5BSWQgJiYgcnVuQklkICYmICF0aGlzLmlzQ29tcGFyaW5nUnVucyk7XG4gIH1cblxuICBnZXQgcnVuQVN0YXR1c0NvbG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUnVuQSkgcmV0dXJuICcjNkI3MjgwJztcbiAgICBjb25zdCBjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnU1VDQ0VTUyc6ICcjMEI5RDY4JyxcbiAgICAgICdGQUlMVVJFJzogJyNGQjJDMzYnLFxuICAgICAgJ0FCT1JURUQnOiAnI0Y1OUUwQicsXG4gICAgICAnSU5fUFJPR1JFU1MnOiAnIzNCODJGNidcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnNbdGhpcy5zZWxlY3RlZFJ1bkEucmVzdWx0XSB8fCAnIzZCNzI4MCc7XG4gIH1cblxuICBnZXQgcnVuQlN0YXR1c0NvbG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUnVuQikgcmV0dXJuICcjNkI3MjgwJztcbiAgICBjb25zdCBjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnU1VDQ0VTUyc6ICcjMEI5RDY4JyxcbiAgICAgICdGQUlMVVJFJzogJyNGQjJDMzYnLFxuICAgICAgJ0FCT1JURUQnOiAnI0Y1OUUwQicsXG4gICAgICAnSU5fUFJPR1JFU1MnOiAnIzNCODJGNidcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnNbdGhpcy5zZWxlY3RlZFJ1bkIucmVzdWx0XSB8fCAnIzZCNzI4MCc7XG4gIH1cblxuICBnZXQgcnVuQVN0YXR1c0JvcmRlckNvbG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUnVuQSkgcmV0dXJuICcjRjNGNEY2JztcbiAgICBjb25zdCBjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnU1VDQ0VTUyc6ICcjQ0ZGMkU1JyxcbiAgICAgICdGQUlMVVJFJzogJyNGQ0Q5RDknLFxuICAgICAgJ0FCT1JURUQnOiAnI0ZFRjNDNycsXG4gICAgICAnSU5fUFJPR1JFU1MnOiAnI0RCRUFGRSdcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnNbdGhpcy5zZWxlY3RlZFJ1bkEucmVzdWx0XSB8fCAnI0YzRjRGNic7XG4gIH1cblxuICBnZXQgcnVuQlN0YXR1c0JvcmRlckNvbG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUnVuQikgcmV0dXJuICcjRjNGNEY2JztcbiAgICBjb25zdCBjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnU1VDQ0VTUyc6ICcjQ0ZGMkU1JyxcbiAgICAgICdGQUlMVVJFJzogJyNGQ0Q5RDknLFxuICAgICAgJ0FCT1JURUQnOiAnI0ZFRjNDNycsXG4gICAgICAnSU5fUFJPR1JFU1MnOiAnI0RCRUFGRSdcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnNbdGhpcy5zZWxlY3RlZFJ1bkIucmVzdWx0XSB8fCAnI0YzRjRGNic7XG4gIH1cblxuICBnZXQgcnVuQVN0YXR1c0JnQ29sb3IoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRSdW5BKSByZXR1cm4gJyNGM0Y0RjYnO1xuICAgIGNvbnN0IGNvbG9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdTVUNDRVNTJzogJyMwREJEN0QxQScsXG4gICAgICAnRkFJTFVSRSc6ICcjRUUzRjNGMUEnLFxuICAgICAgJ0FCT1JURUQnOiAnI0ZFRjNDNycsXG4gICAgICAnSU5fUFJPR1JFU1MnOiAnI0RCRUFGRSdcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnNbdGhpcy5zZWxlY3RlZFJ1bkEucmVzdWx0XSB8fCAnI0YzRjRGNic7XG4gIH1cblxuICBnZXQgcnVuQlN0YXR1c0JnQ29sb3IoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRSdW5CKSByZXR1cm4gJyNGM0Y0RjYnO1xuICAgIGNvbnN0IGNvbG9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdTVUNDRVNTJzogJyMwREJEN0QxQScsXG4gICAgICAnRkFJTFVSRSc6ICcjRUUzRjNGMUEnLFxuICAgICAgJ0FCT1JURUQnOiAnI0ZFRjNDNycsXG4gICAgICAnSU5fUFJPR1JFU1MnOiAnI0RCRUFGRSdcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnNbdGhpcy5zZWxlY3RlZFJ1bkIucmVzdWx0XSB8fCAnI0YzRjRGNic7XG4gIH1cblxuICBmb3JtYXRUaW1lKHRpbWVzdGFtcDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZXN0YW1wKTtcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCdcbiAgICB9KTtcbiAgfVxuXG4gIGZvcm1hdER1cmF0aW9uU3RyaW5nKG1pbGxpc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXREdXJhdGlvbihtaWxsaXNlY29uZHMpO1xuICB9XG5cbiAgZ2V0IHNob3dDb21wYXJpc29uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLmNvbXBhcmlzb25EYXRhICYmIHRoaXMuY29tcGFyaXNvblN1bW1hcnkpO1xuICB9XG5cbiAgZ2V0IHJ1bkFTdGF0dXNMYWJlbCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFJ1bkEpIHJldHVybiAnJztcbiAgICBjb25zdCBsYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnU1VDQ0VTUyc6ICdQYXNzZWQnLFxuICAgICAgJ0ZBSUxVUkUnOiAnRmFpbGVkJyxcbiAgICAgICdBQk9SVEVEJzogJ0Fib3J0ZWQnLFxuICAgICAgJ0lOX1BST0dSRVNTJzogJ0luIFByb2dyZXNzJ1xuICAgIH07XG4gICAgcmV0dXJuIGxhYmVsc1t0aGlzLnNlbGVjdGVkUnVuQS5yZXN1bHRdIHx8IHRoaXMuc2VsZWN0ZWRSdW5BLnJlc3VsdDtcbiAgfVxuXG4gIGdldCBydW5CU3RhdHVzTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRSdW5CKSByZXR1cm4gJyc7XG4gICAgY29uc3QgbGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ1NVQ0NFU1MnOiAnUGFzc2VkJyxcbiAgICAgICdGQUlMVVJFJzogJ0ZhaWxlZCcsXG4gICAgICAnQUJPUlRFRCc6ICdBYm9ydGVkJyxcbiAgICAgICdJTl9QUk9HUkVTUyc6ICdJbiBQcm9ncmVzcydcbiAgICB9O1xuICAgIHJldHVybiBsYWJlbHNbdGhpcy5zZWxlY3RlZFJ1bkIucmVzdWx0XSB8fCB0aGlzLnNlbGVjdGVkUnVuQi5yZXN1bHQ7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS11aS1yb290XCIgc3R5bGU9XCJkaXNwbGF5OiBibG9jazsgd2lkdGg6IDEwMCU7XCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMyBzbTpjcWEtZ2FwLTQgY3FhLXB4LTMgc206Y3FhLXB4LTQgY3FhLXB5LTQgc206Y3FhLXB5LTZcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTRFNEU0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZ3JpZCBjcWEtZ3JpZC1jb2xzLTEgbWQ6Y3FhLWdyaWQtY29scy0yIGNxYS1nYXAtNCBtZDpjcWEtZ2FwLTE2XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjNjM2MzYzXVwiPlJ1biBBIChCYXNlKTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCIgXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJydW5BU2VsZWN0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VhcmNoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvbkxvYWRNb3JlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1oaWRkZW4gbWQ6Y3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXJcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7IHRvcDogNzBweDtcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk00LjE2NjY5IDEwSDE1LjgzMzRcIiBzdHJva2U9XCIjNjM2MzYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA0LjE2Njk5TDE1LjgzMzMgMTAuMDAwM0wxMCAxNS44MzM3XCIgc3Ryb2tlPVwiIzYzNjM2M1wiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyM2MzYzNjNdXCI+UnVuIEIgKENvbXBhcmUpPC9zcGFuPlxuICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFxuICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIiBcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cInJ1bkJTZWxlY3RDb25maWdcIlxuICAgICAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWFyY2hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uTG9hZE1vcmUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dDb21wYXJpc29uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWdyaWQgY3FhLWdyaWQtY29scy0xIG1kOmNxYS1ncmlkLWNvbHMtMiBjcWEtZ2FwLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkUnVuQVwiIFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtbGcgY3FhLXAtMyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwicnVuQVN0YXR1c0JnQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJydW5BU3RhdHVzQm9yZGVyQ29sb3JcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLW1iLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMEIwQjBCXVwiPlJ1biAje3sgc2VsZWN0ZWRSdW5BLmlkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcHgtMiBjcWEtcHktMC41IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLXRleHQtWzEwcHhdIGNxYS1mb250LW1lZGl1bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJydW5BU3RhdHVzQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIicjRkZGRkZGJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBydW5BU3RhdHVzTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWdyaWQgY3FhLWdyaWQtY29scy0yIGNxYS1nYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM2MzYzNjNdXCI+VGltZTogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtZm9udC1tZWRpdW1cIj57eyBmb3JtYXRUaW1lKHNlbGVjdGVkUnVuQS5zdGFydFRpbWUpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzYzNjM2M11cIj5EdXJhdGlvbjogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtZm9udC1tZWRpdW1cIj57eyBmb3JtYXREdXJhdGlvblN0cmluZyhzZWxlY3RlZFJ1bkEuZHVyYXRpb24pIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzYzNjM2M11cIj5EYXRhc2V0OiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyMwQjBCMEJdIGNxYS1mb250LW1lZGl1bVwiPnt7IHNlbGVjdGVkUnVuQS50ZXN0RGF0YVNldE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNjM2MzYzXVwiPkRldmljZTogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtZm9udC1tZWRpdW1cIj57eyBzZWxlY3RlZFJ1bkEuZGV2aWNlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkUnVuQlwiIFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtbGcgY3FhLXAtMyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwicnVuQlN0YXR1c0JnQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJydW5CU3RhdHVzQm9yZGVyQ29sb3JcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLW1iLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMEIwQjBCXVwiPlJ1biAje3sgc2VsZWN0ZWRSdW5CLmlkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcHgtMiBjcWEtcHktMC41IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLXRleHQtWzEwcHhdIGNxYS1mb250LW1lZGl1bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJydW5CU3RhdHVzQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIicjRkZGRkZGJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBydW5CU3RhdHVzTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWdyaWQgY3FhLWdyaWQtY29scy0yIGNxYS1nYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM2MzYzNjNdXCI+VGltZTogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtZm9udC1tZWRpdW1cIj57eyBmb3JtYXRUaW1lKHNlbGVjdGVkUnVuQi5zdGFydFRpbWUpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzYzNjM2M11cIj5EdXJhdGlvbjogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtZm9udC1tZWRpdW1cIj57eyBmb3JtYXREdXJhdGlvblN0cmluZyhzZWxlY3RlZFJ1bkIuZHVyYXRpb24pIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzYzNjM2M11cIj5EYXRhc2V0OiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyMwQjBCMEJdIGNxYS1mb250LW1lZGl1bVwiPnt7IHNlbGVjdGVkUnVuQi50ZXN0RGF0YVNldE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNjM2MzYzXVwiPkRldmljZTogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtZm9udC1tZWRpdW1cIj57eyBzZWxlY3RlZFJ1bkIuZGV2aWNlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxjcWEtYnV0dG9uIFxuICAgICAgICAgICAgICB2YXJpYW50PVwiZmlsbGVkXCIgXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQ29tcGFyZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkNvbXBhcmVDbGljaygpXCI+XG4gICAgICAgICAgICAgIHt7IGlzQ29tcGFyaW5nUnVucyA/ICdDb21wYXJpbmcuLi4nIDogJ0NvbXBhcmUgUnVucycgfX1cbiAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJzaG93Q29tcGFyaXNvbiAmJiBjb21wYXJpc29uU3VtbWFyeSAmJiBzdGVwQ29tcGFyaXNvbnMgJiYgc3RlcENvbXBhcmlzb25zLmxlbmd0aCA+IDBcIiBcbiAgICAgICAgIGNsYXNzPVwiY3FhLWJnLXdoaXRlIGNxYS1wdC0zIGNxYS1wYi0wIHNtOmNxYS1wYi0xIHNtOmNxYS1wdC00IGNxYS1weC0zIHNtOmNxYS1weC02IGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIHNtOmNxYS1nYXAtNFwiPlxuICAgICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyM2MzYzNjNdXCI+U3VtbWFyeTo8L3A+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS13LVsxNHB4XSBjcWEtaC1bMTRweF0gY3FhLXRleHQtc21cIj5cbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIuOTE2NjkgNS4yNUgxMS4wODM0XCIgc3Ryb2tlPVwiIzYzNjM2M1wiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMi45MTY2OSA4Ljc1SDExLjA4MzRcIiBzdHJva2U9XCIjNjM2MzYzXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGxlYWRpbmctbm9ybWFsIGNxYS10ZXh0LVsjMEIwQjBCXVwiPnt7IGNvbXBhcmlzb25TdW1tYXJ5LnVuY2hhbmdlZCB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzZCNzI4MF1cIj5VbmNoYW5nZWQ8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41XCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLWZsZXgtc2hyaW5rLTAgY3FhLXctWzE0cHhdIGNxYS1oLVsxNHB4XSBjcWEtdGV4dC1zbVwiPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIuNjc1OSAxMC41MDAzTDguMDA5MTkgMi4zMzM2M0M3LjkwNzQzIDIuMTU0MDggNy43NTk4NyAyLjAwNDc0IDcuNTgxNTYgMS45MDA4M0M3LjQwMzI1IDEuNzk2OTMgNy4yMDA1NiAxLjc0MjE5IDYuOTk0MTkgMS43NDIxOUM2Ljc4NzgxIDEuNzQyMTkgNi41ODUxMyAxLjc5NjkzIDYuNDA2ODEgMS45MDA4M0M2LjIyODUgMi4wMDQ3NCA2LjA4MDk0IDIuMTU0MDggNS45NzkxOSAyLjMzMzYzTDEuMzEyNTIgMTAuNTAwM0MxLjIwOTY3IDEwLjY3ODQgMS4xNTU3NCAxMC44ODA2IDEuMTU2MTkgMTEuMDg2M0MxLjE1NjY1IDExLjI5MTkgMS4yMTE0NyAxMS40OTM5IDEuMzE1MTEgMTEuNjcxNUMxLjQxODc1IDExLjg0OTIgMS41Njc1MiAxMS45OTYzIDEuNzQ2MzQgMTIuMDk3OUMxLjkyNTE2IDEyLjE5OTYgMi4xMjc2NyAxMi4yNTIxIDIuMzMzMzUgMTIuMjUwM0gxMS42NjY3QzExLjg3MTQgMTIuMjUwMSAxMi4wNzI0IDEyLjE5NiAxMi4yNDk2IDEyLjA5MzVDMTIuNDI2OCAxMS45OTExIDEyLjU3MzkgMTEuODQzOCAxMi42NzYyIDExLjY2NjRDMTIuNzc4NCAxMS40ODkxIDEyLjgzMjIgMTEuMjg4IDEyLjgzMjIgMTEuMDgzM0MxMi44MzIxIDEwLjg3ODYgMTIuNzc4MiAxMC42Nzc2IDEyLjY3NTkgMTAuNTAwM1pcIiBzdHJva2U9XCIjRkQ5QTAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk03IDUuMjVWNy41ODMzM1wiIHN0cm9rZT1cIiNGRDlBMDBcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcgOS45MTY5OUg3LjAwNTgzXCIgc3Ryb2tlPVwiI0ZEOUEwMFwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1zZW1pYm9sZCBsZWFkaW5nLW5vcm1hbCBjcWEtdGV4dC1bI0UxNzEwMF1cIj57eyBjb21wYXJpc29uU3VtbWFyeS5zdGF0dXNDaGFuZ2VkIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjNkI3MjgwXVwiPlN0YXR1cyBDaGFuZ2VkPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS1mbGV4LXNocmluay0wIGNxYS13LVsxNHB4XSBjcWEtaC1bMTRweF0gY3FhLXRleHQtc21cIj5cbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIuOTE2NjkgN0gxMS4wODM0XCIgc3Ryb2tlPVwiIzAwQzk1MFwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNyAyLjkxNjk5VjExLjA4MzdcIiBzdHJva2U9XCIjMDBDOTUwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGxlYWRpbmctbm9ybWFsIGNxYS10ZXh0LVsjMDBBNjNFXVwiPnt7IGNvbXBhcmlzb25TdW1tYXJ5LmFkZGVkIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjNkI3MjgwXVwiPkFkZGVkPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS1mbGV4LXNocmluay0wIGNxYS13LVsxNHB4XSBjcWEtaC1bMTRweF0gY3FhLXRleHQtc21cIj5cbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIuOTE2NjkgN0gxMS4wODM0XCIgc3Ryb2tlPVwiI0ZCMkMzNlwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1zZW1pYm9sZCBsZWFkaW5nLW5vcm1hbCBjcWEtdGV4dC1bI0ZCMkMzNl1cIj57eyBjb21wYXJpc29uU3VtbWFyeS5yZW1vdmVkIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjNkI3MjgwXVwiPlJlbW92ZWQ8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41XCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLWZsZXgtc2hyaW5rLTAgY3FhLXctWzE0cHhdIGNxYS1oLVsxNHB4XSBjcWEtdGV4dC1zbVwiPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4wMDAwMiAxMi44MzM3QzEwLjIyMTcgMTIuODMzNyAxMi44MzM0IDEwLjIyMiAxMi44MzM0IDcuMDAwMzNDMTIuODMzNCAzLjc3ODY2IDEwLjIyMTcgMS4xNjY5OSA3LjAwMDAyIDEuMTY2OTlDMy43NzgzNiAxLjE2Njk5IDEuMTY2NjkgMy43Nzg2NiAxLjE2NjY5IDcuMDAwMzNDMS4xNjY2OSAxMC4yMjIgMy43NzgzNiAxMi44MzM3IDcuMDAwMDIgMTIuODMzN1pcIiBzdHJva2U9XCIjMkI3RkZGXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk03IDMuNVY3TDkuMzMzMzMgOC4xNjY2N1wiIHN0cm9rZT1cIiMyQjdGRkZcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgbGVhZGluZy1ub3JtYWwgY3FhLXRleHQtWyMxNTVERkNdXCI+e3sgY29tcGFyaXNvblN1bW1hcnkudGltaW5nIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjNkI3MjgwXVwiPlRpbWluZyBDaGFuZ2VkPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1sZyBjcWEtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICA8Y3FhLXRhYmxlLXRlbXBsYXRlXG4gICAgICAgIFtjb2x1bW5zXT1cInRhYmxlQ29sdW1uc1wiXG4gICAgICAgIFtkYXRhXT1cInN0ZXBDb21wYXJpc29uc1wiXG4gICAgICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgW2lzRW1wdHlTdGF0ZV09XCJpc0VtcHR5U3RhdGVcIlxuICAgICAgICBbZW1wdHlTdGF0ZUNvbmZpZ109XCJlbXB0eVN0YXRlQ29uZmlnXCJcbiAgICAgICAgW2lzVGFibGVEYXRhTG9hZGluZ109XCJpc1RhYmxlRGF0YUxvYWRpbmdcIlxuICAgICAgICBbc2hvd1NlYXJjaEJhcl09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93RmlsdGVyQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dTZXR0aW5nc0J1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93QXV0b1JlZnJlc2hCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICBbc2hvd090aGVyQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dGaWx0ZXJQYW5lbF09XCJmYWxzZVwiXG4gICAgICAgIFtzZXJ2ZXJTaWRlUGFnaW5hdGlvbl09XCJmYWxzZVwiXG4gICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS10YWJsZS10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cblxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
448
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS1ydW5zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcGFyZS1ydW5zL2NvbXBhcmUtcnVucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBhcmUtcnVucy9jb21wYXJlLXJ1bnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQW9DLE1BQU0sRUFBRSxZQUFZLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSzVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7OztBQXlGN0UsTUFBTSxPQUFPLG9CQUFvQjtJQStCL0IsWUFDVSxFQUFlLEVBQ2YsR0FBc0I7UUFEdEIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBaEN2QixTQUFJLEdBQXlCLEVBQUUsQ0FBQztRQUVoQyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVoQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFDL0MsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzFDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFTM0Qsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQXlCLEVBQUUsQ0FBQztRQUV4QyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFFdEIscUJBQWdCLEdBQXFCO1lBQ25DLEtBQUssRUFBRSxvQkFBb0I7WUFDM0IsV0FBVyxFQUFFLDhFQUE4RTtZQUMzRixRQUFRLEVBQUUsa0JBQWtCLENBQUMsWUFBWTtZQUN6QyxPQUFPLEVBQUUs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QUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB9IGZyb20gJy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljVGFibGVDb2x1bW4gfSBmcm9tICcuLi90YWJsZS9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb25maWcgfSBmcm9tICcuLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVNUFRZX1NUQVRFX0lNQUdFUyB9IGZyb20gJy4uL2Fzc2V0cy9pbWFnZXMvaW1hZ2UtYXNzZXRzLmNvbnN0YW50cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdERldmljZSB7XG4gIGlkOiBudW1iZXI7XG4gIHRlc3RQbGFuSWQ6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZztcbiAgYnJvd3Nlcjogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBicm93c2VyVmVyc2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3REZXZpY2VTZXR0aW5ncyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIG9zVmVyc2lvbjogc3RyaW5nO1xuICBicm93c2VyOiBzdHJpbmc7XG4gIGJyb3dzZXJWZXJzaW9uOiBzdHJpbmc7XG4gIHJlc29sdXRpb246IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgZGV2aWNlTmFtZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0RGV2aWNlUmVzdWx0IHtcbiAgdGVzdERldmljZTogVGVzdERldmljZTtcbiAgdGVzdERldmljZVNldHRpbmdzOiBUZXN0RGV2aWNlU2V0dGluZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdENhc2VSZXN1bHREYXRhIHtcbiAgaWQ6IG51bWJlcjtcbiAgdGVzdENhc2VJZDogbnVtYmVyO1xuICB0ZXN0UGxhblJlc3VsdElkOiBudW1iZXI7XG4gIHJlc3VsdDogJ1NVQ0NFU1MnIHwgJ0ZBSUxVUkUnIHwgJ0FCT1JURUQnIHwgJ0lOX1BST0dSRVNTJztcbiAgc3RhdHVzOiAnU1RBVFVTX0NPTVBMRVRFRCcgfCAnU1RBVFVTX0lOX1BST0dSRVNTJyB8ICdTVEFUVVNfUVVFVUVEJztcbiAgc3RhcnRUaW1lOiBudW1iZXI7XG4gIGVuZFRpbWU6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgdGVzdERhdGFTZXROYW1lOiBzdHJpbmc7XG4gIHRlc3REZXZpY2VSZXN1bHQ6IFRlc3REZXZpY2VSZXN1bHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuRGF0YSB7XG4gIGlkOiBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHJlc3VsdDogJ1NVQ0NFU1MnIHwgJ0ZBSUxVUkUnIHwgJ0FCT1JURUQnIHwgJ0lOX1BST0dSRVNTJztcbiAgc3RhcnRUaW1lOiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIHRlc3REYXRhU2V0TmFtZTogc3RyaW5nO1xuICBkZXZpY2U6IHN0cmluZztcbiAgYnJvd3Nlcjogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBhcmlzb25TdW1tYXJ5IHtcbiAgdW5jaGFuZ2VkOiBudW1iZXI7XG4gIHN0YXR1c0NoYW5nZWQ6IG51bWJlcjtcbiAgYWRkZWQ6IG51bWJlcjtcbiAgcmVtb3ZlZDogbnVtYmVyO1xuICB0aW1pbmc6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwQ29tcGFyaXNvbiB7XG4gIHN0ZXBJZDogc3RyaW5nO1xuICBzdGVwVGl0bGU6IHN0cmluZztcbiAgcnVuQVN0YXR1cz86IHN0cmluZztcbiAgcnVuQUR1cmF0aW9uPzogbnVtYmVyO1xuICBydW5CU3RhdHVzPzogc3RyaW5nO1xuICBydW5CRHVyYXRpb24/OiBudW1iZXI7XG4gIGNoYW5nZTogJ1VOQ0hBTkdFRCcgfCAnU1RBVFVTX0NIQU5HRUQnIHwgJ1RJTUlOR19DSEFOR0VEJyB8ICdBRERFRCcgfCAnUkVNT1ZFRCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFyaXNvblJlc3BvbnNlIHtcbiAgc3VtbWFyeTogQ29tcGFyaXNvblN1bW1hcnk7XG4gIHN0ZXBzQ29tcGFyaXNvbjogU3RlcENvbXBhcmlzb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wYXJlUmVxdWVzdCB7XG4gIHJ1bkFJZDogbnVtYmVyO1xuICBydW5CSWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXF1ZXN0IHtcbiAga2V5OiBzdHJpbmc7XG4gIHF1ZXJ5OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1jb21wYXJlLXJ1bnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tcGFyZS1ydW5zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBDb21wYXJlUnVuc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcnVuczogVGVzdENhc2VSZXN1bHREYXRhW10gPSBbXTtcbiAgQElucHV0KCkgY29tcGFyaXNvbkRhdGE/OiBDb21wYXJpc29uUmVzcG9uc2U7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ1J1bnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaGFzTW9yZVJ1bnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNDb21wYXJpbmdSdW5zOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICBAT3V0cHV0KCkgc2VhcmNoUnVucyA9IG5ldyBFdmVudEVtaXR0ZXI8U2VhcmNoUmVxdWVzdD4oKTtcbiAgQE91dHB1dCgpIGxvYWRNb3JlUnVucyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgY29tcGFyZVJ1bnMgPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBhcmVSZXF1ZXN0PigpO1xuXG4gIGZvcm0hOiBGb3JtR3JvdXA7XG4gIHJ1bkFTZWxlY3RDb25maWchOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWc7XG4gIHJ1bkJTZWxlY3RDb25maWchOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWc7XG5cbiAgc2VsZWN0ZWRSdW5BPzogUnVuRGF0YTtcbiAgc2VsZWN0ZWRSdW5CPzogUnVuRGF0YTtcbiAgY29tcGFyaXNvblN1bW1hcnk/OiBDb21wYXJpc29uU3VtbWFyeTtcbiAgc3RlcENvbXBhcmlzb25zOiBTdGVwQ29tcGFyaXNvbltdID0gW107XG4gIHRhYmxlQ29sdW1uczogRHluYW1pY1RhYmxlQ29sdW1uW10gPSBbXTtcbiAgXG4gIHBhZ2VJbmRleDogbnVtYmVyID0gMDtcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBcbiAgZW1wdHlTdGF0ZUNvbmZpZzogRW1wdHlTdGF0ZUNvbmZpZyA9IHtcbiAgICB0aXRsZTogJ05vIENvbXBhcmlzb24gRGF0YScsXG4gICAgZGVzY3JpcHRpb246ICdTZWxlY3QgdHdvIHJ1bnMgdG8gY29tcGFyZSBhbmQgc2VlIGRldGFpbGVkIHN0ZXAtYnktc3RlcCBjb21wYXJpc29uIHJlc3VsdHMuJyxcbiAgICBpbWFnZVVybDogRU1QVFlfU1RBVEVfSU1BR0VTLkNPTVBBUkVfUlVOUyxcbiAgICBhY3Rpb25zOiBbXVxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcbiAgICB0aGlzLnNldHVwU2VsZWN0Q29uZmlncygpO1xuICAgIHRoaXMuc2V0dXBUYWJsZUNvbHVtbnMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sncnVucyddICYmICFjaGFuZ2VzWydydW5zJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuc2V0dXBTZWxlY3RDb25maWdzKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGNoYW5nZXNbJ2NvbXBhcmlzb25EYXRhJ10gJiYgdGhpcy5jb21wYXJpc29uRGF0YSkge1xuICAgICAgdGhpcy5oYW5kbGVDb21wYXJpc29uRGF0YSgpO1xuICAgIH1cbiAgICBcbiAgICBpZiAoY2hhbmdlc1snaXNMb2FkaW5nUnVucyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdENvbmZpZ3NMb2FkaW5nKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgcnVuQTogW251bGxdLFxuICAgICAgcnVuQjogW251bGxdXG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUnVucygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFNlbGVjdENvbmZpZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgcnVuQUlkID0gdGhpcy5mb3JtPy5nZXQoJ3J1bkEnKT8udmFsdWU7XG4gICAgY29uc3QgcnVuQklkID0gdGhpcy5mb3JtPy5nZXQoJ3J1bkInKT8udmFsdWU7XG4gICAgXG4gICAgY29uc3QgYWxsT3B0aW9ucyA9IHRoaXMucnVucy5tYXAocnVuID0+ICh7XG4gICAgICBpZDogcnVuLmlkLFxuICAgICAgdmFsdWU6IHJ1bi5pZCxcbiAgICAgIGxhYmVsOiB0aGlzLmZvcm1hdFJ1bkxhYmVsKHJ1biksXG4gICAgICBuYW1lOiB0aGlzLmZvcm1hdFJ1bkxhYmVsKHJ1bilcbiAgICB9KSk7XG5cbiAgICBjb25zdCBydW5BT3B0aW9ucyA9IGFsbE9wdGlvbnMuZmlsdGVyKG9wdCA9PiBvcHQuaWQgIT09IHJ1bkJJZCk7XG4gICAgY29uc3QgcnVuQk9wdGlvbnMgPSBhbGxPcHRpb25zLmZpbHRlcihvcHQgPT4gb3B0LmlkICE9PSBydW5BSWQpO1xuXG4gICAgdGhpcy5ydW5BU2VsZWN0Q29uZmlnID0ge1xuICAgICAga2V5OiAncnVuQScsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBwbGFjZWhvbGRlcjogJ1NlYXJjaCBhbmQgc2VsZWN0IHJ1bicsXG4gICAgICBvcHRpb25zOiBydW5BT3B0aW9ucyxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBzZXJ2ZXJTZWFyY2g6IHRydWUsXG4gICAgICBoYXNNb3JlOiB0aGlzLmhhc01vcmVSdW5zLFxuICAgICAgaXNMb2FkaW5nOiB0aGlzLmlzTG9hZGluZ1J1bnMsXG4gICAgICBvblNlYXJjaDogKHF1ZXJ5OiBzdHJpbmcpID0+IHRoaXMuaGFuZGxlU2VhcmNoUnVucyhxdWVyeSwgJ3J1bkEnKSxcbiAgICAgIG9uTG9hZE1vcmU6IChxdWVyeT86IHN0cmluZykgPT4gdGhpcy5oYW5kbGVMb2FkTW9yZVJ1bnMocXVlcnkgfHwgJycpXG4gICAgfTtcblxuICAgIHRoaXMucnVuQlNlbGVjdENvbmZpZyA9IHtcbiAgICAgIGtleTogJ3J1bkInLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdTZWFyY2ggYW5kIHNlbGVjdCBydW4nLFxuICAgICAgb3B0aW9uczogcnVuQk9wdGlvbnMsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgc2VydmVyU2VhcmNoOiB0cnVlLFxuICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlUnVucyxcbiAgICAgIGlzTG9hZGluZzogdGhpcy5pc0xvYWRpbmdSdW5zLFxuICAgICAgb25TZWFyY2g6IChxdWVyeTogc3RyaW5nKSA9PiB0aGlzLmhhbmRsZVNlYXJjaFJ1bnMocXVlcnksICdydW5CJyksXG4gICAgICBvbkxvYWRNb3JlOiAocXVlcnk/OiBzdHJpbmcpID0+IHRoaXMuaGFuZGxlTG9hZE1vcmVSdW5zKHF1ZXJ5IHx8ICcnKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFJ1bkxhYmVsKHJ1bjogVGVzdENhc2VSZXN1bHREYXRhKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocnVuLnN0YXJ0VGltZSk7XG4gICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgc2Vjb25kOiAnMi1kaWdpdCdcbiAgICB9KTtcbiAgICByZXR1cm4gYFJ1biAjJHtydW4uaWR9IOKAoiAke2Zvcm1hdHRlZERhdGV9YDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0Q29uZmlnc0xvYWRpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucnVuQVNlbGVjdENvbmZpZykge1xuICAgICAgdGhpcy5ydW5BU2VsZWN0Q29uZmlnID0ge1xuICAgICAgICAuLi50aGlzLnJ1bkFTZWxlY3RDb25maWcsXG4gICAgICAgIGlzTG9hZGluZzogdGhpcy5pc0xvYWRpbmdSdW5zLFxuICAgICAgICBoYXNNb3JlOiB0aGlzLmhhc01vcmVSdW5zXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5ydW5CU2VsZWN0Q29uZmlnKSB7XG4gICAgICB0aGlzLnJ1bkJTZWxlY3RDb25maWcgPSB7XG4gICAgICAgIC4uLnRoaXMucnVuQlNlbGVjdENvbmZpZyxcbiAgICAgICAgaXNMb2FkaW5nOiB0aGlzLmlzTG9hZGluZ1J1bnMsXG4gICAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVJ1bnNcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU2VhcmNoUnVucyhxdWVyeTogc3RyaW5nLCBrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoUnVucy5lbWl0KHsga2V5LCBxdWVyeSB9KTtcbiAgfVxuXG4gIGhhbmRsZUxvYWRNb3JlUnVucyhxdWVyeTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkTW9yZVJ1bnMuZW1pdChxdWVyeSk7XG4gIH1cblxuICBvblNlYXJjaENoYW5nZShldmVudDogU2VhcmNoUmVxdWVzdCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdvblNlYXJjaENoYW5nZScsIGV2ZW50KTtcbiAgICB0aGlzLnNlYXJjaFJ1bnMuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkxvYWRNb3JlKGV2ZW50OiB7IGtleTogc3RyaW5nOyBxdWVyeTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRNb3JlUnVucy5lbWl0KGV2ZW50LnF1ZXJ5KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRSdW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IHJ1bkFJZCA9IHRoaXMuZm9ybS5nZXQoJ3J1bkEnKT8udmFsdWU7XG4gICAgY29uc3QgcnVuQklkID0gdGhpcy5mb3JtLmdldCgncnVuQicpPy52YWx1ZTtcblxuICAgIGNvbnN0IHJ1bkEgPSB0aGlzLnJ1bnMuZmluZChyID0+IHIuaWQgPT09IHJ1bkFJZCk7XG4gICAgY29uc3QgcnVuQiA9IHRoaXMucnVucy5maW5kKHIgPT4gci5pZCA9PT0gcnVuQklkKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRSdW5BID0gcnVuQSA/IHRoaXMuY29udmVydFRvUnVuRGF0YShydW5BKSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlbGVjdGVkUnVuQiA9IHJ1bkIgPyB0aGlzLmNvbnZlcnRUb1J1bkRhdGEocnVuQikgOiB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnNldHVwU2VsZWN0Q29uZmlncygpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9SdW5EYXRhKGRhdGE6IFRlc3RDYXNlUmVzdWx0RGF0YSk6IFJ1bkRhdGEge1xuICAgIGNvbnN0IGRldmljZSA9IGRhdGEudGVzdERldmljZVJlc3VsdD8udGVzdERldmljZVNldHRpbmdzPy5kZXZpY2VOYW1lIHx8IFxuICAgICAgICAgICAgICAgICAgIGRhdGEudGVzdERldmljZVJlc3VsdD8udGVzdERldmljZVNldHRpbmdzPy5wbGF0Zm9ybSB8fCBcbiAgICAgICAgICAgICAgICAgICAnVW5rbm93biBEZXZpY2UnO1xuICAgIGNvbnN0IGJyb3dzZXIgPSBkYXRhLnRlc3REZXZpY2VSZXN1bHQ/LnRlc3REZXZpY2VTZXR0aW5ncz8uYnJvd3NlciB8fCAnVW5rbm93biBCcm93c2VyJztcbiAgICBjb25zdCBwbGF0Zm9ybSA9IGRhdGEudGVzdERldmljZVJlc3VsdD8udGVzdERldmljZVNldHRpbmdzPy5wbGF0Zm9ybSB8fCAnVW5rbm93biBQbGF0Zm9ybSc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBsYWJlbDogdGhpcy5mb3JtYXRSdW5MYWJlbChkYXRhKSxcbiAgICAgIHJlc3VsdDogZGF0YS5yZXN1bHQsXG4gICAgICBzdGFydFRpbWU6IGRhdGEuc3RhcnRUaW1lLFxuICAgICAgZHVyYXRpb246IGRhdGEuZHVyYXRpb24sXG4gICAgICB0ZXN0RGF0YVNldE5hbWU6IGRhdGEudGVzdERhdGFTZXROYW1lLFxuICAgICAgZGV2aWNlLFxuICAgICAgYnJvd3NlcixcbiAgICAgIHBsYXRmb3JtXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBUYWJsZUNvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZUNvbHVtbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGZpZWxkSWQ6ICdzdGVwJyxcbiAgICAgICAgZmllbGROYW1lOiAnU3RlcCcsXG4gICAgICAgIGZpZWxkVmFsdWU6ICdzdGVwVGl0bGUnLFxuICAgICAgICBpc1Nob3c6IHRydWUsXG4gICAgICAgIHdlaWdodDogMyxcbiAgICAgICAgcmVuZGVyOiAocm93OiBTdGVwQ29tcGFyaXNvbikgPT4ge1xuICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzBCMEIwQl1cIj4ke3Jvdy5zdGVwVGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgYDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmllbGRJZDogJ3J1bkEnLFxuICAgICAgICBmaWVsZE5hbWU6ICdSdW4gQScsXG4gICAgICAgIGlzU2hvdzogdHJ1ZSxcbiAgICAgICAgd2VpZ2h0OiAxLjUsXG4gICAgICAgIHJlbmRlcjogKHJvdzogU3RlcENvbXBhcmlzb24pID0+IHtcbiAgICAgICAgICBpZiAocm93LnJ1bkFTdGF0dXMgIT09ICdQQVNTRUQnICYmIHJvdy5ydW5BU3RhdHVzICE9PSAnRkFJTEVEJykge1xuICAgICAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjOUNBM0FGXVwiPuKAlDwvc3Bhbj4nO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlclN0YXR1c0ljb24ocm93LnJ1bkFTdGF0dXMpfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzZCNzI4MF1cIj4ke3RoaXMuZm9ybWF0RHVyYXRpb24ocm93LnJ1bkFEdXJhdGlvbiB8fCAwKX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaWVsZElkOiAncnVuQicsXG4gICAgICAgIGZpZWxkTmFtZTogJ1J1biBCJyxcbiAgICAgICAgaXNTaG93OiB0cnVlLFxuICAgICAgICB3ZWlnaHQ6IDEuNSxcbiAgICAgICAgcmVuZGVyOiAocm93OiBTdGVwQ29tcGFyaXNvbikgPT4ge1xuICAgICAgICAgIGlmIChyb3cucnVuQlN0YXR1cyAhPT0gJ1BBU1NFRCcgJiYgcm93LnJ1bkJTdGF0dXMgIT09ICdGQUlMRUQnKSB7XG4gICAgICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM2MzYzNjNdXCI+IOKAlCA8L3NwYW4+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0wLjVcIj5cbiAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlclN0YXR1c0ljb24ocm93LnJ1bkJTdGF0dXMpfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzYzNjM2M11cIj4ke3RoaXMuZm9ybWF0RHVyYXRpb24ocm93LnJ1bkJEdXJhdGlvbiB8fCAwKX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaWVsZElkOiAnY2hhbmdlJyxcbiAgICAgICAgZmllbGROYW1lOiAnQ2hhbmdlJyxcbiAgICAgICAgZmllbGRWYWx1ZTogJ2NoYW5nZScsXG4gICAgICAgIGlzU2hvdzogdHJ1ZSxcbiAgICAgICAgd2VpZ2h0OiAxLjUsXG4gICAgICAgIHJlbmRlcjogKHJvdzogU3RlcENvbXBhcmlzb24pID0+IHtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VMYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICAgICAnVU5DSEFOR0VEJzogJ1VuY2hhbmdlZCcsXG4gICAgICAgICAgICAnU1RBVFVTX0NIQU5HRUQnOiAnU3RhdHVzIENoYW5nZWQnLFxuICAgICAgICAgICAgJ1RJTUlOR19DSEFOR0VEJzogJ1RpbWluZyBDaGFuZ2VkJyxcbiAgICAgICAgICAgICdBRERFRCc6ICdBZGRlZCcsXG4gICAgICAgICAgICAnUkVNT1ZFRCc6ICdSZW1vdmVkJ1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgY2hhbmdlQ29sb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAgICAgJ1VOQ0hBTkdFRCc6ICcjNkI3MjgwJyxcbiAgICAgICAgICAgICdTVEFUVVNfQ0hBTkdFRCc6ICcjRjU5RTBCJyxcbiAgICAgICAgICAgICdUSU1JTkdfQ0hBTkdFRCc6ICcjM0I4MkY2JyxcbiAgICAgICAgICAgICdBRERFRCc6ICcjMTBCOTgxJyxcbiAgICAgICAgICAgICdSRU1PVkVEJzogJyNFRjQ0NDQnXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VCZ0NvbG9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgICAgICdVTkNIQU5HRUQnOiAnI0YzRjRGNicsXG4gICAgICAgICAgICAnU1RBVFVTX0NIQU5HRUQnOiAnI0ZFRjNDNycsXG4gICAgICAgICAgICAnVElNSU5HX0NIQU5HRUQnOiAnI0RCRUFGRScsXG4gICAgICAgICAgICAnQURERUQnOiAnI0QxRkFFNScsXG4gICAgICAgICAgICAnUkVNT1ZFRCc6ICcjRkVFMkUyJ1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNoYW5nZUxhYmVsc1tyb3cuY2hhbmdlXSB8fCByb3cuY2hhbmdlO1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gY2hhbmdlQ29sb3JzW3Jvdy5jaGFuZ2VdIHx8ICcjNkI3MjgwJztcbiAgICAgICAgICBjb25zdCBiZ0NvbG9yID0gY2hhbmdlQmdDb2xvcnNbcm93LmNoYW5nZV0gfHwgJyNGM0Y0RjYnO1xuXG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWlubGluZS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1weC0yIGNxYS1weS0wLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtdGV4dC1bMTBweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXctbWF4XCIgXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICR7YmdDb2xvcn07IGNvbG9yOiAke2NvbG9yfTtcIj5cbiAgICAgICAgICAgICAgJHtsYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyU3RhdHVzSWNvbihzdGF0dXM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdXBwZXJTdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcbiAgICBpZiAodXBwZXJTdGF0dXMgPT09ICdQQVNTRUQnKSB7XG4gICAgICByZXR1cm4gYFxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNNy45OTk5OCAxNC42NjYzQzExLjY4MTkgMTQuNjY2MyAxNC42NjY2IDExLjY4MTYgMTQuNjY2NiA3Ljk5OTY3QzE0LjY2NjYgNC4zMTc3OCAxMS42ODE5IDEuMzMzMDEgNy45OTk5OCAxLjMzMzAxQzQuMzE4MDggMS4zMzMwMSAxLjMzMzMxIDQuMzE3NzggMS4zMzMzMSA3Ljk5OTY3QzEuMzMzMzEgMTEuNjgxNiA0LjMxODA4IDE0LjY2NjMgNy45OTk5OCAxNC42NjYzWlwiIHN0cm9rZT1cIiMwMEM5NTBcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICA8cGF0aCBkPVwiTTYgOC4wMDAzM0w3LjMzMzMzIDkuMzMzNjZMMTAgNi42NjY5OVwiIHN0cm9rZT1cIiMwMEM5NTBcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgPC9zdmc+YDtcbiAgICB9IGVsc2UgaWYgKHVwcGVyU3RhdHVzID09PSAnRkFJTEVEJykge1xuICAgICAgcmV0dXJuIGBcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICA8cGF0aCBkPVwiTTguMDAwMDQgMTQuNjY3M0MxMS42ODE5IDE0LjY2NzMgMTQuNjY2NyAxMS42ODI1IDE0LjY2NjcgOC4wMDA2NUMxNC42NjY3IDQuMzE4NzUgMTEuNjgxOSAxLjMzMzk4IDguMDAwMDQgMS4zMzM5OEM0LjMxODE0IDEuMzMzOTggMS4zMzMzNyA0LjMxODc1IDEuMzMzMzcgOC4wMDA2NUMxLjMzMzM3IDExLjY4MjUgNC4zMTgxNCAxNC42NjczIDguMDAwMDQgMTQuNjY3M1pcIiBzdHJva2U9XCIjRkIyQzM2XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgPHBhdGggZD1cIk0xMCA2TDYgMTBcIiBzdHJva2U9XCIjRkIyQzM2XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgPHBhdGggZD1cIk02IDZMMTAgMTBcIiBzdHJva2U9XCIjRkIyQzM2XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgIDwvc3ZnPmA7XG4gICAgfSBlbHNlIGlmICh1cHBlclN0YXR1cyA9PT0gJ05PVF9FWEVDVVRFRCcpIHtcbiAgICAgIHJldHVybiBgXG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgPHBhdGggZD1cIk04LjAwMDA0IDE0LjY2NzNDMTEuNjgxOSAxNC42NjczIDE0LjY2NjcgMTEuNjgyNSAxNC42NjY3IDguMDAwNjVDMTQuNjY2NyA0LjMxODc1IDExLjY4MTkgMS4zMzM5OCA4LjAwMDA0IDEuMzMzOThDNC4zMTgxNCAxLjMzMzk4IDEuMzMzMzcgNC4zMTg3NSAxLjMzMzM3IDguMDAwNjVDMS4zMzMzNyAxMS42ODI1IDQuMzE4MTQgMTQuNjY3MyA4LjAwMDA0IDE0LjY2NzNaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgIDxwYXRoIGQ9XCJNNiA4SDEwXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICA8L3N2Zz5gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM2MzYzNjNdXCI+IOKAlCA8L3NwYW4+YDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdER1cmF0aW9uKG1pbGxpc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWNvbmRzID0gbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICBpZiAoc2Vjb25kcyA8IDYwKSB7XG4gICAgICByZXR1cm4gYCR7c2Vjb25kcy50b0ZpeGVkKDEpfXNgO1xuICAgIH1cbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApO1xuICAgIGNvbnN0IHJlbWFpbmluZ1NlY29uZHMgPSBNYXRoLmZsb29yKHNlY29uZHMgJSA2MCk7XG4gICAgcmV0dXJuIGAke21pbnV0ZXN9bSAke3JlbWFpbmluZ1NlY29uZHN9c2A7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvbXBhcmlzb25EYXRhKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb21wYXJpc29uRGF0YSkgcmV0dXJuO1xuXG4gICAgdGhpcy5jb21wYXJpc29uU3VtbWFyeSA9IHRoaXMuY29tcGFyaXNvbkRhdGEuc3VtbWFyeTtcbiAgICB0aGlzLnN0ZXBDb21wYXJpc29ucyA9IHRoaXMuY29tcGFyaXNvbkRhdGEuc3RlcHNDb21wYXJpc29uO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uUGFnZUNoYW5nZShldmVudDogeyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9KTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGV2ZW50LnBhZ2VTaXplO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICBnZXQgaXNFbXB0eVN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zaG93Q29tcGFyaXNvbiB8fCAhdGhpcy5zdGVwQ29tcGFyaXNvbnMgfHwgdGhpcy5zdGVwQ29tcGFyaXNvbnMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgb25Db21wYXJlQ2xpY2soKTogdm9pZCB7XG4gICAgY29uc3QgcnVuQUlkID0gdGhpcy5mb3JtLmdldCgncnVuQScpPy52YWx1ZTtcbiAgICBjb25zdCBydW5CSWQgPSB0aGlzLmZvcm0uZ2V0KCdydW5CJyk/LnZhbHVlO1xuXG4gICAgaWYgKHJ1bkFJZCAmJiBydW5CSWQgJiYgIXRoaXMuaXNDb21wYXJpbmdSdW5zKSB7XG4gICAgICB0aGlzLmNvbXBhcmVSdW5zLmVtaXQoe1xuICAgICAgICBydW5BSWQsXG4gICAgICAgIHJ1bkJJZFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNhbkNvbXBhcmUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcnVuQUlkID0gdGhpcy5mb3JtLmdldCgncnVuQScpPy52YWx1ZTtcbiAgICBjb25zdCBydW5CSWQgPSB0aGlzLmZvcm0uZ2V0KCdydW5CJyk/LnZhbHVlO1xuICAgIHJldHVybiAhIShydW5BSWQgJiYgcnVuQklkICYmICF0aGlzLmlzQ29tcGFyaW5nUnVucyk7XG4gIH1cblxuICBnZXQgcnVuQVN0YXR1c0NvbG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUnVuQSkgcmV0dXJuICcjNkI3MjgwJztcbiAgICBjb25zdCBjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnU1VDQ0VTUyc6ICcjMEI5RDY4JyxcbiAgICAgICdGQUlMVVJFJzogJyNGQjJDMzYnLFxuICAgICAgJ0FCT1JURUQnOiAnI0Y1OUUwQicsXG4gICAgICAnSU5fUFJPR1JFU1MnOiAnIzNCODJGNidcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnNbdGhpcy5zZWxlY3RlZFJ1bkEucmVzdWx0XSB8fCAnIzZCNzI4MCc7XG4gIH1cblxuICBnZXQgcnVuQlN0YXR1c0NvbG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUnVuQikgcmV0dXJuICcjNkI3MjgwJztcbiAgICBjb25zdCBjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnU1VDQ0VTUyc6ICcjMEI5RDY4JyxcbiAgICAgICdGQUlMVVJFJzogJyNGQjJDMzYnLFxuICAgICAgJ0FCT1JURUQnOiAnI0Y1OUUwQicsXG4gICAgICAnSU5fUFJPR1JFU1MnOiAnIzNCODJGNidcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnNbdGhpcy5zZWxlY3RlZFJ1bkIucmVzdWx0XSB8fCAnIzZCNzI4MCc7XG4gIH1cblxuICBnZXQgcnVuQVN0YXR1c0JvcmRlckNvbG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUnVuQSkgcmV0dXJuICcjRjNGNEY2JztcbiAgICBjb25zdCBjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnU1VDQ0VTUyc6ICcjQ0ZGMkU1JyxcbiAgICAgICdGQUlMVVJFJzogJyNGQ0Q5RDknLFxuICAgICAgJ0FCT1JURUQnOiAnI0ZFRjNDNycsXG4gICAgICAnSU5fUFJPR1JFU1MnOiAnI0RCRUFGRSdcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnNbdGhpcy5zZWxlY3RlZFJ1bkEucmVzdWx0XSB8fCAnI0YzRjRGNic7XG4gIH1cblxuICBnZXQgcnVuQlN0YXR1c0JvcmRlckNvbG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUnVuQikgcmV0dXJuICcjRjNGNEY2JztcbiAgICBjb25zdCBjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnU1VDQ0VTUyc6ICcjQ0ZGMkU1JyxcbiAgICAgICdGQUlMVVJFJzogJyNGQ0Q5RDknLFxuICAgICAgJ0FCT1JURUQnOiAnI0ZFRjNDNycsXG4gICAgICAnSU5fUFJPR1JFU1MnOiAnI0RCRUFGRSdcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnNbdGhpcy5zZWxlY3RlZFJ1bkIucmVzdWx0XSB8fCAnI0YzRjRGNic7XG4gIH1cblxuICBnZXQgcnVuQVN0YXR1c0JnQ29sb3IoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRSdW5BKSByZXR1cm4gJyNGM0Y0RjYnO1xuICAgIGNvbnN0IGNvbG9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdTVUNDRVNTJzogJyMwREJEN0QxQScsXG4gICAgICAnRkFJTFVSRSc6ICcjRUUzRjNGMUEnLFxuICAgICAgJ0FCT1JURUQnOiAnI0ZFRjNDNycsXG4gICAgICAnSU5fUFJPR1JFU1MnOiAnI0RCRUFGRSdcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnNbdGhpcy5zZWxlY3RlZFJ1bkEucmVzdWx0XSB8fCAnI0YzRjRGNic7XG4gIH1cblxuICBnZXQgcnVuQlN0YXR1c0JnQ29sb3IoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRSdW5CKSByZXR1cm4gJyNGM0Y0RjYnO1xuICAgIGNvbnN0IGNvbG9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdTVUNDRVNTJzogJyMwREJEN0QxQScsXG4gICAgICAnRkFJTFVSRSc6ICcjRUUzRjNGMUEnLFxuICAgICAgJ0FCT1JURUQnOiAnI0ZFRjNDNycsXG4gICAgICAnSU5fUFJPR1JFU1MnOiAnI0RCRUFGRSdcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnNbdGhpcy5zZWxlY3RlZFJ1bkIucmVzdWx0XSB8fCAnI0YzRjRGNic7XG4gIH1cblxuICBmb3JtYXRUaW1lKHRpbWVzdGFtcDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZXN0YW1wKTtcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCdcbiAgICB9KTtcbiAgfVxuXG4gIGZvcm1hdER1cmF0aW9uU3RyaW5nKG1pbGxpc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXREdXJhdGlvbihtaWxsaXNlY29uZHMpO1xuICB9XG5cbiAgZ2V0IHNob3dDb21wYXJpc29uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLmNvbXBhcmlzb25EYXRhICYmIHRoaXMuY29tcGFyaXNvblN1bW1hcnkpO1xuICB9XG5cbiAgZ2V0IHJ1bkFTdGF0dXNMYWJlbCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFJ1bkEpIHJldHVybiAnJztcbiAgICBjb25zdCBsYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnU1VDQ0VTUyc6ICdQYXNzZWQnLFxuICAgICAgJ0ZBSUxVUkUnOiAnRmFpbGVkJyxcbiAgICAgICdBQk9SVEVEJzogJ0Fib3J0ZWQnLFxuICAgICAgJ0lOX1BST0dSRVNTJzogJ0luIFByb2dyZXNzJ1xuICAgIH07XG4gICAgcmV0dXJuIGxhYmVsc1t0aGlzLnNlbGVjdGVkUnVuQS5yZXN1bHRdIHx8IHRoaXMuc2VsZWN0ZWRSdW5BLnJlc3VsdDtcbiAgfVxuXG4gIGdldCBydW5CU3RhdHVzTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRSdW5CKSByZXR1cm4gJyc7XG4gICAgY29uc3QgbGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ1NVQ0NFU1MnOiAnUGFzc2VkJyxcbiAgICAgICdGQUlMVVJFJzogJ0ZhaWxlZCcsXG4gICAgICAnQUJPUlRFRCc6ICdBYm9ydGVkJyxcbiAgICAgICdJTl9QUk9HUkVTUyc6ICdJbiBQcm9ncmVzcydcbiAgICB9O1xuICAgIHJldHVybiBsYWJlbHNbdGhpcy5zZWxlY3RlZFJ1bkIucmVzdWx0XSB8fCB0aGlzLnNlbGVjdGVkUnVuQi5yZXN1bHQ7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS11aS1yb290XCIgc3R5bGU9XCJkaXNwbGF5OiBibG9jazsgd2lkdGg6IDEwMCU7XCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMyBzbTpjcWEtZ2FwLTQgY3FhLXB4LTMgc206Y3FhLXB4LTQgY3FhLXB5LTQgc206Y3FhLXB5LTZcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTRFNEU0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZ3JpZCBjcWEtZ3JpZC1jb2xzLTEgbWQ6Y3FhLWdyaWQtY29scy0yIGNxYS1nYXAtNCBtZDpjcWEtZ2FwLTE2IGNxYS1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzYzNjM2M11cIj5SdW4gQSAoQmFzZSk8L3NwYW4+XG4gICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiIFxuICAgICAgICAgICAgICAgIFtjb25maWddPVwicnVuQVNlbGVjdENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobG9hZE1vcmUpPVwib25Mb2FkTW9yZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtaGlkZGVuIG1kOmNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDUwJTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOyB0b3A6IDMwcHg7XCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNC4xNjY2OSAxMEgxNS44MzM0XCIgc3Ryb2tlPVwiIzYzNjM2M1wiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNC4xNjY5OUwxNS44MzMzIDEwLjAwMDNMMTAgMTUuODMzN1wiIHN0cm9rZT1cIiM2MzYzNjNcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjNjM2MzYzXVwiPlJ1biBCIChDb21wYXJlKTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCIgXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJydW5CU2VsZWN0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VhcmNoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvbkxvYWRNb3JlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFJ1bkEgfHwgc2VsZWN0ZWRSdW5CXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWdyaWQgY3FhLWdyaWQtY29scy0xIG1kOmNxYS1ncmlkLWNvbHMtMiBjcWEtZ2FwLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkUnVuQVwiIFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtbGcgY3FhLXAtMyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwicnVuQVN0YXR1c0JnQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJydW5BU3RhdHVzQm9yZGVyQ29sb3JcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLW1iLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMEIwQjBCXVwiPlJ1biAje3sgc2VsZWN0ZWRSdW5BLmlkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcHgtMiBjcWEtcHktMC41IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLXRleHQtWzEwcHhdIGNxYS1mb250LW1lZGl1bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJydW5BU3RhdHVzQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIicjRkZGRkZGJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBydW5BU3RhdHVzTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWdyaWQgY3FhLWdyaWQtY29scy0yIGNxYS1nYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM2MzYzNjNdXCI+VGltZTogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtZm9udC1tZWRpdW1cIj57eyBmb3JtYXRUaW1lKHNlbGVjdGVkUnVuQS5zdGFydFRpbWUpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzYzNjM2M11cIj5EdXJhdGlvbjogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtZm9udC1tZWRpdW1cIj57eyBmb3JtYXREdXJhdGlvblN0cmluZyhzZWxlY3RlZFJ1bkEuZHVyYXRpb24pIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzYzNjM2M11cIj5EYXRhc2V0OiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyMwQjBCMEJdIGNxYS1mb250LW1lZGl1bVwiPnt7IHNlbGVjdGVkUnVuQS50ZXN0RGF0YVNldE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNjM2MzYzXVwiPkRldmljZTogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtZm9udC1tZWRpdW1cIj57eyBzZWxlY3RlZFJ1bkEuZGV2aWNlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkUnVuQlwiIFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtbGcgY3FhLXAtMyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwicnVuQlN0YXR1c0JnQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJydW5CU3RhdHVzQm9yZGVyQ29sb3JcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLW1iLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMEIwQjBCXVwiPlJ1biAje3sgc2VsZWN0ZWRSdW5CLmlkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcHgtMiBjcWEtcHktMC41IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLXRleHQtWzEwcHhdIGNxYS1mb250LW1lZGl1bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJydW5CU3RhdHVzQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIicjRkZGRkZGJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBydW5CU3RhdHVzTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWdyaWQgY3FhLWdyaWQtY29scy0yIGNxYS1nYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM2MzYzNjNdXCI+VGltZTogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtZm9udC1tZWRpdW1cIj57eyBmb3JtYXRUaW1lKHNlbGVjdGVkUnVuQi5zdGFydFRpbWUpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzYzNjM2M11cIj5EdXJhdGlvbjogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtZm9udC1tZWRpdW1cIj57eyBmb3JtYXREdXJhdGlvblN0cmluZyhzZWxlY3RlZFJ1bkIuZHVyYXRpb24pIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzYzNjM2M11cIj5EYXRhc2V0OiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyMwQjBCMEJdIGNxYS1mb250LW1lZGl1bVwiPnt7IHNlbGVjdGVkUnVuQi50ZXN0RGF0YVNldE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNjM2MzYzXVwiPkRldmljZTogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtZm9udC1tZWRpdW1cIj57eyBzZWxlY3RlZFJ1bkIuZGV2aWNlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxjcWEtYnV0dG9uIFxuICAgICAgICAgICAgICB2YXJpYW50PVwiZmlsbGVkXCIgXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQ29tcGFyZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkNvbXBhcmVDbGljaygpXCI+XG4gICAgICAgICAgICAgIHt7IGlzQ29tcGFyaW5nUnVucyA/ICdDb21wYXJpbmcuLi4nIDogJ0NvbXBhcmUgUnVucycgfX1cbiAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJzaG93Q29tcGFyaXNvbiAmJiBjb21wYXJpc29uU3VtbWFyeSAmJiBzdGVwQ29tcGFyaXNvbnMgJiYgc3RlcENvbXBhcmlzb25zLmxlbmd0aCA+IDBcIiBcbiAgICAgICAgIGNsYXNzPVwiY3FhLWJnLXdoaXRlIGNxYS1wdC0zIGNxYS1wYi0wIHNtOmNxYS1wYi0xIHNtOmNxYS1wdC00IGNxYS1weC0zIHNtOmNxYS1weC02IGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIHNtOmNxYS1nYXAtNFwiPlxuICAgICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyM2MzYzNjNdXCI+U3VtbWFyeTo8L3A+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS13LVsxNHB4XSBjcWEtaC1bMTRweF0gY3FhLXRleHQtc21cIj5cbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIuOTE2NjkgNS4yNUgxMS4wODM0XCIgc3Ryb2tlPVwiIzYzNjM2M1wiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMi45MTY2OSA4Ljc1SDExLjA4MzRcIiBzdHJva2U9XCIjNjM2MzYzXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGxlYWRpbmctbm9ybWFsIGNxYS10ZXh0LVsjMEIwQjBCXVwiPnt7IGNvbXBhcmlzb25TdW1tYXJ5LnVuY2hhbmdlZCB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzZCNzI4MF1cIj5VbmNoYW5nZWQ8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41XCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLWZsZXgtc2hyaW5rLTAgY3FhLXctWzE0cHhdIGNxYS1oLVsxNHB4XSBjcWEtdGV4dC1zbVwiPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIuNjc1OSAxMC41MDAzTDguMDA5MTkgMi4zMzM2M0M3LjkwNzQzIDIuMTU0MDggNy43NTk4NyAyLjAwNDc0IDcuNTgxNTYgMS45MDA4M0M3LjQwMzI1IDEuNzk2OTMgNy4yMDA1NiAxLjc0MjE5IDYuOTk0MTkgMS43NDIxOUM2Ljc4NzgxIDEuNzQyMTkgNi41ODUxMyAxLjc5NjkzIDYuNDA2ODEgMS45MDA4M0M2LjIyODUgMi4wMDQ3NCA2LjA4MDk0IDIuMTU0MDggNS45NzkxOSAyLjMzMzYzTDEuMzEyNTIgMTAuNTAwM0MxLjIwOTY3IDEwLjY3ODQgMS4xNTU3NCAxMC44ODA2IDEuMTU2MTkgMTEuMDg2M0MxLjE1NjY1IDExLjI5MTkgMS4yMTE0NyAxMS40OTM5IDEuMzE1MTEgMTEuNjcxNUMxLjQxODc1IDExLjg0OTIgMS41Njc1MiAxMS45OTYzIDEuNzQ2MzQgMTIuMDk3OUMxLjkyNTE2IDEyLjE5OTYgMi4xMjc2NyAxMi4yNTIxIDIuMzMzMzUgMTIuMjUwM0gxMS42NjY3QzExLjg3MTQgMTIuMjUwMSAxMi4wNzI0IDEyLjE5NiAxMi4yNDk2IDEyLjA5MzVDMTIuNDI2OCAxMS45OTExIDEyLjU3MzkgMTEuODQzOCAxMi42NzYyIDExLjY2NjRDMTIuNzc4NCAxMS40ODkxIDEyLjgzMjIgMTEuMjg4IDEyLjgzMjIgMTEuMDgzM0MxMi44MzIxIDEwLjg3ODYgMTIuNzc4MiAxMC42Nzc2IDEyLjY3NTkgMTAuNTAwM1pcIiBzdHJva2U9XCIjRkQ5QTAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk03IDUuMjVWNy41ODMzM1wiIHN0cm9rZT1cIiNGRDlBMDBcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcgOS45MTY5OUg3LjAwNTgzXCIgc3Ryb2tlPVwiI0ZEOUEwMFwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1zZW1pYm9sZCBsZWFkaW5nLW5vcm1hbCBjcWEtdGV4dC1bI0UxNzEwMF1cIj57eyBjb21wYXJpc29uU3VtbWFyeS5zdGF0dXNDaGFuZ2VkIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjNkI3MjgwXVwiPlN0YXR1cyBDaGFuZ2VkPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS1mbGV4LXNocmluay0wIGNxYS13LVsxNHB4XSBjcWEtaC1bMTRweF0gY3FhLXRleHQtc21cIj5cbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIuOTE2NjkgN0gxMS4wODM0XCIgc3Ryb2tlPVwiIzAwQzk1MFwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNyAyLjkxNjk5VjExLjA4MzdcIiBzdHJva2U9XCIjMDBDOTUwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGxlYWRpbmctbm9ybWFsIGNxYS10ZXh0LVsjMDBBNjNFXVwiPnt7IGNvbXBhcmlzb25TdW1tYXJ5LmFkZGVkIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjNkI3MjgwXVwiPkFkZGVkPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS1mbGV4LXNocmluay0wIGNxYS13LVsxNHB4XSBjcWEtaC1bMTRweF0gY3FhLXRleHQtc21cIj5cbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIuOTE2NjkgN0gxMS4wODM0XCIgc3Ryb2tlPVwiI0ZCMkMzNlwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1zZW1pYm9sZCBsZWFkaW5nLW5vcm1hbCBjcWEtdGV4dC1bI0ZCMkMzNl1cIj57eyBjb21wYXJpc29uU3VtbWFyeS5yZW1vdmVkIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjNkI3MjgwXVwiPlJlbW92ZWQ8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41XCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLWZsZXgtc2hyaW5rLTAgY3FhLXctWzE0cHhdIGNxYS1oLVsxNHB4XSBjcWEtdGV4dC1zbVwiPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4wMDAwMiAxMi44MzM3QzEwLjIyMTcgMTIuODMzNyAxMi44MzM0IDEwLjIyMiAxMi44MzM0IDcuMDAwMzNDMTIuODMzNCAzLjc3ODY2IDEwLjIyMTcgMS4xNjY5OSA3LjAwMDAyIDEuMTY2OTlDMy43NzgzNiAxLjE2Njk5IDEuMTY2NjkgMy43Nzg2NiAxLjE2NjY5IDcuMDAwMzNDMS4xNjY2OSAxMC4yMjIgMy43NzgzNiAxMi44MzM3IDcuMDAwMDIgMTIuODMzN1pcIiBzdHJva2U9XCIjMkI3RkZGXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk03IDMuNVY3TDkuMzMzMzMgOC4xNjY2N1wiIHN0cm9rZT1cIiMyQjdGRkZcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgbGVhZGluZy1ub3JtYWwgY3FhLXRleHQtWyMxNTVERkNdXCI+e3sgY29tcGFyaXNvblN1bW1hcnkudGltaW5nIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjNkI3MjgwXVwiPlRpbWluZyBDaGFuZ2VkPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1sZyBjcWEtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICA8Y3FhLXRhYmxlLXRlbXBsYXRlXG4gICAgICAgIFtjb2x1bW5zXT1cInRhYmxlQ29sdW1uc1wiXG4gICAgICAgIFtkYXRhXT1cInN0ZXBDb21wYXJpc29uc1wiXG4gICAgICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgW2lzRW1wdHlTdGF0ZV09XCJpc0VtcHR5U3RhdGVcIlxuICAgICAgICBbZW1wdHlTdGF0ZUNvbmZpZ109XCJlbXB0eVN0YXRlQ29uZmlnXCJcbiAgICAgICAgW2lzVGFibGVEYXRhTG9hZGluZ109XCJpc0NvbXBhcmluZ1J1bnNcIlxuICAgICAgICBbc2hvd1NlYXJjaEJhcl09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93RmlsdGVyQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dTZXR0aW5nc0J1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93QXV0b1JlZnJlc2hCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICBbc2hvd090aGVyQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dGaWx0ZXJQYW5lbF09XCJmYWxzZVwiXG4gICAgICAgIFtzZXJ2ZXJTaWRlUGFnaW5hdGlvbl09XCJmYWxzZVwiXG4gICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS10YWJsZS10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cblxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
@@ -60,10 +60,10 @@ export class ConfigurationCardComponent {
60
60
  }
61
61
  }
62
62
  ConfigurationCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ConfigurationCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
63
- ConfigurationCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ConfigurationCardComponent, selector: "cqa-configuration-card", inputs: { icon: "icon", title: "title", data: "data" }, ngImport: i0, template: "<div class=\"cqa-ui-root\" style=\"display: block; width: 100%; height: 100%; min-width: 180px; max-width: 350px;\">\n\t<div class=\"cqa-bg-white cqa-rounded-lg cqa-bg-white\" style=\"border: 1px solid #E2E8F0;\">\n\n\t\t<!-- Section Header -->\n\t\t<div class=\"cqa-p-3 cqa-pb-2 cqa-flex cqa-items-center cqa-gap-2 cqa-bg-[#F5F5F566]\"\n\t\t\tstyle=\"border-bottom: 1px solid #E2E8F0;\">\n\t\t\t<ng-container *ngIf=\"icon\">\n\t\t\t\t<mat-icon [ngStyle]=\"headerIconStyles\">\n\t\t\t\t\t{{ icon }}\n\t\t\t\t</mat-icon>\n\t\t\t</ng-container>\n\t\t\t<div class=\"cqa-text-xs cqa-font-semibold cqa-color-[#636363] cqa-leading-normal\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- Configuration Items -->\n\t\t<div class=\"cqa-p-4 cqa-pt-3\" *ngIf=\"data.length > 0\">\n\t\t\t<div class=\"cqa-grid cqa-grid-cols-1 cqa-gap-y-[10px]\">\n\t\t\t\t<ng-container *ngFor=\"let item of data\">\n\t\t\t\t\t<!-- *ngIf=\"!isBoolean(item.value)\" -->\n\t\t\t\t\t<div class=\"cqa-flex cqa-gap-2 cqa-justify-between cqa-items-center cqa-h-[15px]\"\n\t\t\t\t\t\t[ngClass]=\"{ 'cqa-h-[21px]': isBoolean(item.value) || item.isFlag }\">\n\t\t\t\t\t\t<!-- Label -->\n\t\t\t\t\t\t<span class=\"cqa-text-xs cqa-text-[#64748B] cqa-font-regular\">\n\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t<!-- Value -->\n\t\t\t\t\t\t<div class=\"cqa-flex cqa-items-center cqa-gap-[6px]\">\n\t\t\t\t\t\t\t<mat-icon *ngIf=\"item.icon\" class=\"material-icons cqa-text-[#94A3B8] cqa-text-[12px]\n\t\t\t\t\t\t\t\tcqa-w-3 cqa-h-3\">\n\t\t\t\t\t\t\t\t{{ item.icon }}\n\t\t\t\t\t\t\t</mat-icon>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"!item.isFlag\">\n\t\t\t\t\t\t\t\t<span *ngIf=\"!isBoolean(item.value)\" class=\"cqa-text-xs cqa-text-[#334155] cqa-font-regular\">\n\t\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span *ngIf=\"isBoolean(item.value)\" class=\"cqa-text-xs cqa-text-[#475569] cqa-bg-[#F1F5F9] cqa-rounded-[4px] cqa-font-regular cqa-py-1 cqa-px-[6px]\"\n\t\t\t\t\t\t\t\t\t[ngStyle]=\"{ border: '1px solid #E2E8F0' }\">\n\t\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t\t<span *ngIf=\"item.isFlag\" class=\"cqa-text-xs cqa-rounded-[4px] cqa-font-medium cqa-py-1 cqa-px-[6px]\"\n\t\t\t\t\t\t\t\t[ngClass]=\"getValueClass(item)\"\n\t\t\t\t\t\t\t\t[ngStyle]=\"{ border: getValueBorder(item) }\">\n\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</ng-container>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
63
+ ConfigurationCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ConfigurationCardComponent, selector: "cqa-configuration-card", inputs: { icon: "icon", title: "title", data: "data" }, ngImport: i0, template: "<div class=\"cqa-ui-root\" style=\"display: block; width: 100%; height: 100%; min-width: 180px;\">\n\t<div class=\"cqa-bg-white cqa-rounded-lg\" style=\"border: 1px solid #E2E8F0; height: 100%;\">\n\t\t<!-- Section Header -->\n\t\t<div class=\"cqa-p-3 cqa-pb-2 cqa-flex cqa-items-center cqa-gap-2 cqa-bg-[#F5F5F566]\"\n\t\t\tstyle=\"border-bottom: 1px solid #E2E8F0;\">\n\t\t\t<ng-container *ngIf=\"icon\">\n\t\t\t\t<mat-icon [ngStyle]=\"headerIconStyles\">\n\t\t\t\t\t{{ icon }}\n\t\t\t\t</mat-icon>\n\t\t\t</ng-container>\n\t\t\t<div class=\"cqa-text-xs cqa-font-semibold cqa-color-[#636363] cqa-leading-normal\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- Configuration Items -->\n\t\t<div class=\"cqa-p-4 cqa-pt-3\" *ngIf=\"data.length > 0\">\n\t\t\t<div class=\"cqa-grid cqa-grid-cols-1 cqa-gap-y-[10px]\">\n\t\t\t\t<ng-container *ngFor=\"let item of data\">\n\t\t\t\t\t<!-- *ngIf=\"!isBoolean(item.value)\" -->\n\t\t\t\t\t<div class=\"cqa-flex cqa-gap-2 cqa-justify-between cqa-items-center cqa-h-[15px]\"\n\t\t\t\t\t\t[ngClass]=\"{ 'cqa-h-[21px]': isBoolean(item.value) || item.isFlag }\">\n\t\t\t\t\t\t<!-- Label -->\n\t\t\t\t\t\t<span class=\"cqa-text-xs cqa-text-[#64748B] cqa-font-regular\">\n\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t<!-- Value -->\n\t\t\t\t\t\t<div class=\"cqa-flex cqa-items-center cqa-gap-[6px]\">\n\t\t\t\t\t\t\t<mat-icon *ngIf=\"item.icon\" class=\"material-icons cqa-text-[#94A3B8] cqa-text-[12px]\n\t\t\t\t\t\t\t\tcqa-w-3 cqa-h-3\">\n\t\t\t\t\t\t\t\t{{ item.icon }}\n\t\t\t\t\t\t\t</mat-icon>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"!item.isFlag\">\n\t\t\t\t\t\t\t\t<span *ngIf=\"!isBoolean(item.value)\" class=\"cqa-text-xs cqa-text-[#334155] cqa-font-regular\">\n\t\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span *ngIf=\"isBoolean(item.value)\" class=\"cqa-text-xs cqa-text-[#475569] cqa-bg-[#F1F5F9] cqa-rounded-[4px] cqa-font-regular cqa-py-1 cqa-px-[6px]\"\n\t\t\t\t\t\t\t\t\t[ngStyle]=\"{ border: '1px solid #E2E8F0' }\">\n\t\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t\t<span *ngIf=\"item.isFlag\" class=\"cqa-text-xs cqa-rounded-[4px] cqa-font-medium cqa-py-1 cqa-px-[6px]\"\n\t\t\t\t\t\t\t\t[ngClass]=\"getValueClass(item)\"\n\t\t\t\t\t\t\t\t[ngStyle]=\"{ border: getValueBorder(item) }\">\n\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</ng-container>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
64
64
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ConfigurationCardComponent, decorators: [{
65
65
  type: Component,
66
- args: [{ selector: 'cqa-configuration-card', template: "<div class=\"cqa-ui-root\" style=\"display: block; width: 100%; height: 100%; min-width: 180px; max-width: 350px;\">\n\t<div class=\"cqa-bg-white cqa-rounded-lg cqa-bg-white\" style=\"border: 1px solid #E2E8F0;\">\n\n\t\t<!-- Section Header -->\n\t\t<div class=\"cqa-p-3 cqa-pb-2 cqa-flex cqa-items-center cqa-gap-2 cqa-bg-[#F5F5F566]\"\n\t\t\tstyle=\"border-bottom: 1px solid #E2E8F0;\">\n\t\t\t<ng-container *ngIf=\"icon\">\n\t\t\t\t<mat-icon [ngStyle]=\"headerIconStyles\">\n\t\t\t\t\t{{ icon }}\n\t\t\t\t</mat-icon>\n\t\t\t</ng-container>\n\t\t\t<div class=\"cqa-text-xs cqa-font-semibold cqa-color-[#636363] cqa-leading-normal\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- Configuration Items -->\n\t\t<div class=\"cqa-p-4 cqa-pt-3\" *ngIf=\"data.length > 0\">\n\t\t\t<div class=\"cqa-grid cqa-grid-cols-1 cqa-gap-y-[10px]\">\n\t\t\t\t<ng-container *ngFor=\"let item of data\">\n\t\t\t\t\t<!-- *ngIf=\"!isBoolean(item.value)\" -->\n\t\t\t\t\t<div class=\"cqa-flex cqa-gap-2 cqa-justify-between cqa-items-center cqa-h-[15px]\"\n\t\t\t\t\t\t[ngClass]=\"{ 'cqa-h-[21px]': isBoolean(item.value) || item.isFlag }\">\n\t\t\t\t\t\t<!-- Label -->\n\t\t\t\t\t\t<span class=\"cqa-text-xs cqa-text-[#64748B] cqa-font-regular\">\n\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t<!-- Value -->\n\t\t\t\t\t\t<div class=\"cqa-flex cqa-items-center cqa-gap-[6px]\">\n\t\t\t\t\t\t\t<mat-icon *ngIf=\"item.icon\" class=\"material-icons cqa-text-[#94A3B8] cqa-text-[12px]\n\t\t\t\t\t\t\t\tcqa-w-3 cqa-h-3\">\n\t\t\t\t\t\t\t\t{{ item.icon }}\n\t\t\t\t\t\t\t</mat-icon>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"!item.isFlag\">\n\t\t\t\t\t\t\t\t<span *ngIf=\"!isBoolean(item.value)\" class=\"cqa-text-xs cqa-text-[#334155] cqa-font-regular\">\n\t\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span *ngIf=\"isBoolean(item.value)\" class=\"cqa-text-xs cqa-text-[#475569] cqa-bg-[#F1F5F9] cqa-rounded-[4px] cqa-font-regular cqa-py-1 cqa-px-[6px]\"\n\t\t\t\t\t\t\t\t\t[ngStyle]=\"{ border: '1px solid #E2E8F0' }\">\n\t\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t\t<span *ngIf=\"item.isFlag\" class=\"cqa-text-xs cqa-rounded-[4px] cqa-font-medium cqa-py-1 cqa-px-[6px]\"\n\t\t\t\t\t\t\t\t[ngClass]=\"getValueClass(item)\"\n\t\t\t\t\t\t\t\t[ngStyle]=\"{ border: getValueBorder(item) }\">\n\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</ng-container>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>", styles: [] }]
66
+ args: [{ selector: 'cqa-configuration-card', template: "<div class=\"cqa-ui-root\" style=\"display: block; width: 100%; height: 100%; min-width: 180px;\">\n\t<div class=\"cqa-bg-white cqa-rounded-lg\" style=\"border: 1px solid #E2E8F0; height: 100%;\">\n\t\t<!-- Section Header -->\n\t\t<div class=\"cqa-p-3 cqa-pb-2 cqa-flex cqa-items-center cqa-gap-2 cqa-bg-[#F5F5F566]\"\n\t\t\tstyle=\"border-bottom: 1px solid #E2E8F0;\">\n\t\t\t<ng-container *ngIf=\"icon\">\n\t\t\t\t<mat-icon [ngStyle]=\"headerIconStyles\">\n\t\t\t\t\t{{ icon }}\n\t\t\t\t</mat-icon>\n\t\t\t</ng-container>\n\t\t\t<div class=\"cqa-text-xs cqa-font-semibold cqa-color-[#636363] cqa-leading-normal\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- Configuration Items -->\n\t\t<div class=\"cqa-p-4 cqa-pt-3\" *ngIf=\"data.length > 0\">\n\t\t\t<div class=\"cqa-grid cqa-grid-cols-1 cqa-gap-y-[10px]\">\n\t\t\t\t<ng-container *ngFor=\"let item of data\">\n\t\t\t\t\t<!-- *ngIf=\"!isBoolean(item.value)\" -->\n\t\t\t\t\t<div class=\"cqa-flex cqa-gap-2 cqa-justify-between cqa-items-center cqa-h-[15px]\"\n\t\t\t\t\t\t[ngClass]=\"{ 'cqa-h-[21px]': isBoolean(item.value) || item.isFlag }\">\n\t\t\t\t\t\t<!-- Label -->\n\t\t\t\t\t\t<span class=\"cqa-text-xs cqa-text-[#64748B] cqa-font-regular\">\n\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t<!-- Value -->\n\t\t\t\t\t\t<div class=\"cqa-flex cqa-items-center cqa-gap-[6px]\">\n\t\t\t\t\t\t\t<mat-icon *ngIf=\"item.icon\" class=\"material-icons cqa-text-[#94A3B8] cqa-text-[12px]\n\t\t\t\t\t\t\t\tcqa-w-3 cqa-h-3\">\n\t\t\t\t\t\t\t\t{{ item.icon }}\n\t\t\t\t\t\t\t</mat-icon>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"!item.isFlag\">\n\t\t\t\t\t\t\t\t<span *ngIf=\"!isBoolean(item.value)\" class=\"cqa-text-xs cqa-text-[#334155] cqa-font-regular\">\n\t\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span *ngIf=\"isBoolean(item.value)\" class=\"cqa-text-xs cqa-text-[#475569] cqa-bg-[#F1F5F9] cqa-rounded-[4px] cqa-font-regular cqa-py-1 cqa-px-[6px]\"\n\t\t\t\t\t\t\t\t\t[ngStyle]=\"{ border: '1px solid #E2E8F0' }\">\n\t\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t\t<span *ngIf=\"item.isFlag\" class=\"cqa-text-xs cqa-rounded-[4px] cqa-font-medium cqa-py-1 cqa-px-[6px]\"\n\t\t\t\t\t\t\t\t[ngClass]=\"getValueClass(item)\"\n\t\t\t\t\t\t\t\t[ngStyle]=\"{ border: getValueBorder(item) }\">\n\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</ng-container>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>", styles: [] }]
67
67
  }], propDecorators: { icon: [{
68
68
  type: Input
69
69
  }], title: [{
@@ -71,4 +71,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
71
71
  }], data: [{
72
72
  type: Input
73
73
  }] } });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29uZmlndXJhdGlvbi1jYXJkL2NvbmZpZ3VyYXRpb24tY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbmZpZ3VyYXRpb24tY2FyZC9jb25maWd1cmF0aW9uLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFlakQsTUFBTSxPQUFPLDBCQUEwQjtJQUx2QztRQVFXLFNBQUksR0FBd0IsRUFBRSxDQUFDO0tBK0R6QztJQTdEQyx5Q0FBeUM7SUFDekMsWUFBWSxDQUFDLEtBQWdCO1FBQzNCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVELDRCQUE0QjtJQUM1QixTQUFTLENBQUMsS0FBZ0I7UUFDeEIsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUM7SUFDcEMsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixlQUFlLENBQUMsSUFBdUI7UUFDckMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNsQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQzdCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQjtRQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBR0QsYUFBYSxDQUFDLElBQXVCO1FBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0MsUUFBUSxLQUFLLEVBQUU7WUFDYixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxxQ0FBcUMsQ0FBQztZQUMvQyxLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxxQ0FBcUMsQ0FBQztZQUMvQztnQkFDRSxPQUFPLHFDQUFxQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUF1QjtRQUNwQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9DLFFBQVEsS0FBSyxFQUFFO1lBQ2IsS0FBSyxTQUFTO2dCQUNaLE9BQU8sbUJBQW1CLENBQUM7WUFDN0IsS0FBSyxZQUFZO2dCQUNmLE9BQU8sbUJBQW1CLENBQUM7WUFDN0I7Z0JBQ0UsT0FBTyxtQkFBbUIsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFRCx5QkFBeUI7SUFDekIsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTztZQUNMLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLE9BQU8sRUFBRSxNQUFNO1lBQ2YsUUFBUSxFQUFFLE1BQU07U0FDakIsQ0FBQztJQUNKLENBQUM7O3VIQWpFVSwwQkFBMEI7MkdBQTFCLDBCQUEwQixzSENmdkMsdWhGQXVETTsyRkR4Q08sMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHdCQUF3Qjs4QkFLekIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxudHlwZSBWYWx1ZVR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJhdGlvbkl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogVmFsdWVUeXBlO1xuICBpY29uPzogc3RyaW5nO1xuICBpc0ZsYWc/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtY29uZmlndXJhdGlvbi1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYXRpb24tY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbkNhcmRDb21wb25lbnQge1xuICBASW5wdXQoKSBpY29uITogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZSE6IHN0cmluZztcbiAgQElucHV0KCkgZGF0YTogQ29uZmlndXJhdGlvbkl0ZW1bXSA9IFtdO1xuXG4gIC8vIENoZWNrIGlmIHZhbHVlIGlzIGVtcHR5L251bGwvdW5kZWZpbmVkXG4gIGlzRW1wdHlWYWx1ZSh2YWx1ZTogVmFsdWVUeXBlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgYm9vbGVhblxuICBpc0Jvb2xlYW4odmFsdWU6IFZhbHVlVHlwZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbiAgfVxuXG4gIC8vIEdldCBkaXNwbGF5IHZhbHVlIGZvciBpdGVtXG4gIGdldERpc3BsYXlWYWx1ZShpdGVtOiBDb25maWd1cmF0aW9uSXRlbSk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eVZhbHVlKGl0ZW0udmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ05vdCBzZXQnO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5pc0Jvb2xlYW4oaXRlbS52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBpdGVtLnZhbHVlID8gJ09uJyA6ICdPZmYnO1xuICAgIH1cblxuICAgIGlmIChpdGVtLmlzRmxhZyAmJiBpdGVtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGl0ZW0udmFsdWUpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gU3RyaW5nKGl0ZW0udmFsdWUpO1xuICB9XG5cblxuICBnZXRWYWx1ZUNsYXNzKGl0ZW06IENvbmZpZ3VyYXRpb25JdGVtKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhpdGVtLnZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgJ2VuYWJsZWQnOlxuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LVsjMDU5NjY5XSBjcWEtYmctWyNFQ0ZERjVdJztcbiAgICAgIGNhc2UgJ29uIGZhaWx1cmUnOlxuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LVsjRDk3NzA2XSBjcWEtYmctWyNGRkZCRUJdJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtWyM0NzU1NjldIGNxYS1iZy1bI0YxRjVGOV0nO1xuICAgIH1cbiAgfVxuXG4gIGdldFZhbHVlQm9yZGVyKGl0ZW06IENvbmZpZ3VyYXRpb25JdGVtKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhpdGVtLnZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgJ2VuYWJsZWQnOlxuICAgICAgICByZXR1cm4gJzFweCBzb2xpZCAjRDFGQUU1JztcbiAgICAgIGNhc2UgJ29uIGZhaWx1cmUnOlxuICAgICAgICByZXR1cm4gJzFweCBzb2xpZCAjRkVGM0M3JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnMXB4IHNvbGlkICNFMkU4RjAnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0eWxlcyBmb3IgaGVhZGVyIGljb25cbiAgZ2V0IGhlYWRlckljb25TdHlsZXMoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdjb2xvcic6ICcjMUE0RURBJyxcbiAgICAgICdmb250LXNpemUnOiAnMTZweCcsXG4gICAgICAnd2lkdGgnOiAnMTZweCcsXG4gICAgICAnaGVpZ2h0JzogJzE2cHgnXG4gICAgfTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS11aS1yb290XCIgc3R5bGU9XCJkaXNwbGF5OiBibG9jazsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgbWluLXdpZHRoOiAxODBweDsgbWF4LXdpZHRoOiAzNTBweDtcIj5cblx0PGRpdiBjbGFzcz1cImNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1sZyBjcWEtYmctd2hpdGVcIiBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNFMkU4RjA7XCI+XG5cblx0XHQ8IS0tIFNlY3Rpb24gSGVhZGVyIC0tPlxuXHRcdDxkaXYgY2xhc3M9XCJjcWEtcC0zIGNxYS1wYi0yIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1iZy1bI0Y1RjVGNTY2XVwiXG5cdFx0XHRzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTJFOEYwO1wiPlxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImljb25cIj5cblx0XHRcdFx0PG1hdC1pY29uIFtuZ1N0eWxlXT1cImhlYWRlckljb25TdHlsZXNcIj5cblx0XHRcdFx0XHR7eyBpY29uIH19XG5cdFx0XHRcdDwvbWF0LWljb24+XG5cdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdDxkaXYgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtZm9udC1zZW1pYm9sZCBjcWEtY29sb3ItWyM2MzYzNjNdIGNxYS1sZWFkaW5nLW5vcm1hbFwiPlxuXHRcdFx0XHR7eyB0aXRsZSB9fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cblx0XHQ8IS0tIENvbmZpZ3VyYXRpb24gSXRlbXMgLS0+XG5cdFx0PGRpdiBjbGFzcz1cImNxYS1wLTQgY3FhLXB0LTNcIiAqbmdJZj1cImRhdGEubGVuZ3RoID4gMFwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImNxYS1ncmlkIGNxYS1ncmlkLWNvbHMtMSBjcWEtZ2FwLXktWzEwcHhdXCI+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YVwiPlxuXHRcdFx0XHRcdDwhLS0gKm5nSWY9XCIhaXNCb29sZWFuKGl0ZW0udmFsdWUpXCIgLS0+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1nYXAtMiBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWgtWzE1cHhdXCJcblx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsgJ2NxYS1oLVsyMXB4XSc6IGlzQm9vbGVhbihpdGVtLnZhbHVlKSB8fCBpdGVtLmlzRmxhZyB9XCI+XG5cdFx0XHRcdFx0XHQ8IS0tIExhYmVsIC0tPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzY0NzQ4Ql0gY3FhLWZvbnQtcmVndWxhclwiPlxuXHRcdFx0XHRcdFx0XHR7eyBpdGVtLmxhYmVsIH19XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cblx0XHRcdFx0XHRcdDwhLS0gVmFsdWUgLS0+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLVs2cHhdXCI+XG5cdFx0XHRcdFx0XHRcdDxtYXQtaWNvbiAqbmdJZj1cIml0ZW0uaWNvblwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3FhLXRleHQtWyM5NEEzQjhdIGNxYS10ZXh0LVsxMnB4XVxuXHRcdFx0XHRcdFx0XHRcdGNxYS13LTMgY3FhLWgtM1wiPlxuXHRcdFx0XHRcdFx0XHRcdHt7IGl0ZW0uaWNvbiB9fVxuXHRcdFx0XHRcdFx0XHQ8L21hdC1pY29uPlxuXHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uaXNGbGFnXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCIhaXNCb29sZWFuKGl0ZW0udmFsdWUpXCIgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzMzNDE1NV0gY3FhLWZvbnQtcmVndWxhclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3sgZ2V0RGlzcGxheVZhbHVlKGl0ZW0pIH19XG5cdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwiaXNCb29sZWFuKGl0ZW0udmFsdWUpXCIgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzQ3NTU2OV0gY3FhLWJnLVsjRjFGNUY5XSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtZm9udC1yZWd1bGFyIGNxYS1weS0xIGNxYS1weC1bNnB4XVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbbmdTdHlsZV09XCJ7IGJvcmRlcjogJzFweCBzb2xpZCAjRTJFOEYwJyB9XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7eyBnZXREaXNwbGF5VmFsdWUoaXRlbSkgfX1cblx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXG5cdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwiaXRlbS5pc0ZsYWdcIiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtcHktMSBjcWEtcHgtWzZweF1cIlxuXHRcdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cImdldFZhbHVlQ2xhc3MoaXRlbSlcIlxuXHRcdFx0XHRcdFx0XHRcdFtuZ1N0eWxlXT1cInsgYm9yZGVyOiBnZXRWYWx1ZUJvcmRlcihpdGVtKSB9XCI+XG5cdFx0XHRcdFx0XHRcdFx0e3sgZ2V0RGlzcGxheVZhbHVlKGl0ZW0pIH19XG5cdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PiJdfQ==
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29uZmlndXJhdGlvbi1jYXJkL2NvbmZpZ3VyYXRpb24tY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbmZpZ3VyYXRpb24tY2FyZC9jb25maWd1cmF0aW9uLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFlakQsTUFBTSxPQUFPLDBCQUEwQjtJQUx2QztRQVFXLFNBQUksR0FBd0IsRUFBRSxDQUFDO0tBK0R6QztJQTdEQyx5Q0FBeUM7SUFDekMsWUFBWSxDQUFDLEtBQWdCO1FBQzNCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVELDRCQUE0QjtJQUM1QixTQUFTLENBQUMsS0FBZ0I7UUFDeEIsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUM7SUFDcEMsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixlQUFlLENBQUMsSUFBdUI7UUFDckMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNsQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQzdCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQjtRQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBR0QsYUFBYSxDQUFDLElBQXVCO1FBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0MsUUFBUSxLQUFLLEVBQUU7WUFDYixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxxQ0FBcUMsQ0FBQztZQUMvQyxLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxxQ0FBcUMsQ0FBQztZQUMvQztnQkFDRSxPQUFPLHFDQUFxQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUF1QjtRQUNwQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9DLFFBQVEsS0FBSyxFQUFFO1lBQ2IsS0FBSyxTQUFTO2dCQUNaLE9BQU8sbUJBQW1CLENBQUM7WUFDN0IsS0FBSyxZQUFZO2dCQUNmLE9BQU8sbUJBQW1CLENBQUM7WUFDN0I7Z0JBQ0UsT0FBTyxtQkFBbUIsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFRCx5QkFBeUI7SUFDekIsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTztZQUNMLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLE9BQU8sRUFBRSxNQUFNO1lBQ2YsUUFBUSxFQUFFLE1BQU07U0FDakIsQ0FBQztJQUNKLENBQUM7O3VIQWpFVSwwQkFBMEI7MkdBQTFCLDBCQUEwQixzSENmdkMsb2dGQXNETTsyRkR2Q08sMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHdCQUF3Qjs4QkFLekIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxudHlwZSBWYWx1ZVR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJhdGlvbkl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogVmFsdWVUeXBlO1xuICBpY29uPzogc3RyaW5nO1xuICBpc0ZsYWc/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtY29uZmlndXJhdGlvbi1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYXRpb24tY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbkNhcmRDb21wb25lbnQge1xuICBASW5wdXQoKSBpY29uITogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZSE6IHN0cmluZztcbiAgQElucHV0KCkgZGF0YTogQ29uZmlndXJhdGlvbkl0ZW1bXSA9IFtdO1xuXG4gIC8vIENoZWNrIGlmIHZhbHVlIGlzIGVtcHR5L251bGwvdW5kZWZpbmVkXG4gIGlzRW1wdHlWYWx1ZSh2YWx1ZTogVmFsdWVUeXBlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgYm9vbGVhblxuICBpc0Jvb2xlYW4odmFsdWU6IFZhbHVlVHlwZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbiAgfVxuXG4gIC8vIEdldCBkaXNwbGF5IHZhbHVlIGZvciBpdGVtXG4gIGdldERpc3BsYXlWYWx1ZShpdGVtOiBDb25maWd1cmF0aW9uSXRlbSk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eVZhbHVlKGl0ZW0udmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ05vdCBzZXQnO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5pc0Jvb2xlYW4oaXRlbS52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBpdGVtLnZhbHVlID8gJ09uJyA6ICdPZmYnO1xuICAgIH1cblxuICAgIGlmIChpdGVtLmlzRmxhZyAmJiBpdGVtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGl0ZW0udmFsdWUpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gU3RyaW5nKGl0ZW0udmFsdWUpO1xuICB9XG5cblxuICBnZXRWYWx1ZUNsYXNzKGl0ZW06IENvbmZpZ3VyYXRpb25JdGVtKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhpdGVtLnZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgJ2VuYWJsZWQnOlxuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LVsjMDU5NjY5XSBjcWEtYmctWyNFQ0ZERjVdJztcbiAgICAgIGNhc2UgJ29uIGZhaWx1cmUnOlxuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LVsjRDk3NzA2XSBjcWEtYmctWyNGRkZCRUJdJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtWyM0NzU1NjldIGNxYS1iZy1bI0YxRjVGOV0nO1xuICAgIH1cbiAgfVxuXG4gIGdldFZhbHVlQm9yZGVyKGl0ZW06IENvbmZpZ3VyYXRpb25JdGVtKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhpdGVtLnZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgJ2VuYWJsZWQnOlxuICAgICAgICByZXR1cm4gJzFweCBzb2xpZCAjRDFGQUU1JztcbiAgICAgIGNhc2UgJ29uIGZhaWx1cmUnOlxuICAgICAgICByZXR1cm4gJzFweCBzb2xpZCAjRkVGM0M3JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnMXB4IHNvbGlkICNFMkU4RjAnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0eWxlcyBmb3IgaGVhZGVyIGljb25cbiAgZ2V0IGhlYWRlckljb25TdHlsZXMoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdjb2xvcic6ICcjMUE0RURBJyxcbiAgICAgICdmb250LXNpemUnOiAnMTZweCcsXG4gICAgICAnd2lkdGgnOiAnMTZweCcsXG4gICAgICAnaGVpZ2h0JzogJzE2cHgnXG4gICAgfTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS11aS1yb290XCIgc3R5bGU9XCJkaXNwbGF5OiBibG9jazsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgbWluLXdpZHRoOiAxODBweDtcIj5cblx0PGRpdiBjbGFzcz1cImNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1sZ1wiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI0UyRThGMDsgaGVpZ2h0OiAxMDAlO1wiPlxuXHRcdDwhLS0gU2VjdGlvbiBIZWFkZXIgLS0+XG5cdFx0PGRpdiBjbGFzcz1cImNxYS1wLTMgY3FhLXBiLTIgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLWJnLVsjRjVGNUY1NjZdXCJcblx0XHRcdHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFMkU4RjA7XCI+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiaWNvblwiPlxuXHRcdFx0XHQ8bWF0LWljb24gW25nU3R5bGVdPVwiaGVhZGVySWNvblN0eWxlc1wiPlxuXHRcdFx0XHRcdHt7IGljb24gfX1cblx0XHRcdFx0PC9tYXQtaWNvbj5cblx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0PGRpdiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS1mb250LXNlbWlib2xkIGNxYS1jb2xvci1bIzYzNjM2M10gY3FhLWxlYWRpbmctbm9ybWFsXCI+XG5cdFx0XHRcdHt7IHRpdGxlIH19XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblxuXHRcdDwhLS0gQ29uZmlndXJhdGlvbiBJdGVtcyAtLT5cblx0XHQ8ZGl2IGNsYXNzPVwiY3FhLXAtNCBjcWEtcHQtM1wiICpuZ0lmPVwiZGF0YS5sZW5ndGggPiAwXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY3FhLWdyaWQgY3FhLWdyaWQtY29scy0xIGNxYS1nYXAteS1bMTBweF1cIj5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhXCI+XG5cdFx0XHRcdFx0PCEtLSAqbmdJZj1cIiFpc0Jvb2xlYW4oaXRlbS52YWx1ZSlcIiAtLT5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWdhcC0yIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWl0ZW1zLWNlbnRlciBjcWEtaC1bMTVweF1cIlxuXHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwieyAnY3FhLWgtWzIxcHhdJzogaXNCb29sZWFuKGl0ZW0udmFsdWUpIHx8IGl0ZW0uaXNGbGFnIH1cIj5cblx0XHRcdFx0XHRcdDwhLS0gTGFiZWwgLS0+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNjQ3NDhCXSBjcWEtZm9udC1yZWd1bGFyXCI+XG5cdFx0XHRcdFx0XHRcdHt7IGl0ZW0ubGFiZWwgfX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblxuXHRcdFx0XHRcdFx0PCEtLSBWYWx1ZSAtLT5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtWzZweF1cIj5cblx0XHRcdFx0XHRcdFx0PG1hdC1pY29uICpuZ0lmPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjcWEtdGV4dC1bIzk0QTNCOF0gY3FhLXRleHQtWzEycHhdXG5cdFx0XHRcdFx0XHRcdFx0Y3FhLXctMyBjcWEtaC0zXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3sgaXRlbS5pY29uIH19XG5cdFx0XHRcdFx0XHRcdDwvbWF0LWljb24+XG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5pc0ZsYWdcIj5cblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cIiFpc0Jvb2xlYW4oaXRlbS52YWx1ZSlcIiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMzM0MTU1XSBjcWEtZm9udC1yZWd1bGFyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7eyBnZXREaXNwbGF5VmFsdWUoaXRlbSkgfX1cblx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJpc0Jvb2xlYW4oaXRlbS52YWx1ZSlcIiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNDc1NTY5XSBjcWEtYmctWyNGMUY1RjldIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1mb250LXJlZ3VsYXIgY3FhLXB5LTEgY3FhLXB4LVs2cHhdXCJcblx0XHRcdFx0XHRcdFx0XHRcdFtuZ1N0eWxlXT1cInsgYm9yZGVyOiAnMXB4IHNvbGlkICNFMkU4RjAnIH1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt7IGdldERpc3BsYXlWYWx1ZShpdGVtKSB9fVxuXHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cblx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJpdGVtLmlzRmxhZ1wiIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXJvdW5kZWQtWzRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1weS0xIGNxYS1weC1bNnB4XVwiXG5cdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwiZ2V0VmFsdWVDbGFzcyhpdGVtKVwiXG5cdFx0XHRcdFx0XHRcdFx0W25nU3R5bGVdPVwieyBib3JkZXI6IGdldFZhbHVlQm9yZGVyKGl0ZW0pIH1cIj5cblx0XHRcdFx0XHRcdFx0XHR7eyBnZXREaXNwbGF5VmFsdWUoaXRlbSkgfX1cblx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+Il19