tango-app-ui-store-builder 1.2.16 → 1.2.17
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/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +18 -7
- package/esm2022/lib/components/plano-tools/allow-edit/allow-edit.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/cad-files/cad-files.component.mjs +5 -4
- package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/delete-floor/delete-floor.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/delete-task/delete-task.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/layout-touchup/layout-touchup.component.mjs +134 -0
- package/esm2022/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.mjs +5103 -0
- package/esm2022/lib/components/plano-tools/modify-fixture-numbers/modify-fixture-numbers.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/plano-data-export/plano-data-export.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/store-exports/store-exports.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/swap-template/swap-template.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/tool-page-header/tool-page-header.component.mjs +22 -0
- package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +27 -8
- package/esm2022/lib/services/store-builder.service.mjs +10 -1
- package/esm2022/lib/tango-store-builder-routing.module.mjs +25 -55
- package/esm2022/lib/tango-store-builder.module.mjs +10 -1
- package/fesm2022/tango-app-ui-store-builder.mjs +5620 -390
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -4
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +5 -5
- package/lib/components/plano-configurations/plano-configurations.component.d.ts +9 -1
- package/lib/components/plano-tools/layout-touchup/layout-touchup.component.d.ts +50 -0
- package/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.d.ts +331 -0
- package/lib/components/plano-tools/tool-page-header/tool-page-header.component.d.ts +8 -0
- package/lib/components/plano-tools/tools-parent/tools-parent.component.d.ts +4 -2
- package/lib/services/store-builder.service.d.ts +10 -0
- package/lib/tango-store-builder.module.d.ts +61 -58
- package/package.json +1 -1
|
@@ -8,6 +8,7 @@ import * as i3 from "@ng-bootstrap/ng-bootstrap";
|
|
|
8
8
|
import * as i4 from "../../reactive-select/reactive-select.component";
|
|
9
9
|
import * as i5 from "@angular/common";
|
|
10
10
|
import * as i6 from "@angular/forms";
|
|
11
|
+
import * as i7 from "../tool-page-header/tool-page-header.component";
|
|
11
12
|
export class DeleteFloorComponent {
|
|
12
13
|
sbs;
|
|
13
14
|
gs;
|
|
@@ -243,10 +244,10 @@ export class DeleteFloorComponent {
|
|
|
243
244
|
this.destroy$.complete();
|
|
244
245
|
}
|
|
245
246
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DeleteFloorComponent, deps: [{ token: i1.StoreBuilderService }, { token: i2.GlobalStateService }, { token: i3.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
246
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DeleteFloorComponent, selector: "lib-delete-floor", ngImport: i0, template: "<section class=\"delete-floor p-3\">\n <
|
|
247
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DeleteFloorComponent, selector: "lib-delete-floor", ngImport: i0, template: "<section class=\"delete-floor p-3\">\n <lib-tool-page-header\n title=\"Delete Floor\"\n description=\"Removes a floor and every row that references it \u2014 fixtures, shelves, task compliance, processed tasks, comments, and revisions. If this is the only floor, the entire planogram is removed. The store entry is never touched.\"\n ></lib-tool-page-header>\n <div class=\"card p-4\" style=\"max-width: 720px;\">\n\n <!-- Store -->\n <div class=\"mb-3\">\n <lib-reactive-select\n label=\"Store\"\n [idField]=\"'storeId'\"\n [nameField]=\"'storeName'\"\n [data]=\"storeOptions\"\n [search]=\"true\"\n [ngModel]=\"selectedStoreId\"\n (ngModelChange)=\"onStoreSelected($event)\">\n </lib-reactive-select>\n <div class=\"text-muted small mt-1\" *ngIf=\"isLoadingStores\">Loading stores...</div>\n </div>\n\n <!-- Floor -->\n <div class=\"mb-3\" *ngIf=\"selectedStoreId\">\n <ng-container *ngIf=\"isLoadingFloors; else floorPicker\">\n <div class=\"text-muted small\">Loading floors...</div>\n </ng-container>\n <ng-template #floorPicker>\n <ng-container *ngIf=\"floors.length > 0; else noFloors\">\n <lib-reactive-select\n label=\"Floor\"\n [idField]=\"'_id'\"\n [nameField]=\"'displayName'\"\n [data]=\"floors\"\n [search]=\"true\"\n [ngModel]=\"selectedFloorId\"\n (ngModelChange)=\"onFloorSelected($event)\">\n </lib-reactive-select>\n </ng-container>\n <ng-template #noFloors>\n <div class=\"text-muted small\">No floors found for this store.</div>\n </ng-template>\n </ng-template>\n </div>\n\n <!-- Status + cascade preview -->\n <ng-container *ngIf=\"selectedFloorId\">\n <ng-container *ngIf=\"isLoadingImpact; else impactBlock\">\n <div class=\"text-muted small\">Loading floor details...</div>\n </ng-container>\n <ng-template #impactBlock>\n <ng-container *ngIf=\"impact\">\n <div class=\"mb-3 p-3 rounded info-block\">\n <div class=\"row gx-3 gy-2 small\">\n <div class=\"col-6\">\n <span class=\"text-muted d-block\">Floor status</span>\n <span class=\"fw-semibold\">{{ formatStatus(impact.floor.status) }}</span>\n </div>\n <div class=\"col-6\">\n <span class=\"text-muted d-block\">Planogram status</span>\n <span class=\"fw-semibold\">{{ formatStatus(impact.planogram.status) }}</span>\n </div>\n <div class=\"col-6\">\n <span class=\"text-muted d-block\">Plano approved</span>\n <span class=\"fw-semibold\">{{ formatBool(impact.floor.isPlanoApproved) }}</span>\n </div>\n <div class=\"col-6\">\n <span class=\"text-muted d-block\">Verification done</span>\n <span class=\"fw-semibold\">{{ formatBool(impact.floor.verificationStatus) }}</span>\n </div>\n <div class=\"col-6\">\n <span class=\"text-muted d-block\">Merch rollout done</span>\n <span class=\"fw-semibold\">{{ formatBool(impact.floor.merchRolloutStatus) }}</span>\n </div>\n <div class=\"col-6\">\n <span class=\"text-muted d-block\">VM rollout done</span>\n <span class=\"fw-semibold\">{{ formatBool(impact.floor.vmRolloutStatus) }}</span>\n </div>\n <div class=\"col-12\">\n <span class=\"text-muted d-block\">Total floors in this planogram</span>\n <span class=\"fw-semibold\">{{ impact.totalFloors }}</span>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 p-3 rounded cascade-block\">\n <div class=\"fw-semibold mb-2\">Will delete</div>\n <ul class=\"small mb-0 ps-3\">\n <li>1 floor (storelayouts)</li>\n <li>{{ impact.cascade.storefixtures }} fixture(s) (storefixtures)</li>\n <li>{{ impact.cascade.fixtureshelves }} shelf row(s) (fixtureshelves)</li>\n <li>{{ impact.cascade.planotaskcompliances }} task compliance row(s) (planotaskcompliances)</li>\n <li>{{ impact.cascade.processedtasks }} processed task(s) (processedtasks)</li>\n <li>{{ impact.cascade.planoglobalcomments }} global comment(s) (planoglobalcomments)</li>\n <li>{{ impact.cascade.planorevisions }} revision(s) (planorevisions)</li>\n </ul>\n <div class=\"text-muted small mt-2\">Total downstream rows: {{ totalCascadeRows }}</div>\n </div>\n\n <div class=\"alert alert-warning small\" *ngIf=\"impact.isLastFloor\">\n <strong>This is the only floor in this planogram.</strong>\n Deleting it will also remove the planogram entry \u2014 the plano will\n disappear completely. The store record itself will NOT be deleted.\n </div>\n </ng-container>\n </ng-template>\n </ng-container>\n\n <!-- Submit -->\n <button class=\"btn btn-danger\" (click)=\"onSubmit()\" [disabled]=\"!canSubmit\">\n {{ isSubmitting ? 'Deleting...' : 'Delete Floor' }}\n </button>\n\n <div class=\"mt-3 alert\" *ngIf=\"message\"\n [class.alert-success]=\"messageType === 'success'\"\n [class.alert-danger]=\"messageType === 'error'\"\n style=\"white-space: pre-line;\">\n {{ message }}\n </div>\n </div>\n</section>\n", styles: [".delete-floor .info-block{background-color:#f9fafb;border:1px solid #e4e7ec}.delete-floor .cascade-block{background-color:#fff7ed;border:1px solid #fed7aa}\n"], dependencies: [{ kind: "component", type: i4.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "subTextField", "searchField", "label", "data", "action", "search", "prefix", "actionLabel", "disabled"], outputs: ["actionClick"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.ToolPageHeaderComponent, selector: "lib-tool-page-header", inputs: ["title", "description", "backLink"] }] });
|
|
247
248
|
}
|
|
248
249
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DeleteFloorComponent, decorators: [{
|
|
249
250
|
type: Component,
|
|
250
|
-
args: [{ selector: "lib-delete-floor", template: "<section class=\"delete-floor p-3\">\n <
|
|
251
|
+
args: [{ selector: "lib-delete-floor", template: "<section class=\"delete-floor p-3\">\n <lib-tool-page-header\n title=\"Delete Floor\"\n description=\"Removes a floor and every row that references it \u2014 fixtures, shelves, task compliance, processed tasks, comments, and revisions. If this is the only floor, the entire planogram is removed. The store entry is never touched.\"\n ></lib-tool-page-header>\n <div class=\"card p-4\" style=\"max-width: 720px;\">\n\n <!-- Store -->\n <div class=\"mb-3\">\n <lib-reactive-select\n label=\"Store\"\n [idField]=\"'storeId'\"\n [nameField]=\"'storeName'\"\n [data]=\"storeOptions\"\n [search]=\"true\"\n [ngModel]=\"selectedStoreId\"\n (ngModelChange)=\"onStoreSelected($event)\">\n </lib-reactive-select>\n <div class=\"text-muted small mt-1\" *ngIf=\"isLoadingStores\">Loading stores...</div>\n </div>\n\n <!-- Floor -->\n <div class=\"mb-3\" *ngIf=\"selectedStoreId\">\n <ng-container *ngIf=\"isLoadingFloors; else floorPicker\">\n <div class=\"text-muted small\">Loading floors...</div>\n </ng-container>\n <ng-template #floorPicker>\n <ng-container *ngIf=\"floors.length > 0; else noFloors\">\n <lib-reactive-select\n label=\"Floor\"\n [idField]=\"'_id'\"\n [nameField]=\"'displayName'\"\n [data]=\"floors\"\n [search]=\"true\"\n [ngModel]=\"selectedFloorId\"\n (ngModelChange)=\"onFloorSelected($event)\">\n </lib-reactive-select>\n </ng-container>\n <ng-template #noFloors>\n <div class=\"text-muted small\">No floors found for this store.</div>\n </ng-template>\n </ng-template>\n </div>\n\n <!-- Status + cascade preview -->\n <ng-container *ngIf=\"selectedFloorId\">\n <ng-container *ngIf=\"isLoadingImpact; else impactBlock\">\n <div class=\"text-muted small\">Loading floor details...</div>\n </ng-container>\n <ng-template #impactBlock>\n <ng-container *ngIf=\"impact\">\n <div class=\"mb-3 p-3 rounded info-block\">\n <div class=\"row gx-3 gy-2 small\">\n <div class=\"col-6\">\n <span class=\"text-muted d-block\">Floor status</span>\n <span class=\"fw-semibold\">{{ formatStatus(impact.floor.status) }}</span>\n </div>\n <div class=\"col-6\">\n <span class=\"text-muted d-block\">Planogram status</span>\n <span class=\"fw-semibold\">{{ formatStatus(impact.planogram.status) }}</span>\n </div>\n <div class=\"col-6\">\n <span class=\"text-muted d-block\">Plano approved</span>\n <span class=\"fw-semibold\">{{ formatBool(impact.floor.isPlanoApproved) }}</span>\n </div>\n <div class=\"col-6\">\n <span class=\"text-muted d-block\">Verification done</span>\n <span class=\"fw-semibold\">{{ formatBool(impact.floor.verificationStatus) }}</span>\n </div>\n <div class=\"col-6\">\n <span class=\"text-muted d-block\">Merch rollout done</span>\n <span class=\"fw-semibold\">{{ formatBool(impact.floor.merchRolloutStatus) }}</span>\n </div>\n <div class=\"col-6\">\n <span class=\"text-muted d-block\">VM rollout done</span>\n <span class=\"fw-semibold\">{{ formatBool(impact.floor.vmRolloutStatus) }}</span>\n </div>\n <div class=\"col-12\">\n <span class=\"text-muted d-block\">Total floors in this planogram</span>\n <span class=\"fw-semibold\">{{ impact.totalFloors }}</span>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 p-3 rounded cascade-block\">\n <div class=\"fw-semibold mb-2\">Will delete</div>\n <ul class=\"small mb-0 ps-3\">\n <li>1 floor (storelayouts)</li>\n <li>{{ impact.cascade.storefixtures }} fixture(s) (storefixtures)</li>\n <li>{{ impact.cascade.fixtureshelves }} shelf row(s) (fixtureshelves)</li>\n <li>{{ impact.cascade.planotaskcompliances }} task compliance row(s) (planotaskcompliances)</li>\n <li>{{ impact.cascade.processedtasks }} processed task(s) (processedtasks)</li>\n <li>{{ impact.cascade.planoglobalcomments }} global comment(s) (planoglobalcomments)</li>\n <li>{{ impact.cascade.planorevisions }} revision(s) (planorevisions)</li>\n </ul>\n <div class=\"text-muted small mt-2\">Total downstream rows: {{ totalCascadeRows }}</div>\n </div>\n\n <div class=\"alert alert-warning small\" *ngIf=\"impact.isLastFloor\">\n <strong>This is the only floor in this planogram.</strong>\n Deleting it will also remove the planogram entry \u2014 the plano will\n disappear completely. The store record itself will NOT be deleted.\n </div>\n </ng-container>\n </ng-template>\n </ng-container>\n\n <!-- Submit -->\n <button class=\"btn btn-danger\" (click)=\"onSubmit()\" [disabled]=\"!canSubmit\">\n {{ isSubmitting ? 'Deleting...' : 'Delete Floor' }}\n </button>\n\n <div class=\"mt-3 alert\" *ngIf=\"message\"\n [class.alert-success]=\"messageType === 'success'\"\n [class.alert-danger]=\"messageType === 'error'\"\n style=\"white-space: pre-line;\">\n {{ message }}\n </div>\n </div>\n</section>\n", styles: [".delete-floor .info-block{background-color:#f9fafb;border:1px solid #e4e7ec}.delete-floor .cascade-block{background-color:#fff7ed;border:1px solid #fed7aa}\n"] }]
|
|
251
252
|
}], ctorParameters: () => [{ type: i1.StoreBuilderService }, { type: i2.GlobalStateService }, { type: i3.NgbModal }] });
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLWZsb29yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3BsYW5vLXRvb2xzL2RlbGV0ZS1mbG9vci9kZWxldGUtZmxvb3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvZGVsZXRlLWZsb29yL2RlbGV0ZS1mbG9vci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sT0FBTyxFQUNQLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUdkLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDOzs7Ozs7OztBQW1EN0csTUFBTSxPQUFPLG9CQUFvQjtJQXNCckI7SUFDQTtJQUNBO0lBdkJWLFFBQVEsQ0FBUztJQUVqQixZQUFZLEdBQWtCLEVBQUUsQ0FBQztJQUNqQyxlQUFlLEdBQWtCLElBQUksQ0FBQztJQUN0QyxpQkFBaUIsR0FBa0IsSUFBSSxDQUFDO0lBQ3hDLGVBQWUsR0FBWSxLQUFLLENBQUM7SUFFakMsTUFBTSxHQUFrQixFQUFFLENBQUM7SUFDM0IsZUFBZSxHQUFrQixJQUFJLENBQUM7SUFDdEMsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUVqQyxNQUFNLEdBQXVCLElBQUksQ0FBQztJQUNsQyxlQUFlLEdBQVksS0FBSyxDQUFDO0lBRWpDLFlBQVksR0FBWSxLQUFLLENBQUM7SUFDOUIsT0FBTyxHQUFXLEVBQUUsQ0FBQztJQUNyQixXQUFXLEdBQXdCLFNBQVMsQ0FBQztJ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TyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBM1JVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLHdEQzlEakMsNi9LQTBIQTs7NEZENURhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIFN1YmplY3QsXG4gIHRha2VVbnRpbCxcbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgRGVsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL3BvcHVwcy9kZWxldGUtY29uZmlybWF0aW9uL2RlbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50XCI7XG5cbmludGVyZmFjZSBTdG9yZU9wdGlvbiB7XG4gIHN0b3JlSWQ6IHN0cmluZztcbiAgc3RvcmVOYW1lOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBGbG9vck9wdGlvbiB7XG4gIF9pZDogc3RyaW5nO1xuICBmbG9vck51bWJlcjogbnVtYmVyO1xuICBmbG9vck5hbWU6IHN0cmluZztcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEZsb29ySW1wYWN0IHtcbiAgZmxvb3I6IHtcbiAgICBfaWQ6IHN0cmluZztcbiAgICBmbG9vck51bWJlcjogbnVtYmVyO1xuICAgIGZsb29yTmFtZTogc3RyaW5nO1xuICAgIHN0YXR1czogc3RyaW5nO1xuICAgIGlzUGxhbm9BcHByb3ZlZD86IGJvb2xlYW47XG4gICAgdmVyaWZpY2F0aW9uU3RhdHVzPzogYm9vbGVhbjtcbiAgICBtZXJjaFJvbGxvdXRTdGF0dXM/OiBib29sZWFuO1xuICAgIHZtUm9sbG91dFN0YXR1cz86IGJvb2xlYW47XG4gICAgcGxhbm9Qcm9ncmVzcz86IG51bWJlcjtcbiAgfTtcbiAgcGxhbm9ncmFtOiB7XG4gICAgX2lkOiBzdHJpbmc7XG4gICAgc3RvcmVOYW1lOiBzdHJpbmc7XG4gICAgc3RvcmVJZDogc3RyaW5nO1xuICAgIHN0YXR1cz86IHN0cmluZztcbiAgICBsYXlvdXROYW1lPzogc3RyaW5nO1xuICB9O1xuICB0b3RhbEZsb29yczogbnVtYmVyO1xuICBpc0xhc3RGbG9vcjogYm9vbGVhbjtcbiAgd2lsbERlbGV0ZVBsYW5vZ3JhbTogYm9vbGVhbjtcbiAgY2FzY2FkZToge1xuICAgIHN0b3JlZml4dHVyZXM6IG51bWJlcjtcbiAgICBmaXh0dXJlc2hlbHZlczogbnVtYmVyO1xuICAgIHBsYW5vdGFza2NvbXBsaWFuY2VzOiBudW1iZXI7XG4gICAgcHJvY2Vzc2VkdGFza3M6IG51bWJlcjtcbiAgICBwbGFub2dsb2JhbGNvbW1lbnRzOiBudW1iZXI7XG4gICAgcGxhbm9yZXZpc2lvbnM6IG51bWJlcjtcbiAgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImxpYi1kZWxldGUtZmxvb3JcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9kZWxldGUtZmxvb3IuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmw6IFwiLi9kZWxldGUtZmxvb3IuY29tcG9uZW50LnNjc3NcIixcbn0pXG5leHBvcnQgY2xhc3MgRGVsZXRlRmxvb3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGNsaWVudElkOiBzdHJpbmc7XG5cbiAgc3RvcmVPcHRpb25zOiBTdG9yZU9wdGlvbltdID0gW107XG4gIHNlbGVjdGVkU3RvcmVJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkU3RvcmVOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaXNMb2FkaW5nU3RvcmVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZmxvb3JzOiBGbG9vck9wdGlvbltdID0gW107XG4gIHNlbGVjdGVkRmxvb3JJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlzTG9hZGluZ0Zsb29yczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGltcGFjdDogRmxvb3JJbXBhY3QgfCBudWxsID0gbnVsbDtcbiAgaXNMb2FkaW5nSW1wYWN0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgaXNTdWJtaXR0aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIG1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XG4gIG1lc3NhZ2VUeXBlOiBcInN1Y2Nlc3NcIiB8IFwiZXJyb3JcIiA9IFwic3VjY2Vzc1wiO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2JzOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICAgICAgZmlsdGVyKChkYXRhKSA9PiAhIWRhdGEpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YS5jbGllbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIGFzIHN0cmluZyxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBoZWFkZXJEYXRhPy5jbGllbnQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNldEFsbCgpO1xuICAgICAgICB0aGlzLmxvYWRTdG9yZXMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbG9hZFN0b3JlcygpIHtcbiAgICBpZiAoIXRoaXMuY2xpZW50SWQpIHJldHVybjtcbiAgICB0aGlzLmlzTG9hZGluZ1N0b3JlcyA9IHRydWU7XG4gICAgdGhpcy5zYnMuZ2V0QWxsU3RvcmVzKHRoaXMuY2xpZW50SWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMgPSAocmVzPy5kYXRhIHx8IFtdKS5tYXAoKHM6IGFueSkgPT4gKHtcbiAgICAgICAgICBzdG9yZUlkOiBzLnN0b3JlSWQsXG4gICAgICAgICAgc3RvcmVOYW1lOiBzLnN0b3JlTmFtZSxcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmlzTG9hZGluZ1N0b3JlcyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcbiAgICAgICAgICBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IFwiRmFpbGVkIHRvIGxvYWQgc3RvcmVzLlwiLFxuICAgICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdTdG9yZXMgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBvblN0b3JlU2VsZWN0ZWQoc3RvcmVJZDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUlkID0gc3RvcmVJZDtcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMuc3RvcmVPcHRpb25zLmZpbmQoKHMpID0+IHMuc3RvcmVJZCA9PT0gc3RvcmVJZCk7XG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlTmFtZSA9IHN0b3JlPy5zdG9yZU5hbWUgPz8gbnVsbDtcbiAgICB0aGlzLnJlc2V0Rmxvb3JTdGF0ZSgpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkU3RvcmVJZCkge1xuICAgICAgdGhpcy5sb2FkRmxvb3JzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZsb29yU3RhdGUoKSB7XG4gICAgdGhpcy5mbG9vcnMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkRmxvb3JJZCA9IG51bGw7XG4gICAgdGhpcy5pbXBhY3QgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEFsbCgpIHtcbiAgICB0aGlzLnN0b3JlT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUlkID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVOYW1lID0gbnVsbDtcbiAgICB0aGlzLnJlc2V0Rmxvb3JTdGF0ZSgpO1xuICB9XG5cbiAgbG9hZEZsb29ycygpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRTdG9yZUlkKSByZXR1cm47XG4gICAgdGhpcy5pc0xvYWRpbmdGbG9vcnMgPSB0cnVlO1xuICAgIHRoaXMuc2JzLmdldFN0b3JlRmxvb3JzTGlzdCh0aGlzLnNlbGVjdGVkU3RvcmVJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByYXc6IGFueVtdID0gcmVzPy5kYXRhIHx8IFtdO1xuICAgICAgICB0aGlzLmZsb29ycyA9IHJhd1xuICAgICAgICAgIC5tYXAoKGYpID0+ICh7XG4gICAgICAgICAgICBfaWQ6IGYuX2lkLFxuICAgICAgICAgICAgZmxvb3JOdW1iZXI6IGYuZmxvb3JOdW1iZXIsXG4gICAgICAgICAgICBmbG9vck5hbWU6IGYuZmxvb3JOYW1lLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGBGbG9vciAke2YuZmxvb3JOdW1iZXJ9IOKAlCAke2YuZmxvb3JOYW1lfWAsXG4gICAgICAgICAgfSkpXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZmxvb3JOdW1iZXIgLSBiLmZsb29yTnVtYmVyKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdGbG9vcnMgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXG4gICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBcIkZhaWxlZCB0byBsb2FkIGZsb29ycy5cIixcbiAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nRmxvb3JzID0gZmFsc2U7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgb25GbG9vclNlbGVjdGVkKGZsb29ySWQ6IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLnNlbGVjdGVkRmxvb3JJZCA9IGZsb29ySWQ7XG4gICAgdGhpcy5pbXBhY3QgPSBudWxsO1xuICAgIGlmIChmbG9vcklkKSB7XG4gICAgICB0aGlzLmxvYWRJbXBhY3QoZmxvb3JJZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkSW1wYWN0KGZsb29ySWQ6IHN0cmluZykge1xuICAgIHRoaXMuaXNMb2FkaW5nSW1wYWN0ID0gdHJ1ZTtcbiAgICB0aGlzLnNicy5nZXRGbG9vckRlbGV0ZUltcGFjdCh7IGZsb29ySWQgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmltcGFjdCA9IHJlcz8uZGF0YSB8fCBudWxsO1xuICAgICAgICB0aGlzLmlzTG9hZGluZ0ltcGFjdCA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcbiAgICAgICAgICBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IFwiRmFpbGVkIHRvIGxvYWQgZmxvb3IgZGV0YWlscy5cIixcbiAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nSW1wYWN0ID0gZmFsc2U7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZm9ybWF0U3RhdHVzKHN0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgaWYgKCFzdGF0dXMpIHJldHVybiBcIi0tXCI7XG4gICAgY29uc3QgbWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgZHJhZnQ6IFwiRHJhZnRcIixcbiAgICAgIGFsbG9jYXRpb25QZW5kaW5nOiBcIkFsbG9jYXRpb24gUGVuZGluZ1wiLFxuICAgICAgY29tcGxldGVkOiBcIkNvbXBsZXRlZFwiLFxuICAgIH07XG4gICAgcmV0dXJuIG1hcFtzdGF0dXNdIHx8IHN0YXR1cztcbiAgfVxuXG4gIGZvcm1hdEJvb2wodjogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHYgPyBcIlllc1wiIDogXCJOb1wiO1xuICB9XG5cbiAgZ2V0IHRvdGFsQ2FzY2FkZVJvd3MoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaW1wYWN0KSByZXR1cm4gMDtcbiAgICBjb25zdCBjID0gdGhpcy5pbXBhY3QuY2FzY2FkZTtcbiAgICByZXR1cm4gKFxuICAgICAgYy5zdG9yZWZpeHR1cmVzICtcbiAgICAgIGMuZml4dHVyZXNoZWx2ZXMgK1xuICAgICAgYy5wbGFub3Rhc2tjb21wbGlhbmNlcyArXG4gICAgICBjLnByb2Nlc3NlZHRhc2tzICtcbiAgICAgIGMucGxhbm9nbG9iYWxjb21tZW50cyArXG4gICAgICBjLnBsYW5vcmV2aXNpb25zXG4gICAgKTtcbiAgfVxuXG4gIGdldCBjYW5TdWJtaXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5zZWxlY3RlZEZsb29ySWQgJiZcbiAgICAgICEhdGhpcy5pbXBhY3QgJiZcbiAgICAgICF0aGlzLmlzU3VibWl0dGluZyAmJlxuICAgICAgIXRoaXMuaXNMb2FkaW5nSW1wYWN0XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG9uU3VibWl0KCkge1xuICAgIGlmICghdGhpcy5jYW5TdWJtaXQgfHwgIXRoaXMuaW1wYWN0KSByZXR1cm47XG5cbiAgICBjb25zdCBpc0xhc3QgPSB0aGlzLmltcGFjdC5pc0xhc3RGbG9vcjtcbiAgICBjb25zdCBmbG9vciA9IHRoaXMuaW1wYWN0LmZsb29yO1xuICAgIGNvbnN0IHBsYW5vID0gdGhpcy5pbXBhY3QucGxhbm9ncmFtO1xuICAgIGNvbnN0IGMgPSB0aGlzLmltcGFjdC5jYXNjYWRlO1xuXG4gICAgY29uc3Qgc3VtbWFyeTogc3RyaW5nW10gPSBbXTtcbiAgICBzdW1tYXJ5LnB1c2goYFN0b3JlOiAke3BsYW5vLnN0b3JlTmFtZSA/PyBcIi0tXCJ9YCk7XG4gICAgc3VtbWFyeS5wdXNoKFxuICAgICAgYEZsb29yICR7Zmxvb3IuZmxvb3JOdW1iZXJ9IOKAlCAke2Zsb29yLmZsb29yTmFtZX0gWyR7dGhpcy5mb3JtYXRTdGF0dXMoZmxvb3Iuc3RhdHVzKX1dYCxcbiAgICApO1xuICAgIHN1bW1hcnkucHVzaChcbiAgICAgIGBDYXNjYWRlOiAke2Muc3RvcmVmaXh0dXJlc30gZml4dHVyZXMsICR7Yy5maXh0dXJlc2hlbHZlc30gc2hlbHZlcywgJHtjLnBsYW5vdGFza2NvbXBsaWFuY2VzfSBjb21wbGlhbmNlLCAke2MucHJvY2Vzc2VkdGFza3N9IHRhc2socyksICR7Yy5wbGFub2dsb2JhbGNvbW1lbnRzfSBjb21tZW50KHMpLCAke2MucGxhbm9yZXZpc2lvbnN9IHJldmlzaW9uKHMpYCxcbiAgICApO1xuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIHN1bW1hcnkucHVzaChcbiAgICAgICAgXCJUaGlzIGlzIHRoZSBPTkxZIGZsb29yIGluIHRoaXMgcGxhbm9ncmFtLiBEZWxldGluZyBpdCB3aWxsIFJFTU9WRSBUSEUgRU5USVJFIFBMQU5PR1JBTS4gVGhlIHN0b3JlIGVudHJ5IGl0c2VsZiB3aWxsIG5vdCBiZSB0b3VjaGVkLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgc3VtbWFyeS5wdXNoKFwiVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS5cIik7XG5cbiAgICBjb25zdCBmaXJzdFRpdGxlID0gaXNMYXN0XG4gICAgICA/IFwiRGVsZXRlIHBsYW5vZ3JhbSBlbnRpcmVseT9cIlxuICAgICAgOiBcIkRlbGV0ZSB0aGlzIGZsb29yP1wiO1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMuY29uZmlybShmaXJzdFRpdGxlLCBzdW1tYXJ5LmpvaW4oXCJcXG5cIikpO1xuICAgIGlmICghY29uZmlybWVkKSByZXR1cm47XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBjb25zdCBkb3VibGVDb25maXJtZWQgPSBhd2FpdCB0aGlzLmNvbmZpcm0oXG4gICAgICAgIFwiRmluYWwgY29uZmlybWF0aW9uXCIsXG4gICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIHBlcm1hbmVudGx5IGRlbGV0ZSB0aGUgcGxhbm9ncmFtIGZvciBcIiR7cGxhbm8uc3RvcmVOYW1lfVwiLiBUaGlzIHdpcGVzIHRoZSBmbG9vciBhbmQgdGhlIHBsYW5vZ3JhbSBtZXRhZGF0YS4gVGhlIHN0b3JlIGlzIHByZXNlcnZlZC4gUHJvY2VlZD9gLFxuICAgICAgKTtcbiAgICAgIGlmICghZG91YmxlQ29uZmlybWVkKSByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2JzXG4gICAgICAuZGVsZXRlRmxvb3JDYXNjYWRlKHtcbiAgICAgICAgZmxvb3JJZDogdGhpcy5zZWxlY3RlZEZsb29ySWQhLFxuICAgICAgICBjb25maXJtTGFzdEZsb29yOiBpc0xhc3QsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXM/LmRhdGEgfHwge307XG4gICAgICAgICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgaWYgKGRhdGEucGxhbm9ncmFtRGVsZXRlZCkge1xuICAgICAgICAgICAgcGFydHMucHVzaChcIlBsYW5vZ3JhbSByZW1vdmVkIGVudGlyZWx5XCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKFwiRmxvb3IgZGVsZXRlZFwiKTtcbiAgICAgICAgICAgIGlmIChkYXRhLnJlbnVtYmVyZWRGbG9vcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICBwYXJ0cy5wdXNoKFxuICAgICAgICAgICAgICAgIGAke2RhdGEucmVudW1iZXJlZEZsb29ycy5sZW5ndGh9IHNpYmxpbmcgZmxvb3IocykgcmVudW1iZXJlZGAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRjID0gZGF0YS5kZWxldGVkQ291bnRzIHx8IHt9O1xuICAgICAgICAgIHBhcnRzLnB1c2goXG4gICAgICAgICAgICBgQ2xlYW5lZDogJHtkYy5zdG9yZWZpeHR1cmVzIHx8IDB9IGZpeHR1cmVzLCAke2RjLmZpeHR1cmVzaGVsdmVzIHx8IDB9IHNoZWx2ZXMsICR7ZGMucGxhbm90YXNrY29tcGxpYW5jZXMgfHwgMH0gY29tcGxpYW5jZSwgJHtkYy5wcm9jZXNzZWR0YXNrcyB8fCAwfSB0YXNrKHMpLCAke2RjLnBsYW5vZ2xvYmFsY29tbWVudHMgfHwgMH0gY29tbWVudChzKSwgJHtkYy5wbGFub3JldmlzaW9ucyB8fCAwfSByZXZpc2lvbihzKWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKHBhcnRzLmpvaW4oXCIuIFwiKSwgXCJzdWNjZXNzXCIpO1xuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5yZXNldEZsb29yU3RhdGUoKTtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFN0b3JlSWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZEZsb29ycygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXG4gICAgICAgICAgICBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IFwiRmFpbGVkIHRvIGRlbGV0ZSBmbG9vci5cIixcbiAgICAgICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29uZmlybSh0aXRsZTogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRGVsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50LCB7XG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICByZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSB0aXRsZTtcbiAgICAgIHJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgcmVmLmNvbXBvbmVudEluc3RhbmNlLmNvbmZpcm1MYWJlbCA9IFwiRGVsZXRlXCI7XG4gICAgICByZWYuY29tcG9uZW50SW5zdGFuY2UuY29uZmlybUNsYXNzID0gXCJidG4tZGFuZ2VyXCI7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWYucmVzdWx0O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gXCJva1wiO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHNob3dNZXNzYWdlKG1zZzogc3RyaW5nLCB0eXBlOiBcInN1Y2Nlc3NcIiB8IFwiZXJyb3JcIikge1xuICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICB0aGlzLm1lc3NhZ2VUeXBlID0gdHlwZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLm1lc3NhZ2UgPSBcIlwiKSwgNjAwMCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxzZWN0aW9uIGNsYXNzPVwiZGVsZXRlLWZsb29yIHAtM1wiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZCBwLTRcIiBzdHlsZT1cIm1heC13aWR0aDogNzIwcHg7XCI+XG4gICAgPGg1IGNsYXNzPVwibWItMVwiPkRlbGV0ZSBGbG9vcjwvaDU+XG4gICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG1iLTNcIj5cbiAgICAgIFJlbW92ZXMgYSBmbG9vciBhbmQgZXZlcnkgcm93IHRoYXQgcmVmZXJlbmNlcyBpdCDigJQgZml4dHVyZXMsIHNoZWx2ZXMsIHRhc2tcbiAgICAgIGNvbXBsaWFuY2UsIHByb2Nlc3NlZCB0YXNrcywgY29tbWVudHMsIGFuZCByZXZpc2lvbnMuIElmIHRoaXMgaXMgdGhlIG9ubHlcbiAgICAgIGZsb29yLCB0aGUgZW50aXJlIHBsYW5vZ3JhbSBpcyByZW1vdmVkLiBUaGUgc3RvcmUgZW50cnkgaXMgbmV2ZXIgdG91Y2hlZC5cbiAgICA8L3A+XG5cbiAgICA8IS0tIFN0b3JlIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxuICAgICAgICBsYWJlbD1cIlN0b3JlXCJcbiAgICAgICAgW2lkRmllbGRdPVwiJ3N0b3JlSWQnXCJcbiAgICAgICAgW25hbWVGaWVsZF09XCInc3RvcmVOYW1lJ1wiXG4gICAgICAgIFtkYXRhXT1cInN0b3JlT3B0aW9uc1wiXG4gICAgICAgIFtzZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkU3RvcmVJZFwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU3RvcmVTZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbCBtdC0xXCIgKm5nSWY9XCJpc0xvYWRpbmdTdG9yZXNcIj5Mb2FkaW5nIHN0b3Jlcy4uLjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGbG9vciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiICpuZ0lmPVwic2VsZWN0ZWRTdG9yZUlkXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkaW5nRmxvb3JzOyBlbHNlIGZsb29yUGlja2VyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+TG9hZGluZyBmbG9vcnMuLi48L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNmbG9vclBpY2tlcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZsb29ycy5sZW5ndGggPiAwOyBlbHNlIG5vRmxvb3JzXCI+XG4gICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiRmxvb3JcIlxuICAgICAgICAgICAgW2lkRmllbGRdPVwiJ19pZCdcIlxuICAgICAgICAgICAgW25hbWVGaWVsZF09XCInZGlzcGxheU5hbWUnXCJcbiAgICAgICAgICAgIFtkYXRhXT1cImZsb29yc1wiXG4gICAgICAgICAgICBbc2VhcmNoXT1cInRydWVcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRGbG9vcklkXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmxvb3JTZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub0Zsb29ycz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPk5vIGZsb29ycyBmb3VuZCBmb3IgdGhpcyBzdG9yZS48L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFN0YXR1cyArIGNhc2NhZGUgcHJldmlldyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRGbG9vcklkXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkaW5nSW1wYWN0OyBlbHNlIGltcGFjdEJsb2NrXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+TG9hZGluZyBmbG9vciBkZXRhaWxzLi4uPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjaW1wYWN0QmxvY2s+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbXBhY3RcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBwLTMgcm91bmRlZCBpbmZvLWJsb2NrXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGd4LTMgZ3ktMiBzbWFsbFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPkZsb29yIHN0YXR1czwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+e3sgZm9ybWF0U3RhdHVzKGltcGFjdC5mbG9vci5zdGF0dXMpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5QbGFub2dyYW0gc3RhdHVzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctc2VtaWJvbGRcIj57eyBmb3JtYXRTdGF0dXMoaW1wYWN0LnBsYW5vZ3JhbS5zdGF0dXMpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5QbGFubyBhcHByb3ZlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+e3sgZm9ybWF0Qm9vbChpbXBhY3QuZmxvb3IuaXNQbGFub0FwcHJvdmVkKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+VmVyaWZpY2F0aW9uIGRvbmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1zZW1pYm9sZFwiPnt7IGZvcm1hdEJvb2woaW1wYWN0LmZsb29yLnZlcmlmaWNhdGlvblN0YXR1cykgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPk1lcmNoIHJvbGxvdXQgZG9uZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+e3sgZm9ybWF0Qm9vbChpbXBhY3QuZmxvb3IubWVyY2hSb2xsb3V0U3RhdHVzKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+Vk0gcm9sbG91dCBkb25lPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctc2VtaWJvbGRcIj57eyBmb3JtYXRCb29sKGltcGFjdC5mbG9vci52bVJvbGxvdXRTdGF0dXMpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+VG90YWwgZmxvb3JzIGluIHRoaXMgcGxhbm9ncmFtPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctc2VtaWJvbGRcIj57eyBpbXBhY3QudG90YWxGbG9vcnMgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBwLTMgcm91bmRlZCBjYXNjYWRlLWJsb2NrXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgbWItMlwiPldpbGwgZGVsZXRlPC9kaXY+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJzbWFsbCBtYi0wIHBzLTNcIj5cbiAgICAgICAgICAgICAgPGxpPjEgZmxvb3IgKHN0b3JlbGF5b3V0cyk8L2xpPlxuICAgICAgICAgICAgICA8bGk+e3sgaW1wYWN0LmNhc2NhZGUuc3RvcmVmaXh0dXJlcyB9fSBmaXh0dXJlKHMpIChzdG9yZWZpeHR1cmVzKTwvbGk+XG4gICAgICAgICAgICAgIDxsaT57eyBpbXBhY3QuY2FzY2FkZS5maXh0dXJlc2hlbHZlcyB9fSBzaGVsZiByb3cocykgKGZpeHR1cmVzaGVsdmVzKTwvbGk+XG4gICAgICAgICAgICAgIDxsaT57eyBpbXBhY3QuY2FzY2FkZS5wbGFub3Rhc2tjb21wbGlhbmNlcyB9fSB0YXNrIGNvbXBsaWFuY2Ugcm93KHMpIChwbGFub3Rhc2tjb21wbGlhbmNlcyk8L2xpPlxuICAgICAgICAgICAgICA8bGk+e3sgaW1wYWN0LmNhc2NhZGUucHJvY2Vzc2VkdGFza3MgfX0gcHJvY2Vzc2VkIHRhc2socykgKHByb2Nlc3NlZHRhc2tzKTwvbGk+XG4gICAgICAgICAgICAgIDxsaT57eyBpbXBhY3QuY2FzY2FkZS5wbGFub2dsb2JhbGNvbW1lbnRzIH19IGdsb2JhbCBjb21tZW50KHMpIChwbGFub2dsb2JhbGNvbW1lbnRzKTwvbGk+XG4gICAgICAgICAgICAgIDxsaT57eyBpbXBhY3QuY2FzY2FkZS5wbGFub3JldmlzaW9ucyB9fSByZXZpc2lvbihzKSAocGxhbm9yZXZpc2lvbnMpPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbCBtdC0yXCI+VG90YWwgZG93bnN0cmVhbSByb3dzOiB7eyB0b3RhbENhc2NhZGVSb3dzIH19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBzbWFsbFwiICpuZ0lmPVwiaW1wYWN0LmlzTGFzdEZsb29yXCI+XG4gICAgICAgICAgICA8c3Ryb25nPlRoaXMgaXMgdGhlIG9ubHkgZmxvb3IgaW4gdGhpcyBwbGFub2dyYW0uPC9zdHJvbmc+XG4gICAgICAgICAgICBEZWxldGluZyBpdCB3aWxsIGFsc28gcmVtb3ZlIHRoZSBwbGFub2dyYW0gZW50cnkg4oCUIHRoZSBwbGFubyB3aWxsXG4gICAgICAgICAgICBkaXNhcHBlYXIgY29tcGxldGVseS4gVGhlIHN0b3JlIHJlY29yZCBpdHNlbGYgd2lsbCBOT1QgYmUgZGVsZXRlZC5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBTdWJtaXQgLS0+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIiBbZGlzYWJsZWRdPVwiIWNhblN1Ym1pdFwiPlxuICAgICAge3sgaXNTdWJtaXR0aW5nID8gJ0RlbGV0aW5nLi4uJyA6ICdEZWxldGUgRmxvb3InIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2IGNsYXNzPVwibXQtMyBhbGVydFwiICpuZ0lmPVwibWVzc2FnZVwiXG4gICAgICBbY2xhc3MuYWxlcnQtc3VjY2Vzc109XCJtZXNzYWdlVHlwZSA9PT0gJ3N1Y2Nlc3MnXCJcbiAgICAgIFtjbGFzcy5hbGVydC1kYW5nZXJdPVwibWVzc2FnZVR5cGUgPT09ICdlcnJvcidcIlxuICAgICAgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XCI+XG4gICAgICB7eyBtZXNzYWdlIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLWZsb29yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3BsYW5vLXRvb2xzL2RlbGV0ZS1mbG9vci9kZWxldGUtZmxvb3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvZGVsZXRlLWZsb29yL2RlbGV0ZS1mbG9vci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sT0FBTyxFQUNQLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUdkLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDOzs7Ozs7Ozs7QUFtRDdHLE1BQU0sT0FBTyxvQkFBb0I7SUFzQnJCO0lBQ0E7SUFDQTtJQXZCVixRQUFRLENBQVM7SUFFakIsWUFBWSxHQUFrQixFQUFFLENBQUM7SUFDakMsZUFBZSxHQUFrQixJQUFJLENBQUM7SUFDdEMsaUJBQWlCLEdBQWtCLElBQUksQ0FBQztJQUN4QyxlQUFlLEdBQVksS0FBSyxDQUFDO0lBRWpDLE1BQU0sR0FBa0IsRUFBRSxDQUFDO0lBQzNCLGVBQWUsR0FBa0IsSUFBSSxDQUFDO0lBQ3RDLGVBQWUsR0FBWSxLQUFLLENBQUM7SUFFakMsTUFBTSxHQUF1QixJQUFJLENBQUM7SUFDbEMsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUVqQyxZQUFZLEdBQVksS0FBSyxDQUFDO0lBQzlCLE9BQU8sR0FBVyxFQUFFLENBQUM7SUFDckIsV0FBVyxHQUF3QixTQUFTLENBQUM7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QU8sR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQTNSVSxvQkFBb0I7NEZBQXBCLG9CQUFvQix3REM5RGpDLGkvS0F3SEE7OzRGRDFEYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBTdWJqZWN0LFxuICB0YWtlVW50aWwsXG59IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9wb3B1cHMvZGVsZXRlLWNvbmZpcm1hdGlvbi9kZWxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudFwiO1xuXG5pbnRlcmZhY2UgU3RvcmVPcHRpb24ge1xuICBzdG9yZUlkOiBzdHJpbmc7XG4gIHN0b3JlTmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRmxvb3JPcHRpb24ge1xuICBfaWQ6IHN0cmluZztcbiAgZmxvb3JOdW1iZXI6IG51bWJlcjtcbiAgZmxvb3JOYW1lOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBGbG9vckltcGFjdCB7XG4gIGZsb29yOiB7XG4gICAgX2lkOiBzdHJpbmc7XG4gICAgZmxvb3JOdW1iZXI6IG51bWJlcjtcbiAgICBmbG9vck5hbWU6IHN0cmluZztcbiAgICBzdGF0dXM6IHN0cmluZztcbiAgICBpc1BsYW5vQXBwcm92ZWQ/OiBib29sZWFuO1xuICAgIHZlcmlmaWNhdGlvblN0YXR1cz86IGJvb2xlYW47XG4gICAgbWVyY2hSb2xsb3V0U3RhdHVzPzogYm9vbGVhbjtcbiAgICB2bVJvbGxvdXRTdGF0dXM/OiBib29sZWFuO1xuICAgIHBsYW5vUHJvZ3Jlc3M/OiBudW1iZXI7XG4gIH07XG4gIHBsYW5vZ3JhbToge1xuICAgIF9pZDogc3RyaW5nO1xuICAgIHN0b3JlTmFtZTogc3RyaW5nO1xuICAgIHN0b3JlSWQ6IHN0cmluZztcbiAgICBzdGF0dXM/OiBzdHJpbmc7XG4gICAgbGF5b3V0TmFtZT86IHN0cmluZztcbiAgfTtcbiAgdG90YWxGbG9vcnM6IG51bWJlcjtcbiAgaXNMYXN0Rmxvb3I6IGJvb2xlYW47XG4gIHdpbGxEZWxldGVQbGFub2dyYW06IGJvb2xlYW47XG4gIGNhc2NhZGU6IHtcbiAgICBzdG9yZWZpeHR1cmVzOiBudW1iZXI7XG4gICAgZml4dHVyZXNoZWx2ZXM6IG51bWJlcjtcbiAgICBwbGFub3Rhc2tjb21wbGlhbmNlczogbnVtYmVyO1xuICAgIHByb2Nlc3NlZHRhc2tzOiBudW1iZXI7XG4gICAgcGxhbm9nbG9iYWxjb21tZW50czogbnVtYmVyO1xuICAgIHBsYW5vcmV2aXNpb25zOiBudW1iZXI7XG4gIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJsaWItZGVsZXRlLWZsb29yXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZGVsZXRlLWZsb29yLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsOiBcIi4vZGVsZXRlLWZsb29yLmNvbXBvbmVudC5zY3NzXCIsXG59KVxuZXhwb3J0IGNsYXNzIERlbGV0ZUZsb29yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjbGllbnRJZDogc3RyaW5nO1xuXG4gIHN0b3JlT3B0aW9uczogU3RvcmVPcHRpb25bXSA9IFtdO1xuICBzZWxlY3RlZFN0b3JlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZFN0b3JlTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlzTG9hZGluZ1N0b3JlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZsb29yczogRmxvb3JPcHRpb25bXSA9IFtdO1xuICBzZWxlY3RlZEZsb29ySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpc0xvYWRpbmdGbG9vcnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBpbXBhY3Q6IEZsb29ySW1wYWN0IHwgbnVsbCA9IG51bGw7XG4gIGlzTG9hZGluZ0ltcGFjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGlzU3VibWl0dGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBtZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xuICBtZXNzYWdlVHlwZTogXCJzdWNjZXNzXCIgfCBcImVycm9yXCIgPSBcInN1Y2Nlc3NcIjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNiczogU3RvcmVCdWlsZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXG4gICAgICAgIGZpbHRlcigoZGF0YSkgPT4gISFkYXRhKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGEuY2xpZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGhlYWRlckRhdGEgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmcsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YT8uY2xpZW50O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXRBbGwoKTtcbiAgICAgICAgdGhpcy5sb2FkU3RvcmVzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGxvYWRTdG9yZXMoKSB7XG4gICAgaWYgKCF0aGlzLmNsaWVudElkKSByZXR1cm47XG4gICAgdGhpcy5pc0xvYWRpbmdTdG9yZXMgPSB0cnVlO1xuICAgIHRoaXMuc2JzLmdldEFsbFN0b3Jlcyh0aGlzLmNsaWVudElkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gKHJlcz8uZGF0YSB8fCBbXSkubWFwKChzOiBhbnkpID0+ICh7XG4gICAgICAgICAgc3RvcmVJZDogcy5zdG9yZUlkLFxuICAgICAgICAgIHN0b3JlTmFtZTogcy5zdG9yZU5hbWUsXG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdTdG9yZXMgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXG4gICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBcIkZhaWxlZCB0byBsb2FkIHN0b3Jlcy5cIixcbiAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nU3RvcmVzID0gZmFsc2U7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgb25TdG9yZVNlbGVjdGVkKHN0b3JlSWQ6IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVJZCA9IHN0b3JlSWQ7XG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLnN0b3JlT3B0aW9ucy5maW5kKChzKSA9PiBzLnN0b3JlSWQgPT09IHN0b3JlSWQpO1xuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZU5hbWUgPSBzdG9yZT8uc3RvcmVOYW1lID8/IG51bGw7XG4gICAgdGhpcy5yZXNldEZsb29yU3RhdGUoKTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFN0b3JlSWQpIHtcbiAgICAgIHRoaXMubG9hZEZsb29ycygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRGbG9vclN0YXRlKCkge1xuICAgIHRoaXMuZmxvb3JzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEZsb29ySWQgPSBudWxsO1xuICAgIHRoaXMuaW1wYWN0ID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRBbGwoKSB7XG4gICAgdGhpcy5zdG9yZU9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVJZCA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlTmFtZSA9IG51bGw7XG4gICAgdGhpcy5yZXNldEZsb29yU3RhdGUoKTtcbiAgfVxuXG4gIGxvYWRGbG9vcnMoKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkU3RvcmVJZCkgcmV0dXJuO1xuICAgIHRoaXMuaXNMb2FkaW5nRmxvb3JzID0gdHJ1ZTtcbiAgICB0aGlzLnNicy5nZXRTdG9yZUZsb29yc0xpc3QodGhpcy5zZWxlY3RlZFN0b3JlSWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmF3OiBhbnlbXSA9IHJlcz8uZGF0YSB8fCBbXTtcbiAgICAgICAgdGhpcy5mbG9vcnMgPSByYXdcbiAgICAgICAgICAubWFwKChmKSA9PiAoe1xuICAgICAgICAgICAgX2lkOiBmLl9pZCxcbiAgICAgICAgICAgIGZsb29yTnVtYmVyOiBmLmZsb29yTnVtYmVyLFxuICAgICAgICAgICAgZmxvb3JOYW1lOiBmLmZsb29yTmFtZSxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBgRmxvb3IgJHtmLmZsb29yTnVtYmVyfSDigJQgJHtmLmZsb29yTmFtZX1gLFxuICAgICAgICAgIH0pKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmZsb29yTnVtYmVyIC0gYi5mbG9vck51bWJlcik7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nRmxvb3JzID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNob3dNZXNzYWdlKFxuICAgICAgICAgIGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgXCJGYWlsZWQgdG8gbG9hZCBmbG9vcnMuXCIsXG4gICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzTG9hZGluZ0Zsb29ycyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uRmxvb3JTZWxlY3RlZChmbG9vcklkOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5zZWxlY3RlZEZsb29ySWQgPSBmbG9vcklkO1xuICAgIHRoaXMuaW1wYWN0ID0gbnVsbDtcbiAgICBpZiAoZmxvb3JJZCkge1xuICAgICAgdGhpcy5sb2FkSW1wYWN0KGZsb29ySWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZEltcGFjdChmbG9vcklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzTG9hZGluZ0ltcGFjdCA9IHRydWU7XG4gICAgdGhpcy5zYnMuZ2V0Rmxvb3JEZWxldGVJbXBhY3QoeyBmbG9vcklkIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pbXBhY3QgPSByZXM/LmRhdGEgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdJbXBhY3QgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXG4gICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBcIkZhaWxlZCB0byBsb2FkIGZsb29yIGRldGFpbHMuXCIsXG4gICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzTG9hZGluZ0ltcGFjdCA9IGZhbHNlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGZvcm1hdFN0YXR1cyhzdGF0dXM6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBzdHJpbmcge1xuICAgIGlmICghc3RhdHVzKSByZXR1cm4gXCItLVwiO1xuICAgIGNvbnN0IG1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIGRyYWZ0OiBcIkRyYWZ0XCIsXG4gICAgICBhbGxvY2F0aW9uUGVuZGluZzogXCJBbGxvY2F0aW9uIFBlbmRpbmdcIixcbiAgICAgIGNvbXBsZXRlZDogXCJDb21wbGV0ZWRcIixcbiAgICB9O1xuICAgIHJldHVybiBtYXBbc3RhdHVzXSB8fCBzdGF0dXM7XG4gIH1cblxuICBmb3JtYXRCb29sKHY6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIHJldHVybiB2ID8gXCJZZXNcIiA6IFwiTm9cIjtcbiAgfVxuXG4gIGdldCB0b3RhbENhc2NhZGVSb3dzKCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmltcGFjdCkgcmV0dXJuIDA7XG4gICAgY29uc3QgYyA9IHRoaXMuaW1wYWN0LmNhc2NhZGU7XG4gICAgcmV0dXJuIChcbiAgICAgIGMuc3RvcmVmaXh0dXJlcyArXG4gICAgICBjLmZpeHR1cmVzaGVsdmVzICtcbiAgICAgIGMucGxhbm90YXNrY29tcGxpYW5jZXMgK1xuICAgICAgYy5wcm9jZXNzZWR0YXNrcyArXG4gICAgICBjLnBsYW5vZ2xvYmFsY29tbWVudHMgK1xuICAgICAgYy5wbGFub3JldmlzaW9uc1xuICAgICk7XG4gIH1cblxuICBnZXQgY2FuU3VibWl0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhIXRoaXMuc2VsZWN0ZWRGbG9vcklkICYmXG4gICAgICAhIXRoaXMuaW1wYWN0ICYmXG4gICAgICAhdGhpcy5pc1N1Ym1pdHRpbmcgJiZcbiAgICAgICF0aGlzLmlzTG9hZGluZ0ltcGFjdFxuICAgICk7XG4gIH1cblxuICBhc3luYyBvblN1Ym1pdCgpIHtcbiAgICBpZiAoIXRoaXMuY2FuU3VibWl0IHx8ICF0aGlzLmltcGFjdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgaXNMYXN0ID0gdGhpcy5pbXBhY3QuaXNMYXN0Rmxvb3I7XG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLmltcGFjdC5mbG9vcjtcbiAgICBjb25zdCBwbGFubyA9IHRoaXMuaW1wYWN0LnBsYW5vZ3JhbTtcbiAgICBjb25zdCBjID0gdGhpcy5pbXBhY3QuY2FzY2FkZTtcblxuICAgIGNvbnN0IHN1bW1hcnk6IHN0cmluZ1tdID0gW107XG4gICAgc3VtbWFyeS5wdXNoKGBTdG9yZTogJHtwbGFuby5zdG9yZU5hbWUgPz8gXCItLVwifWApO1xuICAgIHN1bW1hcnkucHVzaChcbiAgICAgIGBGbG9vciAke2Zsb29yLmZsb29yTnVtYmVyfSDigJQgJHtmbG9vci5mbG9vck5hbWV9IFske3RoaXMuZm9ybWF0U3RhdHVzKGZsb29yLnN0YXR1cyl9XWAsXG4gICAgKTtcbiAgICBzdW1tYXJ5LnB1c2goXG4gICAgICBgQ2FzY2FkZTogJHtjLnN0b3JlZml4dHVyZXN9IGZpeHR1cmVzLCAke2MuZml4dHVyZXNoZWx2ZXN9IHNoZWx2ZXMsICR7Yy5wbGFub3Rhc2tjb21wbGlhbmNlc30gY29tcGxpYW5jZSwgJHtjLnByb2Nlc3NlZHRhc2tzfSB0YXNrKHMpLCAke2MucGxhbm9nbG9iYWxjb21tZW50c30gY29tbWVudChzKSwgJHtjLnBsYW5vcmV2aXNpb25zfSByZXZpc2lvbihzKWAsXG4gICAgKTtcbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBzdW1tYXJ5LnB1c2goXG4gICAgICAgIFwiVGhpcyBpcyB0aGUgT05MWSBmbG9vciBpbiB0aGlzIHBsYW5vZ3JhbS4gRGVsZXRpbmcgaXQgd2lsbCBSRU1PVkUgVEhFIEVOVElSRSBQTEFOT0dSQU0uIFRoZSBzdG9yZSBlbnRyeSBpdHNlbGYgd2lsbCBub3QgYmUgdG91Y2hlZC5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIHN1bW1hcnkucHVzaChcIlRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUuXCIpO1xuXG4gICAgY29uc3QgZmlyc3RUaXRsZSA9IGlzTGFzdFxuICAgICAgPyBcIkRlbGV0ZSBwbGFub2dyYW0gZW50aXJlbHk/XCJcbiAgICAgIDogXCJEZWxldGUgdGhpcyBmbG9vcj9cIjtcbiAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCB0aGlzLmNvbmZpcm0oZmlyc3RUaXRsZSwgc3VtbWFyeS5qb2luKFwiXFxuXCIpKTtcbiAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgY29uc3QgZG91YmxlQ29uZmlybWVkID0gYXdhaXQgdGhpcy5jb25maXJtKFxuICAgICAgICBcIkZpbmFsIGNvbmZpcm1hdGlvblwiLFxuICAgICAgICBgWW91IGFyZSBhYm91dCB0byBwZXJtYW5lbnRseSBkZWxldGUgdGhlIHBsYW5vZ3JhbSBmb3IgXCIke3BsYW5vLnN0b3JlTmFtZX1cIi4gVGhpcyB3aXBlcyB0aGUgZmxvb3IgYW5kIHRoZSBwbGFub2dyYW0gbWV0YWRhdGEuIFRoZSBzdG9yZSBpcyBwcmVzZXJ2ZWQuIFByb2NlZWQ/YCxcbiAgICAgICk7XG4gICAgICBpZiAoIWRvdWJsZUNvbmZpcm1lZCkgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNic1xuICAgICAgLmRlbGV0ZUZsb29yQ2FzY2FkZSh7XG4gICAgICAgIGZsb29ySWQ6IHRoaXMuc2VsZWN0ZWRGbG9vcklkISxcbiAgICAgICAgY29uZmlybUxhc3RGbG9vcjogaXNMYXN0LFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzPy5kYXRhIHx8IHt9O1xuICAgICAgICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGlmIChkYXRhLnBsYW5vZ3JhbURlbGV0ZWQpIHtcbiAgICAgICAgICAgIHBhcnRzLnB1c2goXCJQbGFub2dyYW0gcmVtb3ZlZCBlbnRpcmVseVwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFydHMucHVzaChcIkZsb29yIGRlbGV0ZWRcIik7XG4gICAgICAgICAgICBpZiAoZGF0YS5yZW51bWJlcmVkRmxvb3JzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcGFydHMucHVzaChcbiAgICAgICAgICAgICAgICBgJHtkYXRhLnJlbnVtYmVyZWRGbG9vcnMubGVuZ3RofSBzaWJsaW5nIGZsb29yKHMpIHJlbnVtYmVyZWRgLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkYyA9IGRhdGEuZGVsZXRlZENvdW50cyB8fCB7fTtcbiAgICAgICAgICBwYXJ0cy5wdXNoKFxuICAgICAgICAgICAgYENsZWFuZWQ6ICR7ZGMuc3RvcmVmaXh0dXJlcyB8fCAwfSBmaXh0dXJlcywgJHtkYy5maXh0dXJlc2hlbHZlcyB8fCAwfSBzaGVsdmVzLCAke2RjLnBsYW5vdGFza2NvbXBsaWFuY2VzIHx8IDB9IGNvbXBsaWFuY2UsICR7ZGMucHJvY2Vzc2VkdGFza3MgfHwgMH0gdGFzayhzKSwgJHtkYy5wbGFub2dsb2JhbGNvbW1lbnRzIHx8IDB9IGNvbW1lbnQocyksICR7ZGMucGxhbm9yZXZpc2lvbnMgfHwgMH0gcmV2aXNpb24ocylgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShwYXJ0cy5qb2luKFwiLiBcIiksIFwic3VjY2Vzc1wiKTtcbiAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucmVzZXRGbG9vclN0YXRlKCk7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdG9yZUlkKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRGbG9vcnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKFxuICAgICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBcIkZhaWxlZCB0byBkZWxldGUgZmxvb3IuXCIsXG4gICAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbmZpcm0odGl0bGU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgcmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gdGl0bGU7XG4gICAgICByZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgIHJlZi5jb21wb25lbnRJbnN0YW5jZS5jb25maXJtTGFiZWwgPSBcIkRlbGV0ZVwiO1xuICAgICAgcmVmLmNvbXBvbmVudEluc3RhbmNlLmNvbmZpcm1DbGFzcyA9IFwiYnRuLWRhbmdlclwiO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVmLnJlc3VsdDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IFwib2tcIjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzaG93TWVzc2FnZShtc2c6IHN0cmluZywgdHlwZTogXCJzdWNjZXNzXCIgfCBcImVycm9yXCIpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgdGhpcy5tZXNzYWdlVHlwZSA9IHR5cGU7XG4gICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5tZXNzYWdlID0gXCJcIiksIDYwMDApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImRlbGV0ZS1mbG9vciBwLTNcIj5cbiAgPGxpYi10b29sLXBhZ2UtaGVhZGVyXG4gICAgdGl0bGU9XCJEZWxldGUgRmxvb3JcIlxuICAgIGRlc2NyaXB0aW9uPVwiUmVtb3ZlcyBhIGZsb29yIGFuZCBldmVyeSByb3cgdGhhdCByZWZlcmVuY2VzIGl0IOKAlCBmaXh0dXJlcywgc2hlbHZlcywgdGFzayBjb21wbGlhbmNlLCBwcm9jZXNzZWQgdGFza3MsIGNvbW1lbnRzLCBhbmQgcmV2aXNpb25zLiBJZiB0aGlzIGlzIHRoZSBvbmx5IGZsb29yLCB0aGUgZW50aXJlIHBsYW5vZ3JhbSBpcyByZW1vdmVkLiBUaGUgc3RvcmUgZW50cnkgaXMgbmV2ZXIgdG91Y2hlZC5cIlxuICA+PC9saWItdG9vbC1wYWdlLWhlYWRlcj5cbiAgPGRpdiBjbGFzcz1cImNhcmQgcC00XCIgc3R5bGU9XCJtYXgtd2lkdGg6IDcyMHB4O1wiPlxuXG4gICAgPCEtLSBTdG9yZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3RcbiAgICAgICAgbGFiZWw9XCJTdG9yZVwiXG4gICAgICAgIFtpZEZpZWxkXT1cIidzdG9yZUlkJ1wiXG4gICAgICAgIFtuYW1lRmllbGRdPVwiJ3N0b3JlTmFtZSdcIlxuICAgICAgICBbZGF0YV09XCJzdG9yZU9wdGlvbnNcIlxuICAgICAgICBbc2VhcmNoXT1cInRydWVcIlxuICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFN0b3JlSWRcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblN0b3JlU2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbXQtMVwiICpuZ0lmPVwiaXNMb2FkaW5nU3RvcmVzXCI+TG9hZGluZyBzdG9yZXMuLi48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRmxvb3IgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIiAqbmdJZj1cInNlbGVjdGVkU3RvcmVJZFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ0Zsb29yczsgZWxzZSBmbG9vclBpY2tlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPkxvYWRpbmcgZmxvb3JzLi4uPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZmxvb3JQaWNrZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmbG9vcnMubGVuZ3RoID4gMDsgZWxzZSBub0Zsb29yc1wiPlxuICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIkZsb29yXCJcbiAgICAgICAgICAgIFtpZEZpZWxkXT1cIidfaWQnXCJcbiAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ2Rpc3BsYXlOYW1lJ1wiXG4gICAgICAgICAgICBbZGF0YV09XCJmbG9vcnNcIlxuICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkRmxvb3JJZFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZsb29yU2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9GbG9vcnM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIj5ObyBmbG9vcnMgZm91bmQgZm9yIHRoaXMgc3RvcmUuPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTdGF0dXMgKyBjYXNjYWRlIHByZXZpZXcgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkRmxvb3JJZFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ0ltcGFjdDsgZWxzZSBpbXBhY3RCbG9ja1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPkxvYWRpbmcgZmxvb3IgZGV0YWlscy4uLjwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2ltcGFjdEJsb2NrPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1wYWN0XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcC0zIHJvdW5kZWQgaW5mby1ibG9ja1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBneC0zIGd5LTIgc21hbGxcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5GbG9vciBzdGF0dXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1zZW1pYm9sZFwiPnt7IGZvcm1hdFN0YXR1cyhpbXBhY3QuZmxvb3Iuc3RhdHVzKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+UGxhbm9ncmFtIHN0YXR1czwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+e3sgZm9ybWF0U3RhdHVzKGltcGFjdC5wbGFub2dyYW0uc3RhdHVzKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+UGxhbm8gYXBwcm92ZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1zZW1pYm9sZFwiPnt7IGZvcm1hdEJvb2woaW1wYWN0LmZsb29yLmlzUGxhbm9BcHByb3ZlZCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPlZlcmlmaWNhdGlvbiBkb25lPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctc2VtaWJvbGRcIj57eyBmb3JtYXRCb29sKGltcGFjdC5mbG9vci52ZXJpZmljYXRpb25TdGF0dXMpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5NZXJjaCByb2xsb3V0IGRvbmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1zZW1pYm9sZFwiPnt7IGZvcm1hdEJvb2woaW1wYWN0LmZsb29yLm1lcmNoUm9sbG91dFN0YXR1cykgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPlZNIHJvbGxvdXQgZG9uZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+e3sgZm9ybWF0Qm9vbChpbXBhY3QuZmxvb3Iudm1Sb2xsb3V0U3RhdHVzKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPlRvdGFsIGZsb29ycyBpbiB0aGlzIHBsYW5vZ3JhbTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+e3sgaW1wYWN0LnRvdGFsRmxvb3JzIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcC0zIHJvdW5kZWQgY2FzY2FkZS1ibG9ja1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIG1iLTJcIj5XaWxsIGRlbGV0ZTwvZGl2PlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwic21hbGwgbWItMCBwcy0zXCI+XG4gICAgICAgICAgICAgIDxsaT4xIGZsb29yIChzdG9yZWxheW91dHMpPC9saT5cbiAgICAgICAgICAgICAgPGxpPnt7IGltcGFjdC5jYXNjYWRlLnN0b3JlZml4dHVyZXMgfX0gZml4dHVyZShzKSAoc3RvcmVmaXh0dXJlcyk8L2xpPlxuICAgICAgICAgICAgICA8bGk+e3sgaW1wYWN0LmNhc2NhZGUuZml4dHVyZXNoZWx2ZXMgfX0gc2hlbGYgcm93KHMpIChmaXh0dXJlc2hlbHZlcyk8L2xpPlxuICAgICAgICAgICAgICA8bGk+e3sgaW1wYWN0LmNhc2NhZGUucGxhbm90YXNrY29tcGxpYW5jZXMgfX0gdGFzayBjb21wbGlhbmNlIHJvdyhzKSAocGxhbm90YXNrY29tcGxpYW5jZXMpPC9saT5cbiAgICAgICAgICAgICAgPGxpPnt7IGltcGFjdC5jYXNjYWRlLnByb2Nlc3NlZHRhc2tzIH19IHByb2Nlc3NlZCB0YXNrKHMpIChwcm9jZXNzZWR0YXNrcyk8L2xpPlxuICAgICAgICAgICAgICA8bGk+e3sgaW1wYWN0LmNhc2NhZGUucGxhbm9nbG9iYWxjb21tZW50cyB9fSBnbG9iYWwgY29tbWVudChzKSAocGxhbm9nbG9iYWxjb21tZW50cyk8L2xpPlxuICAgICAgICAgICAgICA8bGk+e3sgaW1wYWN0LmNhc2NhZGUucGxhbm9yZXZpc2lvbnMgfX0gcmV2aXNpb24ocykgKHBsYW5vcmV2aXNpb25zKTwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbXQtMlwiPlRvdGFsIGRvd25zdHJlYW0gcm93czoge3sgdG90YWxDYXNjYWRlUm93cyB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmcgc21hbGxcIiAqbmdJZj1cImltcGFjdC5pc0xhc3RGbG9vclwiPlxuICAgICAgICAgICAgPHN0cm9uZz5UaGlzIGlzIHRoZSBvbmx5IGZsb29yIGluIHRoaXMgcGxhbm9ncmFtLjwvc3Ryb25nPlxuICAgICAgICAgICAgRGVsZXRpbmcgaXQgd2lsbCBhbHNvIHJlbW92ZSB0aGUgcGxhbm9ncmFtIGVudHJ5IOKAlCB0aGUgcGxhbm8gd2lsbFxuICAgICAgICAgICAgZGlzYXBwZWFyIGNvbXBsZXRlbHkuIFRoZSBzdG9yZSByZWNvcmQgaXRzZWxmIHdpbGwgTk9UIGJlIGRlbGV0ZWQuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gU3VibWl0IC0tPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIChjbGljayk9XCJvblN1Ym1pdCgpXCIgW2Rpc2FibGVkXT1cIiFjYW5TdWJtaXRcIj5cbiAgICAgIHt7IGlzU3VibWl0dGluZyA/ICdEZWxldGluZy4uLicgOiAnRGVsZXRlIEZsb29yJyB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGRpdiBjbGFzcz1cIm10LTMgYWxlcnRcIiAqbmdJZj1cIm1lc3NhZ2VcIlxuICAgICAgW2NsYXNzLmFsZXJ0LXN1Y2Nlc3NdPVwibWVzc2FnZVR5cGUgPT09ICdzdWNjZXNzJ1wiXG4gICAgICBbY2xhc3MuYWxlcnQtZGFuZ2VyXT1cIm1lc3NhZ2VUeXBlID09PSAnZXJyb3InXCJcbiAgICAgIHN0eWxlPVwid2hpdGUtc3BhY2U6IHByZS1saW5lO1wiPlxuICAgICAge3sgbWVzc2FnZSB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==
|
|
@@ -5,6 +5,7 @@ import * as i1 from "../../../services/store-builder.service";
|
|
|
5
5
|
import * as i2 from "tango-app-ui-global";
|
|
6
6
|
import * as i3 from "@angular/forms";
|
|
7
7
|
import * as i4 from "../../collection-update-ai/components/store-select/store-select.component";
|
|
8
|
+
import * as i5 from "../tool-page-header/tool-page-header.component";
|
|
8
9
|
export class DeleteTaskComponent {
|
|
9
10
|
sbs;
|
|
10
11
|
gs;
|
|
@@ -80,10 +81,10 @@ export class DeleteTaskComponent {
|
|
|
80
81
|
this.destroy$.complete();
|
|
81
82
|
}
|
|
82
83
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DeleteTaskComponent, deps: [{ token: i1.StoreBuilderService }, { token: i2.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
83
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DeleteTaskComponent, selector: "lib-delete-task", ngImport: i0, template: "<section class=\"delete-task p-3\">\r\n <div class=\"card p-4\" style=\"max-width: 600px;\">\r\n
|
|
84
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DeleteTaskComponent, selector: "lib-delete-task", ngImport: i0, template: "<section class=\"delete-task p-3\">\r\n <lib-tool-page-header\r\n title=\"Delete Task\"\r\n description=\"Remove a task and its responses.\"\r\n ></lib-tool-page-header>\r\n <div class=\"card p-4\" style=\"max-width: 600px;\">\r\n\r\n <!-- Task Type -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label d-block\">Task Type</label>\r\n <div class=\"d-flex gap-3\">\r\n <div class=\"form-check\">\r\n <input type=\"radio\" class=\"form-check-input\" id=\"deleteTaskTypeFixture\"\r\n name=\"deleteTaskType\" value=\"fixture\"\r\n [(ngModel)]=\"taskType\" (change)=\"onTaskTypeChange()\">\r\n <label class=\"form-check-label\" for=\"deleteTaskTypeFixture\">Fixture Verification</label>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"radio\" class=\"form-check-input\" id=\"deleteTaskTypeZone\"\r\n name=\"deleteTaskType\" value=\"zoneVerification\"\r\n [(ngModel)]=\"taskType\" (change)=\"onTaskTypeChange()\">\r\n <label class=\"form-check-label\" for=\"deleteTaskTypeZone\">Zone Verification</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Select -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Store</label>\r\n <lib-store-select\r\n [options]=\"storeOptions\"\r\n [initialSelected]=\"initialStores\"\r\n (selectedChange)=\"onStoresSelected($event)\">\r\n </lib-store-select>\r\n </div>\r\n\r\n <!-- Submit -->\r\n <button class=\"btn btn-danger\" (click)=\"onSubmit()\"\r\n [disabled]=\"isSubmitting || selectedStores.length === 0\">\r\n {{ isSubmitting ? 'Deleting...' : 'Delete Task' }}\r\n </button>\r\n\r\n <!-- Message -->\r\n @if (message) {\r\n <div class=\"mt-3 alert\" [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\">\r\n {{ message }}\r\n </div>\r\n }\r\n </div>\r\n</section>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.StoreSelectComponent, selector: "lib-store-select", inputs: ["options", "initialSelected", "singleSelect"], outputs: ["selectedChange"] }, { kind: "component", type: i5.ToolPageHeaderComponent, selector: "lib-tool-page-header", inputs: ["title", "description", "backLink"] }] });
|
|
84
85
|
}
|
|
85
86
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DeleteTaskComponent, decorators: [{
|
|
86
87
|
type: Component,
|
|
87
|
-
args: [{ selector: 'lib-delete-task', template: "<section class=\"delete-task p-3\">\r\n <div class=\"card p-4\" style=\"max-width: 600px;\">\r\n
|
|
88
|
+
args: [{ selector: 'lib-delete-task', template: "<section class=\"delete-task p-3\">\r\n <lib-tool-page-header\r\n title=\"Delete Task\"\r\n description=\"Remove a task and its responses.\"\r\n ></lib-tool-page-header>\r\n <div class=\"card p-4\" style=\"max-width: 600px;\">\r\n\r\n <!-- Task Type -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label d-block\">Task Type</label>\r\n <div class=\"d-flex gap-3\">\r\n <div class=\"form-check\">\r\n <input type=\"radio\" class=\"form-check-input\" id=\"deleteTaskTypeFixture\"\r\n name=\"deleteTaskType\" value=\"fixture\"\r\n [(ngModel)]=\"taskType\" (change)=\"onTaskTypeChange()\">\r\n <label class=\"form-check-label\" for=\"deleteTaskTypeFixture\">Fixture Verification</label>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"radio\" class=\"form-check-input\" id=\"deleteTaskTypeZone\"\r\n name=\"deleteTaskType\" value=\"zoneVerification\"\r\n [(ngModel)]=\"taskType\" (change)=\"onTaskTypeChange()\">\r\n <label class=\"form-check-label\" for=\"deleteTaskTypeZone\">Zone Verification</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Select -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Store</label>\r\n <lib-store-select\r\n [options]=\"storeOptions\"\r\n [initialSelected]=\"initialStores\"\r\n (selectedChange)=\"onStoresSelected($event)\">\r\n </lib-store-select>\r\n </div>\r\n\r\n <!-- Submit -->\r\n <button class=\"btn btn-danger\" (click)=\"onSubmit()\"\r\n [disabled]=\"isSubmitting || selectedStores.length === 0\">\r\n {{ isSubmitting ? 'Deleting...' : 'Delete Task' }}\r\n </button>\r\n\r\n <!-- Message -->\r\n @if (message) {\r\n <div class=\"mt-3 alert\" [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\">\r\n {{ message }}\r\n </div>\r\n }\r\n </div>\r\n</section>\r\n" }]
|
|
88
89
|
}], ctorParameters: () => [{ type: i1.StoreBuilderService }, { type: i2.GlobalStateService }] });
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXRhc2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvZGVsZXRlLXRhc2svZGVsZXRlLXRhc2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvZGVsZXRlLXRhc2svZGVsZXRlLXRhc2suY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBUXRGLE1BQU0sT0FBTyxtQkFBbUI7SUFhcEI7SUFDQTtJQWJWLFFBQVEsQ0FBUztJQUNqQixRQUFRLEdBQW1DLFNBQVMsQ0FBQztJQUNyRCxZQUFZLEdBQWtCLEVBQUUsQ0FBQztJQUNqQyxhQUFhLEdBQWtCLEVBQUUsQ0FBQztJQUNsQyxjQUFjLEdBQWtCLEVBQUUsQ0FBQztJQUNuQyxZQUFZLEdBQVksS0FBSyxDQUFDO0lBQzlCLE9BQU8sR0FBVyxFQUFFLENBQUM7SUFDckIsV0FBVyxHQUF3QixTQUFTLENBQUM7SUFFNUIsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFaEQsWUFDVSxHQUF3QixFQUN4QixFQUFzQjtRQUR0QixRQUFHLEdBQUgsR0FBRyxDQUFxQjtRQUN4QixPQUFFLEdBQUYsRUFBRSxDQUFvQjtJQUM3QixDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYzthQUNuQixJQUFJLENBQ0gsU0FBUyxDQUFD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QUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQXhGVSxtQkFBbUI7NEZBQW5CLG1CQUFtQix1RENYaEMsNjREQWdEQTs7NEZEckNhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU3RvcmVPcHRpb24gfSBmcm9tICcuLi8uLi9jb2xsZWN0aW9uLXVwZGF0ZS1haS9jb21wb25lbnRzL3N0b3JlLXNlbGVjdC9zdG9yZS1zZWxlY3QuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWRlbGV0ZS10YXNrJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGVsZXRlLXRhc2suY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9kZWxldGUtdGFzay5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZWxldGVUYXNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcbiAgdGFza1R5cGU6ICdmaXh0dXJlJyB8ICd6b25lVmVyaWZpY2F0aW9uJyA9ICdmaXh0dXJlJztcclxuICBzdG9yZU9wdGlvbnM6IFN0b3JlT3B0aW9uW10gPSBbXTtcclxuICBpbml0aWFsU3RvcmVzOiBTdG9yZU9wdGlvbltdID0gW107XHJcbiAgc2VsZWN0ZWRTdG9yZXM6IFN0b3JlT3B0aW9uW10gPSBbXTtcclxuICBpc1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuICBtZXNzYWdlVHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyA9ICdzdWNjZXNzJztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzYnM6IFN0b3JlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxyXG4gICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICAgIGZpbHRlcigoZGF0YSkgPT4gISFkYXRhKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGEuY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdoZWFkZXItZmlsdGVycycpIGFzIHN0cmluZ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBoZWFkZXJEYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZFN0b3JlcygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRTdG9yZXMoKSB7XHJcbiAgICB0aGlzLnNicy5nZXRTdG9yZU9yQ2x1c3Rlckxpc3QoeyBzZWFyY2hNb2RlOiAnc3RvcmUnIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcz8uZGF0YSkge1xyXG4gICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gcmVzLmRhdGE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25TdG9yZXNTZWxlY3RlZChzdG9yZXM6IFN0b3JlT3B0aW9uW10pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBzdG9yZXM7XHJcbiAgfVxyXG5cclxuICBvblRhc2tUeXBlQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgfVxyXG5cclxuICBvblN1Ym1pdCgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU3RvcmVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnNob3dNZXNzYWdlKCdQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBzdG9yZS4nLCAnZXJyb3InKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBzdG9yZU5hbWVzOiB0aGlzLnNlbGVjdGVkU3RvcmVzLm1hcCgocykgPT4gcy5sYWJlbCksXHJcbiAgICAgIHRhc2tUeXBlOiB0aGlzLnRhc2tUeXBlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnNicy5kZWxldGVUYXNrRm9yU3RvcmVzKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBjb3VudCA9IHJlcz8uZGF0YT8uZGVsZXRlZENvdW50IHx8IDA7XHJcbiAgICAgICAgdGhpcy5zaG93TWVzc2FnZShgRGVsZXRlZCAke2NvdW50fSB0YXNrKHMpIHN1Y2Nlc3NmdWxseS5gLCAnc3VjY2VzcycpO1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dNZXNzYWdlKGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ1NvbWV0aGluZyB3ZW50IHdyb25nLicsICdlcnJvcicpO1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNob3dNZXNzYWdlKG1zZzogc3RyaW5nLCB0eXBlOiAnc3VjY2VzcycgfCAnZXJyb3InKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XHJcbiAgICB0aGlzLm1lc3NhZ2VUeXBlID0gdHlwZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMubWVzc2FnZSA9ICcnKSwgNTAwMCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBjbGFzcz1cImRlbGV0ZS10YXNrIHAtM1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIHAtNFwiIHN0eWxlPVwibWF4LXdpZHRoOiA2MDBweDtcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1iLTNcIj5EZWxldGUgVGFzazwvaDU+XHJcblxyXG4gICAgPCEtLSBUYXNrIFR5cGUgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGQtYmxvY2tcIj5UYXNrIFR5cGU8L2xhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBpZD1cImRlbGV0ZVRhc2tUeXBlRml4dHVyZVwiXHJcbiAgICAgICAgICAgIG5hbWU9XCJkZWxldGVUYXNrVHlwZVwiIHZhbHVlPVwiZml4dHVyZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGFza1R5cGVcIiAoY2hhbmdlKT1cIm9uVGFza1R5cGVDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImRlbGV0ZVRhc2tUeXBlRml4dHVyZVwiPkZpeHR1cmUgVmVyaWZpY2F0aW9uPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwiZGVsZXRlVGFza1R5cGVab25lXCJcclxuICAgICAgICAgICAgbmFtZT1cImRlbGV0ZVRhc2tUeXBlXCIgdmFsdWU9XCJ6b25lVmVyaWZpY2F0aW9uXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0YXNrVHlwZVwiIChjaGFuZ2UpPVwib25UYXNrVHlwZUNoYW5nZSgpXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiZGVsZXRlVGFza1R5cGVab25lXCI+Wm9uZSBWZXJpZmljYXRpb248L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gU3RvcmUgU2VsZWN0IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN0b3JlPC9sYWJlbD5cclxuICAgICAgPGxpYi1zdG9yZS1zZWxlY3RcclxuICAgICAgICBbb3B0aW9uc109XCJzdG9yZU9wdGlvbnNcIlxyXG4gICAgICAgIFtpbml0aWFsU2VsZWN0ZWRdPVwiaW5pdGlhbFN0b3Jlc1wiXHJcbiAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cIm9uU3RvcmVzU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICA8L2xpYi1zdG9yZS1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFN1Ym1pdCAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIChjbGljayk9XCJvblN1Ym1pdCgpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzU3VibWl0dGluZyB8fCBzZWxlY3RlZFN0b3Jlcy5sZW5ndGggPT09IDBcIj5cclxuICAgICAge3sgaXNTdWJtaXR0aW5nID8gJ0RlbGV0aW5nLi4uJyA6ICdEZWxldGUgVGFzaycgfX1cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gTWVzc2FnZSAtLT5cclxuICAgIEBpZiAobWVzc2FnZSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtMyBhbGVydFwiIFtjbGFzcy5hbGVydC1zdWNjZXNzXT1cIm1lc3NhZ2VUeXBlID09PSAnc3VjY2VzcydcIlxyXG4gICAgICAgIFtjbGFzcy5hbGVydC1kYW5nZXJdPVwibWVzc2FnZVR5cGUgPT09ICdlcnJvcidcIj5cclxuICAgICAgICB7eyBtZXNzYWdlIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcbiJdfQ==
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXRhc2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvZGVsZXRlLXRhc2svZGVsZXRlLXRhc2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvZGVsZXRlLXRhc2svZGVsZXRlLXRhc2suY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQVF0RixNQUFNLE9BQU8sbUJBQW1CO0lBYXBCO0lBQ0E7SUFiVixRQUFRLENBQVM7SUFDakIsUUFBUSxHQUFtQyxTQUFTLENBQUM7SUFDckQsWUFBWSxHQUFrQixFQUFFLENBQUM7SUFDakMsYUFBYSxHQUFrQixFQUFFLENBQUM7SUFDbEMsY0FBYyxHQUFrQixFQUFFLENBQUM7SUFDbkMsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUM5QixPQUFPLEdBQVcsRUFBRSxDQUFDO0lBQ3JCLFdBQVcsR0FBd0IsU0FBUyxDQUFDO0lBRTVCLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRWhELFlBQ1UsR0FBd0IsRUFDeEIsRUFBc0I7UUFEdEIsUUFBRyxHQUFILEdBQUcsQ0FBcUI7UUFDeEIsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7SUFDN0IsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWM7YUFDbkIsSUFBSSxDQUNILFNBQVMsQ0FB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UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0F4RlUsbUJBQW1COzRGQUFuQixtQkFBbUIsdURDWGhDLGcvREFtREE7OzRGRHhDYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmUtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFN0b3JlT3B0aW9uIH0gZnJvbSAnLi4vLi4vY29sbGVjdGlvbi11cGRhdGUtYWkvY29tcG9uZW50cy9zdG9yZS1zZWxlY3Qvc3RvcmUtc2VsZWN0LmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1kZWxldGUtdGFzaycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RlbGV0ZS10YXNrLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZGVsZXRlLXRhc2suY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGVsZXRlVGFza0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG4gIHRhc2tUeXBlOiAnZml4dHVyZScgfCAnem9uZVZlcmlmaWNhdGlvbicgPSAnZml4dHVyZSc7XHJcbiAgc3RvcmVPcHRpb25zOiBTdG9yZU9wdGlvbltdID0gW107XHJcbiAgaW5pdGlhbFN0b3JlczogU3RvcmVPcHRpb25bXSA9IFtdO1xyXG4gIHNlbGVjdGVkU3RvcmVzOiBTdG9yZU9wdGlvbltdID0gW107XHJcbiAgaXNTdWJtaXR0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWVzc2FnZTogc3RyaW5nID0gJyc7XHJcbiAgbWVzc2FnZVR5cGU6ICdzdWNjZXNzJyB8ICdlcnJvcicgPSAnc3VjY2Vzcyc7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2JzOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcclxuICAgICAgICBmaWx0ZXIoKGRhdGEpID0+ICEhZGF0YSksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhLmNsaWVudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGhlYWRlckRhdGEgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnKSBhcyBzdHJpbmdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRTdG9yZXMoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkU3RvcmVzKCkge1xyXG4gICAgdGhpcy5zYnMuZ2V0U3RvcmVPckNsdXN0ZXJMaXN0KHsgc2VhcmNoTW9kZTogJ3N0b3JlJyB9KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXM/LmRhdGEpIHtcclxuICAgICAgICB0aGlzLnN0b3JlT3B0aW9ucyA9IHJlcy5kYXRhO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU3RvcmVzU2VsZWN0ZWQoc3RvcmVzOiBTdG9yZU9wdGlvbltdKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gc3RvcmVzO1xyXG4gIH1cclxuXHJcbiAgb25UYXNrVHlwZUNoYW5nZSgpIHtcclxuICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFN0b3Jlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5zaG93TWVzc2FnZSgnUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgc3RvcmUuJywgJ2Vycm9yJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgc3RvcmVOYW1lczogdGhpcy5zZWxlY3RlZFN0b3Jlcy5tYXAoKHMpID0+IHMubGFiZWwpLFxyXG4gICAgICB0YXNrVHlwZTogdGhpcy50YXNrVHlwZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zYnMuZGVsZXRlVGFza0ZvclN0b3JlcyhwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgY291bnQgPSByZXM/LmRhdGE/LmRlbGV0ZWRDb3VudCB8fCAwO1xyXG4gICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoYERlbGV0ZWQgJHtjb3VudH0gdGFzayhzKSBzdWNjZXNzZnVsbHkuYCwgJ3N1Y2Nlc3MnKTtcclxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93TWVzc2FnZShlcnI/LmVycm9yPy5tZXNzYWdlIHx8ICdTb21ldGhpbmcgd2VudCB3cm9uZy4nLCAnZXJyb3InKTtcclxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzaG93TWVzc2FnZShtc2c6IHN0cmluZywgdHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJykge1xyXG4gICAgdGhpcy5tZXNzYWdlID0gbXNnO1xyXG4gICAgdGhpcy5tZXNzYWdlVHlwZSA9IHR5cGU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLm1lc3NhZ2UgPSAnJyksIDUwMDApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJkZWxldGUtdGFzayBwLTNcIj5cclxuICA8bGliLXRvb2wtcGFnZS1oZWFkZXJcclxuICAgIHRpdGxlPVwiRGVsZXRlIFRhc2tcIlxyXG4gICAgZGVzY3JpcHRpb249XCJSZW1vdmUgYSB0YXNrIGFuZCBpdHMgcmVzcG9uc2VzLlwiXHJcbiAgPjwvbGliLXRvb2wtcGFnZS1oZWFkZXI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgcC00XCIgc3R5bGU9XCJtYXgtd2lkdGg6IDYwMHB4O1wiPlxyXG5cclxuICAgIDwhLS0gVGFzayBUeXBlIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBkLWJsb2NrXCI+VGFzayBUeXBlPC9sYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgaWQ9XCJkZWxldGVUYXNrVHlwZUZpeHR1cmVcIlxyXG4gICAgICAgICAgICBuYW1lPVwiZGVsZXRlVGFza1R5cGVcIiB2YWx1ZT1cImZpeHR1cmVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRhc2tUeXBlXCIgKGNoYW5nZSk9XCJvblRhc2tUeXBlQ2hhbmdlKClcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJkZWxldGVUYXNrVHlwZUZpeHR1cmVcIj5GaXh0dXJlIFZlcmlmaWNhdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBpZD1cImRlbGV0ZVRhc2tUeXBlWm9uZVwiXHJcbiAgICAgICAgICAgIG5hbWU9XCJkZWxldGVUYXNrVHlwZVwiIHZhbHVlPVwiem9uZVZlcmlmaWNhdGlvblwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGFza1R5cGVcIiAoY2hhbmdlKT1cIm9uVGFza1R5cGVDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImRlbGV0ZVRhc2tUeXBlWm9uZVwiPlpvbmUgVmVyaWZpY2F0aW9uPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFN0b3JlIFNlbGVjdCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdG9yZTwvbGFiZWw+XHJcbiAgICAgIDxsaWItc3RvcmUtc2VsZWN0XHJcbiAgICAgICAgW29wdGlvbnNdPVwic3RvcmVPcHRpb25zXCJcclxuICAgICAgICBbaW5pdGlhbFNlbGVjdGVkXT1cImluaXRpYWxTdG9yZXNcIlxyXG4gICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJvblN0b3Jlc1NlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgPC9saWItc3RvcmUtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBTdWJtaXQgLS0+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiAoY2xpY2spPVwib25TdWJtaXQoKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmcgfHwgc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgIHt7IGlzU3VibWl0dGluZyA/ICdEZWxldGluZy4uLicgOiAnRGVsZXRlIFRhc2snIH19XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8IS0tIE1lc3NhZ2UgLS0+XHJcbiAgICBAaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTMgYWxlcnRcIiBbY2xhc3MuYWxlcnQtc3VjY2Vzc109XCJtZXNzYWdlVHlwZSA9PT0gJ3N1Y2Nlc3MnXCJcclxuICAgICAgICBbY2xhc3MuYWxlcnQtZGFuZ2VyXT1cIm1lc3NhZ2VUeXBlID09PSAnZXJyb3InXCI+XHJcbiAgICAgICAge3sgbWVzc2FnZSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG4iXX0=
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { Component } from "@angular/core";
|
|
2
|
+
import { debounceTime, distinctUntilChanged, filter, Subject, takeUntil, } from "rxjs";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../../services/store-builder.service";
|
|
5
|
+
import * as i2 from "tango-app-ui-global";
|
|
6
|
+
import * as i3 from "tango-app-ui-shared";
|
|
7
|
+
import * as i4 from "@angular/router";
|
|
8
|
+
import * as i5 from "../../reactive-select/reactive-select.component";
|
|
9
|
+
import * as i6 from "@angular/common";
|
|
10
|
+
import * as i7 from "@angular/forms";
|
|
11
|
+
import * as i8 from "../tool-page-header/tool-page-header.component";
|
|
12
|
+
/**
|
|
13
|
+
* Layout Touchup — internal tool selector.
|
|
14
|
+
*
|
|
15
|
+
* Two-step selector (Store → Floor). On "Open Editor", navigates to the
|
|
16
|
+
* existing manage-planogram route with `touchup=1` query param. The existing
|
|
17
|
+
* ManageStorePlanoComponent detects this and switches to touchup behaviour:
|
|
18
|
+
* - status-affecting buttons (publish / assign / redo / revoke) hidden
|
|
19
|
+
* - Save calls /managePlano/updateLayoutTouchup (no task cascade)
|
|
20
|
+
*
|
|
21
|
+
* No canvas rendering or fixture editor lives here — the existing edit-plano
|
|
22
|
+
* surface IS the editor, so the visual is identical to the verification flow.
|
|
23
|
+
*/
|
|
24
|
+
export class LayoutTouchupComponent {
|
|
25
|
+
apiService;
|
|
26
|
+
gs;
|
|
27
|
+
toast;
|
|
28
|
+
router;
|
|
29
|
+
destroy$ = new Subject();
|
|
30
|
+
clientId;
|
|
31
|
+
storeOptions = [];
|
|
32
|
+
selectedStore = null;
|
|
33
|
+
floorOptions = [];
|
|
34
|
+
selectedFloorId = "";
|
|
35
|
+
isLoadingStores = false;
|
|
36
|
+
isLoadingFloor = false;
|
|
37
|
+
constructor(apiService, gs, toast, router) {
|
|
38
|
+
this.apiService = apiService;
|
|
39
|
+
this.gs = gs;
|
|
40
|
+
this.toast = toast;
|
|
41
|
+
this.router = router;
|
|
42
|
+
}
|
|
43
|
+
ngOnInit() {
|
|
44
|
+
this.gs.dataRangeValue
|
|
45
|
+
.pipe(takeUntil(this.destroy$), debounceTime(200), filter((d) => !!d), distinctUntilChanged())
|
|
46
|
+
.subscribe((data) => {
|
|
47
|
+
this.clientId =
|
|
48
|
+
data?.client ??
|
|
49
|
+
JSON.parse(localStorage.getItem("header-filters"))?.client;
|
|
50
|
+
this.loadStores();
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
ngOnDestroy() {
|
|
54
|
+
this.destroy$.next();
|
|
55
|
+
this.destroy$.complete();
|
|
56
|
+
}
|
|
57
|
+
loadStores() {
|
|
58
|
+
this.isLoadingStores = true;
|
|
59
|
+
this.apiService
|
|
60
|
+
.getStoresForTouchup()
|
|
61
|
+
.pipe(takeUntil(this.destroy$))
|
|
62
|
+
.subscribe({
|
|
63
|
+
next: (res) => {
|
|
64
|
+
// BE returns active stores with exactly one plano; `id` is planoId.
|
|
65
|
+
this.storeOptions = res?.data ?? [];
|
|
66
|
+
this.isLoadingStores = false;
|
|
67
|
+
},
|
|
68
|
+
error: () => {
|
|
69
|
+
this.toast.getErrorToast("Failed to load stores");
|
|
70
|
+
this.isLoadingStores = false;
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
onStoreChange(planoId) {
|
|
75
|
+
const opt = this.storeOptions.find((s) => s.id === planoId);
|
|
76
|
+
this.selectedStore = opt ?? null;
|
|
77
|
+
this.floorOptions = [];
|
|
78
|
+
this.selectedFloorId = "";
|
|
79
|
+
if (!opt)
|
|
80
|
+
return;
|
|
81
|
+
this.loadFloorsForPlano(opt.id);
|
|
82
|
+
}
|
|
83
|
+
loadFloorsForPlano(planoId) {
|
|
84
|
+
this.isLoadingFloor = true;
|
|
85
|
+
this.apiService
|
|
86
|
+
.getStoreFixtures({ id: [planoId], treeView: true })
|
|
87
|
+
.pipe(takeUntil(this.destroy$))
|
|
88
|
+
.subscribe({
|
|
89
|
+
next: (res) => {
|
|
90
|
+
const plano = res?.data?.[0];
|
|
91
|
+
if (!plano?.floors?.length) {
|
|
92
|
+
this.toast.getErrorToast("No floors found for this plano");
|
|
93
|
+
this.isLoadingFloor = false;
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
this.floorOptions = plano.floors.map((f) => ({
|
|
97
|
+
id: f._id,
|
|
98
|
+
label: `Floor ${f.floorNum}`,
|
|
99
|
+
}));
|
|
100
|
+
if (this.floorOptions.length === 1) {
|
|
101
|
+
this.selectedFloorId = this.floorOptions[0].id;
|
|
102
|
+
}
|
|
103
|
+
this.isLoadingFloor = false;
|
|
104
|
+
},
|
|
105
|
+
error: () => {
|
|
106
|
+
this.toast.getErrorToast("Failed to load floors");
|
|
107
|
+
this.isLoadingFloor = false;
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
openEditor() {
|
|
112
|
+
if (!this.selectedStore?.id || !this.selectedFloorId) {
|
|
113
|
+
this.toast.getErrorToast("Pick a store and floor first");
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// Navigate to the dedicated TouchupEditorComponent route (full clone of
|
|
117
|
+
// manage-planogram with verification UI stripped + save rerouted to
|
|
118
|
+
// /managePlano/updateLayoutTouchup). Same query-param contract as the
|
|
119
|
+
// verification flow uses for planoId / floorId.
|
|
120
|
+
this.router.navigate(["/manage/planogram/layout-touchup-editor"], {
|
|
121
|
+
queryParams: {
|
|
122
|
+
planoId: this.selectedStore.id,
|
|
123
|
+
floorId: this.selectedFloorId,
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutTouchupComponent, deps: [{ token: i1.StoreBuilderService }, { token: i2.GlobalStateService }, { token: i3.ToastService }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
128
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LayoutTouchupComponent, selector: "lib-layout-touchup", ngImport: i0, template: "<div class=\"touchup-selector\">\n <lib-tool-page-header\n title=\"Layout Touchup\"\n description=\"Reposition or resize existing walls, fixtures, entrances and other elements, or tweak individual fixture details \u2014 without invalidating any verification responses.\"\n ></lib-tool-page-header>\n\n <div class=\"row g-3\">\n <div class=\"col-md-6\">\n <lib-reactive-select\n label=\"Store\"\n [idField]=\"'id'\"\n [nameField]=\"'label'\"\n [data]=\"storeOptions\"\n [search]=\"true\"\n [ngModel]=\"selectedStore?.id\"\n (ngModelChange)=\"onStoreChange($event)\">\n </lib-reactive-select>\n <div class=\"text-muted small mt-1\" *ngIf=\"isLoadingStores\">Loading stores...</div>\n <div class=\"text-muted small mt-1\" *ngIf=\"!isLoadingStores\">\n Active stores with a planogram only.\n </div>\n </div>\n\n <div class=\"col-md-6\" *ngIf=\"selectedStore\">\n <ng-container *ngIf=\"isLoadingFloor; else floorPicker\">\n <div class=\"text-muted small\">Loading floors...</div>\n </ng-container>\n <ng-template #floorPicker>\n <lib-reactive-select\n label=\"Floor\"\n [idField]=\"'id'\"\n [nameField]=\"'label'\"\n [data]=\"floorOptions\"\n [search]=\"false\"\n [ngModel]=\"selectedFloorId\"\n (ngModelChange)=\"selectedFloorId = $event\">\n </lib-reactive-select>\n </ng-template>\n </div>\n </div>\n\n <div class=\"mt-4 d-flex justify-content-end\">\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n [disabled]=\"!selectedFloorId || isLoadingFloor\"\n (click)=\"openEditor()\">\n Open Editor\n </button>\n </div>\n</div>\n", styles: [".touchup-selector{max-width:960px}.touchup-selector h4{font-size:18px;font-weight:600;color:#101828}\n"], dependencies: [{ kind: "component", type: i5.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "subTextField", "searchField", "label", "data", "action", "search", "prefix", "actionLabel", "disabled"], outputs: ["actionClick"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.ToolPageHeaderComponent, selector: "lib-tool-page-header", inputs: ["title", "description", "backLink"] }] });
|
|
129
|
+
}
|
|
130
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutTouchupComponent, decorators: [{
|
|
131
|
+
type: Component,
|
|
132
|
+
args: [{ selector: "lib-layout-touchup", template: "<div class=\"touchup-selector\">\n <lib-tool-page-header\n title=\"Layout Touchup\"\n description=\"Reposition or resize existing walls, fixtures, entrances and other elements, or tweak individual fixture details \u2014 without invalidating any verification responses.\"\n ></lib-tool-page-header>\n\n <div class=\"row g-3\">\n <div class=\"col-md-6\">\n <lib-reactive-select\n label=\"Store\"\n [idField]=\"'id'\"\n [nameField]=\"'label'\"\n [data]=\"storeOptions\"\n [search]=\"true\"\n [ngModel]=\"selectedStore?.id\"\n (ngModelChange)=\"onStoreChange($event)\">\n </lib-reactive-select>\n <div class=\"text-muted small mt-1\" *ngIf=\"isLoadingStores\">Loading stores...</div>\n <div class=\"text-muted small mt-1\" *ngIf=\"!isLoadingStores\">\n Active stores with a planogram only.\n </div>\n </div>\n\n <div class=\"col-md-6\" *ngIf=\"selectedStore\">\n <ng-container *ngIf=\"isLoadingFloor; else floorPicker\">\n <div class=\"text-muted small\">Loading floors...</div>\n </ng-container>\n <ng-template #floorPicker>\n <lib-reactive-select\n label=\"Floor\"\n [idField]=\"'id'\"\n [nameField]=\"'label'\"\n [data]=\"floorOptions\"\n [search]=\"false\"\n [ngModel]=\"selectedFloorId\"\n (ngModelChange)=\"selectedFloorId = $event\">\n </lib-reactive-select>\n </ng-template>\n </div>\n </div>\n\n <div class=\"mt-4 d-flex justify-content-end\">\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n [disabled]=\"!selectedFloorId || isLoadingFloor\"\n (click)=\"openEditor()\">\n Open Editor\n </button>\n </div>\n</div>\n", styles: [".touchup-selector{max-width:960px}.touchup-selector h4{font-size:18px;font-weight:600;color:#101828}\n"] }]
|
|
133
|
+
}], ctorParameters: () => [{ type: i1.StoreBuilderService }, { type: i2.GlobalStateService }, { type: i3.ToastService }, { type: i4.Router }] });
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LXRvdWNodXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvbGF5b3V0LXRvdWNodXAvbGF5b3V0LXRvdWNodXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvbGF5b3V0LXRvdWNodXAvbGF5b3V0LXRvdWNodXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFN0QsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLE9BQU8sRUFDUCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFhZDs7Ozs7Ozs7Ozs7R0FXRztBQU1ILE1BQU0sT0FBTyxzQkFBc0I7SUFZdkI7SUFDQTtJQUNBO0lBQ0E7SUFkRixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV2QyxRQUFRLENBQVM7SUFDakIsWUFBWSxHQUF5QixFQUFFLENBQUM7SUFDeEMsYUFBYSxHQUE4QixJQUFJLENBQUM7SUFDaEQsWUFBWSxHQUFvQyxFQUFFLENBQUM7SUFDbkQsZUFBZSxHQUFXLEVBQUUsQ0FBQztJQUM3QixlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFFdkIsWUFDVSxVQUErQixFQUMvQixFQUFzQixFQUN0QixLQUFtQixFQUNuQixNQUFjO1FBSGQsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFDL0IsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDdEIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixX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QUNMLENBQUM7d0dBOUdVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLDBEQ3RDbkMsMnVEQW1EQTs7NEZEYmEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBTdWJqZWN0LFxuICB0YWtlVW50aWwsXG59IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLXNoYXJlZFwiO1xuXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZVwiO1xuXG5pbnRlcmZhY2UgU3RvcmVUb3VjaHVwT3B0aW9uIHtcbiAgaWQ6IHN0cmluZzsgLy8gcGxhbm9JZFxuICBsYWJlbDogc3RyaW5nOyAvLyBzdG9yZU5hbWVcbiAgc3RvcmVJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBMYXlvdXQgVG91Y2h1cCDigJQgaW50ZXJuYWwgdG9vbCBzZWxlY3Rvci5cbiAqXG4gKiBUd28tc3RlcCBzZWxlY3RvciAoU3RvcmUg4oaSIEZsb29yKS4gT24gXCJPcGVuIEVkaXRvclwiLCBuYXZpZ2F0ZXMgdG8gdGhlXG4gKiBleGlzdGluZyBtYW5hZ2UtcGxhbm9ncmFtIHJvdXRlIHdpdGggYHRvdWNodXA9MWAgcXVlcnkgcGFyYW0uIFRoZSBleGlzdGluZ1xuICogTWFuYWdlU3RvcmVQbGFub0NvbXBvbmVudCBkZXRlY3RzIHRoaXMgYW5kIHN3aXRjaGVzIHRvIHRvdWNodXAgYmVoYXZpb3VyOlxuICogICAtIHN0YXR1cy1hZmZlY3RpbmcgYnV0dG9ucyAocHVibGlzaCAvIGFzc2lnbiAvIHJlZG8gLyByZXZva2UpIGhpZGRlblxuICogICAtIFNhdmUgY2FsbHMgL21hbmFnZVBsYW5vL3VwZGF0ZUxheW91dFRvdWNodXAgKG5vIHRhc2sgY2FzY2FkZSlcbiAqXG4gKiBObyBjYW52YXMgcmVuZGVyaW5nIG9yIGZpeHR1cmUgZWRpdG9yIGxpdmVzIGhlcmUg4oCUIHRoZSBleGlzdGluZyBlZGl0LXBsYW5vXG4gKiBzdXJmYWNlIElTIHRoZSBlZGl0b3IsIHNvIHRoZSB2aXN1YWwgaXMgaWRlbnRpY2FsIHRvIHRoZSB2ZXJpZmljYXRpb24gZmxvdy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImxpYi1sYXlvdXQtdG91Y2h1cFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2xheW91dC10b3VjaHVwLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsOiBcIi4vbGF5b3V0LXRvdWNodXAuY29tcG9uZW50LnNjc3NcIixcbn0pXG5leHBvcnQgY2xhc3MgTGF5b3V0VG91Y2h1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgc3RvcmVPcHRpb25zOiBTdG9yZVRvdWNodXBPcHRpb25bXSA9IFtdO1xuICBzZWxlY3RlZFN0b3JlOiBTdG9yZVRvdWNodXBPcHRpb24gfCBudWxsID0gbnVsbDtcbiAgZmxvb3JPcHRpb25zOiB7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdID0gW107XG4gIHNlbGVjdGVkRmxvb3JJZDogc3RyaW5nID0gXCJcIjtcbiAgaXNMb2FkaW5nU3RvcmVzID0gZmFsc2U7XG4gIGlzTG9hZGluZ0Zsb29yID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXG4gICAgICAgIGZpbHRlcigoZCkgPT4gISFkKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50SWQgPVxuICAgICAgICAgIGRhdGE/LmNsaWVudCA/P1xuICAgICAgICAgIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmcpPy5jbGllbnQ7XG4gICAgICAgIHRoaXMubG9hZFN0b3JlcygpO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBsb2FkU3RvcmVzKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nU3RvcmVzID0gdHJ1ZTtcbiAgICB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRTdG9yZXNGb3JUb3VjaHVwKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBCRSByZXR1cm5zIGFjdGl2ZSBzdG9yZXMgd2l0aCBleGFjdGx5IG9uZSBwbGFubzsgYGlkYCBpcyBwbGFub0lkLlxuICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gcmVzPy5kYXRhID8/IFtdO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nU3RvcmVzID0gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGxvYWQgc3RvcmVzXCIpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nU3RvcmVzID0gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIG9uU3RvcmVDaGFuZ2UocGxhbm9JZDogc3RyaW5nIHwgbnVsbCkge1xuICAgIGNvbnN0IG9wdCA9IHRoaXMuc3RvcmVPcHRpb25zLmZpbmQoKHMpID0+IHMuaWQgPT09IHBsYW5vSWQpO1xuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZSA9IG9wdCA/PyBudWxsO1xuICAgIHRoaXMuZmxvb3JPcHRpb25zID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEZsb29ySWQgPSBcIlwiO1xuICAgIGlmICghb3B0KSByZXR1cm47XG4gICAgdGhpcy5sb2FkRmxvb3JzRm9yUGxhbm8ob3B0LmlkKTtcbiAgfVxuXG4gIGxvYWRGbG9vcnNGb3JQbGFubyhwbGFub0lkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzTG9hZGluZ0Zsb29yID0gdHJ1ZTtcbiAgICB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRTdG9yZUZpeHR1cmVzKHsgaWQ6IFtwbGFub0lkXSwgdHJlZVZpZXc6IHRydWUgfSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBwbGFubyA9IHJlcz8uZGF0YT8uWzBdO1xuICAgICAgICAgIGlmICghcGxhbm8/LmZsb29ycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJObyBmbG9vcnMgZm91bmQgZm9yIHRoaXMgcGxhbm9cIik7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ0Zsb29yID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZmxvb3JPcHRpb25zID0gcGxhbm8uZmxvb3JzLm1hcCgoZjogYW55KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IGYuX2lkLFxuICAgICAgICAgICAgbGFiZWw6IGBGbG9vciAke2YuZmxvb3JOdW19YCxcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgaWYgKHRoaXMuZmxvb3JPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29ySWQgPSB0aGlzLmZsb29yT3B0aW9uc1swXS5pZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdGbG9vciA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBsb2FkIGZsb29yc1wiKTtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ0Zsb29yID0gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIG9wZW5FZGl0b3IoKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkU3RvcmU/LmlkIHx8ICF0aGlzLnNlbGVjdGVkRmxvb3JJZCkge1xuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFwiUGljayBhIHN0b3JlIGFuZCBmbG9vciBmaXJzdFwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gTmF2aWdhdGUgdG8gdGhlIGRlZGljYXRlZCBUb3VjaHVwRWRpdG9yQ29tcG9uZW50IHJvdXRlIChmdWxsIGNsb25lIG9mXG4gICAgLy8gbWFuYWdlLXBsYW5vZ3JhbSB3aXRoIHZlcmlmaWNhdGlvbiBVSSBzdHJpcHBlZCArIHNhdmUgcmVyb3V0ZWQgdG9cbiAgICAvLyAvbWFuYWdlUGxhbm8vdXBkYXRlTGF5b3V0VG91Y2h1cCkuIFNhbWUgcXVlcnktcGFyYW0gY29udHJhY3QgYXMgdGhlXG4gICAgLy8gdmVyaWZpY2F0aW9uIGZsb3cgdXNlcyBmb3IgcGxhbm9JZCAvIGZsb29ySWQuXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21hbmFnZS9wbGFub2dyYW0vbGF5b3V0LXRvdWNodXAtZWRpdG9yXCJdLCB7XG4gICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICBwbGFub0lkOiB0aGlzLnNlbGVjdGVkU3RvcmUuaWQsXG4gICAgICAgIGZsb29ySWQ6IHRoaXMuc2VsZWN0ZWRGbG9vcklkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRvdWNodXAtc2VsZWN0b3JcIj5cbiAgPGxpYi10b29sLXBhZ2UtaGVhZGVyXG4gICAgdGl0bGU9XCJMYXlvdXQgVG91Y2h1cFwiXG4gICAgZGVzY3JpcHRpb249XCJSZXBvc2l0aW9uIG9yIHJlc2l6ZSBleGlzdGluZyB3YWxscywgZml4dHVyZXMsIGVudHJhbmNlcyBhbmQgb3RoZXIgZWxlbWVudHMsIG9yIHR3ZWFrIGluZGl2aWR1YWwgZml4dHVyZSBkZXRhaWxzIOKAlCB3aXRob3V0IGludmFsaWRhdGluZyBhbnkgdmVyaWZpY2F0aW9uIHJlc3BvbnNlcy5cIlxuICA+PC9saWItdG9vbC1wYWdlLWhlYWRlcj5cblxuICA8ZGl2IGNsYXNzPVwicm93IGctM1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3RcbiAgICAgICAgbGFiZWw9XCJTdG9yZVwiXG4gICAgICAgIFtpZEZpZWxkXT1cIidpZCdcIlxuICAgICAgICBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxuICAgICAgICBbZGF0YV09XCJzdG9yZU9wdGlvbnNcIlxuICAgICAgICBbc2VhcmNoXT1cInRydWVcIlxuICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFN0b3JlPy5pZFwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU3RvcmVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbXQtMVwiICpuZ0lmPVwiaXNMb2FkaW5nU3RvcmVzXCI+TG9hZGluZyBzdG9yZXMuLi48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG10LTFcIiAqbmdJZj1cIiFpc0xvYWRpbmdTdG9yZXNcIj5cbiAgICAgICAgQWN0aXZlIHN0b3JlcyB3aXRoIGEgcGxhbm9ncmFtIG9ubHkuXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwic2VsZWN0ZWRTdG9yZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ0Zsb29yOyBlbHNlIGZsb29yUGlja2VyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+TG9hZGluZyBmbG9vcnMuLi48L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNmbG9vclBpY2tlcj5cbiAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3RcbiAgICAgICAgICBsYWJlbD1cIkZsb29yXCJcbiAgICAgICAgICBbaWRGaWVsZF09XCInaWQnXCJcbiAgICAgICAgICBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxuICAgICAgICAgIFtkYXRhXT1cImZsb29yT3B0aW9uc1wiXG4gICAgICAgICAgW3NlYXJjaF09XCJmYWxzZVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRGbG9vcklkXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RlZEZsb29ySWQgPSAkZXZlbnRcIj5cbiAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm10LTQgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRGbG9vcklkIHx8IGlzTG9hZGluZ0Zsb29yXCJcbiAgICAgIChjbGljayk9XCJvcGVuRWRpdG9yKClcIj5cbiAgICAgIE9wZW4gRWRpdG9yXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|