@cqa-lib/cqa-ui 1.1.230 → 1.1.233
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/add-prerequisite-cases-section/add-prerequisite-cases-section.component.mjs +14 -6
- package/esm2020/lib/error-modal/error-modal.component.mjs +3 -3
- package/esm2020/lib/execution-result-modal/execution-result-modal.component.mjs +3 -3
- package/esm2020/lib/simulator/simulator.component.mjs +3 -3
- package/esm2020/lib/templates/table-template.component.mjs +3 -3
- package/esm2020/lib/test-case-details/delete-steps/delete-steps.component.mjs +11 -3
- package/esm2020/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.mjs +3 -3
- package/esm2020/lib/test-case-details/test-case-details.component.mjs +3 -3
- package/fesm2015/cqa-lib-cqa-ui.mjs +35 -19
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +35 -19
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/add-prerequisite-cases-section/add-prerequisite-cases-section.component.d.ts +5 -1
- package/lib/test-case-details/delete-steps/delete-steps.component.d.ts +2 -0
- package/package.json +1 -1
- package/styles.css +1 -1
|
@@ -431,10 +431,10 @@ export class TableTemplateComponent {
|
|
|
431
431
|
}
|
|
432
432
|
}
|
|
433
433
|
TableTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TableTemplateComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
434
|
-
TableTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TableTemplateComponent, selector: "cqa-table-template", inputs: { searchPlaceholder: "searchPlaceholder", searchValue: "searchValue", showClear: "showClear", showSearchBar: "showSearchBar", showExportButton: "showExportButton", isExporting: "isExporting", filterConfig: "filterConfig", showFilterPanel: "showFilterPanel", showFilterButton: "showFilterButton", otherButtons: "otherButtons", otherDropDownButtons: "otherDropDownButtons", otherSelectDropDownButtons: "otherSelectDropDownButtons", otherButtonLabel: "otherButtonLabel", otherButtonVariant: "otherButtonVariant", showOtherButton: "showOtherButton", showActionButton: "showActionButton", showSettingsButton: "showSettingsButton", showAutoRefreshButton: "showAutoRefreshButton", data: "data", isEmptyState: "isEmptyState", emptyStateConfig: "emptyStateConfig", actions: "actions", chips: "chips", filterApplied: "filterApplied", columns: "columns", selectedAutoRefreshInterval: "selectedAutoRefreshInterval", pageIndex: "pageIndex", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", serverSidePagination: "serverSidePagination", totalElements: "totalElements", isTableLoading: "isTableLoading", isTableDataLoading: "isTableDataLoading", cellJsonPathGetter: "cellJsonPathGetter", onJsonPathCopiedHandler: "onJsonPathCopiedHandler" }, outputs: { onSearchChange: "onSearchChange", onExportClick: "onExportClick", onApplyFilterClick: "onApplyFilterClick", onResetFilterClick: "onResetFilterClick", onClearAll: "onClearAll", removeChip: "removeChip", pageChange: "pageChange", onReload: "onReload", onAutoRefreshClick: "onAutoRefreshClick" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <div class=\"cqa-w-full cqa-flex cqa-flex-col cqa-relative\">\n <div [class]=\"!showSearchBar ? 'cqa-justify-end' : 'cqa-justify-between'\" class=\"cqa-w-full cqa-flex cqa-items-center cqa-gap-3 cqa-flex-wrap cqa-mb-3\">\n <cqa-search-bar\n *ngIf=\"showSearchBar\"\n [placeholder]=\"searchPlaceholder\"\n [value]=\"searchValue\"\n [showClear]=\"showClear\"\n (valueChange)=\"valueChange($event)\"\n (search)=\"search($event)\"\n (cleared)=\"cleared()\"\n ></cqa-search-bar>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-wrap\">\n <cqa-button\n *ngIf=\"showExportButton\"\n variant=\"grey-solid\"\n icon=\"open_in_new\"\n [text]=\"isExporting ? 'Exporting...' : 'Export'\"\n [disabled]=\"isExporting\"\n (clicked)=\"exportCodeClick()\"\n >\n <span>{{ isExporting ? 'Exporting...' : 'Export' }}</span>\n </cqa-button>\n \n <!-- Export Code Modal -->\n <cqa-export-code-modal\n [isOpen]=\"isExportModalOpen\"\n [cases]=\"selectedCasesForExport\"\n [disabled]=\"false\"\n (closeModal)=\"closeExportModal()\"\n (export)=\"onExportModalExport($event)\">\n </cqa-export-code-modal>\n <ng-container *ngFor=\"let dropdownTemplate of otherDropDownButtons; trackBy: trackByDropdownTemplateRef\">\n <ng-container *ngTemplateOutlet=\"dropdownTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngFor=\"let selectDropdownTemplate of otherSelectDropDownButtons; trackBy: trackBySelectDropdownTemplateRef\">\n <ng-container *ngTemplateOutlet=\"selectDropdownTemplate\"></ng-container>\n </ng-container>\n \n <cqa-button\n *ngIf=\"showFilterButton\"\n variant=\"grey-solid\"\n icon=\"add\"\n [text]=\"'Filter'\"\n (clicked)=\"toggleFilter()\"\n >\n <span>Filter</span>\n </cqa-button>\n <cqa-column-visibility\n *ngIf=\"showSettingsButton\"\n [columns]=\"visibilityColumns\"\n [columnVisibility]=\"columnVisibility\"\n [selectedAutoRefreshInterval]=\"selectedAutoRefreshInterval\"\n (columnVisibilityChange)=\"onColumnVisibilityChange($event)\"\n (autoRefreshChange)=\"onAutoRefreshChange($event)\"\n ></cqa-column-visibility>\n <cqa-button\n *ngIf=\"showAutoRefreshButton\"\n variant=\"grey-solid\"\n icon=\"refresh\"\n (clicked)=\"handleRefreshClick()\"\n [tooltip]=\"'Refresh'\"\n tooltipPosition=\"below\"\n ></cqa-button>\n <ng-container *ngFor=\"let buttonTemplate of otherButtons; trackBy: trackByTemplateRef\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n </ng-container>\n </div>\n </div>\n\n <cqa-selected-filters \n [filterApplied]=\"filterApplied\"\n [chips]=\"chips\"\n (removeChip)=\"onRemoveChip($event)\"\n (clearAll)=\"onClearAllChips()\"\n (onClearAll)=\"onClearAll.emit()\"\n >\n </cqa-selected-filters>\n\n <cqa-dynamic-filter\n *ngIf=\"showFilterPanel\"\n [config]=\"filterConfig\"\n [showFilterPanel]=\"showFilterPanel\"\n (filtersChanged)=\"onFiltersChanged($event)\"\n (filtersApplied)=\"onFiltersApplied($event)\"\n (onApplyFilterClick)=\"onApplyFilterClick.emit($event)\"\n (onResetFilterClick)=\"handleResetFilterClick()\"\n >\n </cqa-dynamic-filter>\n\n <div class=\"cqa-rounded-[7px] cqa-overflow-hidden cqa-border-t cqa-border-l cqa-border-r cqa-border-grey-200 cqa-relative cqa-overflow-x-auto\">\n <ng-container *ngIf=\"(isTableLoading || isTableDataLoading) || (!isEmptyState && pagedRows && pagedRows.length > 0); else storyEmptyTpl\">\n <app-dynamic-table\n [columns]=\"computedColumns\"\n [data]=\"pagedRows\"\n [isTableLoading]=\"isTableLoading\"\n [isTableDataLoading]=\"isTableDataLoading\"\n [cellJsonPathGetter]=\"cellJsonPathGetter\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\">\n <ng-template #emptyTableTpl>\n <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-py-8\">\n <img src=\"/assets/illustrations/empty-state.svg\" alt=\"No data\" class=\"cqa-w-32 cqa-h-32 cqa-mb-4\" />\n <h3 class=\"cqa-text-lg cqa-font-semibold cqa-mb-2\">No test cases</h3>\n <p class=\"cqa-text-sm cqa-text-neutral-500 cqa-mb-4\">Try adjusting filters or create a new test case.</p>\n <cqa-button variant=\"filled\" (clicked)=\"toggleFilter()\">Show Filters</cqa-button>\n </div>\n </ng-template>\n </app-dynamic-table>\n </ng-container>\n\n <ng-template #storyEmptyTpl>\n <div class=\"cqa-p-6 cqa-flex cqa-flex-col cqa-items-center cqa-justify-center\">\n <cqa-empty-state\n *ngIf=\"isEmptyState\"\n [title]=\"emptyStateConfig.title\"\n [description]=\"emptyStateConfig.description\"\n [imageUrl]=\"emptyStateConfig.imageUrl\"\n [actions]=\"emptyStateConfig.actions\"\n (actionClick)=\"onEmptyAction($event)\"\n >\n </cqa-empty-state>\n </div>\n </ng-template>\n\n </div>\n\n <cqa-pagination\n [totalElements]=\"serverSidePagination ? totalElements : filteredRows.length\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageItemCount]=\"pagedRows.length\"\n (paginate)=\"onPaginate($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n >\n </cqa-pagination>\n\n <div *ngIf=\"anyRowSelected\" class=\"cqa-absolute cqa-bottom-[18.75px] cqa-left-[50%] cqa-translate-x-[-50%] cqa-w-full lg:cqa-max-w-[68%] cqa-sm:max-w-[75%] cqa-max-w-[90%] cqa-z-[1]\" >\n <cqa-table-action-toolbar\n [selectedItems]=\"currentSelectedItems\"\n [actions]=\"actions\"\n (actionClick)=\"actionClick($event)\"\n ></cqa-table-action-toolbar>\n </div>\n \n </div>\n</div>\n\n", components: [{ type: i1.SearchBarComponent, selector: "cqa-search-bar", inputs: ["placeholder", "value", "disabled", "showClear", "ariaLabel", "autoFocus", "size", "fullWidth"], outputs: ["valueChange", "search", "cleared"] }, { type: i2.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i3.ExportCodeModalComponent, selector: "cqa-export-code-modal", inputs: ["isOpen", "cases", "disabled"], outputs: ["closeModal", "export"] }, { type: i4.ColumnVisibilityComponent, selector: "cqa-column-visibility", inputs: ["isStepGroup", "columns", "columnVisibility", "selectedAutoRefreshInterval"], outputs: ["columnVisibilityChange", "autoRefreshChange"] }, { type: i5.SelectedFiltersComponent, selector: "cqa-selected-filters", inputs: ["filterApplied", "chips", "defaultChips", "defaultChipClass"], outputs: ["removeChip", "clearAll", "onClearAll"] }, { type: i6.DynamicFilterComponent, selector: "cqa-dynamic-filter", inputs: ["config", "model", "showFilterPanel", "buttonLayout"], outputs: ["filtersApplied", "filtersChanged", "resetAction", "onApplyFilterClick", "onResetFilterClick"] }, { type: i7.DynamicTableComponent, selector: "app-dynamic-table", inputs: ["data", "columns", "emptyState", "gridTemplateColumns", "screenWidth", "enableSelectAll", "enableLocalSort", "isTableLoading", "isTableDataLoading", "cellJsonPathGetter", "onJsonPathCopiedHandler"], outputs: ["sortChange"] }, { type: i8.EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }, { type: i9.PaginationComponent, selector: "cqa-pagination", inputs: ["totalElements", "totalPages", "pageIndex", "pageSize", "pageItemCount", "pageSizeOptions"], outputs: ["pageIndexChange", "pageSizeChange", "paginate"] }, { type: i10.TableActionToolbarComponent, selector: "cqa-table-action-toolbar", inputs: ["selectedItems", "actions", "showSelectAll", "allSelected", "showDismiss"], outputs: ["actionClick", "selectAllChange", "dismiss"] }], directives: [{ type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
434
|
+
TableTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TableTemplateComponent, selector: "cqa-table-template", inputs: { searchPlaceholder: "searchPlaceholder", searchValue: "searchValue", showClear: "showClear", showSearchBar: "showSearchBar", showExportButton: "showExportButton", isExporting: "isExporting", filterConfig: "filterConfig", showFilterPanel: "showFilterPanel", showFilterButton: "showFilterButton", otherButtons: "otherButtons", otherDropDownButtons: "otherDropDownButtons", otherSelectDropDownButtons: "otherSelectDropDownButtons", otherButtonLabel: "otherButtonLabel", otherButtonVariant: "otherButtonVariant", showOtherButton: "showOtherButton", showActionButton: "showActionButton", showSettingsButton: "showSettingsButton", showAutoRefreshButton: "showAutoRefreshButton", data: "data", isEmptyState: "isEmptyState", emptyStateConfig: "emptyStateConfig", actions: "actions", chips: "chips", filterApplied: "filterApplied", columns: "columns", selectedAutoRefreshInterval: "selectedAutoRefreshInterval", pageIndex: "pageIndex", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", serverSidePagination: "serverSidePagination", totalElements: "totalElements", isTableLoading: "isTableLoading", isTableDataLoading: "isTableDataLoading", cellJsonPathGetter: "cellJsonPathGetter", onJsonPathCopiedHandler: "onJsonPathCopiedHandler" }, outputs: { onSearchChange: "onSearchChange", onExportClick: "onExportClick", onApplyFilterClick: "onApplyFilterClick", onResetFilterClick: "onResetFilterClick", onClearAll: "onClearAll", removeChip: "removeChip", pageChange: "pageChange", onReload: "onReload", onAutoRefreshClick: "onAutoRefreshClick" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <div class=\"cqa-w-full cqa-flex cqa-flex-col cqa-relative\">\n <div [class]=\"!showSearchBar ? 'cqa-justify-end' : 'cqa-justify-between'\" class=\"cqa-w-full cqa-flex cqa-items-center cqa-gap-3 cqa-flex-wrap cqa-mb-3\">\n <cqa-search-bar\n *ngIf=\"showSearchBar\"\n [placeholder]=\"searchPlaceholder\"\n [value]=\"searchValue\"\n [showClear]=\"showClear\"\n (valueChange)=\"valueChange($event)\"\n (search)=\"search($event)\"\n (cleared)=\"cleared()\"\n ></cqa-search-bar>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-wrap\">\n <cqa-button\n *ngIf=\"showExportButton\"\n variant=\"grey-solid\"\n icon=\"open_in_new\"\n [text]=\"isExporting ? 'Exporting...' : 'Export'\"\n [disabled]=\"isExporting\"\n (clicked)=\"exportCodeClick()\"\n >\n <span>{{ isExporting ? 'Exporting...' : 'Export' }}</span>\n </cqa-button>\n \n <!-- Export Code Modal -->\n <cqa-export-code-modal\n *ngIf=\"showExportButton\"\n [isOpen]=\"isExportModalOpen\"\n [cases]=\"selectedCasesForExport\"\n [disabled]=\"false\"\n (closeModal)=\"closeExportModal()\"\n (export)=\"onExportModalExport($event)\">\n </cqa-export-code-modal>\n <ng-container *ngFor=\"let dropdownTemplate of otherDropDownButtons; trackBy: trackByDropdownTemplateRef\">\n <ng-container *ngTemplateOutlet=\"dropdownTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngFor=\"let selectDropdownTemplate of otherSelectDropDownButtons; trackBy: trackBySelectDropdownTemplateRef\">\n <ng-container *ngTemplateOutlet=\"selectDropdownTemplate\"></ng-container>\n </ng-container>\n \n <cqa-button\n *ngIf=\"showFilterButton\"\n variant=\"grey-solid\"\n icon=\"add\"\n [text]=\"'Filter'\"\n (clicked)=\"toggleFilter()\"\n >\n <span>Filter</span>\n </cqa-button>\n <cqa-column-visibility\n *ngIf=\"showSettingsButton\"\n [columns]=\"visibilityColumns\"\n [columnVisibility]=\"columnVisibility\"\n [selectedAutoRefreshInterval]=\"selectedAutoRefreshInterval\"\n (columnVisibilityChange)=\"onColumnVisibilityChange($event)\"\n (autoRefreshChange)=\"onAutoRefreshChange($event)\"\n ></cqa-column-visibility>\n <cqa-button\n *ngIf=\"showAutoRefreshButton\"\n variant=\"grey-solid\"\n icon=\"refresh\"\n (clicked)=\"handleRefreshClick()\"\n [tooltip]=\"'Refresh'\"\n tooltipPosition=\"below\"\n ></cqa-button>\n <ng-container *ngFor=\"let buttonTemplate of otherButtons; trackBy: trackByTemplateRef\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n </ng-container>\n </div>\n </div>\n\n <cqa-selected-filters \n [filterApplied]=\"filterApplied\"\n [chips]=\"chips\"\n (removeChip)=\"onRemoveChip($event)\"\n (clearAll)=\"onClearAllChips()\"\n (onClearAll)=\"onClearAll.emit()\"\n >\n </cqa-selected-filters>\n\n <cqa-dynamic-filter\n *ngIf=\"showFilterPanel\"\n [config]=\"filterConfig\"\n [showFilterPanel]=\"showFilterPanel\"\n (filtersChanged)=\"onFiltersChanged($event)\"\n (filtersApplied)=\"onFiltersApplied($event)\"\n (onApplyFilterClick)=\"onApplyFilterClick.emit($event)\"\n (onResetFilterClick)=\"handleResetFilterClick()\"\n >\n </cqa-dynamic-filter>\n\n <div class=\"cqa-rounded-[7px] cqa-overflow-hidden cqa-border-t cqa-border-l cqa-border-r cqa-border-grey-200 cqa-relative cqa-overflow-x-auto\">\n <ng-container *ngIf=\"(isTableLoading || isTableDataLoading) || (!isEmptyState && pagedRows && pagedRows.length > 0); else storyEmptyTpl\">\n <app-dynamic-table\n [columns]=\"computedColumns\"\n [data]=\"pagedRows\"\n [isTableLoading]=\"isTableLoading\"\n [isTableDataLoading]=\"isTableDataLoading\"\n [cellJsonPathGetter]=\"cellJsonPathGetter\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\">\n <ng-template #emptyTableTpl>\n <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-py-8\">\n <img src=\"/assets/illustrations/empty-state.svg\" alt=\"No data\" class=\"cqa-w-32 cqa-h-32 cqa-mb-4\" />\n <h3 class=\"cqa-text-lg cqa-font-semibold cqa-mb-2\">No test cases</h3>\n <p class=\"cqa-text-sm cqa-text-neutral-500 cqa-mb-4\">Try adjusting filters or create a new test case.</p>\n <cqa-button variant=\"filled\" (clicked)=\"toggleFilter()\">Show Filters</cqa-button>\n </div>\n </ng-template>\n </app-dynamic-table>\n </ng-container>\n\n <ng-template #storyEmptyTpl>\n <div class=\"cqa-p-6 cqa-flex cqa-flex-col cqa-items-center cqa-justify-center\">\n <cqa-empty-state\n *ngIf=\"isEmptyState\"\n [title]=\"emptyStateConfig.title\"\n [description]=\"emptyStateConfig.description\"\n [imageUrl]=\"emptyStateConfig.imageUrl\"\n [actions]=\"emptyStateConfig.actions\"\n (actionClick)=\"onEmptyAction($event)\"\n >\n </cqa-empty-state>\n </div>\n </ng-template>\n\n </div>\n\n <cqa-pagination\n [totalElements]=\"serverSidePagination ? totalElements : filteredRows.length\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageItemCount]=\"pagedRows.length\"\n (paginate)=\"onPaginate($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n >\n </cqa-pagination>\n\n <div *ngIf=\"anyRowSelected\" class=\"cqa-absolute cqa-bottom-[18.75px] cqa-left-[50%] cqa-translate-x-[-50%] cqa-w-full lg:cqa-max-w-[68%] cqa-sm:max-w-[75%] cqa-max-w-[90%] cqa-z-[1]\" >\n <cqa-table-action-toolbar\n [selectedItems]=\"currentSelectedItems\"\n [actions]=\"actions\"\n (actionClick)=\"actionClick($event)\"\n ></cqa-table-action-toolbar>\n </div>\n \n </div>\n</div>\n\n", components: [{ type: i1.SearchBarComponent, selector: "cqa-search-bar", inputs: ["placeholder", "value", "disabled", "showClear", "ariaLabel", "autoFocus", "size", "fullWidth"], outputs: ["valueChange", "search", "cleared"] }, { type: i2.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i3.ExportCodeModalComponent, selector: "cqa-export-code-modal", inputs: ["isOpen", "cases", "disabled"], outputs: ["closeModal", "export"] }, { type: i4.ColumnVisibilityComponent, selector: "cqa-column-visibility", inputs: ["isStepGroup", "columns", "columnVisibility", "selectedAutoRefreshInterval"], outputs: ["columnVisibilityChange", "autoRefreshChange"] }, { type: i5.SelectedFiltersComponent, selector: "cqa-selected-filters", inputs: ["filterApplied", "chips", "defaultChips", "defaultChipClass"], outputs: ["removeChip", "clearAll", "onClearAll"] }, { type: i6.DynamicFilterComponent, selector: "cqa-dynamic-filter", inputs: ["config", "model", "showFilterPanel", "buttonLayout"], outputs: ["filtersApplied", "filtersChanged", "resetAction", "onApplyFilterClick", "onResetFilterClick"] }, { type: i7.DynamicTableComponent, selector: "app-dynamic-table", inputs: ["data", "columns", "emptyState", "gridTemplateColumns", "screenWidth", "enableSelectAll", "enableLocalSort", "isTableLoading", "isTableDataLoading", "cellJsonPathGetter", "onJsonPathCopiedHandler"], outputs: ["sortChange"] }, { type: i8.EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }, { type: i9.PaginationComponent, selector: "cqa-pagination", inputs: ["totalElements", "totalPages", "pageIndex", "pageSize", "pageItemCount", "pageSizeOptions"], outputs: ["pageIndexChange", "pageSizeChange", "paginate"] }, { type: i10.TableActionToolbarComponent, selector: "cqa-table-action-toolbar", inputs: ["selectedItems", "actions", "showSelectAll", "allSelected", "showDismiss"], outputs: ["actionClick", "selectAllChange", "dismiss"] }], directives: [{ type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
435
435
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TableTemplateComponent, decorators: [{
|
|
436
436
|
type: Component,
|
|
437
|
-
args: [{ selector: 'cqa-table-template', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-ui-root\">\n <div class=\"cqa-w-full cqa-flex cqa-flex-col cqa-relative\">\n <div [class]=\"!showSearchBar ? 'cqa-justify-end' : 'cqa-justify-between'\" class=\"cqa-w-full cqa-flex cqa-items-center cqa-gap-3 cqa-flex-wrap cqa-mb-3\">\n <cqa-search-bar\n *ngIf=\"showSearchBar\"\n [placeholder]=\"searchPlaceholder\"\n [value]=\"searchValue\"\n [showClear]=\"showClear\"\n (valueChange)=\"valueChange($event)\"\n (search)=\"search($event)\"\n (cleared)=\"cleared()\"\n ></cqa-search-bar>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-wrap\">\n <cqa-button\n *ngIf=\"showExportButton\"\n variant=\"grey-solid\"\n icon=\"open_in_new\"\n [text]=\"isExporting ? 'Exporting...' : 'Export'\"\n [disabled]=\"isExporting\"\n (clicked)=\"exportCodeClick()\"\n >\n <span>{{ isExporting ? 'Exporting...' : 'Export' }}</span>\n </cqa-button>\n \n <!-- Export Code Modal -->\n <cqa-export-code-modal\n [isOpen]=\"isExportModalOpen\"\n [cases]=\"selectedCasesForExport\"\n [disabled]=\"false\"\n (closeModal)=\"closeExportModal()\"\n (export)=\"onExportModalExport($event)\">\n </cqa-export-code-modal>\n <ng-container *ngFor=\"let dropdownTemplate of otherDropDownButtons; trackBy: trackByDropdownTemplateRef\">\n <ng-container *ngTemplateOutlet=\"dropdownTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngFor=\"let selectDropdownTemplate of otherSelectDropDownButtons; trackBy: trackBySelectDropdownTemplateRef\">\n <ng-container *ngTemplateOutlet=\"selectDropdownTemplate\"></ng-container>\n </ng-container>\n \n <cqa-button\n *ngIf=\"showFilterButton\"\n variant=\"grey-solid\"\n icon=\"add\"\n [text]=\"'Filter'\"\n (clicked)=\"toggleFilter()\"\n >\n <span>Filter</span>\n </cqa-button>\n <cqa-column-visibility\n *ngIf=\"showSettingsButton\"\n [columns]=\"visibilityColumns\"\n [columnVisibility]=\"columnVisibility\"\n [selectedAutoRefreshInterval]=\"selectedAutoRefreshInterval\"\n (columnVisibilityChange)=\"onColumnVisibilityChange($event)\"\n (autoRefreshChange)=\"onAutoRefreshChange($event)\"\n ></cqa-column-visibility>\n <cqa-button\n *ngIf=\"showAutoRefreshButton\"\n variant=\"grey-solid\"\n icon=\"refresh\"\n (clicked)=\"handleRefreshClick()\"\n [tooltip]=\"'Refresh'\"\n tooltipPosition=\"below\"\n ></cqa-button>\n <ng-container *ngFor=\"let buttonTemplate of otherButtons; trackBy: trackByTemplateRef\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n </ng-container>\n </div>\n </div>\n\n <cqa-selected-filters \n [filterApplied]=\"filterApplied\"\n [chips]=\"chips\"\n (removeChip)=\"onRemoveChip($event)\"\n (clearAll)=\"onClearAllChips()\"\n (onClearAll)=\"onClearAll.emit()\"\n >\n </cqa-selected-filters>\n\n <cqa-dynamic-filter\n *ngIf=\"showFilterPanel\"\n [config]=\"filterConfig\"\n [showFilterPanel]=\"showFilterPanel\"\n (filtersChanged)=\"onFiltersChanged($event)\"\n (filtersApplied)=\"onFiltersApplied($event)\"\n (onApplyFilterClick)=\"onApplyFilterClick.emit($event)\"\n (onResetFilterClick)=\"handleResetFilterClick()\"\n >\n </cqa-dynamic-filter>\n\n <div class=\"cqa-rounded-[7px] cqa-overflow-hidden cqa-border-t cqa-border-l cqa-border-r cqa-border-grey-200 cqa-relative cqa-overflow-x-auto\">\n <ng-container *ngIf=\"(isTableLoading || isTableDataLoading) || (!isEmptyState && pagedRows && pagedRows.length > 0); else storyEmptyTpl\">\n <app-dynamic-table\n [columns]=\"computedColumns\"\n [data]=\"pagedRows\"\n [isTableLoading]=\"isTableLoading\"\n [isTableDataLoading]=\"isTableDataLoading\"\n [cellJsonPathGetter]=\"cellJsonPathGetter\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\">\n <ng-template #emptyTableTpl>\n <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-py-8\">\n <img src=\"/assets/illustrations/empty-state.svg\" alt=\"No data\" class=\"cqa-w-32 cqa-h-32 cqa-mb-4\" />\n <h3 class=\"cqa-text-lg cqa-font-semibold cqa-mb-2\">No test cases</h3>\n <p class=\"cqa-text-sm cqa-text-neutral-500 cqa-mb-4\">Try adjusting filters or create a new test case.</p>\n <cqa-button variant=\"filled\" (clicked)=\"toggleFilter()\">Show Filters</cqa-button>\n </div>\n </ng-template>\n </app-dynamic-table>\n </ng-container>\n\n <ng-template #storyEmptyTpl>\n <div class=\"cqa-p-6 cqa-flex cqa-flex-col cqa-items-center cqa-justify-center\">\n <cqa-empty-state\n *ngIf=\"isEmptyState\"\n [title]=\"emptyStateConfig.title\"\n [description]=\"emptyStateConfig.description\"\n [imageUrl]=\"emptyStateConfig.imageUrl\"\n [actions]=\"emptyStateConfig.actions\"\n (actionClick)=\"onEmptyAction($event)\"\n >\n </cqa-empty-state>\n </div>\n </ng-template>\n\n </div>\n\n <cqa-pagination\n [totalElements]=\"serverSidePagination ? totalElements : filteredRows.length\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageItemCount]=\"pagedRows.length\"\n (paginate)=\"onPaginate($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n >\n </cqa-pagination>\n\n <div *ngIf=\"anyRowSelected\" class=\"cqa-absolute cqa-bottom-[18.75px] cqa-left-[50%] cqa-translate-x-[-50%] cqa-w-full lg:cqa-max-w-[68%] cqa-sm:max-w-[75%] cqa-max-w-[90%] cqa-z-[1]\" >\n <cqa-table-action-toolbar\n [selectedItems]=\"currentSelectedItems\"\n [actions]=\"actions\"\n (actionClick)=\"actionClick($event)\"\n ></cqa-table-action-toolbar>\n </div>\n \n </div>\n</div>\n\n", styles: [] }]
|
|
437
|
+
args: [{ selector: 'cqa-table-template', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-ui-root\">\n <div class=\"cqa-w-full cqa-flex cqa-flex-col cqa-relative\">\n <div [class]=\"!showSearchBar ? 'cqa-justify-end' : 'cqa-justify-between'\" class=\"cqa-w-full cqa-flex cqa-items-center cqa-gap-3 cqa-flex-wrap cqa-mb-3\">\n <cqa-search-bar\n *ngIf=\"showSearchBar\"\n [placeholder]=\"searchPlaceholder\"\n [value]=\"searchValue\"\n [showClear]=\"showClear\"\n (valueChange)=\"valueChange($event)\"\n (search)=\"search($event)\"\n (cleared)=\"cleared()\"\n ></cqa-search-bar>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-wrap\">\n <cqa-button\n *ngIf=\"showExportButton\"\n variant=\"grey-solid\"\n icon=\"open_in_new\"\n [text]=\"isExporting ? 'Exporting...' : 'Export'\"\n [disabled]=\"isExporting\"\n (clicked)=\"exportCodeClick()\"\n >\n <span>{{ isExporting ? 'Exporting...' : 'Export' }}</span>\n </cqa-button>\n \n <!-- Export Code Modal -->\n <cqa-export-code-modal\n *ngIf=\"showExportButton\"\n [isOpen]=\"isExportModalOpen\"\n [cases]=\"selectedCasesForExport\"\n [disabled]=\"false\"\n (closeModal)=\"closeExportModal()\"\n (export)=\"onExportModalExport($event)\">\n </cqa-export-code-modal>\n <ng-container *ngFor=\"let dropdownTemplate of otherDropDownButtons; trackBy: trackByDropdownTemplateRef\">\n <ng-container *ngTemplateOutlet=\"dropdownTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngFor=\"let selectDropdownTemplate of otherSelectDropDownButtons; trackBy: trackBySelectDropdownTemplateRef\">\n <ng-container *ngTemplateOutlet=\"selectDropdownTemplate\"></ng-container>\n </ng-container>\n \n <cqa-button\n *ngIf=\"showFilterButton\"\n variant=\"grey-solid\"\n icon=\"add\"\n [text]=\"'Filter'\"\n (clicked)=\"toggleFilter()\"\n >\n <span>Filter</span>\n </cqa-button>\n <cqa-column-visibility\n *ngIf=\"showSettingsButton\"\n [columns]=\"visibilityColumns\"\n [columnVisibility]=\"columnVisibility\"\n [selectedAutoRefreshInterval]=\"selectedAutoRefreshInterval\"\n (columnVisibilityChange)=\"onColumnVisibilityChange($event)\"\n (autoRefreshChange)=\"onAutoRefreshChange($event)\"\n ></cqa-column-visibility>\n <cqa-button\n *ngIf=\"showAutoRefreshButton\"\n variant=\"grey-solid\"\n icon=\"refresh\"\n (clicked)=\"handleRefreshClick()\"\n [tooltip]=\"'Refresh'\"\n tooltipPosition=\"below\"\n ></cqa-button>\n <ng-container *ngFor=\"let buttonTemplate of otherButtons; trackBy: trackByTemplateRef\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n </ng-container>\n </div>\n </div>\n\n <cqa-selected-filters \n [filterApplied]=\"filterApplied\"\n [chips]=\"chips\"\n (removeChip)=\"onRemoveChip($event)\"\n (clearAll)=\"onClearAllChips()\"\n (onClearAll)=\"onClearAll.emit()\"\n >\n </cqa-selected-filters>\n\n <cqa-dynamic-filter\n *ngIf=\"showFilterPanel\"\n [config]=\"filterConfig\"\n [showFilterPanel]=\"showFilterPanel\"\n (filtersChanged)=\"onFiltersChanged($event)\"\n (filtersApplied)=\"onFiltersApplied($event)\"\n (onApplyFilterClick)=\"onApplyFilterClick.emit($event)\"\n (onResetFilterClick)=\"handleResetFilterClick()\"\n >\n </cqa-dynamic-filter>\n\n <div class=\"cqa-rounded-[7px] cqa-overflow-hidden cqa-border-t cqa-border-l cqa-border-r cqa-border-grey-200 cqa-relative cqa-overflow-x-auto\">\n <ng-container *ngIf=\"(isTableLoading || isTableDataLoading) || (!isEmptyState && pagedRows && pagedRows.length > 0); else storyEmptyTpl\">\n <app-dynamic-table\n [columns]=\"computedColumns\"\n [data]=\"pagedRows\"\n [isTableLoading]=\"isTableLoading\"\n [isTableDataLoading]=\"isTableDataLoading\"\n [cellJsonPathGetter]=\"cellJsonPathGetter\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\">\n <ng-template #emptyTableTpl>\n <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-py-8\">\n <img src=\"/assets/illustrations/empty-state.svg\" alt=\"No data\" class=\"cqa-w-32 cqa-h-32 cqa-mb-4\" />\n <h3 class=\"cqa-text-lg cqa-font-semibold cqa-mb-2\">No test cases</h3>\n <p class=\"cqa-text-sm cqa-text-neutral-500 cqa-mb-4\">Try adjusting filters or create a new test case.</p>\n <cqa-button variant=\"filled\" (clicked)=\"toggleFilter()\">Show Filters</cqa-button>\n </div>\n </ng-template>\n </app-dynamic-table>\n </ng-container>\n\n <ng-template #storyEmptyTpl>\n <div class=\"cqa-p-6 cqa-flex cqa-flex-col cqa-items-center cqa-justify-center\">\n <cqa-empty-state\n *ngIf=\"isEmptyState\"\n [title]=\"emptyStateConfig.title\"\n [description]=\"emptyStateConfig.description\"\n [imageUrl]=\"emptyStateConfig.imageUrl\"\n [actions]=\"emptyStateConfig.actions\"\n (actionClick)=\"onEmptyAction($event)\"\n >\n </cqa-empty-state>\n </div>\n </ng-template>\n\n </div>\n\n <cqa-pagination\n [totalElements]=\"serverSidePagination ? totalElements : filteredRows.length\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageItemCount]=\"pagedRows.length\"\n (paginate)=\"onPaginate($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n >\n </cqa-pagination>\n\n <div *ngIf=\"anyRowSelected\" class=\"cqa-absolute cqa-bottom-[18.75px] cqa-left-[50%] cqa-translate-x-[-50%] cqa-w-full lg:cqa-max-w-[68%] cqa-sm:max-w-[75%] cqa-max-w-[90%] cqa-z-[1]\" >\n <cqa-table-action-toolbar\n [selectedItems]=\"currentSelectedItems\"\n [actions]=\"actions\"\n (actionClick)=\"actionClick($event)\"\n ></cqa-table-action-toolbar>\n </div>\n \n </div>\n</div>\n\n", styles: [] }]
|
|
438
438
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { searchPlaceholder: [{
|
|
439
439
|
type: Input
|
|
440
440
|
}], searchValue: [{
|
|
@@ -524,4 +524,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
524
524
|
}], onAutoRefreshClick: [{
|
|
525
525
|
type: Output
|
|
526
526
|
}] } });
|
|
527
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvdGFibGUtdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvdGFibGUtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFLWix1QkFBdUIsR0FHeEIsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFTN0UsTUFBTSxPQUFPLHNCQUFzQjtJQWlJakMsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFoSTFDLG9CQUFvQjtRQUNYLHNCQUFpQixHQUFXLG1CQUFtQixDQUFDO1FBQ2hELGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFDMUIsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQ3RDLHFCQUFxQjtRQUNYLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM1QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUErRSxDQUFDO1FBQzFILGlCQUFpQjtRQUNQLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDN0MsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUM5QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN0QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUUvQyxnQkFBZ0I7UUFDUCxpQkFBWSxHQUF3QixFQUFFLENB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QkFBakIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljRmlsdGVySXRlbSB9IGZyb20gJy4uL2ZpbHRlcnMvZHluYW1pYy1maWx0ZXIvZHluYW1pYy1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNUYWJsZUNvbHVtbiB9IGZyb20gJy4uL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyB9IGZyb20gJy4uL2NvbHVtbi12aXNpYmlsaXR5L2NvbHVtbi12aXNpYmlsaXR5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUFjdGlvbiB9IGZyb20gJy4uL3RhYmxlLWFjdGlvbi10b29sYmFyL3RhYmxlLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29uZmlnIH0gZnJvbSAnLi4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFTVBUWV9TVEFURV9JTUFHRVMgfSBmcm9tICcuLi9hc3NldHMvaW1hZ2VzL2ltYWdlLWFzc2V0cy5jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtdGFibGUtdGVtcGxhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLy8gU2VhcmNoIGJhciBpbnB1dHNcbiAgQElucHV0KCkgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWFyY2ggY29tcG9uZW50cyc7XG4gIEBJbnB1dCgpIHNlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgc2hvd0NsZWFyOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1NlYXJjaEJhcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNFeHBvcnRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gU2VhcmNoIGJhciBvdXRwdXRzXG4gIEBPdXRwdXQoKSBvblNlYXJjaENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgb25FeHBvcnRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0eXBlOiAnbG9jYWwnIHwgJ2VtYWlsJzsgZW1haWxzPzogc3RyaW5nW107IHNlbGVjdGVkSXRlbXM6IGFueVtdIH0gfCB2b2lkPigpO1xuICAvLyBGaWx0ZXIgb3V0cHV0c1xuICBAT3V0cHV0KCkgb25BcHBseUZpbHRlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblJlc2V0RmlsdGVyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkNsZWFyQWxsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVtb3ZlQ2hpcCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8vIEZpbHRlciBpbnB1dHNcbiAgQElucHV0KCkgZmlsdGVyQ29uZmlnOiBEeW5hbWljRmlsdGVySXRlbVtdID0gW107XG4gIEBJbnB1dCgpIHNob3dGaWx0ZXJQYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93RmlsdGVyQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBPdGhlciBidXR0b25zIGlucHV0IChhcnJheSBvZiBidXR0b24gdGVtcGxhdGVzL2NvbXBvbmVudHMpXG4gIEBJbnB1dCgpIG90aGVyQnV0dG9uczogVGVtcGxhdGVSZWY8YW55PltdID0gW107XG4gIFxuICAvLyBPdGhlciBkcm9wZG93biBidXR0b25zIGlucHV0IChhcnJheSBvZiBkcm9wZG93biBidXR0b24gdGVtcGxhdGVzL2NvbXBvbmVudHMpXG4gIEBJbnB1dCgpIG90aGVyRHJvcERvd25CdXR0b25zOiBUZW1wbGF0ZVJlZjxhbnk+W10gPSBbXTtcbiAgXG4gIC8vIE90aGVyIHNlbGVjdCBkcm9wZG93biBidXR0b25zIGlucHV0IChhcnJheSBvZiBzZWxlY3QgZHJvcGRvd24gYnV0dG9uIHRlbXBsYXRlcy9jb21wb25lbnRzKVxuICBASW5wdXQoKSBvdGhlclNlbGVjdERyb3BEb3duQnV0dG9uczogVGVtcGxhdGVSZWY8YW55PltdID0gW107XG4gIFxuICAvLyBMZWdhY3kgc2luZ2xlIGJ1dHRvbiBpbnB1dHMgKGRlcHJlY2F0ZWQsIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gIC8qKiBAZGVwcmVjYXRlZCBVc2Ugb3RoZXJCdXR0b25zIGFycmF5IGluc3RlYWQgKi9cbiAgQElucHV0KCkgb3RoZXJCdXR0b25MYWJlbDogc3RyaW5nID0gJ090aGVyIEJ1dHRvbic7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2Ugb3RoZXJCdXR0b25zIGFycmF5IGluc3RlYWQgKi9cbiAgQElucHV0KCkgb3RoZXJCdXR0b25WYXJpYW50OiAnZmlsbGVkJyB8ICdvdXRsaW5lZCcgfCAndGV4dCcgfCAnZWxldmF0ZWQnIHwgJ3RvbmFsJyB8ICdncmV5LXNvbGlkJyA9ICdmaWxsZWQnO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIG90aGVyQnV0dG9ucyBhcnJheSBpbnN0ZWFkICovXG4gIEBJbnB1dCgpIHNob3dPdGhlckJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIFxuICAvLyBBY3Rpb24gbWVudSBidXR0b24gKHRocmVlLWRvdCBtZW51IGluIHRhYmxlIHJvd3MpXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFNldHRpbmdzIGFuZCByZWZyZXNoIGJ1dHRvbnNcbiAgQElucHV0KCkgc2hvd1NldHRpbmdzQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0F1dG9SZWZyZXNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBEYXRhIGlucHV0XG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XG5cbiAgLy8gRW1wdHkgc3RhdGUgaW5wdXRzXG4gIEBJbnB1dCgpIGlzRW1wdHlTdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBlbXB0eVN0YXRlQ29uZmlnOiBFbXB0eVN0YXRlQ29uZmlnID0ge1xuICAgIHRpdGxlOiAnTm8gRGF0YSBBdmFpbGFibGUgWWV0JyxcbiAgICBkZXNjcmlwdGlvbjogJ1J1biBvciB1cGxvYWQgeW91ciBmaXJzdCB0ZXN0IHRvIHNlZSB5b3VyIGFuYWx5dGljcyBhbmQgdHJlbmRzIGhlcmUuIFdhdGNoIHlvdXIgcXVhbGl0eSBtZXRyaWNzIGNvbWUgdG8gbGlmZSB3aXRoIHJlYWwtdGltZSBpbnNpZ2h0cy4nLFxuICAgIGltYWdlVXJsOiBFTVBUWV9TVEFURV9JTUFHRVMuREFTSEJPQVJELFxuICAgIGFjdGlvbnM6IFt7IGxhYmVsOiAnUnVuIFRlc3QgU3VpdGUnLCB2YXJpYW50OiAnZmlsbGVkJyB9XSxcbiAgfTtcblxuICAvLyBBY3Rpb24gYmFyIGlucHV0c1xuICBASW5wdXQoKSBhY3Rpb25zOiBUYWJsZUFjdGlvbltdID0gW1xuICAgIHsgXG4gICAgICBpZDogJ2RlbGV0ZScsIFxuICAgICAgbGFiZWw6ICdEZWxldGUnLCBcbiAgICAgIGljb246ICdkZWxldGUnLCBcbiAgICAgIHRvb2x0aXA6ICdEZWxldGUgc2VsZWN0ZWQnLFxuICAgICAgb25DbGljazogKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZSBhY3Rpb24gY2xpY2tlZDonLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgXG4gICAgICBpZDogJ2VkaXQnLCBcbiAgICAgIGxhYmVsOiAnRWRpdCcsIFxuICAgICAgaWNvbjogJ2VkaXQnLCBcbiAgICAgIHRvb2x0aXA6ICdFZGl0IHNlbGVjdGVkJyxcbiAgICAgIG9uQ2xpY2s6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdFZGl0IGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgeyBcbiAgICAgIGlkOiAnYWRkLXRhZycsIFxuICAgICAgbGFiZWw6ICdBZGQgVGFnJywgXG4gICAgICBpY29uOiAnbG9jYWxfb2ZmZXInLCBcbiAgICAgIHRvb2x0aXA6ICdBZGQgdGFncycsXG4gICAgICBvbkNsaWNrOiAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnQWRkIHRhZyBhY3Rpb24gY2xpY2tlZDonLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgXG4gICAgICBpZDogJ3JlbW92ZS10YWcnLCBcbiAgICAgIGxhYmVsOiAnUmVtb3ZlIFRhZycsIFxuICAgICAgaWNvbjogJ2xhYmVsX29mZicsIFxuICAgICAgdG9vbHRpcDogJ1JlbW92ZSB0YWdzJyxcbiAgICAgIG9uQ2xpY2s6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmUgdGFnIGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gIF07XG5cbiAgLy8gQ2hpcHMgaW5wdXRzXG4gIEBJbnB1dCgpIGNoaXBzOiBBcnJheTx7IGtleT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgZnVsbFRleHQ/OiBzdHJpbmc7IGhhc01vcmU/OiBib29sZWFuIH0+ID0gW107XG4gIEBJbnB1dCgpIGZpbHRlckFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBUYWJsZSBpbnB1dHNcbiAgQElucHV0KCkgY29sdW1uczogRHluYW1pY1RhYmxlQ29sdW1uW10gPSBbXTtcbiAgQElucHV0KCkgc2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBwYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgQElucHV0KCkgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDQwLCA2MCwgODBdO1xuICAvLyBTZXJ2ZXItc2lkZSBwYWdpbmF0aW9uIGNvbnRyb2xzXG4gIEBJbnB1dCgpIHNlcnZlclNpZGVQYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRvdGFsRWxlbWVudHM6IG51bWJlciA9IDA7XG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHBhZ2VJbmRleDogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH0+KCk7XG4gIC8vIExvYWRlciBjb250cm9scyAocGFzc2VkIGRvd24gdG8gZHluYW1pYyB0YWJsZSlcbiAgQElucHV0KCkgaXNUYWJsZUxvYWRpbmc/OiBib29sZWFuO1xuICBASW5wdXQoKSBpc1RhYmxlRGF0YUxvYWRpbmc/OiBib29sZWFuO1xuICAvLyBCYWNrd2FyZC1jb21wYXRpYmlsaXR5IGZsYWc7IGlmIHByb3ZpZGVkLCBkeW5hbWljIHRhYmxlIHdpbGwgdXNlIGl0IHdoZW4gc3BlY2lmaWMgZmxhZ3MgYXJlIHVuZGVmaW5lZFxuXG4gIC8vIE9wdGlvbmFsIGdldHRlciBmb3IgSlNPTiBwYXRoIHBlciBjZWxsLiBXaGVuIHByb3ZpZGVkLCBkb3VibGUtY2xpY2tpbmcgYSBjZWxsIGNvcGllcyB0aGUgcGF0aC5cbiAgQElucHV0KCkgY2VsbEpzb25QYXRoR2V0dGVyPzogKHJvd0luZGV4OiBudW1iZXIsIGNvbElkOiBzdHJpbmcsIHJvdzogYW55KSA9PiBzdHJpbmc7XG5cbiAgLy8gT3B0aW9uYWwgaGFuZGxlciBjYWxsZWQgd2hlbiBhIEpTT04gcGF0aCBpcyBjb3BpZWQgZnJvbSBhIHRhYmxlIGNlbGxcbiAgQElucHV0KCkgb25Kc29uUGF0aENvcGllZEhhbmRsZXI/OiAoZXZlbnQ6IHsgcGF0aDogc3RyaW5nOyBzb3VyY2U6IHN0cmluZyB9KSA9PiB2b2lkO1xuXG4gIC8vIEludGVybmFsIHN0YXRlIGZvciBjb2x1bW4gdmlzaWJpbGl0eVxuICBwcml2YXRlIF9jb2x1bW5WaXNpYmlsaXR5OiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnID0ge307XG4gIHByaXZhdGUgX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4gPSBbXTtcbiAgZmlsdGVyZWRSb3dzOiBhbnlbXSA9IFtdO1xuICBwYWdlZFJvd3M6IGFueVtdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuICBwcml2YXRlIHBlbmRpbmdGaWx0ZXJzOiBhbnk7XG4gIHByaXZhdGUgYXBwbGllZEZpbHRlcnM6IGFueTtcbiAgcHJpdmF0ZSBhdXRvUmVmcmVzaFRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xuICBAT3V0cHV0KCkgb25SZWxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkF1dG9SZWZyZXNoQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLy8gRGVyaXZlZCBjb2x1bW5zIHdpdGggdmlzaWJpbGl0eSBhcHBsaWVkLlxuICBjb21wdXRlZENvbHVtbnM6IER5bmFtaWNUYWJsZUNvbHVtbltdID0gW107XG4gIC8vIEF1dG8tZ2VuZXJhdGVkIHZpc2liaWxpdHkgY29sdW1ucyBmcm9tIGNvbHVtbnMgaW5wdXRcbiAgdmlzaWJpbGl0eUNvbHVtbnM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiA9IFtdO1xuXG4gIHByaXZhdGUgdXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpc2liaWxpdHkgPSB0aGlzLl9jb2x1bW5WaXNpYmlsaXR5IHx8IHt9O1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY29sdW1ucyB8fCBbXTtcbiAgICB0aGlzLmNvbXB1dGVkQ29sdW1ucyA9IHNvdXJjZS5tYXAoY29sID0+IHtcbiAgICAgIGlmIChbJ2NoZWNrYm94JywgJ2FjdGlvbnMnXS5pbmNsdWRlcyhjb2wuZmllbGRJZCkpIHtcbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNob3cgPSB2aXNpYmlsaXR5W2NvbC5maWVsZElkXTtcbiAgICAgIHJldHVybiB7IC4uLmNvbCwgaXNTaG93OiBzaG93ICE9PSBmYWxzZSB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmlsaXR5Q29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLl9jYWNoZWRWaXNpYmlsaXR5Q29sdW1ucyA9IHRoaXMubWFwVmlzaWJpbGl0eUNvbHVtbnMoKTtcbiAgICB0aGlzLnZpc2liaWxpdHlDb2x1bW5zID0gdGhpcy5fY2FjaGVkVmlzaWJpbGl0eUNvbHVtbnM7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBjb2x1bW4gdmlzaWJpbGl0eSBzdGF0ZVxuICBnZXQgY29sdW1uVmlzaWJpbGl0eSgpOiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uVmlzaWJpbGl0eTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUNvbHVtbnMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddIHx8IGNoYW5nZXNbJ2lzRW1wdHlTdGF0ZSddKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpO1xuICAgICAgdGhpcy51cGRhdGVDb21wdXRlZENvbHVtbnMoKTtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUNvbHVtbnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDb21wb25lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eVN0YXRlKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFtdO1xuICAgICAgdGhpcy5wYWdlZFJvd3MgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbiBzZXJ2ZXItc2lkZSBtb2RlLCBhc3N1bWUgaW5jb21pbmcgZGF0YSBpcyBhbHJlYWR5IGEgcGFnZSBzbGljZVxuICAgIGlmICh0aGlzLnNlcnZlclNpZGVQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgdGhpcy5wYWdlZFJvd3MgPSBbLi4udGhpcy5maWx0ZXJlZFJvd3NdO1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5WaXNpYmlsaXR5KCk7XG4gICAgdGhpcy51cGRhdGVDb21wdXRlZENvbHVtbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbHVtblZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgLy8gQ2FjaGUgdmlzaWJpbGl0eSBjb2x1bW5zIHRvIGF2b2lkIGNyZWF0aW5nIG5ldyBhcnJheXMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvblxuICAgIHRoaXMuX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zID0gdGhpcy5tYXBWaXNpYmlsaXR5Q29sdW1ucygpO1xuICAgIC8vIEluaXRpYWxpemUgdmlzaWJpbGl0eSBzdGF0ZSBmb3IgYWxsIHZpc2liaWxpdHkgY29sdW1ucyAoZGVmYXVsdCB0byB0cnVlKVxuICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zKSB7XG4gICAgICBpZiAodGhpcy5fY29sdW1uVmlzaWJpbGl0eVtjb2wuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVmlzaWJpbGl0eVtjb2wuaWRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgYW55Um93U2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMucGFnZWRSb3dzICYmIHRoaXMucGFnZWRSb3dzLnNvbWUociA9PiAhIShyIGFzIGFueSkuaXNTZWxlY3RlZCkpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRTZWxlY3RlZEl0ZW1zKCk6IGFueVtdIHtcbiAgICByZXR1cm4gKHRoaXMucGFnZWRSb3dzIHx8IFtdKS5maWx0ZXIociA9PiAhIShyIGFzIGFueSkuaXNTZWxlY3RlZCk7XG4gIH1cblxuICBhY3Rpb25DbGljayhkYXRhOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnYWN0aW9uIHRvb2xiYXInLCBkYXRhKTtcbiAgfVxuXG4gIHZpZXcoaWQ6IG51bWJlciB8IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdWaWV3JywgaWQpO1xuICB9XG5cbiAgZWRpdChyb3c6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdFZGl0Jywgcm93KTtcbiAgfVxuXG4gIGRlbGV0ZShyb3c6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdEZWxldGUnLCByb3cpO1xuICB9XG5cbiAgdG9nZ2xlRmlsdGVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0ZpbHRlclBhbmVsID0gIXRoaXMuc2hvd0ZpbHRlclBhbmVsO1xuICB9XG5cbiAgb25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlKGNmZzogQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuX2NvbHVtblZpc2liaWxpdHkgPSB7IC4uLmNmZyB9O1xuICAgIHRoaXMudXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkF1dG9SZWZyZXNoQ2hhbmdlKGludGVydmFsTXM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsID0gaW50ZXJ2YWxNcztcbiAgICB0aGlzLnNldHVwQXV0b1JlZnJlc2goaW50ZXJ2YWxNcyk7XG4gICAgdGhpcy50cmlnZ2VyUmVsb2FkKCk7XG4gIH1cblxuICB2YWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1ZhbHVlIGNoYW5nZWQnLCB2YWx1ZSk7XG4gICAgdGhpcy5vblNlYXJjaENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHNlYXJjaCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1NlYXJjaCcsIHZhbHVlKTtcbiAgfVxuXG4gIGNsZWFyZWQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0NsZWFyZWQnKTtcbiAgfVxuXG4gIG9uRW1wdHlBY3Rpb24oYWN0aW9uOiBhbnkpIHtcbiAgICBpZiAoYWN0aW9uPy5sYWJlbCA9PT0gJ1Nob3cgZmlsdGVycycpIHtcbiAgICAgIHRoaXMudG9nZ2xlRmlsdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgb25GaWx0ZXJzQ2hhbmdlZChjdXJyZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBEZWZlciBhcHBseWluZyBmaWx0ZXJzIGFuZCB1cGRhdGluZyBjaGlwcyB1bnRpbCBBcHBseSBGaWx0ZXIgaXMgY2xpY2tlZFxuICAgIHRoaXMucGVuZGluZ0ZpbHRlcnMgPSBjdXJyZW50O1xuICB9XG5cbiAgb25GaWx0ZXJzQXBwbGllZChhcHBsaWVkOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBlZmZlY3RpdmUgPSBhcHBsaWVkID8/IHRoaXMucGVuZGluZ0ZpbHRlcnMgPz8ge307XG4gICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IGVmZmVjdGl2ZTtcbiAgICB0aGlzLmZpbHRlcmVkUm93cyA9IHRoaXMuZGF0YS5maWx0ZXIociA9PiB0aGlzLnBhc3NGaWx0ZXJzKGVmZmVjdGl2ZSwgcikpO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIGNvbnN0IGNoaXBzOiBBcnJheTx7IGtleT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgZnVsbFRleHQ/OiBzdHJpbmc7IGhhc01vcmU/OiBib29sZWFuIH0+ID0gW107XG4gICAgaWYgKGVmZmVjdGl2ZSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZWZmZWN0aXZlKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGVmZmVjdGl2ZVtrZXldO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgdGV4dCA9ICcnO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB0ZXh0ID0gdmFsdWUubWFwKCh2OiBhbnkpID0+ICh2Py5uYW1lID8/IHY/LmxhYmVsID8/IHY/LnZhbHVlID8/IHYpKS5qb2luKCcsICcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZiAoJ3N0YXJ0JyBpbiB2YWx1ZSB8fCAnZW5kJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcyA9IHZhbHVlLnN0YXJ0ID8gbmV3IERhdGUodmFsdWUuc3RhcnQpLnRvTG9jYWxlRGF0ZVN0cmluZygpIDogJyc7XG4gICAgICAgICAgICBjb25zdCBlID0gdmFsdWUuZW5kID8gbmV3IERhdGUodmFsdWUuZW5kKS50b0xvY2FsZURhdGVTdHJpbmcoKSA6ICcnO1xuICAgICAgICAgICAgdGV4dCA9IFtzLCBlXS5maWx0ZXIoQm9vbGVhbikuam9pbignIC0gJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHQgPSAodmFsdWU/Lm5hbWUgPz8gdmFsdWU/LmxhYmVsID8/IHZhbHVlPy52YWx1ZSA/PyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjaGlwcy5wdXNoKHsga2V5LCB0ZXh0LCBmdWxsVGV4dDogdGV4dCwgaGFzTW9yZTogdGV4dC5sZW5ndGggPiAzMCB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGlwcyA9IGNoaXBzO1xuICAgIHRoaXMuZmlsdGVyQXBwbGllZCA9IHRoaXMuY2hpcHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGhhbmRsZVJlc2V0RmlsdGVyQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgY2hpcHMgYW5kIHJlc2V0IGZpbHRlcmVkIGRhdGEgd2hlbiByZXNldCBpcyBjbGlja2VkXG4gICAgdGhpcy5wZW5kaW5nRmlsdGVycyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNoaXBzID0gW107XG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5maWx0ZXJlZFJvd3MgPSBbLi4udGhpcy5kYXRhXTtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB0aGlzLm9uUmVzZXRGaWx0ZXJDbGljay5lbWl0KCk7XG4gIH1cblxuICBoYW5kbGVSZWZyZXNoQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5vbkF1dG9SZWZyZXNoQ2xpY2suZW1pdCgpO1xuICAgIHRoaXMudHJpZ2dlclJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmlnZ2VyUmVsb2FkKCk6IHZvaWQge1xuICAgIGNvbnN0IGVmZmVjdGl2ZSA9IHRoaXMuYXBwbGllZEZpbHRlcnMgPz8ge307XG4gICAgdGhpcy5maWx0ZXJlZFJvd3MgPSB0aGlzLmRhdGEuZmlsdGVyKHIgPT4gdGhpcy5wYXNzRmlsdGVycyhlZmZlY3RpdmUsIHIpKTtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB0aGlzLm9uUmVsb2FkLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBBdXRvUmVmcmVzaChpbnRlcnZhbE1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyQXV0b1JlZnJlc2goKTtcbiAgICBpZiAoaW50ZXJ2YWxNcyAmJiBpbnRlcnZhbE1zID4gMCkge1xuICAgICAgdGhpcy5hdXRvUmVmcmVzaFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICB0aGlzLnRyaWdnZXJSZWxvYWQoKTtcbiAgICAgIH0sIGludGVydmFsTXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJBdXRvUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvUmVmcmVzaFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuYXV0b1JlZnJlc2hUaW1lcik7XG4gICAgICB0aGlzLmF1dG9SZWZyZXNoVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckF1dG9SZWZyZXNoKCk7XG4gIH1cblxuICBvblBhZ2luYXRlKGU6IHsgcGFnZUluZGV4OiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfSk6IHZvaWQge1xuICAgIHRoaXMucGFnZUluZGV4ID0gZS5wYWdlSW5kZXg7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGUucGFnZVNpemU7XG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHsgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCwgcGFnZVNpemU6IHRoaXMucGFnZVNpemUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gIH1cblxuICBvblBhZ2VTaXplQ2hhbmdlKHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZVNpemUgPSBzaXplO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoeyBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LCBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgfVxuXG4gIG9uUmVtb3ZlQ2hpcChjaGlwOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNoaXBzID0gdGhpcy5jaGlwcy5maWx0ZXIoYyA9PiBjICE9PSBjaGlwKTtcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQgPSB0aGlzLmNoaXBzLmxlbmd0aCA+IDA7XG4gICAgLy8gRW1pdCBldmVudCB0byBwYXJlbnQgY29tcG9uZW50IChzYW1lIHBhdHRlcm4gYXMgZXhlY3V0aW9uIHRhYilcbiAgICB0aGlzLnJlbW92ZUNoaXAuZW1pdChjaGlwKTtcbiAgfVxuXG4gIG9uQ2xlYXJBbGxDaGlwcygpOiB2b2lkIHtcbiAgICB0aGlzLmNoaXBzID0gW107XG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5UGFnaW5hdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlUGFnaW5hdGlvbikge1xuICAgICAgLy8gU2VydmVyIG1vZGU6IHBhcmVudCBzdXBwbGllcyBhbHJlYWR5LXBhZ2luYXRlZCBkYXRhXG4gICAgICB0aGlzLnBhZ2VkUm93cyA9IFsuLi50aGlzLmZpbHRlcmVkUm93c107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wYWdlSW5kZXggKiB0aGlzLnBhZ2VTaXplO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcbiAgICB0aGlzLnBhZ2VkUm93cyA9IHRoaXMuZmlsdGVyZWRSb3dzLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBWaXNpYmlsaXR5Q29sdW1ucygpOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiAodGhpcy5jb2x1bW5zIHx8IFtdKVxuICAgICAgLmZpbHRlcihjID0+IGMuaXNEZWZhdWx0ID09PSBmYWxzZSlcbiAgICAgIC5tYXAoYyA9PiAoeyBpZDogYy5maWVsZElkLCBsYWJlbDogYy5maWVsZE5hbWUgfHwgYy5maWVsZElkIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplRGF0ZShkOiBhbnkpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAoIWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHRzID0gRGF0ZS5wYXJzZShkKTtcbiAgICByZXR1cm4gaXNOYU4odHMpID8gbnVsbCA6IHRzO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXNzRmlsdGVycyhmaWx0ZXJzOiBhbnksIHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFmaWx0ZXJzKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZmlsdGVycy5zdGF0dXMgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJzLnN0YXR1cykgJiYgZmlsdGVycy5zdGF0dXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIWZpbHRlcnMuc3RhdHVzLmluY2x1ZGVzKHJvdy5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJzLnByaW9yaXR5ICYmIEFycmF5LmlzQXJyYXkoZmlsdGVycy5wcmlvcml0eSkgJiYgZmlsdGVycy5wcmlvcml0eS5sZW5ndGgpIHtcbiAgICAgIGlmICghZmlsdGVycy5wcmlvcml0eS5pbmNsdWRlcyhyb3cucHJpb3JpdHlOYW1lKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycy50ZXN0VHlwZSAmJiBBcnJheS5pc0FycmF5KGZpbHRlcnMudGVzdFR5cGUpICYmIGZpbHRlcnMudGVzdFR5cGUubGVuZ3RoKSB7XG4gICAgICBpZiAoIWZpbHRlcnMudGVzdFR5cGUuaW5jbHVkZXMocm93LnRlc3RUeXBlKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycy5jcmVhdGVkX2RhdGUgJiYgKGZpbHRlcnMuY3JlYXRlZF9kYXRlLnN0YXJ0IHx8IGZpbHRlcnMuY3JlYXRlZF9kYXRlLmVuZCkpIHtcbiAgICAgIGNvbnN0IHN0YXJ0VHMgPSB0aGlzLm5vcm1hbGl6ZURhdGUoZmlsdGVycy5jcmVhdGVkX2RhdGUuc3RhcnQpO1xuICAgICAgY29uc3QgZW5kVHMgPSB0aGlzLm5vcm1hbGl6ZURhdGUoZmlsdGVycy5jcmVhdGVkX2RhdGUuZW5kKTtcbiAgICAgIGNvbnN0IHJvd1RzID0gdGhpcy5ub3JtYWxpemVEYXRlKHJvdy5jcmVhdGVkQXQpO1xuICAgICAgaWYgKHJvd1RzICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHN0YXJ0VHMgIT0gbnVsbCAmJiByb3dUcyA8IHN0YXJ0VHMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGVuZFRzICE9IG51bGwgJiYgcm93VHMgPiBlbmRUcykgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyYWNrQnlUZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5RHJvcGRvd25UZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5U2VsZWN0RHJvcGRvd25UZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvLyBFeHBvcnQgbW9kYWwgc3RhdGVcbiAgaXNFeHBvcnRNb2RhbE9wZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBleHBvcnRDb2RlQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gR2V0IHNlbGVjdGVkIGl0ZW1zXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbXM7XG4gICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlbiBubyBpdGVtcyBhcmUgc2VsZWN0ZWRcbiAgICAgIHRoaXMub25FeHBvcnRDbGljay5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNFeHBvcnRNb2RhbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VFeHBvcnRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwb3J0TW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBvbkV4cG9ydE1vZGFsRXhwb3J0KHJlc3VsdDogeyB0eXBlOiAnbG9jYWwnIHwgJ2VtYWlsJzsgZW1haWxzPzogc3RyaW5nW10gfSk6IHZvaWQge1xuICAgIHRoaXMuaXNFeHBvcnRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudCB3aXRoIGV4cG9ydCByZXN1bHRcbiAgICB0aGlzLm9uRXhwb3J0Q2xpY2suZW1pdCh7IFxuICAgICAgdHlwZTogcmVzdWx0LnR5cGUsIFxuICAgICAgZW1haWxzOiByZXN1bHQuZW1haWxzLCBcbiAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbXMgXG4gICAgfSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDYXNlc0ZvckV4cG9ydCgpOiBBcnJheTx7IGlkPzogbnVtYmVyOyBuYW1lPzogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0ZWRJdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICBuYW1lOiBpdGVtLm5hbWUgfHwgaXRlbS50aXRsZSB8fCAnVW5uYW1lZCdcbiAgICB9KSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtdWktcm9vdFwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLXJlbGF0aXZlXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwiIXNob3dTZWFyY2hCYXIgPyAnY3FhLWp1c3RpZnktZW5kJyA6ICdjcWEtanVzdGlmeS1iZXR3ZWVuJ1wiIGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtZmxleC13cmFwIGNxYS1tYi0zXCI+XG4gICAgICA8Y3FhLXNlYXJjaC1iYXJcbiAgICAgICAgKm5nSWY9XCJzaG93U2VhcmNoQmFyXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgW3Nob3dDbGVhcl09XCJzaG93Q2xlYXJcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwidmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzZWFyY2gpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAoY2xlYXJlZCk9XCJjbGVhcmVkKClcIlxuICAgICAgPjwvY3FhLXNlYXJjaC1iYXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLWZsZXgtd3JhcFwiPlxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICAgICAgICB2YXJpYW50PVwiZ3JleS1zb2xpZFwiXG4gICAgICAgIGljb249XCJvcGVuX2luX25ld1wiXG4gICAgICAgIFt0ZXh0XT1cImlzRXhwb3J0aW5nID8gJ0V4cG9ydGluZy4uLicgOiAnRXhwb3J0J1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0V4cG9ydGluZ1wiXG4gICAgICAgIChjbGlja2VkKT1cImV4cG9ydENvZGVDbGljaygpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+e3sgaXNFeHBvcnRpbmcgPyAnRXhwb3J0aW5nLi4uJyA6ICdFeHBvcnQnIH19PC9zcGFuPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgXG4gICAgICA8IS0tIEV4cG9ydCBDb2RlIE1vZGFsIC0tPlxuICAgICAgPGNxYS1leHBvcnQtY29kZS1tb2RhbFxuICAgICAgICBbaXNPcGVuXT1cImlzRXhwb3J0TW9kYWxPcGVuXCJcbiAgICAgICAgW2Nhc2VzXT1cInNlbGVjdGVkQ2FzZXNGb3JFeHBvcnRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAoY2xvc2VNb2RhbCk9XCJjbG9zZUV4cG9ydE1vZGFsKClcIlxuICAgICAgICAoZXhwb3J0KT1cIm9uRXhwb3J0TW9kYWxFeHBvcnQoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtZXhwb3J0LWNvZGUtbW9kYWw+XG4gICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkcm9wZG93blRlbXBsYXRlIG9mIG90aGVyRHJvcERvd25CdXR0b25zOyB0cmFja0J5OiB0cmFja0J5RHJvcGRvd25UZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93blRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlbGVjdERyb3Bkb3duVGVtcGxhdGUgb2Ygb3RoZXJTZWxlY3REcm9wRG93bkJ1dHRvbnM7IHRyYWNrQnk6IHRyYWNrQnlTZWxlY3REcm9wZG93blRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdERyb3Bkb3duVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0ZpbHRlckJ1dHRvblwiXG4gICAgICAgICAgdmFyaWFudD1cImdyZXktc29saWRcIlxuICAgICAgICAgIGljb249XCJhZGRcIlxuICAgICAgICAgIFt0ZXh0XT1cIidGaWx0ZXInXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVGaWx0ZXIoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj5GaWx0ZXI8L3NwYW4+XG4gICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPGNxYS1jb2x1bW4tdmlzaWJpbGl0eVxuICAgICAgICAgICpuZ0lmPVwic2hvd1NldHRpbmdzQnV0dG9uXCJcbiAgICAgICAgICBbY29sdW1uc109XCJ2aXNpYmlsaXR5Q29sdW1uc1wiXG4gICAgICAgICAgW2NvbHVtblZpc2liaWxpdHldPVwiY29sdW1uVmlzaWJpbGl0eVwiXG4gICAgICAgICAgW3NlbGVjdGVkQXV0b1JlZnJlc2hJbnRlcnZhbF09XCJzZWxlY3RlZEF1dG9SZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgICAgIChjb2x1bW5WaXNpYmlsaXR5Q2hhbmdlKT1cIm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAoYXV0b1JlZnJlc2hDaGFuZ2UpPVwib25BdXRvUmVmcmVzaENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvY3FhLWNvbHVtbi12aXNpYmlsaXR5PlxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0F1dG9SZWZyZXNoQnV0dG9uXCJcbiAgICAgICAgICB2YXJpYW50PVwiZ3JleS1zb2xpZFwiXG4gICAgICAgICAgaWNvbj1cInJlZnJlc2hcIlxuICAgICAgICAgIChjbGlja2VkKT1cImhhbmRsZVJlZnJlc2hDbGljaygpXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInUmVmcmVzaCdcIlxuICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgPjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uVGVtcGxhdGUgb2Ygb3RoZXJCdXR0b25zOyB0cmFja0J5OiB0cmFja0J5VGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxjcWEtc2VsZWN0ZWQtZmlsdGVycyBcbiAgICAgIFtmaWx0ZXJBcHBsaWVkXT1cImZpbHRlckFwcGxpZWRcIlxuICAgICAgW2NoaXBzXT1cImNoaXBzXCJcbiAgICAgIChyZW1vdmVDaGlwKT1cIm9uUmVtb3ZlQ2hpcCgkZXZlbnQpXCJcbiAgICAgIChjbGVhckFsbCk9XCJvbkNsZWFyQWxsQ2hpcHMoKVwiXG4gICAgICAob25DbGVhckFsbCk9XCJvbkNsZWFyQWxsLmVtaXQoKVwiXG4gICAgPlxuICAgIDwvY3FhLXNlbGVjdGVkLWZpbHRlcnM+XG5cbiAgICA8Y3FhLWR5bmFtaWMtZmlsdGVyXG4gICAgICAqbmdJZj1cInNob3dGaWx0ZXJQYW5lbFwiXG4gICAgICBbY29uZmlnXT1cImZpbHRlckNvbmZpZ1wiXG4gICAgICBbc2hvd0ZpbHRlclBhbmVsXT1cInNob3dGaWx0ZXJQYW5lbFwiXG4gICAgICAoZmlsdGVyc0NoYW5nZWQpPVwib25GaWx0ZXJzQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIChmaWx0ZXJzQXBwbGllZCk9XCJvbkZpbHRlcnNBcHBsaWVkKCRldmVudClcIlxuICAgICAgKG9uQXBwbHlGaWx0ZXJDbGljayk9XCJvbkFwcGx5RmlsdGVyQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgIChvblJlc2V0RmlsdGVyQ2xpY2spPVwiaGFuZGxlUmVzZXRGaWx0ZXJDbGljaygpXCJcbiAgICA+XG4gICAgPC9jcWEtZHluYW1pYy1maWx0ZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXJvdW5kZWQtWzdweF0gY3FhLW92ZXJmbG93LWhpZGRlbiBjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1sIGNxYS1ib3JkZXItciBjcWEtYm9yZGVyLWdyZXktMjAwIGNxYS1yZWxhdGl2ZSBjcWEtb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGlzVGFibGVMb2FkaW5nIHx8IGlzVGFibGVEYXRhTG9hZGluZykgfHwgKCFpc0VtcHR5U3RhdGUgJiYgcGFnZWRSb3dzICYmIHBhZ2VkUm93cy5sZW5ndGggPiAwKTsgZWxzZSBzdG9yeUVtcHR5VHBsXCI+XG4gICAgICAgIDxhcHAtZHluYW1pYy10YWJsZVxuICAgICAgICAgIFtjb2x1bW5zXT1cImNvbXB1dGVkQ29sdW1uc1wiXG4gICAgICAgICAgW2RhdGFdPVwicGFnZWRSb3dzXCJcbiAgICAgICAgICBbaXNUYWJsZUxvYWRpbmddPVwiaXNUYWJsZUxvYWRpbmdcIlxuICAgICAgICAgIFtpc1RhYmxlRGF0YUxvYWRpbmddPVwiaXNUYWJsZURhdGFMb2FkaW5nXCJcbiAgICAgICAgICBbY2VsbEpzb25QYXRoR2V0dGVyXT1cImNlbGxKc29uUGF0aEdldHRlclwiXG4gICAgICAgICAgW29uSnNvblBhdGhDb3BpZWRIYW5kbGVyXT1cIm9uSnNvblBhdGhDb3BpZWRIYW5kbGVyXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlVHBsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcHktOFwiPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaWxsdXN0cmF0aW9ucy9lbXB0eS1zdGF0ZS5zdmdcIiBhbHQ9XCJObyBkYXRhXCIgY2xhc3M9XCJjcWEtdy0zMiBjcWEtaC0zMiBjcWEtbWItNFwiIC8+XG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LWxnIGNxYS1mb250LXNlbWlib2xkIGNxYS1tYi0yXCI+Tm8gdGVzdCBjYXNlczwvaDM+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtbmV1dHJhbC01MDAgY3FhLW1iLTRcIj5UcnkgYWRqdXN0aW5nIGZpbHRlcnMgb3IgY3JlYXRlIGEgbmV3IHRlc3QgY2FzZS48L3A+XG4gICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJmaWxsZWRcIiAoY2xpY2tlZCk9XCJ0b2dnbGVGaWx0ZXIoKVwiPlNob3cgRmlsdGVyczwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYXBwLWR5bmFtaWMtdGFibGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNzdG9yeUVtcHR5VHBsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXAtNiBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICA8Y3FhLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICAqbmdJZj1cImlzRW1wdHlTdGF0ZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiZW1wdHlTdGF0ZUNvbmZpZy50aXRsZVwiXG4gICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiZW1wdHlTdGF0ZUNvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBbaW1hZ2VVcmxdPVwiZW1wdHlTdGF0ZUNvbmZpZy5pbWFnZVVybFwiXG4gICAgICAgICAgICBbYWN0aW9uc109XCJlbXB0eVN0YXRlQ29uZmlnLmFjdGlvbnNcIlxuICAgICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uRW1wdHlBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvY3FhLWVtcHR5LXN0YXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxjcWEtcGFnaW5hdGlvblxuICAgICAgW3RvdGFsRWxlbWVudHNdPVwic2VydmVyU2lkZVBhZ2luYXRpb24gPyB0b3RhbEVsZW1lbnRzIDogZmlsdGVyZWRSb3dzLmxlbmd0aFwiXG4gICAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXG4gICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxuICAgICAgW3BhZ2VJdGVtQ291bnRdPVwicGFnZWRSb3dzLmxlbmd0aFwiXG4gICAgICAocGFnaW5hdGUpPVwib25QYWdpbmF0ZSgkZXZlbnQpXCJcbiAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICA8L2NxYS1wYWdpbmF0aW9uPlxuXG4gICAgPGRpdiAqbmdJZj1cImFueVJvd1NlbGVjdGVkXCIgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLWJvdHRvbS1bMTguNzVweF0gY3FhLWxlZnQtWzUwJV0gY3FhLXRyYW5zbGF0ZS14LVstNTAlXSBjcWEtdy1mdWxsIGxnOmNxYS1tYXgtdy1bNjglXSBjcWEtc206bWF4LXctWzc1JV0gY3FhLW1heC13LVs5MCVdIGNxYS16LVsxXVwiID5cbiAgICAgIDxjcWEtdGFibGUtYWN0aW9uLXRvb2xiYXJcbiAgICAgICAgW3NlbGVjdGVkSXRlbXNdPVwiY3VycmVudFNlbGVjdGVkSXRlbXNcIlxuICAgICAgICBbYWN0aW9uc109XCJhY3Rpb25zXCJcbiAgICAgICAgKGFjdGlvbkNsaWNrKT1cImFjdGlvbkNsaWNrKCRldmVudClcIlxuICAgICAgPjwvY3FhLXRhYmxlLWFjdGlvbi10b29sYmFyPlxuICAgIDwvZGl2PlxuICAgIFxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|
|
527
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvdGFibGUtdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvdGFibGUtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFLWix1QkFBdUIsR0FHeEIsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFTN0UsTUFBTSxPQUFPLHNCQUFzQjtJQWlJakMsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFoSTFDLG9CQUFvQjtRQUNYLHNCQUFpQixHQUFXLG1CQUFtQixDQUFDO1FBQ2hELGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFDMUIsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQ3RDLHFCQUFxQjtRQUNYLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM1QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUErRSxDQUFDO1FBQzFILGlCQUFpQjtRQUNQLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDN0MsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUM5QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN0QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUUvQyxnQkFBZ0I7UUFDUCxpQkFBWSxHQUF3QixFQUFFLENB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QkFBakIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljRmlsdGVySXRlbSB9IGZyb20gJy4uL2ZpbHRlcnMvZHluYW1pYy1maWx0ZXIvZHluYW1pYy1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNUYWJsZUNvbHVtbiB9IGZyb20gJy4uL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyB9IGZyb20gJy4uL2NvbHVtbi12aXNpYmlsaXR5L2NvbHVtbi12aXNpYmlsaXR5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUFjdGlvbiB9IGZyb20gJy4uL3RhYmxlLWFjdGlvbi10b29sYmFyL3RhYmxlLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29uZmlnIH0gZnJvbSAnLi4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFTVBUWV9TVEFURV9JTUFHRVMgfSBmcm9tICcuLi9hc3NldHMvaW1hZ2VzL2ltYWdlLWFzc2V0cy5jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtdGFibGUtdGVtcGxhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLy8gU2VhcmNoIGJhciBpbnB1dHNcbiAgQElucHV0KCkgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWFyY2ggY29tcG9uZW50cyc7XG4gIEBJbnB1dCgpIHNlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgc2hvd0NsZWFyOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1NlYXJjaEJhcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNFeHBvcnRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gU2VhcmNoIGJhciBvdXRwdXRzXG4gIEBPdXRwdXQoKSBvblNlYXJjaENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgb25FeHBvcnRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0eXBlOiAnbG9jYWwnIHwgJ2VtYWlsJzsgZW1haWxzPzogc3RyaW5nW107IHNlbGVjdGVkSXRlbXM6IGFueVtdIH0gfCB2b2lkPigpO1xuICAvLyBGaWx0ZXIgb3V0cHV0c1xuICBAT3V0cHV0KCkgb25BcHBseUZpbHRlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblJlc2V0RmlsdGVyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkNsZWFyQWxsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVtb3ZlQ2hpcCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8vIEZpbHRlciBpbnB1dHNcbiAgQElucHV0KCkgZmlsdGVyQ29uZmlnOiBEeW5hbWljRmlsdGVySXRlbVtdID0gW107XG4gIEBJbnB1dCgpIHNob3dGaWx0ZXJQYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93RmlsdGVyQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBPdGhlciBidXR0b25zIGlucHV0IChhcnJheSBvZiBidXR0b24gdGVtcGxhdGVzL2NvbXBvbmVudHMpXG4gIEBJbnB1dCgpIG90aGVyQnV0dG9uczogVGVtcGxhdGVSZWY8YW55PltdID0gW107XG4gIFxuICAvLyBPdGhlciBkcm9wZG93biBidXR0b25zIGlucHV0IChhcnJheSBvZiBkcm9wZG93biBidXR0b24gdGVtcGxhdGVzL2NvbXBvbmVudHMpXG4gIEBJbnB1dCgpIG90aGVyRHJvcERvd25CdXR0b25zOiBUZW1wbGF0ZVJlZjxhbnk+W10gPSBbXTtcbiAgXG4gIC8vIE90aGVyIHNlbGVjdCBkcm9wZG93biBidXR0b25zIGlucHV0IChhcnJheSBvZiBzZWxlY3QgZHJvcGRvd24gYnV0dG9uIHRlbXBsYXRlcy9jb21wb25lbnRzKVxuICBASW5wdXQoKSBvdGhlclNlbGVjdERyb3BEb3duQnV0dG9uczogVGVtcGxhdGVSZWY8YW55PltdID0gW107XG4gIFxuICAvLyBMZWdhY3kgc2luZ2xlIGJ1dHRvbiBpbnB1dHMgKGRlcHJlY2F0ZWQsIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gIC8qKiBAZGVwcmVjYXRlZCBVc2Ugb3RoZXJCdXR0b25zIGFycmF5IGluc3RlYWQgKi9cbiAgQElucHV0KCkgb3RoZXJCdXR0b25MYWJlbDogc3RyaW5nID0gJ090aGVyIEJ1dHRvbic7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2Ugb3RoZXJCdXR0b25zIGFycmF5IGluc3RlYWQgKi9cbiAgQElucHV0KCkgb3RoZXJCdXR0b25WYXJpYW50OiAnZmlsbGVkJyB8ICdvdXRsaW5lZCcgfCAndGV4dCcgfCAnZWxldmF0ZWQnIHwgJ3RvbmFsJyB8ICdncmV5LXNvbGlkJyA9ICdmaWxsZWQnO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIG90aGVyQnV0dG9ucyBhcnJheSBpbnN0ZWFkICovXG4gIEBJbnB1dCgpIHNob3dPdGhlckJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIFxuICAvLyBBY3Rpb24gbWVudSBidXR0b24gKHRocmVlLWRvdCBtZW51IGluIHRhYmxlIHJvd3MpXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFNldHRpbmdzIGFuZCByZWZyZXNoIGJ1dHRvbnNcbiAgQElucHV0KCkgc2hvd1NldHRpbmdzQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0F1dG9SZWZyZXNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBEYXRhIGlucHV0XG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XG5cbiAgLy8gRW1wdHkgc3RhdGUgaW5wdXRzXG4gIEBJbnB1dCgpIGlzRW1wdHlTdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBlbXB0eVN0YXRlQ29uZmlnOiBFbXB0eVN0YXRlQ29uZmlnID0ge1xuICAgIHRpdGxlOiAnTm8gRGF0YSBBdmFpbGFibGUgWWV0JyxcbiAgICBkZXNjcmlwdGlvbjogJ1J1biBvciB1cGxvYWQgeW91ciBmaXJzdCB0ZXN0IHRvIHNlZSB5b3VyIGFuYWx5dGljcyBhbmQgdHJlbmRzIGhlcmUuIFdhdGNoIHlvdXIgcXVhbGl0eSBtZXRyaWNzIGNvbWUgdG8gbGlmZSB3aXRoIHJlYWwtdGltZSBpbnNpZ2h0cy4nLFxuICAgIGltYWdlVXJsOiBFTVBUWV9TVEFURV9JTUFHRVMuREFTSEJPQVJELFxuICAgIGFjdGlvbnM6IFt7IGxhYmVsOiAnUnVuIFRlc3QgU3VpdGUnLCB2YXJpYW50OiAnZmlsbGVkJyB9XSxcbiAgfTtcblxuICAvLyBBY3Rpb24gYmFyIGlucHV0c1xuICBASW5wdXQoKSBhY3Rpb25zOiBUYWJsZUFjdGlvbltdID0gW1xuICAgIHsgXG4gICAgICBpZDogJ2RlbGV0ZScsIFxuICAgICAgbGFiZWw6ICdEZWxldGUnLCBcbiAgICAgIGljb246ICdkZWxldGUnLCBcbiAgICAgIHRvb2x0aXA6ICdEZWxldGUgc2VsZWN0ZWQnLFxuICAgICAgb25DbGljazogKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZSBhY3Rpb24gY2xpY2tlZDonLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgXG4gICAgICBpZDogJ2VkaXQnLCBcbiAgICAgIGxhYmVsOiAnRWRpdCcsIFxuICAgICAgaWNvbjogJ2VkaXQnLCBcbiAgICAgIHRvb2x0aXA6ICdFZGl0IHNlbGVjdGVkJyxcbiAgICAgIG9uQ2xpY2s6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdFZGl0IGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgeyBcbiAgICAgIGlkOiAnYWRkLXRhZycsIFxuICAgICAgbGFiZWw6ICdBZGQgVGFnJywgXG4gICAgICBpY29uOiAnbG9jYWxfb2ZmZXInLCBcbiAgICAgIHRvb2x0aXA6ICdBZGQgdGFncycsXG4gICAgICBvbkNsaWNrOiAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnQWRkIHRhZyBhY3Rpb24gY2xpY2tlZDonLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgXG4gICAgICBpZDogJ3JlbW92ZS10YWcnLCBcbiAgICAgIGxhYmVsOiAnUmVtb3ZlIFRhZycsIFxuICAgICAgaWNvbjogJ2xhYmVsX29mZicsIFxuICAgICAgdG9vbHRpcDogJ1JlbW92ZSB0YWdzJyxcbiAgICAgIG9uQ2xpY2s6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmUgdGFnIGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gIF07XG5cbiAgLy8gQ2hpcHMgaW5wdXRzXG4gIEBJbnB1dCgpIGNoaXBzOiBBcnJheTx7IGtleT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgZnVsbFRleHQ/OiBzdHJpbmc7IGhhc01vcmU/OiBib29sZWFuIH0+ID0gW107XG4gIEBJbnB1dCgpIGZpbHRlckFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBUYWJsZSBpbnB1dHNcbiAgQElucHV0KCkgY29sdW1uczogRHluYW1pY1RhYmxlQ29sdW1uW10gPSBbXTtcbiAgQElucHV0KCkgc2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBwYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgQElucHV0KCkgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDQwLCA2MCwgODBdO1xuICAvLyBTZXJ2ZXItc2lkZSBwYWdpbmF0aW9uIGNvbnRyb2xzXG4gIEBJbnB1dCgpIHNlcnZlclNpZGVQYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRvdGFsRWxlbWVudHM6IG51bWJlciA9IDA7XG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHBhZ2VJbmRleDogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH0+KCk7XG4gIC8vIExvYWRlciBjb250cm9scyAocGFzc2VkIGRvd24gdG8gZHluYW1pYyB0YWJsZSlcbiAgQElucHV0KCkgaXNUYWJsZUxvYWRpbmc/OiBib29sZWFuO1xuICBASW5wdXQoKSBpc1RhYmxlRGF0YUxvYWRpbmc/OiBib29sZWFuO1xuICAvLyBCYWNrd2FyZC1jb21wYXRpYmlsaXR5IGZsYWc7IGlmIHByb3ZpZGVkLCBkeW5hbWljIHRhYmxlIHdpbGwgdXNlIGl0IHdoZW4gc3BlY2lmaWMgZmxhZ3MgYXJlIHVuZGVmaW5lZFxuXG4gIC8vIE9wdGlvbmFsIGdldHRlciBmb3IgSlNPTiBwYXRoIHBlciBjZWxsLiBXaGVuIHByb3ZpZGVkLCBkb3VibGUtY2xpY2tpbmcgYSBjZWxsIGNvcGllcyB0aGUgcGF0aC5cbiAgQElucHV0KCkgY2VsbEpzb25QYXRoR2V0dGVyPzogKHJvd0luZGV4OiBudW1iZXIsIGNvbElkOiBzdHJpbmcsIHJvdzogYW55KSA9PiBzdHJpbmc7XG5cbiAgLy8gT3B0aW9uYWwgaGFuZGxlciBjYWxsZWQgd2hlbiBhIEpTT04gcGF0aCBpcyBjb3BpZWQgZnJvbSBhIHRhYmxlIGNlbGxcbiAgQElucHV0KCkgb25Kc29uUGF0aENvcGllZEhhbmRsZXI/OiAoZXZlbnQ6IHsgcGF0aDogc3RyaW5nOyBzb3VyY2U6IHN0cmluZyB9KSA9PiB2b2lkO1xuXG4gIC8vIEludGVybmFsIHN0YXRlIGZvciBjb2x1bW4gdmlzaWJpbGl0eVxuICBwcml2YXRlIF9jb2x1bW5WaXNpYmlsaXR5OiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnID0ge307XG4gIHByaXZhdGUgX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4gPSBbXTtcbiAgZmlsdGVyZWRSb3dzOiBhbnlbXSA9IFtdO1xuICBwYWdlZFJvd3M6IGFueVtdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuICBwcml2YXRlIHBlbmRpbmdGaWx0ZXJzOiBhbnk7XG4gIHByaXZhdGUgYXBwbGllZEZpbHRlcnM6IGFueTtcbiAgcHJpdmF0ZSBhdXRvUmVmcmVzaFRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xuICBAT3V0cHV0KCkgb25SZWxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkF1dG9SZWZyZXNoQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLy8gRGVyaXZlZCBjb2x1bW5zIHdpdGggdmlzaWJpbGl0eSBhcHBsaWVkLlxuICBjb21wdXRlZENvbHVtbnM6IER5bmFtaWNUYWJsZUNvbHVtbltdID0gW107XG4gIC8vIEF1dG8tZ2VuZXJhdGVkIHZpc2liaWxpdHkgY29sdW1ucyBmcm9tIGNvbHVtbnMgaW5wdXRcbiAgdmlzaWJpbGl0eUNvbHVtbnM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiA9IFtdO1xuXG4gIHByaXZhdGUgdXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpc2liaWxpdHkgPSB0aGlzLl9jb2x1bW5WaXNpYmlsaXR5IHx8IHt9O1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY29sdW1ucyB8fCBbXTtcbiAgICB0aGlzLmNvbXB1dGVkQ29sdW1ucyA9IHNvdXJjZS5tYXAoY29sID0+IHtcbiAgICAgIGlmIChbJ2NoZWNrYm94JywgJ2FjdGlvbnMnXS5pbmNsdWRlcyhjb2wuZmllbGRJZCkpIHtcbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNob3cgPSB2aXNpYmlsaXR5W2NvbC5maWVsZElkXTtcbiAgICAgIHJldHVybiB7IC4uLmNvbCwgaXNTaG93OiBzaG93ICE9PSBmYWxzZSB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmlsaXR5Q29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLl9jYWNoZWRWaXNpYmlsaXR5Q29sdW1ucyA9IHRoaXMubWFwVmlzaWJpbGl0eUNvbHVtbnMoKTtcbiAgICB0aGlzLnZpc2liaWxpdHlDb2x1bW5zID0gdGhpcy5fY2FjaGVkVmlzaWJpbGl0eUNvbHVtbnM7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBjb2x1bW4gdmlzaWJpbGl0eSBzdGF0ZVxuICBnZXQgY29sdW1uVmlzaWJpbGl0eSgpOiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uVmlzaWJpbGl0eTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUNvbHVtbnMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddIHx8IGNoYW5nZXNbJ2lzRW1wdHlTdGF0ZSddKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpO1xuICAgICAgdGhpcy51cGRhdGVDb21wdXRlZENvbHVtbnMoKTtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUNvbHVtbnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDb21wb25lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eVN0YXRlKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFtdO1xuICAgICAgdGhpcy5wYWdlZFJvd3MgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbiBzZXJ2ZXItc2lkZSBtb2RlLCBhc3N1bWUgaW5jb21pbmcgZGF0YSBpcyBhbHJlYWR5IGEgcGFnZSBzbGljZVxuICAgIGlmICh0aGlzLnNlcnZlclNpZGVQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgdGhpcy5wYWdlZFJvd3MgPSBbLi4udGhpcy5maWx0ZXJlZFJvd3NdO1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5WaXNpYmlsaXR5KCk7XG4gICAgdGhpcy51cGRhdGVDb21wdXRlZENvbHVtbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbHVtblZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgLy8gQ2FjaGUgdmlzaWJpbGl0eSBjb2x1bW5zIHRvIGF2b2lkIGNyZWF0aW5nIG5ldyBhcnJheXMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvblxuICAgIHRoaXMuX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zID0gdGhpcy5tYXBWaXNpYmlsaXR5Q29sdW1ucygpO1xuICAgIC8vIEluaXRpYWxpemUgdmlzaWJpbGl0eSBzdGF0ZSBmb3IgYWxsIHZpc2liaWxpdHkgY29sdW1ucyAoZGVmYXVsdCB0byB0cnVlKVxuICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zKSB7XG4gICAgICBpZiAodGhpcy5fY29sdW1uVmlzaWJpbGl0eVtjb2wuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVmlzaWJpbGl0eVtjb2wuaWRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgYW55Um93U2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMucGFnZWRSb3dzICYmIHRoaXMucGFnZWRSb3dzLnNvbWUociA9PiAhIShyIGFzIGFueSkuaXNTZWxlY3RlZCkpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRTZWxlY3RlZEl0ZW1zKCk6IGFueVtdIHtcbiAgICByZXR1cm4gKHRoaXMucGFnZWRSb3dzIHx8IFtdKS5maWx0ZXIociA9PiAhIShyIGFzIGFueSkuaXNTZWxlY3RlZCk7XG4gIH1cblxuICBhY3Rpb25DbGljayhkYXRhOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnYWN0aW9uIHRvb2xiYXInLCBkYXRhKTtcbiAgfVxuXG4gIHZpZXcoaWQ6IG51bWJlciB8IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdWaWV3JywgaWQpO1xuICB9XG5cbiAgZWRpdChyb3c6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdFZGl0Jywgcm93KTtcbiAgfVxuXG4gIGRlbGV0ZShyb3c6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdEZWxldGUnLCByb3cpO1xuICB9XG5cbiAgdG9nZ2xlRmlsdGVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0ZpbHRlclBhbmVsID0gIXRoaXMuc2hvd0ZpbHRlclBhbmVsO1xuICB9XG5cbiAgb25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlKGNmZzogQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuX2NvbHVtblZpc2liaWxpdHkgPSB7IC4uLmNmZyB9O1xuICAgIHRoaXMudXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkF1dG9SZWZyZXNoQ2hhbmdlKGludGVydmFsTXM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsID0gaW50ZXJ2YWxNcztcbiAgICB0aGlzLnNldHVwQXV0b1JlZnJlc2goaW50ZXJ2YWxNcyk7XG4gICAgdGhpcy50cmlnZ2VyUmVsb2FkKCk7XG4gIH1cblxuICB2YWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1ZhbHVlIGNoYW5nZWQnLCB2YWx1ZSk7XG4gICAgdGhpcy5vblNlYXJjaENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHNlYXJjaCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1NlYXJjaCcsIHZhbHVlKTtcbiAgfVxuXG4gIGNsZWFyZWQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0NsZWFyZWQnKTtcbiAgfVxuXG4gIG9uRW1wdHlBY3Rpb24oYWN0aW9uOiBhbnkpIHtcbiAgICBpZiAoYWN0aW9uPy5sYWJlbCA9PT0gJ1Nob3cgZmlsdGVycycpIHtcbiAgICAgIHRoaXMudG9nZ2xlRmlsdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgb25GaWx0ZXJzQ2hhbmdlZChjdXJyZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBEZWZlciBhcHBseWluZyBmaWx0ZXJzIGFuZCB1cGRhdGluZyBjaGlwcyB1bnRpbCBBcHBseSBGaWx0ZXIgaXMgY2xpY2tlZFxuICAgIHRoaXMucGVuZGluZ0ZpbHRlcnMgPSBjdXJyZW50O1xuICB9XG5cbiAgb25GaWx0ZXJzQXBwbGllZChhcHBsaWVkOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBlZmZlY3RpdmUgPSBhcHBsaWVkID8/IHRoaXMucGVuZGluZ0ZpbHRlcnMgPz8ge307XG4gICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IGVmZmVjdGl2ZTtcbiAgICB0aGlzLmZpbHRlcmVkUm93cyA9IHRoaXMuZGF0YS5maWx0ZXIociA9PiB0aGlzLnBhc3NGaWx0ZXJzKGVmZmVjdGl2ZSwgcikpO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIGNvbnN0IGNoaXBzOiBBcnJheTx7IGtleT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgZnVsbFRleHQ/OiBzdHJpbmc7IGhhc01vcmU/OiBib29sZWFuIH0+ID0gW107XG4gICAgaWYgKGVmZmVjdGl2ZSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZWZmZWN0aXZlKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGVmZmVjdGl2ZVtrZXldO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgdGV4dCA9ICcnO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB0ZXh0ID0gdmFsdWUubWFwKCh2OiBhbnkpID0+ICh2Py5uYW1lID8/IHY/LmxhYmVsID8/IHY/LnZhbHVlID8/IHYpKS5qb2luKCcsICcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZiAoJ3N0YXJ0JyBpbiB2YWx1ZSB8fCAnZW5kJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcyA9IHZhbHVlLnN0YXJ0ID8gbmV3IERhdGUodmFsdWUuc3RhcnQpLnRvTG9jYWxlRGF0ZVN0cmluZygpIDogJyc7XG4gICAgICAgICAgICBjb25zdCBlID0gdmFsdWUuZW5kID8gbmV3IERhdGUodmFsdWUuZW5kKS50b0xvY2FsZURhdGVTdHJpbmcoKSA6ICcnO1xuICAgICAgICAgICAgdGV4dCA9IFtzLCBlXS5maWx0ZXIoQm9vbGVhbikuam9pbignIC0gJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHQgPSAodmFsdWU/Lm5hbWUgPz8gdmFsdWU/LmxhYmVsID8/IHZhbHVlPy52YWx1ZSA/PyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjaGlwcy5wdXNoKHsga2V5LCB0ZXh0LCBmdWxsVGV4dDogdGV4dCwgaGFzTW9yZTogdGV4dC5sZW5ndGggPiAzMCB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGlwcyA9IGNoaXBzO1xuICAgIHRoaXMuZmlsdGVyQXBwbGllZCA9IHRoaXMuY2hpcHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGhhbmRsZVJlc2V0RmlsdGVyQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgY2hpcHMgYW5kIHJlc2V0IGZpbHRlcmVkIGRhdGEgd2hlbiByZXNldCBpcyBjbGlja2VkXG4gICAgdGhpcy5wZW5kaW5nRmlsdGVycyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNoaXBzID0gW107XG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5maWx0ZXJlZFJvd3MgPSBbLi4udGhpcy5kYXRhXTtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB0aGlzLm9uUmVzZXRGaWx0ZXJDbGljay5lbWl0KCk7XG4gIH1cblxuICBoYW5kbGVSZWZyZXNoQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5vbkF1dG9SZWZyZXNoQ2xpY2suZW1pdCgpO1xuICAgIHRoaXMudHJpZ2dlclJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmlnZ2VyUmVsb2FkKCk6IHZvaWQge1xuICAgIGNvbnN0IGVmZmVjdGl2ZSA9IHRoaXMuYXBwbGllZEZpbHRlcnMgPz8ge307XG4gICAgdGhpcy5maWx0ZXJlZFJvd3MgPSB0aGlzLmRhdGEuZmlsdGVyKHIgPT4gdGhpcy5wYXNzRmlsdGVycyhlZmZlY3RpdmUsIHIpKTtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB0aGlzLm9uUmVsb2FkLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBBdXRvUmVmcmVzaChpbnRlcnZhbE1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyQXV0b1JlZnJlc2goKTtcbiAgICBpZiAoaW50ZXJ2YWxNcyAmJiBpbnRlcnZhbE1zID4gMCkge1xuICAgICAgdGhpcy5hdXRvUmVmcmVzaFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICB0aGlzLnRyaWdnZXJSZWxvYWQoKTtcbiAgICAgIH0sIGludGVydmFsTXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJBdXRvUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvUmVmcmVzaFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuYXV0b1JlZnJlc2hUaW1lcik7XG4gICAgICB0aGlzLmF1dG9SZWZyZXNoVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckF1dG9SZWZyZXNoKCk7XG4gIH1cblxuICBvblBhZ2luYXRlKGU6IHsgcGFnZUluZGV4OiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfSk6IHZvaWQge1xuICAgIHRoaXMucGFnZUluZGV4ID0gZS5wYWdlSW5kZXg7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGUucGFnZVNpemU7XG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHsgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCwgcGFnZVNpemU6IHRoaXMucGFnZVNpemUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gIH1cblxuICBvblBhZ2VTaXplQ2hhbmdlKHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZVNpemUgPSBzaXplO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoeyBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LCBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgfVxuXG4gIG9uUmVtb3ZlQ2hpcChjaGlwOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNoaXBzID0gdGhpcy5jaGlwcy5maWx0ZXIoYyA9PiBjICE9PSBjaGlwKTtcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQgPSB0aGlzLmNoaXBzLmxlbmd0aCA+IDA7XG4gICAgLy8gRW1pdCBldmVudCB0byBwYXJlbnQgY29tcG9uZW50IChzYW1lIHBhdHRlcm4gYXMgZXhlY3V0aW9uIHRhYilcbiAgICB0aGlzLnJlbW92ZUNoaXAuZW1pdChjaGlwKTtcbiAgfVxuXG4gIG9uQ2xlYXJBbGxDaGlwcygpOiB2b2lkIHtcbiAgICB0aGlzLmNoaXBzID0gW107XG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5UGFnaW5hdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlUGFnaW5hdGlvbikge1xuICAgICAgLy8gU2VydmVyIG1vZGU6IHBhcmVudCBzdXBwbGllcyBhbHJlYWR5LXBhZ2luYXRlZCBkYXRhXG4gICAgICB0aGlzLnBhZ2VkUm93cyA9IFsuLi50aGlzLmZpbHRlcmVkUm93c107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wYWdlSW5kZXggKiB0aGlzLnBhZ2VTaXplO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcbiAgICB0aGlzLnBhZ2VkUm93cyA9IHRoaXMuZmlsdGVyZWRSb3dzLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBWaXNpYmlsaXR5Q29sdW1ucygpOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiAodGhpcy5jb2x1bW5zIHx8IFtdKVxuICAgICAgLmZpbHRlcihjID0+IGMuaXNEZWZhdWx0ID09PSBmYWxzZSlcbiAgICAgIC5tYXAoYyA9PiAoeyBpZDogYy5maWVsZElkLCBsYWJlbDogYy5maWVsZE5hbWUgfHwgYy5maWVsZElkIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplRGF0ZShkOiBhbnkpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAoIWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHRzID0gRGF0ZS5wYXJzZShkKTtcbiAgICByZXR1cm4gaXNOYU4odHMpID8gbnVsbCA6IHRzO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXNzRmlsdGVycyhmaWx0ZXJzOiBhbnksIHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFmaWx0ZXJzKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZmlsdGVycy5zdGF0dXMgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJzLnN0YXR1cykgJiYgZmlsdGVycy5zdGF0dXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIWZpbHRlcnMuc3RhdHVzLmluY2x1ZGVzKHJvdy5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJzLnByaW9yaXR5ICYmIEFycmF5LmlzQXJyYXkoZmlsdGVycy5wcmlvcml0eSkgJiYgZmlsdGVycy5wcmlvcml0eS5sZW5ndGgpIHtcbiAgICAgIGlmICghZmlsdGVycy5wcmlvcml0eS5pbmNsdWRlcyhyb3cucHJpb3JpdHlOYW1lKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycy50ZXN0VHlwZSAmJiBBcnJheS5pc0FycmF5KGZpbHRlcnMudGVzdFR5cGUpICYmIGZpbHRlcnMudGVzdFR5cGUubGVuZ3RoKSB7XG4gICAgICBpZiAoIWZpbHRlcnMudGVzdFR5cGUuaW5jbHVkZXMocm93LnRlc3RUeXBlKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycy5jcmVhdGVkX2RhdGUgJiYgKGZpbHRlcnMuY3JlYXRlZF9kYXRlLnN0YXJ0IHx8IGZpbHRlcnMuY3JlYXRlZF9kYXRlLmVuZCkpIHtcbiAgICAgIGNvbnN0IHN0YXJ0VHMgPSB0aGlzLm5vcm1hbGl6ZURhdGUoZmlsdGVycy5jcmVhdGVkX2RhdGUuc3RhcnQpO1xuICAgICAgY29uc3QgZW5kVHMgPSB0aGlzLm5vcm1hbGl6ZURhdGUoZmlsdGVycy5jcmVhdGVkX2RhdGUuZW5kKTtcbiAgICAgIGNvbnN0IHJvd1RzID0gdGhpcy5ub3JtYWxpemVEYXRlKHJvdy5jcmVhdGVkQXQpO1xuICAgICAgaWYgKHJvd1RzICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHN0YXJ0VHMgIT0gbnVsbCAmJiByb3dUcyA8IHN0YXJ0VHMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGVuZFRzICE9IG51bGwgJiYgcm93VHMgPiBlbmRUcykgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyYWNrQnlUZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5RHJvcGRvd25UZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5U2VsZWN0RHJvcGRvd25UZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvLyBFeHBvcnQgbW9kYWwgc3RhdGVcbiAgaXNFeHBvcnRNb2RhbE9wZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBleHBvcnRDb2RlQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gR2V0IHNlbGVjdGVkIGl0ZW1zXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbXM7XG4gICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlbiBubyBpdGVtcyBhcmUgc2VsZWN0ZWRcbiAgICAgIHRoaXMub25FeHBvcnRDbGljay5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNFeHBvcnRNb2RhbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VFeHBvcnRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwb3J0TW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBvbkV4cG9ydE1vZGFsRXhwb3J0KHJlc3VsdDogeyB0eXBlOiAnbG9jYWwnIHwgJ2VtYWlsJzsgZW1haWxzPzogc3RyaW5nW10gfSk6IHZvaWQge1xuICAgIHRoaXMuaXNFeHBvcnRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudCB3aXRoIGV4cG9ydCByZXN1bHRcbiAgICB0aGlzLm9uRXhwb3J0Q2xpY2suZW1pdCh7IFxuICAgICAgdHlwZTogcmVzdWx0LnR5cGUsIFxuICAgICAgZW1haWxzOiByZXN1bHQuZW1haWxzLCBcbiAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbXMgXG4gICAgfSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDYXNlc0ZvckV4cG9ydCgpOiBBcnJheTx7IGlkPzogbnVtYmVyOyBuYW1lPzogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0ZWRJdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICBuYW1lOiBpdGVtLm5hbWUgfHwgaXRlbS50aXRsZSB8fCAnVW5uYW1lZCdcbiAgICB9KSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtdWktcm9vdFwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLXJlbGF0aXZlXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwiIXNob3dTZWFyY2hCYXIgPyAnY3FhLWp1c3RpZnktZW5kJyA6ICdjcWEtanVzdGlmeS1iZXR3ZWVuJ1wiIGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtZmxleC13cmFwIGNxYS1tYi0zXCI+XG4gICAgICA8Y3FhLXNlYXJjaC1iYXJcbiAgICAgICAgKm5nSWY9XCJzaG93U2VhcmNoQmFyXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgW3Nob3dDbGVhcl09XCJzaG93Q2xlYXJcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwidmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzZWFyY2gpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAoY2xlYXJlZCk9XCJjbGVhcmVkKClcIlxuICAgICAgPjwvY3FhLXNlYXJjaC1iYXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLWZsZXgtd3JhcFwiPlxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICAgICAgICB2YXJpYW50PVwiZ3JleS1zb2xpZFwiXG4gICAgICAgIGljb249XCJvcGVuX2luX25ld1wiXG4gICAgICAgIFt0ZXh0XT1cImlzRXhwb3J0aW5nID8gJ0V4cG9ydGluZy4uLicgOiAnRXhwb3J0J1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0V4cG9ydGluZ1wiXG4gICAgICAgIChjbGlja2VkKT1cImV4cG9ydENvZGVDbGljaygpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+e3sgaXNFeHBvcnRpbmcgPyAnRXhwb3J0aW5nLi4uJyA6ICdFeHBvcnQnIH19PC9zcGFuPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgXG4gICAgICA8IS0tIEV4cG9ydCBDb2RlIE1vZGFsIC0tPlxuICAgICAgPGNxYS1leHBvcnQtY29kZS1tb2RhbFxuICAgICAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICAgICAgICBbaXNPcGVuXT1cImlzRXhwb3J0TW9kYWxPcGVuXCJcbiAgICAgICAgW2Nhc2VzXT1cInNlbGVjdGVkQ2FzZXNGb3JFeHBvcnRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAoY2xvc2VNb2RhbCk9XCJjbG9zZUV4cG9ydE1vZGFsKClcIlxuICAgICAgICAoZXhwb3J0KT1cIm9uRXhwb3J0TW9kYWxFeHBvcnQoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtZXhwb3J0LWNvZGUtbW9kYWw+XG4gICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkcm9wZG93blRlbXBsYXRlIG9mIG90aGVyRHJvcERvd25CdXR0b25zOyB0cmFja0J5OiB0cmFja0J5RHJvcGRvd25UZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93blRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlbGVjdERyb3Bkb3duVGVtcGxhdGUgb2Ygb3RoZXJTZWxlY3REcm9wRG93bkJ1dHRvbnM7IHRyYWNrQnk6IHRyYWNrQnlTZWxlY3REcm9wZG93blRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdERyb3Bkb3duVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0ZpbHRlckJ1dHRvblwiXG4gICAgICAgICAgdmFyaWFudD1cImdyZXktc29saWRcIlxuICAgICAgICAgIGljb249XCJhZGRcIlxuICAgICAgICAgIFt0ZXh0XT1cIidGaWx0ZXInXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVGaWx0ZXIoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj5GaWx0ZXI8L3NwYW4+XG4gICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPGNxYS1jb2x1bW4tdmlzaWJpbGl0eVxuICAgICAgICAgICpuZ0lmPVwic2hvd1NldHRpbmdzQnV0dG9uXCJcbiAgICAgICAgICBbY29sdW1uc109XCJ2aXNpYmlsaXR5Q29sdW1uc1wiXG4gICAgICAgICAgW2NvbHVtblZpc2liaWxpdHldPVwiY29sdW1uVmlzaWJpbGl0eVwiXG4gICAgICAgICAgW3NlbGVjdGVkQXV0b1JlZnJlc2hJbnRlcnZhbF09XCJzZWxlY3RlZEF1dG9SZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgICAgIChjb2x1bW5WaXNpYmlsaXR5Q2hhbmdlKT1cIm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAoYXV0b1JlZnJlc2hDaGFuZ2UpPVwib25BdXRvUmVmcmVzaENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvY3FhLWNvbHVtbi12aXNpYmlsaXR5PlxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0F1dG9SZWZyZXNoQnV0dG9uXCJcbiAgICAgICAgICB2YXJpYW50PVwiZ3JleS1zb2xpZFwiXG4gICAgICAgICAgaWNvbj1cInJlZnJlc2hcIlxuICAgICAgICAgIChjbGlja2VkKT1cImhhbmRsZVJlZnJlc2hDbGljaygpXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInUmVmcmVzaCdcIlxuICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgPjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uVGVtcGxhdGUgb2Ygb3RoZXJCdXR0b25zOyB0cmFja0J5OiB0cmFja0J5VGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxjcWEtc2VsZWN0ZWQtZmlsdGVycyBcbiAgICAgIFtmaWx0ZXJBcHBsaWVkXT1cImZpbHRlckFwcGxpZWRcIlxuICAgICAgW2NoaXBzXT1cImNoaXBzXCJcbiAgICAgIChyZW1vdmVDaGlwKT1cIm9uUmVtb3ZlQ2hpcCgkZXZlbnQpXCJcbiAgICAgIChjbGVhckFsbCk9XCJvbkNsZWFyQWxsQ2hpcHMoKVwiXG4gICAgICAob25DbGVhckFsbCk9XCJvbkNsZWFyQWxsLmVtaXQoKVwiXG4gICAgPlxuICAgIDwvY3FhLXNlbGVjdGVkLWZpbHRlcnM+XG5cbiAgICA8Y3FhLWR5bmFtaWMtZmlsdGVyXG4gICAgICAqbmdJZj1cInNob3dGaWx0ZXJQYW5lbFwiXG4gICAgICBbY29uZmlnXT1cImZpbHRlckNvbmZpZ1wiXG4gICAgICBbc2hvd0ZpbHRlclBhbmVsXT1cInNob3dGaWx0ZXJQYW5lbFwiXG4gICAgICAoZmlsdGVyc0NoYW5nZWQpPVwib25GaWx0ZXJzQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIChmaWx0ZXJzQXBwbGllZCk9XCJvbkZpbHRlcnNBcHBsaWVkKCRldmVudClcIlxuICAgICAgKG9uQXBwbHlGaWx0ZXJDbGljayk9XCJvbkFwcGx5RmlsdGVyQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgIChvblJlc2V0RmlsdGVyQ2xpY2spPVwiaGFuZGxlUmVzZXRGaWx0ZXJDbGljaygpXCJcbiAgICA+XG4gICAgPC9jcWEtZHluYW1pYy1maWx0ZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXJvdW5kZWQtWzdweF0gY3FhLW92ZXJmbG93LWhpZGRlbiBjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1sIGNxYS1ib3JkZXItciBjcWEtYm9yZGVyLWdyZXktMjAwIGNxYS1yZWxhdGl2ZSBjcWEtb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGlzVGFibGVMb2FkaW5nIHx8IGlzVGFibGVEYXRhTG9hZGluZykgfHwgKCFpc0VtcHR5U3RhdGUgJiYgcGFnZWRSb3dzICYmIHBhZ2VkUm93cy5sZW5ndGggPiAwKTsgZWxzZSBzdG9yeUVtcHR5VHBsXCI+XG4gICAgICAgIDxhcHAtZHluYW1pYy10YWJsZVxuICAgICAgICAgIFtjb2x1bW5zXT1cImNvbXB1dGVkQ29sdW1uc1wiXG4gICAgICAgICAgW2RhdGFdPVwicGFnZWRSb3dzXCJcbiAgICAgICAgICBbaXNUYWJsZUxvYWRpbmddPVwiaXNUYWJsZUxvYWRpbmdcIlxuICAgICAgICAgIFtpc1RhYmxlRGF0YUxvYWRpbmddPVwiaXNUYWJsZURhdGFMb2FkaW5nXCJcbiAgICAgICAgICBbY2VsbEpzb25QYXRoR2V0dGVyXT1cImNlbGxKc29uUGF0aEdldHRlclwiXG4gICAgICAgICAgW29uSnNvblBhdGhDb3BpZWRIYW5kbGVyXT1cIm9uSnNvblBhdGhDb3BpZWRIYW5kbGVyXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlVHBsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcHktOFwiPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaWxsdXN0cmF0aW9ucy9lbXB0eS1zdGF0ZS5zdmdcIiBhbHQ9XCJObyBkYXRhXCIgY2xhc3M9XCJjcWEtdy0zMiBjcWEtaC0zMiBjcWEtbWItNFwiIC8+XG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LWxnIGNxYS1mb250LXNlbWlib2xkIGNxYS1tYi0yXCI+Tm8gdGVzdCBjYXNlczwvaDM+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtbmV1dHJhbC01MDAgY3FhLW1iLTRcIj5UcnkgYWRqdXN0aW5nIGZpbHRlcnMgb3IgY3JlYXRlIGEgbmV3IHRlc3QgY2FzZS48L3A+XG4gICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJmaWxsZWRcIiAoY2xpY2tlZCk9XCJ0b2dnbGVGaWx0ZXIoKVwiPlNob3cgRmlsdGVyczwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYXBwLWR5bmFtaWMtdGFibGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNzdG9yeUVtcHR5VHBsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXAtNiBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICA8Y3FhLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICAqbmdJZj1cImlzRW1wdHlTdGF0ZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiZW1wdHlTdGF0ZUNvbmZpZy50aXRsZVwiXG4gICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiZW1wdHlTdGF0ZUNvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBbaW1hZ2VVcmxdPVwiZW1wdHlTdGF0ZUNvbmZpZy5pbWFnZVVybFwiXG4gICAgICAgICAgICBbYWN0aW9uc109XCJlbXB0eVN0YXRlQ29uZmlnLmFjdGlvbnNcIlxuICAgICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uRW1wdHlBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvY3FhLWVtcHR5LXN0YXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxjcWEtcGFnaW5hdGlvblxuICAgICAgW3RvdGFsRWxlbWVudHNdPVwic2VydmVyU2lkZVBhZ2luYXRpb24gPyB0b3RhbEVsZW1lbnRzIDogZmlsdGVyZWRSb3dzLmxlbmd0aFwiXG4gICAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXG4gICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxuICAgICAgW3BhZ2VJdGVtQ291bnRdPVwicGFnZWRSb3dzLmxlbmd0aFwiXG4gICAgICAocGFnaW5hdGUpPVwib25QYWdpbmF0ZSgkZXZlbnQpXCJcbiAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICA8L2NxYS1wYWdpbmF0aW9uPlxuXG4gICAgPGRpdiAqbmdJZj1cImFueVJvd1NlbGVjdGVkXCIgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLWJvdHRvbS1bMTguNzVweF0gY3FhLWxlZnQtWzUwJV0gY3FhLXRyYW5zbGF0ZS14LVstNTAlXSBjcWEtdy1mdWxsIGxnOmNxYS1tYXgtdy1bNjglXSBjcWEtc206bWF4LXctWzc1JV0gY3FhLW1heC13LVs5MCVdIGNxYS16LVsxXVwiID5cbiAgICAgIDxjcWEtdGFibGUtYWN0aW9uLXRvb2xiYXJcbiAgICAgICAgW3NlbGVjdGVkSXRlbXNdPVwiY3VycmVudFNlbGVjdGVkSXRlbXNcIlxuICAgICAgICBbYWN0aW9uc109XCJhY3Rpb25zXCJcbiAgICAgICAgKGFjdGlvbkNsaWNrKT1cImFjdGlvbkNsaWNrKCRldmVudClcIlxuICAgICAgPjwvY3FhLXRhYmxlLWFjdGlvbi10b29sYmFyPlxuICAgIDwvZGl2PlxuICAgIFxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|
|
@@ -106,12 +106,20 @@ export class DeleteStepsComponent {
|
|
|
106
106
|
hasStepImage(step) {
|
|
107
107
|
return this.getStepImage(step) !== null;
|
|
108
108
|
}
|
|
109
|
+
/** Get step number from step data, falling back to index + 1 */
|
|
110
|
+
getStepNumber(step, index) {
|
|
111
|
+
const stepNum = step?.stepNumber;
|
|
112
|
+
if (stepNum != null && stepNum !== '') {
|
|
113
|
+
return stepNum;
|
|
114
|
+
}
|
|
115
|
+
return index + 1;
|
|
116
|
+
}
|
|
109
117
|
}
|
|
110
118
|
DeleteStepsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DeleteStepsComponent, deps: [{ token: MAT_DIALOG_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
111
|
-
DeleteStepsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DeleteStepsComponent, selector: "cqa-delete-steps", outputs: { confirmDelete: "confirmDelete", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ i
|
|
119
|
+
DeleteStepsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DeleteStepsComponent, selector: "cqa-delete-steps", outputs: { confirmDelete: "confirmDelete", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ getStepNumber(step, i) }}\n </span>\n <!-- Step image if available -->\n <img\n *ngIf=\"hasStepImage(step)\"\n [src]=\"getStepImage(step)\"\n [alt]=\"'Step ' + getStepNumber(step, i)\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-[4px] cqa-object-cover cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[rgba(220,38,38,0.2)]\">\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n {{ getStepDisplayLabel(step, i) }}\n </span>\n </div>\n </div>\n </div> \n\n <!-- Actions: Cancel | Delete (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Delete\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#EE3F3F] cqa-text-white'\"\n [disabled]=\"stepsCount === 0\"\n (clicked)=\"onDelete()\">\n </cqa-button>\n </div>\n</div>\n", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
112
120
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DeleteStepsComponent, decorators: [{
|
|
113
121
|
type: Component,
|
|
114
|
-
args: [{ selector: 'cqa-delete-steps', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ i
|
|
122
|
+
args: [{ selector: 'cqa-delete-steps', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ getStepNumber(step, i) }}\n </span>\n <!-- Step image if available -->\n <img\n *ngIf=\"hasStepImage(step)\"\n [src]=\"getStepImage(step)\"\n [alt]=\"'Step ' + getStepNumber(step, i)\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-[4px] cqa-object-cover cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[rgba(220,38,38,0.2)]\">\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n {{ getStepDisplayLabel(step, i) }}\n </span>\n </div>\n </div>\n </div> \n\n <!-- Actions: Cancel | Delete (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Delete\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#EE3F3F] cqa-text-white'\"\n [disabled]=\"stepsCount === 0\"\n (clicked)=\"onDelete()\">\n </cqa-button>\n </div>\n</div>\n" }]
|
|
115
123
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
116
124
|
type: Optional
|
|
117
125
|
}, {
|
|
@@ -122,4 +130,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
122
130
|
}], cancelled: [{
|
|
123
131
|
type: Output
|
|
124
132
|
}] } });
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZGVsZXRlLXN0ZXBzL2RlbGV0ZS1zdGVwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2RlbGV0ZS1zdGVwcy9kZWxldGUtc3RlcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFJTCxrQkFBa0IsR0FDbkIsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUVsQzs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQixZQUF3RCxJQUl2RDtRQUp1RCxTQUFJLEdBQUosSUFBSSxDQUkzRDtRQWJELHNEQUFzRDtRQUN0RCxrQkFBYSxHQUF5QixFQUFFLENBQUM7UUFFekMsNkVBQTZFO1FBQzdFLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRWxCLCtEQUErRDtRQUMvRCxlQUFVLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7UUFlM0Msa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3pDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBVDdDLDBDQUEwQztRQUMxQyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElB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QUFZLENBQUMsSUFBd0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQztJQUMxQyxDQUFDOztpSEFsSFUsb0JBQW9CLGtCQVVDLGVBQWU7cUdBVnBDLG9CQUFvQixzS0NuQmpDLHU1SEF5RUE7MkZEdERhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0IsUUFFdEIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzswQkFZakIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlOzRDQWFyQyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlU3RlcENvbmZpZyxcbiAgTm9ybWFsU3RlcENvbmZpZyxcbiAgVGVzdENhc2VFdmVudFR5cGUsXG4gIGlzTm9ybWFsU3RlcENvbmZpZyxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcblxuLyoqXG4gKiBEZWxldGUgU3RlcHMgY29uZmlybWF0aW9uIG1vZGFsIGZvciBUZXN0IENhc2UgRGV0YWlscy5cbiAqIE1hdGNoZXMgdGhlIGRlc2lnbiBvZiBDcmVhdGUgU3RlcCBHcm91cDogc2hvd3Mgc2VsZWN0ZWQgc3RlcHMgd2l0aCBjb250ZXh0IChlLmcuIFwiSUYgbGFuZVwiKSxcbiAqIHdhcm5pbmcgdGV4dCwgYW5kIENhbmNlbCAvIERlbGV0ZSBhY3Rpb25zLiBTdGVwcyBhcmUgc2hvd24gd2l0aCByZWQvZGFuZ2VyIHN0eWxpbmcuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1kZWxldGUtc3RlcHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBEZWxldGVTdGVwc0NvbXBvbmVudCB7XG4gIC8qKiBTdGVwcyB0aGF0IHdpbGwgYmUgZGVsZXRlZCAoc2hvd24gaW4gdGhlIGxpc3QpLiAqL1xuICBzdGVwc1RvRGVsZXRlOiBUZXN0Q2FzZVN0ZXBDb25maWdbXSA9IFtdO1xuXG4gIC8qKiBDb250ZXh0IGxhYmVsIGZvciB0aGUgc3ViLWhlYWRpbmcsIGUuZy4gXCJJRiBsYW5lXCIsIFwiRUxTRVwiLCBcIkZvciBsb29wXCIuICovXG4gIGNvbnRleHRMYWJlbCA9ICcnO1xuXG4gIC8qKiBPcHRpb25hbCBzdGVwIGltYWdlcy9zY3JlZW5zaG90cyBtYXA6IHN0ZXBJZCAtPiBpbWFnZVVybCAqL1xuICBzdGVwSW1hZ2VzOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YT86IHtcbiAgICBzdGVwc1RvRGVsZXRlPzogVGVzdENhc2VTdGVwQ29uZmlnW107XG4gICAgY29udGV4dExhYmVsPzogc3RyaW5nO1xuICAgIHN0ZXBJbWFnZXM/OiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+O1xuICB9KSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBmcm9tIGRpYWxvZyBkYXRhIGlmIHByb3ZpZGVkXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMuc3RlcHNUb0RlbGV0ZSA9IGRhdGEuc3RlcHNUb0RlbGV0ZSB8fCBbXTtcbiAgICAgIHRoaXMuY29udGV4dExhYmVsID0gZGF0YS5jb250ZXh0TGFiZWwgfHwgJyc7XG4gICAgICB0aGlzLnN0ZXBJbWFnZXMgPSBkYXRhLnN0ZXBJbWFnZXMgfHwgbmV3IE1hcCgpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBjb25maXJtRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGdldCBzdGVwc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHNUb0RlbGV0ZT8ubGVuZ3RoID8/IDA7XG4gIH1cblxuICBnZXQgdGl0bGVUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgbiA9IHRoaXMuc3RlcHNDb3VudDtcbiAgICByZXR1cm4gbiA9PT0gMSA/ICdEZWxldGUgMSBzdGVwPycgOiBgRGVsZXRlICR7bn0gc3RlcHM/YDtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZFN0ZXBzU3VidGl0bGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbnRleHRMYWJlbD8udHJpbSgpIHx8ICdzZWxlY3RlZCc7XG4gICAgcmV0dXJuIGBTZWxlY3RlZCBzdGVwcyBmb3IgJHtjdHh9ICgke3RoaXMuc3RlcHNDb3VudH0pYDtcbiAgfVxuXG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciBhIHN0ZXAgaW4gdGhlIGxpc3QgKHNhbWUgcGF0dGVybiBhcyBjcmVhdGUtc3RlcC1ncm91cCkuICovXG4gIGdldFN0ZXBEaXNwbGF5TGFiZWwoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoaXNOb3JtYWxTdGVwQ29uZmlnKHN0ZXApKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXROb3JtYWxTdGVwTGFiZWwoc3RlcCk7XG4gICAgfVxuICAgIGlmICgnZ3JvdXBOYW1lJyBpbiBzdGVwICYmIHN0ZXAuZ3JvdXBOYW1lKSB7XG4gICAgICByZXR1cm4gc3RlcC5ncm91cE5hbWU7XG4gICAgfVxuICAgIGlmICgnY29uZGl0aW9uJyBpbiBzdGVwICYmIHN0ZXAuY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5jb25kaXRpb247XG4gICAgfVxuICAgIGlmICgnbG9vcFR5cGUnIGluIHN0ZXApIHtcbiAgICAgIGNvbnN0IGxvb3AgPSBzdGVwIGFzIHsgbG9vcFR5cGU6IHN0cmluZzsgdGVzdERhdGFQcm9maWxlPzogc3RyaW5nOyBjb25kaXRpb24/OiBzdHJpbmcgfTtcbiAgICAgIGlmIChsb29wLmxvb3BUeXBlID09PSAnZm9yJyAmJiBsb29wLnRlc3REYXRhUHJvZmlsZSkge1xuICAgICAgICByZXR1cm4gYEZvciBsb29wOiAke2xvb3AudGVzdERhdGFQcm9maWxlfWA7XG4gICAgICB9XG4gICAgICBpZiAobG9vcC5sb29wVHlwZSA9PT0gJ3doaWxlJyAmJiBsb29wLmNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gYFdoaWxlOiAke2xvb3AuY29uZGl0aW9ufWA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGVwLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGBTdGVwICR7aW5kZXggKyAxfWA7XG4gIH1cblxuICBwcml2YXRlIGdldE5vcm1hbFN0ZXBMYWJlbChzdGVwOiBOb3JtYWxTdGVwQ29uZmlnKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzdGVwLnBhcmFtZXRlcnMgPz8gW107XG4gICAgY29uc3QgZ2V0UGFyYW0gPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICAgcGFyYW1zLmZpbmQoKHApID0+IHAubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCB2YWwgPSAocDogeyB2YWx1ZT86IHN0cmluZzsgZGlzcGxheVZhbHVlPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpID0+XG4gICAgICBwPy5kaXNwbGF5VmFsdWUgPz8gcD8udmFsdWUgPz8gJyc7XG5cbiAgICBzd2l0Y2ggKHN0ZXAuZXZlbnRUeXBlIGFzIFRlc3RDYXNlRXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICduYXZpZ2F0ZSc6IHtcbiAgICAgICAgY29uc3QgdXJsID0gZ2V0UGFyYW0oJ3VybCcpO1xuICAgICAgICByZXR1cm4gdXJsID8gYE5hdmlnYXRlIHRvICR7dmFsKHVybCl9YCA6ICdOYXZpZ2F0ZSB0byc7XG4gICAgICB9XG4gICAgICBjYXNlICdhaS1hZ2VudCc6IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gZ2V0UGFyYW0oJ2luc3RydWN0aW9ucycpID8/IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpO1xuICAgICAgICByZXR1cm4gdmFsKGluc3RydWN0aW9ucykgfHwgJ0FJIEFnZW50IHN0ZXAnO1xuICAgICAgfVxuICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgIHJldHVybiB2YWwoZ2V0UGFyYW0oJ3RleHQnKSkgfHwgJ1R5cGUnO1xuICAgICAgY2FzZSAnY2xpY2snOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdzZWxlY3RvcicpKSA/IGBDbGljayAke3ZhbChnZXRQYXJhbSgnc2VsZWN0b3InKSl9YCA6ICdDbGljayc7XG4gICAgICBjYXNlICd2ZXJpZnknOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdkZXNjcmlwdGlvbicpKSB8fCAnVmVyaWZ5JztcbiAgICAgIGNhc2UgJ2N1c3RvbSc6IHtcbiAgICAgICAgY29uc3QgZGVzYyA9IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpID8/IGdldFBhcmFtKCdhY3Rpb24nKTtcbiAgICAgICAgcmV0dXJuIHZhbChkZXNjKSB8fCAnQ3VzdG9tIHN0ZXAnO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbChnZXRQYXJhbSgnZGVzY3JpcHRpb24nKSkgfHwgdmFsKHBhcmFtc1swXSkgfHwgJ1N0ZXAnO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIG9uRGVsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybURlbGV0ZS5lbWl0KCk7XG4gIH1cblxuICAvKiogR2V0IHN0ZXAgaW1hZ2UgVVJMIGlmIGF2YWlsYWJsZSAqL1xuICBnZXRTdGVwSW1hZ2Uoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFzdGVwPy5pZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc3RlcEltYWdlcy5nZXQoc3RlcC5pZCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiBzdGVwIGhhcyBhbiBpbWFnZSAqL1xuICBoYXNTdGVwSW1hZ2Uoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RlcEltYWdlKHN0ZXApICE9PSBudWxsO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiY3FhLWJnLXdoaXRlIGNxYS1yb3VuZGVkLVsxMnB4XSBjcWEtc2hhZG93LWxnIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFN0VCXSBjcWEtdy1mdWxsIGNxYS1tYXgtdy1bNTAwcHhdIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLXAtNiBjcWEtYm94LWJvcmRlciBjcWEtbWluLWgtMFwiPlxuICA8IS0tIEhlYWRlcjogdGl0bGUgKyBjbG9zZSAoWCkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RhcnQgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMSBjcWEtbWluLXctMFwiPlxuICAgICAgPGgyIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsyMnB4XSBjcWEtbGVhZGluZy1bMjhweF0gY3FhLXRyYWNraW5nLW5vcm1hbCBjcWEtdGV4dC1bIzEwMTgyOF0gY3FhLW0tMFwiPlxuICAgICAgICB7eyB0aXRsZVRleHQgfX1cbiAgICAgIDwvaDI+XG4gICAgICA8cCBjbGFzcz1cImNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzIxcHhdIGNxYS10cmFja2luZy1bLTAuMTVweF0gY3FhLXRleHQtWyM0QTU1NjVdIGNxYS1tLTBcIj5cbiAgICAgICAgVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSwgYnV0IHlvdSBjYW4gdXNlIHRoZSB1bmRvIGZ1bmN0aW9uIGluIHRoZSB0b29sYmFyLlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtbWluLWgtNyBjcWEtbWluLXctNyBjcWEtcm91bmRlZCBjcWEtdGV4dC1bIzZCNzI4MF0gaG92ZXI6Y3FhLWJnLVsjRjNGNEY2XSBjcWEtcC0wIGNxYS1mbGV4LXNocmluay0wXCJcbiAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgPHBhdGggZD1cIk0xOCA2TDYgMThNNiA2bDEyIDEyXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIFNlbGVjdGVkIHN0ZXBzIGZvciBbY29udGV4dF0gKE4pIOKAkyBzY3JvbGwgd2hlbiBtYW55IHN0ZXBzLCBzY3JvbGxiYXIgaGlkZGVuIChzYW1lIGFzIGNyZWF0ZS1zdGVwLWdyb3VwKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW1pbi1oLTBcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10cmFja2luZy1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdIGNxYS1hbGlnbi1taWRkbGVcIj5cbiAgICAgIHt7IHNlbGVjdGVkU3RlcHNTdWJ0aXRsZSB9fVxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiAqbmdJZj1cInN0ZXBzQ291bnQgPT09IDBcIiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXAtNCBjcWEtdGV4dC1jZW50ZXJcIj5cbiAgICAgIE5vIHN0ZXBzIHNlbGVjdGVkLiBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBzdGVwIHRvIGRlbGV0ZS5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwic3RlcHNDb3VudCA+IDBcIiBjbGFzcz1cImNxYS1zY3JvbGxiYXItaGlkZSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1tYXgtaC1bMjAwcHhdIGNxYS1taW4taC0wIGNxYS1vdmVyZmxvdy15LWF1dG8gY3FhLW92ZXJmbG93LXgtaGlkZGVuIGNxYS1yb3VuZGVkLVs4cHhdIGNxYS1wLVs2cHhdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVtyZ2JhKDAsMCwwLDAuMSldXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzVG9EZWxldGU7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC1bOHB4XSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtcHQtWzRweF0gY3FhLXBiLVs0cHhdIGNxYS1wbC1bOHB4XSBjcWEtcHItWzhweF0gY3FhLWJnLVtyZ2JhKDIzOCw2Myw2MywwLjEpXVwiPlxuICAgICAgICA8IS0tIE51bWJlcmVkIGJhZGdlIChyZWQpIC0tPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctNyBjcWEtaC03IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWJnLVsjQzYzNTM1XSBjcWEtdGV4dC13aGl0ZSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPCEtLSBTdGVwIGltYWdlIGlmIGF2YWlsYWJsZSAtLT5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiaGFzU3RlcEltYWdlKHN0ZXApXCJcbiAgICAgICAgICBbc3JjXT1cImdldFN0ZXBJbWFnZShzdGVwKVwiXG4gICAgICAgICAgW2FsdF09XCInU3RlcCAnICsgKGkgKyAxKVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtdy04IGNxYS1oLTggY3FhLXJvdW5kZWQtWzRweF0gY3FhLW9iamVjdC1jb3ZlciBjcWEtZmxleC1zaHJpbmstMCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bcmdiYSgyMjAsMzgsMzgsMC4yKV1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtdHJhY2tpbmctWzBweF0gY3FhLXRleHQtWyNEQzI2MjZdIGNxYS1mbGV4LTEgY3FhLW1pbi13LTAgY3FhLXRydW5jYXRlXCI+XG4gICAgICAgICAge3sgZ2V0U3RlcERpc3BsYXlMYWJlbChzdGVwLCBpKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+ICBcblxuICA8IS0tIEFjdGlvbnM6IENhbmNlbCB8IERlbGV0ZSAocmlnaHQtYWxpZ25lZCkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWVuZCBjcWEtdy1mdWxsIGNxYS1nYXAtM1wiPlxuICAgIDxjcWEtYnV0dG9uXG4gICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgYnRuU2l6ZT1cImxnXCJcbiAgICAgIHRleHQ9XCJDYW5jZWxcIlxuICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1iZy13aGl0ZSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bIzQxNDE0Nl0gY3FhLXRleHQtWyM0MTQxNDZdJ1wiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNhbmNlbCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICAgIDxjcWEtYnV0dG9uXG4gICAgICB2YXJpYW50PVwiZmlsbGVkXCJcbiAgICAgIGJ0blNpemU9XCJsZ1wiXG4gICAgICB0ZXh0PVwiRGVsZXRlXCJcbiAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXRleHQtWzE0cHhdIGNxYS1weS1bOXB4XSBjcWEtcm91bmRlZC1bOHB4XSBjcWEtYm9yZGVyLTAgY3FhLWJnLVsjRUUzRjNGXSBjcWEtdGV4dC13aGl0ZSdcIlxuICAgICAgW2Rpc2FibGVkXT1cInN0ZXBzQ291bnQgPT09IDBcIlxuICAgICAgKGNsaWNrZWQpPVwib25EZWxldGUoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZGVsZXRlLXN0ZXBzL2RlbGV0ZS1zdGVwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2RlbGV0ZS1zdGVwcy9kZWxldGUtc3RlcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFJTCxrQkFBa0IsR0FDbkIsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUVsQzs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQixZQUF3RCxJQUl2RDtRQUp1RCxTQUFJLEdBQUosSUFBSSxDQUkzRDtRQWJELHNEQUFzRDtRQUN0RCxrQkFBYSxHQUF5QixFQUFFLENBQUM7UUFFekMsNkVBQTZFO1FBQzdFLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRWxCLCtEQUErRDtRQUMvRCxlQUFVLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7UUFlM0Msa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3pDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBVDdDLDBDQUEwQztRQUMxQyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElB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QUFZLENBQUMsSUFBd0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQztJQUMxQyxDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLGFBQWEsQ0FBQyxJQUF3QixFQUFFLEtBQWE7UUFDbkQsTUFBTSxPQUFPLEdBQUksSUFBWSxFQUFFLFVBQVUsQ0FBQztRQUMxQyxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRTtZQUNyQyxPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUNELE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDOztpSEEzSFUsb0JBQW9CLGtCQVVDLGVBQWU7cUdBVnBDLG9CQUFvQixzS0NuQmpDLHU3SEF5RUE7MkZEdERhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0IsUUFFdEIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzswQkFZakIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlOzRDQWFyQyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlU3RlcENvbmZpZyxcbiAgTm9ybWFsU3RlcENvbmZpZyxcbiAgVGVzdENhc2VFdmVudFR5cGUsXG4gIGlzTm9ybWFsU3RlcENvbmZpZyxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcblxuLyoqXG4gKiBEZWxldGUgU3RlcHMgY29uZmlybWF0aW9uIG1vZGFsIGZvciBUZXN0IENhc2UgRGV0YWlscy5cbiAqIE1hdGNoZXMgdGhlIGRlc2lnbiBvZiBDcmVhdGUgU3RlcCBHcm91cDogc2hvd3Mgc2VsZWN0ZWQgc3RlcHMgd2l0aCBjb250ZXh0IChlLmcuIFwiSUYgbGFuZVwiKSxcbiAqIHdhcm5pbmcgdGV4dCwgYW5kIENhbmNlbCAvIERlbGV0ZSBhY3Rpb25zLiBTdGVwcyBhcmUgc2hvd24gd2l0aCByZWQvZGFuZ2VyIHN0eWxpbmcuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1kZWxldGUtc3RlcHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBEZWxldGVTdGVwc0NvbXBvbmVudCB7XG4gIC8qKiBTdGVwcyB0aGF0IHdpbGwgYmUgZGVsZXRlZCAoc2hvd24gaW4gdGhlIGxpc3QpLiAqL1xuICBzdGVwc1RvRGVsZXRlOiBUZXN0Q2FzZVN0ZXBDb25maWdbXSA9IFtdO1xuXG4gIC8qKiBDb250ZXh0IGxhYmVsIGZvciB0aGUgc3ViLWhlYWRpbmcsIGUuZy4gXCJJRiBsYW5lXCIsIFwiRUxTRVwiLCBcIkZvciBsb29wXCIuICovXG4gIGNvbnRleHRMYWJlbCA9ICcnO1xuXG4gIC8qKiBPcHRpb25hbCBzdGVwIGltYWdlcy9zY3JlZW5zaG90cyBtYXA6IHN0ZXBJZCAtPiBpbWFnZVVybCAqL1xuICBzdGVwSW1hZ2VzOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YT86IHtcbiAgICBzdGVwc1RvRGVsZXRlPzogVGVzdENhc2VTdGVwQ29uZmlnW107XG4gICAgY29udGV4dExhYmVsPzogc3RyaW5nO1xuICAgIHN0ZXBJbWFnZXM/OiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+O1xuICB9KSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBmcm9tIGRpYWxvZyBkYXRhIGlmIHByb3ZpZGVkXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMuc3RlcHNUb0RlbGV0ZSA9IGRhdGEuc3RlcHNUb0RlbGV0ZSB8fCBbXTtcbiAgICAgIHRoaXMuY29udGV4dExhYmVsID0gZGF0YS5jb250ZXh0TGFiZWwgfHwgJyc7XG4gICAgICB0aGlzLnN0ZXBJbWFnZXMgPSBkYXRhLnN0ZXBJbWFnZXMgfHwgbmV3IE1hcCgpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBjb25maXJtRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGdldCBzdGVwc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHNUb0RlbGV0ZT8ubGVuZ3RoID8/IDA7XG4gIH1cblxuICBnZXQgdGl0bGVUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgbiA9IHRoaXMuc3RlcHNDb3VudDtcbiAgICByZXR1cm4gbiA9PT0gMSA/ICdEZWxldGUgMSBzdGVwPycgOiBgRGVsZXRlICR7bn0gc3RlcHM/YDtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZFN0ZXBzU3VidGl0bGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbnRleHRMYWJlbD8udHJpbSgpIHx8ICdzZWxlY3RlZCc7XG4gICAgcmV0dXJuIGBTZWxlY3RlZCBzdGVwcyBmb3IgJHtjdHh9ICgke3RoaXMuc3RlcHNDb3VudH0pYDtcbiAgfVxuXG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciBhIHN0ZXAgaW4gdGhlIGxpc3QgKHNhbWUgcGF0dGVybiBhcyBjcmVhdGUtc3RlcC1ncm91cCkuICovXG4gIGdldFN0ZXBEaXNwbGF5TGFiZWwoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoaXNOb3JtYWxTdGVwQ29uZmlnKHN0ZXApKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXROb3JtYWxTdGVwTGFiZWwoc3RlcCk7XG4gICAgfVxuICAgIGlmICgnZ3JvdXBOYW1lJyBpbiBzdGVwICYmIHN0ZXAuZ3JvdXBOYW1lKSB7XG4gICAgICByZXR1cm4gc3RlcC5ncm91cE5hbWU7XG4gICAgfVxuICAgIGlmICgnY29uZGl0aW9uJyBpbiBzdGVwICYmIHN0ZXAuY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5jb25kaXRpb247XG4gICAgfVxuICAgIGlmICgnbG9vcFR5cGUnIGluIHN0ZXApIHtcbiAgICAgIGNvbnN0IGxvb3AgPSBzdGVwIGFzIHsgbG9vcFR5cGU6IHN0cmluZzsgdGVzdERhdGFQcm9maWxlPzogc3RyaW5nOyBjb25kaXRpb24/OiBzdHJpbmcgfTtcbiAgICAgIGlmIChsb29wLmxvb3BUeXBlID09PSAnZm9yJyAmJiBsb29wLnRlc3REYXRhUHJvZmlsZSkge1xuICAgICAgICByZXR1cm4gYEZvciBsb29wOiAke2xvb3AudGVzdERhdGFQcm9maWxlfWA7XG4gICAgICB9XG4gICAgICBpZiAobG9vcC5sb29wVHlwZSA9PT0gJ3doaWxlJyAmJiBsb29wLmNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gYFdoaWxlOiAke2xvb3AuY29uZGl0aW9ufWA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGVwLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGBTdGVwICR7aW5kZXggKyAxfWA7XG4gIH1cblxuICBwcml2YXRlIGdldE5vcm1hbFN0ZXBMYWJlbChzdGVwOiBOb3JtYWxTdGVwQ29uZmlnKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzdGVwLnBhcmFtZXRlcnMgPz8gW107XG4gICAgY29uc3QgZ2V0UGFyYW0gPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICAgcGFyYW1zLmZpbmQoKHApID0+IHAubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCB2YWwgPSAocDogeyB2YWx1ZT86IHN0cmluZzsgZGlzcGxheVZhbHVlPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpID0+XG4gICAgICBwPy5kaXNwbGF5VmFsdWUgPz8gcD8udmFsdWUgPz8gJyc7XG5cbiAgICBzd2l0Y2ggKHN0ZXAuZXZlbnRUeXBlIGFzIFRlc3RDYXNlRXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICduYXZpZ2F0ZSc6IHtcbiAgICAgICAgY29uc3QgdXJsID0gZ2V0UGFyYW0oJ3VybCcpO1xuICAgICAgICByZXR1cm4gdXJsID8gYE5hdmlnYXRlIHRvICR7dmFsKHVybCl9YCA6ICdOYXZpZ2F0ZSB0byc7XG4gICAgICB9XG4gICAgICBjYXNlICdhaS1hZ2VudCc6IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gZ2V0UGFyYW0oJ2luc3RydWN0aW9ucycpID8/IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpO1xuICAgICAgICByZXR1cm4gdmFsKGluc3RydWN0aW9ucykgfHwgJ0FJIEFnZW50IHN0ZXAnO1xuICAgICAgfVxuICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgIHJldHVybiB2YWwoZ2V0UGFyYW0oJ3RleHQnKSkgfHwgJ1R5cGUnO1xuICAgICAgY2FzZSAnY2xpY2snOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdzZWxlY3RvcicpKSA/IGBDbGljayAke3ZhbChnZXRQYXJhbSgnc2VsZWN0b3InKSl9YCA6ICdDbGljayc7XG4gICAgICBjYXNlICd2ZXJpZnknOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdkZXNjcmlwdGlvbicpKSB8fCAnVmVyaWZ5JztcbiAgICAgIGNhc2UgJ2N1c3RvbSc6IHtcbiAgICAgICAgY29uc3QgZGVzYyA9IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpID8/IGdldFBhcmFtKCdhY3Rpb24nKTtcbiAgICAgICAgcmV0dXJuIHZhbChkZXNjKSB8fCAnQ3VzdG9tIHN0ZXAnO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbChnZXRQYXJhbSgnZGVzY3JpcHRpb24nKSkgfHwgdmFsKHBhcmFtc1swXSkgfHwgJ1N0ZXAnO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIG9uRGVsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybURlbGV0ZS5lbWl0KCk7XG4gIH1cblxuICAvKiogR2V0IHN0ZXAgaW1hZ2UgVVJMIGlmIGF2YWlsYWJsZSAqL1xuICBnZXRTdGVwSW1hZ2Uoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFzdGVwPy5pZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc3RlcEltYWdlcy5nZXQoc3RlcC5pZCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiBzdGVwIGhhcyBhbiBpbWFnZSAqL1xuICBoYXNTdGVwSW1hZ2Uoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RlcEltYWdlKHN0ZXApICE9PSBudWxsO1xuICB9XG5cbiAgLyoqIEdldCBzdGVwIG51bWJlciBmcm9tIHN0ZXAgZGF0YSwgZmFsbGluZyBiYWNrIHRvIGluZGV4ICsgMSAqL1xuICBnZXRTdGVwTnVtYmVyKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZywgaW5kZXg6IG51bWJlcik6IG51bWJlciB8IHN0cmluZyB7XG4gICAgY29uc3Qgc3RlcE51bSA9IChzdGVwIGFzIGFueSk/LnN0ZXBOdW1iZXI7XG4gICAgaWYgKHN0ZXBOdW0gIT0gbnVsbCAmJiBzdGVwTnVtICE9PSAnJykge1xuICAgICAgcmV0dXJuIHN0ZXBOdW07XG4gICAgfVxuICAgIHJldHVybiBpbmRleCArIDE7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtWzEycHhdIGNxYS1zaGFkb3ctbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdIGNxYS13LWZ1bGwgY3FhLW1heC13LVs1MDBweF0gY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNCBjcWEtcC02IGNxYS1ib3gtYm9yZGVyIGNxYS1taW4taC0wXCI+XG4gIDwhLS0gSGVhZGVyOiB0aXRsZSArIGNsb3NlIChYKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdGFydCBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xIGNxYS1taW4tdy0wXCI+XG4gICAgICA8aDIgY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWzIycHhdIGNxYS1sZWFkaW5nLVsyOHB4XSBjcWEtdHJhY2tpbmctbm9ybWFsIGNxYS10ZXh0LVsjMTAxODI4XSBjcWEtbS0wXCI+XG4gICAgICAgIHt7IHRpdGxlVGV4dCB9fVxuICAgICAgPC9oMj5cbiAgICAgIDxwIGNsYXNzPVwiY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMjFweF0gY3FhLXRyYWNraW5nLVstMC4xNXB4XSBjcWEtdGV4dC1bIzRBNTU2NV0gY3FhLW0tMFwiPlxuICAgICAgICBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLCBidXQgeW91IGNhbiB1c2UgdGhlIHVuZG8gZnVuY3Rpb24gaW4gdGhlIHRvb2xiYXIuXG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwib25DYW5jZWwoKVwiXG4gICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1taW4taC03IGNxYS1taW4tdy03IGNxYS1yb3VuZGVkIGNxYS10ZXh0LVsjNkI3MjgwXSBob3ZlcjpjcWEtYmctWyNGM0Y0RjZdIGNxYS1wLTAgY3FhLWZsZXgtc2hyaW5rLTBcIlxuICAgICAgdGl0bGU9XCJDbG9zZVwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICA8cGF0aCBkPVwiTTE4IDZMNiAxOE02IDZsMTIgMTJcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDwhLS0gU2VsZWN0ZWQgc3RlcHMgZm9yIFtjb250ZXh0XSAoTikg4oCTIHNjcm9sbCB3aGVuIG1hbnkgc3RlcHMsIHNjcm9sbGJhciBoaWRkZW4gKHNhbWUgYXMgY3JlYXRlLXN0ZXAtZ3JvdXApIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtbWluLWgtMFwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRyYWNraW5nLW5vcm1hbCBjcWEtdGV4dC1bIzBBMEEwQV0gY3FhLWFsaWduLW1pZGRsZVwiPlxuICAgICAge3sgc2VsZWN0ZWRTdGVwc1N1YnRpdGxlIH19XG4gICAgPC9sYWJlbD5cbiAgICA8ZGl2ICpuZ0lmPVwic3RlcHNDb3VudCA9PT0gMFwiIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtcC00IGNxYS10ZXh0LWNlbnRlclwiPlxuICAgICAgTm8gc3RlcHMgc2VsZWN0ZWQuIFBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHN0ZXAgdG8gZGVsZXRlLlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzdGVwc0NvdW50ID4gMFwiIGNsYXNzPVwiY3FhLXNjcm9sbGJhci1oaWRlIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW1heC1oLVsyMDBweF0gY3FhLW1pbi1oLTAgY3FhLW92ZXJmbG93LXktYXV0byBjcWEtb3ZlcmZsb3cteC1oaWRkZW4gY3FhLXJvdW5kZWQtWzhweF0gY3FhLXAtWzZweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItW3JnYmEoMCwwLDAsMC4xKV1cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHN0ZXAgb2Ygc3RlcHNUb0RlbGV0ZTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLVs4cHhdIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1wdC1bNHB4XSBjcWEtcGItWzRweF0gY3FhLXBsLVs4cHhdIGNxYS1wci1bOHB4XSBjcWEtYmctW3JnYmEoMjM4LDYzLDYzLDAuMSldXCI+XG4gICAgICAgIDwhLS0gTnVtYmVyZWQgYmFkZ2UgKHJlZCkgLS0+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy03IGNxYS1oLTcgY3FhLXJvdW5kZWQtZnVsbCBjcWEtYmctWyNDNjM1MzVdIGNxYS10ZXh0LXdoaXRlIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1mbGV4LXNocmluay0wXCI+XG4gICAgICAgICAge3sgZ2V0U3RlcE51bWJlcihzdGVwLCBpKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwhLS0gU3RlcCBpbWFnZSBpZiBhdmFpbGFibGUgLS0+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cImhhc1N0ZXBJbWFnZShzdGVwKVwiXG4gICAgICAgICAgW3NyY109XCJnZXRTdGVwSW1hZ2Uoc3RlcClcIlxuICAgICAgICAgIFthbHRdPVwiJ1N0ZXAgJyArIGdldFN0ZXBOdW1iZXIoc3RlcCwgaSlcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLXctOCBjcWEtaC04IGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1vYmplY3QtY292ZXIgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItW3JnYmEoMjIwLDM4LDM4LDAuMildXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLXRyYWNraW5nLVswcHhdIGNxYS10ZXh0LVsjREMyNjI2XSBjcWEtZmxleC0xIGNxYS1taW4tdy0wIGNxYS10cnVuY2F0ZVwiPlxuICAgICAgICAgIHt7IGdldFN0ZXBEaXNwbGF5TGFiZWwoc3RlcCwgaSkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiAgXG5cbiAgPCEtLSBBY3Rpb25zOiBDYW5jZWwgfCBEZWxldGUgKHJpZ2h0LWFsaWduZWQpIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLXctZnVsbCBjcWEtZ2FwLTNcIj5cbiAgICA8Y3FhLWJ1dHRvblxuICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgIGJ0blNpemU9XCJsZ1wiXG4gICAgICB0ZXh0PVwiQ2FuY2VsXCJcbiAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXRleHQtWzE0cHhdIGNxYS1weS1bOXB4XSBjcWEtYmctd2hpdGUgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyM0MTQxNDZdIGNxYS10ZXh0LVsjNDE0MTQ2XSdcIlxuICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8Y3FhLWJ1dHRvblxuICAgICAgdmFyaWFudD1cImZpbGxlZFwiXG4gICAgICBidG5TaXplPVwibGdcIlxuICAgICAgdGV4dD1cIkRlbGV0ZVwiXG4gICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS10ZXh0LVsxNHB4XSBjcWEtcHktWzlweF0gY3FhLXJvdW5kZWQtWzhweF0gY3FhLWJvcmRlci0wIGNxYS1iZy1bI0VFM0YzRl0gY3FhLXRleHQtd2hpdGUnXCJcbiAgICAgIFtkaXNhYmxlZF09XCJzdGVwc0NvdW50ID09PSAwXCJcbiAgICAgIChjbGlja2VkKT1cIm9uRGVsZXRlKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|