imm-element-ui 0.3.7 → 0.3.8

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.
@@ -55,6 +55,10 @@ export class CrumbActionComponent extends AmComponent {
55
55
  auth: 3,
56
56
  },
57
57
  ];
58
+ this.isSave = computed(() => {
59
+ console.log('ac----', this.action.saveSignal());
60
+ return this.action.saveSignal();
61
+ });
58
62
  effect(() => {
59
63
  let last = this.crumbList().pop();
60
64
  if (last?.url) {
@@ -146,12 +150,18 @@ export class CrumbActionComponent extends AmComponent {
146
150
  return;
147
151
  this.actOp && this.actOp.toggle(event);
148
152
  }
153
+ setSaveClass() {
154
+ return this.isSave() ? 'danger' : 'secondary';
155
+ }
156
+ ngOnDestroy() {
157
+ this.action.saveSignal.set(false);
158
+ }
149
159
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CrumbActionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
150
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CrumbActionComponent, isStandalone: true, selector: "app-crumb-action", inputs: { isShowCog: { classPropertyName: "isShowCog", publicName: "isShowCog", isSignal: true, isRequired: false, transformFunction: null }, addVisible: { classPropertyName: "addVisible", publicName: "addVisible", isSignal: true, isRequired: false, transformFunction: null }, newUrl: { classPropertyName: "newUrl", publicName: "newUrl", isSignal: true, isRequired: false, transformFunction: null }, onExport: { classPropertyName: "onExport", publicName: "onExport", isSignal: true, isRequired: false, transformFunction: null }, outlined: { classPropertyName: "outlined", publicName: "outlined", isSignal: true, isRequired: false, transformFunction: null }, isList: { classPropertyName: "isList", publicName: "isList", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null }, actionList: { classPropertyName: "actionList", publicName: "actionList", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, menus: { classPropertyName: "menus", publicName: "menus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { saveEvent: "saveEvent", cancelEvent: "cancelEvent", actionEvent: "actionEvent" }, host: { listeners: { "window:resize": "resize($event)" } }, queries: [{ propertyName: "newBtnTemplateRef", first: true, predicate: ["newBtn"] }], viewQueries: [{ propertyName: "op", first: true, predicate: ["op"], descendants: true }, { propertyName: "listOp", first: true, predicate: ["listOp"], descendants: true }, { propertyName: "actOp", first: true, predicate: ["actOp"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"flex items-center gap-1\">\r\n <div class=\"left-btn flex gap-1\">\r\n <!-- TODO \u6743\u9650\u6570\u636E\u63A5\u5165 -->\r\n @if(!newBtnTemplateRef){\r\n @if(this.authLevel() > 2 && addVisible()){\r\n <p-button (click)=\"goNew()\" [outlined]=\"outlined()\">{{'app.create' | translate}}</p-button>\r\n }\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"newBtnTemplateRef\"></ng-container>\r\n }\r\n </div>\r\n @if(crumbList().length > 0){\r\n <div class=\"flex flex-col leading-none\">\r\n <div class=\"hidden md:flex\">\r\n @if(crumbList().length <= 2){\r\n @for(fchild of crumbList(); track fchild.url){\r\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(fchild)\">\r\n @if(fchild.i18nKey!= ''){\r\n {{ fchild!.i18nKey | translate}}\r\n } @else {\r\n {{fchild.title}}\r\n }\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex\">\r\n <div class=\"crumb-title cursor-pointer select-crumb\">\r\n <div class=\"w-[17px] h-[17px] flex items-center font-bold text-[13px]\" (click)=\"toggle($event)\">\r\n ...\r\n </div>\r\n <p-tieredmenu #op [model]=\"crumbFront\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\">\r\n <span class=\"ml-2 w-full\" (click)=\"back(item)\">\r\n @if(item.i18nKey!= ''){\r\n {{ item!.i18nKey | translate}}\r\n } @else {\r\n {{item.title}}\r\n }\r\n </span>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n </div>\r\n @for(item of crumbEnd;track item.url){\r\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(item)\">\r\n @if(item.i18nKey!= ''){\r\n {{ item!.i18nKey | translate}}\r\n } @else {\r\n {{item.title}}\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n \r\n </div>\r\n <div class=\"min-w-0 text-text-color text-[12px] title-action\">\r\n <span class=\"hidden md:inline-block whitespace-nowrap\">{{isNew? 'New':crumbTitle().title}}</span>\r\n @if(isShowCog()){\r\n @if(isList()){\r\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleListOp($event)\"/>\r\n @if(displayOpItems().length > 0){\r\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\r\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\r\n <span class=\"ml-2\">{{ item.label | translate }}</span>\r\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\r\n {{ item.shortcut }}\r\n </span>\r\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n }\r\n } @else {\r\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleAct($event)\"/>\r\n @if(actionList().length > 0 && showAct){\r\n <p-tieredmenu #actOp [model]=\"actionList()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple \r\n class=\"flex items-center p-tieredmenu-item-link\"\r\n [class]=\"(item.auth || 0) > (authLevel() || 0) || !!item.btnHidden?.(data()) ? 'hidden' : 'block'\" \r\n (click)=\"actEvent(item)\">\r\n <span class=\"ml-2\">{{item.i18nKey ? (item.i18nKey | translate) : item.label}}</span>\r\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\r\n {{ item.shortcut }}\r\n </span>\r\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n }\r\n }\r\n }\r\n @if(this.authLevel() > 2 && !isList()){\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-cloud-upload\" \r\n [loading]=\"isLoading()\"\r\n aria-label=\"\u624B\u52A8\u4FDD\u5B58\" \r\n class=\"p-0\"\r\n (click)=\"handleSave()\">\r\n </p-button>\r\n }\r\n <!-- @if(crumbList().length >= 2){ -->\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-times\" \r\n aria-label=\"\u5173\u95ED\" \r\n class=\"p-0\"\r\n (click)=\"closeNew()\">\r\n </p-button>\r\n <!-- } -->\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- \u521D\u59CB\u8282\u70B9 -->\r\n <div class=\"min-w-0 flex items-center text-[14px] text-text-color\">\r\n <span class=\"hidden md:inline-block max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\">\r\n @if(crumbTitle().i18nKey != ''){\r\n {{crumbTitle().i18nKey | translate}}\r\n } @else {\r\n {{crumbTitle().title}}\r\n }\r\n </span>\r\n @if(isShowCog()){\r\n <p-button \r\n variant=\"text\"\r\n severity=\"secondary\" \r\n icon=\"pi pi-cog\" \r\n aria-label=\"\u64CD\u4F5C\" \r\n (onClick)=\"toggleListOp($event)\"/>\r\n @if(displayOpItems().length > 0){\r\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\r\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\r\n <span class=\"ml-2\">{{ item.label | translate }}</span>\r\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\r\n {{ item.shortcut }}\r\n </span>\r\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n }\r\n \r\n }\r\n @if(!isList()){\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-cloud-upload\" \r\n aria-label=\"\u624B\u52A8\u4FDD\u5B58\" \r\n class=\"p-0\"\r\n (click)=\"handleSave()\">\r\n </p-button>\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-times\" \r\n aria-label=\"\u5173\u95ED\" \r\n class=\"p-0\"\r\n (click)=\"closeNew()\">\r\n </p-button>\r\n }\r\n </div>\r\n }\r\n \r\n</div>", styles: [":host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:1}:host ::ng-deep .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-label{padding:0}:host ::ng-deep .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-select .p-select-dropdown{display:none}:host ::ng-deep .p-select .p-select-clear-icon{display:none}:host ::ng-deep .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .p-multiselect-label{padding:0}:host ::ng-deep .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-textarea{border-radius:0;box-shadow:none;padding:0;background:#fff;resize:none}:host ::ng-deep .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-treeselect-label{padding:0}:host ::ng-deep .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-menubar{border-width:0;padding:0}:host ::ng-deep .p-menubar-submenu{z-index:3}:host ::ng-deep .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .p-fileupload-header{padding:0}:host ::ng-deep .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .cm-activeLineGutter{background-color:#fff}.crumb-title{color:var(--p-primary-color)}.crumb-title+.crumb-title{padding-left:.5rem}.crumb-title+.crumb-title:before{padding-right:.5rem;content:var(--breadcrumb-divider, \"/\")}:host::ng-deep .p-button-text.p-button-secondary{color:var(--p-surface-700)}:host::ng-deep .title-action .p-button{padding:0}:host::ng-deep .new-action .p-button{padding:0}:host::ng-deep .new-action .p-button button{padding-top:2px;height:100%;align-items:center}:host::ng-deep .select-crumb .p-button{padding:0;background-color:#fff;line-height:1}:host::ng-deep .select-crumb .p-button button{padding:0;width:17px;height:17px}:host::ng-deep .p-popover-content{padding:.5rem}:host::ng-deep .left-btn .p-button{height:33px}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: TieredMenu, selector: "p-tieredMenu, p-tieredmenu, p-tiered-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "breakpoint", "autoZIndex", "baseZIndex", "autoDisplay", "showTransitionOptions", "hideTransitionOptions", "id", "ariaLabel", "ariaLabelledBy", "disabled", "tabindex"], outputs: ["onShow", "onHide"] }] }); }
160
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CrumbActionComponent, isStandalone: true, selector: "app-crumb-action", inputs: { isShowCog: { classPropertyName: "isShowCog", publicName: "isShowCog", isSignal: true, isRequired: false, transformFunction: null }, addVisible: { classPropertyName: "addVisible", publicName: "addVisible", isSignal: true, isRequired: false, transformFunction: null }, newUrl: { classPropertyName: "newUrl", publicName: "newUrl", isSignal: true, isRequired: false, transformFunction: null }, onExport: { classPropertyName: "onExport", publicName: "onExport", isSignal: true, isRequired: false, transformFunction: null }, outlined: { classPropertyName: "outlined", publicName: "outlined", isSignal: true, isRequired: false, transformFunction: null }, isList: { classPropertyName: "isList", publicName: "isList", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null }, actionList: { classPropertyName: "actionList", publicName: "actionList", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, menus: { classPropertyName: "menus", publicName: "menus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { saveEvent: "saveEvent", cancelEvent: "cancelEvent", actionEvent: "actionEvent" }, host: { listeners: { "window:resize": "resize($event)" } }, queries: [{ propertyName: "newBtnTemplateRef", first: true, predicate: ["newBtn"] }], viewQueries: [{ propertyName: "op", first: true, predicate: ["op"], descendants: true }, { propertyName: "listOp", first: true, predicate: ["listOp"], descendants: true }, { propertyName: "actOp", first: true, predicate: ["actOp"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"flex items-center gap-1\">\r\n <div class=\"left-btn flex gap-1\">\r\n <!-- TODO \u6743\u9650\u6570\u636E\u63A5\u5165 -->\r\n @if(!newBtnTemplateRef){\r\n @if(this.authLevel() > 2 && addVisible()){\r\n <p-button (click)=\"goNew()\" [outlined]=\"outlined()\">{{'app.create' | translate}}</p-button>\r\n }\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"newBtnTemplateRef\"></ng-container>\r\n }\r\n </div>\r\n @if(crumbList().length > 0){\r\n <div class=\"flex flex-col leading-none\">\r\n <div class=\"hidden md:flex\">\r\n @if(crumbList().length <= 2){\r\n @for(fchild of crumbList(); track fchild.url){\r\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(fchild)\">\r\n @if(fchild.i18nKey!= ''){\r\n {{ fchild!.i18nKey | translate}}\r\n } @else {\r\n {{fchild.title}}\r\n }\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex\">\r\n <div class=\"crumb-title cursor-pointer select-crumb\">\r\n <div class=\"w-[17px] h-[17px] flex items-center font-bold text-[13px]\" (click)=\"toggle($event)\">\r\n ...\r\n </div>\r\n <p-tieredmenu #op [model]=\"crumbFront\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\">\r\n <span class=\"ml-2 w-full\" (click)=\"back(item)\">\r\n @if(item.i18nKey!= ''){\r\n {{ item!.i18nKey | translate}}\r\n } @else {\r\n {{item.title}}\r\n }\r\n </span>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n </div>\r\n @for(item of crumbEnd;track item.url){\r\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(item)\">\r\n @if(item.i18nKey!= ''){\r\n {{ item!.i18nKey | translate}}\r\n } @else {\r\n {{item.title}}\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n \r\n </div>\r\n <div class=\"min-w-0 text-text-color text-[12px] title-action\">\r\n <span class=\"hidden md:inline-block whitespace-nowrap\">{{isNew? 'New':crumbTitle().title}}</span>\r\n @if(isShowCog()){\r\n @if(isList()){\r\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleListOp($event)\"/>\r\n @if(displayOpItems().length > 0){\r\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\r\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\r\n <span class=\"ml-2\">{{ item.label | translate }}</span>\r\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\r\n {{ item.shortcut }}\r\n </span>\r\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n }\r\n } @else {\r\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleAct($event)\"/>\r\n @if(actionList().length > 0 && showAct){\r\n <p-tieredmenu #actOp [model]=\"actionList()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple \r\n class=\"flex items-center p-tieredmenu-item-link\"\r\n [class]=\"(item.auth || 0) > (authLevel() || 0) || !!item.btnHidden?.(data()) ? 'hidden' : 'block'\" \r\n (click)=\"actEvent(item)\">\r\n <span class=\"ml-2\">{{item.i18nKey ? (item.i18nKey | translate) : item.label}}</span>\r\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\r\n {{ item.shortcut }}\r\n </span>\r\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n }\r\n }\r\n }\r\n @if(this.authLevel() > 2 && !isList()){\r\n <p-button \r\n variant=\"text\" \r\n [severity]=\"setSaveClass()\" \r\n icon=\"pi pi-cloud-upload\" \r\n [loading]=\"isLoading()\"\r\n aria-label=\"\u624B\u52A8\u4FDD\u5B58\" \r\n class=\"p-0\"\r\n (click)=\"handleSave()\">\r\n </p-button>\r\n }\r\n <!-- @if(crumbList().length >= 2){ -->\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-times\" \r\n aria-label=\"\u5173\u95ED\" \r\n class=\"p-0\"\r\n (click)=\"closeNew()\">\r\n </p-button>\r\n <!-- } -->\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- \u521D\u59CB\u8282\u70B9 -->\r\n <div class=\"min-w-0 flex items-center text-[14px] text-text-color\">\r\n <span class=\"hidden md:inline-block max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\">\r\n @if(crumbTitle().i18nKey != ''){\r\n {{crumbTitle().i18nKey | translate}}\r\n } @else {\r\n {{crumbTitle().title}}\r\n }\r\n </span>\r\n @if(isShowCog()){\r\n <p-button \r\n variant=\"text\"\r\n severity=\"secondary\" \r\n icon=\"pi pi-cog\" \r\n aria-label=\"\u64CD\u4F5C\" \r\n (onClick)=\"toggleListOp($event)\"/>\r\n @if(displayOpItems().length > 0){\r\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\r\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\r\n <span class=\"ml-2\">{{ item.label | translate }}</span>\r\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\r\n {{ item.shortcut }}\r\n </span>\r\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n }\r\n \r\n }\r\n @if(!isList()){\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-cloud-upload\" \r\n aria-label=\"\u624B\u52A8\u4FDD\u5B58\" \r\n class=\"p-0\"\r\n (click)=\"handleSave()\">\r\n </p-button>\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-times\" \r\n aria-label=\"\u5173\u95ED\" \r\n class=\"p-0\"\r\n (click)=\"closeNew()\">\r\n </p-button>\r\n }\r\n </div>\r\n }\r\n \r\n</div>", styles: [":host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:1}:host ::ng-deep .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-label{padding:0}:host ::ng-deep .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-select .p-select-dropdown{display:none}:host ::ng-deep .p-select .p-select-clear-icon{display:none}:host ::ng-deep .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .p-multiselect-label{padding:0}:host ::ng-deep .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-textarea{border-radius:0;box-shadow:none;padding:0;background:#fff;resize:none}:host ::ng-deep .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-treeselect-label{padding:0}:host ::ng-deep .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-menubar{border-width:0;padding:0}:host ::ng-deep .p-menubar-submenu{z-index:3}:host ::ng-deep .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .p-fileupload-header{padding:0}:host ::ng-deep .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .cm-activeLineGutter{background-color:#fff}.crumb-title{color:var(--p-primary-color)}.crumb-title+.crumb-title{padding-left:.5rem}.crumb-title+.crumb-title:before{padding-right:.5rem;content:var(--breadcrumb-divider, \"/\")}:host::ng-deep .p-button-text.p-button-secondary{color:var(--p-surface-700)}:host::ng-deep .title-action .p-button{padding:0}:host::ng-deep .new-action .p-button{padding:0}:host::ng-deep .new-action .p-button button{padding-top:2px;height:100%;align-items:center}:host::ng-deep .select-crumb .p-button{padding:0;background-color:#fff;line-height:1}:host::ng-deep .select-crumb .p-button button{padding:0;width:17px;height:17px}:host::ng-deep .p-popover-content{padding:.5rem}:host::ng-deep .left-btn .p-button{height:33px}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: TieredMenu, selector: "p-tieredMenu, p-tieredmenu, p-tiered-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "breakpoint", "autoZIndex", "baseZIndex", "autoDisplay", "showTransitionOptions", "hideTransitionOptions", "id", "ariaLabel", "ariaLabelledBy", "disabled", "tabindex"], outputs: ["onShow", "onHide"] }] }); }
151
161
  }
152
162
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CrumbActionComponent, decorators: [{
153
163
  type: Component,
154
- args: [{ selector: 'app-crumb-action', standalone: true, imports: [ButtonModule, TranslatePipe, CommonModule, TieredMenu], template: "<div class=\"flex items-center gap-1\">\r\n <div class=\"left-btn flex gap-1\">\r\n <!-- TODO \u6743\u9650\u6570\u636E\u63A5\u5165 -->\r\n @if(!newBtnTemplateRef){\r\n @if(this.authLevel() > 2 && addVisible()){\r\n <p-button (click)=\"goNew()\" [outlined]=\"outlined()\">{{'app.create' | translate}}</p-button>\r\n }\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"newBtnTemplateRef\"></ng-container>\r\n }\r\n </div>\r\n @if(crumbList().length > 0){\r\n <div class=\"flex flex-col leading-none\">\r\n <div class=\"hidden md:flex\">\r\n @if(crumbList().length <= 2){\r\n @for(fchild of crumbList(); track fchild.url){\r\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(fchild)\">\r\n @if(fchild.i18nKey!= ''){\r\n {{ fchild!.i18nKey | translate}}\r\n } @else {\r\n {{fchild.title}}\r\n }\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex\">\r\n <div class=\"crumb-title cursor-pointer select-crumb\">\r\n <div class=\"w-[17px] h-[17px] flex items-center font-bold text-[13px]\" (click)=\"toggle($event)\">\r\n ...\r\n </div>\r\n <p-tieredmenu #op [model]=\"crumbFront\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\">\r\n <span class=\"ml-2 w-full\" (click)=\"back(item)\">\r\n @if(item.i18nKey!= ''){\r\n {{ item!.i18nKey | translate}}\r\n } @else {\r\n {{item.title}}\r\n }\r\n </span>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n </div>\r\n @for(item of crumbEnd;track item.url){\r\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(item)\">\r\n @if(item.i18nKey!= ''){\r\n {{ item!.i18nKey | translate}}\r\n } @else {\r\n {{item.title}}\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n \r\n </div>\r\n <div class=\"min-w-0 text-text-color text-[12px] title-action\">\r\n <span class=\"hidden md:inline-block whitespace-nowrap\">{{isNew? 'New':crumbTitle().title}}</span>\r\n @if(isShowCog()){\r\n @if(isList()){\r\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleListOp($event)\"/>\r\n @if(displayOpItems().length > 0){\r\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\r\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\r\n <span class=\"ml-2\">{{ item.label | translate }}</span>\r\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\r\n {{ item.shortcut }}\r\n </span>\r\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n }\r\n } @else {\r\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleAct($event)\"/>\r\n @if(actionList().length > 0 && showAct){\r\n <p-tieredmenu #actOp [model]=\"actionList()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple \r\n class=\"flex items-center p-tieredmenu-item-link\"\r\n [class]=\"(item.auth || 0) > (authLevel() || 0) || !!item.btnHidden?.(data()) ? 'hidden' : 'block'\" \r\n (click)=\"actEvent(item)\">\r\n <span class=\"ml-2\">{{item.i18nKey ? (item.i18nKey | translate) : item.label}}</span>\r\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\r\n {{ item.shortcut }}\r\n </span>\r\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n }\r\n }\r\n }\r\n @if(this.authLevel() > 2 && !isList()){\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-cloud-upload\" \r\n [loading]=\"isLoading()\"\r\n aria-label=\"\u624B\u52A8\u4FDD\u5B58\" \r\n class=\"p-0\"\r\n (click)=\"handleSave()\">\r\n </p-button>\r\n }\r\n <!-- @if(crumbList().length >= 2){ -->\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-times\" \r\n aria-label=\"\u5173\u95ED\" \r\n class=\"p-0\"\r\n (click)=\"closeNew()\">\r\n </p-button>\r\n <!-- } -->\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- \u521D\u59CB\u8282\u70B9 -->\r\n <div class=\"min-w-0 flex items-center text-[14px] text-text-color\">\r\n <span class=\"hidden md:inline-block max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\">\r\n @if(crumbTitle().i18nKey != ''){\r\n {{crumbTitle().i18nKey | translate}}\r\n } @else {\r\n {{crumbTitle().title}}\r\n }\r\n </span>\r\n @if(isShowCog()){\r\n <p-button \r\n variant=\"text\"\r\n severity=\"secondary\" \r\n icon=\"pi pi-cog\" \r\n aria-label=\"\u64CD\u4F5C\" \r\n (onClick)=\"toggleListOp($event)\"/>\r\n @if(displayOpItems().length > 0){\r\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\r\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\r\n <span class=\"ml-2\">{{ item.label | translate }}</span>\r\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\r\n {{ item.shortcut }}\r\n </span>\r\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n }\r\n \r\n }\r\n @if(!isList()){\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-cloud-upload\" \r\n aria-label=\"\u624B\u52A8\u4FDD\u5B58\" \r\n class=\"p-0\"\r\n (click)=\"handleSave()\">\r\n </p-button>\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-times\" \r\n aria-label=\"\u5173\u95ED\" \r\n class=\"p-0\"\r\n (click)=\"closeNew()\">\r\n </p-button>\r\n }\r\n </div>\r\n }\r\n \r\n</div>", styles: [":host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:1}:host ::ng-deep .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-label{padding:0}:host ::ng-deep .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-select .p-select-dropdown{display:none}:host ::ng-deep .p-select .p-select-clear-icon{display:none}:host ::ng-deep .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .p-multiselect-label{padding:0}:host ::ng-deep .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-textarea{border-radius:0;box-shadow:none;padding:0;background:#fff;resize:none}:host ::ng-deep .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-treeselect-label{padding:0}:host ::ng-deep .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-menubar{border-width:0;padding:0}:host ::ng-deep .p-menubar-submenu{z-index:3}:host ::ng-deep .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .p-fileupload-header{padding:0}:host ::ng-deep .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .cm-activeLineGutter{background-color:#fff}.crumb-title{color:var(--p-primary-color)}.crumb-title+.crumb-title{padding-left:.5rem}.crumb-title+.crumb-title:before{padding-right:.5rem;content:var(--breadcrumb-divider, \"/\")}:host::ng-deep .p-button-text.p-button-secondary{color:var(--p-surface-700)}:host::ng-deep .title-action .p-button{padding:0}:host::ng-deep .new-action .p-button{padding:0}:host::ng-deep .new-action .p-button button{padding-top:2px;height:100%;align-items:center}:host::ng-deep .select-crumb .p-button{padding:0;background-color:#fff;line-height:1}:host::ng-deep .select-crumb .p-button button{padding:0;width:17px;height:17px}:host::ng-deep .p-popover-content{padding:.5rem}:host::ng-deep .left-btn .p-button{height:33px}\n"] }]
164
+ args: [{ selector: 'app-crumb-action', standalone: true, imports: [ButtonModule, TranslatePipe, CommonModule, TieredMenu], template: "<div class=\"flex items-center gap-1\">\r\n <div class=\"left-btn flex gap-1\">\r\n <!-- TODO \u6743\u9650\u6570\u636E\u63A5\u5165 -->\r\n @if(!newBtnTemplateRef){\r\n @if(this.authLevel() > 2 && addVisible()){\r\n <p-button (click)=\"goNew()\" [outlined]=\"outlined()\">{{'app.create' | translate}}</p-button>\r\n }\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"newBtnTemplateRef\"></ng-container>\r\n }\r\n </div>\r\n @if(crumbList().length > 0){\r\n <div class=\"flex flex-col leading-none\">\r\n <div class=\"hidden md:flex\">\r\n @if(crumbList().length <= 2){\r\n @for(fchild of crumbList(); track fchild.url){\r\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(fchild)\">\r\n @if(fchild.i18nKey!= ''){\r\n {{ fchild!.i18nKey | translate}}\r\n } @else {\r\n {{fchild.title}}\r\n }\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex\">\r\n <div class=\"crumb-title cursor-pointer select-crumb\">\r\n <div class=\"w-[17px] h-[17px] flex items-center font-bold text-[13px]\" (click)=\"toggle($event)\">\r\n ...\r\n </div>\r\n <p-tieredmenu #op [model]=\"crumbFront\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\">\r\n <span class=\"ml-2 w-full\" (click)=\"back(item)\">\r\n @if(item.i18nKey!= ''){\r\n {{ item!.i18nKey | translate}}\r\n } @else {\r\n {{item.title}}\r\n }\r\n </span>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n </div>\r\n @for(item of crumbEnd;track item.url){\r\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(item)\">\r\n @if(item.i18nKey!= ''){\r\n {{ item!.i18nKey | translate}}\r\n } @else {\r\n {{item.title}}\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n \r\n </div>\r\n <div class=\"min-w-0 text-text-color text-[12px] title-action\">\r\n <span class=\"hidden md:inline-block whitespace-nowrap\">{{isNew? 'New':crumbTitle().title}}</span>\r\n @if(isShowCog()){\r\n @if(isList()){\r\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleListOp($event)\"/>\r\n @if(displayOpItems().length > 0){\r\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\r\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\r\n <span class=\"ml-2\">{{ item.label | translate }}</span>\r\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\r\n {{ item.shortcut }}\r\n </span>\r\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n }\r\n } @else {\r\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleAct($event)\"/>\r\n @if(actionList().length > 0 && showAct){\r\n <p-tieredmenu #actOp [model]=\"actionList()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple \r\n class=\"flex items-center p-tieredmenu-item-link\"\r\n [class]=\"(item.auth || 0) > (authLevel() || 0) || !!item.btnHidden?.(data()) ? 'hidden' : 'block'\" \r\n (click)=\"actEvent(item)\">\r\n <span class=\"ml-2\">{{item.i18nKey ? (item.i18nKey | translate) : item.label}}</span>\r\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\r\n {{ item.shortcut }}\r\n </span>\r\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n }\r\n }\r\n }\r\n @if(this.authLevel() > 2 && !isList()){\r\n <p-button \r\n variant=\"text\" \r\n [severity]=\"setSaveClass()\" \r\n icon=\"pi pi-cloud-upload\" \r\n [loading]=\"isLoading()\"\r\n aria-label=\"\u624B\u52A8\u4FDD\u5B58\" \r\n class=\"p-0\"\r\n (click)=\"handleSave()\">\r\n </p-button>\r\n }\r\n <!-- @if(crumbList().length >= 2){ -->\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-times\" \r\n aria-label=\"\u5173\u95ED\" \r\n class=\"p-0\"\r\n (click)=\"closeNew()\">\r\n </p-button>\r\n <!-- } -->\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- \u521D\u59CB\u8282\u70B9 -->\r\n <div class=\"min-w-0 flex items-center text-[14px] text-text-color\">\r\n <span class=\"hidden md:inline-block max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\">\r\n @if(crumbTitle().i18nKey != ''){\r\n {{crumbTitle().i18nKey | translate}}\r\n } @else {\r\n {{crumbTitle().title}}\r\n }\r\n </span>\r\n @if(isShowCog()){\r\n <p-button \r\n variant=\"text\"\r\n severity=\"secondary\" \r\n icon=\"pi pi-cog\" \r\n aria-label=\"\u64CD\u4F5C\" \r\n (onClick)=\"toggleListOp($event)\"/>\r\n @if(displayOpItems().length > 0){\r\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\r\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\r\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\r\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\r\n <span class=\"ml-2\">{{ item.label | translate }}</span>\r\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\r\n {{ item.shortcut }}\r\n </span>\r\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\r\n </a>\r\n </ng-template>\r\n </p-tieredmenu>\r\n }\r\n \r\n }\r\n @if(!isList()){\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-cloud-upload\" \r\n aria-label=\"\u624B\u52A8\u4FDD\u5B58\" \r\n class=\"p-0\"\r\n (click)=\"handleSave()\">\r\n </p-button>\r\n <p-button \r\n variant=\"text\" \r\n severity=\"secondary\" \r\n icon=\"pi pi-times\" \r\n aria-label=\"\u5173\u95ED\" \r\n class=\"p-0\"\r\n (click)=\"closeNew()\">\r\n </p-button>\r\n }\r\n </div>\r\n }\r\n \r\n</div>", styles: [":host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:1}:host ::ng-deep .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-label{padding:0}:host ::ng-deep .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-select .p-select-dropdown{display:none}:host ::ng-deep .p-select .p-select-clear-icon{display:none}:host ::ng-deep .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .p-multiselect-label{padding:0}:host ::ng-deep .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-textarea{border-radius:0;box-shadow:none;padding:0;background:#fff;resize:none}:host ::ng-deep .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-treeselect-label{padding:0}:host ::ng-deep .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-menubar{border-width:0;padding:0}:host ::ng-deep .p-menubar-submenu{z-index:3}:host ::ng-deep .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .p-fileupload-header{padding:0}:host ::ng-deep .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .cm-activeLineGutter{background-color:#fff}.crumb-title{color:var(--p-primary-color)}.crumb-title+.crumb-title{padding-left:.5rem}.crumb-title+.crumb-title:before{padding-right:.5rem;content:var(--breadcrumb-divider, \"/\")}:host::ng-deep .p-button-text.p-button-secondary{color:var(--p-surface-700)}:host::ng-deep .title-action .p-button{padding:0}:host::ng-deep .new-action .p-button{padding:0}:host::ng-deep .new-action .p-button button{padding-top:2px;height:100%;align-items:center}:host::ng-deep .select-crumb .p-button{padding:0;background-color:#fff;line-height:1}:host::ng-deep .select-crumb .p-button button{padding:0;width:17px;height:17px}:host::ng-deep .p-popover-content{padding:.5rem}:host::ng-deep .left-btn .p-button{height:33px}\n"] }]
155
165
  }], ctorParameters: () => [], propDecorators: { op: [{
156
166
  type: ViewChild,
157
167
  args: ['op']
@@ -168,4 +178,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
168
178
  type: HostListener,
169
179
  args: ['window:resize', ['$event']]
170
180
  }] } });
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1bWItYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvY3J1bWItYWN0aW9uL2NydW1iLWFjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2NydW1iLWFjdGlvbi9jcnVtYi1hY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFDTixTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUVOLE1BQU0sRUFFTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFlLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQVFoRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsV0FBVztJQWlEcEQ7UUFDQyxLQUFLLEVBQUUsQ0FBQztRQWpEVCx1QkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoRCxXQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9CLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENB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QUU7c0JBQWxCLFNBQVM7dUJBQUMsSUFBSTtnQkFDTSxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQ0MsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQW1COEIsaUJBQWlCO3NCQUFoRSxZQUFZO3VCQUFDLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7Z0JBZ0Q5QyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW1Db21wb25lbnQgfSBmcm9tICcuLy4uL2FtL2FtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdGNvbXB1dGVkLFxyXG5cdENvbnRlbnRDaGlsZCxcclxuXHRlZmZlY3QsXHJcblx0SG9zdExpc3RlbmVyLFxyXG5cdGluamVjdCxcclxuXHRpbnB1dCxcclxuXHRPbkluaXQsXHJcblx0b3V0cHV0LFxyXG5cdE91dHB1dCxcclxuXHRzaWduYWwsXHJcblx0VGVtcGxhdGVSZWYsXHJcblx0Vmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVc2VySGlzdG9yeVNlcnZpY2UsIEhpc3RvcnlJdGVtLCBBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBQb3BvdmVyIH0gZnJvbSAncHJpbWVuZy9wb3BvdmVyJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVGllcmVkTWVudSB9IGZyb20gJ3ByaW1lbmcvdGllcmVkbWVudSc7XHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLWNydW1iLWFjdGlvbicsXHJcblx0c3RhbmRhbG9uZTogdHJ1ZSxcclxuXHRpbXBvcnRzOiBbQnV0dG9uTW9kdWxlLCBUcmFuc2xhdGVQaXBlLCBDb21tb25Nb2R1bGUsIFRpZXJlZE1lbnVdLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9jcnVtYi1hY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsOiAnLi9jcnVtYi1hY3Rpb24uY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3J1bWJBY3Rpb25Db21wb25lbnQgZXh0ZW5kcyBBbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0dXNlckhpc3RvcnlTZXJ2aWNlID0gaW5qZWN0KFVzZXJIaXN0b3J5U2VydmljZSk7XHJcblx0YWN0aW9uID0gaW5qZWN0KEFjdGlvblNlcnZpY2UpO1xyXG5cdGNydW1iTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcclxuXHRcdGxldCBjcnVtYiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy51c2VySGlzdG9yeVNlcnZpY2UuaGlzdG9yeUxpc3QoKSkpO1xyXG5cdFx0cmV0dXJuIGNydW1iLm1hcCgodjogYW55KSA9PiB2KTtcclxuXHR9KTtcclxuXHRjcnVtYlRpdGxlID0gc2lnbmFsPGFueT4oe30pO1xyXG5cdC8vIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG5cdGlzTmV3ID0gZmFsc2U7XHJcblx0aXNTaG93Q29nID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cdGNydW1iRnJvbnQ6IEhpc3RvcnlJdGVtW10gPSBbXTtcclxuXHRjcnVtYkVuZDogSGlzdG9yeUl0ZW1bXSA9IFtdO1xyXG5cdEBWaWV3Q2hpbGQoJ29wJykgb3AhOiBQb3BvdmVyO1xyXG5cdEBWaWV3Q2hpbGQoJ2xpc3RPcCcpIGxpc3RPcCE6IFBvcG92ZXI7XHJcblx0QFZpZXdDaGlsZCgnYWN0T3AnKSBhY3RPcCE6IFBvcG92ZXI7XHJcblx0c2F2ZUV2ZW50ID0gb3V0cHV0KCk7XHJcblx0Ly8g5paw5bu65oyJ6ZKuXHJcblx0YWRkVmlzaWJsZSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KCk7XHJcblx0bmV3VXJsID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblx0b25FeHBvcnQgPSBpbnB1dDxGdW5jdGlvbj4oKTtcclxuXHQvLyDmlrDlu7rmjInpkq5vdXRsaW5lXHJcblx0b3V0bGluZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0Ly8g5piv5ZCm5piv5YiX6KGo6aG16Z2iXHJcblx0aXNMaXN0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cdC8vIOadg+mZkOetiee6p1xyXG5cdGF1dGhMZXZlbCA9IGlucHV0PG51bWJlcj4oLTEpO1xyXG5cdGNhbmNlbEV2ZW50ID0gb3V0cHV0KCk7XHJcblx0YWN0aW9uTGlzdCA9IGlucHV0PGFueT4oW10pO1xyXG5cdGFjdGlvbkV2ZW50ID0gb3V0cHV0KCk7XHJcblx0ZGF0YSA9IGlucHV0PGFueT4oKTtcclxuXHRzaG93QWN0ID0gZmFsc2U7XHJcblx0bWVudXMgPSBpbnB1dDxhbnlbXT4oW10pO1xyXG5cdGRpc3BsYXlPcEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4gWy4uLnRoaXMubWVudXMoKSwgLi4udGhpcy5saXN0T3BJdGVtc10uZmlsdGVyKCh2KSA9PiB0aGlzLmF1dGhMZXZlbCgpID49IHYuYXV0aCkpO1xyXG5cdEBDb250ZW50Q2hpbGQoJ25ld0J0bicsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0pIG5ld0J0blRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xyXG5cdGxpc3RPcEl0ZW1zID0gW1xyXG5cdFx0e1xyXG5cdFx0XHRsYWJlbDogJ2FwcC50YWJsZUFjSW1wb3J0JyxcclxuXHRcdFx0dHlwZTogJ2ltcG9ydCcsXHJcblx0XHRcdGljb246ICdwaSBwaS11cGxvYWQnLFxyXG5cdFx0XHRhdXRoOiAyLFxyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0bGFiZWw6ICdhcHAudGFibGVBY0V4cG9ydCcsXHJcblx0XHRcdHR5cGU6ICdleHBvcnQnLFxyXG5cdFx0XHRpY29uOiAncGkgcGktZG93bmxvYWQnLFxyXG5cdFx0XHRhdXRoOiAzLFxyXG5cdFx0fSxcclxuXHRdO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdGVmZmVjdChcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdGxldCBsYXN0ID0gdGhpcy5jcnVtYkxpc3QoKS5wb3AoKTtcclxuXHRcdFx0XHRpZiAobGFzdD8udXJsKSB7XHJcblx0XHRcdFx0XHR0aGlzLmlzTmV3ID0gbGFzdC51cmw/LmluZGV4T2YoJ25ldycpID4gLTEgPyB0cnVlIDogZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChsYXN0Py50aXRsZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5jcnVtYlRpdGxlLnNldChsYXN0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbnN0IGxlbmd0aCA9IHRoaXMuY3J1bWJMaXN0KCkubGVuZ3RoO1xyXG5cdFx0XHRcdGlmIChsZW5ndGggPiAyKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNydW1iRnJvbnQgPSB0aGlzLmNydW1iTGlzdCgpXHJcblx0XHRcdFx0XHRcdC5tYXAoKHY6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHYubGFiZWwgPSB2LnRpdGxlO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB2O1xyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHQuZmlsdGVyKCh2OiBIaXN0b3J5SXRlbSwgaW5kZXg6IG51bWJlcikgPT4gaW5kZXggPD0gbGVuZ3RoIC0gMSAtIDIpO1xyXG5cdFx0XHRcdFx0dGhpcy5jcnVtYkVuZCA9IFt0aGlzLmNydW1iTGlzdCgpW2xlbmd0aCAtIDJdLCB0aGlzLmNydW1iTGlzdCgpW2xlbmd0aCAtIDFdXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcclxuXHRcdCk7XHJcblx0XHQvLyBlZmZlY3QoKCkgPT4ge1xyXG5cdFx0Ly8gXHR0aGlzLmxpc3RPcEl0ZW1zID0gdGhpcy5saXN0T3BJdGVtcy5maWx0ZXIoKHYpID0+IHRoaXMuYXV0aExldmVsKCkgPj0gdi5sZXZlbCk7XHJcblx0XHQvLyB9KTtcclxuXHRcdGVmZmVjdCgoKSA9PiB7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdhZGRWaXNpYmxlJywgdGhpcy5hZGRWaXNpYmxlKCkpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG5cdHJlc2l6ZShldmVudDogYW55KSB7XHJcblx0XHRsZXQgd2luZG93V2lkdGggPSAoZXZlbnQudGFyZ2V0IGFzIFdpbmRvdykuaW5uZXJXaWR0aDtcclxuXHRcdGlmICh3aW5kb3dXaWR0aCA8IDc2OCkge1xyXG5cdFx0XHR0aGlzLnNob3dBY3QgPSB0cnVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zaG93QWN0ID0gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zaG93QWN0ID0gd2luZG93LmlubmVyV2lkdGggPCA3NjggPyB0cnVlIDogZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnb05ldygpIHtcclxuXHRcdGlmICh0aGlzLm5ld1VybCgpID09ICcnKSByZXR1cm47XHJcblx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5uZXdVcmwoKV0pLnRoZW4oKHJlcykgPT4ge1xyXG5cdFx0XHR0aGlzLnVzZXJIaXN0b3J5U2VydmljZS5zZXRMYXN0VGl0bGUoJ05ldycpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRjbG9zZU5ldygpIHtcclxuXHRcdGxldCBsZW5ndGggPSB0aGlzLmNydW1iTGlzdCgpLmxlbmd0aDtcclxuXHRcdGxldCBsYXN0ID0gdGhpcy5jcnVtYkxpc3QoKVtsZW5ndGggLSAxXTtcclxuXHRcdGlmIChsYXN0KSB7XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtsYXN0LnVybF0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5jYW5jZWxFdmVudC5lbWl0KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRoYW5kbGVTYXZlKCkge1xyXG5cdFx0dGhpcy5zYXZlRXZlbnQuZW1pdCgpO1xyXG5cdH1cclxuXHJcblx0YmFjayhpdGVtOiBhbnkpIHtcclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtpdGVtLnVybF0pO1xyXG5cdH1cclxuXHJcblx0dG9nZ2xlKGV2ZW50OiBhbnkpIHtcclxuXHRcdHRoaXMub3AudG9nZ2xlKGV2ZW50KTtcclxuXHR9XHJcblxyXG5cdHRvZ2dsZUxpc3RPcChldmVudDogYW55KSB7XHJcblx0XHRpZiAoIXRoaXMuaXNMaXN0KCkpIHJldHVybjtcclxuXHRcdHRoaXMubGlzdE9wICYmIHRoaXMubGlzdE9wLnRvZ2dsZShldmVudCk7XHJcblx0fVxyXG5cclxuXHRsaXN0QWN0KGl0ZW06IGFueSkge1xyXG5cdFx0aWYgKGl0ZW0udHlwZSA9PT0gJ2V4cG9ydCcpIHtcclxuXHRcdFx0dGhpcy5vbkV4cG9ydCAmJiB0aGlzLm9uRXhwb3J0KCkhKCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAnaW1wb3J0Jykge1xyXG5cdFx0XHR0aGlzLmFjdGlvbi5zZXRBY3Rpb24oeyB0eXBlOiBpdGVtLnR5cGUgfSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgnb25DbGljaycpICYmIHR5cGVvZiBpdGVtLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0XHRpdGVtLm9uQ2xpY2soaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0XHJcblx0YWN0RXZlbnQoaXRlbTogYW55KSB7XHJcblx0XHR0aGlzLmFjdGlvbkV2ZW50LmVtaXQoaXRlbSk7XHJcblx0fVxyXG5cclxuXHR0b2dnbGVBY3QoZXZlbnQ6IGFueSkge1xyXG5cdFx0aWYgKHRoaXMuaXNMaXN0KCkpIHJldHVybjtcclxuXHRcdHRoaXMuYWN0T3AgJiYgdGhpcy5hY3RPcC50b2dnbGUoZXZlbnQpO1xyXG5cdH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIj5cclxuICA8ZGl2IGNsYXNzPVwibGVmdC1idG4gZmxleCBnYXAtMVwiPlxyXG4gICAgPCEtLSBUT0RPIOadg+mZkOaVsOaNruaOpeWFpSAtLT5cclxuICAgIEBpZighbmV3QnRuVGVtcGxhdGVSZWYpe1xyXG4gICAgICBAaWYodGhpcy5hdXRoTGV2ZWwoKSA+IDIgJiYgYWRkVmlzaWJsZSgpKXtcclxuICAgICAgICA8cC1idXR0b24gKGNsaWNrKT1cImdvTmV3KClcIiBbb3V0bGluZWRdPVwib3V0bGluZWQoKVwiPnt7J2FwcC5jcmVhdGUnIHwgdHJhbnNsYXRlfX08L3AtYnV0dG9uPlxyXG4gICAgICB9XHJcbiAgICB9IEBlbHNlIHtcclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5ld0J0blRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgQGlmKGNydW1iTGlzdCgpLmxlbmd0aCA+IDApe1xyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgbGVhZGluZy1ub25lXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6ZmxleFwiPlxyXG4gICAgICAgIEBpZihjcnVtYkxpc3QoKS5sZW5ndGggPD0gMil7XHJcbiAgICAgICAgICBAZm9yKGZjaGlsZCBvZiBjcnVtYkxpc3QoKTsgdHJhY2sgZmNoaWxkLnVybCl7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcnVtYi10aXRsZSBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMnB4XSBtYXgtdy1bMTIwcHhdIG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LWVsbGlwc2lzXCIgKGNsaWNrKT1cImJhY2soZmNoaWxkKVwiPlxyXG4gICAgICAgICAgICAgICBAaWYoZmNoaWxkLmkxOG5LZXkhPSAnJyl7XHJcbiAgICAgICAgICAgICAgICB7eyBmY2hpbGQhLmkxOG5LZXkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHt7ZmNoaWxkLnRpdGxlfX1cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcnVtYi10aXRsZSBjdXJzb3ItcG9pbnRlciBzZWxlY3QtY3J1bWJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1bMTdweF0gaC1bMTdweF0gZmxleCBpdGVtcy1jZW50ZXIgZm9udC1ib2xkIHRleHQtWzEzcHhdXCIgKGNsaWNrKT1cInRvZ2dsZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAuLi5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8cC10aWVyZWRtZW51ICNvcCBbbW9kZWxdPVwiY3J1bWJGcm9udFwiIFtwb3B1cF09XCJ0cnVlXCIgW3N0eWxlXT1cIntwb3NpdGlvbjonYWJzb2x1dGUnfVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtIGxldC1pdGVtIGxldC1oYXNTdWJtZW51PVwiaGFzU3VibWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICA8YSBwUmlwcGxlIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcC10aWVyZWRtZW51LWl0ZW0tbGlua1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yIHctZnVsbFwiIChjbGljayk9XCJiYWNrKGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihpdGVtLmkxOG5LZXkhPSAnJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbSEuaTE4bktleSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0udGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvcC10aWVyZWRtZW51PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgQGZvcihpdGVtIG9mIGNydW1iRW5kO3RyYWNrIGl0ZW0udXJsKXtcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3J1bWItdGl0bGUgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTJweF0gbWF4LXctWzEyMHB4XSBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1lbGxpcHNpc1wiIChjbGljayk9XCJiYWNrKGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICBAaWYoaXRlbS5pMThuS2V5IT0gJycpe1xyXG4gICAgICAgICAgICAgICAgICB7eyBpdGVtIS5pMThuS2V5IHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAge3tpdGVtLnRpdGxlfX1cclxuICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdy0wIHRleHQtdGV4dC1jb2xvciB0ZXh0LVsxMnB4XSB0aXRsZS1hY3Rpb25cIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImhpZGRlbiBtZDppbmxpbmUtYmxvY2sgd2hpdGVzcGFjZS1ub3dyYXBcIj57e2lzTmV3PyAnTmV3JzpjcnVtYlRpdGxlKCkudGl0bGV9fTwvc3Bhbj5cclxuICAgICAgICBAaWYoaXNTaG93Q29nKCkpe1xyXG4gICAgICAgICAgQGlmKGlzTGlzdCgpKXtcclxuICAgICAgICAgICAgPHAtYnV0dG9uIHZhcmlhbnQ9XCJ0ZXh0XCIgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBpY29uPVwicGkgIHBpLWNvZ1wiIGFyaWEtbGFiZWw9XCLmk43kvZxcIiAob25DbGljayk9XCJ0b2dnbGVMaXN0T3AoJGV2ZW50KVwiLz5cclxuICAgICAgICAgICAgQGlmKGRpc3BsYXlPcEl0ZW1zKCkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgPHAtdGllcmVkbWVudSAjbGlzdE9wIFttb2RlbF09XCJkaXNwbGF5T3BJdGVtcygpXCIgW3BvcHVwXT1cInRydWVcIiBbc3R5bGVdPVwie3Bvc2l0aW9uOidhYnNvbHV0ZSd9XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW0gbGV0LWl0ZW0gbGV0LWhhc1N1Ym1lbnU9XCJoYXNTdWJtZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxhIHBSaXBwbGUgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBwLXRpZXJlZG1lbnUtaXRlbS1saW5rXCIgKGNsaWNrKT1cImxpc3RBY3QoaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJwLXRpZXJlZG1lbnUtaXRlbS1pY29uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPnt7IGl0ZW0ubGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnNob3J0Y3V0XCIgY2xhc3M9XCJtbC1hdXRvIGJvcmRlciBib3JkZXItc3VyZmFjZSByb3VuZGVkIGJnLWVtcGhhc2lzIHRleHQtbXV0ZWQtY29sb3IgdGV4dC14cyBwLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5zaG9ydGN1dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImhhc1N1Ym1lbnVcIiBjbGFzcz1cInBpIHBpLWFuZ2xlLXJpZ2h0IG1sLWF1dG9cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvcC10aWVyZWRtZW51PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgPHAtYnV0dG9uIHZhcmlhbnQ9XCJ0ZXh0XCIgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBpY29uPVwicGkgIHBpLWNvZ1wiIGFyaWEtbGFiZWw9XCLmk43kvZxcIiAob25DbGljayk9XCJ0b2dnbGVBY3QoJGV2ZW50KVwiLz5cclxuICAgICAgICAgICAgQGlmKGFjdGlvbkxpc3QoKS5sZW5ndGggPiAwICYmIHNob3dBY3Qpe1xyXG4gICAgICAgICAgICAgIDxwLXRpZXJlZG1lbnUgI2FjdE9wIFttb2RlbF09XCJhY3Rpb25MaXN0KClcIiBbcG9wdXBdPVwidHJ1ZVwiIFtzdHlsZV09XCJ7cG9zaXRpb246J2Fic29sdXRlJ31cIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbSBsZXQtaXRlbSBsZXQtaGFzU3VibWVudT1cImhhc1N1Ym1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgPGEgcFJpcHBsZSBcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHAtdGllcmVkbWVudS1pdGVtLWxpbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCIoaXRlbS5hdXRoIHx8IDApID4gKGF1dGhMZXZlbCgpIHx8IDApIHx8ICEhaXRlbS5idG5IaWRkZW4/LihkYXRhKCkpID8gJ2hpZGRlbicgOiAnYmxvY2snXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdEV2ZW50KGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3tpdGVtLmkxOG5LZXkgPyAoaXRlbS5pMThuS2V5IHwgdHJhbnNsYXRlKSA6IGl0ZW0ubGFiZWx9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc2hvcnRjdXRcIiBjbGFzcz1cIm1sLWF1dG8gYm9yZGVyIGJvcmRlci1zdXJmYWNlIHJvdW5kZWQgYmctZW1waGFzaXMgdGV4dC1tdXRlZC1jb2xvciB0ZXh0LXhzIHAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaGFzU3VibWVudVwiIGNsYXNzPVwicGkgcGktYW5nbGUtcmlnaHQgbWwtYXV0b1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L3AtdGllcmVkbWVudT5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBAaWYodGhpcy5hdXRoTGV2ZWwoKSA+IDIgJiYgIWlzTGlzdCgpKXtcclxuICAgICAgICAgIDxwLWJ1dHRvbiBcclxuICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIiBcclxuICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBcclxuICAgICAgICAgICAgaWNvbj1cInBpICBwaS1jbG91ZC11cGxvYWRcIiBcclxuICAgICAgICAgICAgW2xvYWRpbmddPVwiaXNMb2FkaW5nKClcIlxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwi5omL5Yqo5L+d5a2YXCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC0wXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVNhdmUoKVwiPlxyXG4gICAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPCEtLSBAaWYoY3J1bWJMaXN0KCkubGVuZ3RoID49IDIpeyAtLT5cclxuICAgICAgICAgIDxwLWJ1dHRvbiBcclxuICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIiBcclxuICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBcclxuICAgICAgICAgICAgaWNvbj1cInBpICBwaS10aW1lc1wiIFxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwi5YWz6ZetXCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC0wXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlTmV3KClcIj5cclxuICAgICAgICAgIDwvcC1idXR0b24+XHJcbiAgICAgICAgPCEtLSB9IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIH0gQGVsc2Uge1xyXG4gICAgPCEtLSDliJ3lp4voioLngrkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWluLXctMCBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LVsxNHB4XSB0ZXh0LXRleHQtY29sb3JcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJoaWRkZW4gbWQ6aW5saW5lLWJsb2NrIG1heC13LVsxMjBweF0gb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtZWxsaXBzaXNcIj5cclxuICAgICAgICBAaWYoY3J1bWJUaXRsZSgpLmkxOG5LZXkgIT0gJycpe1xyXG4gICAgICAgICAge3tjcnVtYlRpdGxlKCkuaTE4bktleSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICB7e2NydW1iVGl0bGUoKS50aXRsZX19XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIEBpZihpc1Nob3dDb2coKSl7XHJcbiAgICAgICAgPHAtYnV0dG9uIFxyXG4gICAgICAgICAgdmFyaWFudD1cInRleHRcIlxyXG4gICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBcclxuICAgICAgICAgIGljb249XCJwaSAgcGktY29nXCIgXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwi5pON5L2cXCIgXHJcbiAgICAgICAgICAob25DbGljayk9XCJ0b2dnbGVMaXN0T3AoJGV2ZW50KVwiLz5cclxuICAgICAgICAgIEBpZihkaXNwbGF5T3BJdGVtcygpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICA8cC10aWVyZWRtZW51ICNsaXN0T3AgW21vZGVsXT1cImRpc3BsYXlPcEl0ZW1zKClcIiBbcG9wdXBdPVwidHJ1ZVwiIFtzdHlsZV09XCJ7cG9zaXRpb246J2Fic29sdXRlJ31cIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW0gbGV0LWl0ZW0gbGV0LWhhc1N1Ym1lbnU9XCJoYXNTdWJtZW51XCI+XHJcbiAgICAgICAgICAgICAgICA8YSBwUmlwcGxlIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcC10aWVyZWRtZW51LWl0ZW0tbGlua1wiIChjbGljayk9XCJsaXN0QWN0KGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJpdGVtLmljb25cIiBjbGFzcz1cInAtdGllcmVkbWVudS1pdGVtLWljb25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPnt7IGl0ZW0ubGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWwtYXV0byBib3JkZXIgYm9yZGVyLXN1cmZhY2Ugcm91bmRlZCBiZy1lbXBoYXNpcyB0ZXh0LW11dGVkLWNvbG9yIHRleHQteHMgcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0IH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoYXNTdWJtZW51XCIgY2xhc3M9XCJwaSBwaS1hbmdsZS1yaWdodCBtbC1hdXRvXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3AtdGllcmVkbWVudT5cclxuICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgfVxyXG4gICAgICBAaWYoIWlzTGlzdCgpKXtcclxuICAgICAgICA8cC1idXR0b24gXHJcbiAgICAgICAgICB2YXJpYW50PVwidGV4dFwiIFxyXG4gICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBcclxuICAgICAgICAgIGljb249XCJwaSAgcGktY2xvdWQtdXBsb2FkXCIgXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwi5omL5Yqo5L+d5a2YXCIgXHJcbiAgICAgICAgICBjbGFzcz1cInAtMFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2F2ZSgpXCI+XHJcbiAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICA8cC1idXR0b24gXHJcbiAgICAgICAgICB2YXJpYW50PVwidGV4dFwiIFxyXG4gICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBcclxuICAgICAgICAgIGljb249XCJwaSAgcGktdGltZXNcIiBcclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCLlhbPpl61cIiBcclxuICAgICAgICAgIGNsYXNzPVwicC0wXCJcclxuICAgICAgICAgIChjbGljayk9XCJjbG9zZU5ldygpXCI+XHJcbiAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG4gIFxyXG48L2Rpdj4iXX0=
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1bWItYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvY3J1bWItYWN0aW9uL2NydW1iLWFjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2NydW1iLWFjdGlvbi9jcnVtYi1hY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFDTixTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUVOLE1BQU0sRUFFTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFlLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQVFoRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsV0FBVztJQXFEcEQ7UUFDQyxLQUFLLEVBQUUsQ0FBQztRQXJEVCx1QkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoRCxXQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9CLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENB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LENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQSxDQUFDLENBQUEsV0FBVyxDQUFBO0lBQzVDLENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2xDLENBQUM7K0dBL0pXLG9CQUFvQjttR0FBcEIsb0JBQW9CLHUxREM5QmpDLHU5UEE2S00sc3RNRG5KSyxZQUFZLDZhQUFFLGFBQWEsaURBQUUsWUFBWSwwU0FBRSxVQUFVOzs0RkFJbkQsb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNDLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUM7d0RBaUIvQyxFQUFFO3NCQUFsQixTQUFTO3VCQUFDLElBQUk7Z0JBQ00sTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUNDLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFtQjhCLGlCQUFpQjtzQkFBaEUsWUFBWTt1QkFBQyxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFO2dCQW9EOUMsTUFBTTtzQkFETCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFtQ29tcG9uZW50IH0gZnJvbSAnLi8uLi9hbS9hbS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG5cdENvbXBvbmVudCxcclxuXHRjb21wdXRlZCxcclxuXHRDb250ZW50Q2hpbGQsXHJcblx0ZWZmZWN0LFxyXG5cdEhvc3RMaXN0ZW5lcixcclxuXHRpbmplY3QsXHJcblx0aW5wdXQsXHJcblx0T25Jbml0LFxyXG5cdG91dHB1dCxcclxuXHRPdXRwdXQsXHJcblx0c2lnbmFsLFxyXG5cdFRlbXBsYXRlUmVmLFxyXG5cdFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVXNlckhpc3RvcnlTZXJ2aWNlLCBIaXN0b3J5SXRlbSwgQWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgUG9wb3ZlciB9IGZyb20gJ3ByaW1lbmcvcG9wb3Zlcic7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRpZXJlZE1lbnUgfSBmcm9tICdwcmltZW5nL3RpZXJlZG1lbnUnO1xyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2FwcC1jcnVtYi1hY3Rpb24nLFxyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW0J1dHRvbk1vZHVsZSwgVHJhbnNsYXRlUGlwZSwgQ29tbW9uTW9kdWxlLCBUaWVyZWRNZW51XSxcclxuXHR0ZW1wbGF0ZVVybDogJy4vY3J1bWItYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybDogJy4vY3J1bWItYWN0aW9uLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENydW1iQWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgQW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdHVzZXJIaXN0b3J5U2VydmljZSA9IGluamVjdChVc2VySGlzdG9yeVNlcnZpY2UpO1xyXG5cdGFjdGlvbiA9IGluamVjdChBY3Rpb25TZXJ2aWNlKTtcclxuXHRjcnVtYkxpc3QgPSBjb21wdXRlZCgoKSA9PiB7XHJcblx0XHRsZXQgY3J1bWIgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckhpc3RvcnlTZXJ2aWNlLmhpc3RvcnlMaXN0KCkpKTtcclxuXHRcdHJldHVybiBjcnVtYi5tYXAoKHY6IGFueSkgPT4gdik7XHJcblx0fSk7XHJcblx0Y3J1bWJUaXRsZSA9IHNpZ25hbDxhbnk+KHt9KTtcclxuXHQvLyByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuXHRpc05ldyA9IGZhbHNlO1xyXG5cdGlzU2hvd0NvZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRjcnVtYkZyb250OiBIaXN0b3J5SXRlbVtdID0gW107XHJcblx0Y3J1bWJFbmQ6IEhpc3RvcnlJdGVtW10gPSBbXTtcclxuXHRAVmlld0NoaWxkKCdvcCcpIG9wITogUG9wb3ZlcjtcclxuXHRAVmlld0NoaWxkKCdsaXN0T3AnKSBsaXN0T3AhOiBQb3BvdmVyO1xyXG5cdEBWaWV3Q2hpbGQoJ2FjdE9wJykgYWN0T3AhOiBQb3BvdmVyO1xyXG5cdHNhdmVFdmVudCA9IG91dHB1dCgpO1xyXG5cdC8vIOaWsOW7uuaMiemSrlxyXG5cdGFkZFZpc2libGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPigpO1xyXG5cdG5ld1VybCA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cdG9uRXhwb3J0ID0gaW5wdXQ8RnVuY3Rpb24+KCk7XHJcblx0Ly8g5paw5bu65oyJ6ZKub3V0bGluZVxyXG5cdG91dGxpbmVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cdC8vIOaYr+WQpuaYr+WIl+ihqOmhtemdolxyXG5cdGlzTGlzdCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHQvLyDmnYPpmZDnrYnnuqdcclxuXHRhdXRoTGV2ZWwgPSBpbnB1dDxudW1iZXI+KC0xKTtcclxuXHRjYW5jZWxFdmVudCA9IG91dHB1dCgpO1xyXG5cdGFjdGlvbkxpc3QgPSBpbnB1dDxhbnk+KFtdKTtcclxuXHRhY3Rpb25FdmVudCA9IG91dHB1dCgpO1xyXG5cdGRhdGEgPSBpbnB1dDxhbnk+KCk7XHJcblx0c2hvd0FjdCA9IGZhbHNlO1xyXG5cdG1lbnVzID0gaW5wdXQ8YW55W10+KFtdKTtcclxuXHRkaXNwbGF5T3BJdGVtcyA9IGNvbXB1dGVkKCgpID0+IFsuLi50aGlzLm1lbnVzKCksIC4uLnRoaXMubGlzdE9wSXRlbXNdLmZpbHRlcigodikgPT4gdGhpcy5hdXRoTGV2ZWwoKSA+PSB2LmF1dGgpKTtcclxuXHRAQ29udGVudENoaWxkKCduZXdCdG4nLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBuZXdCdG5UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcclxuXHRsaXN0T3BJdGVtcyA9IFtcclxuXHRcdHtcclxuXHRcdFx0bGFiZWw6ICdhcHAudGFibGVBY0ltcG9ydCcsXHJcblx0XHRcdHR5cGU6ICdpbXBvcnQnLFxyXG5cdFx0XHRpY29uOiAncGkgcGktdXBsb2FkJyxcclxuXHRcdFx0YXV0aDogMixcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGxhYmVsOiAnYXBwLnRhYmxlQWNFeHBvcnQnLFxyXG5cdFx0XHR0eXBlOiAnZXhwb3J0JyxcclxuXHRcdFx0aWNvbjogJ3BpIHBpLWRvd25sb2FkJyxcclxuXHRcdFx0YXV0aDogMyxcclxuXHRcdH0sXHJcblx0XTtcclxuXHRpc1NhdmUgPSBjb21wdXRlZCgoKSA9PiB7XHJcblx0XHRjb25zb2xlLmxvZygnYWMtLS0tJyx0aGlzLmFjdGlvbi5zYXZlU2lnbmFsKCkpXHJcblx0XHRyZXR1cm4gdGhpcy5hY3Rpb24uc2F2ZVNpZ25hbCgpXHJcblx0fSlcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHRlZmZlY3QoXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRsZXQgbGFzdCA9IHRoaXMuY3J1bWJMaXN0KCkucG9wKCk7XHJcblx0XHRcdFx0aWYgKGxhc3Q/LnVybCkge1xyXG5cdFx0XHRcdFx0dGhpcy5pc05ldyA9IGxhc3QudXJsPy5pbmRleE9mKCduZXcnKSA+IC0xID8gdHJ1ZSA6IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAobGFzdD8udGl0bGUpIHtcclxuXHRcdFx0XHRcdHRoaXMuY3J1bWJUaXRsZS5zZXQobGFzdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBsZW5ndGggPSB0aGlzLmNydW1iTGlzdCgpLmxlbmd0aDtcclxuXHRcdFx0XHRpZiAobGVuZ3RoID4gMikge1xyXG5cdFx0XHRcdFx0dGhpcy5jcnVtYkZyb250ID0gdGhpcy5jcnVtYkxpc3QoKVxyXG5cdFx0XHRcdFx0XHQubWFwKCh2OiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR2LmxhYmVsID0gdi50aXRsZTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdjtcclxuXHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0LmZpbHRlcigodjogSGlzdG9yeUl0ZW0sIGluZGV4OiBudW1iZXIpID0+IGluZGV4IDw9IGxlbmd0aCAtIDEgLSAyKTtcclxuXHRcdFx0XHRcdHRoaXMuY3J1bWJFbmQgPSBbdGhpcy5jcnVtYkxpc3QoKVtsZW5ndGggLSAyXSwgdGhpcy5jcnVtYkxpc3QoKVtsZW5ndGggLSAxXV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXHJcblx0XHQpO1xyXG5cdFx0Ly8gZWZmZWN0KCgpID0+IHtcclxuXHRcdC8vIFx0dGhpcy5saXN0T3BJdGVtcyA9IHRoaXMubGlzdE9wSXRlbXMuZmlsdGVyKCh2KSA9PiB0aGlzLmF1dGhMZXZlbCgpID49IHYubGV2ZWwpO1xyXG5cdFx0Ly8gfSk7XHJcblx0XHRlZmZlY3QoKCkgPT4ge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnYWRkVmlzaWJsZScsIHRoaXMuYWRkVmlzaWJsZSgpKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuXHRyZXNpemUoZXZlbnQ6IGFueSkge1xyXG5cdFx0bGV0IHdpbmRvd1dpZHRoID0gKGV2ZW50LnRhcmdldCBhcyBXaW5kb3cpLmlubmVyV2lkdGg7XHJcblx0XHRpZiAod2luZG93V2lkdGggPCA3NjgpIHtcclxuXHRcdFx0dGhpcy5zaG93QWN0ID0gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2hvd0FjdCA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2hvd0FjdCA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4ID8gdHJ1ZSA6IGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z29OZXcoKSB7XHJcblx0XHRpZiAodGhpcy5uZXdVcmwoKSA9PSAnJykgcmV0dXJuO1xyXG5cdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMubmV3VXJsKCldKS50aGVuKChyZXMpID0+IHtcclxuXHRcdFx0dGhpcy51c2VySGlzdG9yeVNlcnZpY2Uuc2V0TGFzdFRpdGxlKCdOZXcnKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Y2xvc2VOZXcoKSB7XHJcblx0XHRsZXQgbGVuZ3RoID0gdGhpcy5jcnVtYkxpc3QoKS5sZW5ndGg7XHJcblx0XHRsZXQgbGFzdCA9IHRoaXMuY3J1bWJMaXN0KClbbGVuZ3RoIC0gMV07XHJcblx0XHRpZiAobGFzdCkge1xyXG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbGFzdC51cmxdKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuY2FuY2VsRXZlbnQuZW1pdCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aGFuZGxlU2F2ZSgpIHtcclxuXHRcdHRoaXMuc2F2ZUV2ZW50LmVtaXQoKTtcclxuXHR9XHJcblxyXG5cdGJhY2soaXRlbTogYW55KSB7XHJcblx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbaXRlbS51cmxdKTtcclxuXHR9XHJcblxyXG5cdHRvZ2dsZShldmVudDogYW55KSB7XHJcblx0XHR0aGlzLm9wLnRvZ2dsZShldmVudCk7XHJcblx0fVxyXG5cclxuXHR0b2dnbGVMaXN0T3AoZXZlbnQ6IGFueSkge1xyXG5cdFx0aWYgKCF0aGlzLmlzTGlzdCgpKSByZXR1cm47XHJcblx0XHR0aGlzLmxpc3RPcCAmJiB0aGlzLmxpc3RPcC50b2dnbGUoZXZlbnQpO1xyXG5cdH1cclxuXHJcblx0bGlzdEFjdChpdGVtOiBhbnkpIHtcclxuXHRcdGlmIChpdGVtLnR5cGUgPT09ICdleHBvcnQnKSB7XHJcblx0XHRcdHRoaXMub25FeHBvcnQgJiYgdGhpcy5vbkV4cG9ydCgpISgpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ2ltcG9ydCcpIHtcclxuXHRcdFx0dGhpcy5hY3Rpb24uc2V0QWN0aW9uKHsgdHlwZTogaXRlbS50eXBlIH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoJ29uQ2xpY2snKSAmJiB0eXBlb2YgaXRlbS5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdFx0aXRlbS5vbkNsaWNrKGl0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdFxyXG5cdGFjdEV2ZW50KGl0ZW06IGFueSkge1xyXG5cdFx0dGhpcy5hY3Rpb25FdmVudC5lbWl0KGl0ZW0pO1xyXG5cdH1cclxuXHJcblx0dG9nZ2xlQWN0KGV2ZW50OiBhbnkpIHtcclxuXHRcdGlmICh0aGlzLmlzTGlzdCgpKSByZXR1cm47XHJcblx0XHR0aGlzLmFjdE9wICYmIHRoaXMuYWN0T3AudG9nZ2xlKGV2ZW50KTtcclxuXHR9XHJcblx0c2V0U2F2ZUNsYXNzKCl7XHJcblx0XHRyZXR1cm4gdGhpcy5pc1NhdmUoKSA/ICdkYW5nZXInOidzZWNvbmRhcnknXHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpe1xyXG5cdFx0dGhpcy5hY3Rpb24uc2F2ZVNpZ25hbC5zZXQoZmFsc2UpXHJcblx0fVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJsZWZ0LWJ0biBmbGV4IGdhcC0xXCI+XHJcbiAgICA8IS0tIFRPRE8g5p2D6ZmQ5pWw5o2u5o6l5YWlIC0tPlxyXG4gICAgQGlmKCFuZXdCdG5UZW1wbGF0ZVJlZil7XHJcbiAgICAgIEBpZih0aGlzLmF1dGhMZXZlbCgpID4gMiAmJiBhZGRWaXNpYmxlKCkpe1xyXG4gICAgICAgIDxwLWJ1dHRvbiAoY2xpY2spPVwiZ29OZXcoKVwiIFtvdXRsaW5lZF09XCJvdXRsaW5lZCgpXCI+e3snYXBwLmNyZWF0ZScgfCB0cmFuc2xhdGV9fTwvcC1idXR0b24+XHJcbiAgICAgIH1cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmV3QnRuVGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuICBAaWYoY3J1bWJMaXN0KCkubGVuZ3RoID4gMCl7XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBsZWFkaW5nLW5vbmVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhpZGRlbiBtZDpmbGV4XCI+XHJcbiAgICAgICAgQGlmKGNydW1iTGlzdCgpLmxlbmd0aCA8PSAyKXtcclxuICAgICAgICAgIEBmb3IoZmNoaWxkIG9mIGNydW1iTGlzdCgpOyB0cmFjayBmY2hpbGQudXJsKXtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNydW1iLXRpdGxlIGN1cnNvci1wb2ludGVyIHRleHQtWzEycHhdIG1heC13LVsxMjBweF0gb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtZWxsaXBzaXNcIiAoY2xpY2spPVwiYmFjayhmY2hpbGQpXCI+XHJcbiAgICAgICAgICAgICAgIEBpZihmY2hpbGQuaTE4bktleSE9ICcnKXtcclxuICAgICAgICAgICAgICAgIHt7IGZjaGlsZCEuaTE4bktleSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAge3tmY2hpbGQudGl0bGV9fVxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNydW1iLXRpdGxlIGN1cnNvci1wb2ludGVyIHNlbGVjdC1jcnVtYlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVsxN3B4XSBoLVsxN3B4XSBmbGV4IGl0ZW1zLWNlbnRlciBmb250LWJvbGQgdGV4dC1bMTNweF1cIiAoY2xpY2spPVwidG9nZ2xlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIC4uLlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxwLXRpZXJlZG1lbnUgI29wIFttb2RlbF09XCJjcnVtYkZyb250XCIgW3BvcHVwXT1cInRydWVcIiBbc3R5bGVdPVwie3Bvc2l0aW9uOidhYnNvbHV0ZSd9XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW0gbGV0LWl0ZW0gbGV0LWhhc1N1Ym1lbnU9XCJoYXNTdWJtZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxhIHBSaXBwbGUgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBwLXRpZXJlZG1lbnUtaXRlbS1saW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTIgdy1mdWxsXCIgKGNsaWNrKT1cImJhY2soaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGl0ZW0uaTE4bktleSE9ICcnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtIS5pMThuS2V5IHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS50aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9wLXRpZXJlZG1lbnU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBAZm9yKGl0ZW0gb2YgY3J1bWJFbmQ7dHJhY2sgaXRlbS51cmwpe1xyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcnVtYi10aXRsZSBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMnB4XSBtYXgtdy1bMTIwcHhdIG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LWVsbGlwc2lzXCIgKGNsaWNrKT1cImJhY2soaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgIEBpZihpdGVtLmkxOG5LZXkhPSAnJyl7XHJcbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0hLmkxOG5LZXkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB7e2l0ZW0udGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1pbi13LTAgdGV4dC10ZXh0LWNvbG9yIHRleHQtWzEycHhdIHRpdGxlLWFjdGlvblwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGlkZGVuIG1kOmlubGluZS1ibG9jayB3aGl0ZXNwYWNlLW5vd3JhcFwiPnt7aXNOZXc/ICdOZXcnOmNydW1iVGl0bGUoKS50aXRsZX19PC9zcGFuPlxyXG4gICAgICAgIEBpZihpc1Nob3dDb2coKSl7XHJcbiAgICAgICAgICBAaWYoaXNMaXN0KCkpe1xyXG4gICAgICAgICAgICA8cC1idXR0b24gdmFyaWFudD1cInRleHRcIiBzZXZlcml0eT1cInNlY29uZGFyeVwiIGljb249XCJwaSAgcGktY29nXCIgYXJpYS1sYWJlbD1cIuaTjeS9nFwiIChvbkNsaWNrKT1cInRvZ2dsZUxpc3RPcCgkZXZlbnQpXCIvPlxyXG4gICAgICAgICAgICBAaWYoZGlzcGxheU9wSXRlbXMoKS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICA8cC10aWVyZWRtZW51ICNsaXN0T3AgW21vZGVsXT1cImRpc3BsYXlPcEl0ZW1zKClcIiBbcG9wdXBdPVwidHJ1ZVwiIFtzdHlsZV09XCJ7cG9zaXRpb246J2Fic29sdXRlJ31cIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbSBsZXQtaXRlbSBsZXQtaGFzU3VibWVudT1cImhhc1N1Ym1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgPGEgcFJpcHBsZSBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHAtdGllcmVkbWVudS1pdGVtLWxpbmtcIiAoY2xpY2spPVwibGlzdEFjdChpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJpdGVtLmljb25cIiBjbGFzcz1cInAtdGllcmVkbWVudS1pdGVtLWljb25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3sgaXRlbS5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc2hvcnRjdXRcIiBjbGFzcz1cIm1sLWF1dG8gYm9yZGVyIGJvcmRlci1zdXJmYWNlIHJvdW5kZWQgYmctZW1waGFzaXMgdGV4dC1tdXRlZC1jb2xvciB0ZXh0LXhzIHAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaGFzU3VibWVudVwiIGNsYXNzPVwicGkgcGktYW5nbGUtcmlnaHQgbWwtYXV0b1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9wLXRpZXJlZG1lbnU+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICA8cC1idXR0b24gdmFyaWFudD1cInRleHRcIiBzZXZlcml0eT1cInNlY29uZGFyeVwiIGljb249XCJwaSAgcGktY29nXCIgYXJpYS1sYWJlbD1cIuaTjeS9nFwiIChvbkNsaWNrKT1cInRvZ2dsZUFjdCgkZXZlbnQpXCIvPlxyXG4gICAgICAgICAgICBAaWYoYWN0aW9uTGlzdCgpLmxlbmd0aCA+IDAgJiYgc2hvd0FjdCl7XHJcbiAgICAgICAgICAgICAgPHAtdGllcmVkbWVudSAjYWN0T3AgW21vZGVsXT1cImFjdGlvbkxpc3QoKVwiIFtwb3B1cF09XCJ0cnVlXCIgW3N0eWxlXT1cIntwb3NpdGlvbjonYWJzb2x1dGUnfVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtIGxldC1pdGVtIGxldC1oYXNTdWJtZW51PVwiaGFzU3VibWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICA8YSBwUmlwcGxlIFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcC10aWVyZWRtZW51LWl0ZW0tbGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIihpdGVtLmF1dGggfHwgMCkgPiAoYXV0aExldmVsKCkgfHwgMCkgfHwgISFpdGVtLmJ0bkhpZGRlbj8uKGRhdGEoKSkgPyAnaGlkZGVuJyA6ICdibG9jaydcIiBcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0RXZlbnQoaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj57e2l0ZW0uaTE4bktleSA/IChpdGVtLmkxOG5LZXkgfCB0cmFuc2xhdGUpIDogaXRlbS5sYWJlbH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWwtYXV0byBib3JkZXIgYm9yZGVyLXN1cmZhY2Ugcm91bmRlZCBiZy1lbXBoYXNpcyB0ZXh0LW11dGVkLWNvbG9yIHRleHQteHMgcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoYXNTdWJtZW51XCIgY2xhc3M9XCJwaSBwaS1hbmdsZS1yaWdodCBtbC1hdXRvXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvcC10aWVyZWRtZW51PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBpZih0aGlzLmF1dGhMZXZlbCgpID4gMiAmJiAhaXNMaXN0KCkpe1xyXG4gICAgICAgICAgPHAtYnV0dG9uIFxyXG4gICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiIFxyXG4gICAgICAgICAgICBbc2V2ZXJpdHldPVwic2V0U2F2ZUNsYXNzKClcIiBcclxuICAgICAgICAgICAgaWNvbj1cInBpICBwaS1jbG91ZC11cGxvYWRcIiBcclxuICAgICAgICAgICAgW2xvYWRpbmddPVwiaXNMb2FkaW5nKClcIlxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwi5omL5Yqo5L+d5a2YXCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC0wXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVNhdmUoKVwiPlxyXG4gICAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPCEtLSBAaWYoY3J1bWJMaXN0KCkubGVuZ3RoID49IDIpeyAtLT5cclxuICAgICAgICAgIDxwLWJ1dHRvbiBcclxuICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIiBcclxuICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBcclxuICAgICAgICAgICAgaWNvbj1cInBpICBwaS10aW1lc1wiIFxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwi5YWz6ZetXCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC0wXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlTmV3KClcIj5cclxuICAgICAgICAgIDwvcC1idXR0b24+XHJcbiAgICAgICAgPCEtLSB9IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIH0gQGVsc2Uge1xyXG4gICAgPCEtLSDliJ3lp4voioLngrkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWluLXctMCBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LVsxNHB4XSB0ZXh0LXRleHQtY29sb3JcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJoaWRkZW4gbWQ6aW5saW5lLWJsb2NrIG1heC13LVsxMjBweF0gb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtZWxsaXBzaXNcIj5cclxuICAgICAgICBAaWYoY3J1bWJUaXRsZSgpLmkxOG5LZXkgIT0gJycpe1xyXG4gICAgICAgICAge3tjcnVtYlRpdGxlKCkuaTE4bktleSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICB7e2NydW1iVGl0bGUoKS50aXRsZX19XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIEBpZihpc1Nob3dDb2coKSl7XHJcbiAgICAgICAgPHAtYnV0dG9uIFxyXG4gICAgICAgICAgdmFyaWFudD1cInRleHRcIlxyXG4gICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBcclxuICAgICAgICAgIGljb249XCJwaSAgcGktY29nXCIgXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwi5pON5L2cXCIgXHJcbiAgICAgICAgICAob25DbGljayk9XCJ0b2dnbGVMaXN0T3AoJGV2ZW50KVwiLz5cclxuICAgICAgICAgIEBpZihkaXNwbGF5T3BJdGVtcygpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICA8cC10aWVyZWRtZW51ICNsaXN0T3AgW21vZGVsXT1cImRpc3BsYXlPcEl0ZW1zKClcIiBbcG9wdXBdPVwidHJ1ZVwiIFtzdHlsZV09XCJ7cG9zaXRpb246J2Fic29sdXRlJ31cIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW0gbGV0LWl0ZW0gbGV0LWhhc1N1Ym1lbnU9XCJoYXNTdWJtZW51XCI+XHJcbiAgICAgICAgICAgICAgICA8YSBwUmlwcGxlIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcC10aWVyZWRtZW51LWl0ZW0tbGlua1wiIChjbGljayk9XCJsaXN0QWN0KGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJpdGVtLmljb25cIiBjbGFzcz1cInAtdGllcmVkbWVudS1pdGVtLWljb25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPnt7IGl0ZW0ubGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWwtYXV0byBib3JkZXIgYm9yZGVyLXN1cmZhY2Ugcm91bmRlZCBiZy1lbXBoYXNpcyB0ZXh0LW11dGVkLWNvbG9yIHRleHQteHMgcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0IH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoYXNTdWJtZW51XCIgY2xhc3M9XCJwaSBwaS1hbmdsZS1yaWdodCBtbC1hdXRvXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3AtdGllcmVkbWVudT5cclxuICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgfVxyXG4gICAgICBAaWYoIWlzTGlzdCgpKXtcclxuICAgICAgICA8cC1idXR0b24gXHJcbiAgICAgICAgICB2YXJpYW50PVwidGV4dFwiIFxyXG4gICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBcclxuICAgICAgICAgIGljb249XCJwaSAgcGktY2xvdWQtdXBsb2FkXCIgXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwi5omL5Yqo5L+d5a2YXCIgXHJcbiAgICAgICAgICBjbGFzcz1cInAtMFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2F2ZSgpXCI+XHJcbiAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICA8cC1idXR0b24gXHJcbiAgICAgICAgICB2YXJpYW50PVwidGV4dFwiIFxyXG4gICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBcclxuICAgICAgICAgIGljb249XCJwaSAgcGktdGltZXNcIiBcclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCLlhbPpl61cIiBcclxuICAgICAgICAgIGNsYXNzPVwicC0wXCJcclxuICAgICAgICAgIChjbGljayk9XCJjbG9zZU5ldygpXCI+XHJcbiAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG4gIFxyXG48L2Rpdj4iXX0=
@@ -9,6 +9,7 @@ import { fieldUtils } from '../form-field/field-utils';
9
9
  import { generateUniqueId } from '../../share/utils';
10
10
  import { Router } from '@angular/router';
11
11
  import { isObservable, shareReplay } from 'rxjs';
12
+ import { ActionService } from '../../service/action.service';
12
13
  import * as i0 from "@angular/core";
13
14
  import * as i1 from "@angular/common";
14
15
  export class FormComponent {
@@ -37,6 +38,7 @@ export class FormComponent {
37
38
  this.changedModel = {};
38
39
  this.hookObservers = [];
39
40
  this.labelMinWidth = signal(undefined);
41
+ this.actions = inject(ActionService);
40
42
  this.router.url.split('/').pop() == 'new' && (this.isNew = true);
41
43
  effect(() => {
42
44
  if (!this.model()) {
@@ -123,6 +125,7 @@ export class FormComponent {
123
125
  this.handleUpsert(field.key, value);
124
126
  console.log('-----handleValueChange', this.upsert());
125
127
  this.handleHideExpression();
128
+ this.actions.saveSignal.set(true);
126
129
  }
127
130
  handleUpsert(key, value) {
128
131
  if (this.isNew) {
@@ -220,4 +223,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
220
223
  type: HostListener,
221
224
  args: ['window:resize', ['$event']]
222
225
  }] } });
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2Zvcm0vZm9ybS9mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZm9ybS9mb3JtL2Zvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixZQUFZLEVBSVosTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsTUFBTSxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFhLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQWMsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFrQjdELE1BQU0sT0FBTyxhQUFhO0lBeUJ6QixRQUFRO1FBQ1AsSUFBSSxDQUFDLGVBQWUsRUFBRSxD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OlsiaW1wb3J0IHtcclxuXHRDb21wb25lbnQsXHJcblx0ZWZmZWN0LFxyXG5cdGlucHV0LFxyXG5cdGNvbXB1dGVkLFxyXG5cdFZpZXdDaGlsZHJlbixcclxuXHRRdWVyeUxpc3QsXHJcblx0RWxlbWVudFJlZixcclxuXHRDaGFuZ2VEZXRlY3RvclJlZixcclxuXHRpbmplY3QsXHJcblx0SG9zdExpc3RlbmVyLFxyXG5cdHVudHJhY2tlZCxcclxuXHRzaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybVN1Ym1pdHRlZEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGaWVsZENvbnRyb2wgfSBmcm9tICcuLi9mb3JtLWZpZWxkL2ZpZWxkLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyBGb3JtRmllbGQsIEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZmllbGQvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2kxOG4uc2VydmljZSc7XHJcbmltcG9ydCB7IGZpZWxkVXRpbHMgfSBmcm9tICcuLi9mb3JtLWZpZWxkL2ZpZWxkLXV0aWxzJztcclxuaW1wb3J0IHsgVXBzZXJ0IH0gZnJvbSAnLi4vLi4vYW0vYW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJy4uLy4uL3NoYXJlL3V0aWxzJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMnO1xyXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1PcHRpb25zIHtcclxuXHRmaWVsZHM/OiBGb3JtRmllbGRbXTtcclxuXHRmb3JtPzogRm9ybUdyb3VwO1xyXG5cdG1haW5GaWVsZD86IHN0cmluZztcclxuXHRsYWJlbFdpZHRoPzogc3RyaW5nO1xyXG5cdGludGVyYWN0aXZlTGFiZWw/OiBib29sZWFuO1xyXG5cdGV4dHJhPzogYW55O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2N1c3RvbS1mb3JtJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1GaWVsZENvbXBvbmVudF0sXHJcblx0cHJvdmlkZXJzOiBbRGF0ZVBpcGVdLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybDogJy4vZm9ybS5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IHtcclxuXHRAVmlld0NoaWxkcmVuKEZvcm1GaWVsZENvbXBvbmVudCkgZmllbGRDb21wb25lbnRzPzogUXVlcnlMaXN0PEZvcm1GaWVsZENvbXBvbmVudD47XHJcblx0cm91dGVyOiBSb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuXHRpc05ldzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdG9wdGlvbnMgPSBpbnB1dDxGb3JtT3B0aW9ucz4oe30pO1xyXG5cdGZpZWxkcyA9IGNvbXB1dGVkKCgpID0+IHtcclxuXHRcdHVudHJhY2tlZCgoKSA9PiB7XHJcblx0XHRcdHRoaXMuaW5pdEZvcm0oKTtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5yZUNhbGNMYWJlbFNpemUoKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiB0aGlzLm9wdGlvbnMoKS5maWVsZHM7XHJcblx0fSk7XHJcblxyXG5cdGkxOG5TZXJ2aWNlID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcclxuXHRtb2RlbCA9IGlucHV0PGFueT4oKTtcclxuXHR1cHNlcnQgPSBpbnB1dDxVcHNlcnQ+KCk7XHJcblx0cmF3TW9kZWw6IGFueSA9IHt9O1xyXG5cdGNoYW5nZWRNb2RlbDogYW55ID0ge307XHJcblx0ZmllbGRMaXN0ITogRm9ybUZpZWxkW107XHJcblx0aG9va09ic2VydmVyczogRnVuY3Rpb25bXSA9IFtdO1xyXG5cdGxhYmVsTWluV2lkdGggPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cclxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuXHRvblJlc2l6ZSgpIHtcclxuXHRcdHRoaXMucmVDYWxjTGFiZWxTaXplKCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuXHRcdHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG5cdCkge1xyXG5cdFx0dGhpcy5yb3V0ZXIudXJsLnNwbGl0KCcvJykucG9wKCkgPT0gJ25ldycgJiYgKHRoaXMuaXNOZXcgPSB0cnVlKTtcclxuXHRcdGVmZmVjdChcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdGlmICghdGhpcy5tb2RlbCgpKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIOm7mOiupOWAvOS7heWcqOihqOWNleaWsOW7uuaXtueUn+aViFxyXG5cdFx0XHRcdGlmICh0aGlzLmlzTmV3KSB7XHJcblx0XHRcdFx0XHR0aGlzLmZpZWxkTGlzdC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAoIWZpZWxkLmRlZmF1bHQpIHJldHVybjtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMubW9kZWwoKVtmaWVsZC5rZXkhXSAhPT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblx0XHRcdFx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVWYWx1ZUNoYW5nZShmaWVsZC5kZWZhdWx0LCBmaWVsZCk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMucmF3TW9kZWwgPSB7IC4uLnRoaXMubW9kZWwoKSB9O1xyXG5cdFx0XHRcdHRoaXMuY2hhbmdlZE1vZGVsID0ge307XHJcblx0XHRcdFx0dW50cmFja2VkKCgpID0+IHRoaXMudHJpZ2dlckhvb2soKSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0dGhpcy5yZUNhbGNMYWJlbFNpemUoKTtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5pMThuU2VydmljZS5jaGFuZ2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuXHRcdFx0dGhpcy5yZUNhbGNMYWJlbFNpemUoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLmhvb2tPYnNlcnZlcnMuZm9yRWFjaCgodW5zdWJzY3JpYmUpID0+IHVuc3Vic2NyaWJlKCkpO1xyXG5cdH1cclxuXHJcblx0aW5pdEZvcm0oKSB7XHJcblx0XHRpZiAoIXRoaXMub3B0aW9ucygpLmV4dHJhKSB7XHJcblx0XHRcdHRoaXMub3B0aW9ucygpLmV4dHJhID0ge307XHJcblx0XHR9XHJcblx0XHRpZiAoIXRoaXMub3B0aW9ucygpLmZvcm0pIHtcclxuXHRcdFx0dGhpcy5vcHRpb25zKCkuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5maWVsZExpc3QgPSBbXTtcclxuXHRcdHRoaXMucGFyc2VGaWVsZHModGhpcy5vcHRpb25zKCkuZmllbGRzIHx8IFtdKTtcclxuXHRcdHRoaXMuZmllbGRMaXN0LmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdGZpZWxkLnV1aWQgPSBnZW5lcmF0ZVVuaXF1ZUlkKCk7XHJcblx0XHRcdGZpZWxkLmxhYmVsTWluV2lkdGggPSB0aGlzLmxhYmVsTWluV2lkdGg7XHJcblx0XHRcdGZpZWxkLmludGVyYWN0aXZlTGFiZWwgPSB0aGlzLm9wdGlvbnMoKS5pbnRlcmFjdGl2ZUxhYmVsID8/IHRydWU7XHJcblx0XHRcdGZpZWxkLmZvcm0gPSB0aGlzO1xyXG5cdFx0XHRpZihpc09ic2VydmFibGUoZmllbGQuaG9vaykgKXtcclxuXHRcdFx0XHR0aGlzLnVuaXF1ZUhvb2soZmllbGQsIGZpZWxkLmhvb2spO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuaGFuZGxlRmllbGRDb250cm9sKGZpZWxkKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Z2V0RmllbGQoa2V5OiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLmZpZWxkTGlzdC5maW5kKChmaWVsZCkgPT4gZmllbGQua2V5ID09PSBrZXkpO1xyXG5cdH1cclxuXHJcblx0cGFyc2VGaWVsZHMoZmllbGRzOiBGb3JtRmllbGRbXSkge1xyXG5cdFx0ZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdGlmIChmaWVsZC5ncm91cCkge1xyXG5cdFx0XHRcdHRoaXMucGFyc2VGaWVsZHMoZmllbGQuZ3JvdXApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuZmllbGRMaXN0LnB1c2goZmllbGQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUZpZWxkQ29udHJvbChmaWVsZDogRm9ybUZpZWxkKSB7XHJcblx0XHRjb25zdCBmaWVsZENvbnRyb2wgPSBmaWVsZFV0aWxzLnByb3BzKGZpZWxkKS5yZXF1aXJlZFxyXG5cdFx0XHQ/IG5ldyBGaWVsZENvbnRyb2wobnVsbCwgZmllbGQudmFsaWRhdG9ycyA/IGZpZWxkLnZhbGlkYXRvcnMgOiBWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG5cdFx0XHQ6IG5ldyBGaWVsZENvbnRyb2wobnVsbCk7XHJcblx0XHR0aGlzLm9wdGlvbnMoKS5mb3JtPy5hZGRDb250cm9sKGZpZWxkLmtleSB8fCAnJywgZmllbGRDb250cm9sKTtcclxuXHRcdGZpZWxkLmZpZWxkQ29udHJvbCA9IGZpZWxkQ29udHJvbDtcclxuXHRcdGZpZWxkLmZpZWxkQ29udHJvbD8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuXHRcdFx0Y29uc3QgdGFyZ2V0VmFsdWUgPSBmaWVsZFV0aWxzLmZyb21GaWVsZFZhbHVlKGZpZWxkLCB2YWx1ZSwgdGhpcy5kYXRlUGlwZSk7XHJcblx0XHRcdGlmIChmaWVsZFV0aWxzLmlzRmFrZWRDaGFuZ2UodGFyZ2V0VmFsdWUsIHRoaXMubW9kZWwoKVtmaWVsZC5rZXkhXSwgZmllbGQpKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuaGFuZGxlVmFsdWVDaGFuZ2UodGFyZ2V0VmFsdWUsIGZpZWxkKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlVmFsdWVDaGFuZ2UodmFsdWU6IGFueSwgZmllbGQ6IEZvcm1GaWVsZCkge1xyXG5cdFx0dGhpcy5tb2RlbCgpW2ZpZWxkLmtleSFdID0gdmFsdWU7XHJcblx0XHR0aGlzLmNoYW5nZWRNb2RlbFtmaWVsZC5rZXkhXSA9IHsgbmFtZTogZmllbGRVdGlscy5sYWJlbChmaWVsZCwgdGhpcy5pMThuU2VydmljZSksIHZhbHVlOiB2YWx1ZSwgdHlwZTogZmllbGQudHlwZSB9O1xyXG5cdFx0dGhpcy5oYW5kbGVVcHNlcnQoZmllbGQua2V5ISwgdmFsdWUpO1xyXG5cdFx0Y29uc29sZS5sb2coJy0tLS0taGFuZGxlVmFsdWVDaGFuZ2UnLCB0aGlzLnVwc2VydCgpKTtcclxuXHRcdHRoaXMuaGFuZGxlSGlkZUV4cHJlc3Npb24oKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZVVwc2VydChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG5cdFx0aWYgKHRoaXMuaXNOZXcpIHtcclxuXHRcdFx0dGhpcy51cHNlcnQoKSEuYWRkRGF0YSFba2V5XSA9IHZhbHVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy51cHNlcnQoKSEudXBkRGF0YSFba2V5XSA9IHZhbHVlO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy51cHNlcnQoKSEubG9nIS5jb250ZW50ID0gZmllbGRVdGlscy50cmFuc0xvZyhcclxuXHRcdFx0dGhpcy5yYXdNb2RlbCxcclxuXHRcdFx0dGhpcy5jaGFuZ2VkTW9kZWwsXHJcblx0XHRcdHRoaXMubW9kZWwoKVt0aGlzLm9wdGlvbnMoKS5tYWluRmllbGQhXSxcclxuXHRcdFx0dGhpcy5pc05ldyxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVIaWRlRXhwcmVzc2lvbigpIHtcclxuXHRcdHRoaXMuZmllbGRMaXN0LmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdGlmIChmaWVsZC5oaWRlRXhwcmVzc2lvbikge1xyXG5cdFx0XHRcdGZpZWxkLmhpZGUgPSBmaWVsZC5oaWRlRXhwcmVzc2lvbih0aGlzLm1vZGVsKCksIGZpZWxkKTtcclxuXHRcdFx0XHRpZiAoZmllbGQuaGlkZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zKCkuZm9ybT8uY29udHJvbHNbZmllbGQua2V5IV0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMub3B0aW9ucygpLmZvcm0/LmNvbnRyb2xzW2ZpZWxkLmtleSFdLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHZhbGlkYXRlKCkge1xyXG5cdFx0Zm9yIChsZXQga2V5IGluIHRoaXMub3B0aW9ucygpLmZvcm0/LmNvbnRyb2xzKSB7XHJcblx0XHRcdCF0aGlzLm9wdGlvbnMoKS5mb3JtPy5jb250cm9sc1trZXldWydkaXNhYmxlZCddICYmIHRoaXMub3B0aW9ucygpLmZvcm0/LmNvbnRyb2xzW2tleV0ubWFya0FzRGlydHkoKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLm9wdGlvbnMoKS5mb3JtPy52YWxpZDtcclxuXHR9XHJcblxyXG5cdHVuaXF1ZUhvb2soZmllbGQ6IEZvcm1GaWVsZCwgaG9vazogT2JzZXJ2YWJsZTwoZmllbGQ/OiBGb3JtRmllbGQpID0+IHZvaWQ+KSB7XHJcblx0XHRmaWVsZC5ob29rID0gaG9vay5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuXHR9XHJcblxyXG5cdHRyaWdnZXJIb29rKCkge1xyXG5cdFx0dGhpcy5maWVsZExpc3QuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHRcdFx0ZmllbGRVdGlscy50cmlnZ2VySG9va0FuZFNldFZhbHVlKFxyXG5cdFx0XHRcdGZpZWxkLFxyXG5cdFx0XHRcdHRoaXMubW9kZWwoKT8uW2ZpZWxkLmtleSFdLFxyXG5cdFx0XHRcdFsndXBsb2FkJywgJ2ltYWdlJywgJ2NvZGVtaXJyb3InLCAncmFkaW8nLCAnc2VsZWN0J10uaW5jbHVkZXMoZmllbGQudHlwZSEpLFxyXG5cdFx0XHRcdHRoaXMuaG9va09ic2VydmVycyxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmhhbmRsZUhpZGVFeHByZXNzaW9uKCk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR0aGlzLmRhdGVQaXBlLFxyXG5cdFx0XHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRyZUNhbGNMYWJlbFNpemUoKSB7XHJcblx0XHRpZiAodGhpcy5vcHRpb25zKCkubGFiZWxXaWR0aCkge1xyXG5cdFx0XHR0aGlzLmxhYmVsTWluV2lkdGguc2V0KHRoaXMub3B0aW9ucygpLmxhYmVsV2lkdGgpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLmxhYmVsTWluV2lkdGguc2V0KHVuZGVmaW5lZCk7XHJcblx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHR0aGlzLmhhbmRsZUZpZWxkTGFiZWxzKCk7XHJcblx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVGaWVsZExhYmVscygpIHtcclxuXHRcdGNvbnN0IGZpZWxkTGFiZWxzOiBFbGVtZW50UmVmW10gPSBbXTtcclxuXHRcdHRoaXMuZ2V0RmllbGRMYWJlbHModGhpcy5maWVsZENvbXBvbmVudHMsIGZpZWxkTGFiZWxzKTtcclxuXHRcdGNvbnN0IG9mZnNldFdpZHRocyA9IGZpZWxkTGFiZWxzLm1hcCgoZmllbGRMYWJlbCkgPT4gZmllbGRMYWJlbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKTtcclxuXHRcdHRoaXMubGFiZWxNaW5XaWR0aC5zZXQoTWF0aC5tYXgoLi4ub2Zmc2V0V2lkdGhzKSArIDE4ICsgJ3B4Jyk7XHJcblx0fVxyXG5cclxuXHRnZXRGaWVsZExhYmVscyhmaWVsZENvbXBvbmVudHM6IFF1ZXJ5TGlzdDxGb3JtRmllbGRDb21wb25lbnQ+IHwgdW5kZWZpbmVkLCBmaWVsZExhYmVsczogRWxlbWVudFJlZltdKSB7XHJcblx0XHRpZiAoIWZpZWxkQ29tcG9uZW50cykge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRmaWVsZENvbXBvbmVudHM/LmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xyXG5cdFx0XHRjb25zdCBmaWVsZExhYmVsID0gY29tcG9uZW50LmdldEZpZWxkTGFiZWwoKTtcclxuXHRcdFx0aWYgKGZpZWxkTGFiZWwpIHtcclxuXHRcdFx0XHRmaWVsZExhYmVscy5wdXNoKGZpZWxkTGFiZWwpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuZ2V0RmllbGRMYWJlbHMoY29tcG9uZW50LmdldEZpZWxkQ29tcG9uZW50cygpLCBmaWVsZExhYmVscyk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHRyaWdnZXJNb2RlbEVmZmVjdChtb2RlbDogYW55KSB7XHJcblx0XHRPYmplY3Qua2V5cyhtb2RlbCkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcblx0XHRcdGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZChrZXkpITtcclxuXHRcdFx0aWYgKCFmaWVsZCkgcmV0dXJuO1xyXG5cdFx0XHRmaWVsZFV0aWxzLnRyaWdnZXJIb29rQW5kU2V0VmFsdWUoXHJcblx0XHRcdFx0ZmllbGQsXHJcblx0XHRcdFx0bW9kZWxba2V5XSxcclxuXHRcdFx0XHRbJ3VwbG9hZCcsICdpbWFnZScsICdjb2RlbWlycm9yJywgJ3JhZGlvJywgJ3NlbGVjdCddLmluY2x1ZGVzKGZpZWxkLnR5cGUhKSxcclxuXHRcdFx0XHR0aGlzLmhvb2tPYnNlcnZlcnMsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVIaWRlRXhwcmVzc2lvbigpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dGhpcy5kYXRlUGlwZSxcclxuXHRcdFx0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0ZmluYWxpemUoKSB7XHJcblx0XHR0aGlzLmZpZWxkTGlzdC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cdFx0XHRpZiAoWydpbWFnZScsICd1cGxvYWQnXS5pbmNsdWRlcyhmaWVsZC50eXBlISkpIHtcclxuXHRcdFx0XHRmaWVsZC5maWVsZENvbnRyb2w/LmFmdGVyU3VibWl0KCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG4iLCJAZm9yIChmaWVsZCBvZiBmaWVsZHMoKTsgdHJhY2sgZmllbGQpIHtcclxuXHQ8Zm9ybS1maWVsZFxyXG5cdFx0Y2xhc3M9XCJ3LWZ1bGxcIlxyXG5cdFx0W2ZpZWxkXT1cImZpZWxkXCI+XHJcblx0PC9mb3JtLWZpZWxkPlxyXG59XHJcbiJdfQ==
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2Zvcm0vZm9ybS9mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZm9ybS9mb3JtL2Zvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixZQUFZLEVBSVosTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsTUFBTSxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFhLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQWMsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTs7O0FBa0I1RCxNQUFNLE9BQU8s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QUFFLGtCQUFrQixDQUFDLGFBQ3JELENBQUMsUUFBUSxDQUFDOzZHQUthLGVBQWU7c0JBQWhELFlBQVk7dUJBQUMsa0JBQWtCO2dCQXdCaEMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdGVmZmVjdCxcclxuXHRpbnB1dCxcclxuXHRjb21wdXRlZCxcclxuXHRWaWV3Q2hpbGRyZW4sXHJcblx0UXVlcnlMaXN0LFxyXG5cdEVsZW1lbnRSZWYsXHJcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0aW5qZWN0LFxyXG5cdEhvc3RMaXN0ZW5lcixcclxuXHR1bnRyYWNrZWQsXHJcblx0c2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1TdWJtaXR0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRmllbGRDb250cm9sIH0gZnJvbSAnLi4vZm9ybS1maWVsZC9maWVsZC1jb250cm9sJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkLCBGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9pMThuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmaWVsZFV0aWxzIH0gZnJvbSAnLi4vZm9ybS1maWVsZC9maWVsZC11dGlscyc7XHJcbmltcG9ydCB7IFVwc2VydCB9IGZyb20gJy4uLy4uL2FtL2FtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlSWQgfSBmcm9tICcuLi8uLi9zaGFyZS91dGlscyc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYWN0aW9uLnNlcnZpY2UnXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybU9wdGlvbnMge1xyXG5cdGZpZWxkcz86IEZvcm1GaWVsZFtdO1xyXG5cdGZvcm0/OiBGb3JtR3JvdXA7XHJcblx0bWFpbkZpZWxkPzogc3RyaW5nO1xyXG5cdGxhYmVsV2lkdGg/OiBzdHJpbmc7XHJcblx0aW50ZXJhY3RpdmVMYWJlbD86IGJvb2xlYW47XHJcblx0ZXh0cmE/OiBhbnk7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnY3VzdG9tLWZvcm0nLFxyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybUZpZWxkQ29tcG9uZW50XSxcclxuXHRwcm92aWRlcnM6IFtEYXRlUGlwZV0sXHJcblx0dGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQge1xyXG5cdEBWaWV3Q2hpbGRyZW4oRm9ybUZpZWxkQ29tcG9uZW50KSBmaWVsZENvbXBvbmVudHM/OiBRdWVyeUxpc3Q8Rm9ybUZpZWxkQ29tcG9uZW50PjtcclxuXHRyb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG5cdGlzTmV3OiBib29sZWFuID0gZmFsc2U7XHJcblx0b3B0aW9ucyA9IGlucHV0PEZvcm1PcHRpb25zPih7fSk7XHJcblx0ZmllbGRzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG5cdFx0dW50cmFja2VkKCgpID0+IHtcclxuXHRcdFx0dGhpcy5pbml0Rm9ybSgpO1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnJlQ2FsY0xhYmVsU2l6ZSgpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHRoaXMub3B0aW9ucygpLmZpZWxkcztcclxuXHR9KTtcclxuXHJcblx0aTE4blNlcnZpY2UgPSBpbmplY3QoSTE4blNlcnZpY2UpO1xyXG5cdG1vZGVsID0gaW5wdXQ8YW55PigpO1xyXG5cdHVwc2VydCA9IGlucHV0PFVwc2VydD4oKTtcclxuXHRyYXdNb2RlbDogYW55ID0ge307XHJcblx0Y2hhbmdlZE1vZGVsOiBhbnkgPSB7fTtcclxuXHRmaWVsZExpc3QhOiBGb3JtRmllbGRbXTtcclxuXHRob29rT2JzZXJ2ZXJzOiBGdW5jdGlvbltdID0gW107XHJcblx0bGFiZWxNaW5XaWR0aCA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblx0YWN0aW9ucyA9IGluamVjdChBY3Rpb25TZXJ2aWNlKVxyXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG5cdG9uUmVzaXplKCkge1xyXG5cdFx0dGhpcy5yZUNhbGNMYWJlbFNpemUoKTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0cHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcblx0KSB7XHJcblx0XHR0aGlzLnJvdXRlci51cmwuc3BsaXQoJy8nKS5wb3AoKSA9PSAnbmV3JyAmJiAodGhpcy5pc05ldyA9IHRydWUpO1xyXG5cdFx0ZWZmZWN0KFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLm1vZGVsKCkpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8g6buY6K6k5YC85LuF5Zyo6KGo5Y2V5paw5bu65pe255Sf5pWIXHJcblx0XHRcdFx0aWYgKHRoaXMuaXNOZXcpIHtcclxuXHRcdFx0XHRcdHRoaXMuZmllbGRMaXN0LmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICghZmllbGQuZGVmYXVsdCkgcmV0dXJuO1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5tb2RlbCgpW2ZpZWxkLmtleSFdICE9PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHRcdFx0XHRcdFx0dW50cmFja2VkKCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlKGZpZWxkLmRlZmF1bHQsIGZpZWxkKTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5yYXdNb2RlbCA9IHsgLi4udGhpcy5tb2RlbCgpIH07XHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VkTW9kZWwgPSB7fTtcclxuXHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4gdGhpcy50cmlnZ2VySG9vaygpKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHR0aGlzLnJlQ2FsY0xhYmVsU2l6ZSgpO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmkxOG5TZXJ2aWNlLmNoYW5nZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG5cdFx0XHR0aGlzLnJlQ2FsY0xhYmVsU2l6ZSgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpIHtcclxuXHRcdHRoaXMuaG9va09ic2VydmVycy5mb3JFYWNoKCh1bnN1YnNjcmliZSkgPT4gdW5zdWJzY3JpYmUoKSk7XHJcblx0fVxyXG5cclxuXHRpbml0Rm9ybSgpIHtcclxuXHRcdGlmICghdGhpcy5vcHRpb25zKCkuZXh0cmEpIHtcclxuXHRcdFx0dGhpcy5vcHRpb25zKCkuZXh0cmEgPSB7fTtcclxuXHRcdH1cclxuXHRcdGlmICghdGhpcy5vcHRpb25zKCkuZm9ybSkge1xyXG5cdFx0XHR0aGlzLm9wdGlvbnMoKS5mb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLmZpZWxkTGlzdCA9IFtdO1xyXG5cdFx0dGhpcy5wYXJzZUZpZWxkcyh0aGlzLm9wdGlvbnMoKS5maWVsZHMgfHwgW10pO1xyXG5cdFx0dGhpcy5maWVsZExpc3QuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHRcdFx0ZmllbGQudXVpZCA9IGdlbmVyYXRlVW5pcXVlSWQoKTtcclxuXHRcdFx0ZmllbGQubGFiZWxNaW5XaWR0aCA9IHRoaXMubGFiZWxNaW5XaWR0aDtcclxuXHRcdFx0ZmllbGQuaW50ZXJhY3RpdmVMYWJlbCA9IHRoaXMub3B0aW9ucygpLmludGVyYWN0aXZlTGFiZWwgPz8gdHJ1ZTtcclxuXHRcdFx0ZmllbGQuZm9ybSA9IHRoaXM7XHJcblx0XHRcdGlmKGlzT2JzZXJ2YWJsZShmaWVsZC5ob29rKSApe1xyXG5cdFx0XHRcdHRoaXMudW5pcXVlSG9vayhmaWVsZCwgZmllbGQuaG9vayk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5oYW5kbGVGaWVsZENvbnRyb2woZmllbGQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRnZXRGaWVsZChrZXk6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmllbGRMaXN0LmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5rZXkgPT09IGtleSk7XHJcblx0fVxyXG5cclxuXHRwYXJzZUZpZWxkcyhmaWVsZHM6IEZvcm1GaWVsZFtdKSB7XHJcblx0XHRmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHRcdFx0aWYgKGZpZWxkLmdyb3VwKSB7XHJcblx0XHRcdFx0dGhpcy5wYXJzZUZpZWxkcyhmaWVsZC5ncm91cCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5maWVsZExpc3QucHVzaChmaWVsZCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRmllbGRDb250cm9sKGZpZWxkOiBGb3JtRmllbGQpIHtcclxuXHRcdGNvbnN0IGZpZWxkQ29udHJvbCA9IGZpZWxkVXRpbHMucHJvcHMoZmllbGQpLnJlcXVpcmVkXHJcblx0XHRcdD8gbmV3IEZpZWxkQ29udHJvbChudWxsLCBmaWVsZC52YWxpZGF0b3JzID8gZmllbGQudmFsaWRhdG9ycyA6IFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcblx0XHRcdDogbmV3IEZpZWxkQ29udHJvbChudWxsKTtcclxuXHRcdHRoaXMub3B0aW9ucygpLmZvcm0/LmFkZENvbnRyb2woZmllbGQua2V5IHx8ICcnLCBmaWVsZENvbnRyb2wpO1xyXG5cdFx0ZmllbGQuZmllbGRDb250cm9sID0gZmllbGRDb250cm9sO1xyXG5cdFx0ZmllbGQuZmllbGRDb250cm9sPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRjb25zdCB0YXJnZXRWYWx1ZSA9IGZpZWxkVXRpbHMuZnJvbUZpZWxkVmFsdWUoZmllbGQsIHZhbHVlLCB0aGlzLmRhdGVQaXBlKTtcclxuXHRcdFx0aWYgKGZpZWxkVXRpbHMuaXNGYWtlZENoYW5nZSh0YXJnZXRWYWx1ZSwgdGhpcy5tb2RlbCgpW2ZpZWxkLmtleSFdLCBmaWVsZCkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5oYW5kbGVWYWx1ZUNoYW5nZSh0YXJnZXRWYWx1ZSwgZmllbGQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVWYWx1ZUNoYW5nZSh2YWx1ZTogYW55LCBmaWVsZDogRm9ybUZpZWxkKSB7XHJcblx0XHR0aGlzLm1vZGVsKClbZmllbGQua2V5IV0gPSB2YWx1ZTtcclxuXHRcdHRoaXMuY2hhbmdlZE1vZGVsW2ZpZWxkLmtleSFdID0geyBuYW1lOiBmaWVsZFV0aWxzLmxhYmVsKGZpZWxkLCB0aGlzLmkxOG5TZXJ2aWNlKSwgdmFsdWU6IHZhbHVlLCB0eXBlOiBmaWVsZC50eXBlIH07XHJcblx0XHR0aGlzLmhhbmRsZVVwc2VydChmaWVsZC5rZXkhLCB2YWx1ZSk7XHJcblx0XHRjb25zb2xlLmxvZygnLS0tLS1oYW5kbGVWYWx1ZUNoYW5nZScsIHRoaXMudXBzZXJ0KCkpO1xyXG5cdFx0dGhpcy5oYW5kbGVIaWRlRXhwcmVzc2lvbigpO1xyXG5cdFx0dGhpcy5hY3Rpb25zLnNhdmVTaWduYWwuc2V0KHRydWUpXHJcblx0fVxyXG5cclxuXHRoYW5kbGVVcHNlcnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuXHRcdGlmICh0aGlzLmlzTmV3KSB7XHJcblx0XHRcdHRoaXMudXBzZXJ0KCkhLmFkZERhdGEhW2tleV0gPSB2YWx1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMudXBzZXJ0KCkhLnVwZERhdGEhW2tleV0gPSB2YWx1ZTtcclxuXHRcdH1cclxuXHRcdHRoaXMudXBzZXJ0KCkhLmxvZyEuY29udGVudCA9IGZpZWxkVXRpbHMudHJhbnNMb2coXHJcblx0XHRcdHRoaXMucmF3TW9kZWwsXHJcblx0XHRcdHRoaXMuY2hhbmdlZE1vZGVsLFxyXG5cdFx0XHR0aGlzLm1vZGVsKClbdGhpcy5vcHRpb25zKCkubWFpbkZpZWxkIV0sXHJcblx0XHRcdHRoaXMuaXNOZXcsXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlSGlkZUV4cHJlc3Npb24oKSB7XHJcblx0XHR0aGlzLmZpZWxkTGlzdC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cdFx0XHRpZiAoZmllbGQuaGlkZUV4cHJlc3Npb24pIHtcclxuXHRcdFx0XHRmaWVsZC5oaWRlID0gZmllbGQuaGlkZUV4cHJlc3Npb24odGhpcy5tb2RlbCgpLCBmaWVsZCk7XHJcblx0XHRcdFx0aWYgKGZpZWxkLmhpZGUpIHtcclxuXHRcdFx0XHRcdHRoaXMub3B0aW9ucygpLmZvcm0/LmNvbnRyb2xzW2ZpZWxkLmtleSFdLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMoKS5mb3JtPy5jb250cm9sc1tmaWVsZC5rZXkhXS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHR2YWxpZGF0ZSgpIHtcclxuXHRcdGZvciAobGV0IGtleSBpbiB0aGlzLm9wdGlvbnMoKS5mb3JtPy5jb250cm9scykge1xyXG5cdFx0XHQhdGhpcy5vcHRpb25zKCkuZm9ybT8uY29udHJvbHNba2V5XVsnZGlzYWJsZWQnXSAmJiB0aGlzLm9wdGlvbnMoKS5mb3JtPy5jb250cm9sc1trZXldLm1hcmtBc0RpcnR5KCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zKCkuZm9ybT8udmFsaWQ7XHJcblx0fVxyXG5cclxuXHR1bmlxdWVIb29rKGZpZWxkOiBGb3JtRmllbGQsIGhvb2s6IE9ic2VydmFibGU8KGZpZWxkPzogRm9ybUZpZWxkKSA9PiB2b2lkPikge1xyXG5cdFx0ZmllbGQuaG9vayA9IGhvb2sucGlwZShzaGFyZVJlcGxheSgxKSk7XHJcblx0fVxyXG5cclxuXHR0cmlnZ2VySG9vaygpIHtcclxuXHRcdHRoaXMuZmllbGRMaXN0LmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdGZpZWxkVXRpbHMudHJpZ2dlckhvb2tBbmRTZXRWYWx1ZShcclxuXHRcdFx0XHRmaWVsZCxcclxuXHRcdFx0XHR0aGlzLm1vZGVsKCk/LltmaWVsZC5rZXkhXSxcclxuXHRcdFx0XHRbJ3VwbG9hZCcsICdpbWFnZScsICdjb2RlbWlycm9yJywgJ3JhZGlvJywgJ3NlbGVjdCddLmluY2x1ZGVzKGZpZWxkLnR5cGUhKSxcclxuXHRcdFx0XHR0aGlzLmhvb2tPYnNlcnZlcnMsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVIaWRlRXhwcmVzc2lvbigpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dGhpcy5kYXRlUGlwZSxcclxuXHRcdFx0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cmVDYWxjTGFiZWxTaXplKCkge1xyXG5cdFx0aWYgKHRoaXMub3B0aW9ucygpLmxhYmVsV2lkdGgpIHtcclxuXHRcdFx0dGhpcy5sYWJlbE1pbldpZHRoLnNldCh0aGlzLm9wdGlvbnMoKS5sYWJlbFdpZHRoKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5sYWJlbE1pbldpZHRoLnNldCh1bmRlZmluZWQpO1xyXG5cdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0dGhpcy5oYW5kbGVGaWVsZExhYmVscygpO1xyXG5cdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRmllbGRMYWJlbHMoKSB7XHJcblx0XHRjb25zdCBmaWVsZExhYmVsczogRWxlbWVudFJlZltdID0gW107XHJcblx0XHR0aGlzLmdldEZpZWxkTGFiZWxzKHRoaXMuZmllbGRDb21wb25lbnRzLCBmaWVsZExhYmVscyk7XHJcblx0XHRjb25zdCBvZmZzZXRXaWR0aHMgPSBmaWVsZExhYmVscy5tYXAoKGZpZWxkTGFiZWwpID0+IGZpZWxkTGFiZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCk7XHJcblx0XHR0aGlzLmxhYmVsTWluV2lkdGguc2V0KE1hdGgubWF4KC4uLm9mZnNldFdpZHRocykgKyAxOCArICdweCcpO1xyXG5cdH1cclxuXHJcblx0Z2V0RmllbGRMYWJlbHMoZmllbGRDb21wb25lbnRzOiBRdWVyeUxpc3Q8Rm9ybUZpZWxkQ29tcG9uZW50PiB8IHVuZGVmaW5lZCwgZmllbGRMYWJlbHM6IEVsZW1lbnRSZWZbXSkge1xyXG5cdFx0aWYgKCFmaWVsZENvbXBvbmVudHMpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0ZmllbGRDb21wb25lbnRzPy5mb3JFYWNoKChjb21wb25lbnQpID0+IHtcclxuXHRcdFx0Y29uc3QgZmllbGRMYWJlbCA9IGNvbXBvbmVudC5nZXRGaWVsZExhYmVsKCk7XHJcblx0XHRcdGlmIChmaWVsZExhYmVsKSB7XHJcblx0XHRcdFx0ZmllbGRMYWJlbHMucHVzaChmaWVsZExhYmVsKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmdldEZpZWxkTGFiZWxzKGNvbXBvbmVudC5nZXRGaWVsZENvbXBvbmVudHMoKSwgZmllbGRMYWJlbHMpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHR0cmlnZ2VyTW9kZWxFZmZlY3QobW9kZWw6IGFueSkge1xyXG5cdFx0T2JqZWN0LmtleXMobW9kZWwpLmZvckVhY2goKGtleSkgPT4ge1xyXG5cdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuZ2V0RmllbGQoa2V5KSE7XHJcblx0XHRcdGlmICghZmllbGQpIHJldHVybjtcclxuXHRcdFx0ZmllbGRVdGlscy50cmlnZ2VySG9va0FuZFNldFZhbHVlKFxyXG5cdFx0XHRcdGZpZWxkLFxyXG5cdFx0XHRcdG1vZGVsW2tleV0sXHJcblx0XHRcdFx0Wyd1cGxvYWQnLCAnaW1hZ2UnLCAnY29kZW1pcnJvcicsICdyYWRpbycsICdzZWxlY3QnXS5pbmNsdWRlcyhmaWVsZC50eXBlISksXHJcblx0XHRcdFx0dGhpcy5ob29rT2JzZXJ2ZXJzLFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuaGFuZGxlSGlkZUV4cHJlc3Npb24oKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHRoaXMuZGF0ZVBpcGUsXHJcblx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGZpbmFsaXplKCkge1xyXG5cdFx0dGhpcy5maWVsZExpc3QuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHRcdFx0aWYgKFsnaW1hZ2UnLCAndXBsb2FkJ10uaW5jbHVkZXMoZmllbGQudHlwZSEpKSB7XHJcblx0XHRcdFx0ZmllbGQuZmllbGRDb250cm9sPy5hZnRlclN1Ym1pdCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIiwiQGZvciAoZmllbGQgb2YgZmllbGRzKCk7IHRyYWNrIGZpZWxkKSB7XHJcblx0PGZvcm0tZmllbGRcclxuXHRcdGNsYXNzPVwidy1mdWxsXCJcclxuXHRcdFtmaWVsZF09XCJmaWVsZFwiPlxyXG5cdDwvZm9ybS1maWVsZD5cclxufVxyXG4iXX0=