tango-app-ui-store-builder 1.0.47 → 1.0.49
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/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +39 -19
- package/esm2022/lib/components/create-fixture/create-fixture.component.mjs +233 -138
- package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +4 -2
- package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +4 -2
- package/esm2022/lib/components/fixture-template/template-basic-details/template-basic-details.component.mjs +40 -4
- package/esm2022/lib/components/fixture-template/template-products/template-products.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-summary/template-summary.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-vms/template-vms.component.mjs +108 -79
- package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +7 -3
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +4 -2
- package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +27 -4
- package/esm2022/lib/components/manage-store-plano/template-products/template-products.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +10 -14
- package/esm2022/lib/components/manage-store-plano/verification-feedback/editable-fixture/editable-fixture.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +3 -3
- package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +4 -2
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.mjs +11 -5
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +14 -9
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.mjs +39 -7
- package/esm2022/lib/components/planogram/merch-compliance/zone-products/zone-products.component.mjs +18 -5
- package/esm2022/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.mjs +68 -0
- package/esm2022/lib/components/planogram/plano-analytics/date-range-picker/date-range-picker.component.mjs +5 -5
- package/esm2022/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.mjs +649 -0
- package/esm2022/lib/components/planogram/plano-analytics/plano-analytics.component.mjs +1197 -25
- package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +14 -7
- package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +8 -4
- package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +17 -9
- package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +3 -3
- package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -2
- package/esm2022/lib/components/store-plano/store-plano.component.mjs +4 -2
- package/esm2022/lib/interfaces/fixture-library.interface.mjs +1 -1
- package/esm2022/lib/services/store-builder.service.mjs +4 -1
- package/esm2022/lib/tango-store-builder.module.mjs +8 -2
- package/fesm2022/tango-app-ui-store-builder.mjs +2996 -834
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/create-fixture/create-fixture.component.d.ts +15 -14
- package/lib/components/fixture-template/template-basic-details/template-basic-details.component.d.ts +2 -0
- package/lib/components/fixture-template/template-vms/template-vms.component.d.ts +12 -12
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +2 -2
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +4 -4
- package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +2 -0
- package/lib/components/manage-store-plano/template-vms/template-vms.component.d.ts +0 -1
- package/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.d.ts +4 -2
- package/lib/components/planogram/merch-compliance/product-locator/product-locator.component.d.ts +3 -2
- package/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.d.ts +10 -3
- package/lib/components/planogram/merch-compliance/zone-products/zone-products.component.d.ts +4 -2
- package/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.d.ts +25 -0
- package/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.d.ts +94 -0
- package/lib/components/planogram/plano-analytics/plano-analytics.component.d.ts +76 -3
- package/lib/components/planogram/plano-details-parent/plano-details-parent.component.d.ts +3 -2
- package/lib/interfaces/fixture-library.interface.d.ts +1 -1
- package/lib/services/store-builder.service.d.ts +1 -0
- package/lib/tango-store-builder.module.d.ts +26 -24
- package/package.json +1 -1
package/esm2022/lib/components/fixture-template/template-summary/template-summary.component.mjs
CHANGED
|
@@ -632,10 +632,10 @@ export class TemplateSummaryComponent {
|
|
|
632
632
|
this.destroy$.complete();
|
|
633
633
|
}
|
|
634
634
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TemplateSummaryComponent, deps: [{ token: i1.PlanoDataService }, { token: i2.StoreBuilderService }, { token: i3.GlobalStateService }, { token: i4.ToastService }, { token: i5.NgbModal }, { token: i6.Router }, { token: i3.PageInfoService }, { token: i0.ChangeDetectorRef }, { token: i6.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
635
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TemplateSummaryComponent, selector: "lib-template-summary", ngImport: i0, template: "<section class=\"content-wrapper\" id=\"template-summary\" *ngIf=\"!isPageLoading\">\r\n <!-- ===============Header Info Cards=================== -->\r\n <div id=\"header\" class=\"row mx-0 my-5 gap-3 mb-7\">\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.fixtureType | titlecase }} fixture</h3>\r\n <p>Type</p>\r\n </div>\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.shelfConfig?.length }}</h3>\r\n <p>No of Shelves</p>\r\n </div>\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.fixtureCapacity }}</h3>\r\n <p>Product Capacity</p>\r\n </div>\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.variantCount ?? 0 }}</h3>\r\n <p>Variants</p>\r\n </div>\r\n </div>\r\n\r\n @if(fixtureTemplateDetails?.templateType !== 'master'){\r\n <div class=\"ms-3 mb-7\">\r\n <h4>All versions</h4>\r\n <span>Showing all the updated versions over the time.</span>\r\n </div>\r\n }\r\n\r\n <div class=\"d-flex gap-5\">\r\n <!-- <div class=\"d-flex flex-column gap-2 position-absolute\">\r\n <div class=\"form-check form-switch\">\r\n <input\r\n class=\"form-check-input\"\r\n [checked]=\"showProductSpots\"\r\n [(ngModel)]=\"showProductSpots\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n type=\"checkbox\"\r\n id=\"showProductSpots\"\r\n />\r\n <label class=\"form-check-label sub ms-2\" for=\"showProductSpots\">Show Product Spots</label>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n class=\"form-check-input\"\r\n [checked]=\"showVMs\"\r\n [(ngModel)]=\"showVMs\"\r\n (ngModelChange)=\"onChangeVmVisibility()\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n type=\"checkbox\"\r\n id=\"showVMs\"\r\n />\r\n <label class=\"form-check-label sub ms-2\" for=\"showVMs\">Show VMs</label>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n class=\"form-check-input\"\r\n [checked]=\"showBrandCategory\"\r\n [(ngModel)]=\"showBrandCategory\"\r\n (ngModelChange)=\"onChangeBrandAndCategoryVisibility()\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n type=\"checkbox\"\r\n id=\"showBrandCategory\"\r\n />\r\n <label class=\"form-check-label sub ms-2\" for=\"showBrandCategory\">Show Brands & Categories</label>\r\n </div>\r\n </div> -->\r\n\r\n @if(fixtureTemplateDetails?.templateType !== 'master'){\r\n <div class=\"version-block\">\r\n @if(templateVersions.length){ @for (version of templateVersions; track $index; let first = $first) {\r\n <div class=\"version-tile\" [class.active]=\"this.selectedVersionId === version._id\" (click)=\"onSelectVersion(version)\">\r\n <p>Last updated: {{ version.updatedAt | date : \"medium\" }}</p>\r\n @if(first){\r\n <div class=\"badge active\">Active</div>\r\n }\r\n </div>\r\n } }@else {\r\n <div class=\"no-version-block\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M8.94922 21.1997C8.64792 21.2315 8.34121 21.2505 8.03027 21.2505C7.86075 21.2505 7.69345 21.2436 7.52832 21.2339V31.6069C7.52832 33.0349 8.7113 34.226 10.1992 34.2261H29.8037C31.2917 34.2261 32.4746 33.035 32.4746 31.6069V21.2349C32.3127 21.2441 32.1488 21.2505 31.9844 21.2505C31.6704 21.2505 31.3598 21.2325 31.0537 21.1997V28.9878H8.94922V21.1997ZM30.9307 5.77393H9.07227C8.8949 5.77393 8.73964 5.86671 8.66211 5.98779L8.66016 5.98975L5.15039 11.4731L5.05566 11.6206C3.83012 13.7404 5.09473 16.4674 7.44629 16.7769C7.64721 16.8013 7.83696 16.8159 8.02441 16.8159C9.25449 16.8159 10.3424 16.2872 11.0996 15.4653L12.0215 14.4644L12.9404 15.4683C13.6894 16.2863 14.7761 16.8159 16.0137 16.8159C17.2457 16.8158 18.3376 16.2856 19.0859 15.4683L20.0078 14.4614L20.9297 15.4683C21.6781 16.2857 22.7697 16.8159 24.002 16.8159C25.2342 16.8159 26.3258 16.2857 27.0742 15.4683L27.9961 14.4614L28.918 15.4683C29.6664 16.2857 30.759 16.8159 31.9912 16.8159C32.1726 16.8159 32.3677 16.8021 32.5674 16.7778H32.5664C34.9602 16.4573 36.2283 13.6078 34.8604 11.4731L34.8594 11.4741L31.3428 5.99072L31.3418 5.98779C31.2644 5.86652 31.1082 5.77393 30.9307 5.77393Z\"\r\n stroke=\"#00A3FF\"\r\n stroke-width=\"2.5\"\r\n />\r\n </svg>\r\n\r\n <span>No versions history available </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div id=\"vm-products-sum\" class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div\r\n class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\r\n <p>{{ fixtureTemplateDetails?.header?.label }}</p>\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <!----------------------------------[VM BLOCK]--------------------------------------->\r\n <div *ngIf=\"fixtureTemplateDetails?.vmConfig?.length\">\r\n <ng-container *ngFor=\"let vm of fixtureTemplateDetails?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container *ngIf=\"getSelectedVM(vm) as selectedVM\">\r\n <img *ngIf=\"selectedVM?.imgUrl; else placeholder\" [src]=\"selectedVM?.imgUrl\" alt=\"Vm Image\" />\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder\">\r\n <h3>{{ selectedVM?.name }}</h3>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!----------------------------------[FIXTURE LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"fixture-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L1'\">\r\n <div\r\n id=\"brand-category\"\r\n class=\"brand-category\"\r\n *ngIf=\"fixtureTemplateDetails?.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\"\r\n >\r\n <span class=\"brand\">\r\n <ng-container *ngFor=\"let b of fixtureTemplateDetails?.productBrandName; let last = last\">\r\n <span class=\"badge draft me-1\">\r\n {{ b }}\r\n </span>\r\n </ng-container>\r\n </span>\r\n <span class=\"category\" *ngIf=\"fixtureTemplateDetails?.productCategory?.length\">\r\n <ng-container *ngFor=\"let c of fixtureTemplateDetails?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of fixtureTemplateDetails?.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"fixtureTemplateDetails?.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of fixtureTemplateDetails?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <!-----------------------------------[SECTION LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"section-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L3'\">\r\n <!-- <div id=\"body-loader\">\r\n <div class=\"loader\"></div>\r\n </div> -->\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\" [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"badge draft me-1\">\r\n {{ item.zone }}\r\n </span>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <span class=\"brand\" *ngIf=\"item?.section?.brands?.length\">\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n <span *ngIf=\"item?.section?.categories?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item?.section?.categories?.length\">\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n <p *ngIf=\"item?.section?.categories?.length\">\r\n <b>Categories: </b>\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n </div>\r\n </ng-template>\r\n }\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <div [id]=\"'sumShelfContainer' + i\" *ngFor=\"let item of fixtureTemplateDetails?.shelfConfig; let i = index\">\r\n <!--------------------------------[SHELF LEVEL - BRAND CATEGORY]---------------------------------------->\r\n <div id=\"shelf-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L2'\">\r\n <div\r\n [id]=\"'brand-category' + i\"\r\n class=\"brand-category\"\r\n *ngIf=\"item.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\"\r\n >\r\n <span class=\"brand\" *ngIf=\"item.productBrandName?.length\">\r\n <ng-container *ngFor=\"let b of item.productBrandName; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n <span *ngIf=\"item.productCategory?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item.productCategory?.length\">\r\n <ng-container *ngFor=\"let b of item.productCategory; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of item.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"item.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of item.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n @if(item.shelfType ==='shelf'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div\r\n class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateDetails?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n <div style=\"width: 200px\"></div>\r\n </div>\r\n\r\n <!-- ===============Footer Info Cards=================== -->\r\n @if(fixtureTemplateDetails?.templateType === 'master'){\r\n <div id=\"footer\" class=\"row mx-0 my-5 gap-2\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-5\">\r\n <div>\r\n <h4>All variants</h4>\r\n <span>Showing all variants derived from this reference/master template.</span>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-2\" *ngIf=\"fixtureTemplatesList.length || searchTerm\">\r\n <div style=\"position: relative\" [ngClass]=\"{ 'd-none': viewMode === 'tree' }\">\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"searchTerm\"\r\n (change)=\"onSearch()\"\r\n style=\"padding-left: 3rem; padding-right: 3rem\"\r\n class=\"form-control\"\r\n name=\"search\"\r\n autocomplete=\"off\"\r\n placeholder=\"Search\"\r\n />\r\n\r\n <span class=\"search-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-width=\"2\" />\r\n <line x1=\"13\" y1=\"13\" x2=\"16\" y2=\"16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n\r\n <button *ngIf=\"searchTerm\" type=\"button\" aria-label=\"Clear\" (click)=\"searchTerm = ''; onSearch()\" class=\"clear-search\">\r\n <svg width=\"64px\" height=\"64px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path d=\"M9 9L15 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <path d=\"M15 9L9 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"9\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n ></circle>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div class=\"toggle-button me-1\" [ngClass]=\"{ selected: viewMode === 'list' }\" (click)=\"toggleViewMode('list')\">\r\n <svg width=\"19\" height=\"18\" viewBox=\"0 0 19 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M6.24078 4.54639H15.8906M6.24078 9.00017H15.8906M6.24078 13.4539H15.8906M2.5293 4.54639H2.53672M2.5293 9.00017H2.53672M2.5293 13.4539H2.53672\"\r\n [attr.stroke]=\"viewMode === 'list' ? '#009BF3' : '#344054'\"\r\n stroke-width=\"1.48756\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"toggle-button\" [ngClass]=\"{ selected: viewMode === 'tree' }\" (click)=\"toggleViewMode('tree')\">\r\n <svg width=\"19\" height=\"18\" viewBox=\"0 0 19 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9.92678 10.4845C7.43266 10.4845 6.61613 11.4866 6.3489 12.1472C7.14316 12.4887 7.69988 13.2755 7.69988 14.196C7.69988 14.7866 7.46527 15.353 7.04764 15.7706C6.63002 16.1882 6.0636 16.4228 5.47299 16.4228C4.88239 16.4228 4.31597 16.1882 3.89834 15.7706C3.48072 15.353 3.2461 14.7866 3.2461 14.196C3.2461 13.2235 3.86221 12.3996 4.7307 12.0953V5.9045C4.29573 5.75187 3.91908 5.4676 3.65304 5.09115C3.387 4.7147 3.24477 4.26476 3.2461 3.8038C3.2461 3.21319 3.48072 2.64677 3.89834 2.22915C4.31597 1.81152 4.88239 1.5769 5.47299 1.5769C6.0636 1.5769 6.63002 1.81152 7.04764 2.22915C7.46527 2.64677 7.69988 3.21319 7.69988 3.8038C7.69988 4.7762 7.08378 5.60015 6.21529 5.9045V9.83125C6.86851 9.34875 7.81865 8.99987 9.18448 8.99987C11.1664 8.99987 11.8271 8.0052 12.0423 7.34455C11.6362 7.17537 11.2892 6.88992 11.0449 6.52407C10.8005 6.15823 10.6698 5.72832 10.6691 5.28839C10.6691 4.69778 10.9037 4.13136 11.3213 3.71374C11.7389 3.29612 12.3054 3.0615 12.896 3.0615C13.4866 3.0615 14.053 3.29612 14.4706 3.71374C14.8882 4.13136 15.1229 4.69778 15.1229 5.28839C15.1229 6.28307 14.4696 7.14413 13.5715 7.41136C13.3785 8.47284 12.6584 10.4845 9.92678 10.4845ZM5.47299 13.4537C5.27612 13.4537 5.08732 13.5319 4.94811 13.6711C4.8089 13.8103 4.7307 13.9991 4.7307 14.196C4.7307 14.3928 4.8089 14.5816 4.94811 14.7208C5.08732 14.86 5.27612 14.9383 5.47299 14.9383C5.66986 14.9383 5.85867 14.86 5.99788 14.7208C6.13708 14.5816 6.21529 14.3928 6.21529 14.196C6.21529 13.9991 6.13708 13.8103 5.99788 13.6711C5.85867 13.5319 5.66986 13.4537 5.47299 13.4537ZM5.47299 3.0615C5.27612 3.0615 5.08732 3.1397 4.94811 3.27891C4.8089 3.41812 4.7307 3.60693 4.7307 3.8038C4.7307 4.00066 4.8089 4.18947 4.94811 4.32868C5.08732 4.46789 5.27612 4.54609 5.47299 4.54609C5.66986 4.54609 5.85867 4.46789 5.99788 4.32868C6.13708 4.18947 6.21529 4.00066 6.21529 3.8038C6.21529 3.60693 6.13708 3.41812 5.99788 3.27891C5.85867 3.1397 5.66986 3.0615 5.47299 3.0615ZM12.896 4.54609C12.6991 4.54609 12.5103 4.6243 12.3711 4.76351C12.2319 4.90271 12.1537 5.09152 12.1537 5.28839C12.1537 5.48526 12.2319 5.67406 12.3711 5.81327C12.5103 5.95248 12.6991 6.03069 12.896 6.03069C13.0928 6.03069 13.2816 5.95248 13.4208 5.81327C13.5601 5.67406 13.6383 5.48526 13.6383 5.28839C13.6383 5.09152 13.5601 4.90271 13.4208 4.76351C13.2816 4.6243 13.0928 4.54609 12.896 4.54609Z\"\r\n fill=\"#344054\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"loading; else contentPart\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #contentPart>\r\n <div *ngIf=\"!fixtureTemplatesList.length\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7.10938\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7.10938\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M48.6668 50.4427C43.0668 50.4427 41.2334 52.6927 40.6334 54.176C42.4168 54.9427 43.6668 56.7094 43.6668 58.776C43.6668 60.1021 43.14 61.3739 42.2023 62.3116C41.2646 63.2492 39.9929 63.776 38.6668 63.776C37.3407 63.776 36.0689 63.2492 35.1312 62.3116C34.1936 61.3739 33.6668 60.1021 33.6668 58.776C33.6668 56.5927 35.0501 54.7427 37.0001 54.0594V40.1594C36.0235 39.8167 35.1778 39.1784 34.5805 38.3332C33.9831 37.4879 33.6638 36.4777 33.6668 35.4427C33.6668 34.1166 34.1936 32.8448 35.1312 31.9072C36.0689 30.9695 37.3407 30.4427 38.6668 30.4427C39.9929 30.4427 41.2646 30.9695 42.2023 31.9072C43.14 32.8448 43.6668 34.1166 43.6668 35.4427C43.6668 37.626 42.2834 39.476 40.3334 40.1594V48.976C41.8001 47.8927 43.9334 47.1094 47.0001 47.1094C51.4501 47.1094 52.9334 44.876 53.4168 43.3927C52.505 43.0128 51.7258 42.3719 51.1772 41.5505C50.6286 40.7291 50.335 39.7638 50.3334 38.776C50.3334 37.4499 50.8602 36.1782 51.7979 35.2405C52.7356 34.3028 54.0074 33.776 55.3334 33.776C56.6595 33.776 57.9313 34.3028 58.869 35.2405C59.8067 36.1782 60.3334 37.4499 60.3334 38.776C60.3334 41.0094 58.8668 42.9427 56.8501 43.5427C56.4168 45.926 54.8001 50.4427 48.6668 50.4427ZM38.6668 57.1094C38.2247 57.1094 37.8008 57.2849 37.4883 57.5975C37.1757 57.9101 37.0001 58.334 37.0001 58.776C37.0001 59.218 37.1757 59.642 37.4883 59.9545C37.8008 60.2671 38.2247 60.4427 38.6668 60.4427C39.1088 60.4427 39.5327 60.2671 39.8453 59.9545C40.1578 59.642 40.3334 59.218 40.3334 58.776C40.3334 58.334 40.1578 57.9101 39.8453 57.5975C39.5327 57.2849 39.1088 57.1094 38.6668 57.1094ZM38.6668 33.776C38.2247 33.776 37.8008 33.9516 37.4883 34.2642C37.1757 34.5767 37.0001 35.0007 37.0001 35.4427C37.0001 35.8847 37.1757 36.3086 37.4883 36.6212C37.8008 36.9338 38.2247 37.1094 38.6668 37.1094C39.1088 37.1094 39.5327 36.9338 39.8453 36.6212C40.1578 36.3086 40.3334 35.8847 40.3334 35.4427C40.3334 35.0007 40.1578 34.5767 39.8453 34.2642C39.5327 33.9516 39.1088 33.776 38.6668 33.776ZM55.3334 37.1094C54.8914 37.1094 54.4675 37.2849 54.1549 37.5975C53.8424 37.9101 53.6668 38.334 53.6668 38.776C53.6668 39.218 53.8424 39.642 54.1549 39.9545C54.4675 40.2671 54.8914 40.4427 55.3334 40.4427C55.7755 40.4427 56.1994 40.2671 56.5119 39.9545C56.8245 39.642 57.0001 39.218 57.0001 38.776C57.0001 38.334 56.8245 37.9101 56.5119 37.5975C56.1994 37.2849 55.7755 37.1094 55.3334 37.1094Z\"\r\n fill=\"#009BF3\"\r\n />\r\n </svg>\r\n <div class=\"nodatamaintext mt-3\">No variants found</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"fixtureTemplatesList.length\">\r\n <!-- Fixture Template list view -->\r\n <section id=\"list-view\" *ngIf=\"viewMode === 'list'\">\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\" *ngIf=\"fixtureTemplatesList.length\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <span (click)=\"sortTable('fixtureName')\" class=\"cursor-pointer\">\r\n Variant\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'fixtureName' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'fixtureName' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('storeCount')\" class=\"cursor-pointer\">\r\n Assigned Stores\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'storeCount' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'storeCount' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('productBrandName')\" class=\"cursor-pointer\">\r\n Brand\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'productBrandName' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'productBrandName' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('productCategory')\" class=\"cursor-pointer\">\r\n Product category\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'productCategory' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'productCategory' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('status')\" class=\"cursor-pointer\">\r\n Status\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'status' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'status' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('updatedAt')\" class=\"cursor-pointer\">\r\n Last Update\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'status' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'status' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let childTemplate of fixtureTemplatesList\">\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <div class=\"thumbnail\"></div> -->\r\n <div>\r\n <a\r\n [routerLink]=\"['/manage/planogram/fixture-template/basic-details']\"\r\n [queryParams]=\"{ templateId: childTemplate._id, isEdit: false }\"\r\n class=\"text-decoration-underline\"\r\n >\r\n {{ childTemplate.fixtureName }}\r\n </a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div>\r\n <a\r\n [routerLink]=\"['/manage/planogram/fixture-template/basic-details']\"\r\n [queryParams]=\"{ templateId: childTemplate._id, isEdit: false }\"\r\n class=\"text-decoration-underline\"\r\n >\r\n {{ childTemplate.storeCount }}\r\n </a>\r\n </div>\r\n </td>\r\n <td>\r\n <span *ngIf=\"childTemplate.productBrandName.length <= 0\"> - </span>\r\n\r\n <div [ngbTooltip]=\"brandTooltip\" class=\"cursor-pointer\">\r\n <div *ngFor=\"let b of childTemplate.productBrandName; let i = index\" class=\"badge inactive me-2\">\r\n <span *ngIf=\"i <= 2\"> {{ b }} </span>\r\n <span *ngIf=\"i === 3\"> +{{ childTemplate.productBrandName.length - 3 }} </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandTooltip>\r\n <ng-container *ngFor=\"let c of childTemplate.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <span *ngIf=\"childTemplate.productCategory.length <= 0\"> - </span>\r\n\r\n <div [ngbTooltip]=\"categoryTooltip\" class=\"cursor-pointer\">\r\n <div *ngFor=\"let item of childTemplate.productCategory; let i = index\" class=\"badge inactive me-2\">\r\n <span *ngIf=\"i <= 2\"> {{ item }} </span>\r\n <span *ngIf=\"i === 3\"> +{{ childTemplate.productCategory.length - 3 }} </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #categoryTooltip>\r\n <ng-container *ngFor=\"let c of childTemplate.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <div class=\"badge\" [ngClass]=\"childTemplate.status\">{{ childTemplate.status | titlecase }}</div>\r\n </td>\r\n <td>\r\n <span [ngbTooltip]=\"childTemplate?.updatedAt | date : 'medium'\">\r\n {{ childTemplate?.updatedAt | date }}\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"dropdown\">\r\n <button class=\"btn btn-link p-0\" type=\"button\" data-bs-toggle=\"dropdown\">\r\n <i class=\"bi bi-three-dots-vertical\"></i>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li><a class=\"dropdown-item cursor-pointer\" (click)=\"onEdit(childTemplate._id!)\">Edit</a></li>\r\n <li>\r\n <a class=\"dropdown-item cursor-pointer\" (click)=\"onDuplicate(childTemplate._id!)\">Duplicate</a>\r\n </li>\r\n <li>\r\n <a\r\n class=\"dropdown-item cursor-pointer\"\r\n [routerLink]=\"['/manage/planogram/findAndReplace']\"\r\n [queryParams]=\"{ selectedFixture: childTemplate._id }\"\r\n >Find and replace</a\r\n >\r\n </li>\r\n <li>\r\n <a\r\n class=\"dropdown-item cursor-pointer text-danger\"\r\n (click)=\"onDelete(childTemplate._id!, childTemplate.storeCount)\"\r\n >\r\n Delete\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <lib-pagination\r\n *ngIf=\"fixtureTemplatesList.length\"\r\n [itemsPerPage]=\"limit\"\r\n [currentPage]=\"offset\"\r\n [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\"\r\n [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n >\r\n </lib-pagination>\r\n </div>\r\n </section>\r\n\r\n <!-- Fixture Template tree view -->\r\n <section id=\"tree-view\" *ngIf=\"viewMode === 'tree'\">\r\n <fixture-template-tree [masterFixtureData]=\"fixtureTemplateDetails\" [viewMode]=\"'master'\"></fixture-template-tree>\r\n </section>\r\n </div>\r\n </ng-template>\r\n </div>\r\n }\r\n</section>\r\n\r\n<section id=\"template-summary-skeleton\" *ngIf=\"isPageLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.badge.inactive{background:#f2f4f7!important;color:#344054!important}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}#template-summary #vm-products-sum{margin:0 auto}#template-summary #vm-products-sum .body-block{position:relative}#template-summary #vm-products-sum .body-block .block{border:none}#template-summary #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid var(--Primary-200, #99daff);background:var(--White, #fff);top:50%;left:50%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#template-summary #vm-products-sum #fixture-level .brand,#template-summary #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#template-summary #vm-products-sum #fixture-level .category{margin-top:12px}#template-summary #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#template-summary #vm-products-sum #section-level .brand,#template-summary #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#template-summary #vm-products-sum #section-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#template-summary #vm-products-sum #section-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#template-summary #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#template-summary #vm-products-sum #section-level #body-loader{height:100%;width:100%;position:absolute;display:flex;justify-content:center;align-items:center;z-index:1;background:#fff3;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(10px)}#template-summary #vm-products-sum #section-level #body-loader .loader{width:30px;height:30px;border:4px solid #f3f3f3;border-top:4px solid #00a3ff;border-radius:50%;animation:spin 1s linear infinite;margin:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#template-summary #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#template-summary #vm-products-sum #shelf-level .brand,#template-summary #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#template-summary #vm-products-sum #shelf-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#template-summary #vm-products-sum #shelf-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#template-summary #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#template-summary #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}#template-summary #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#template-summary #vm-products-sum .sub-footer{position:relative;width:48%}#template-summary #vm-products-sum img{width:100%;height:100%;display:block}#template-summary #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;transition:all .3s ease}#template-summary #vm-products-sum .vm-block h3{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;margin:0;width:100%;text-overflow:ellipsis;overflow:hidden}#template-summary #vm-products-sum .vm-placeholder{border:4px solid var(--Black, #101828);background:#f9fafb;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:8px;white-space:nowrap;overflow:hidden}#template-summary .filter-tab{border-radius:6px;background:var(--Gray-50, #f9fafb);border:none;cursor:default}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.nodatamaintext{color:var(--Black, #101828);text-align:center;font-family:Inter;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.version-block{max-width:430px;border-right:1px solid var(--Gray-300, #d0d5dd);padding:12px;background:#fff}.version-block .version-tile{border-radius:4px;display:flex;width:412px;padding:14px 12px;align-items:center;justify-content:space-between;gap:35px;cursor:pointer}.version-block .version-tile p{color:var(--Gray-900, #101828);font-size:14px;font-weight:500;line-height:20px;margin:0}.version-block .version-tile.active{background:var(--Primary-50, #eaf8ff)}.version-block .version-tile:hover{background:#eff9fd}.no-version-block{display:flex;justify-content:center;align-items:center;flex-direction:column;gap:12px;width:100%;min-width:0;max-width:400px;padding:32px;border-radius:12px;background:var(--Gray-50, #f9fafb)}.no-version-block span{color:var(--Black, #101828);text-align:center;font-size:16px;font-weight:500}\n"], dependencies: [{ kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i5.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i9.TemplateTreeComponent, selector: "fixture-template-tree", inputs: ["viewMode", "clientId", "masterFixtureData", "allFixture"] }, { kind: "pipe", type: i7.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
|
|
635
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TemplateSummaryComponent, selector: "lib-template-summary", ngImport: i0, template: "<section class=\"content-wrapper\" id=\"template-summary\" *ngIf=\"!isPageLoading\">\r\n <!-- ===============Header Info Cards=================== -->\r\n <div id=\"header\" class=\"row mx-0 my-5 gap-3 mb-7\">\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.fixtureType | titlecase }} fixture</h3>\r\n <p>Type</p>\r\n </div>\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.shelfConfig?.length }}</h3>\r\n <p>No of Shelves</p>\r\n </div>\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.fixtureCapacity }}</h3>\r\n <p>Product Capacity</p>\r\n </div>\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.variantCount ?? 0 }}</h3>\r\n <p>Variants</p>\r\n </div>\r\n </div>\r\n\r\n @if(fixtureTemplateDetails?.templateType !== 'master'){\r\n <div class=\"ms-3 mb-7\">\r\n <h4>All versions</h4>\r\n <span>Showing all the updated versions over the time.</span>\r\n </div>\r\n }\r\n\r\n <div class=\"d-flex gap-5\">\r\n <!-- <div class=\"d-flex flex-column gap-2 position-absolute\">\r\n <div class=\"form-check form-switch\">\r\n <input\r\n class=\"form-check-input\"\r\n [checked]=\"showProductSpots\"\r\n [(ngModel)]=\"showProductSpots\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n type=\"checkbox\"\r\n id=\"showProductSpots\"\r\n />\r\n <label class=\"form-check-label sub ms-2\" for=\"showProductSpots\">Show Product Spots</label>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n class=\"form-check-input\"\r\n [checked]=\"showVMs\"\r\n [(ngModel)]=\"showVMs\"\r\n (ngModelChange)=\"onChangeVmVisibility()\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n type=\"checkbox\"\r\n id=\"showVMs\"\r\n />\r\n <label class=\"form-check-label sub ms-2\" for=\"showVMs\">Show VMs</label>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n class=\"form-check-input\"\r\n [checked]=\"showBrandCategory\"\r\n [(ngModel)]=\"showBrandCategory\"\r\n (ngModelChange)=\"onChangeBrandAndCategoryVisibility()\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n type=\"checkbox\"\r\n id=\"showBrandCategory\"\r\n />\r\n <label class=\"form-check-label sub ms-2\" for=\"showBrandCategory\">Show Brands & Categories</label>\r\n </div>\r\n </div> -->\r\n\r\n @if(fixtureTemplateDetails?.templateType !== 'master'){\r\n <div class=\"version-block\">\r\n @if(templateVersions.length){ @for (version of templateVersions; track $index; let first = $first) {\r\n <div class=\"version-tile\" [class.active]=\"this.selectedVersionId === version._id\"\r\n (click)=\"onSelectVersion(version)\">\r\n <p>Last updated: {{ version.updatedAt | date : \"medium\" }}</p>\r\n @if(first){\r\n <div class=\"badge active\">Active</div>\r\n }\r\n </div>\r\n } }@else {\r\n <div class=\"no-version-block\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M8.94922 21.1997C8.64792 21.2315 8.34121 21.2505 8.03027 21.2505C7.86075 21.2505 7.69345 21.2436 7.52832 21.2339V31.6069C7.52832 33.0349 8.7113 34.226 10.1992 34.2261H29.8037C31.2917 34.2261 32.4746 33.035 32.4746 31.6069V21.2349C32.3127 21.2441 32.1488 21.2505 31.9844 21.2505C31.6704 21.2505 31.3598 21.2325 31.0537 21.1997V28.9878H8.94922V21.1997ZM30.9307 5.77393H9.07227C8.8949 5.77393 8.73964 5.86671 8.66211 5.98779L8.66016 5.98975L5.15039 11.4731L5.05566 11.6206C3.83012 13.7404 5.09473 16.4674 7.44629 16.7769C7.64721 16.8013 7.83696 16.8159 8.02441 16.8159C9.25449 16.8159 10.3424 16.2872 11.0996 15.4653L12.0215 14.4644L12.9404 15.4683C13.6894 16.2863 14.7761 16.8159 16.0137 16.8159C17.2457 16.8158 18.3376 16.2856 19.0859 15.4683L20.0078 14.4614L20.9297 15.4683C21.6781 16.2857 22.7697 16.8159 24.002 16.8159C25.2342 16.8159 26.3258 16.2857 27.0742 15.4683L27.9961 14.4614L28.918 15.4683C29.6664 16.2857 30.759 16.8159 31.9912 16.8159C32.1726 16.8159 32.3677 16.8021 32.5674 16.7778H32.5664C34.9602 16.4573 36.2283 13.6078 34.8604 11.4731L34.8594 11.4741L31.3428 5.99072L31.3418 5.98779C31.2644 5.86652 31.1082 5.77393 30.9307 5.77393Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"2.5\" />\r\n </svg>\r\n\r\n <span>No versions history available </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div id=\"vm-products-sum\" class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <p>{{ fixtureTemplateDetails?.header?.label }}</p>\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <!----------------------------------[VM BLOCK]--------------------------------------->\r\n <div *ngIf=\"fixtureTemplateDetails?.vmConfig?.length\">\r\n <ng-container *ngFor=\"let vm of fixtureTemplateDetails?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container *ngIf=\"getSelectedVM(vm) as selectedVM\">\r\n <img *ngIf=\"selectedVM?.imgUrl; else placeholder\" [src]=\"selectedVM?.imgUrl\" alt=\"Vm Image\" />\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder\">\r\n <h3>{{ selectedVM?.name }}</h3>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!----------------------------------[FIXTURE LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"fixture-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L1'\">\r\n <div id=\"brand-category\" class=\"brand-category\" *ngIf=\"fixtureTemplateDetails?.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\">\r\n <ng-container *ngFor=\"let b of fixtureTemplateDetails?.productBrandName; let last = last\">\r\n <span class=\"badge draft me-1\">\r\n {{ b }}\r\n </span>\r\n </ng-container>\r\n </span>\r\n <span class=\"category\" *ngIf=\"fixtureTemplateDetails?.productCategory?.length\">\r\n <ng-container *ngFor=\"let c of fixtureTemplateDetails?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of fixtureTemplateDetails?.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"fixtureTemplateDetails?.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of fixtureTemplateDetails?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <!-----------------------------------[SECTION LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"section-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L3'\">\r\n <!-- <div id=\"body-loader\">\r\n <div class=\"loader\"></div>\r\n </div> -->\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\" [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"badge draft me-1\">\r\n {{ item.zone }}\r\n </span>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <span class=\"brand\" *ngIf=\"item?.section?.brands?.length\">\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n <span *ngIf=\"item?.section?.categories?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item?.section?.categories?.length\">\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n <p *ngIf=\"item?.section?.categories?.length\">\r\n <b>Categories: </b>\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n </div>\r\n </ng-template>\r\n }\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <div [id]=\"'sumShelfContainer' + i\" *ngFor=\"let item of fixtureTemplateDetails?.shelfConfig; let i = index\">\r\n <!--------------------------------[SHELF LEVEL - BRAND CATEGORY]---------------------------------------->\r\n <div id=\"shelf-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L2'\">\r\n <div [id]=\"'brand-category' + i\" class=\"brand-category\" *ngIf=\"item.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\" *ngIf=\"item.productBrandName?.length\">\r\n <ng-container *ngFor=\"let b of item.productBrandName; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n <span *ngIf=\"item.productCategory?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item.productCategory?.length\">\r\n <ng-container *ngFor=\"let b of item.productCategory; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of item.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"item.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of item.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n @if(item.shelfType ==='tray'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateDetails?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n <div style=\"width: 200px\"></div>\r\n </div>\r\n\r\n <!-- ===============Footer Info Cards=================== -->\r\n @if(fixtureTemplateDetails?.templateType === 'master'){\r\n <div id=\"footer\" class=\"row mx-0 my-5 gap-2\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-5\">\r\n <div>\r\n <h4>All variants</h4>\r\n <span>Showing all variants derived from this reference/master template.</span>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-2\" *ngIf=\"fixtureTemplatesList.length || searchTerm\">\r\n <div style=\"position: relative\" [ngClass]=\"{ 'd-none': viewMode === 'tree' }\">\r\n <input type=\"text\" [(ngModel)]=\"searchTerm\" (change)=\"onSearch()\"\r\n style=\"padding-left: 3rem; padding-right: 3rem\" class=\"form-control\" name=\"search\" autocomplete=\"off\"\r\n placeholder=\"Search\" />\r\n\r\n <span class=\"search-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-width=\"2\" />\r\n <line x1=\"13\" y1=\"13\" x2=\"16\" y2=\"16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n\r\n <button *ngIf=\"searchTerm\" type=\"button\" aria-label=\"Clear\" (click)=\"searchTerm = ''; onSearch()\"\r\n class=\"clear-search\">\r\n <svg width=\"64px\" height=\"64px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path d=\"M9 9L15 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n <path d=\"M15 9L9 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></circle>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div class=\"toggle-button me-1\" [ngClass]=\"{ selected: viewMode === 'list' }\"\r\n (click)=\"toggleViewMode('list')\">\r\n <svg width=\"19\" height=\"18\" viewBox=\"0 0 19 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M6.24078 4.54639H15.8906M6.24078 9.00017H15.8906M6.24078 13.4539H15.8906M2.5293 4.54639H2.53672M2.5293 9.00017H2.53672M2.5293 13.4539H2.53672\"\r\n [attr.stroke]=\"viewMode === 'list' ? '#009BF3' : '#344054'\" stroke-width=\"1.48756\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"toggle-button\" [ngClass]=\"{ selected: viewMode === 'tree' }\" (click)=\"toggleViewMode('tree')\">\r\n <svg width=\"19\" height=\"18\" viewBox=\"0 0 19 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9.92678 10.4845C7.43266 10.4845 6.61613 11.4866 6.3489 12.1472C7.14316 12.4887 7.69988 13.2755 7.69988 14.196C7.69988 14.7866 7.46527 15.353 7.04764 15.7706C6.63002 16.1882 6.0636 16.4228 5.47299 16.4228C4.88239 16.4228 4.31597 16.1882 3.89834 15.7706C3.48072 15.353 3.2461 14.7866 3.2461 14.196C3.2461 13.2235 3.86221 12.3996 4.7307 12.0953V5.9045C4.29573 5.75187 3.91908 5.4676 3.65304 5.09115C3.387 4.7147 3.24477 4.26476 3.2461 3.8038C3.2461 3.21319 3.48072 2.64677 3.89834 2.22915C4.31597 1.81152 4.88239 1.5769 5.47299 1.5769C6.0636 1.5769 6.63002 1.81152 7.04764 2.22915C7.46527 2.64677 7.69988 3.21319 7.69988 3.8038C7.69988 4.7762 7.08378 5.60015 6.21529 5.9045V9.83125C6.86851 9.34875 7.81865 8.99987 9.18448 8.99987C11.1664 8.99987 11.8271 8.0052 12.0423 7.34455C11.6362 7.17537 11.2892 6.88992 11.0449 6.52407C10.8005 6.15823 10.6698 5.72832 10.6691 5.28839C10.6691 4.69778 10.9037 4.13136 11.3213 3.71374C11.7389 3.29612 12.3054 3.0615 12.896 3.0615C13.4866 3.0615 14.053 3.29612 14.4706 3.71374C14.8882 4.13136 15.1229 4.69778 15.1229 5.28839C15.1229 6.28307 14.4696 7.14413 13.5715 7.41136C13.3785 8.47284 12.6584 10.4845 9.92678 10.4845ZM5.47299 13.4537C5.27612 13.4537 5.08732 13.5319 4.94811 13.6711C4.8089 13.8103 4.7307 13.9991 4.7307 14.196C4.7307 14.3928 4.8089 14.5816 4.94811 14.7208C5.08732 14.86 5.27612 14.9383 5.47299 14.9383C5.66986 14.9383 5.85867 14.86 5.99788 14.7208C6.13708 14.5816 6.21529 14.3928 6.21529 14.196C6.21529 13.9991 6.13708 13.8103 5.99788 13.6711C5.85867 13.5319 5.66986 13.4537 5.47299 13.4537ZM5.47299 3.0615C5.27612 3.0615 5.08732 3.1397 4.94811 3.27891C4.8089 3.41812 4.7307 3.60693 4.7307 3.8038C4.7307 4.00066 4.8089 4.18947 4.94811 4.32868C5.08732 4.46789 5.27612 4.54609 5.47299 4.54609C5.66986 4.54609 5.85867 4.46789 5.99788 4.32868C6.13708 4.18947 6.21529 4.00066 6.21529 3.8038C6.21529 3.60693 6.13708 3.41812 5.99788 3.27891C5.85867 3.1397 5.66986 3.0615 5.47299 3.0615ZM12.896 4.54609C12.6991 4.54609 12.5103 4.6243 12.3711 4.76351C12.2319 4.90271 12.1537 5.09152 12.1537 5.28839C12.1537 5.48526 12.2319 5.67406 12.3711 5.81327C12.5103 5.95248 12.6991 6.03069 12.896 6.03069C13.0928 6.03069 13.2816 5.95248 13.4208 5.81327C13.5601 5.67406 13.6383 5.48526 13.6383 5.28839C13.6383 5.09152 13.5601 4.90271 13.4208 4.76351C13.2816 4.6243 13.0928 4.54609 12.896 4.54609Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"loading; else contentPart\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #contentPart>\r\n <div *ngIf=\"!fixtureTemplatesList.length\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7.10938\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7.10938\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M48.6668 50.4427C43.0668 50.4427 41.2334 52.6927 40.6334 54.176C42.4168 54.9427 43.6668 56.7094 43.6668 58.776C43.6668 60.1021 43.14 61.3739 42.2023 62.3116C41.2646 63.2492 39.9929 63.776 38.6668 63.776C37.3407 63.776 36.0689 63.2492 35.1312 62.3116C34.1936 61.3739 33.6668 60.1021 33.6668 58.776C33.6668 56.5927 35.0501 54.7427 37.0001 54.0594V40.1594C36.0235 39.8167 35.1778 39.1784 34.5805 38.3332C33.9831 37.4879 33.6638 36.4777 33.6668 35.4427C33.6668 34.1166 34.1936 32.8448 35.1312 31.9072C36.0689 30.9695 37.3407 30.4427 38.6668 30.4427C39.9929 30.4427 41.2646 30.9695 42.2023 31.9072C43.14 32.8448 43.6668 34.1166 43.6668 35.4427C43.6668 37.626 42.2834 39.476 40.3334 40.1594V48.976C41.8001 47.8927 43.9334 47.1094 47.0001 47.1094C51.4501 47.1094 52.9334 44.876 53.4168 43.3927C52.505 43.0128 51.7258 42.3719 51.1772 41.5505C50.6286 40.7291 50.335 39.7638 50.3334 38.776C50.3334 37.4499 50.8602 36.1782 51.7979 35.2405C52.7356 34.3028 54.0074 33.776 55.3334 33.776C56.6595 33.776 57.9313 34.3028 58.869 35.2405C59.8067 36.1782 60.3334 37.4499 60.3334 38.776C60.3334 41.0094 58.8668 42.9427 56.8501 43.5427C56.4168 45.926 54.8001 50.4427 48.6668 50.4427ZM38.6668 57.1094C38.2247 57.1094 37.8008 57.2849 37.4883 57.5975C37.1757 57.9101 37.0001 58.334 37.0001 58.776C37.0001 59.218 37.1757 59.642 37.4883 59.9545C37.8008 60.2671 38.2247 60.4427 38.6668 60.4427C39.1088 60.4427 39.5327 60.2671 39.8453 59.9545C40.1578 59.642 40.3334 59.218 40.3334 58.776C40.3334 58.334 40.1578 57.9101 39.8453 57.5975C39.5327 57.2849 39.1088 57.1094 38.6668 57.1094ZM38.6668 33.776C38.2247 33.776 37.8008 33.9516 37.4883 34.2642C37.1757 34.5767 37.0001 35.0007 37.0001 35.4427C37.0001 35.8847 37.1757 36.3086 37.4883 36.6212C37.8008 36.9338 38.2247 37.1094 38.6668 37.1094C39.1088 37.1094 39.5327 36.9338 39.8453 36.6212C40.1578 36.3086 40.3334 35.8847 40.3334 35.4427C40.3334 35.0007 40.1578 34.5767 39.8453 34.2642C39.5327 33.9516 39.1088 33.776 38.6668 33.776ZM55.3334 37.1094C54.8914 37.1094 54.4675 37.2849 54.1549 37.5975C53.8424 37.9101 53.6668 38.334 53.6668 38.776C53.6668 39.218 53.8424 39.642 54.1549 39.9545C54.4675 40.2671 54.8914 40.4427 55.3334 40.4427C55.7755 40.4427 56.1994 40.2671 56.5119 39.9545C56.8245 39.642 57.0001 39.218 57.0001 38.776C57.0001 38.334 56.8245 37.9101 56.5119 37.5975C56.1994 37.2849 55.7755 37.1094 55.3334 37.1094Z\"\r\n fill=\"#009BF3\" />\r\n </svg>\r\n <div class=\"nodatamaintext mt-3\">No variants found</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"fixtureTemplatesList.length\">\r\n <!-- Fixture Template list view -->\r\n <section id=\"list-view\" *ngIf=\"viewMode === 'list'\">\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\" *ngIf=\"fixtureTemplatesList.length\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <span (click)=\"sortTable('fixtureName')\" class=\"cursor-pointer\">\r\n Variant\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'fixtureName' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'fixtureName' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('storeCount')\" class=\"cursor-pointer\">\r\n Assigned Stores\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'storeCount' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'storeCount' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('productBrandName')\" class=\"cursor-pointer\">\r\n Brand\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'productBrandName' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'productBrandName' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('productCategory')\" class=\"cursor-pointer\">\r\n Product category\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'productCategory' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'productCategory' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('status')\" class=\"cursor-pointer\">\r\n Status\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'status' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'status' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('updatedAt')\" class=\"cursor-pointer\">\r\n Last Update\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'status' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'status' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let childTemplate of fixtureTemplatesList\">\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <div class=\"thumbnail\"></div> -->\r\n <div>\r\n <a [routerLink]=\"['/manage/planogram/fixture-template/basic-details']\"\r\n [queryParams]=\"{ templateId: childTemplate._id, isEdit: false }\"\r\n class=\"text-decoration-underline\">\r\n {{ childTemplate.fixtureName }}\r\n </a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div>\r\n <a [routerLink]=\"['/manage/planogram/fixture-template/basic-details']\"\r\n [queryParams]=\"{ templateId: childTemplate._id, isEdit: false }\"\r\n class=\"text-decoration-underline\">\r\n {{ childTemplate.storeCount }}\r\n </a>\r\n </div>\r\n </td>\r\n <td>\r\n <span *ngIf=\"childTemplate.productBrandName.length <= 0\"> - </span>\r\n\r\n <div [ngbTooltip]=\"brandTooltip\" class=\"cursor-pointer\">\r\n <div *ngFor=\"let b of childTemplate.productBrandName; let i = index\"\r\n class=\"badge inactive me-2\">\r\n <span *ngIf=\"i <= 2\"> {{ b }} </span>\r\n <span *ngIf=\"i === 3\"> +{{ childTemplate.productBrandName.length - 3 }} </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandTooltip>\r\n <ng-container *ngFor=\"let c of childTemplate.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <span *ngIf=\"childTemplate.productCategory.length <= 0\"> - </span>\r\n\r\n <div [ngbTooltip]=\"categoryTooltip\" class=\"cursor-pointer\">\r\n <div *ngFor=\"let item of childTemplate.productCategory; let i = index\"\r\n class=\"badge inactive me-2\">\r\n <span *ngIf=\"i <= 2\"> {{ item }} </span>\r\n <span *ngIf=\"i === 3\"> +{{ childTemplate.productCategory.length - 3 }} </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #categoryTooltip>\r\n <ng-container *ngFor=\"let c of childTemplate.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <div class=\"badge\" [ngClass]=\"childTemplate.status\">{{ childTemplate.status | titlecase }}</div>\r\n </td>\r\n <td>\r\n <span [ngbTooltip]=\"childTemplate?.updatedAt | date : 'medium'\">\r\n {{ childTemplate?.updatedAt | date }}\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"dropdown\">\r\n <button class=\"btn btn-link p-0\" type=\"button\" data-bs-toggle=\"dropdown\">\r\n <i class=\"bi bi-three-dots-vertical\"></i>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li><a class=\"dropdown-item cursor-pointer\" (click)=\"onEdit(childTemplate._id!)\">Edit</a></li>\r\n <li>\r\n <a class=\"dropdown-item cursor-pointer\"\r\n (click)=\"onDuplicate(childTemplate._id!)\">Duplicate</a>\r\n </li>\r\n <li>\r\n <a class=\"dropdown-item cursor-pointer\" [routerLink]=\"['/manage/planogram/findAndReplace']\"\r\n [queryParams]=\"{ selectedFixture: childTemplate._id }\">Find and replace</a>\r\n </li>\r\n <li>\r\n <a class=\"dropdown-item cursor-pointer text-danger\"\r\n (click)=\"onDelete(childTemplate._id!, childTemplate.storeCount)\">\r\n Delete\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <lib-pagination *ngIf=\"fixtureTemplatesList.length\" [itemsPerPage]=\"limit\" [currentPage]=\"offset\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\">\r\n </lib-pagination>\r\n </div>\r\n </section>\r\n\r\n <!-- Fixture Template tree view -->\r\n <section id=\"tree-view\" *ngIf=\"viewMode === 'tree'\">\r\n <fixture-template-tree [masterFixtureData]=\"fixtureTemplateDetails\"\r\n [viewMode]=\"'master'\"></fixture-template-tree>\r\n </section>\r\n </div>\r\n </ng-template>\r\n </div>\r\n }\r\n</section>\r\n\r\n<section id=\"template-summary-skeleton\" *ngIf=\"isPageLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.badge.inactive{background:#f2f4f7!important;color:#344054!important}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}#template-summary #vm-products-sum{margin:0 auto}#template-summary #vm-products-sum .body-block{position:relative}#template-summary #vm-products-sum .body-block .block{border:none}#template-summary #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid var(--Primary-200, #99daff);background:var(--White, #fff);top:50%;left:50%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#template-summary #vm-products-sum #fixture-level .brand,#template-summary #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#template-summary #vm-products-sum #fixture-level .category{margin-top:12px}#template-summary #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#template-summary #vm-products-sum #section-level .brand,#template-summary #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#template-summary #vm-products-sum #section-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#template-summary #vm-products-sum #section-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#template-summary #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#template-summary #vm-products-sum #section-level #body-loader{height:100%;width:100%;position:absolute;display:flex;justify-content:center;align-items:center;z-index:1;background:#fff3;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(10px)}#template-summary #vm-products-sum #section-level #body-loader .loader{width:30px;height:30px;border:4px solid #f3f3f3;border-top:4px solid #00a3ff;border-radius:50%;animation:spin 1s linear infinite;margin:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#template-summary #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#template-summary #vm-products-sum #shelf-level .brand,#template-summary #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#template-summary #vm-products-sum #shelf-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#template-summary #vm-products-sum #shelf-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#template-summary #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#template-summary #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}#template-summary #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#template-summary #vm-products-sum .sub-footer{position:relative;width:48%}#template-summary #vm-products-sum img{width:100%;height:100%;display:block}#template-summary #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;transition:all .3s ease}#template-summary #vm-products-sum .vm-block h3{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;margin:0;width:100%;text-overflow:ellipsis;overflow:hidden}#template-summary #vm-products-sum .vm-placeholder{border:4px solid var(--Black, #101828);background:#f9fafb;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:8px;white-space:nowrap;overflow:hidden}#template-summary .filter-tab{border-radius:6px;background:var(--Gray-50, #f9fafb);border:none;cursor:default}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.nodatamaintext{color:var(--Black, #101828);text-align:center;font-family:Inter;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.version-block{max-width:430px;border-right:1px solid var(--Gray-300, #d0d5dd);padding:12px;background:#fff}.version-block .version-tile{border-radius:4px;display:flex;width:412px;padding:14px 12px;align-items:center;justify-content:space-between;gap:35px;cursor:pointer}.version-block .version-tile p{color:var(--Gray-900, #101828);font-size:14px;font-weight:500;line-height:20px;margin:0}.version-block .version-tile.active{background:var(--Primary-50, #eaf8ff)}.version-block .version-tile:hover{background:#eff9fd}.no-version-block{display:flex;justify-content:center;align-items:center;flex-direction:column;gap:12px;width:100%;min-width:0;max-width:400px;padding:32px;border-radius:12px;background:var(--Gray-50, #f9fafb)}.no-version-block span{color:var(--Black, #101828);text-align:center;font-size:16px;font-weight:500}\n"], dependencies: [{ kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i5.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i9.TemplateTreeComponent, selector: "fixture-template-tree", inputs: ["viewMode", "clientId", "masterFixtureData", "allFixture"] }, { kind: "pipe", type: i7.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
|
|
636
636
|
}
|
|
637
637
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TemplateSummaryComponent, decorators: [{
|
|
638
638
|
type: Component,
|
|
639
|
-
args: [{ selector: "lib-template-summary", template: "<section class=\"content-wrapper\" id=\"template-summary\" *ngIf=\"!isPageLoading\">\r\n <!-- ===============Header Info Cards=================== -->\r\n <div id=\"header\" class=\"row mx-0 my-5 gap-3 mb-7\">\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.fixtureType | titlecase }} fixture</h3>\r\n <p>Type</p>\r\n </div>\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.shelfConfig?.length }}</h3>\r\n <p>No of Shelves</p>\r\n </div>\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.fixtureCapacity }}</h3>\r\n <p>Product Capacity</p>\r\n </div>\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.variantCount ?? 0 }}</h3>\r\n <p>Variants</p>\r\n </div>\r\n </div>\r\n\r\n @if(fixtureTemplateDetails?.templateType !== 'master'){\r\n <div class=\"ms-3 mb-7\">\r\n <h4>All versions</h4>\r\n <span>Showing all the updated versions over the time.</span>\r\n </div>\r\n }\r\n\r\n <div class=\"d-flex gap-5\">\r\n <!-- <div class=\"d-flex flex-column gap-2 position-absolute\">\r\n <div class=\"form-check form-switch\">\r\n <input\r\n class=\"form-check-input\"\r\n [checked]=\"showProductSpots\"\r\n [(ngModel)]=\"showProductSpots\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n type=\"checkbox\"\r\n id=\"showProductSpots\"\r\n />\r\n <label class=\"form-check-label sub ms-2\" for=\"showProductSpots\">Show Product Spots</label>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n class=\"form-check-input\"\r\n [checked]=\"showVMs\"\r\n [(ngModel)]=\"showVMs\"\r\n (ngModelChange)=\"onChangeVmVisibility()\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n type=\"checkbox\"\r\n id=\"showVMs\"\r\n />\r\n <label class=\"form-check-label sub ms-2\" for=\"showVMs\">Show VMs</label>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n class=\"form-check-input\"\r\n [checked]=\"showBrandCategory\"\r\n [(ngModel)]=\"showBrandCategory\"\r\n (ngModelChange)=\"onChangeBrandAndCategoryVisibility()\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n type=\"checkbox\"\r\n id=\"showBrandCategory\"\r\n />\r\n <label class=\"form-check-label sub ms-2\" for=\"showBrandCategory\">Show Brands & Categories</label>\r\n </div>\r\n </div> -->\r\n\r\n @if(fixtureTemplateDetails?.templateType !== 'master'){\r\n <div class=\"version-block\">\r\n @if(templateVersions.length){ @for (version of templateVersions; track $index; let first = $first) {\r\n <div class=\"version-tile\" [class.active]=\"this.selectedVersionId === version._id\" (click)=\"onSelectVersion(version)\">\r\n <p>Last updated: {{ version.updatedAt | date : \"medium\" }}</p>\r\n @if(first){\r\n <div class=\"badge active\">Active</div>\r\n }\r\n </div>\r\n } }@else {\r\n <div class=\"no-version-block\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M8.94922 21.1997C8.64792 21.2315 8.34121 21.2505 8.03027 21.2505C7.86075 21.2505 7.69345 21.2436 7.52832 21.2339V31.6069C7.52832 33.0349 8.7113 34.226 10.1992 34.2261H29.8037C31.2917 34.2261 32.4746 33.035 32.4746 31.6069V21.2349C32.3127 21.2441 32.1488 21.2505 31.9844 21.2505C31.6704 21.2505 31.3598 21.2325 31.0537 21.1997V28.9878H8.94922V21.1997ZM30.9307 5.77393H9.07227C8.8949 5.77393 8.73964 5.86671 8.66211 5.98779L8.66016 5.98975L5.15039 11.4731L5.05566 11.6206C3.83012 13.7404 5.09473 16.4674 7.44629 16.7769C7.64721 16.8013 7.83696 16.8159 8.02441 16.8159C9.25449 16.8159 10.3424 16.2872 11.0996 15.4653L12.0215 14.4644L12.9404 15.4683C13.6894 16.2863 14.7761 16.8159 16.0137 16.8159C17.2457 16.8158 18.3376 16.2856 19.0859 15.4683L20.0078 14.4614L20.9297 15.4683C21.6781 16.2857 22.7697 16.8159 24.002 16.8159C25.2342 16.8159 26.3258 16.2857 27.0742 15.4683L27.9961 14.4614L28.918 15.4683C29.6664 16.2857 30.759 16.8159 31.9912 16.8159C32.1726 16.8159 32.3677 16.8021 32.5674 16.7778H32.5664C34.9602 16.4573 36.2283 13.6078 34.8604 11.4731L34.8594 11.4741L31.3428 5.99072L31.3418 5.98779C31.2644 5.86652 31.1082 5.77393 30.9307 5.77393Z\"\r\n stroke=\"#00A3FF\"\r\n stroke-width=\"2.5\"\r\n />\r\n </svg>\r\n\r\n <span>No versions history available </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div id=\"vm-products-sum\" class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div\r\n class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\r\n <p>{{ fixtureTemplateDetails?.header?.label }}</p>\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <!----------------------------------[VM BLOCK]--------------------------------------->\r\n <div *ngIf=\"fixtureTemplateDetails?.vmConfig?.length\">\r\n <ng-container *ngFor=\"let vm of fixtureTemplateDetails?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container *ngIf=\"getSelectedVM(vm) as selectedVM\">\r\n <img *ngIf=\"selectedVM?.imgUrl; else placeholder\" [src]=\"selectedVM?.imgUrl\" alt=\"Vm Image\" />\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder\">\r\n <h3>{{ selectedVM?.name }}</h3>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!----------------------------------[FIXTURE LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"fixture-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L1'\">\r\n <div\r\n id=\"brand-category\"\r\n class=\"brand-category\"\r\n *ngIf=\"fixtureTemplateDetails?.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\"\r\n >\r\n <span class=\"brand\">\r\n <ng-container *ngFor=\"let b of fixtureTemplateDetails?.productBrandName; let last = last\">\r\n <span class=\"badge draft me-1\">\r\n {{ b }}\r\n </span>\r\n </ng-container>\r\n </span>\r\n <span class=\"category\" *ngIf=\"fixtureTemplateDetails?.productCategory?.length\">\r\n <ng-container *ngFor=\"let c of fixtureTemplateDetails?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of fixtureTemplateDetails?.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"fixtureTemplateDetails?.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of fixtureTemplateDetails?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <!-----------------------------------[SECTION LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"section-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L3'\">\r\n <!-- <div id=\"body-loader\">\r\n <div class=\"loader\"></div>\r\n </div> -->\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\" [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"badge draft me-1\">\r\n {{ item.zone }}\r\n </span>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <span class=\"brand\" *ngIf=\"item?.section?.brands?.length\">\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n <span *ngIf=\"item?.section?.categories?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item?.section?.categories?.length\">\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n <p *ngIf=\"item?.section?.categories?.length\">\r\n <b>Categories: </b>\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n </div>\r\n </ng-template>\r\n }\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <div [id]=\"'sumShelfContainer' + i\" *ngFor=\"let item of fixtureTemplateDetails?.shelfConfig; let i = index\">\r\n <!--------------------------------[SHELF LEVEL - BRAND CATEGORY]---------------------------------------->\r\n <div id=\"shelf-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L2'\">\r\n <div\r\n [id]=\"'brand-category' + i\"\r\n class=\"brand-category\"\r\n *ngIf=\"item.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\"\r\n >\r\n <span class=\"brand\" *ngIf=\"item.productBrandName?.length\">\r\n <ng-container *ngFor=\"let b of item.productBrandName; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n <span *ngIf=\"item.productCategory?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item.productCategory?.length\">\r\n <ng-container *ngFor=\"let b of item.productCategory; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of item.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"item.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of item.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n @if(item.shelfType ==='shelf'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div\r\n class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateDetails?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n <div style=\"width: 200px\"></div>\r\n </div>\r\n\r\n <!-- ===============Footer Info Cards=================== -->\r\n @if(fixtureTemplateDetails?.templateType === 'master'){\r\n <div id=\"footer\" class=\"row mx-0 my-5 gap-2\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-5\">\r\n <div>\r\n <h4>All variants</h4>\r\n <span>Showing all variants derived from this reference/master template.</span>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-2\" *ngIf=\"fixtureTemplatesList.length || searchTerm\">\r\n <div style=\"position: relative\" [ngClass]=\"{ 'd-none': viewMode === 'tree' }\">\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"searchTerm\"\r\n (change)=\"onSearch()\"\r\n style=\"padding-left: 3rem; padding-right: 3rem\"\r\n class=\"form-control\"\r\n name=\"search\"\r\n autocomplete=\"off\"\r\n placeholder=\"Search\"\r\n />\r\n\r\n <span class=\"search-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-width=\"2\" />\r\n <line x1=\"13\" y1=\"13\" x2=\"16\" y2=\"16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n\r\n <button *ngIf=\"searchTerm\" type=\"button\" aria-label=\"Clear\" (click)=\"searchTerm = ''; onSearch()\" class=\"clear-search\">\r\n <svg width=\"64px\" height=\"64px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path d=\"M9 9L15 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <path d=\"M15 9L9 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"9\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n ></circle>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div class=\"toggle-button me-1\" [ngClass]=\"{ selected: viewMode === 'list' }\" (click)=\"toggleViewMode('list')\">\r\n <svg width=\"19\" height=\"18\" viewBox=\"0 0 19 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M6.24078 4.54639H15.8906M6.24078 9.00017H15.8906M6.24078 13.4539H15.8906M2.5293 4.54639H2.53672M2.5293 9.00017H2.53672M2.5293 13.4539H2.53672\"\r\n [attr.stroke]=\"viewMode === 'list' ? '#009BF3' : '#344054'\"\r\n stroke-width=\"1.48756\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"toggle-button\" [ngClass]=\"{ selected: viewMode === 'tree' }\" (click)=\"toggleViewMode('tree')\">\r\n <svg width=\"19\" height=\"18\" viewBox=\"0 0 19 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9.92678 10.4845C7.43266 10.4845 6.61613 11.4866 6.3489 12.1472C7.14316 12.4887 7.69988 13.2755 7.69988 14.196C7.69988 14.7866 7.46527 15.353 7.04764 15.7706C6.63002 16.1882 6.0636 16.4228 5.47299 16.4228C4.88239 16.4228 4.31597 16.1882 3.89834 15.7706C3.48072 15.353 3.2461 14.7866 3.2461 14.196C3.2461 13.2235 3.86221 12.3996 4.7307 12.0953V5.9045C4.29573 5.75187 3.91908 5.4676 3.65304 5.09115C3.387 4.7147 3.24477 4.26476 3.2461 3.8038C3.2461 3.21319 3.48072 2.64677 3.89834 2.22915C4.31597 1.81152 4.88239 1.5769 5.47299 1.5769C6.0636 1.5769 6.63002 1.81152 7.04764 2.22915C7.46527 2.64677 7.69988 3.21319 7.69988 3.8038C7.69988 4.7762 7.08378 5.60015 6.21529 5.9045V9.83125C6.86851 9.34875 7.81865 8.99987 9.18448 8.99987C11.1664 8.99987 11.8271 8.0052 12.0423 7.34455C11.6362 7.17537 11.2892 6.88992 11.0449 6.52407C10.8005 6.15823 10.6698 5.72832 10.6691 5.28839C10.6691 4.69778 10.9037 4.13136 11.3213 3.71374C11.7389 3.29612 12.3054 3.0615 12.896 3.0615C13.4866 3.0615 14.053 3.29612 14.4706 3.71374C14.8882 4.13136 15.1229 4.69778 15.1229 5.28839C15.1229 6.28307 14.4696 7.14413 13.5715 7.41136C13.3785 8.47284 12.6584 10.4845 9.92678 10.4845ZM5.47299 13.4537C5.27612 13.4537 5.08732 13.5319 4.94811 13.6711C4.8089 13.8103 4.7307 13.9991 4.7307 14.196C4.7307 14.3928 4.8089 14.5816 4.94811 14.7208C5.08732 14.86 5.27612 14.9383 5.47299 14.9383C5.66986 14.9383 5.85867 14.86 5.99788 14.7208C6.13708 14.5816 6.21529 14.3928 6.21529 14.196C6.21529 13.9991 6.13708 13.8103 5.99788 13.6711C5.85867 13.5319 5.66986 13.4537 5.47299 13.4537ZM5.47299 3.0615C5.27612 3.0615 5.08732 3.1397 4.94811 3.27891C4.8089 3.41812 4.7307 3.60693 4.7307 3.8038C4.7307 4.00066 4.8089 4.18947 4.94811 4.32868C5.08732 4.46789 5.27612 4.54609 5.47299 4.54609C5.66986 4.54609 5.85867 4.46789 5.99788 4.32868C6.13708 4.18947 6.21529 4.00066 6.21529 3.8038C6.21529 3.60693 6.13708 3.41812 5.99788 3.27891C5.85867 3.1397 5.66986 3.0615 5.47299 3.0615ZM12.896 4.54609C12.6991 4.54609 12.5103 4.6243 12.3711 4.76351C12.2319 4.90271 12.1537 5.09152 12.1537 5.28839C12.1537 5.48526 12.2319 5.67406 12.3711 5.81327C12.5103 5.95248 12.6991 6.03069 12.896 6.03069C13.0928 6.03069 13.2816 5.95248 13.4208 5.81327C13.5601 5.67406 13.6383 5.48526 13.6383 5.28839C13.6383 5.09152 13.5601 4.90271 13.4208 4.76351C13.2816 4.6243 13.0928 4.54609 12.896 4.54609Z\"\r\n fill=\"#344054\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"loading; else contentPart\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #contentPart>\r\n <div *ngIf=\"!fixtureTemplatesList.length\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7.10938\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7.10938\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M48.6668 50.4427C43.0668 50.4427 41.2334 52.6927 40.6334 54.176C42.4168 54.9427 43.6668 56.7094 43.6668 58.776C43.6668 60.1021 43.14 61.3739 42.2023 62.3116C41.2646 63.2492 39.9929 63.776 38.6668 63.776C37.3407 63.776 36.0689 63.2492 35.1312 62.3116C34.1936 61.3739 33.6668 60.1021 33.6668 58.776C33.6668 56.5927 35.0501 54.7427 37.0001 54.0594V40.1594C36.0235 39.8167 35.1778 39.1784 34.5805 38.3332C33.9831 37.4879 33.6638 36.4777 33.6668 35.4427C33.6668 34.1166 34.1936 32.8448 35.1312 31.9072C36.0689 30.9695 37.3407 30.4427 38.6668 30.4427C39.9929 30.4427 41.2646 30.9695 42.2023 31.9072C43.14 32.8448 43.6668 34.1166 43.6668 35.4427C43.6668 37.626 42.2834 39.476 40.3334 40.1594V48.976C41.8001 47.8927 43.9334 47.1094 47.0001 47.1094C51.4501 47.1094 52.9334 44.876 53.4168 43.3927C52.505 43.0128 51.7258 42.3719 51.1772 41.5505C50.6286 40.7291 50.335 39.7638 50.3334 38.776C50.3334 37.4499 50.8602 36.1782 51.7979 35.2405C52.7356 34.3028 54.0074 33.776 55.3334 33.776C56.6595 33.776 57.9313 34.3028 58.869 35.2405C59.8067 36.1782 60.3334 37.4499 60.3334 38.776C60.3334 41.0094 58.8668 42.9427 56.8501 43.5427C56.4168 45.926 54.8001 50.4427 48.6668 50.4427ZM38.6668 57.1094C38.2247 57.1094 37.8008 57.2849 37.4883 57.5975C37.1757 57.9101 37.0001 58.334 37.0001 58.776C37.0001 59.218 37.1757 59.642 37.4883 59.9545C37.8008 60.2671 38.2247 60.4427 38.6668 60.4427C39.1088 60.4427 39.5327 60.2671 39.8453 59.9545C40.1578 59.642 40.3334 59.218 40.3334 58.776C40.3334 58.334 40.1578 57.9101 39.8453 57.5975C39.5327 57.2849 39.1088 57.1094 38.6668 57.1094ZM38.6668 33.776C38.2247 33.776 37.8008 33.9516 37.4883 34.2642C37.1757 34.5767 37.0001 35.0007 37.0001 35.4427C37.0001 35.8847 37.1757 36.3086 37.4883 36.6212C37.8008 36.9338 38.2247 37.1094 38.6668 37.1094C39.1088 37.1094 39.5327 36.9338 39.8453 36.6212C40.1578 36.3086 40.3334 35.8847 40.3334 35.4427C40.3334 35.0007 40.1578 34.5767 39.8453 34.2642C39.5327 33.9516 39.1088 33.776 38.6668 33.776ZM55.3334 37.1094C54.8914 37.1094 54.4675 37.2849 54.1549 37.5975C53.8424 37.9101 53.6668 38.334 53.6668 38.776C53.6668 39.218 53.8424 39.642 54.1549 39.9545C54.4675 40.2671 54.8914 40.4427 55.3334 40.4427C55.7755 40.4427 56.1994 40.2671 56.5119 39.9545C56.8245 39.642 57.0001 39.218 57.0001 38.776C57.0001 38.334 56.8245 37.9101 56.5119 37.5975C56.1994 37.2849 55.7755 37.1094 55.3334 37.1094Z\"\r\n fill=\"#009BF3\"\r\n />\r\n </svg>\r\n <div class=\"nodatamaintext mt-3\">No variants found</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"fixtureTemplatesList.length\">\r\n <!-- Fixture Template list view -->\r\n <section id=\"list-view\" *ngIf=\"viewMode === 'list'\">\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\" *ngIf=\"fixtureTemplatesList.length\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <span (click)=\"sortTable('fixtureName')\" class=\"cursor-pointer\">\r\n Variant\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'fixtureName' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'fixtureName' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('storeCount')\" class=\"cursor-pointer\">\r\n Assigned Stores\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'storeCount' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'storeCount' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('productBrandName')\" class=\"cursor-pointer\">\r\n Brand\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'productBrandName' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'productBrandName' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('productCategory')\" class=\"cursor-pointer\">\r\n Product category\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'productCategory' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'productCategory' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('status')\" class=\"cursor-pointer\">\r\n Status\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'status' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'status' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('updatedAt')\" class=\"cursor-pointer\">\r\n Last Update\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'status' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'status' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let childTemplate of fixtureTemplatesList\">\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <div class=\"thumbnail\"></div> -->\r\n <div>\r\n <a\r\n [routerLink]=\"['/manage/planogram/fixture-template/basic-details']\"\r\n [queryParams]=\"{ templateId: childTemplate._id, isEdit: false }\"\r\n class=\"text-decoration-underline\"\r\n >\r\n {{ childTemplate.fixtureName }}\r\n </a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div>\r\n <a\r\n [routerLink]=\"['/manage/planogram/fixture-template/basic-details']\"\r\n [queryParams]=\"{ templateId: childTemplate._id, isEdit: false }\"\r\n class=\"text-decoration-underline\"\r\n >\r\n {{ childTemplate.storeCount }}\r\n </a>\r\n </div>\r\n </td>\r\n <td>\r\n <span *ngIf=\"childTemplate.productBrandName.length <= 0\"> - </span>\r\n\r\n <div [ngbTooltip]=\"brandTooltip\" class=\"cursor-pointer\">\r\n <div *ngFor=\"let b of childTemplate.productBrandName; let i = index\" class=\"badge inactive me-2\">\r\n <span *ngIf=\"i <= 2\"> {{ b }} </span>\r\n <span *ngIf=\"i === 3\"> +{{ childTemplate.productBrandName.length - 3 }} </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandTooltip>\r\n <ng-container *ngFor=\"let c of childTemplate.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <span *ngIf=\"childTemplate.productCategory.length <= 0\"> - </span>\r\n\r\n <div [ngbTooltip]=\"categoryTooltip\" class=\"cursor-pointer\">\r\n <div *ngFor=\"let item of childTemplate.productCategory; let i = index\" class=\"badge inactive me-2\">\r\n <span *ngIf=\"i <= 2\"> {{ item }} </span>\r\n <span *ngIf=\"i === 3\"> +{{ childTemplate.productCategory.length - 3 }} </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #categoryTooltip>\r\n <ng-container *ngFor=\"let c of childTemplate.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <div class=\"badge\" [ngClass]=\"childTemplate.status\">{{ childTemplate.status | titlecase }}</div>\r\n </td>\r\n <td>\r\n <span [ngbTooltip]=\"childTemplate?.updatedAt | date : 'medium'\">\r\n {{ childTemplate?.updatedAt | date }}\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"dropdown\">\r\n <button class=\"btn btn-link p-0\" type=\"button\" data-bs-toggle=\"dropdown\">\r\n <i class=\"bi bi-three-dots-vertical\"></i>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li><a class=\"dropdown-item cursor-pointer\" (click)=\"onEdit(childTemplate._id!)\">Edit</a></li>\r\n <li>\r\n <a class=\"dropdown-item cursor-pointer\" (click)=\"onDuplicate(childTemplate._id!)\">Duplicate</a>\r\n </li>\r\n <li>\r\n <a\r\n class=\"dropdown-item cursor-pointer\"\r\n [routerLink]=\"['/manage/planogram/findAndReplace']\"\r\n [queryParams]=\"{ selectedFixture: childTemplate._id }\"\r\n >Find and replace</a\r\n >\r\n </li>\r\n <li>\r\n <a\r\n class=\"dropdown-item cursor-pointer text-danger\"\r\n (click)=\"onDelete(childTemplate._id!, childTemplate.storeCount)\"\r\n >\r\n Delete\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <lib-pagination\r\n *ngIf=\"fixtureTemplatesList.length\"\r\n [itemsPerPage]=\"limit\"\r\n [currentPage]=\"offset\"\r\n [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\"\r\n [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n >\r\n </lib-pagination>\r\n </div>\r\n </section>\r\n\r\n <!-- Fixture Template tree view -->\r\n <section id=\"tree-view\" *ngIf=\"viewMode === 'tree'\">\r\n <fixture-template-tree [masterFixtureData]=\"fixtureTemplateDetails\" [viewMode]=\"'master'\"></fixture-template-tree>\r\n </section>\r\n </div>\r\n </ng-template>\r\n </div>\r\n }\r\n</section>\r\n\r\n<section id=\"template-summary-skeleton\" *ngIf=\"isPageLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.badge.inactive{background:#f2f4f7!important;color:#344054!important}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}#template-summary #vm-products-sum{margin:0 auto}#template-summary #vm-products-sum .body-block{position:relative}#template-summary #vm-products-sum .body-block .block{border:none}#template-summary #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid var(--Primary-200, #99daff);background:var(--White, #fff);top:50%;left:50%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#template-summary #vm-products-sum #fixture-level .brand,#template-summary #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#template-summary #vm-products-sum #fixture-level .category{margin-top:12px}#template-summary #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#template-summary #vm-products-sum #section-level .brand,#template-summary #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#template-summary #vm-products-sum #section-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#template-summary #vm-products-sum #section-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#template-summary #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#template-summary #vm-products-sum #section-level #body-loader{height:100%;width:100%;position:absolute;display:flex;justify-content:center;align-items:center;z-index:1;background:#fff3;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(10px)}#template-summary #vm-products-sum #section-level #body-loader .loader{width:30px;height:30px;border:4px solid #f3f3f3;border-top:4px solid #00a3ff;border-radius:50%;animation:spin 1s linear infinite;margin:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#template-summary #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#template-summary #vm-products-sum #shelf-level .brand,#template-summary #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#template-summary #vm-products-sum #shelf-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#template-summary #vm-products-sum #shelf-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#template-summary #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#template-summary #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}#template-summary #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#template-summary #vm-products-sum .sub-footer{position:relative;width:48%}#template-summary #vm-products-sum img{width:100%;height:100%;display:block}#template-summary #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;transition:all .3s ease}#template-summary #vm-products-sum .vm-block h3{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;margin:0;width:100%;text-overflow:ellipsis;overflow:hidden}#template-summary #vm-products-sum .vm-placeholder{border:4px solid var(--Black, #101828);background:#f9fafb;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:8px;white-space:nowrap;overflow:hidden}#template-summary .filter-tab{border-radius:6px;background:var(--Gray-50, #f9fafb);border:none;cursor:default}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.nodatamaintext{color:var(--Black, #101828);text-align:center;font-family:Inter;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.version-block{max-width:430px;border-right:1px solid var(--Gray-300, #d0d5dd);padding:12px;background:#fff}.version-block .version-tile{border-radius:4px;display:flex;width:412px;padding:14px 12px;align-items:center;justify-content:space-between;gap:35px;cursor:pointer}.version-block .version-tile p{color:var(--Gray-900, #101828);font-size:14px;font-weight:500;line-height:20px;margin:0}.version-block .version-tile.active{background:var(--Primary-50, #eaf8ff)}.version-block .version-tile:hover{background:#eff9fd}.no-version-block{display:flex;justify-content:center;align-items:center;flex-direction:column;gap:12px;width:100%;min-width:0;max-width:400px;padding:32px;border-radius:12px;background:var(--Gray-50, #f9fafb)}.no-version-block span{color:var(--Black, #101828);text-align:center;font-size:16px;font-weight:500}\n"] }]
|
|
639
|
+
args: [{ selector: "lib-template-summary", template: "<section class=\"content-wrapper\" id=\"template-summary\" *ngIf=\"!isPageLoading\">\r\n <!-- ===============Header Info Cards=================== -->\r\n <div id=\"header\" class=\"row mx-0 my-5 gap-3 mb-7\">\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.fixtureType | titlecase }} fixture</h3>\r\n <p>Type</p>\r\n </div>\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.shelfConfig?.length }}</h3>\r\n <p>No of Shelves</p>\r\n </div>\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.fixtureCapacity }}</h3>\r\n <p>Product Capacity</p>\r\n </div>\r\n <div class=\"col filter-tab\">\r\n <h3>{{ fixtureTemplateDetails?.variantCount ?? 0 }}</h3>\r\n <p>Variants</p>\r\n </div>\r\n </div>\r\n\r\n @if(fixtureTemplateDetails?.templateType !== 'master'){\r\n <div class=\"ms-3 mb-7\">\r\n <h4>All versions</h4>\r\n <span>Showing all the updated versions over the time.</span>\r\n </div>\r\n }\r\n\r\n <div class=\"d-flex gap-5\">\r\n <!-- <div class=\"d-flex flex-column gap-2 position-absolute\">\r\n <div class=\"form-check form-switch\">\r\n <input\r\n class=\"form-check-input\"\r\n [checked]=\"showProductSpots\"\r\n [(ngModel)]=\"showProductSpots\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n type=\"checkbox\"\r\n id=\"showProductSpots\"\r\n />\r\n <label class=\"form-check-label sub ms-2\" for=\"showProductSpots\">Show Product Spots</label>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n class=\"form-check-input\"\r\n [checked]=\"showVMs\"\r\n [(ngModel)]=\"showVMs\"\r\n (ngModelChange)=\"onChangeVmVisibility()\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n type=\"checkbox\"\r\n id=\"showVMs\"\r\n />\r\n <label class=\"form-check-label sub ms-2\" for=\"showVMs\">Show VMs</label>\r\n </div>\r\n <div class=\"form-check form-switch\">\r\n <input\r\n class=\"form-check-input\"\r\n [checked]=\"showBrandCategory\"\r\n [(ngModel)]=\"showBrandCategory\"\r\n (ngModelChange)=\"onChangeBrandAndCategoryVisibility()\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n type=\"checkbox\"\r\n id=\"showBrandCategory\"\r\n />\r\n <label class=\"form-check-label sub ms-2\" for=\"showBrandCategory\">Show Brands & Categories</label>\r\n </div>\r\n </div> -->\r\n\r\n @if(fixtureTemplateDetails?.templateType !== 'master'){\r\n <div class=\"version-block\">\r\n @if(templateVersions.length){ @for (version of templateVersions; track $index; let first = $first) {\r\n <div class=\"version-tile\" [class.active]=\"this.selectedVersionId === version._id\"\r\n (click)=\"onSelectVersion(version)\">\r\n <p>Last updated: {{ version.updatedAt | date : \"medium\" }}</p>\r\n @if(first){\r\n <div class=\"badge active\">Active</div>\r\n }\r\n </div>\r\n } }@else {\r\n <div class=\"no-version-block\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M8.94922 21.1997C8.64792 21.2315 8.34121 21.2505 8.03027 21.2505C7.86075 21.2505 7.69345 21.2436 7.52832 21.2339V31.6069C7.52832 33.0349 8.7113 34.226 10.1992 34.2261H29.8037C31.2917 34.2261 32.4746 33.035 32.4746 31.6069V21.2349C32.3127 21.2441 32.1488 21.2505 31.9844 21.2505C31.6704 21.2505 31.3598 21.2325 31.0537 21.1997V28.9878H8.94922V21.1997ZM30.9307 5.77393H9.07227C8.8949 5.77393 8.73964 5.86671 8.66211 5.98779L8.66016 5.98975L5.15039 11.4731L5.05566 11.6206C3.83012 13.7404 5.09473 16.4674 7.44629 16.7769C7.64721 16.8013 7.83696 16.8159 8.02441 16.8159C9.25449 16.8159 10.3424 16.2872 11.0996 15.4653L12.0215 14.4644L12.9404 15.4683C13.6894 16.2863 14.7761 16.8159 16.0137 16.8159C17.2457 16.8158 18.3376 16.2856 19.0859 15.4683L20.0078 14.4614L20.9297 15.4683C21.6781 16.2857 22.7697 16.8159 24.002 16.8159C25.2342 16.8159 26.3258 16.2857 27.0742 15.4683L27.9961 14.4614L28.918 15.4683C29.6664 16.2857 30.759 16.8159 31.9912 16.8159C32.1726 16.8159 32.3677 16.8021 32.5674 16.7778H32.5664C34.9602 16.4573 36.2283 13.6078 34.8604 11.4731L34.8594 11.4741L31.3428 5.99072L31.3418 5.98779C31.2644 5.86652 31.1082 5.77393 30.9307 5.77393Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"2.5\" />\r\n </svg>\r\n\r\n <span>No versions history available </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div id=\"vm-products-sum\" class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <p>{{ fixtureTemplateDetails?.header?.label }}</p>\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <!----------------------------------[VM BLOCK]--------------------------------------->\r\n <div *ngIf=\"fixtureTemplateDetails?.vmConfig?.length\">\r\n <ng-container *ngFor=\"let vm of fixtureTemplateDetails?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container *ngIf=\"getSelectedVM(vm) as selectedVM\">\r\n <img *ngIf=\"selectedVM?.imgUrl; else placeholder\" [src]=\"selectedVM?.imgUrl\" alt=\"Vm Image\" />\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder\">\r\n <h3>{{ selectedVM?.name }}</h3>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!----------------------------------[FIXTURE LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"fixture-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L1'\">\r\n <div id=\"brand-category\" class=\"brand-category\" *ngIf=\"fixtureTemplateDetails?.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\">\r\n <ng-container *ngFor=\"let b of fixtureTemplateDetails?.productBrandName; let last = last\">\r\n <span class=\"badge draft me-1\">\r\n {{ b }}\r\n </span>\r\n </ng-container>\r\n </span>\r\n <span class=\"category\" *ngIf=\"fixtureTemplateDetails?.productCategory?.length\">\r\n <ng-container *ngFor=\"let c of fixtureTemplateDetails?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of fixtureTemplateDetails?.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"fixtureTemplateDetails?.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of fixtureTemplateDetails?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <!-----------------------------------[SECTION LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"section-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L3'\">\r\n <!-- <div id=\"body-loader\">\r\n <div class=\"loader\"></div>\r\n </div> -->\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\" [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"badge draft me-1\">\r\n {{ item.zone }}\r\n </span>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <span class=\"brand\" *ngIf=\"item?.section?.brands?.length\">\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n <span *ngIf=\"item?.section?.categories?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item?.section?.categories?.length\">\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n <p *ngIf=\"item?.section?.categories?.length\">\r\n <b>Categories: </b>\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n </div>\r\n </ng-template>\r\n }\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <div [id]=\"'sumShelfContainer' + i\" *ngFor=\"let item of fixtureTemplateDetails?.shelfConfig; let i = index\">\r\n <!--------------------------------[SHELF LEVEL - BRAND CATEGORY]---------------------------------------->\r\n <div id=\"shelf-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L2'\">\r\n <div [id]=\"'brand-category' + i\" class=\"brand-category\" *ngIf=\"item.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\" *ngIf=\"item.productBrandName?.length\">\r\n <ng-container *ngFor=\"let b of item.productBrandName; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n <span *ngIf=\"item.productCategory?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item.productCategory?.length\">\r\n <ng-container *ngFor=\"let b of item.productCategory; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of item.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"item.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of item.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n @if(item.shelfType ==='tray'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateDetails?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n <div style=\"width: 200px\"></div>\r\n </div>\r\n\r\n <!-- ===============Footer Info Cards=================== -->\r\n @if(fixtureTemplateDetails?.templateType === 'master'){\r\n <div id=\"footer\" class=\"row mx-0 my-5 gap-2\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-5\">\r\n <div>\r\n <h4>All variants</h4>\r\n <span>Showing all variants derived from this reference/master template.</span>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-2\" *ngIf=\"fixtureTemplatesList.length || searchTerm\">\r\n <div style=\"position: relative\" [ngClass]=\"{ 'd-none': viewMode === 'tree' }\">\r\n <input type=\"text\" [(ngModel)]=\"searchTerm\" (change)=\"onSearch()\"\r\n style=\"padding-left: 3rem; padding-right: 3rem\" class=\"form-control\" name=\"search\" autocomplete=\"off\"\r\n placeholder=\"Search\" />\r\n\r\n <span class=\"search-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-width=\"2\" />\r\n <line x1=\"13\" y1=\"13\" x2=\"16\" y2=\"16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n\r\n <button *ngIf=\"searchTerm\" type=\"button\" aria-label=\"Clear\" (click)=\"searchTerm = ''; onSearch()\"\r\n class=\"clear-search\">\r\n <svg width=\"64px\" height=\"64px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path d=\"M9 9L15 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n <path d=\"M15 9L9 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></circle>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div class=\"toggle-button me-1\" [ngClass]=\"{ selected: viewMode === 'list' }\"\r\n (click)=\"toggleViewMode('list')\">\r\n <svg width=\"19\" height=\"18\" viewBox=\"0 0 19 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M6.24078 4.54639H15.8906M6.24078 9.00017H15.8906M6.24078 13.4539H15.8906M2.5293 4.54639H2.53672M2.5293 9.00017H2.53672M2.5293 13.4539H2.53672\"\r\n [attr.stroke]=\"viewMode === 'list' ? '#009BF3' : '#344054'\" stroke-width=\"1.48756\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"toggle-button\" [ngClass]=\"{ selected: viewMode === 'tree' }\" (click)=\"toggleViewMode('tree')\">\r\n <svg width=\"19\" height=\"18\" viewBox=\"0 0 19 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9.92678 10.4845C7.43266 10.4845 6.61613 11.4866 6.3489 12.1472C7.14316 12.4887 7.69988 13.2755 7.69988 14.196C7.69988 14.7866 7.46527 15.353 7.04764 15.7706C6.63002 16.1882 6.0636 16.4228 5.47299 16.4228C4.88239 16.4228 4.31597 16.1882 3.89834 15.7706C3.48072 15.353 3.2461 14.7866 3.2461 14.196C3.2461 13.2235 3.86221 12.3996 4.7307 12.0953V5.9045C4.29573 5.75187 3.91908 5.4676 3.65304 5.09115C3.387 4.7147 3.24477 4.26476 3.2461 3.8038C3.2461 3.21319 3.48072 2.64677 3.89834 2.22915C4.31597 1.81152 4.88239 1.5769 5.47299 1.5769C6.0636 1.5769 6.63002 1.81152 7.04764 2.22915C7.46527 2.64677 7.69988 3.21319 7.69988 3.8038C7.69988 4.7762 7.08378 5.60015 6.21529 5.9045V9.83125C6.86851 9.34875 7.81865 8.99987 9.18448 8.99987C11.1664 8.99987 11.8271 8.0052 12.0423 7.34455C11.6362 7.17537 11.2892 6.88992 11.0449 6.52407C10.8005 6.15823 10.6698 5.72832 10.6691 5.28839C10.6691 4.69778 10.9037 4.13136 11.3213 3.71374C11.7389 3.29612 12.3054 3.0615 12.896 3.0615C13.4866 3.0615 14.053 3.29612 14.4706 3.71374C14.8882 4.13136 15.1229 4.69778 15.1229 5.28839C15.1229 6.28307 14.4696 7.14413 13.5715 7.41136C13.3785 8.47284 12.6584 10.4845 9.92678 10.4845ZM5.47299 13.4537C5.27612 13.4537 5.08732 13.5319 4.94811 13.6711C4.8089 13.8103 4.7307 13.9991 4.7307 14.196C4.7307 14.3928 4.8089 14.5816 4.94811 14.7208C5.08732 14.86 5.27612 14.9383 5.47299 14.9383C5.66986 14.9383 5.85867 14.86 5.99788 14.7208C6.13708 14.5816 6.21529 14.3928 6.21529 14.196C6.21529 13.9991 6.13708 13.8103 5.99788 13.6711C5.85867 13.5319 5.66986 13.4537 5.47299 13.4537ZM5.47299 3.0615C5.27612 3.0615 5.08732 3.1397 4.94811 3.27891C4.8089 3.41812 4.7307 3.60693 4.7307 3.8038C4.7307 4.00066 4.8089 4.18947 4.94811 4.32868C5.08732 4.46789 5.27612 4.54609 5.47299 4.54609C5.66986 4.54609 5.85867 4.46789 5.99788 4.32868C6.13708 4.18947 6.21529 4.00066 6.21529 3.8038C6.21529 3.60693 6.13708 3.41812 5.99788 3.27891C5.85867 3.1397 5.66986 3.0615 5.47299 3.0615ZM12.896 4.54609C12.6991 4.54609 12.5103 4.6243 12.3711 4.76351C12.2319 4.90271 12.1537 5.09152 12.1537 5.28839C12.1537 5.48526 12.2319 5.67406 12.3711 5.81327C12.5103 5.95248 12.6991 6.03069 12.896 6.03069C13.0928 6.03069 13.2816 5.95248 13.4208 5.81327C13.5601 5.67406 13.6383 5.48526 13.6383 5.28839C13.6383 5.09152 13.5601 4.90271 13.4208 4.76351C13.2816 4.6243 13.0928 4.54609 12.896 4.54609Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"loading; else contentPart\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #contentPart>\r\n <div *ngIf=\"!fixtureTemplatesList.length\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7.10938\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7.10938\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M48.6668 50.4427C43.0668 50.4427 41.2334 52.6927 40.6334 54.176C42.4168 54.9427 43.6668 56.7094 43.6668 58.776C43.6668 60.1021 43.14 61.3739 42.2023 62.3116C41.2646 63.2492 39.9929 63.776 38.6668 63.776C37.3407 63.776 36.0689 63.2492 35.1312 62.3116C34.1936 61.3739 33.6668 60.1021 33.6668 58.776C33.6668 56.5927 35.0501 54.7427 37.0001 54.0594V40.1594C36.0235 39.8167 35.1778 39.1784 34.5805 38.3332C33.9831 37.4879 33.6638 36.4777 33.6668 35.4427C33.6668 34.1166 34.1936 32.8448 35.1312 31.9072C36.0689 30.9695 37.3407 30.4427 38.6668 30.4427C39.9929 30.4427 41.2646 30.9695 42.2023 31.9072C43.14 32.8448 43.6668 34.1166 43.6668 35.4427C43.6668 37.626 42.2834 39.476 40.3334 40.1594V48.976C41.8001 47.8927 43.9334 47.1094 47.0001 47.1094C51.4501 47.1094 52.9334 44.876 53.4168 43.3927C52.505 43.0128 51.7258 42.3719 51.1772 41.5505C50.6286 40.7291 50.335 39.7638 50.3334 38.776C50.3334 37.4499 50.8602 36.1782 51.7979 35.2405C52.7356 34.3028 54.0074 33.776 55.3334 33.776C56.6595 33.776 57.9313 34.3028 58.869 35.2405C59.8067 36.1782 60.3334 37.4499 60.3334 38.776C60.3334 41.0094 58.8668 42.9427 56.8501 43.5427C56.4168 45.926 54.8001 50.4427 48.6668 50.4427ZM38.6668 57.1094C38.2247 57.1094 37.8008 57.2849 37.4883 57.5975C37.1757 57.9101 37.0001 58.334 37.0001 58.776C37.0001 59.218 37.1757 59.642 37.4883 59.9545C37.8008 60.2671 38.2247 60.4427 38.6668 60.4427C39.1088 60.4427 39.5327 60.2671 39.8453 59.9545C40.1578 59.642 40.3334 59.218 40.3334 58.776C40.3334 58.334 40.1578 57.9101 39.8453 57.5975C39.5327 57.2849 39.1088 57.1094 38.6668 57.1094ZM38.6668 33.776C38.2247 33.776 37.8008 33.9516 37.4883 34.2642C37.1757 34.5767 37.0001 35.0007 37.0001 35.4427C37.0001 35.8847 37.1757 36.3086 37.4883 36.6212C37.8008 36.9338 38.2247 37.1094 38.6668 37.1094C39.1088 37.1094 39.5327 36.9338 39.8453 36.6212C40.1578 36.3086 40.3334 35.8847 40.3334 35.4427C40.3334 35.0007 40.1578 34.5767 39.8453 34.2642C39.5327 33.9516 39.1088 33.776 38.6668 33.776ZM55.3334 37.1094C54.8914 37.1094 54.4675 37.2849 54.1549 37.5975C53.8424 37.9101 53.6668 38.334 53.6668 38.776C53.6668 39.218 53.8424 39.642 54.1549 39.9545C54.4675 40.2671 54.8914 40.4427 55.3334 40.4427C55.7755 40.4427 56.1994 40.2671 56.5119 39.9545C56.8245 39.642 57.0001 39.218 57.0001 38.776C57.0001 38.334 56.8245 37.9101 56.5119 37.5975C56.1994 37.2849 55.7755 37.1094 55.3334 37.1094Z\"\r\n fill=\"#009BF3\" />\r\n </svg>\r\n <div class=\"nodatamaintext mt-3\">No variants found</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"fixtureTemplatesList.length\">\r\n <!-- Fixture Template list view -->\r\n <section id=\"list-view\" *ngIf=\"viewMode === 'list'\">\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\" *ngIf=\"fixtureTemplatesList.length\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <span (click)=\"sortTable('fixtureName')\" class=\"cursor-pointer\">\r\n Variant\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'fixtureName' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'fixtureName' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('storeCount')\" class=\"cursor-pointer\">\r\n Assigned Stores\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'storeCount' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'storeCount' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('productBrandName')\" class=\"cursor-pointer\">\r\n Brand\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'productBrandName' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'productBrandName' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('productCategory')\" class=\"cursor-pointer\">\r\n Product category\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'productCategory' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'productCategory' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('status')\" class=\"cursor-pointer\">\r\n Status\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'status' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'status' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"sortTable('updatedAt')\" class=\"cursor-pointer\">\r\n Last Update\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'status' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'status' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let childTemplate of fixtureTemplatesList\">\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <div class=\"thumbnail\"></div> -->\r\n <div>\r\n <a [routerLink]=\"['/manage/planogram/fixture-template/basic-details']\"\r\n [queryParams]=\"{ templateId: childTemplate._id, isEdit: false }\"\r\n class=\"text-decoration-underline\">\r\n {{ childTemplate.fixtureName }}\r\n </a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div>\r\n <a [routerLink]=\"['/manage/planogram/fixture-template/basic-details']\"\r\n [queryParams]=\"{ templateId: childTemplate._id, isEdit: false }\"\r\n class=\"text-decoration-underline\">\r\n {{ childTemplate.storeCount }}\r\n </a>\r\n </div>\r\n </td>\r\n <td>\r\n <span *ngIf=\"childTemplate.productBrandName.length <= 0\"> - </span>\r\n\r\n <div [ngbTooltip]=\"brandTooltip\" class=\"cursor-pointer\">\r\n <div *ngFor=\"let b of childTemplate.productBrandName; let i = index\"\r\n class=\"badge inactive me-2\">\r\n <span *ngIf=\"i <= 2\"> {{ b }} </span>\r\n <span *ngIf=\"i === 3\"> +{{ childTemplate.productBrandName.length - 3 }} </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandTooltip>\r\n <ng-container *ngFor=\"let c of childTemplate.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <span *ngIf=\"childTemplate.productCategory.length <= 0\"> - </span>\r\n\r\n <div [ngbTooltip]=\"categoryTooltip\" class=\"cursor-pointer\">\r\n <div *ngFor=\"let item of childTemplate.productCategory; let i = index\"\r\n class=\"badge inactive me-2\">\r\n <span *ngIf=\"i <= 2\"> {{ item }} </span>\r\n <span *ngIf=\"i === 3\"> +{{ childTemplate.productCategory.length - 3 }} </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #categoryTooltip>\r\n <ng-container *ngFor=\"let c of childTemplate.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <div class=\"badge\" [ngClass]=\"childTemplate.status\">{{ childTemplate.status | titlecase }}</div>\r\n </td>\r\n <td>\r\n <span [ngbTooltip]=\"childTemplate?.updatedAt | date : 'medium'\">\r\n {{ childTemplate?.updatedAt | date }}\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"dropdown\">\r\n <button class=\"btn btn-link p-0\" type=\"button\" data-bs-toggle=\"dropdown\">\r\n <i class=\"bi bi-three-dots-vertical\"></i>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li><a class=\"dropdown-item cursor-pointer\" (click)=\"onEdit(childTemplate._id!)\">Edit</a></li>\r\n <li>\r\n <a class=\"dropdown-item cursor-pointer\"\r\n (click)=\"onDuplicate(childTemplate._id!)\">Duplicate</a>\r\n </li>\r\n <li>\r\n <a class=\"dropdown-item cursor-pointer\" [routerLink]=\"['/manage/planogram/findAndReplace']\"\r\n [queryParams]=\"{ selectedFixture: childTemplate._id }\">Find and replace</a>\r\n </li>\r\n <li>\r\n <a class=\"dropdown-item cursor-pointer text-danger\"\r\n (click)=\"onDelete(childTemplate._id!, childTemplate.storeCount)\">\r\n Delete\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <lib-pagination *ngIf=\"fixtureTemplatesList.length\" [itemsPerPage]=\"limit\" [currentPage]=\"offset\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\">\r\n </lib-pagination>\r\n </div>\r\n </section>\r\n\r\n <!-- Fixture Template tree view -->\r\n <section id=\"tree-view\" *ngIf=\"viewMode === 'tree'\">\r\n <fixture-template-tree [masterFixtureData]=\"fixtureTemplateDetails\"\r\n [viewMode]=\"'master'\"></fixture-template-tree>\r\n </section>\r\n </div>\r\n </ng-template>\r\n </div>\r\n }\r\n</section>\r\n\r\n<section id=\"template-summary-skeleton\" *ngIf=\"isPageLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.badge.inactive{background:#f2f4f7!important;color:#344054!important}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}#template-summary #vm-products-sum{margin:0 auto}#template-summary #vm-products-sum .body-block{position:relative}#template-summary #vm-products-sum .body-block .block{border:none}#template-summary #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid var(--Primary-200, #99daff);background:var(--White, #fff);top:50%;left:50%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#template-summary #vm-products-sum #fixture-level .brand,#template-summary #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#template-summary #vm-products-sum #fixture-level .category{margin-top:12px}#template-summary #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#template-summary #vm-products-sum #section-level .brand,#template-summary #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#template-summary #vm-products-sum #section-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#template-summary #vm-products-sum #section-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#template-summary #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#template-summary #vm-products-sum #section-level #body-loader{height:100%;width:100%;position:absolute;display:flex;justify-content:center;align-items:center;z-index:1;background:#fff3;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(10px)}#template-summary #vm-products-sum #section-level #body-loader .loader{width:30px;height:30px;border:4px solid #f3f3f3;border-top:4px solid #00a3ff;border-radius:50%;animation:spin 1s linear infinite;margin:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#template-summary #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#template-summary #vm-products-sum #shelf-level .brand,#template-summary #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#template-summary #vm-products-sum #shelf-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#template-summary #vm-products-sum #shelf-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#template-summary #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#template-summary #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}#template-summary #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#template-summary #vm-products-sum .sub-footer{position:relative;width:48%}#template-summary #vm-products-sum img{width:100%;height:100%;display:block}#template-summary #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;transition:all .3s ease}#template-summary #vm-products-sum .vm-block h3{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;margin:0;width:100%;text-overflow:ellipsis;overflow:hidden}#template-summary #vm-products-sum .vm-placeholder{border:4px solid var(--Black, #101828);background:#f9fafb;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:8px;white-space:nowrap;overflow:hidden}#template-summary .filter-tab{border-radius:6px;background:var(--Gray-50, #f9fafb);border:none;cursor:default}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.nodatamaintext{color:var(--Black, #101828);text-align:center;font-family:Inter;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.version-block{max-width:430px;border-right:1px solid var(--Gray-300, #d0d5dd);padding:12px;background:#fff}.version-block .version-tile{border-radius:4px;display:flex;width:412px;padding:14px 12px;align-items:center;justify-content:space-between;gap:35px;cursor:pointer}.version-block .version-tile p{color:var(--Gray-900, #101828);font-size:14px;font-weight:500;line-height:20px;margin:0}.version-block .version-tile.active{background:var(--Primary-50, #eaf8ff)}.version-block .version-tile:hover{background:#eff9fd}.no-version-block{display:flex;justify-content:center;align-items:center;flex-direction:column;gap:12px;width:100%;min-width:0;max-width:400px;padding:32px;border-radius:12px;background:var(--Gray-50, #f9fafb)}.no-version-block span{color:var(--Black, #101828);text-align:center;font-size:16px;font-weight:500}\n"] }]
|
|
640
640
|
}], ctorParameters: () => [{ type: i1.PlanoDataService }, { type: i2.StoreBuilderService }, { type: i3.GlobalStateService }, { type: i4.ToastService }, { type: i5.NgbModal }, { type: i6.Router }, { type: i3.PageInfoService }, { type: i0.ChangeDetectorRef }, { type: i6.ActivatedRoute }] });
|
|
641
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtc3VtbWFyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9maXh0dXJlLXRlbXBsYXRlL3RlbXBsYXRlLXN1bW1hcnkvdGVtcGxhdGUtc3VtbWFyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9maXh0dXJlLXRlbXBsYXRlL3RlbXBsYXRlLXN1bW1hcnkvdGVtcGxhdGUtc3VtbWFyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVDLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHbEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBS3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFFbkgsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDN0csT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7Ozs7O0FBTzlGLE1BQU0sT0FBTyx3QkFBd0I7SUE2Q3pCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQW5EVixzQkFBc0IsQ0FBZ0M7SUFDdEQsUUFBUSxDQUFTO0lBRWpCLGtCQUFrQixHQUFXLGdCQUFnQixDQUFDO0lBRTlDLE1BQU0sR0FBb0IsRUFBRSxDQUFDO0lBQzdCLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFF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Q3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRWhCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQWlCO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsa0RBQWtELENBQUMsRUFBRTtZQUN6RSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0EzdUJVLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLDREQ3JCckMsOHRsQ0EwbkJBOzs0RkRybUJhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20sIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFBsYW5vRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wbGFuby1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyByZ2JUb0hleCB9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucy9wbGFuby5mdW5jdGlvbic7XHJcbmltcG9ydCB7IFZtTGlicmFyeUxpc3QgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL3ZtLWxpYnJhcnkuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgU0hFTEZfQ09MT1JTIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS9maXh0dXJlLXRlbXBsYXRlLmRhdGEnO1xyXG5pbXBvcnQgeyBDb21wbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvcHVwcy9jb21wbGV0ZS1jb25maXJtYXRpb24vY29tcGxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMsIFNlY3Rpb25Db25maWcsIFNoZWxmQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9maXh0dXJlLXRlbXBsYXRlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvcHVwcy9kZWxldGUtY29uZmlybWF0aW9uL2RlbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2Fubm90UGVyZm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvcHVwcy9jYW5ub3QtcGVyZm9ybS9jYW5ub3QtcGVyZm9ybS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXRlbXBsYXRlLXN1bW1hcnlcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RlbXBsYXRlLXN1bW1hcnkuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3RlbXBsYXRlLXN1bW1hcnkuY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlU3VtbWFyeUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3kge1xyXG4gIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM6IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgfCBudWxsO1xyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcblxyXG4gIHNlbGVjdGVkU3VtbWFyeVRhYjogc3RyaW5nID0gXCJmaXh0dXJlRGV0YWlsc1wiO1xyXG5cclxuICB2bUxpc3Q6IFZtTGlicmFyeUxpc3RbXSA9IFtdO1xyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBzaG93Vk1zOiBib29sZWFuID0gdHJ1ZTtcclxuICAvLyBzaG93UHJvZHVjdFNwb3RzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gc2hvd0JyYW5kQ2F0ZWdvcnk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaW1nQ0ROOiBzdHJpbmc7XHJcbiAgc2hlbGZDb2xvcnMgPSBTSEVMRl9DT0xPUlM7XHJcblxyXG4gIHNlY3Rpb25CeVpvbmVzOiB7XHJcbiAgICB6b25lOiBzdHJpbmc7XHJcbiAgICBzZWN0aW9uOiB7XHJcbiAgICAgIGJyYW5kczogc3RyaW5nW107XHJcbiAgICAgIGNhdGVnb3JpZXM6IHN0cmluZ1tdO1xyXG4gICAgICBzaGVsdmVzOiBzdHJpbmdbXTtcclxuICAgICAgc2hlbGZEaXZzOiAoSFRNTEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKVtdO1xyXG4gICAgfTtcclxuICB9W10gPSBbXTtcclxuICBmaXh0dXJlVGVtcGxhdGVzTGlzdDogYW55ID0gW107XHJcbiAgdG90YWxJdGVtczogbnVtYmVyID0gMDtcclxuICBwYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XHJcbiAgbGltaXQ6IG51bWJlciA9IDEwO1xyXG4gIG9mZnNldDogbnVtYmVyID0gMTtcclxuICBzb3J0ZWRDb2x1bW46IHN0cmluZyA9IFwiXCI7XHJcbiAgc29ydE9yZGVyOiBudW1iZXIgPSAxO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHZpZXdNb2RlOiBcImxpc3RcIiB8IFwidHJlZVwiID0gXCJsaXN0XCI7XHJcbiAgc2VhcmNoVGVybTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgdGVtcGxhdGVWZXJzaW9uczogYW55W10gPSBbXVxyXG4gIHNlbGVjdGVkVmVyc2lvbklkOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgaXNWTUluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBpc0JDSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHBzOiBQbGFub0RhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ2JNb2RhbDogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxyXG4gICkgeyB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zZXRQYWdlRGF0YSgpO1xyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50XHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZW52KSA9PiAodGhpcy5pbWdDRE4gPSBlbnYucGxhbm9ncmFtQ0ROKSk7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0Vm1zTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHNcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzID0gZGF0YTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/Ll9pZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0VmFyaWFudExpc3QoKTtcclxuICAgICAgICAgICAgICB0aGlzLmdldFZlcnNpb25zTGlzdCh0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/Ll9pZClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZUZvcm0kXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLnN1Ym1pdEZvcm0oZGF0YSkpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIlN1bW1hcnlcIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKFtcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlBsYW5vZ3JhbVwiLFxyXG4gICAgICAgIHBhdGg6IFwiL21hbmFnZS9wbGFub2dyYW0vbWFuYWdlLXBsYW5vZ3JhbXNcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICB7IHRpdGxlOiBcIlwiLCBwYXRoOiBcIlwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogXCJGaXh0dXJlIFRlbXBsYXRlXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9maXh0dXJlLXRlbXBsYXRlc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiXCIsIHBhdGg6IFwiXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IHRydWUgfSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzQkNJbml0aWFsaXplZCkge1xyXG4gICAgICB0aGlzLmlzQkNJbml0aWFsaXplZCA9IHRoaXMuYXBwbHlTaGVsZkNvbG9ycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pc1ZNSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgdGhpcy5pc1ZNSW5pdGlhbGl6ZWQgPSB0aGlzLmhhbmRsZVZtUG9zaXRpb25BbmRTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRWbXNMaXN0KCkge1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICBsaW1pdDogMTAwMDAsXHJcbiAgICAgIG9mZnNldDogMCxcclxuICAgICAgc29ydENvbHVtbk5hbWU6IFwiXCIsXHJcbiAgICAgIHNvcnRCeTogMSxcclxuICAgICAgc2VhcmNoVmFsdWU6IFwiXCIsXHJcbiAgICAgIGZpbHRlcjoge1xyXG4gICAgICAgIHR5cGU6IFtdLFxyXG4gICAgICAgIHN0YXR1czogW10sXHJcbiAgICAgICAgc2l6ZTogW10sXHJcbiAgICAgIH0sXHJcbiAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICAgIGVtcHR5RG93bmxvYWQ6IGZhbHNlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFZtTGlicmFyeUxpc3QocGF5bG9hZClcclxuICAgICAgKTtcclxuICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgIHRoaXMudm1MaXN0ID0gcmVzPy5kYXRhPy5kYXRhLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogaXRlbS5faWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udm1OYW1lLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTpcclxuICAgICAgICAgICAgICBpdGVtLnZtTmFtZSArIChpdGVtPy52bVR5cGUgPyBgICggJHtpdGVtLnZtVHlwZX0gKSBgIDogXCJcIiksXHJcbiAgICAgICAgICAgIGJyYW5kOiBpdGVtLnZtQnJhbmQsXHJcbiAgICAgICAgICAgIHR5cGU6IGl0ZW0udm1UeXBlLFxyXG4gICAgICAgICAgICB3aWR0aDogaXRlbS52bVdpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGl0ZW0udm1IZWlnaHQudmFsdWUsXHJcbiAgICAgICAgICAgIHBsYWNlbWVudDogaXRlbS5pc0RvdWJsZVNpZGVkLFxyXG4gICAgICAgICAgICBub09mQXNzaWduZWQ6IGl0ZW0udGVtcGxhdGVDb3VudCxcclxuICAgICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcclxuICAgICAgICAgICAgLi4uKGl0ZW0udm1JbWFnZVVybFxyXG4gICAgICAgICAgICAgID8geyBpbWdVcmw6IGAke3RoaXMuaW1nQ0ROfSR7aXRlbS52bUltYWdlVXJsfWAgfVxyXG4gICAgICAgICAgICAgIDoge30pLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IGdldFZtc0xpc3QgW0VSUl06XCIsIGVycm9yKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gb25DaGFuZ2VWbVZpc2liaWxpdHkoKSB7XHJcbiAgLy8gICBpZiAodGhpcy5zaG93Vk1zKSB7XHJcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5oYW5kbGVWbVBvc2l0aW9uQW5kU2l6ZSgpLCAwKTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hcHBseVNoZWxmQ29sb3JzKCksIDApO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgb25DaGFuZ2VCcmFuZEFuZENhdGVnb3J5VmlzaWJpbGl0eSgpIHsgfVxyXG5cclxuICBnZXRTZWxlY3RlZFZNKHZtOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLnZtTGlzdC5maW5kKCh2KSA9PiB2LmlkID09PSB2bT8udm1JZCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVWbVBvc2l0aW9uQW5kU2l6ZSgpIHtcclxuICAgIC8vIGlmICghdGhpcy5zaG93Vk1zKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB2aWV3UG9ydCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYm9keS1ibG9jay1zdW1cIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoIXZpZXdQb3J0KSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgYm9keVdpZHRoID0gdmlld1BvcnQub2Zmc2V0V2lkdGg7XHJcblxyXG4gICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy52bUNvbmZpZz8uZm9yRWFjaCgoZSwgaSkgPT4ge1xyXG4gICAgICBsZXQgc3RhcnRTaGVsZiA9IGU/LnN0YXJ0WVBvc2l0aW9uID8/IDE7XHJcblxyXG4gICAgICBsZXQgZW5kU2hlbGYgPVxyXG4gICAgICAgIGU/LmVuZFlQb3NpdGlvbiA/P1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lmxlbmd0aCA/P1xyXG4gICAgICAgIDE7XHJcblxyXG4gICAgICBjb25zdCB2bSA9IHZpZXdQb3J0LnF1ZXJ5U2VsZWN0b3IoYCN2bSR7aX1gKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKCF2bSkgcmV0dXJuO1xyXG5cclxuICAgICAgbGV0IHggPSAwO1xyXG4gICAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgICBsZXQgeVN0YXJ0ID0gMDtcclxuICAgICAgZm9yIChsZXQgayA9IDE7IGsgPCBzdGFydFNoZWxmOyBrKyspIHtcclxuICAgICAgICBjb25zdCBzID0gZ2V0U2hlbGZEaXYoayk7XHJcbiAgICAgICAgaWYgKCFzKSByZXR1cm47XHJcblxyXG4gICAgICAgIHlTdGFydCArPSBzLm9mZnNldEhlaWdodDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHBsYWNlbWVudEhlaWdodCA9IDA7XHJcbiAgICAgIGxldCBwbGFjZW1lbnRXaWR0aCA9IGJvZHlXaWR0aDtcclxuXHJcbiAgICAgIGZvciAobGV0IGsgPSBzdGFydFNoZWxmOyBrIDw9IGVuZFNoZWxmOyBrKyspIHtcclxuICAgICAgICBjb25zdCBzID0gZ2V0U2hlbGZEaXYoayk7XHJcbiAgICAgICAgaWYgKCFzKSByZXR1cm47XHJcbiAgICAgICAgcGxhY2VtZW50SGVpZ2h0ICs9IHMub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZGVmYXVsdFcgPSBwbGFjZW1lbnRXaWR0aCAvIDM7XHJcbiAgICAgIGxldCBkZWZhdWx0SCA9IHBsYWNlbWVudEhlaWdodCAvIDM7XHJcblxyXG4gICAgICBsZXQgd2lkdGggPSBkZWZhdWx0VztcclxuICAgICAgbGV0IGhlaWdodCA9IGRlZmF1bHRIO1xyXG5cclxuICAgICAgc3dpdGNoIChlPy54Wm9uZSkge1xyXG4gICAgICAgIGNhc2UgXCJsZWZ0XCI6XHJcbiAgICAgICAgICB4ID0gMDtcclxuICAgICAgICAgIHdpZHRoID0gZGVmYXVsdFc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcclxuICAgICAgICAgIHdpZHRoID0gZGVmYXVsdFc7XHJcbiAgICAgICAgICB4ID0gYm9keVdpZHRoIC0gd2lkdGg7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICB3aWR0aCA9IGRlZmF1bHRXO1xyXG4gICAgICAgICAgeCA9IChib2R5V2lkdGggLSB3aWR0aCkgLyAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInN0cmV0Y2hcIjpcclxuICAgICAgICAgIHdpZHRoID0gYm9keVdpZHRoO1xyXG4gICAgICAgICAgeCA9IDA7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoIChlPy55Wm9uZSkge1xyXG4gICAgICAgIGNhc2UgXCJ0b3BcIjpcclxuICAgICAgICAgIGhlaWdodCA9IHBsYWNlbWVudEhlaWdodCA8IGRlZmF1bHRIID8gcGxhY2VtZW50SGVpZ2h0IC0gMjAgOiBkZWZhdWx0SDtcclxuICAgICAgICAgIHkgPSB5U3RhcnQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnRIZWlnaHQgPCBkZWZhdWx0SCA/IHBsYWNlbWVudEhlaWdodCAtIDIwIDogZGVmYXVsdEg7XHJcbiAgICAgICAgICB5ID0gKHBsYWNlbWVudEhlaWdodCAtIGhlaWdodCkgLyAyICsgeVN0YXJ0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gcGxhY2VtZW50SGVpZ2h0IDwgZGVmYXVsdEggPyBwbGFjZW1lbnRIZWlnaHQgLSAyMCA6IGRlZmF1bHRIO1xyXG4gICAgICAgICAgeSA9IHBsYWNlbWVudEhlaWdodCAtIGhlaWdodCArIHlTdGFydDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzdHJldGNoXCI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnRIZWlnaHQ7XHJcbiAgICAgICAgICB5ID0geVN0YXJ0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZtLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xyXG4gICAgICB2bS5zdHlsZS5oZWlnaHQgPSBgICR7aGVpZ2h0fXB4YDtcclxuICAgICAgdm0uc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xyXG5cclxuICAgICAgZnVuY3Rpb24gZ2V0U2hlbGZEaXYoazogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGRpdiA9IHZpZXdQb3J0LnF1ZXJ5U2VsZWN0b3IoYCNzaGVsZiR7a31gKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoIWRpdikgZGl2ID0gdmlld1BvcnQucXVlcnlTZWxlY3RvcihgI3RyYXkke2t9YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGRpdiBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFwcGx5U2hlbGZDb2xvcnMoKSB7XHJcbiAgICBjb25zdCBib2RpZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJvZHktYmxvY2stc3VtXCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCFib2RpZXMpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBib2R5Q2hpbGRyZW4gPSBBcnJheS5mcm9tKGJvZGllcz8uY2hpbGRyZW4gPz8gW10pIGFzIEhUTUxFbGVtZW50W107XHJcblxyXG4gICAgY29uc3Qgc2hlbGZEaXZzID0gYm9keUNoaWxkcmVuXHJcblxyXG4gICAgICAubWFwKChkaXYpID0+IGRpdiBhcyBIVE1MRWxlbWVudClcclxuICAgICAgLmZpbHRlcigoZCkgPT4gZD8uaWQuaW5jbHVkZXMoXCJzdW1TaGVsZkNvbnRhaW5lclwiKSk7XHJcblxyXG4gICAgaWYgKCFzaGVsZkRpdnMpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBhZGp1c3QgPSAzMDA7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCkge1xyXG4gICAgICBjYXNlIFwiTDFcIjogLy9maXh0dXJlXHJcbiAgICAgICAgc2hlbGZEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgIGlmIChkKSBkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbMF0uYmc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwiTDNcIjogLy9zZWN0aW9uXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29uc3Qgc2hlbHZlcyA9IHNoZWxmRGl2c1xyXG4gICAgICAgICAgICAubWFwKChkaXYpID0+XHJcbiAgICAgICAgICAgICAgZGl2Lmxhc3RFbGVtZW50Q2hpbGQ/LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJkaXZcIlxyXG4gICAgICAgICAgICAgICAgPyAoZGl2Lmxhc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgICAgICAgIHRoaXMuY29uc3RydWN0U2VxdWVudGlhbFNlY3Rpb24oc2hlbHZlcyk7XHJcbiAgICAgICAgICBjb25zdCBzZWN0aW9uQXJyYXkgPSB0aGlzLmdyb3VwU2hlbHZlc0J5Wm9uZShcclxuICAgICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZyA/PyBbXVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGFsbFNlY3Rpb25TaGVsdmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICAgIHNlY3Rpb25BcnJheS5mb3JFYWNoKChzZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzaGVsZklkcyA9XHJcbiAgICAgICAgICAgICAgc2Uuc2hlbHZlcz8ubWFwKChzaCkgPT4gc2gucmVwbGFjZSgvXFxzL2csIFwiXCIpLnRvTG93ZXJDYXNlKCkpID8/XHJcbiAgICAgICAgICAgICAgW107XHJcbiAgICAgICAgICAgIGFsbFNlY3Rpb25TaGVsdmVzLnB1c2goLi4uc2hlbGZJZHMpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNEaXZzID0gc2hlbHZlcy5maWx0ZXIoKGl0ZW0pID0+XHJcbiAgICAgICAgICAgICAgc2hlbGZJZHM/LmluY2x1ZGVzKGl0ZW0/LmlkID8/IFwiXCIpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzZWNEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZCkgZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnNoZWxmQ29sb3JzW2ldLmJnO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHVuYXNzaWduZWRTaGVsdmVzID0gc2hlbGZEaXZzLmZpbHRlcihcclxuICAgICAgICAgICAgKGl0ZW0pID0+ICFhbGxTZWN0aW9uU2hlbHZlcy5pbmNsdWRlcyhpdGVtLmlkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHVuYXNzaWduZWRTaGVsdmVzLmZvckVhY2goKGQpID0+IChkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwid2hpdGVcIikpO1xyXG5cclxuICAgICAgICAgIGxldCBzZWN0aW9uR3JvdXBIZWlnaHQgPSAwO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMuZm9yRWFjaCgoc3osIGkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VjdGlvbkhlaWdodCA9IHN6LnNlY3Rpb24uc2hlbGZEaXZzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChoLCBkKSA9PiBoICsgKGQ/Lm9mZnNldEhlaWdodCA/PyAwKSxcclxuICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9uV2lkdGggPVxyXG4gICAgICAgICAgICAgICAgc3ouc2VjdGlvbi5zaGVsZkRpdnNbMF0/Lm9mZnNldFdpZHRoID8/IDM0NTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgYmMgPSBib2RpZXMucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXHJcbiAgICAgICAgICAgICAgICBgI2JyYW5kLWNhdGVnb3J5JHtpfWBcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoYmMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY0JnID0gcmdiVG9IZXgoXHJcbiAgICAgICAgICAgICAgICAgIHN6LnNlY3Rpb24uc2hlbGZEaXZzWzBdPy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3JcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xvciA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hlbGZDb2xvcnMuZmluZCgoYykgPT4gYy5iZyA9PT0gc2VjQmcpID8/XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hlbGZDb2xvcnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgYmMuc3R5bGUuYm9yZGVyQ29sb3IgPSBjb2xvci5ib3JkZXI7XHJcbiAgICAgICAgICAgICAgICBiYy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIiNmZmZcIjtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBiY1ggPSAoY3VycmVudFNlY3Rpb25XaWR0aCAtIGJjLm9mZnNldFdpZHRoKSAvIDI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiY1kgPVxyXG4gICAgICAgICAgICAgICAgICAoY3VycmVudFNlY3Rpb25IZWlnaHQgLSBiYy5vZmZzZXRIZWlnaHQpIC8gMiArXHJcbiAgICAgICAgICAgICAgICAgIHNlY3Rpb25Hcm91cEhlaWdodDtcclxuICAgICAgICAgICAgICAgIGJjLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtiY1ggKyBhZGp1c3R9cHgsICR7YmNZfXB4KWA7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VjdGlvbkdyb3VwSGVpZ2h0ICs9IGN1cnJlbnRTZWN0aW9uSGVpZ2h0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBcIkwyXCI6IC8vc2hlbGZcclxuICAgICAgICB7XHJcbiAgICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZGl2LCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnNoZWxmQ29sb3JzW2ldLmJnO1xyXG4gICAgICAgICAgICBkaXYuc3R5bGUuYm9yZGVyID0gYDEuNHB4IHNvbGlkICR7dGhpcy5zaGVsZkNvbG9yc1tpXS5ib3JkZXJ9YDtcclxuICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hvd1ZNcykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBiYyA9IGRpdi5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgI2JyYW5kLWNhdGVnb3J5JHtpfWApO1xyXG4gICAgICAgICAgICBpZiAoIWJjKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBiY1ggPSAoZGl2Lm9mZnNldFdpZHRoIC0gYmMub2Zmc2V0V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgY29uc3QgYmNZID0gKGRpdi5vZmZzZXRIZWlnaHQgLSBiYy5vZmZzZXRIZWlnaHQpIC8gMjtcclxuXHJcbiAgICAgICAgICAgIGJjLnN0eWxlLmJvcmRlckNvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1tpXS5ib3JkZXI7XHJcbiAgICAgICAgICAgIGJjLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0udGV4dEJnO1xyXG4gICAgICAgICAgICBiYy5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7YmNYICsgYWRqdXN0fXB4LCAke2JjWX1weClgO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiTDRcIjogLy9zcG90XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgc2hlbGZEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGQpIGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1swXS5iZztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGQpIGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1swXS5iZztcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdFNlcXVlbnRpYWxTZWN0aW9uKHNoZWxmRGl2czogKEhUTUxFbGVtZW50IHwgbnVsbClbXSkge1xyXG4gICAgY29uc3QgbmV3U2VjdGlvbkJ5Wm9uZXMgPSBbXTtcclxuXHJcbiAgICBsZXQgcFpvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgZm9yIChjb25zdCBzIG9mIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWcgPz8gW10pIHtcclxuICAgICAgY29uc3Qgem9uZSA9IHMuem9uZSB8fCBcIlwiO1xyXG4gICAgICBjb25zdCBzaGVsZklkID0gYCR7cy5zaGVsZlR5cGV9JHtzLnNoZWxmTnVtYmVyfWA7XHJcbiAgICAgIGNvbnN0IHNoZWxmRGl2ID0gc2hlbGZEaXZzLmZpbmQoKGQpID0+IGQ/LmlkID09PSBzaGVsZklkKTtcclxuXHJcbiAgICAgIGlmICh6b25lID09PSBcIlwiKSBjb250aW51ZTtcclxuICAgICAgaWYgKHpvbmUgIT09IHBab25lKSB7XHJcbiAgICAgICAgbmV3U2VjdGlvbkJ5Wm9uZXMucHVzaCh7XHJcbiAgICAgICAgICB6b25lLFxyXG4gICAgICAgICAgc2VjdGlvbjoge1xyXG4gICAgICAgICAgICBicmFuZHM6IHMucHJvZHVjdEJyYW5kTmFtZSA/PyBbXSxcclxuICAgICAgICAgICAgY2F0ZWdvcmllczogcy5wcm9kdWN0Q2F0ZWdvcnkgPz8gW10sXHJcbiAgICAgICAgICAgIHNoZWx2ZXM6IFtzaGVsZklkXSxcclxuICAgICAgICAgICAgc2hlbGZEaXZzOiBbc2hlbGZEaXZdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwWm9uZSA9IHpvbmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3U2VjdGlvbkJ5Wm9uZXNbbmV3U2VjdGlvbkJ5Wm9uZXMubGVuZ3RoIC0gMV0uc2VjdGlvbi5zaGVsdmVzLnB1c2goXHJcbiAgICAgICAgICBzaGVsZklkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBuZXdTZWN0aW9uQnlab25lc1tuZXdTZWN0aW9uQnlab25lcy5sZW5ndGggLSAxXS5zZWN0aW9uLnNoZWxmRGl2cy5wdXNoKFxyXG4gICAgICAgICAgc2hlbGZEaXZcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWN0aW9uQnlab25lcyA9IFsuLi5uZXdTZWN0aW9uQnlab25lc107XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGdyb3VwU2hlbHZlc0J5Wm9uZShpbnB1dDogU2hlbGZDb25maWdbXSk6IFNlY3Rpb25Db25maWdbXSB7XHJcbiAgICBjb25zdCB6b25lTWFwOiB7IFt6b25lOiBzdHJpbmddOiBTZWN0aW9uQ29uZmlnIH0gPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXQpIHtcclxuICAgICAgY29uc3Qgem9uZSA9IGl0ZW0/LnpvbmUgPz8gXCJcIjtcclxuICAgICAgY29uc3Qgc2hlbGZMYWJlbCA9IGAke2l0ZW0uc2hlbGZUeXBlfSAke2l0ZW0uc2hlbGZOdW1iZXJ9YDtcclxuXHJcbiAgICAgIGlmICghem9uZU1hcFt6b25lXSkge1xyXG4gICAgICAgIHpvbmVNYXBbem9uZV0gPSB7XHJcbiAgICAgICAgICBzaGVsdmVzOiBbXSxcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6XHJcbiAgICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiXHJcbiAgICAgICAgICAgICAgPyBpdGVtLnByb2R1Y3RCcmFuZE5hbWVcclxuICAgICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OlxyXG4gICAgICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDJcIlxyXG4gICAgICAgICAgICAgID8gaXRlbS5wcm9kdWN0Q2F0ZWdvcnlcclxuICAgICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgem9uZTogem9uZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB6b25lTWFwW3pvbmVdPy5zaGVsdmVzPy5wdXNoKHNoZWxmTGFiZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHpvbmVNYXApO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlTZWN0aW9uQ29uZmlnVG9TaGVsdmVzKHNlY3Rpb25zOiBTZWN0aW9uQ29uZmlnW10pOiBTaGVsZkNvbmZpZ1tdIHtcclxuICAgIGNvbnN0IHNlY3Rpb25NYXAgPSBuZXcgTWFwPFxyXG4gICAgICBzdHJpbmcsXHJcbiAgICAgIFBpY2s8U2VjdGlvbkNvbmZpZywgXCJ6b25lXCIgfCBcInByb2R1Y3RCcmFuZE5hbWVcIiB8IFwicHJvZHVjdENhdGVnb3J5XCI+XHJcbiAgICA+KCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc2hlbGZMYWJlbCBvZiBzZWN0aW9uLnNoZWx2ZXMhKSB7XHJcbiAgICAgICAgc2VjdGlvbk1hcC5zZXQoc2hlbGZMYWJlbCwge1xyXG4gICAgICAgICAgem9uZTogc2VjdGlvbi56b25lLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTogc2VjdGlvbi5wcm9kdWN0QnJhbmROYW1lLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiBzZWN0aW9uLnByb2R1Y3RDYXRlZ29yeSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFwcGx5IG92ZXJyaWRlcyB0byBtYXRjaGluZyBzaGVsdmVzXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnPy5tYXAoKHNoZWxmKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2hlbGZMYWJlbCA9IGAke3NoZWxmLnNoZWxmVHlwZX0gJHtzaGVsZi5zaGVsZk51bWJlcn1gO1xyXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlID0gc2VjdGlvbk1hcC5nZXQoc2hlbGZMYWJlbCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5zaGVsZixcclxuICAgICAgICAgIHpvbmU6IG92ZXJyaWRlPy56b25lIHx8IFwiXCIsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBvdmVycmlkZT8ucHJvZHVjdEJyYW5kTmFtZSA/PyBbXSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogb3ZlcnJpZGU/LnByb2R1Y3RDYXRlZ29yeSA/PyBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KSA/PyBbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpcm1Db21wbGV0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oQ29tcGxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gXCJDb21wbGV0ZSB0ZW1wbGF0ZVwiO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPVxyXG4gICAgICBcIlRlbXBsYXRlIGlzIG5vdyByZWFkeSB0byBhc3NpZ24gaXQgdG8gdGhlIHN0b3JlIGJ1dCBzdGlsbCB5b3UgY2FuIGNvbWUgYWdhaW4gYW55IHRpbWUgYW5kIGVkaXQgdGhpcyB0ZW1wbGF0ZS5cIjtcclxuICAgIC8vIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLm5vdGUgPSAnWW91IGNhblxcJ3QgZWRpdCBpdCBvbmNlIGFzc2lnbmVkIHRvIHRoZSB0ZW1wbGF0ZS4nO1xyXG5cclxuICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09IFwib2tcIik7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzdWJtaXRGb3JtKGRhdGE6IHsgc3RhdHVzOiBzdHJpbmc7IGdvQmFjazogYm9vbGVhbiB9KSB7XHJcbiAgICBjb25zdCBldCA9IHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRXJyb3JUYWJzO1xyXG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMudmFsdWU7XHJcbiAgICBpZiAoIXRlbXBsYXRlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKGV0LmJhc2ljRGV0YWlscyB8fCBldC5wcm9kdWN0cyB8fCBldC52bXMpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZGF0YS5zdGF0dXMgPT09IFwiY29tcGxldGVcIilcclxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jb25maXJtQ29tcGxldGlvbigpKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHBheWxvYWQ6IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgPSB7XHJcbiAgICAgIC4uLnRlbXBsYXRlLFxyXG4gICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGUuZml4dHVyZU5hbWU/LnRyaW0oKSxcclxuICAgICAgLy8gc3RhdHVzOiBkYXRhLnN0YXR1cyxcclxuICAgICAgaXNFZGl0ZWQ6IHRydWUsXHJcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoRGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcy5zdWJtaXRGaXh0dXJlVGVtcGxhdGVEZXRhaWxzKFxyXG4gICAgICBwYXlsb2FkLFxyXG4gICAgICB0ZW1wbGF0ZS5faWQhXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXHJcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsgaXNFZGl0OiBmYWxzZSB9LFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIixcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFwiRml4dHVyZSB0ZW1wbGF0ZSBkZXRhaWxzIHVwZGF0ZWQuXCIpO1xyXG4gICAgICBpZiAoZGF0YS5nb0JhY2spIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbWFuYWdlL3BsYW5vZ3JhbS9maXh0dXJlLXRlbXBsYXRlc1wiXSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZGF0YS5zdGF0dXMgPT09IFwiY29tcGxldGVcIikge1xyXG4gICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgIC8vICAgW1wiL21hbmFnZS9wbGFub2dyYW0vZml4dHVyZS10ZW1wbGF0ZS9hc3NpZ24tc3RvcmVzXCJdLFxyXG4gICAgICAgIC8vICAge1xyXG4gICAgICAgIC8vICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcInByZXNlcnZlXCIsXHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VmFyaWFudExpc3QoKSB7XHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZXNMaXN0ID0gW107XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBtYXN0ZXJUZW1wbGF0ZUlkOiB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/Ll9pZCxcclxuICAgICAgbGltaXQ6IHRoaXMubGltaXQsXHJcbiAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXHJcbiAgICAgIHNvcnRDb2x1bW5OYW1lOiB0aGlzLnNvcnRlZENvbHVtbixcclxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRPcmRlcixcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaFRlcm0sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRUZW1wbGF0ZUNoaWxkTGlzdChwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSByZXM/LmRhdGE/LmNvdW50O1xyXG4gICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVzTGlzdCA9IHJlcz8uZGF0YT8uZGF0YTtcclxuICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNpemVzID1cclxuICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zIDwgMTAgPyBbdGhpcy50b3RhbEl0ZW1zXSA6IFsxMCwgMjAsIDMwXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJAQCBnZXRGaXh0dXJlVGVtcGxhdGVzTGlzdCBbRVJSXTogXCIsIGVycik7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLmZpeHR1cmVUZW1wbGF0ZXNMaXN0Lmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGdldFZlcnNpb25zTGlzdCh0ZW1wbGF0ZUlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRUZW1wbGF0ZVZlcnNpb25MaXN0KHRlbXBsYXRlSWQpLnN1YnNjcmliZShcclxuICAgICAge1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgIGlmIChyZXM/LmRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVZlcnNpb25zID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRlbXBsYXRlVmVyc2lvbnMubGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmVyc2lvbklkID0gdGhpcy50ZW1wbGF0ZVZlcnNpb25zWzBdLl9pZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkBAIGdldFZlcnNpb25zTGlzdCBbRVJSXTogXCIsIGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBvblNlbGVjdFZlcnNpb24odmVyc2lvbjogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmVyc2lvbklkID0gdmVyc2lvbi5faWQ7XHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMgPSB2ZXJzaW9uLmRhdGE7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFwcGx5U2hlbGZDb2xvcnMoKSwgMCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaGFuZGxlVm1Qb3NpdGlvbkFuZFNpemUoKSwgMCk7XHJcblxyXG4gIH1cclxuXHJcbiAgcGFnaW5hdGlvblNpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRvdGFsSXRlbXMgPCAxMCA/IHRoaXMudG90YWxJdGVtcyA6IHRoaXMubGltaXQ7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm9mZnNldCA9IE51bWJlcihwYWdlT2Zmc2V0KTtcclxuICAgIHRoaXMuZ2V0VmFyaWFudExpc3QoKTtcclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IG51bWJlcikge1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5saW1pdCA9IE51bWJlcihwYWdlU2l6ZSk7XHJcbiAgICB0aGlzLmdldFZhcmlhbnRMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBvbkR1cGxpY2F0ZShmaXh0dXJlSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5kdXBsaWNhdGVGaXh0dXJlVGVtcGxhdGUoeyB0ZW1wbGF0ZUlkOiBmaXh0dXJlSWQgfSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VmFyaWFudExpc3QoKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzLmRhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgICBlcnI/LmVycm9yPy5lcnJvciB8fCBcIkZhaWxlZCB0byBkdXBsaWNhdGUgVGVtcGxhdGVcIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBkdXBsaWNhdGVGaXh0dXJlVGVtcGxhdGUgW2Vycl06XCIsIGVycik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtRGVsZXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubmdiTW9kYWwub3BlbihEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gXCJEZWxldGUgZml4dHVyZSB0ZW1wbGF0ZVwiO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPVxyXG4gICAgICBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBUZW1wbGF0ZT9cIjtcclxuXHJcbiAgICByZXR1cm4gYXdhaXQgbW9kZWxSZWYucmVzdWx0LnRoZW48Ym9vbGVhbj4oKHJlc3VsdCkgPT4gcmVzdWx0ID09PSBcIm9rXCIpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25EZWxldGUoZml4dHVyZUlkOiBzdHJpbmcsIHVzYWdlQ291bnQ6IG51bWJlciA9IDApIHtcclxuICAgIGlmICh1c2FnZUNvdW50KSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKENhbm5vdFBlcmZvcm1Db21wb25lbnQsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gYENhbuKAmXQgZGVsZXRlIEZpeHR1cmUgdGVtcGxhdGUhYDtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPSBgU2luY2UgdGhpcyB0ZW1wbGF0ZSBpcyBsaXZlIGluIFwiJHt1c2FnZUNvdW50fSBwbGFub2dyYW1zLFwiIGRlbGV0aW5nIGlzIG5vdCBhbGxvd2VkLmA7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIShhd2FpdCB0aGlzLmNvbmZpcm1EZWxldGlvbigpKSkgcmV0dXJuO1xyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5kZWxldGVGaXh0dXJlVGVtcGxhdGUoeyB0ZW1wbGF0ZUlkOiBmaXh0dXJlSWQgfSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VmFyaWFudExpc3QoKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcclxuICAgICAgICAgICAgZXJyPy5lcnJvcj8uZXJyb3IgfHwgXCJGYWlsZWQgdG8gZGVsZXRlIFRlbXBsYXRlXCJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkBAIH4gZGVsZXRlRml4dHVyZVRlbXBsYXRlIFtlcnJdOlwiLCBlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc29ydFRhYmxlKGNvbHVtbjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5zb3J0ZWRDb2x1bW4gPT09IGNvbHVtbikge1xyXG4gICAgICB0aGlzLnNvcnRPcmRlciA9IHRoaXMuc29ydE9yZGVyID09PSAxID8gLTEgOiAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zb3J0ZWRDb2x1bW4gPSBjb2x1bW47XHJcbiAgICAgIHRoaXMuc29ydE9yZGVyID0gMTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICB0aGlzLmdldFZhcmlhbnRMaXN0KCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVWaWV3TW9kZShtb2RlOiBcImxpc3RcIiB8IFwidHJlZVwiKSB7XHJcbiAgICB0aGlzLnZpZXdNb2RlID0gbW9kZTtcclxuICAgIGlmIChtb2RlID09ICdsaXN0Jykge1xyXG4gICAgICB0aGlzLmdldFZhcmlhbnRMaXN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgcXVlcnlQYXJhbXM6IHsgdmlldzogbW9kZSB9LFxyXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCIsXHJcbiAgICAgIHJlcGxhY2VVcmw6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKCkge1xyXG4gICAgdGhpcy5zb3J0ZWRDb2x1bW4gPSBcIlwiO1xyXG4gICAgdGhpcy5zb3J0T3JkZXIgPSAxO1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5saW1pdCA9IDEwO1xyXG5cclxuICAgIHRoaXMuZ2V0VmFyaWFudExpc3QoKTtcclxuICB9XHJcblxyXG4gIG9uRWRpdChmaXh0dXJlSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21hbmFnZS9wbGFub2dyYW0vZml4dHVyZS10ZW1wbGF0ZS9iYXNpYy1kZXRhaWxzXCJdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IHRlbXBsYXRlSWQ6IGZpeHR1cmVJZCwgaXNFZGl0OiB0cnVlIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwiY29udGVudC13cmFwcGVyXCIgaWQ9XCJ0ZW1wbGF0ZS1zdW1tYXJ5XCIgKm5nSWY9XCIhaXNQYWdlTG9hZGluZ1wiPlxyXG4gIDwhLS0gPT09PT09PT09PT09PT09SGVhZGVyIEluZm8gQ2FyZHM9PT09PT09PT09PT09PT09PT09IC0tPlxyXG4gIDxkaXYgaWQ9XCJoZWFkZXJcIiBjbGFzcz1cInJvdyBteC0wIG15LTUgZ2FwLTMgbWItN1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgIDxoMz57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSB8IHRpdGxlY2FzZSB9fSBmaXh0dXJlPC9oMz5cclxuICAgICAgPHA+VHlwZTwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgIDxoMz57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoIH19PC9oMz5cclxuICAgICAgPHA+Tm8gb2YgU2hlbHZlczwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgIDxoMz57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlQ2FwYWNpdHkgfX08L2gzPlxyXG4gICAgICA8cD5Qcm9kdWN0IENhcGFjaXR5PC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sIGZpbHRlci10YWJcIj5cclxuICAgICAgPGgzPnt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnZhcmlhbnRDb3VudCA/PyAwIH19PC9oMz5cclxuICAgICAgPHA+VmFyaWFudHM8L3A+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgQGlmKGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnRlbXBsYXRlVHlwZSAhPT0gJ21hc3Rlcicpe1xyXG4gIDxkaXYgY2xhc3M9XCJtcy0zIG1iLTdcIj5cclxuICAgIDxoND5BbGwgdmVyc2lvbnM8L2g0PlxyXG4gICAgPHNwYW4+U2hvd2luZyBhbGwgdGhlIHVwZGF0ZWQgdmVyc2lvbnMgb3ZlciB0aGUgdGltZS48L3NwYW4+XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC01XCI+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTIgcG9zaXRpb24tYWJzb2x1dGVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICBbY2hlY2tlZF09XCJzaG93UHJvZHVjdFNwb3RzXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2hvd1Byb2R1Y3RTcG90c1wiXHJcbiAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgIGlkPVwic2hvd1Byb2R1Y3RTcG90c1wiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHN1YiBtcy0yXCIgZm9yPVwic2hvd1Byb2R1Y3RTcG90c1wiPlNob3cgUHJvZHVjdCBTcG90czwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cInNob3dWTXNcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzaG93Vk1zXCJcclxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlVm1WaXNpYmlsaXR5KClcIlxyXG4gICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICBpZD1cInNob3dWTXNcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBzdWIgbXMtMlwiIGZvcj1cInNob3dWTXNcIj5TaG93IFZNczwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cInNob3dCcmFuZENhdGVnb3J5XCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2hvd0JyYW5kQ2F0ZWdvcnlcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2VCcmFuZEFuZENhdGVnb3J5VmlzaWJpbGl0eSgpXCJcclxuICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgaWQ9XCJzaG93QnJhbmRDYXRlZ29yeVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHN1YiBtcy0yXCIgZm9yPVwic2hvd0JyYW5kQ2F0ZWdvcnlcIj5TaG93IEJyYW5kcyAmIENhdGVnb3JpZXM8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICBAaWYoZml4dHVyZVRlbXBsYXRlRGV0YWlscz8udGVtcGxhdGVUeXBlICE9PSAnbWFzdGVyJyl7XHJcbiAgICA8ZGl2IGNsYXNzPVwidmVyc2lvbi1ibG9ja1wiPlxyXG4gICAgICBAaWYodGVtcGxhdGVWZXJzaW9ucy5sZW5ndGgpeyBAZm9yICh2ZXJzaW9uIG9mIHRlbXBsYXRlVmVyc2lvbnM7IHRyYWNrICRpbmRleDsgbGV0IGZpcnN0ID0gJGZpcnN0KSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJzaW9uLXRpbGVcIiBbY2xhc3MuYWN0aXZlXT1cInRoaXMuc2VsZWN0ZWRWZXJzaW9uSWQgPT09IHZlcnNpb24uX2lkXCIgKGNsaWNrKT1cIm9uU2VsZWN0VmVyc2lvbih2ZXJzaW9uKVwiPlxyXG4gICAgICAgIDxwPkxhc3QgdXBkYXRlZDoge3sgdmVyc2lvbi51cGRhdGVkQXQgfCBkYXRlIDogXCJtZWRpdW1cIiB9fTwvcD5cclxuICAgICAgICBAaWYoZmlyc3Qpe1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYWRnZSBhY3RpdmVcIj5BY3RpdmU8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9IH1AZWxzZSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJuby12ZXJzaW9uLWJsb2NrXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTguOTQ5MjIgMjEuMTk5N0M4LjY0NzkyIDIxLjIzMTUgOC4zNDEyMSAyMS4yNTA1IDguMDMwMjcgMjEuMjUwNUM3Ljg2MDc1IDIxLjI1MDUgNy42OTM0NSAyMS4yNDM2IDcuNTI4MzIgMjEuMjMzOVYzMS42MDY5QzcuNTI4MzIgMzMuMDM0OSA4LjcxMTMgMzQuMjI2IDEwLjE5OTIgMzQuMjI2MUgyOS44MDM3QzMxLjI5MTcgMzQuMjI2MSAzMi40NzQ2IDMzLjAzNSAzMi40NzQ2IDMxLjYwNjlWMjEuMjM0OUMzMi4zMTI3IDIxLjI0NDEgMzIuMTQ4OCAyMS4yNTA1IDMxLjk4NDQgMjEuMjUwNUMzMS42NzA0IDIxLjI1MDUgMzEuMzU5OCAyMS4yMzI1IDMxLjA1MzcgMjEuMTk5N1YyOC45ODc4SDguOTQ5MjJWMjEuMTk5N1pNMzAuOTMwNyA1Ljc3MzkzSDkuMDcyMjdDOC44OTQ5IDUuNzczOTMgOC43Mzk2NCA1Ljg2NjcxIDguNjYyMTEgNS45ODc3OUw4LjY2MDE2IDUuOTg5NzVMNS4xNTAzOSAxMS40NzMxTDUuMDU1NjYgMTEuNjIwNkMzLjgzMDEyIDEzLjc0MDQgNS4wOTQ3MyAxNi40Njc0IDcuNDQ2MjkgMTYuNzc2OUM3LjY0NzIxIDE2LjgwMTMgNy44MzY5NiAxNi44MTU5IDguMDI0NDEgMTYuODE1OUM5LjI1NDQ5IDE2LjgxNTkgMTAuMzQyNCAxNi4yODcyIDExLjA5OTYgMTUuNDY1M0wxMi4wMjE1IDE0LjQ2NDRMMTIuOTQwNCAxNS40NjgzQzEzLjY4OTQgMTYuMjg2MyAxNC43NzYxIDE2LjgxNTkgMTYuMDEzNyAxNi44MTU5QzE3LjI0NTcgMTYuODE1OCAxOC4zMzc2IDE2LjI4NTYgMTkuMDg1OSAxNS40NjgzTDIwLjAwNzggMTQuNDYxNEwyMC45Mjk3IDE1LjQ2ODNDMjEuNjc4MSAxNi4yODU3IDIyLjc2OTcgMTYuODE1OSAyNC4wMDIgMTYuODE1OUMyNS4yMzQyIDE2LjgxNTkgMjYuMzI1OCAxNi4yODU3IDI3LjA3NDIgMTUuNDY4M0wyNy45OTYxIDE0LjQ2MTRMMjguOTE4IDE1LjQ2ODNDMjkuNjY2NCAxNi4yODU3IDMwLjc1OSAxNi44MTU5IDMxLjk5MTIgMTYuODE1OUMzMi4xNzI2IDE2LjgxNTkgMzIuMzY3NyAxNi44MDIxIDMyLjU2NzQgMTYuNzc3OEgzMi41NjY0QzM0Ljk2MDIgMTYuNDU3MyAzNi4yMjgzIDEzLjYwNzggMzQuODYwNCAxMS40NzMxTDM0Ljg1OTQgMTEuNDc0MUwzMS4zNDI4IDUuOTkwNzJMMzEuMzQxOCA1Ljk4Nzc5QzMxLjI2NDQgNS44NjY1MiAzMS4xMDgyIDUuNzczOTMgMzAuOTMwNyA1Ljc3MzkzWlwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIlxyXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyLjVcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgPHNwYW4+Tm8gdmVyc2lvbnMgaGlzdG9yeSBhdmFpbGFibGUgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICA8ZGl2IGlkPVwidm0tcHJvZHVjdHMtc3VtXCIgY2xhc3M9XCJ3YWxsLXZpZXdwb3J0XCI+XHJcbiAgICAgIDwhLS0gSGVhZGVyIGJsb2NrIC0tPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJoZWFkZXItYmxvY2tcIlxyXG4gICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uaGVhZGVyPy5pc0VuYWJsZWQgJiYgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVR5cGUgPT09ICd3YWxsJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8cD57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmxhYmVsIH19PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gQm9keSBibG9jayAtLT5cclxuICAgICAgPGRpdiBpZD1cImJvZHktYmxvY2stc3VtXCIgY2xhc3M9XCJib2R5LWJsb2NrXCI+XHJcbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW1ZNIEJMT0NLXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8udm1Db25maWc/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdm0gb2YgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8udm1Db25maWc7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ3ZtJyArIGlcIiBjbGFzcz1cInZtLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFNlbGVjdGVkVk0odm0pIGFzIHNlbGVjdGVkVk1cIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJzZWxlY3RlZFZNPy5pbWdVcmw7IGVsc2UgcGxhY2Vob2xkZXJcIiBbc3JjXT1cInNlbGVjdGVkVk0/LmltZ1VybFwiIGFsdD1cIlZtIEltYWdlXCIgLz5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2bS1wbGFjZWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMz57eyBzZWxlY3RlZFZNPy5uYW1lIH19PC9oMz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bRklYVFVSRSBMRVZFTCAtIEJSQU5EIENBVEVHT1JZXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJmaXh0dXJlLWxldmVsXCIgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSAnTDEnXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGlkPVwiYnJhbmQtY2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJyYW5kLWNhdGVnb3J5XCJcclxuICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5wcm9kdWN0QnJhbmROYW1lPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJicmFuZENhdGVnb3J5VG9vbHRpcFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJhbmRcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiIG9mIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnByb2R1Y3RCcmFuZE5hbWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBkcmFmdCBtZS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhdGVnb3J5XCIgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5wcm9kdWN0Q2F0ZWdvcnk/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdENhdGVnb3J5OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNicmFuZENhdGVnb3J5VG9vbHRpcD5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIDxiPkJyYW5kczogPC9iPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5wcm9kdWN0QnJhbmROYW1lOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgIDxwICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdENhdGVnb3J5Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgIDxiPkNhdGVnb3JpZXM6IDwvYj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdENhdGVnb3J5OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cclxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW1NFQ1RJT04gTEVWRUwgLSBCUkFORCBDQVRFR09SWV0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICA8ZGl2IGlkPVwic2VjdGlvbi1sZXZlbFwiICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gJ0wzJ1wiPlxyXG4gICAgICAgICAgPCEtLSA8ZGl2IGlkPVwiYm9keS1sb2FkZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBzZWN0aW9uQnlab25lczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICA8ZGl2IFtpZF09XCInYnJhbmQtY2F0ZWdvcnknICsgJGluZGV4XCIgY2xhc3M9XCJicmFuZC1jYXRlZ29yeVwiIFtuZ2JUb29sdGlwXT1cImJyYW5kQ2F0ZWdvcnlUb29sdGlwXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgZHJhZnQgbWUtMVwiPlxyXG4gICAgICAgICAgICAgIHt7IGl0ZW0uem9uZSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJhbmRcIiAqbmdJZj1cIml0ZW0/LnNlY3Rpb24/LmJyYW5kcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChiIG9mIGl0ZW0/LnNlY3Rpb24/LmJyYW5kczt0cmFjayAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllcz8ubGVuZ3RoXCIgY2xhc3M9XCJzZXBhcmF0b3JcIj4gLSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXRlZ29yeVwiICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChjIG9mIGl0ZW0/LnNlY3Rpb24/LmNhdGVnb3JpZXM7dHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2JyYW5kQ2F0ZWdvcnlUb29sdGlwPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgPGI+QnJhbmRzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChiIG9mIGl0ZW0/LnNlY3Rpb24/LmJyYW5kczt0cmFjayAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgIDxwICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICA8Yj5DYXRlZ29yaWVzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChjIG9mIGl0ZW0/LnNlY3Rpb24/LmNhdGVnb3JpZXM7dHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHJcbiAgICAgICAgPGRpdiBbaWRdPVwiJ3N1bVNoZWxmQ29udGFpbmVyJyArIGlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZzsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVtTSEVMRiBMRVZFTCAtIEJSQU5EIENBVEVHT1JZXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwic2hlbGYtbGV2ZWxcIiAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09ICdMMidcIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIFtpZF09XCInYnJhbmQtY2F0ZWdvcnknICsgaVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJicmFuZC1jYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnByb2R1Y3RCcmFuZE5hbWU/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYnJhbmRDYXRlZ29yeVRvb2x0aXBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmFuZFwiICpuZ0lmPVwiaXRlbS5wcm9kdWN0QnJhbmROYW1lPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGIgb2YgaXRlbS5wcm9kdWN0QnJhbmROYW1lOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5wcm9kdWN0Q2F0ZWdvcnk/Lmxlbmd0aFwiIGNsYXNzPVwic2VwYXJhdG9yXCI+IC0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnlcIiAqbmdJZj1cIml0ZW0ucHJvZHVjdENhdGVnb3J5Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGIgb2YgaXRlbS5wcm9kdWN0Q2F0ZWdvcnk7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2JyYW5kQ2F0ZWdvcnlUb29sdGlwPlxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgPGI+QnJhbmRzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgaXRlbS5wcm9kdWN0QnJhbmROYW1lOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIml0ZW0ucHJvZHVjdENhdGVnb3J5Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgPGI+Q2F0ZWdvcmllczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGl0ZW0ucHJvZHVjdENhdGVnb3J5OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHJcbiAgICAgICAgICBAaWYoaXRlbS5zaGVsZlR5cGUgPT09J3NoZWxmJyl7XHJcbiAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrIHNoZWxmXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5wcm9kdWN0UGVyU2hlbGYpXCIgY2xhc3M9XCJwcm9kdWN0XCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSEgKyAoaSArIDEpXCIgY2xhc3M9XCJibG9ja1wiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0udHJheVJvd3MpXCIgY2xhc3M9XCJ0cmF5IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0ucHJvZHVjdFBlclNoZWxmKVwiIGNsYXNzPVwicHJvZHVjdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gRm9vdGVyIGJsb2NrIC0tPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmb290ZXItYmxvY2tcIlxyXG4gICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZm9vdGVyPy5pc0VuYWJsZWQgJiYgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVR5cGUgPT09ICd3YWxsJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWZvb3RlciBsZWZ0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIHJpZ2h0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgIDxwPnt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3Rlcj8ubGFiZWwgfX08L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDIwMHB4XCI+PC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gPT09PT09PT09PT09PT09Rm9vdGVyIEluZm8gQ2FyZHM9PT09PT09PT09PT09PT09PT09IC0tPlxyXG4gIEBpZihmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy50ZW1wbGF0ZVR5cGUgPT09ICdtYXN0ZXInKXtcclxuICA8ZGl2IGlkPVwiZm9vdGVyXCIgY2xhc3M9XCJyb3cgbXgtMCBteS01IGdhcC0yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi01XCI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGg0PkFsbCB2YXJpYW50czwvaDQ+XHJcbiAgICAgICAgPHNwYW4+U2hvd2luZyBhbGwgdmFyaWFudHMgZGVyaXZlZCBmcm9tIHRoaXMgcmVmZXJlbmNlL21hc3RlciB0ZW1wbGF0ZS48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIiAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZXNMaXN0Lmxlbmd0aCB8fCBzZWFyY2hUZXJtXCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiIFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6IHZpZXdNb2RlID09PSAndHJlZScgfVwiPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlYXJjaCgpXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDNyZW07IHBhZGRpbmctcmlnaHQ6IDNyZW1cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgIG5hbWU9XCJzZWFyY2hcIlxyXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXHJcbiAgICAgICAgICAvPlxyXG5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VhcmNoLWljb25cIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCI2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIC8+XHJcbiAgICAgICAgICAgICAgPGxpbmUgeDE9XCIxM1wiIHkxPVwiMTNcIiB4Mj1cIjE2XCIgeTI9XCIxNlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNlYXJjaFRlcm1cIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNsZWFyXCIgKGNsaWNrKT1cInNlYXJjaFRlcm0gPSAnJzsgb25TZWFyY2goKVwiIGNsYXNzPVwiY2xlYXItc2VhcmNoXCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI2NHB4XCIgaGVpZ2h0PVwiNjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz5cclxuICAgICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz5cclxuICAgICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSA5TDE1IDE1XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1IDlMOSAxNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZVxyXG4gICAgICAgICAgICAgICAgICBjeD1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgY3k9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgIHI9XCI5XCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtYnV0dG9uIG1lLTFcIiBbbmdDbGFzc109XCJ7IHNlbGVjdGVkOiB2aWV3TW9kZSA9PT0gJ2xpc3QnIH1cIiAoY2xpY2spPVwidG9nZ2xlVmlld01vZGUoJ2xpc3QnKVwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTkgMThcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgZD1cIk02LjI0MDc4IDQuNTQ2MzlIMTUuODkwNk02LjI0MDc4IDkuMDAwMTdIMTUuODkwNk02LjI0MDc4IDEzLjQ1MzlIMTUuODkwNk0yLjUyOTMgNC41NDYzOUgyLjUzNjcyTTIuNTI5MyA5LjAwMDE3SDIuNTM2NzJNMi41MjkzIDEzLjQ1MzlIMi41MzY3MlwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmlld01vZGUgPT09ICdsaXN0JyA/ICcjMDA5QkYzJyA6ICcjMzQ0MDU0J1wiXHJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjQ4NzU2XCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZS1idXR0b25cIiBbbmdDbGFzc109XCJ7IHNlbGVjdGVkOiB2aWV3TW9kZSA9PT0gJ3RyZWUnIH1cIiAoY2xpY2spPVwidG9nZ2xlVmlld01vZGUoJ3RyZWUnKVwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTkgMThcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgZD1cIk05LjkyNjc4IDEwLjQ4NDVDNy40MzI2NiAxMC40ODQ1IDYuNjE2MTMgMTEuNDg2NiA2LjM0ODkgMTIuMTQ3MkM3LjE0MzE2IDEyLjQ4ODcgNy42OTk4OCAxMy4yNzU1IDcuNjk5ODggMTQuMTk2QzcuNjk5ODggMTQuNzg2NiA3LjQ2NTI3IDE1LjM1MyA3LjA0NzY0IDE1Ljc3MDZDNi42MzAwMiAxNi4xODgyIDYuMDYzNiAxNi40MjI4IDUuNDcyOTkgMTYuNDIyOEM0Ljg4MjM5IDE2LjQyMjggNC4zMTU5NyAxNi4xODgyIDMuODk4MzQgMTUuNzcwNkMzLjQ4MDcyIDE1LjM1MyAzLjI0NjEgMTQuNzg2NiAzLjI0NjEgMTQuMTk2QzMuMjQ2MSAxMy4yMjM1IDMuODYyMjEgMTIuMzk5NiA0LjczMDcgMTIuMDk1M1Y1LjkwNDVDNC4yOTU3MyA1Ljc1MTg3IDMuOTE5MDggNS40Njc2IDMuNjUzMDQgNS4wOTExNUMzLjM4NyA0LjcxNDcgMy4yNDQ3NyA0LjI2NDc2IDMuMjQ2MSAzLjgwMzhDMy4yNDYxIDMuMjEzMTkgMy40ODA3MiAyLjY0Njc3IDMuODk4MzQgMi4yMjkxNUM0LjMxNTk3IDEuODExNTIgNC44ODIzOSAxLjU3NjkgNS40NzI5OSAxLjU3NjlDNi4wNjM2IDEuNTc2OSA2LjYzMDAyIDEuODExNTIgNy4wNDc2NCAyLjIyOTE1QzcuNDY1MjcgMi42NDY3NyA3LjY5OTg4IDMuMjEzMTkgNy42OTk4OCAzLjgwMzhDNy42OTk4OCA0Ljc3NjIgNy4wODM3OCA1LjYwMDE1IDYuMjE1MjkgNS45MDQ1VjkuODMxMjVDNi44Njg1MSA5LjM0ODc1IDcuODE4NjUgOC45OTk4NyA5LjE4NDQ4IDguOTk5ODdDMTEuMTY2NCA4Ljk5OTg3IDExLjgyNzEgOC4wMDUyIDEyLjA0MjMgNy4zNDQ1NUMxMS42MzYyIDcuMTc1MzcgMTEuMjg5MiA2Ljg4OTkyIDExLjA0NDkgNi41MjQwN0MxMC44MDA1IDYuMTU4MjMgMTAuNjY5OCA1LjcyODMyIDEwLjY2OTEgNS4yODgzOUMxMC42NjkxIDQuNjk3NzggMTAuOTAzNyA0LjEzMTM2IDExLjMyMTMgMy43MTM3NEMxMS43Mzg5IDMuMjk2MTIgMTIuMzA1NCAzLjA2MTUgMTIuODk2IDMuMDYxNUMxMy40ODY2IDMuMDYxNSAxNC4wNTMgMy4yOTYxMiAxNC40NzA2IDMuNzEzNzRDMTQuODg4MiA0LjEzMTM2IDE1LjEyMjkgNC42OTc3OCAxNS4xMjI5IDUuMjg4MzlDMTUuMTIyOSA2LjI4MzA3IDE0LjQ2OTYgNy4xNDQxMyAxMy41NzE1IDcuNDExMzZDMTMuMzc4NSA4LjQ3Mjg0IDEyLjY1ODQgMTAuNDg0NSA5LjkyNjc4IDEwLjQ4NDVaTTUuNDcyOTkgMTMuNDUzN0M1LjI3NjEyIDEzLjQ1MzcgNS4wODczMiAxMy41MzE5IDQuOTQ4MTEgMTMuNjcxMUM0LjgwODkgMTMuODEwMyA0LjczMDcgMTMuOTk5MSA0LjczMDcgMTQuMTk2QzQuNzMwNyAxNC4zOTI4IDQuODA4OSAxNC41ODE2IDQuOTQ4MTEgMTQuNzIwOEM1LjA4NzMyIDE0Ljg2IDUuMjc2MTIgMTQuOTM4MyA1LjQ3Mjk5IDE0LjkzODNDNS42Njk4NiAxNC45MzgzIDUuODU4NjcgMTQuODYgNS45OTc4OCAxNC43MjA4QzYuMTM3MDggMTQuNTgxNiA2LjIxNTI5IDE0LjM5MjggNi4yMTUyOSAxNC4xOTZDNi4yMTUyOSAxMy45OTkxIDYuMTM3MDggMTMuODEwMyA1Ljk5Nzg4IDEzLjY3MTFDNS44NTg2NyAxMy41MzE5IDUuNjY5ODYgMTMuNDUzNyA1LjQ3Mjk5IDEzLjQ1MzdaTTUuNDcyOTkgMy4wNjE1QzUuMjc2MTIgMy4wNjE1IDUuMDg3MzIgMy4xMzk3IDQuOTQ4MTEgMy4yNzg5MUM0LjgwODkgMy40MTgxMiA0LjczMDcgMy42MDY5MyA0LjczMDcgMy44MDM4QzQuNzMwNyA0LjAwMDY2IDQuODA4OSA0LjE4OTQ3IDQuOTQ4MTEgNC4zMjg2OEM1LjA4NzMyIDQuNDY3ODkgNS4yNzYxMiA0LjU0NjA5IDUuNDcyOTkgNC41NDYwOUM1LjY2OTg2IDQuNTQ2MDkgNS44NTg2NyA0LjQ2Nzg5IDUuOTk3ODggNC4zMjg2OEM2LjEzNzA4IDQuMTg5NDcgNi4yMTUyOSA0LjAwMDY2IDYuMjE1MjkgMy44MDM4QzYuMjE1MjkgMy42MDY5MyA2LjEzNzA4IDMuNDE4MTIgNS45OTc4OCAzLjI3ODkxQzUuODU4NjcgMy4xMzk3IDUuNjY5ODYgMy4wNjE1IDUuNDcyOTkgMy4wNjE1Wk0xMi44OTYgNC41NDYwOUMxMi42OTkxIDQuNTQ2MDkgMTIuNTEwMyA0LjYyNDMgMTIuMzcxMSA0Ljc2MzUxQzEyLjIzMTkgNC45MDI3MSAxMi4xNTM3IDUuMDkxNTIgMTIuMTUzNyA1LjI4ODM5QzEyLjE1MzcgNS40ODUyNiAxMi4yMzE5IDUuNjc0MDYgMTIuMzcxMSA1LjgxMzI3QzEyLjUxMDMgNS45NTI0OCAxMi42OTkxIDYuMDMwNjkgMTIuODk2IDYuMDMwNjlDMTMuMDkyOCA2LjAzMDY5IDEzLjI4MTYgNS45NTI0OCAxMy40MjA4IDUuODEzMjdDMTMuNTYwMSA1LjY3NDA2IDEzLjYzODMgNS40ODUyNiAxMy42MzgzIDUuMjg4MzlDMTMuNjM4MyA1LjA5MTUyIDEzLjU2MDEgNC45MDI3MSAxMy40MjA4IDQuNzYzNTFDMTMuMjgxNiA0LjYyNDMgMTMuMDkyOCA0LjU0NjA5IDEyLjg5NiA0LjU0NjA5WlwiXHJcbiAgICAgICAgICAgICAgICBmaWxsPVwiIzM0NDA1NFwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZzsgZWxzZSBjb250ZW50UGFydFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2NvbnRlbnRQYXJ0PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWZpeHR1cmVUZW1wbGF0ZXNMaXN0Lmxlbmd0aFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbXktNlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiOTRcIiBoZWlnaHQ9XCI5NFwiIHZpZXdCb3g9XCIwIDAgOTQgOTRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHJlY3QgeD1cIjdcIiB5PVwiNy4xMDkzOFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIHJ4PVwiNDBcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3LjEwOTM4XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCIxMy4zMzMzXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJNNDguNjY2OCA1MC40NDI3QzQzLjA2NjggNTAuNDQyNyA0MS4yMzM0IDUyLjY5MjcgNDAuNjMzNCA1NC4xNzZDNDIuNDE2OCA1NC45NDI3IDQzLjY2NjggNTYuNzA5NCA0My42NjY4IDU4Ljc3NkM0My42NjY4IDYwLjEwMjEgNDMuMTQgNjEuMzczOSA0Mi4yMDIzIDYyLjMxMTZDNDEuMjY0NiA2My4yNDkyIDM5Ljk5MjkgNjMuNzc2IDM4LjY2NjggNjMuNzc2QzM3LjM0MDcgNjMuNzc2IDM2LjA2ODkgNjMuMjQ5MiAzNS4xMzEyIDYyLjMxMTZDMzQuMTkzNiA2MS4zNzM5IDMzLjY2NjggNjAuMTAyMSAzMy42NjY4IDU4Ljc3NkMzMy42NjY4IDU2LjU5MjcgMzUuMDUwMSA1NC43NDI3IDM3LjAwMDEgNTQuMDU5NFY0MC4xNTk0QzM2LjAyMzUgMzkuODE2NyAzNS4xNzc4IDM5LjE3ODQgMzQuNTgwNSAzOC4zMzMyQzMzLjk4MzEgMzcuNDg3OSAzMy42NjM4IDM2LjQ3NzcgMzMuNjY2OCAzNS40NDI3QzMzLjY2NjggMzQuMTE2NiAzNC4xOTM2IDMyLjg0NDggMzUuMTMxMiAzMS45MDcyQzM2LjA2ODkgMzAuOTY5NSAzNy4zNDA3IDMwLjQ0MjcgMzguNjY2OCAzMC40NDI3QzM5Ljk5MjkgMzAuNDQyNyA0MS4yNjQ2IDMwLjk2OTUgNDIuMjAyMyAzMS45MDcyQzQzLjE0IDMyLjg0NDggNDMuNjY2OCAzNC4xMTY2IDQzLjY2NjggMzUuNDQyN0M0My42NjY4IDM3LjYyNiA0Mi4yODM0IDM5LjQ3NiA0MC4zMzM0IDQwLjE1OTRWNDguOTc2QzQxLjgwMDEgNDcuODkyNyA0My45MzM0IDQ3LjEwOTQgNDcuMDAwMSA0Ny4xMDk0QzUxLjQ1MDEgNDcuMTA5NCA1Mi45MzM0IDQ0Ljg3NiA1My40MTY4IDQzLjM5MjdDNTIuNTA1IDQzLjAxMjggNTEuNzI1OCA0Mi4zNzE5IDUxLjE3NzIgNDEuNTUwNUM1MC42Mjg2IDQwLjcyOTEgNTAuMzM1IDM5Ljc2MzggNTAuMzMzNCAzOC43NzZDNTAuMzMzNCAzNy40NDk5IDUwLjg2MDIgMzYuMTc4MiA1MS43OTc5IDM1LjI0MDVDNTIuNzM1NiAzNC4zMDI4IDU0LjAwNzQgMzMuNzc2IDU1LjMzMzQgMzMuNzc2QzU2LjY1OTUgMzMuNzc2IDU3LjkzMTMgMzQuMzAyOCA1OC44NjkgMzUuMjQwNUM1OS44MDY3IDM2LjE3ODIgNjAuMzMzNCAzNy40NDk5IDYwLjMzMzQgMzguNzc2QzYwLjMzMzQgNDEuMDA5NCA1OC44NjY4IDQyLjk0MjcgNTYuODUwMSA0My41NDI3QzU2LjQxNjggNDUuOTI2IDU0LjgwMDEgNTAuNDQyNyA0OC42NjY4IDUwLjQ0MjdaTTM4LjY2NjggNTcuMTA5NEMzOC4yMjQ3IDU3LjEwOTQgMzcuODAwOCA1Ny4yODQ5IDM3LjQ4ODMgNTcuNTk3NUMzNy4xNzU3IDU3LjkxMDEgMzcuMDAwMSA1OC4zMzQgMzcuMDAwMSA1OC43NzZDMzcuMDAwMSA1OS4yMTggMzcuMTc1NyA1OS42NDIgMzcuNDg4MyA1OS45NTQ1QzM3LjgwMDggNjAuMjY3MSAzOC4yMjQ3IDYwLjQ0MjcgMzguNjY2OCA2MC40NDI3QzM5LjEwODggNjAuNDQyNyAzOS41MzI3IDYwLjI2NzEgMzkuODQ1MyA1OS45NTQ1QzQwLjE1NzggNTkuNjQyIDQwLjMzMzQgNTkuMjE4IDQwLjMzMzQgNTguNzc2QzQwLjMzMzQgNTguMzM0IDQwLjE1NzggNTcuOTEwMSAzOS44NDUzIDU3LjU5NzVDMzkuNTMyNyA1Ny4yODQ5IDM5LjEwODggNTcuMTA5NCAzOC42NjY4IDU3LjEwOTRaTTM4LjY2NjggMzMuNzc2QzM4LjIyNDcgMzMuNzc2IDM3LjgwMDggMzMuOTUxNiAzNy40ODgzIDM0LjI2NDJDMzcuMTc1NyAzNC41NzY3IDM3LjAwMDEgMzUuMDAwNyAzNy4wMDAxIDM1LjQ0MjdDMzcuMDAwMSAzNS44ODQ3IDM3LjE3NTcgMzYuMzA4NiAzNy40ODgzIDM2LjYyMTJDMzcuODAwOCAzNi45MzM4IDM4LjIyNDcgMzcuMTA5NCAzOC42NjY4IDM3LjEwOTRDMzkuMTA4OCAzNy4xMDk0IDM5LjUzMjcgMzYuOTMzOCAzOS44NDUzIDM2LjYyMTJDNDAuMTU3OCAzNi4zMDg2IDQwLjMzMzQgMzUuODg0NyA0MC4zMzM0IDM1LjQ0MjdDNDAuMzMzNCAzNS4wMDA3IDQwLjE1NzggMzQuNTc2NyAzOS44NDUzIDM0LjI2NDJDMzkuNTMyNyAzMy45NTE2IDM5LjEwODggMzMuNzc2IDM4LjY2NjggMzMuNzc2Wk01NS4zMzM0IDM3LjEwOTRDNTQuODkxNCAzNy4xMDk0IDU0LjQ2NzUgMzcuMjg0OSA1NC4xNTQ5IDM3LjU5NzVDNTMuODQyNCAzNy45MTAxIDUzLjY2NjggMzguMzM0IDUzLjY2NjggMzguNzc2QzUzLjY2NjggMzkuMjE4IDUzLjg0MjQgMzkuNjQyIDU0LjE1NDkgMzkuOTU0NUM1NC40Njc1IDQwLjI2NzEgNTQuODkxNCA0MC40NDI3IDU1LjMzMzQgNDAuNDQyN0M1NS43NzU1IDQwLjQ0MjcgNTYuMTk5NCA0MC4yNjcxIDU2LjUxMTkgMzkuOTU0NUM1Ni44MjQ1IDM5LjY0MiA1Ny4wMDAxIDM5LjIxOCA1Ny4wMDAxIDM4Ljc3NkM1Ny4wMDAxIDM4LjMzNCA1Ni44MjQ1IDM3LjkxMDEgNTYuNTExOSAzNy41OTc1QzU2LjE5OTQgMzcuMjg0OSA1NS43NzU1IDM3LjEwOTQgNTUuMzMzNCAzNy4xMDk0WlwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDA5QkYzXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YW1haW50ZXh0IG10LTNcIj5ObyB2YXJpYW50cyBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVzTGlzdC5sZW5ndGhcIj5cclxuICAgICAgICA8IS0tIEZpeHR1cmUgVGVtcGxhdGUgbGlzdCB2aWV3IC0tPlxyXG4gICAgICAgIDxzZWN0aW9uIGlkPVwibGlzdC12aWV3XCIgKm5nSWY9XCJ2aWV3TW9kZSA9PT0gJ2xpc3QnXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ3LTEwMCB0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCIgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVzTGlzdC5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic29ydFRhYmxlKCdmaXh0dXJlTmFtZScpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgVmFyaWFudFxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBtcy0xIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICdmaXh0dXJlTmFtZScgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ2ZpeHR1cmVOYW1lJyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic29ydFRhYmxlKCdzdG9yZUNvdW50JylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBBc3NpZ25lZCBTdG9yZXNcclxuICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAnc3RvcmVDb3VudCcgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlQ291bnQnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJzb3J0VGFibGUoJ3Byb2R1Y3RCcmFuZE5hbWUnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIEJyYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIG1zLTEgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ3Byb2R1Y3RCcmFuZE5hbWUnID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICdwcm9kdWN0QnJhbmROYW1lJyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic29ydFRhYmxlKCdwcm9kdWN0Q2F0ZWdvcnknKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3QgY2F0ZWdvcnlcclxuICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAncHJvZHVjdENhdGVnb3J5JyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAncHJvZHVjdENhdGVnb3J5JyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic29ydFRhYmxlKCdzdGF0dXMnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBtcy0xIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICdzdGF0dXMnID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICdzdGF0dXMnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJzb3J0VGFibGUoJ3VwZGF0ZWRBdCcpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgTGFzdCBVcGRhdGVcclxuICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAnc3RhdHVzJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAnc3RhdHVzJyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aD5BY3Rpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgY2hpbGRUZW1wbGF0ZSBvZiBmaXh0dXJlVGVtcGxhdGVzTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInRodW1ibmFpbFwiPjwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvbWFuYWdlL3BsYW5vZ3JhbS9maXh0dXJlLXRlbXBsYXRlL2Jhc2ljLWRldGFpbHMnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInsgdGVtcGxhdGVJZDogY2hpbGRUZW1wbGF0ZS5faWQsIGlzRWRpdDogZmFsc2UgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoaWxkVGVtcGxhdGUuZml4dHVyZU5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvbWFuYWdlL3BsYW5vZ3JhbS9maXh0dXJlLXRlbXBsYXRlL2Jhc2ljLWRldGFpbHMnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJ7IHRlbXBsYXRlSWQ6IGNoaWxkVGVtcGxhdGUuX2lkLCBpc0VkaXQ6IGZhbHNlIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGlsZFRlbXBsYXRlLnN0b3JlQ291bnQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2hpbGRUZW1wbGF0ZS5wcm9kdWN0QnJhbmROYW1lLmxlbmd0aCA8PSAwXCI+IC0gPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ2JUb29sdGlwXT1cImJyYW5kVG9vbHRpcFwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGIgb2YgY2hpbGRUZW1wbGF0ZS5wcm9kdWN0QnJhbmROYW1lOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJiYWRnZSBpbmFjdGl2ZSBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaSA8PSAyXCI+IHt7IGIgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPT09IDNcIj4gK3t7IGNoaWxkVGVtcGxhdGUucHJvZHVjdEJyYW5kTmFtZS5sZW5ndGggLSAzIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2JyYW5kVG9vbHRpcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgY2hpbGRUZW1wbGF0ZS5wcm9kdWN0QnJhbmROYW1lOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2hpbGRUZW1wbGF0ZS5wcm9kdWN0Q2F0ZWdvcnkubGVuZ3RoIDw9IDBcIj4gLSA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nYlRvb2x0aXBdPVwiY2F0ZWdvcnlUb29sdGlwXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGlsZFRlbXBsYXRlLnByb2R1Y3RDYXRlZ29yeTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiYmFkZ2UgaW5hY3RpdmUgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPD0gMlwiPiB7eyBpdGVtIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpID09PSAzXCI+ICt7eyBjaGlsZFRlbXBsYXRlLnByb2R1Y3RDYXRlZ29yeS5sZW5ndGggLSAzIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhdGVnb3J5VG9vbHRpcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgY2hpbGRUZW1wbGF0ZS5wcm9kdWN0Q2F0ZWdvcnk7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhZGdlXCIgW25nQ2xhc3NdPVwiY2hpbGRUZW1wbGF0ZS5zdGF0dXNcIj57eyBjaGlsZFRlbXBsYXRlLnN0YXR1cyB8IHRpdGxlY2FzZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nYlRvb2x0aXBdPVwiY2hpbGRUZW1wbGF0ZT8udXBkYXRlZEF0IHwgZGF0ZSA6ICdtZWRpdW0nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBjaGlsZFRlbXBsYXRlPy51cGRhdGVkQXQgfCBkYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktdGhyZWUtZG90cy12ZXJ0aWNhbFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uRWRpdChjaGlsZFRlbXBsYXRlLl9pZCEpXCI+RWRpdDwvYT48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uRHVwbGljYXRlKGNoaWxkVGVtcGxhdGUuX2lkISlcIj5EdXBsaWNhdGU8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL21hbmFnZS9wbGFub2dyYW0vZmluZEFuZFJlcGxhY2UnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwieyBzZWxlY3RlZEZpeHR1cmU6IGNoaWxkVGVtcGxhdGUuX2lkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPkZpbmQgYW5kIHJlcGxhY2U8L2FcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyIHRleHQtZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZShjaGlsZFRlbXBsYXRlLl9pZCEsIGNoaWxkVGVtcGxhdGUuc3RvcmVDb3VudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlc0xpc3QubGVuZ3RoXCJcclxuICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cImxpbWl0XCJcclxuICAgICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwib2Zmc2V0XCJcclxuICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICAgICAgICBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2luYXRpb25TaXplc1wiXHJcbiAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2luYXRpb25TaXplKClcIlxyXG4gICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG5cclxuICAgICAgICA8IS0tIEZpeHR1cmUgVGVtcGxhdGUgdHJlZSB2aWV3IC0tPlxyXG4gICAgICAgIDxzZWN0aW9uIGlkPVwidHJlZS12aWV3XCIgKm5nSWY9XCJ2aWV3TW9kZSA9PT0gJ3RyZWUnXCI+XHJcbiAgICAgICAgICA8Zml4dHVyZS10ZW1wbGF0ZS10cmVlIFttYXN0ZXJGaXh0dXJlRGF0YV09XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzXCIgW3ZpZXdNb2RlXT1cIidtYXN0ZXInXCI+PC9maXh0dXJlLXRlbXBsYXRlLXRyZWU+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG48L3NlY3Rpb24+XHJcblxyXG48c2VjdGlvbiBpZD1cInRlbXBsYXRlLXN1bW1hcnktc2tlbGV0b25cIiAqbmdJZj1cImlzUGFnZUxvYWRpbmdcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG4iXX0=
|
|
641
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtc3VtbWFyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9maXh0dXJlLXRlbXBsYXRlL3RlbXBsYXRlLXN1bW1hcnkvdGVtcGxhdGUtc3VtbWFyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9maXh0dXJlLXRlbXBsYXRlL3RlbXBsYXRlLXN1bW1hcnkvdGVtcGxhdGUtc3VtbWFyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVDLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHbEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBS3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFFbkgsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDN0csT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7Ozs7O0FBTzlGLE1BQU0sT0FBTyx3QkFBd0I7SUE2Q3pCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQW5EVixzQkFBc0IsQ0FBZ0M7SUFDdEQsUUFBUSxDQUFTO0lBRWpCLGtCQUFrQixHQUFXLGdCQUFnQixDQUFDO0lBRTlDLE1BQU0sR0FBb0IsRUFBRSxDQUFDO0lBQzdCLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFF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Q3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRWhCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQWlCO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsa0RBQWtELENBQUMsRUFBRTtZQUN6RSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0EzdUJVLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLDREQ3JCckMsaXdrQ0Fna0JVOzs0RkQzaUJHLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20sIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFBsYW5vRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wbGFuby1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyByZ2JUb0hleCB9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucy9wbGFuby5mdW5jdGlvbic7XHJcbmltcG9ydCB7IFZtTGlicmFyeUxpc3QgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL3ZtLWxpYnJhcnkuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgU0hFTEZfQ09MT1JTIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS9maXh0dXJlLXRlbXBsYXRlLmRhdGEnO1xyXG5pbXBvcnQgeyBDb21wbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvcHVwcy9jb21wbGV0ZS1jb25maXJtYXRpb24vY29tcGxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMsIFNlY3Rpb25Db25maWcsIFNoZWxmQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9maXh0dXJlLXRlbXBsYXRlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvcHVwcy9kZWxldGUtY29uZmlybWF0aW9uL2RlbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2Fubm90UGVyZm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvcHVwcy9jYW5ub3QtcGVyZm9ybS9jYW5ub3QtcGVyZm9ybS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXRlbXBsYXRlLXN1bW1hcnlcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RlbXBsYXRlLXN1bW1hcnkuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3RlbXBsYXRlLXN1bW1hcnkuY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlU3VtbWFyeUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3kge1xyXG4gIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM6IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgfCBudWxsO1xyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcblxyXG4gIHNlbGVjdGVkU3VtbWFyeVRhYjogc3RyaW5nID0gXCJmaXh0dXJlRGV0YWlsc1wiO1xyXG5cclxuICB2bUxpc3Q6IFZtTGlicmFyeUxpc3RbXSA9IFtdO1xyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBzaG93Vk1zOiBib29sZWFuID0gdHJ1ZTtcclxuICAvLyBzaG93UHJvZHVjdFNwb3RzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gc2hvd0JyYW5kQ2F0ZWdvcnk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaW1nQ0ROOiBzdHJpbmc7XHJcbiAgc2hlbGZDb2xvcnMgPSBTSEVMRl9DT0xPUlM7XHJcblxyXG4gIHNlY3Rpb25CeVpvbmVzOiB7XHJcbiAgICB6b25lOiBzdHJpbmc7XHJcbiAgICBzZWN0aW9uOiB7XHJcbiAgICAgIGJyYW5kczogc3RyaW5nW107XHJcbiAgICAgIGNhdGVnb3JpZXM6IHN0cmluZ1tdO1xyXG4gICAgICBzaGVsdmVzOiBzdHJpbmdbXTtcclxuICAgICAgc2hlbGZEaXZzOiAoSFRNTEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKVtdO1xyXG4gICAgfTtcclxuICB9W10gPSBbXTtcclxuICBmaXh0dXJlVGVtcGxhdGVzTGlzdDogYW55ID0gW107XHJcbiAgdG90YWxJdGVtczogbnVtYmVyID0gMDtcclxuICBwYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XHJcbiAgbGltaXQ6IG51bWJlciA9IDEwO1xyXG4gIG9mZnNldDogbnVtYmVyID0gMTtcclxuICBzb3J0ZWRDb2x1bW46IHN0cmluZyA9IFwiXCI7XHJcbiAgc29ydE9yZGVyOiBudW1iZXIgPSAxO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHZpZXdNb2RlOiBcImxpc3RcIiB8IFwidHJlZVwiID0gXCJsaXN0XCI7XHJcbiAgc2VhcmNoVGVybTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgdGVtcGxhdGVWZXJzaW9uczogYW55W10gPSBbXVxyXG4gIHNlbGVjdGVkVmVyc2lvbklkOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgaXNWTUluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBpc0JDSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHBzOiBQbGFub0RhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ2JNb2RhbDogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxyXG4gICkgeyB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zZXRQYWdlRGF0YSgpO1xyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50XHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZW52KSA9PiAodGhpcy5pbWdDRE4gPSBlbnYucGxhbm9ncmFtQ0ROKSk7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0Vm1zTGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHNcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzID0gZGF0YTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/Ll9pZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0VmFyaWFudExpc3QoKTtcclxuICAgICAgICAgICAgICB0aGlzLmdldFZlcnNpb25zTGlzdCh0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/Ll9pZClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZUZvcm0kXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLnN1Ym1pdEZvcm0oZGF0YSkpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIlN1bW1hcnlcIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKFtcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlBsYW5vZ3JhbVwiLFxyXG4gICAgICAgIHBhdGg6IFwiL21hbmFnZS9wbGFub2dyYW0vbWFuYWdlLXBsYW5vZ3JhbXNcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICB7IHRpdGxlOiBcIlwiLCBwYXRoOiBcIlwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogXCJGaXh0dXJlIFRlbXBsYXRlXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9maXh0dXJlLXRlbXBsYXRlc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiXCIsIHBhdGg6IFwiXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IHRydWUgfSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzQkNJbml0aWFsaXplZCkge1xyXG4gICAgICB0aGlzLmlzQkNJbml0aWFsaXplZCA9IHRoaXMuYXBwbHlTaGVsZkNvbG9ycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pc1ZNSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgdGhpcy5pc1ZNSW5pdGlhbGl6ZWQgPSB0aGlzLmhhbmRsZVZtUG9zaXRpb25BbmRTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRWbXNMaXN0KCkge1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICBsaW1pdDogMTAwMDAsXHJcbiAgICAgIG9mZnNldDogMCxcclxuICAgICAgc29ydENvbHVtbk5hbWU6IFwiXCIsXHJcbiAgICAgIHNvcnRCeTogMSxcclxuICAgICAgc2VhcmNoVmFsdWU6IFwiXCIsXHJcbiAgICAgIGZpbHRlcjoge1xyXG4gICAgICAgIHR5cGU6IFtdLFxyXG4gICAgICAgIHN0YXR1czogW10sXHJcbiAgICAgICAgc2l6ZTogW10sXHJcbiAgICAgIH0sXHJcbiAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICAgIGVtcHR5RG93bmxvYWQ6IGZhbHNlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFZtTGlicmFyeUxpc3QocGF5bG9hZClcclxuICAgICAgKTtcclxuICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgIHRoaXMudm1MaXN0ID0gcmVzPy5kYXRhPy5kYXRhLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogaXRlbS5faWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udm1OYW1lLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTpcclxuICAgICAgICAgICAgICBpdGVtLnZtTmFtZSArIChpdGVtPy52bVR5cGUgPyBgICggJHtpdGVtLnZtVHlwZX0gKSBgIDogXCJcIiksXHJcbiAgICAgICAgICAgIGJyYW5kOiBpdGVtLnZtQnJhbmQsXHJcbiAgICAgICAgICAgIHR5cGU6IGl0ZW0udm1UeXBlLFxyXG4gICAgICAgICAgICB3aWR0aDogaXRlbS52bVdpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGl0ZW0udm1IZWlnaHQudmFsdWUsXHJcbiAgICAgICAgICAgIHBsYWNlbWVudDogaXRlbS5pc0RvdWJsZVNpZGVkLFxyXG4gICAgICAgICAgICBub09mQXNzaWduZWQ6IGl0ZW0udGVtcGxhdGVDb3VudCxcclxuICAgICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcclxuICAgICAgICAgICAgLi4uKGl0ZW0udm1JbWFnZVVybFxyXG4gICAgICAgICAgICAgID8geyBpbWdVcmw6IGAke3RoaXMuaW1nQ0ROfSR7aXRlbS52bUltYWdlVXJsfWAgfVxyXG4gICAgICAgICAgICAgIDoge30pLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IGdldFZtc0xpc3QgW0VSUl06XCIsIGVycm9yKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gb25DaGFuZ2VWbVZpc2liaWxpdHkoKSB7XHJcbiAgLy8gICBpZiAodGhpcy5zaG93Vk1zKSB7XHJcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5oYW5kbGVWbVBvc2l0aW9uQW5kU2l6ZSgpLCAwKTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hcHBseVNoZWxmQ29sb3JzKCksIDApO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgb25DaGFuZ2VCcmFuZEFuZENhdGVnb3J5VmlzaWJpbGl0eSgpIHsgfVxyXG5cclxuICBnZXRTZWxlY3RlZFZNKHZtOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLnZtTGlzdC5maW5kKCh2KSA9PiB2LmlkID09PSB2bT8udm1JZCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVWbVBvc2l0aW9uQW5kU2l6ZSgpIHtcclxuICAgIC8vIGlmICghdGhpcy5zaG93Vk1zKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB2aWV3UG9ydCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYm9keS1ibG9jay1zdW1cIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoIXZpZXdQb3J0KSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgYm9keVdpZHRoID0gdmlld1BvcnQub2Zmc2V0V2lkdGg7XHJcblxyXG4gICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy52bUNvbmZpZz8uZm9yRWFjaCgoZSwgaSkgPT4ge1xyXG4gICAgICBsZXQgc3RhcnRTaGVsZiA9IGU/LnN0YXJ0WVBvc2l0aW9uID8/IDE7XHJcblxyXG4gICAgICBsZXQgZW5kU2hlbGYgPVxyXG4gICAgICAgIGU/LmVuZFlQb3NpdGlvbiA/P1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lmxlbmd0aCA/P1xyXG4gICAgICAgIDE7XHJcblxyXG4gICAgICBjb25zdCB2bSA9IHZpZXdQb3J0LnF1ZXJ5U2VsZWN0b3IoYCN2bSR7aX1gKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKCF2bSkgcmV0dXJuO1xyXG5cclxuICAgICAgbGV0IHggPSAwO1xyXG4gICAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgICBsZXQgeVN0YXJ0ID0gMDtcclxuICAgICAgZm9yIChsZXQgayA9IDE7IGsgPCBzdGFydFNoZWxmOyBrKyspIHtcclxuICAgICAgICBjb25zdCBzID0gZ2V0U2hlbGZEaXYoayk7XHJcbiAgICAgICAgaWYgKCFzKSByZXR1cm47XHJcblxyXG4gICAgICAgIHlTdGFydCArPSBzLm9mZnNldEhlaWdodDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHBsYWNlbWVudEhlaWdodCA9IDA7XHJcbiAgICAgIGxldCBwbGFjZW1lbnRXaWR0aCA9IGJvZHlXaWR0aDtcclxuXHJcbiAgICAgIGZvciAobGV0IGsgPSBzdGFydFNoZWxmOyBrIDw9IGVuZFNoZWxmOyBrKyspIHtcclxuICAgICAgICBjb25zdCBzID0gZ2V0U2hlbGZEaXYoayk7XHJcbiAgICAgICAgaWYgKCFzKSByZXR1cm47XHJcbiAgICAgICAgcGxhY2VtZW50SGVpZ2h0ICs9IHMub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZGVmYXVsdFcgPSBwbGFjZW1lbnRXaWR0aCAvIDM7XHJcbiAgICAgIGxldCBkZWZhdWx0SCA9IHBsYWNlbWVudEhlaWdodCAvIDM7XHJcblxyXG4gICAgICBsZXQgd2lkdGggPSBkZWZhdWx0VztcclxuICAgICAgbGV0IGhlaWdodCA9IGRlZmF1bHRIO1xyXG5cclxuICAgICAgc3dpdGNoIChlPy54Wm9uZSkge1xyXG4gICAgICAgIGNhc2UgXCJsZWZ0XCI6XHJcbiAgICAgICAgICB4ID0gMDtcclxuICAgICAgICAgIHdpZHRoID0gZGVmYXVsdFc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcclxuICAgICAgICAgIHdpZHRoID0gZGVmYXVsdFc7XHJcbiAgICAgICAgICB4ID0gYm9keVdpZHRoIC0gd2lkdGg7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICB3aWR0aCA9IGRlZmF1bHRXO1xyXG4gICAgICAgICAgeCA9IChib2R5V2lkdGggLSB3aWR0aCkgLyAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInN0cmV0Y2hcIjpcclxuICAgICAgICAgIHdpZHRoID0gYm9keVdpZHRoO1xyXG4gICAgICAgICAgeCA9IDA7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoIChlPy55Wm9uZSkge1xyXG4gICAgICAgIGNhc2UgXCJ0b3BcIjpcclxuICAgICAgICAgIGhlaWdodCA9IHBsYWNlbWVudEhlaWdodCA8IGRlZmF1bHRIID8gcGxhY2VtZW50SGVpZ2h0IC0gMjAgOiBkZWZhdWx0SDtcclxuICAgICAgICAgIHkgPSB5U3RhcnQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnRIZWlnaHQgPCBkZWZhdWx0SCA/IHBsYWNlbWVudEhlaWdodCAtIDIwIDogZGVmYXVsdEg7XHJcbiAgICAgICAgICB5ID0gKHBsYWNlbWVudEhlaWdodCAtIGhlaWdodCkgLyAyICsgeVN0YXJ0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gcGxhY2VtZW50SGVpZ2h0IDwgZGVmYXVsdEggPyBwbGFjZW1lbnRIZWlnaHQgLSAyMCA6IGRlZmF1bHRIO1xyXG4gICAgICAgICAgeSA9IHBsYWNlbWVudEhlaWdodCAtIGhlaWdodCArIHlTdGFydDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzdHJldGNoXCI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnRIZWlnaHQ7XHJcbiAgICAgICAgICB5ID0geVN0YXJ0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZtLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xyXG4gICAgICB2bS5zdHlsZS5oZWlnaHQgPSBgICR7aGVpZ2h0fXB4YDtcclxuICAgICAgdm0uc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xyXG5cclxuICAgICAgZnVuY3Rpb24gZ2V0U2hlbGZEaXYoazogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGRpdiA9IHZpZXdQb3J0LnF1ZXJ5U2VsZWN0b3IoYCNzaGVsZiR7a31gKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoIWRpdikgZGl2ID0gdmlld1BvcnQucXVlcnlTZWxlY3RvcihgI3RyYXkke2t9YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGRpdiBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFwcGx5U2hlbGZDb2xvcnMoKSB7XHJcbiAgICBjb25zdCBib2RpZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJvZHktYmxvY2stc3VtXCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCFib2RpZXMpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBib2R5Q2hpbGRyZW4gPSBBcnJheS5mcm9tKGJvZGllcz8uY2hpbGRyZW4gPz8gW10pIGFzIEhUTUxFbGVtZW50W107XHJcblxyXG4gICAgY29uc3Qgc2hlbGZEaXZzID0gYm9keUNoaWxkcmVuXHJcblxyXG4gICAgICAubWFwKChkaXYpID0+IGRpdiBhcyBIVE1MRWxlbWVudClcclxuICAgICAgLmZpbHRlcigoZCkgPT4gZD8uaWQuaW5jbHVkZXMoXCJzdW1TaGVsZkNvbnRhaW5lclwiKSk7XHJcblxyXG4gICAgaWYgKCFzaGVsZkRpdnMpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBhZGp1c3QgPSAzMDA7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCkge1xyXG4gICAgICBjYXNlIFwiTDFcIjogLy9maXh0dXJlXHJcbiAgICAgICAgc2hlbGZEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgIGlmIChkKSBkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbMF0uYmc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwiTDNcIjogLy9zZWN0aW9uXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29uc3Qgc2hlbHZlcyA9IHNoZWxmRGl2c1xyXG4gICAgICAgICAgICAubWFwKChkaXYpID0+XHJcbiAgICAgICAgICAgICAgZGl2Lmxhc3RFbGVtZW50Q2hpbGQ/LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJkaXZcIlxyXG4gICAgICAgICAgICAgICAgPyAoZGl2Lmxhc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgICAgICAgIHRoaXMuY29uc3RydWN0U2VxdWVudGlhbFNlY3Rpb24oc2hlbHZlcyk7XHJcbiAgICAgICAgICBjb25zdCBzZWN0aW9uQXJyYXkgPSB0aGlzLmdyb3VwU2hlbHZlc0J5Wm9uZShcclxuICAgICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZyA/PyBbXVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGFsbFNlY3Rpb25TaGVsdmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICAgIHNlY3Rpb25BcnJheS5mb3JFYWNoKChzZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzaGVsZklkcyA9XHJcbiAgICAgICAgICAgICAgc2Uuc2hlbHZlcz8ubWFwKChzaCkgPT4gc2gucmVwbGFjZSgvXFxzL2csIFwiXCIpLnRvTG93ZXJDYXNlKCkpID8/XHJcbiAgICAgICAgICAgICAgW107XHJcbiAgICAgICAgICAgIGFsbFNlY3Rpb25TaGVsdmVzLnB1c2goLi4uc2hlbGZJZHMpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNEaXZzID0gc2hlbHZlcy5maWx0ZXIoKGl0ZW0pID0+XHJcbiAgICAgICAgICAgICAgc2hlbGZJZHM/LmluY2x1ZGVzKGl0ZW0/LmlkID8/IFwiXCIpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzZWNEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZCkgZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnNoZWxmQ29sb3JzW2ldLmJnO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHVuYXNzaWduZWRTaGVsdmVzID0gc2hlbGZEaXZzLmZpbHRlcihcclxuICAgICAgICAgICAgKGl0ZW0pID0+ICFhbGxTZWN0aW9uU2hlbHZlcy5pbmNsdWRlcyhpdGVtLmlkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHVuYXNzaWduZWRTaGVsdmVzLmZvckVhY2goKGQpID0+IChkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwid2hpdGVcIikpO1xyXG5cclxuICAgICAgICAgIGxldCBzZWN0aW9uR3JvdXBIZWlnaHQgPSAwO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMuZm9yRWFjaCgoc3osIGkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VjdGlvbkhlaWdodCA9IHN6LnNlY3Rpb24uc2hlbGZEaXZzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChoLCBkKSA9PiBoICsgKGQ/Lm9mZnNldEhlaWdodCA/PyAwKSxcclxuICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9uV2lkdGggPVxyXG4gICAgICAgICAgICAgICAgc3ouc2VjdGlvbi5zaGVsZkRpdnNbMF0/Lm9mZnNldFdpZHRoID8/IDM0NTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgYmMgPSBib2RpZXMucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXHJcbiAgICAgICAgICAgICAgICBgI2JyYW5kLWNhdGVnb3J5JHtpfWBcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoYmMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY0JnID0gcmdiVG9IZXgoXHJcbiAgICAgICAgICAgICAgICAgIHN6LnNlY3Rpb24uc2hlbGZEaXZzWzBdPy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3JcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xvciA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hlbGZDb2xvcnMuZmluZCgoYykgPT4gYy5iZyA9PT0gc2VjQmcpID8/XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hlbGZDb2xvcnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgYmMuc3R5bGUuYm9yZGVyQ29sb3IgPSBjb2xvci5ib3JkZXI7XHJcbiAgICAgICAgICAgICAgICBiYy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIiNmZmZcIjtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBiY1ggPSAoY3VycmVudFNlY3Rpb25XaWR0aCAtIGJjLm9mZnNldFdpZHRoKSAvIDI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiY1kgPVxyXG4gICAgICAgICAgICAgICAgICAoY3VycmVudFNlY3Rpb25IZWlnaHQgLSBiYy5vZmZzZXRIZWlnaHQpIC8gMiArXHJcbiAgICAgICAgICAgICAgICAgIHNlY3Rpb25Hcm91cEhlaWdodDtcclxuICAgICAgICAgICAgICAgIGJjLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtiY1ggKyBhZGp1c3R9cHgsICR7YmNZfXB4KWA7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VjdGlvbkdyb3VwSGVpZ2h0ICs9IGN1cnJlbnRTZWN0aW9uSGVpZ2h0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBcIkwyXCI6IC8vc2hlbGZcclxuICAgICAgICB7XHJcbiAgICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZGl2LCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnNoZWxmQ29sb3JzW2ldLmJnO1xyXG4gICAgICAgICAgICBkaXYuc3R5bGUuYm9yZGVyID0gYDEuNHB4IHNvbGlkICR7dGhpcy5zaGVsZkNvbG9yc1tpXS5ib3JkZXJ9YDtcclxuICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hvd1ZNcykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBiYyA9IGRpdi5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgI2JyYW5kLWNhdGVnb3J5JHtpfWApO1xyXG4gICAgICAgICAgICBpZiAoIWJjKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBiY1ggPSAoZGl2Lm9mZnNldFdpZHRoIC0gYmMub2Zmc2V0V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgY29uc3QgYmNZID0gKGRpdi5vZmZzZXRIZWlnaHQgLSBiYy5vZmZzZXRIZWlnaHQpIC8gMjtcclxuXHJcbiAgICAgICAgICAgIGJjLnN0eWxlLmJvcmRlckNvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1tpXS5ib3JkZXI7XHJcbiAgICAgICAgICAgIGJjLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0udGV4dEJnO1xyXG4gICAgICAgICAgICBiYy5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7YmNYICsgYWRqdXN0fXB4LCAke2JjWX1weClgO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiTDRcIjogLy9zcG90XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgc2hlbGZEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGQpIGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1swXS5iZztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGQpIGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1swXS5iZztcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdFNlcXVlbnRpYWxTZWN0aW9uKHNoZWxmRGl2czogKEhUTUxFbGVtZW50IHwgbnVsbClbXSkge1xyXG4gICAgY29uc3QgbmV3U2VjdGlvbkJ5Wm9uZXMgPSBbXTtcclxuXHJcbiAgICBsZXQgcFpvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgZm9yIChjb25zdCBzIG9mIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWcgPz8gW10pIHtcclxuICAgICAgY29uc3Qgem9uZSA9IHMuem9uZSB8fCBcIlwiO1xyXG4gICAgICBjb25zdCBzaGVsZklkID0gYCR7cy5zaGVsZlR5cGV9JHtzLnNoZWxmTnVtYmVyfWA7XHJcbiAgICAgIGNvbnN0IHNoZWxmRGl2ID0gc2hlbGZEaXZzLmZpbmQoKGQpID0+IGQ/LmlkID09PSBzaGVsZklkKTtcclxuXHJcbiAgICAgIGlmICh6b25lID09PSBcIlwiKSBjb250aW51ZTtcclxuICAgICAgaWYgKHpvbmUgIT09IHBab25lKSB7XHJcbiAgICAgICAgbmV3U2VjdGlvbkJ5Wm9uZXMucHVzaCh7XHJcbiAgICAgICAgICB6b25lLFxyXG4gICAgICAgICAgc2VjdGlvbjoge1xyXG4gICAgICAgICAgICBicmFuZHM6IHMucHJvZHVjdEJyYW5kTmFtZSA/PyBbXSxcclxuICAgICAgICAgICAgY2F0ZWdvcmllczogcy5wcm9kdWN0Q2F0ZWdvcnkgPz8gW10sXHJcbiAgICAgICAgICAgIHNoZWx2ZXM6IFtzaGVsZklkXSxcclxuICAgICAgICAgICAgc2hlbGZEaXZzOiBbc2hlbGZEaXZdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwWm9uZSA9IHpvbmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3U2VjdGlvbkJ5Wm9uZXNbbmV3U2VjdGlvbkJ5Wm9uZXMubGVuZ3RoIC0gMV0uc2VjdGlvbi5zaGVsdmVzLnB1c2goXHJcbiAgICAgICAgICBzaGVsZklkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBuZXdTZWN0aW9uQnlab25lc1tuZXdTZWN0aW9uQnlab25lcy5sZW5ndGggLSAxXS5zZWN0aW9uLnNoZWxmRGl2cy5wdXNoKFxyXG4gICAgICAgICAgc2hlbGZEaXZcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWN0aW9uQnlab25lcyA9IFsuLi5uZXdTZWN0aW9uQnlab25lc107XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGdyb3VwU2hlbHZlc0J5Wm9uZShpbnB1dDogU2hlbGZDb25maWdbXSk6IFNlY3Rpb25Db25maWdbXSB7XHJcbiAgICBjb25zdCB6b25lTWFwOiB7IFt6b25lOiBzdHJpbmddOiBTZWN0aW9uQ29uZmlnIH0gPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXQpIHtcclxuICAgICAgY29uc3Qgem9uZSA9IGl0ZW0/LnpvbmUgPz8gXCJcIjtcclxuICAgICAgY29uc3Qgc2hlbGZMYWJlbCA9IGAke2l0ZW0uc2hlbGZUeXBlfSAke2l0ZW0uc2hlbGZOdW1iZXJ9YDtcclxuXHJcbiAgICAgIGlmICghem9uZU1hcFt6b25lXSkge1xyXG4gICAgICAgIHpvbmVNYXBbem9uZV0gPSB7XHJcbiAgICAgICAgICBzaGVsdmVzOiBbXSxcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6XHJcbiAgICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiXHJcbiAgICAgICAgICAgICAgPyBpdGVtLnByb2R1Y3RCcmFuZE5hbWVcclxuICAgICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OlxyXG4gICAgICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDJcIlxyXG4gICAgICAgICAgICAgID8gaXRlbS5wcm9kdWN0Q2F0ZWdvcnlcclxuICAgICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgem9uZTogem9uZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB6b25lTWFwW3pvbmVdPy5zaGVsdmVzPy5wdXNoKHNoZWxmTGFiZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHpvbmVNYXApO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlTZWN0aW9uQ29uZmlnVG9TaGVsdmVzKHNlY3Rpb25zOiBTZWN0aW9uQ29uZmlnW10pOiBTaGVsZkNvbmZpZ1tdIHtcclxuICAgIGNvbnN0IHNlY3Rpb25NYXAgPSBuZXcgTWFwPFxyXG4gICAgICBzdHJpbmcsXHJcbiAgICAgIFBpY2s8U2VjdGlvbkNvbmZpZywgXCJ6b25lXCIgfCBcInByb2R1Y3RCcmFuZE5hbWVcIiB8IFwicHJvZHVjdENhdGVnb3J5XCI+XHJcbiAgICA+KCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc2hlbGZMYWJlbCBvZiBzZWN0aW9uLnNoZWx2ZXMhKSB7XHJcbiAgICAgICAgc2VjdGlvbk1hcC5zZXQoc2hlbGZMYWJlbCwge1xyXG4gICAgICAgICAgem9uZTogc2VjdGlvbi56b25lLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTogc2VjdGlvbi5wcm9kdWN0QnJhbmROYW1lLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiBzZWN0aW9uLnByb2R1Y3RDYXRlZ29yeSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFwcGx5IG92ZXJyaWRlcyB0byBtYXRjaGluZyBzaGVsdmVzXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnPy5tYXAoKHNoZWxmKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2hlbGZMYWJlbCA9IGAke3NoZWxmLnNoZWxmVHlwZX0gJHtzaGVsZi5zaGVsZk51bWJlcn1gO1xyXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlID0gc2VjdGlvbk1hcC5nZXQoc2hlbGZMYWJlbCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5zaGVsZixcclxuICAgICAgICAgIHpvbmU6IG92ZXJyaWRlPy56b25lIHx8IFwiXCIsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBvdmVycmlkZT8ucHJvZHVjdEJyYW5kTmFtZSA/PyBbXSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogb3ZlcnJpZGU/LnByb2R1Y3RDYXRlZ29yeSA/PyBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KSA/PyBbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpcm1Db21wbGV0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oQ29tcGxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gXCJDb21wbGV0ZSB0ZW1wbGF0ZVwiO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPVxyXG4gICAgICBcIlRlbXBsYXRlIGlzIG5vdyByZWFkeSB0byBhc3NpZ24gaXQgdG8gdGhlIHN0b3JlIGJ1dCBzdGlsbCB5b3UgY2FuIGNvbWUgYWdhaW4gYW55IHRpbWUgYW5kIGVkaXQgdGhpcyB0ZW1wbGF0ZS5cIjtcclxuICAgIC8vIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLm5vdGUgPSAnWW91IGNhblxcJ3QgZWRpdCBpdCBvbmNlIGFzc2lnbmVkIHRvIHRoZSB0ZW1wbGF0ZS4nO1xyXG5cclxuICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09IFwib2tcIik7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzdWJtaXRGb3JtKGRhdGE6IHsgc3RhdHVzOiBzdHJpbmc7IGdvQmFjazogYm9vbGVhbiB9KSB7XHJcbiAgICBjb25zdCBldCA9IHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRXJyb3JUYWJzO1xyXG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMudmFsdWU7XHJcbiAgICBpZiAoIXRlbXBsYXRlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKGV0LmJhc2ljRGV0YWlscyB8fCBldC5wcm9kdWN0cyB8fCBldC52bXMpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZGF0YS5zdGF0dXMgPT09IFwiY29tcGxldGVcIilcclxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jb25maXJtQ29tcGxldGlvbigpKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHBheWxvYWQ6IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgPSB7XHJcbiAgICAgIC4uLnRlbXBsYXRlLFxyXG4gICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGUuZml4dHVyZU5hbWU/LnRyaW0oKSxcclxuICAgICAgLy8gc3RhdHVzOiBkYXRhLnN0YXR1cyxcclxuICAgICAgaXNFZGl0ZWQ6IHRydWUsXHJcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoRGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcy5zdWJtaXRGaXh0dXJlVGVtcGxhdGVEZXRhaWxzKFxyXG4gICAgICBwYXlsb2FkLFxyXG4gICAgICB0ZW1wbGF0ZS5faWQhXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXHJcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsgaXNFZGl0OiBmYWxzZSB9LFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIixcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFwiRml4dHVyZSB0ZW1wbGF0ZSBkZXRhaWxzIHVwZGF0ZWQuXCIpO1xyXG4gICAgICBpZiAoZGF0YS5nb0JhY2spIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbWFuYWdlL3BsYW5vZ3JhbS9maXh0dXJlLXRlbXBsYXRlc1wiXSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZGF0YS5zdGF0dXMgPT09IFwiY29tcGxldGVcIikge1xyXG4gICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgIC8vICAgW1wiL21hbmFnZS9wbGFub2dyYW0vZml4dHVyZS10ZW1wbGF0ZS9hc3NpZ24tc3RvcmVzXCJdLFxyXG4gICAgICAgIC8vICAge1xyXG4gICAgICAgIC8vICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcInByZXNlcnZlXCIsXHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VmFyaWFudExpc3QoKSB7XHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZXNMaXN0ID0gW107XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBtYXN0ZXJUZW1wbGF0ZUlkOiB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/Ll9pZCxcclxuICAgICAgbGltaXQ6IHRoaXMubGltaXQsXHJcbiAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXHJcbiAgICAgIHNvcnRDb2x1bW5OYW1lOiB0aGlzLnNvcnRlZENvbHVtbixcclxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRPcmRlcixcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaFRlcm0sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRUZW1wbGF0ZUNoaWxkTGlzdChwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSByZXM/LmRhdGE/LmNvdW50O1xyXG4gICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVzTGlzdCA9IHJlcz8uZGF0YT8uZGF0YTtcclxuICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNpemVzID1cclxuICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zIDwgMTAgPyBbdGhpcy50b3RhbEl0ZW1zXSA6IFsxMCwgMjAsIDMwXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJAQCBnZXRGaXh0dXJlVGVtcGxhdGVzTGlzdCBbRVJSXTogXCIsIGVycik7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLmZpeHR1cmVUZW1wbGF0ZXNMaXN0Lmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGdldFZlcnNpb25zTGlzdCh0ZW1wbGF0ZUlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRUZW1wbGF0ZVZlcnNpb25MaXN0KHRlbXBsYXRlSWQpLnN1YnNjcmliZShcclxuICAgICAge1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgIGlmIChyZXM/LmRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVZlcnNpb25zID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRlbXBsYXRlVmVyc2lvbnMubGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmVyc2lvbklkID0gdGhpcy50ZW1wbGF0ZVZlcnNpb25zWzBdLl9pZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkBAIGdldFZlcnNpb25zTGlzdCBbRVJSXTogXCIsIGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBvblNlbGVjdFZlcnNpb24odmVyc2lvbjogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmVyc2lvbklkID0gdmVyc2lvbi5faWQ7XHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMgPSB2ZXJzaW9uLmRhdGE7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFwcGx5U2hlbGZDb2xvcnMoKSwgMCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaGFuZGxlVm1Qb3NpdGlvbkFuZFNpemUoKSwgMCk7XHJcblxyXG4gIH1cclxuXHJcbiAgcGFnaW5hdGlvblNpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRvdGFsSXRlbXMgPCAxMCA/IHRoaXMudG90YWxJdGVtcyA6IHRoaXMubGltaXQ7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm9mZnNldCA9IE51bWJlcihwYWdlT2Zmc2V0KTtcclxuICAgIHRoaXMuZ2V0VmFyaWFudExpc3QoKTtcclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IG51bWJlcikge1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5saW1pdCA9IE51bWJlcihwYWdlU2l6ZSk7XHJcbiAgICB0aGlzLmdldFZhcmlhbnRMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBvbkR1cGxpY2F0ZShmaXh0dXJlSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5kdXBsaWNhdGVGaXh0dXJlVGVtcGxhdGUoeyB0ZW1wbGF0ZUlkOiBmaXh0dXJlSWQgfSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VmFyaWFudExpc3QoKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzLmRhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgICBlcnI/LmVycm9yPy5lcnJvciB8fCBcIkZhaWxlZCB0byBkdXBsaWNhdGUgVGVtcGxhdGVcIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBkdXBsaWNhdGVGaXh0dXJlVGVtcGxhdGUgW2Vycl06XCIsIGVycik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtRGVsZXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubmdiTW9kYWwub3BlbihEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gXCJEZWxldGUgZml4dHVyZSB0ZW1wbGF0ZVwiO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPVxyXG4gICAgICBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBUZW1wbGF0ZT9cIjtcclxuXHJcbiAgICByZXR1cm4gYXdhaXQgbW9kZWxSZWYucmVzdWx0LnRoZW48Ym9vbGVhbj4oKHJlc3VsdCkgPT4gcmVzdWx0ID09PSBcIm9rXCIpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25EZWxldGUoZml4dHVyZUlkOiBzdHJpbmcsIHVzYWdlQ291bnQ6IG51bWJlciA9IDApIHtcclxuICAgIGlmICh1c2FnZUNvdW50KSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKENhbm5vdFBlcmZvcm1Db21wb25lbnQsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gYENhbuKAmXQgZGVsZXRlIEZpeHR1cmUgdGVtcGxhdGUhYDtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPSBgU2luY2UgdGhpcyB0ZW1wbGF0ZSBpcyBsaXZlIGluIFwiJHt1c2FnZUNvdW50fSBwbGFub2dyYW1zLFwiIGRlbGV0aW5nIGlzIG5vdCBhbGxvd2VkLmA7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIShhd2FpdCB0aGlzLmNvbmZpcm1EZWxldGlvbigpKSkgcmV0dXJuO1xyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5kZWxldGVGaXh0dXJlVGVtcGxhdGUoeyB0ZW1wbGF0ZUlkOiBmaXh0dXJlSWQgfSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VmFyaWFudExpc3QoKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcclxuICAgICAgICAgICAgZXJyPy5lcnJvcj8uZXJyb3IgfHwgXCJGYWlsZWQgdG8gZGVsZXRlIFRlbXBsYXRlXCJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkBAIH4gZGVsZXRlRml4dHVyZVRlbXBsYXRlIFtlcnJdOlwiLCBlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc29ydFRhYmxlKGNvbHVtbjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5zb3J0ZWRDb2x1bW4gPT09IGNvbHVtbikge1xyXG4gICAgICB0aGlzLnNvcnRPcmRlciA9IHRoaXMuc29ydE9yZGVyID09PSAxID8gLTEgOiAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zb3J0ZWRDb2x1bW4gPSBjb2x1bW47XHJcbiAgICAgIHRoaXMuc29ydE9yZGVyID0gMTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICB0aGlzLmdldFZhcmlhbnRMaXN0KCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVWaWV3TW9kZShtb2RlOiBcImxpc3RcIiB8IFwidHJlZVwiKSB7XHJcbiAgICB0aGlzLnZpZXdNb2RlID0gbW9kZTtcclxuICAgIGlmIChtb2RlID09ICdsaXN0Jykge1xyXG4gICAgICB0aGlzLmdldFZhcmlhbnRMaXN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgcXVlcnlQYXJhbXM6IHsgdmlldzogbW9kZSB9LFxyXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCIsXHJcbiAgICAgIHJlcGxhY2VVcmw6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKCkge1xyXG4gICAgdGhpcy5zb3J0ZWRDb2x1bW4gPSBcIlwiO1xyXG4gICAgdGhpcy5zb3J0T3JkZXIgPSAxO1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5saW1pdCA9IDEwO1xyXG5cclxuICAgIHRoaXMuZ2V0VmFyaWFudExpc3QoKTtcclxuICB9XHJcblxyXG4gIG9uRWRpdChmaXh0dXJlSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21hbmFnZS9wbGFub2dyYW0vZml4dHVyZS10ZW1wbGF0ZS9iYXNpYy1kZXRhaWxzXCJdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IHRlbXBsYXRlSWQ6IGZpeHR1cmVJZCwgaXNFZGl0OiB0cnVlIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwiY29udGVudC13cmFwcGVyXCIgaWQ9XCJ0ZW1wbGF0ZS1zdW1tYXJ5XCIgKm5nSWY9XCIhaXNQYWdlTG9hZGluZ1wiPlxyXG4gIDwhLS0gPT09PT09PT09PT09PT09SGVhZGVyIEluZm8gQ2FyZHM9PT09PT09PT09PT09PT09PT09IC0tPlxyXG4gIDxkaXYgaWQ9XCJoZWFkZXJcIiBjbGFzcz1cInJvdyBteC0wIG15LTUgZ2FwLTMgbWItN1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgIDxoMz57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSB8IHRpdGxlY2FzZSB9fSBmaXh0dXJlPC9oMz5cclxuICAgICAgPHA+VHlwZTwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgIDxoMz57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoIH19PC9oMz5cclxuICAgICAgPHA+Tm8gb2YgU2hlbHZlczwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgIDxoMz57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlQ2FwYWNpdHkgfX08L2gzPlxyXG4gICAgICA8cD5Qcm9kdWN0IENhcGFjaXR5PC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sIGZpbHRlci10YWJcIj5cclxuICAgICAgPGgzPnt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnZhcmlhbnRDb3VudCA/PyAwIH19PC9oMz5cclxuICAgICAgPHA+VmFyaWFudHM8L3A+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgQGlmKGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnRlbXBsYXRlVHlwZSAhPT0gJ21hc3Rlcicpe1xyXG4gICAgPGRpdiBjbGFzcz1cIm1zLTMgbWItN1wiPlxyXG4gICAgICA8aDQ+QWxsIHZlcnNpb25zPC9oND5cclxuICAgICAgPHNwYW4+U2hvd2luZyBhbGwgdGhlIHVwZGF0ZWQgdmVyc2lvbnMgb3ZlciB0aGUgdGltZS48L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTVcIj5cclxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMiBwb3NpdGlvbi1hYnNvbHV0ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cInNob3dQcm9kdWN0U3BvdHNcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzaG93UHJvZHVjdFNwb3RzXCJcclxuICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgaWQ9XCJzaG93UHJvZHVjdFNwb3RzXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgc3ViIG1zLTJcIiBmb3I9XCJzaG93UHJvZHVjdFNwb3RzXCI+U2hvdyBQcm9kdWN0IFNwb3RzPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwic2hvd1ZNc1wiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNob3dWTXNcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2VWbVZpc2liaWxpdHkoKVwiXHJcbiAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgIGlkPVwic2hvd1ZNc1wiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHN1YiBtcy0yXCIgZm9yPVwic2hvd1ZNc1wiPlNob3cgVk1zPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwic2hvd0JyYW5kQ2F0ZWdvcnlcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzaG93QnJhbmRDYXRlZ29yeVwiXHJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZUJyYW5kQW5kQ2F0ZWdvcnlWaXNpYmlsaXR5KClcIlxyXG4gICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICBpZD1cInNob3dCcmFuZENhdGVnb3J5XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgc3ViIG1zLTJcIiBmb3I9XCJzaG93QnJhbmRDYXRlZ29yeVwiPlNob3cgQnJhbmRzICYgQ2F0ZWdvcmllczwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+IC0tPlxyXG5cclxuICAgIEBpZihmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy50ZW1wbGF0ZVR5cGUgIT09ICdtYXN0ZXInKXtcclxuICAgICAgPGRpdiBjbGFzcz1cInZlcnNpb24tYmxvY2tcIj5cclxuICAgICAgICBAaWYodGVtcGxhdGVWZXJzaW9ucy5sZW5ndGgpeyBAZm9yICh2ZXJzaW9uIG9mIHRlbXBsYXRlVmVyc2lvbnM7IHRyYWNrICRpbmRleDsgbGV0IGZpcnN0ID0gJGZpcnN0KSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJzaW9uLXRpbGVcIiBbY2xhc3MuYWN0aXZlXT1cInRoaXMuc2VsZWN0ZWRWZXJzaW9uSWQgPT09IHZlcnNpb24uX2lkXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RWZXJzaW9uKHZlcnNpb24pXCI+XHJcbiAgICAgICAgICAgICAgPHA+TGFzdCB1cGRhdGVkOiB7eyB2ZXJzaW9uLnVwZGF0ZWRBdCB8IGRhdGUgOiBcIm1lZGl1bVwiIH19PC9wPlxyXG4gICAgICAgICAgICAgIEBpZihmaXJzdCl7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2UgYWN0aXZlXCI+QWN0aXZlPC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH0gfUBlbHNlIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby12ZXJzaW9uLWJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICBkPVwiTTguOTQ5MjIgMjEuMTk5N0M4LjY0NzkyIDIxLjIzMTUgOC4zNDEyMSAyMS4yNTA1IDguMDMwMjcgMjEuMjUwNUM3Ljg2MDc1IDIxLjI1MDUgNy42OTM0NSAyMS4yNDM2IDcuNTI4MzIgMjEuMjMzOVYzMS42MDY5QzcuNTI4MzIgMzMuMDM0OSA4LjcxMTMgMzQuMjI2IDEwLjE5OTIgMzQuMjI2MUgyOS44MDM3QzMxLjI5MTcgMzQuMjI2MSAzMi40NzQ2IDMzLjAzNSAzMi40NzQ2IDMxLjYwNjlWMjEuMjM0OUMzMi4zMTI3IDIxLjI0NDEgMzIuMTQ4OCAyMS4yNTA1IDMxLjk4NDQgMjEuMjUwNUMzMS42NzA0IDIxLjI1MDUgMzEuMzU5OCAyMS4yMzI1IDMxLjA1MzcgMjEuMTk5N1YyOC45ODc4SDguOTQ5MjJWMjEuMTk5N1pNMzAuOTMwNyA1Ljc3MzkzSDkuMDcyMjdDOC44OTQ5IDUuNzczOTMgOC43Mzk2NCA1Ljg2NjcxIDguNjYyMTEgNS45ODc3OUw4LjY2MDE2IDUuOTg5NzVMNS4xNTAzOSAxMS40NzMxTDUuMDU1NjYgMTEuNjIwNkMzLjgzMDEyIDEzLjc0MDQgNS4wOTQ3MyAxNi40Njc0IDcuNDQ2MjkgMTYuNzc2OUM3LjY0NzIxIDE2LjgwMTMgNy44MzY5NiAxNi44MTU5IDguMDI0NDEgMTYuODE1OUM5LjI1NDQ5IDE2LjgxNTkgMTAuMzQyNCAxNi4yODcyIDExLjA5OTYgMTUuNDY1M0wxMi4wMjE1IDE0LjQ2NDRMMTIuOTQwNCAxNS40NjgzQzEzLjY4OTQgMTYuMjg2MyAxNC43NzYxIDE2LjgxNTkgMTYuMDEzNyAxNi44MTU5QzE3LjI0NTcgMTYuODE1OCAxOC4zMzc2IDE2LjI4NTYgMTkuMDg1OSAxNS40NjgzTDIwLjAwNzggMTQuNDYxNEwyMC45Mjk3IDE1LjQ2ODNDMjEuNjc4MSAxNi4yODU3IDIyLjc2OTcgMTYuODE1OSAyNC4wMDIgMTYuODE1OUMyNS4yMzQyIDE2LjgxNTkgMjYuMzI1OCAxNi4yODU3IDI3LjA3NDIgMTUuNDY4M0wyNy45OTYxIDE0LjQ2MTRMMjguOTE4IDE1LjQ2ODNDMjkuNjY2NCAxNi4yODU3IDMwLjc1OSAxNi44MTU5IDMxLjk5MTIgMTYuODE1OUMzMi4xNzI2IDE2LjgxNTkgMzIuMzY3NyAxNi44MDIxIDMyLjU2NzQgMTYuNzc3OEgzMi41NjY0QzM0Ljk2MDIgMTYuNDU3MyAzNi4yMjgzIDEzLjYwNzggMzQuODYwNCAxMS40NzMxTDM0Ljg1OTQgMTEuNDc0MUwzMS4zNDI4IDUuOTkwNzJMMzEuMzQxOCA1Ljk4Nzc5QzMxLjI2NDQgNS44NjY1MiAzMS4xMDgyIDUuNzczOTMgMzAuOTMwNyA1Ljc3MzkzWlwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMi41XCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICA8c3Bhbj5ObyB2ZXJzaW9ucyBoaXN0b3J5IGF2YWlsYWJsZSA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gICAgPGRpdiBpZD1cInZtLXByb2R1Y3RzLXN1bVwiIGNsYXNzPVwid2FsbC12aWV3cG9ydFwiPlxyXG4gICAgICA8IS0tIEhlYWRlciBibG9jayAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1ibG9ja1wiXHJcbiAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnXCI+XHJcbiAgICAgICAgPHA+e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uaGVhZGVyPy5sYWJlbCB9fTwvcD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIEJvZHkgYmxvY2sgLS0+XHJcbiAgICAgIDxkaXYgaWQ9XCJib2R5LWJsb2NrLXN1bVwiIGNsYXNzPVwiYm9keS1ibG9ja1wiPlxyXG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVtWTSBCTE9DS10tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnZtQ29uZmlnPy5sZW5ndGhcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZtIG9mIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnZtQ29uZmlnOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2lkXT1cIid2bScgKyBpXCIgY2xhc3M9XCJ2bS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRTZWxlY3RlZFZNKHZtKSBhcyBzZWxlY3RlZFZNXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwic2VsZWN0ZWRWTT8uaW1nVXJsOyBlbHNlIHBsYWNlaG9sZGVyXCIgW3NyY109XCJzZWxlY3RlZFZNPy5pbWdVcmxcIiBhbHQ9XCJWbSBJbWFnZVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidm0tcGxhY2Vob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDM+e3sgc2VsZWN0ZWRWTT8ubmFtZSB9fTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW0ZJWFRVUkUgTEVWRUwgLSBCUkFORCBDQVRFR09SWV0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICA8ZGl2IGlkPVwiZml4dHVyZS1sZXZlbFwiICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gJ0wxJ1wiPlxyXG4gICAgICAgICAgPGRpdiBpZD1cImJyYW5kLWNhdGVnb3J5XCIgY2xhc3M9XCJicmFuZC1jYXRlZ29yeVwiICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdEJyYW5kTmFtZT8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYnJhbmRDYXRlZ29yeVRvb2x0aXBcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmFuZFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGIgb2YgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdEJyYW5kTmFtZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGRyYWZ0IG1lLTFcIj5cclxuICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnlcIiAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnByb2R1Y3RDYXRlZ29yeT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5wcm9kdWN0Q2F0ZWdvcnk7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2JyYW5kQ2F0ZWdvcnlUb29sdGlwPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgPGI+QnJhbmRzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnByb2R1Y3RCcmFuZE5hbWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgPHAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5wcm9kdWN0Q2F0ZWdvcnk/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPGI+Q2F0ZWdvcmllczogPC9iPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5wcm9kdWN0Q2F0ZWdvcnk7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcblxyXG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bU0VDVElPTiBMRVZFTCAtIEJSQU5EIENBVEVHT1JZXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJzZWN0aW9uLWxldmVsXCIgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSAnTDMnXCI+XHJcbiAgICAgICAgICA8IS0tIDxkaXYgaWQ9XCJib2R5LWxvYWRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICBAZm9yIChpdGVtIG9mIHNlY3Rpb25CeVpvbmVzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ2JyYW5kLWNhdGVnb3J5JyArICRpbmRleFwiIGNsYXNzPVwiYnJhbmQtY2F0ZWdvcnlcIiBbbmdiVG9vbHRpcF09XCJicmFuZENhdGVnb3J5VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgZHJhZnQgbWUtMVwiPlxyXG4gICAgICAgICAgICAgICAge3sgaXRlbS56b25lIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmFuZFwiICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uYnJhbmRzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgQGZvciAoYiBvZiBpdGVtPy5zZWN0aW9uPy5icmFuZHM7dHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllcz8ubGVuZ3RoXCIgY2xhc3M9XCJzZXBhcmF0b3JcIj4gLSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhdGVnb3J5XCIgKm5nSWY9XCJpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNicmFuZENhdGVnb3J5VG9vbHRpcD5cclxuICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgIDxiPkJyYW5kczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICBAZm9yIChiIG9mIGl0ZW0/LnNlY3Rpb24/LmJyYW5kczt0cmFjayAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgPGI+Q2F0ZWdvcmllczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICBAZm9yIChjIG9mIGl0ZW0/LnNlY3Rpb24/LmNhdGVnb3JpZXM7dHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcblxyXG4gICAgICAgIDxkaXYgW2lkXT1cIidzdW1TaGVsZkNvbnRhaW5lcicgKyBpXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bU0hFTEYgTEVWRUwgLSBCUkFORCBDQVRFR09SWV0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgPGRpdiBpZD1cInNoZWxmLWxldmVsXCIgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSAnTDInXCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2lkXT1cIidicmFuZC1jYXRlZ29yeScgKyBpXCIgY2xhc3M9XCJicmFuZC1jYXRlZ29yeVwiICpuZ0lmPVwiaXRlbS5wcm9kdWN0QnJhbmROYW1lPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImJyYW5kQ2F0ZWdvcnlUb29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmFuZFwiICpuZ0lmPVwiaXRlbS5wcm9kdWN0QnJhbmROYW1lPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGIgb2YgaXRlbS5wcm9kdWN0QnJhbmROYW1lOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5wcm9kdWN0Q2F0ZWdvcnk/Lmxlbmd0aFwiIGNsYXNzPVwic2VwYXJhdG9yXCI+IC0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnlcIiAqbmdJZj1cIml0ZW0ucHJvZHVjdENhdGVnb3J5Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGIgb2YgaXRlbS5wcm9kdWN0Q2F0ZWdvcnk7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2JyYW5kQ2F0ZWdvcnlUb29sdGlwPlxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgPGI+QnJhbmRzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgaXRlbS5wcm9kdWN0QnJhbmROYW1lOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIml0ZW0ucHJvZHVjdENhdGVnb3J5Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgPGI+Q2F0ZWdvcmllczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGl0ZW0ucHJvZHVjdENhdGVnb3J5OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHJcbiAgICAgICAgICBAaWYoaXRlbS5zaGVsZlR5cGUgPT09J3RyYXknKXtcclxuICAgICAgICAgICAgPGRpdiBbaWRdPVwiaXRlbS5zaGVsZlR5cGUgKyAoaSArIDEpXCIgY2xhc3M9XCJibG9ja1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS50cmF5Um93cylcIiBjbGFzcz1cInRyYXkgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnByb2R1Y3RQZXJTaGVsZilcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSEgKyAoaSArIDEpXCIgY2xhc3M9XCJibG9jayBzaGVsZlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5wcm9kdWN0UGVyU2hlbGYpXCIgY2xhc3M9XCJwcm9kdWN0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gRm9vdGVyIGJsb2NrIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWJsb2NrXCJcclxuICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3Rlcj8uaXNFbmFibGVkICYmIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWZvb3RlciBsZWZ0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIHJpZ2h0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgIDxwPnt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3Rlcj8ubGFiZWwgfX08L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDIwMHB4XCI+PC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gPT09PT09PT09PT09PT09Rm9vdGVyIEluZm8gQ2FyZHM9PT09PT09PT09PT09PT09PT09IC0tPlxyXG4gIEBpZihmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy50ZW1wbGF0ZVR5cGUgPT09ICdtYXN0ZXInKXtcclxuICAgIDxkaXYgaWQ9XCJmb290ZXJcIiBjbGFzcz1cInJvdyBteC0wIG15LTUgZ2FwLTJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItNVwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8aDQ+QWxsIHZhcmlhbnRzPC9oND5cclxuICAgICAgICAgIDxzcGFuPlNob3dpbmcgYWxsIHZhcmlhbnRzIGRlcml2ZWQgZnJvbSB0aGlzIHJlZmVyZW5jZS9tYXN0ZXIgdGVtcGxhdGUuPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlc0xpc3QubGVuZ3RoIHx8IHNlYXJjaFRlcm1cIj5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiB2aWV3TW9kZSA9PT0gJ3RyZWUnIH1cIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCIgKGNoYW5nZSk9XCJvblNlYXJjaCgpXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogM3JlbTsgcGFkZGluZy1yaWdodDogM3JlbVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInNlYXJjaFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiAvPlxyXG5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWFyY2gtaWNvblwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCI2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8bGluZSB4MT1cIjEzXCIgeTE9XCIxM1wiIHgyPVwiMTZcIiB5Mj1cIjE2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VhcmNoVGVybVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQ2xlYXJcIiAoY2xpY2spPVwic2VhcmNoVGVybSA9ICcnOyBvblNlYXJjaCgpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImNsZWFyLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI2NHB4XCIgaGVpZ2h0PVwiNjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPlxyXG4gICAgICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+XHJcbiAgICAgICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDlMMTUgMTVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUgOUw5IDE1XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cclxuICAgICAgICAgICAgICAgICAgPC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjlcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZS1idXR0b24gbWUtMVwiIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IHZpZXdNb2RlID09PSAnbGlzdCcgfVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVZpZXdNb2RlKCdsaXN0JylcIj5cclxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTkgMThcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJNNi4yNDA3OCA0LjU0NjM5SDE1Ljg5MDZNNi4yNDA3OCA5LjAwMDE3SDE1Ljg5MDZNNi4yNDA3OCAxMy40NTM5SDE1Ljg5MDZNMi41MjkzIDQuNTQ2MzlIMi41MzY3Mk0yLjUyOTMgOS4wMDAxN0gyLjUzNjcyTTIuNTI5MyAxMy40NTM5SDIuNTM2NzJcIlxyXG4gICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmlld01vZGUgPT09ICdsaXN0JyA/ICcjMDA5QkYzJyA6ICcjMzQ0MDU0J1wiIHN0cm9rZS13aWR0aD1cIjEuNDg3NTZcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtYnV0dG9uXCIgW25nQ2xhc3NdPVwieyBzZWxlY3RlZDogdmlld01vZGUgPT09ICd0cmVlJyB9XCIgKGNsaWNrKT1cInRvZ2dsZVZpZXdNb2RlKCd0cmVlJylcIj5cclxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTkgMThcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJNOS45MjY3OCAxMC40ODQ1QzcuNDMyNjYgMTAuNDg0NSA2LjYxNjEzIDExLjQ4NjYgNi4zNDg5IDEyLjE0NzJDNy4xNDMxNiAxMi40ODg3IDcuNjk5ODggMTMuMjc1NSA3LjY5OTg4IDE0LjE5NkM3LjY5OTg4IDE0Ljc4NjYgNy40NjUyNyAxNS4zNTMgNy4wNDc2NCAxNS43NzA2QzYuNjMwMDIgMTYuMTg4MiA2LjA2MzYgMTYuNDIyOCA1LjQ3Mjk5IDE2LjQyMjhDNC44ODIzOSAxNi40MjI4IDQuMzE1OTcgMTYuMTg4MiAzLjg5ODM0IDE1Ljc3MDZDMy40ODA3MiAxNS4zNTMgMy4yNDYxIDE0Ljc4NjYgMy4yNDYxIDE0LjE5NkMzLjI0NjEgMTMuMjIzNSAzLjg2MjIxIDEyLjM5OTYgNC43MzA3IDEyLjA5NTNWNS45MDQ1QzQuMjk1NzMgNS43NTE4NyAzLjkxOTA4IDUuNDY3NiAzLjY1MzA0IDUuMDkxMTVDMy4zODcgNC43MTQ3IDMuMjQ0NzcgNC4yNjQ3NiAzLjI0NjEgMy44MDM4QzMuMjQ2MSAzLjIxMzE5IDMuNDgwNzIgMi42NDY3NyAzLjg5ODM0IDIuMjI5MTVDNC4zMTU5NyAxLjgxMTUyIDQuODgyMzkgMS41NzY5IDUuNDcyOTkgMS41NzY5QzYuMDYzNiAxLjU3NjkgNi42MzAwMiAxLjgxMTUyIDcuMDQ3NjQgMi4yMjkxNUM3LjQ2NTI3IDIuNjQ2NzcgNy42OTk4OCAzLjIxMzE5IDcuNjk5ODggMy44MDM4QzcuNjk5ODggNC43NzYyIDcuMDgzNzggNS42MDAxNSA2LjIxNTI5IDUuOTA0NVY5LjgzMTI1QzYuODY4NTEgOS4zNDg3NSA3LjgxODY1IDguOTk5ODcgOS4xODQ0OCA4Ljk5OTg3QzExLjE2NjQgOC45OTk4NyAxMS44MjcxIDguMDA1MiAxMi4wNDIzIDcuMzQ0NTVDMTEuNjM2MiA3LjE3NTM3IDExLjI4OTIgNi44ODk5MiAxMS4wNDQ5IDYuNTI0MDdDMTAuODAwNSA2LjE1ODIzIDEwLjY2OTggNS43MjgzMiAxMC42NjkxIDUuMjg4MzlDMTAuNjY5MSA0LjY5Nzc4IDEwLjkwMzcgNC4xMzEzNiAxMS4zMjEzIDMuNzEzNzRDMTEuNzM4OSAzLjI5NjEyIDEyLjMwNTQgMy4wNjE1IDEyLjg5NiAzLjA2MTVDMTMuNDg2NiAzLjA2MTUgMTQuMDUzIDMuMjk2MTIgMTQuNDcwNiAzLjcxMzc0QzE0Ljg4ODIgNC4xMzEzNiAxNS4xMjI5IDQuNjk3NzggMTUuMTIyOSA1LjI4ODM5QzE1LjEyMjkgNi4yODMwNyAxNC40Njk2IDcuMTQ0MTMgMTMuNTcxNSA3LjQxMTM2QzEzLjM3ODUgOC40NzI4NCAxMi42NTg0IDEwLjQ4NDUgOS45MjY3OCAxMC40ODQ1Wk01LjQ3Mjk5IDEzLjQ1MzdDNS4yNzYxMiAxMy40NTM3IDUuMDg3MzIgMTMuNTMxOSA0Ljk0ODExIDEzLjY3MTFDNC44MDg5IDEzLjgxMDMgNC43MzA3IDEzLjk5OTEgNC43MzA3IDE0LjE5NkM0LjczMDcgMTQuMzkyOCA0LjgwODkgMTQuNTgxNiA0Ljk0ODExIDE0LjcyMDhDNS4wODczMiAxNC44NiA1LjI3NjEyIDE0LjkzODMgNS40NzI5OSAxNC45MzgzQzUuNjY5ODYgMTQuOTM4MyA1Ljg1ODY3IDE0Ljg2IDUuOTk3ODggMTQuNzIwOEM2LjEzNzA4IDE0LjU4MTYgNi4yMTUyOSAxNC4zOTI4IDYuMjE1MjkgMTQuMTk2QzYuMjE1MjkgMTMuOTk5MSA2LjEzNzA4IDEzLjgxMDMgNS45OTc4OCAxMy42NzExQzUuODU4NjcgMTMuNTMxOSA1LjY2OTg2IDEzLjQ1MzcgNS40NzI5OSAxMy40NTM3Wk01LjQ3Mjk5IDMuMDYxNUM1LjI3NjEyIDMuMDYxNSA1LjA4NzMyIDMuMTM5NyA0Ljk0ODExIDMuMjc4OTFDNC44MDg5IDMuNDE4MTIgNC43MzA3IDMuNjA2OTMgNC43MzA3IDMuODAzOEM0LjczMDcgNC4wMDA2NiA0LjgwODkgNC4xODk0NyA0Ljk0ODExIDQuMzI4NjhDNS4wODczMiA0LjQ2Nzg5IDUuMjc2MTIgNC41NDYwOSA1LjQ3Mjk5IDQuNTQ2MDlDNS42Njk4NiA0LjU0NjA5IDUuODU4NjcgNC40Njc4OSA1Ljk5Nzg4IDQuMzI4NjhDNi4xMzcwOCA0LjE4OTQ3IDYuMjE1MjkgNC4wMDA2NiA2LjIxNTI5IDMuODAzOEM2LjIxNTI5IDMuNjA2OTMgNi4xMzcwOCAzLjQxODEyIDUuOTk3ODggMy4yNzg5MUM1Ljg1ODY3IDMuMTM5NyA1LjY2OTg2IDMuMDYxNSA1LjQ3Mjk5IDMuMDYxNVpNMTIuODk2IDQuNTQ2MDlDMTIuNjk5MSA0LjU0NjA5IDEyLjUxMDMgNC42MjQzIDEyLjM3MTEgNC43NjM1MUMxMi4yMzE5IDQuOTAyNzEgMTIuMTUzNyA1LjA5MTUyIDEyLjE1MzcgNS4yODgzOUMxMi4xNTM3IDUuNDg1MjYgMTIuMjMxOSA1LjY3NDA2IDEyLjM3MTEgNS44MTMyN0MxMi41MTAzIDUuOTUyNDggMTIuNjk5MSA2LjAzMDY5IDEyLjg5NiA2LjAzMDY5QzEzLjA5MjggNi4wMzA2OSAxMy4yODE2IDUuOTUyNDggMTMuNDIwOCA1LjgxMzI3QzEzLjU2MDEgNS42NzQwNiAxMy42MzgzIDUuNDg1MjYgMTMuNjM4MyA1LjI4ODM5QzEzLjYzODMgNS4wOTE1MiAxMy41NjAxIDQuOTAyNzEgMTMuNDIwOCA0Ljc2MzUxQzEzLjI4MTYgNC42MjQzIDEzLjA5MjggNC41NDYwOSAxMi44OTYgNC41NDYwOVpcIlxyXG4gICAgICAgICAgICAgICAgICBmaWxsPVwiIzM0NDA1NFwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmc7IGVsc2UgY29udGVudFBhcnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI2NvbnRlbnRQYXJ0PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhZml4dHVyZVRlbXBsYXRlc0xpc3QubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbXktNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjk0XCIgaGVpZ2h0PVwiOTRcIiB2aWV3Qm94PVwiMCAwIDk0IDk0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjdcIiB5PVwiNy4xMDkzOFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIHJ4PVwiNDBcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI3XCIgeT1cIjcuMTA5MzhcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiByeD1cIjQwXCIgc3Ryb2tlPVwiI0VBRjhGRlwiIHN0cm9rZS13aWR0aD1cIjEzLjMzMzNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNDguNjY2OCA1MC40NDI3QzQzLjA2NjggNTAuNDQyNyA0MS4yMzM0IDUyLjY5MjcgNDAuNjMzNCA1NC4xNzZDNDIuNDE2OCA1NC45NDI3IDQzLjY2NjggNTYuNzA5NCA0My42NjY4IDU4Ljc3NkM0My42NjY4IDYwLjEwMjEgNDMuMTQgNjEuMzczOSA0Mi4yMDIzIDYyLjMxMTZDNDEuMjY0NiA2My4yNDkyIDM5Ljk5MjkgNjMuNzc2IDM4LjY2NjggNjMuNzc2QzM3LjM0MDcgNjMuNzc2IDM2LjA2ODkgNjMuMjQ5MiAzNS4xMzEyIDYyLjMxMTZDMzQuMTkzNiA2MS4zNzM5IDMzLjY2NjggNjAuMTAyMSAzMy42NjY4IDU4Ljc3NkMzMy42NjY4IDU2LjU5MjcgMzUuMDUwMSA1NC43NDI3IDM3LjAwMDEgNTQuMDU5NFY0MC4xNTk0QzM2LjAyMzUgMzkuODE2NyAzNS4xNzc4IDM5LjE3ODQgMzQuNTgwNSAzOC4zMzMyQzMzLjk4MzEgMzcuNDg3OSAzMy42NjM4IDM2LjQ3NzcgMzMuNjY2OCAzNS40NDI3QzMzLjY2NjggMzQuMTE2NiAzNC4xOTM2IDMyLjg0NDggMzUuMTMxMiAzMS45MDcyQzM2LjA2ODkgMzAuOTY5NSAzNy4zNDA3IDMwLjQ0MjcgMzguNjY2OCAzMC40NDI3QzM5Ljk5MjkgMzAuNDQyNyA0MS4yNjQ2IDMwLjk2OTUgNDIuMjAyMyAzMS45MDcyQzQzLjE0IDMyLjg0NDggNDMuNjY2OCAzNC4xMTY2IDQzLjY2NjggMzUuNDQyN0M0My42NjY4IDM3LjYyNiA0Mi4yODM0IDM5LjQ3NiA0MC4zMzM0IDQwLjE1OTRWNDguOTc2QzQxLjgwMDEgNDcuODkyNyA0My45MzM0IDQ3LjEwOTQgNDcuMDAwMSA0Ny4xMDk0QzUxLjQ1MDEgNDcuMTA5NCA1Mi45MzM0IDQ0Ljg3NiA1My40MTY4IDQzLjM5MjdDNTIuNTA1IDQzLjAxMjggNTEuNzI1OCA0Mi4zNzE5IDUxLjE3NzIgNDEuNTUwNUM1MC42Mjg2IDQwLjcyOTEgNTAuMzM1IDM5Ljc2MzggNTAuMzMzNCAzOC43NzZDNTAuMzMzNCAzNy40NDk5IDUwLjg2MDIgMzYuMTc4MiA1MS43OTc5IDM1LjI0MDVDNTIuNzM1NiAzNC4zMDI4IDU0LjAwNzQgMzMuNzc2IDU1LjMzMzQgMzMuNzc2QzU2LjY1OTUgMzMuNzc2IDU3LjkzMTMgMzQuMzAyOCA1OC44NjkgMzUuMjQwNUM1OS44MDY3IDM2LjE3ODIgNjAuMzMzNCAzNy40NDk5IDYwLjMzMzQgMzguNzc2QzYwLjMzMzQgNDEuMDA5NCA1OC44NjY4IDQyLjk0MjcgNTYuODUwMSA0My41NDI3QzU2LjQxNjggNDUuOTI2IDU0LjgwMDEgNTAuNDQyNyA0OC42NjY4IDUwLjQ0MjdaTTM4LjY2NjggNTcuMTA5NEMzOC4yMjQ3IDU3LjEwOTQgMzcuODAwOCA1Ny4yODQ5IDM3LjQ4ODMgNTcuNTk3NUMzNy4xNzU3IDU3LjkxMDEgMzcuMDAwMSA1OC4zMzQgMzcuMDAwMSA1OC43NzZDMzcuMDAwMSA1OS4yMTggMzcuMTc1NyA1OS42NDIgMzcuNDg4MyA1OS45NTQ1QzM3LjgwMDggNjAuMjY3MSAzOC4yMjQ3IDYwLjQ0MjcgMzguNjY2OCA2MC40NDI3QzM5LjEwODggNjAuNDQyNyAzOS41MzI3IDYwLjI2NzEgMzkuODQ1MyA1OS45NTQ1QzQwLjE1NzggNTkuNjQyIDQwLjMzMzQgNTkuMjE4IDQwLjMzMzQgNTguNzc2QzQwLjMzMzQgNTguMzM0IDQwLjE1NzggNTcuOTEwMSAzOS44NDUzIDU3LjU5NzVDMzkuNTMyNyA1Ny4yODQ5IDM5LjEwODggNTcuMTA5NCAzOC42NjY4IDU3LjEwOTRaTTM4LjY2NjggMzMuNzc2QzM4LjIyNDcgMzMuNzc2IDM3LjgwMDggMzMuOTUxNiAzNy40ODgzIDM0LjI2NDJDMzcuMTc1NyAzNC41NzY3IDM3LjAwMDEgMzUuMDAwNyAzNy4wMDAxIDM1LjQ0MjdDMzcuMDAwMSAzNS44ODQ3IDM3LjE3NTcgMzYuMzA4NiAzNy40ODgzIDM2LjYyMTJDMzcuODAwOCAzNi45MzM4IDM4LjIyNDcgMzcuMTA5NCAzOC42NjY4IDM3LjEwOTRDMzkuMTA4OCAzNy4xMDk0IDM5LjUzMjcgMzYuOTMzOCAzOS44NDUzIDM2LjYyMTJDNDAuMTU3OCAzNi4zMDg2IDQwLjMzMzQgMzUuODg0NyA0MC4zMzM0IDM1LjQ0MjdDNDAuMzMzNCAzNS4wMDA3IDQwLjE1NzggMzQuNTc2NyAzOS44NDUzIDM0LjI2NDJDMzkuNTMyNyAzMy45NTE2IDM5LjEwODggMzMuNzc2IDM4LjY2NjggMzMuNzc2Wk01NS4zMzM0IDM3LjEwOTRDNTQuODkxNCAzNy4xMDk0IDU0LjQ2NzUgMzcuMjg0OSA1NC4xNTQ5IDM3LjU5NzVDNTMuODQyNCAzNy45MTAxIDUzLjY2NjggMzguMzM0IDUzLjY2NjggMzguNzc2QzUzLjY2NjggMzkuMjE4IDUzLjg0MjQgMzkuNjQyIDU0LjE1NDkgMzkuOTU0NUM1NC40Njc1IDQwLjI2NzEgNTQuODkxNCA0MC40NDI3IDU1LjMzMzQgNDAuNDQyN0M1NS43NzU1IDQwLjQ0MjcgNTYuMTk5NCA0MC4yNjcxIDU2LjUxMTkgMzkuOTU0NUM1Ni44MjQ1IDM5LjY0MiA1Ny4wMDAxIDM5LjIxOCA1Ny4wMDAxIDM4Ljc3NkM1Ny4wMDAxIDM4LjMzNCA1Ni44MjQ1IDM3LjkxMDEgNTYuNTExOSAzNy41OTc1QzU2LjE5OTQgMzcuMjg0OSA1NS43NzU1IDM3LjEwOTQgNTUuMzMzNCAzNy4xMDk0WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMDlCRjNcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhbWFpbnRleHQgbXQtM1wiPk5vIHZhcmlhbnRzIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVzTGlzdC5sZW5ndGhcIj5cclxuICAgICAgICAgIDwhLS0gRml4dHVyZSBUZW1wbGF0ZSBsaXN0IHZpZXcgLS0+XHJcbiAgICAgICAgICA8c2VjdGlvbiBpZD1cImxpc3Qtdmlld1wiICpuZ0lmPVwidmlld01vZGUgPT09ICdsaXN0J1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInctMTAwIHRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIiAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZXNMaXN0Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInNvcnRUYWJsZSgnZml4dHVyZU5hbWUnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ2ZpeHR1cmVOYW1lJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICdmaXh0dXJlTmFtZScgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic29ydFRhYmxlKCdzdG9yZUNvdW50JylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFzc2lnbmVkIFN0b3Jlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlQ291bnQnID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlQ291bnQnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInNvcnRUYWJsZSgncHJvZHVjdEJyYW5kTmFtZScpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCcmFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAncHJvZHVjdEJyYW5kTmFtZScgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAncHJvZHVjdEJyYW5kTmFtZScgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic29ydFRhYmxlKCdwcm9kdWN0Q2F0ZWdvcnknKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdCBjYXRlZ29yeVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAncHJvZHVjdENhdGVnb3J5JyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICdwcm9kdWN0Q2F0ZWdvcnknID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInNvcnRUYWJsZSgnc3RhdHVzJylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ3N0YXR1cycgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAnc3RhdHVzJyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJzb3J0VGFibGUoJ3VwZGF0ZWRBdCcpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBMYXN0IFVwZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ3N0YXR1cycgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAnc3RhdHVzJyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD5BY3Rpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBjaGlsZFRlbXBsYXRlIG9mIGZpeHR1cmVUZW1wbGF0ZXNMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwidGh1bWJuYWlsXCI+PC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL21hbmFnZS9wbGFub2dyYW0vZml4dHVyZS10ZW1wbGF0ZS9iYXNpYy1kZXRhaWxzJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInsgdGVtcGxhdGVJZDogY2hpbGRUZW1wbGF0ZS5faWQsIGlzRWRpdDogZmFsc2UgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoaWxkVGVtcGxhdGUuZml4dHVyZU5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGUvYmFzaWMtZGV0YWlscyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwieyB0ZW1wbGF0ZUlkOiBjaGlsZFRlbXBsYXRlLl9pZCwgaXNFZGl0OiBmYWxzZSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGlsZFRlbXBsYXRlLnN0b3JlQ291bnQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNoaWxkVGVtcGxhdGUucHJvZHVjdEJyYW5kTmFtZS5sZW5ndGggPD0gMFwiPiAtIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ2JUb29sdGlwXT1cImJyYW5kVG9vbHRpcFwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYiBvZiBjaGlsZFRlbXBsYXRlLnByb2R1Y3RCcmFuZE5hbWU7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgaW5hY3RpdmUgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaSA8PSAyXCI+IHt7IGIgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaSA9PT0gM1wiPiAre3sgY2hpbGRUZW1wbGF0ZS5wcm9kdWN0QnJhbmROYW1lLmxlbmd0aCAtIDMgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnJhbmRUb29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGNoaWxkVGVtcGxhdGUucHJvZHVjdEJyYW5kTmFtZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2hpbGRUZW1wbGF0ZS5wcm9kdWN0Q2F0ZWdvcnkubGVuZ3RoIDw9IDBcIj4gLSA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdiVG9vbHRpcF09XCJjYXRlZ29yeVRvb2x0aXBcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hpbGRUZW1wbGF0ZS5wcm9kdWN0Q2F0ZWdvcnk7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgaW5hY3RpdmUgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaSA8PSAyXCI+IHt7IGl0ZW0gfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaSA9PT0gM1wiPiAre3sgY2hpbGRUZW1wbGF0ZS5wcm9kdWN0Q2F0ZWdvcnkubGVuZ3RoIC0gMyB9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXRlZ29yeVRvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgY2hpbGRUZW1wbGF0ZS5wcm9kdWN0Q2F0ZWdvcnk7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2VcIiBbbmdDbGFzc109XCJjaGlsZFRlbXBsYXRlLnN0YXR1c1wiPnt7IGNoaWxkVGVtcGxhdGUuc3RhdHVzIHwgdGl0bGVjYXNlIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdiVG9vbHRpcF09XCJjaGlsZFRlbXBsYXRlPy51cGRhdGVkQXQgfCBkYXRlIDogJ21lZGl1bSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY2hpbGRUZW1wbGF0ZT8udXBkYXRlZEF0IHwgZGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpbmsgcC0wXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXRocmVlLWRvdHMtdmVydGljYWxcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvbkVkaXQoY2hpbGRUZW1wbGF0ZS5faWQhKVwiPkVkaXQ8L2E+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EdXBsaWNhdGUoY2hpbGRUZW1wbGF0ZS5faWQhKVwiPkR1cGxpY2F0ZTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiIFtyb3V0ZXJMaW5rXT1cIlsnL21hbmFnZS9wbGFub2dyYW0vZmluZEFuZFJlcGxhY2UnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJ7IHNlbGVjdGVkRml4dHVyZTogY2hpbGRUZW1wbGF0ZS5faWQgfVwiPkZpbmQgYW5kIHJlcGxhY2U8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gY3Vyc29yLXBvaW50ZXIgdGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUoY2hpbGRUZW1wbGF0ZS5faWQhLCBjaGlsZFRlbXBsYXRlLnN0b3JlQ291bnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZXNMaXN0Lmxlbmd0aFwiIFtpdGVtc1BlclBhZ2VdPVwibGltaXRcIiBbY3VycmVudFBhZ2VdPVwib2Zmc2V0XCJcclxuICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXNcIiBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2luYXRpb25TaXplc1wiIFtwYWdlU2l6ZV09XCJwYWdpbmF0aW9uU2l6ZSgpXCJcclxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCIgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvbGliLXBhZ2luYXRpb24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9zZWN0aW9uPlxyXG5cclxuICAgICAgICAgIDwhLS0gRml4dHVyZSBUZW1wbGF0ZSB0cmVlIHZpZXcgLS0+XHJcbiAgICAgICAgICA8c2VjdGlvbiBpZD1cInRyZWUtdmlld1wiICpuZ0lmPVwidmlld01vZGUgPT09ICd0cmVlJ1wiPlxyXG4gICAgICAgICAgICA8Zml4dHVyZS10ZW1wbGF0ZS10cmVlIFttYXN0ZXJGaXh0dXJlRGF0YV09XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzXCJcclxuICAgICAgICAgICAgICBbdmlld01vZGVdPVwiJ21hc3RlcidcIj48L2ZpeHR1cmUtdGVtcGxhdGUtdHJlZT5cclxuICAgICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG4gIH1cclxuPC9zZWN0aW9uPlxyXG5cclxuPHNlY3Rpb24gaWQ9XCJ0ZW1wbGF0ZS1zdW1tYXJ5LXNrZWxldG9uXCIgKm5nSWY9XCJpc1BhZ2VMb2FkaW5nXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj4iXX0=
|