qqsl-agent 0.0.4 → 0.0.6

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.
@@ -27,6 +27,6 @@ import * as i25 from "@angular/forms";
27
27
  import * as i26 from "./pipes/markdown.pipe";
28
28
  export declare class AgentChatModule {
29
29
  static ɵfac: i0.ɵɵFactoryDeclaration<AgentChatModule, never>;
30
- static ɵmod: i0.ɵɵNgModuleDeclaration<AgentChatModule, [typeof i1.NgxAgentChatComponent, typeof i2.ChatInputComponent, typeof i3.ChatMessagesComponent, typeof i4.ChatSidebarComponent, typeof i5.SimplePaginationComponent, typeof i6.HistoryGroupComponent, typeof i7.FloatingChatComponent], [typeof i8.CommonModule, typeof i9.NzAvatarModule, typeof i10.NzSpinModule, typeof i11.NzTagModule, typeof i12.NzInputModule, typeof i13.NzButtonModule, typeof i14.NzListModule, typeof i15.NzSliderModule, typeof i16.NzLayoutModule, typeof i17.NzPopoverModule, typeof i18.NzRadioModule, typeof i19.NzCheckboxModule, typeof i20.NzIconModule, typeof i21.NzPaginationModule, typeof i22.NzStepsModule, typeof i23.NzSelectModule, typeof i24.NzTreeSelectModule, typeof i25.FormsModule, typeof i26.MarkdownPipe], [typeof i1.NgxAgentChatComponent, typeof i7.FloatingChatComponent, typeof i7.FloatingChatComponent]>;
30
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AgentChatModule, [typeof i1.NgxAgentChatComponent, typeof i2.ChatInputComponent, typeof i3.ChatMessagesComponent, typeof i4.ChatSidebarComponent, typeof i5.SimplePaginationComponent, typeof i6.HistoryGroupComponent, typeof i7.FloatingChatComponent], [typeof i8.CommonModule, typeof i9.NzAvatarModule, typeof i10.NzSpinModule, typeof i11.NzTagModule, typeof i12.NzInputModule, typeof i13.NzButtonModule, typeof i14.NzListModule, typeof i15.NzSliderModule, typeof i16.NzLayoutModule, typeof i17.NzPopoverModule, typeof i18.NzRadioModule, typeof i19.NzCheckboxModule, typeof i20.NzIconModule, typeof i21.NzPaginationModule, typeof i22.NzStepsModule, typeof i23.NzSelectModule, typeof i24.NzTreeSelectModule, typeof i25.FormsModule, typeof i26.MarkdownPipe], [typeof i1.NgxAgentChatComponent, typeof i7.FloatingChatComponent]>;
31
31
  static ɵinj: i0.ɵɵInjectorDeclaration<AgentChatModule>;
32
32
  }
@@ -198,10 +198,10 @@ export class ChatInputComponent {
198
198
  }
199
199
  }
200
200
  ChatInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChatInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
201
- ChatInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ChatInputComponent, selector: "ngx-chat-input", inputs: { messages: "messages", mode: "mode" }, outputs: { sendMessage: "sendMessage", messageChange: "messageChange", enter: "enter", paste: "paste" }, viewQueries: [{ propertyName: "editor", first: true, predicate: ["editorRef"], descendants: true }, { propertyName: "chatInputWrapper", first: true, predicate: ["chatInputWrapper"], descendants: true }], ngImport: i0, template: "<!-- \u65B0\u804A\u5929\u4F4D\u4E8E\u5C4F\u5E55\u4E2D\u95F4\uFF0C\u53D1\u9001\u6D88\u606F\u4E4B\u540E\u4F4D\u4E8E\u5E95\u90E8 -->\n<div\n class=\"chat-input-wrapper\"\n #chatInputWrapper\n [class.center]=\"!messages.length\"\n [ngStyle]=\"{ 'padding-bottom': mode === 'full' ? '40px' : '10px' }\"\n>\n <div class=\"new-chat-title\" *ngIf=\"!messages.length\">\n <img src=\"/assets/images/logo.png\" />\n <span>\u4F60\u597D\uFF0C\u6709\u4EC0\u4E48\u53EF\u4EE5\u5E2E\u5230\u4F60\uFF1F\u5F00\u59CB\u5BF9\u8BDD\u5427</span>\n </div>\n <div class=\"chat-input\">\n <div\n #editorRef\n class=\"input-creative-editor\"\n contenteditable=\"true\"\n spellcheck=\"false\"\n data-placeholder=\"\u8BF7\u8F93\u5165\u5E76\u53D1\u9001\u6D88\u606F\"\n [attr.data-empty]=\"isEmpty\"\n (input)=\"handleInput()\"\n (keydown.enter)=\"handleEnter($event)\"\n (paste)=\"handlePaste($event)\"\n ></div>\n <div class=\"input-bottom\">\n <div class=\"input-tools\">\n <div class=\"select-tool\" [ngClass]=\"{ 'select-tool-active': deepThink }\" (click)=\"toggleDeepThink()\">\n <svg\n t=\"1764131026949\"\n style=\"width: 14px; height: 14px\"\n class=\"icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"5012\"\n width=\"64\"\n height=\"64\"\n >\n <path\n d=\"M903.36 512a795.52 795.52 0 0 1 65.536 136.704c48 132.16 39.616 230.528-25.024 295.168-64.64 64.64-163.008 72.96-295.168 24.96A795.52 795.52 0 0 1 512 903.424a795.52 795.52 0 0 1-136.704 65.536c-132.096 48-230.528 39.616-295.168-25.024-64.64-64.64-72.96-163.008-24.96-295.104 16.64-46.016 38.528-91.52 65.536-136.768A795.52 795.52 0 0 1 55.04 375.232C7.04 243.2 15.36 144.768 80 80.128 144.768 15.488 243.2 7.168 375.296 55.04c46.016 16.64 91.584 38.528 136.768 65.536A795.52 795.52 0 0 1 648.768 55.104c132.096-48 230.464-39.616 295.104 25.024 64.64 64.64 72.96 163.008 25.024 295.104A795.52 795.52 0 0 1 903.36 512z m-53.12-79.424c15.168-28.736 27.968-57.536 38.464-86.4 35.584-98.112 33.92-166.656-5.12-205.696-39.04-39.04-107.648-40.768-205.696-5.12a685.44 685.44 0 0 0-86.4 38.4 1240.96 1240.96 0 0 1 138.432 120.32 1240.832 1240.832 0 0 1 120.32 138.496zM432.576 173.824a685.44 685.44 0 0 0-86.4-38.528c-98.112-35.584-166.656-33.92-205.696 5.12-39.04 39.04-40.768 107.648-5.12 205.696 10.432 28.928 23.296 57.728 38.4 86.4a1240.896 1240.896 0 0 1 120.32-138.432 1240.832 1240.832 0 0 1 138.496-120.32zM173.824 591.488a685.44 685.44 0 0 0-38.464 86.4c-35.648 98.048-33.92 166.592 5.12 205.632 39.04 39.04 107.584 40.768 205.696 5.12a685.44 685.44 0 0 0 86.4-38.4 1240.768 1240.768 0 0 1-138.496-120.32 1240.96 1240.96 0 0 1-120.256-138.432z m495.744 78.08A1112.064 1112.064 0 0 0 802.048 512a1112.064 1112.064 0 0 0-132.48-157.568A1112.128 1112.128 0 0 0 512 221.952a1112.128 1112.128 0 0 0-157.504 132.48A1112.064 1112.064 0 0 0 222.016 512a1112.192 1112.192 0 0 0 132.416 157.568A1112.064 1112.064 0 0 0 512 802.048a1112.128 1112.128 0 0 0 157.568-132.48z m-78.08 180.608c28.672 15.168 57.472 28.032 86.4 38.464 98.048 35.648 166.592 33.92 205.632-5.12 39.04-39.04 40.768-107.584 5.12-205.696a685.504 685.504 0 0 0-38.4-86.4 1240.832 1240.832 0 0 1-120.32 138.496 1240.96 1240.96 0 0 1-138.432 120.32zM585.088 512a73.152 73.152 0 1 1-146.24 0 73.152 73.152 0 0 1 146.304 0z\"\n fill=\"currentColor\"\n p-id=\"5013\"\n ></path>\n </svg>\n \u6DF1\u5EA6\u601D\u8003\n </div>\n <div\n class=\"select-tool\"\n nz-popover\n [nzPopoverContent]=\"modelListContent\"\n nzPopoverTrigger=\"click\"\n nzPopoverOverlayClassName=\"params-select-popover\"\n [nzPopoverVisible]=\"modelPopoverVisible\"\n (nzPopoverVisibleChange)=\"modelVisibleChange($event)\"\n >\n <img src=\"/assets/images/input/toggle-model.png\" style=\"width: 12px; height: 12px\" />\n {{ currentModel ? currentModel?.name : '\u9009\u62E9\u6A21\u578B' }}\n </div>\n <div\n class=\"select-tool\"\n nz-popover\n [nzPopoverContent]=\"knowledgeListContent\"\n nzPopoverTrigger=\"click\"\n nzPopoverOverlayClassName=\"params-select-popover\"\n [nzPopoverVisible]=\"knowledgePopoverVisible\"\n (nzPopoverVisibleChange)=\"knowledgeVisibleChange($event)\"\n >\n <img src=\"/assets/images/input/relate.png\" style=\"width: 14px; height: 8px\" />\n \u5173\u8054\u77E5\u8BC6\u5E93\n </div>\n </div>\n <img class=\"send\" src=\"/assets/images/input/send.png\" (click)=\"send()\" [hidden]=\"sseService.loading$ | async\" />\n <div class=\"send-loading\" *ngIf=\"sseService.loading$ | async\">\n <div class=\"send-loading-inner\">\n <svg viewBox=\"0 0 36 36\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" data-icon=\"spin\">\n <defs>\n <linearGradient x1=\"0%\" y1=\"100%\" x2=\"100%\" y2=\"100%\" id=\"linearGradient-1\">\n <stop stop-color=\"currentColor\" stop-opacity=\"0\" offset=\"0%\"></stop>\n <stop stop-color=\"currentColor\" stop-opacity=\"0.50\" offset=\"39.9430698%\"></stop>\n <stop stop-color=\"currentColor\" offset=\"100%\"></stop>\n </linearGradient>\n </defs>\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <rect fill-opacity=\"0.01\" fill=\"none\" x=\"0\" y=\"0\" width=\"36\" height=\"36\"></rect>\n <path\n d=\"M34,18 C34,9.163444 26.836556,2 18,2 C11.6597233,2 6.18078805,5.68784135 3.59122325,11.0354951\"\n stroke=\"url(#linearGradient-1)\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n ></path>\n </g>\n </svg>\n </div>\n </div>\n <!-- <img class=\"send\" src=\"/assets/images/input/send-gray.png\" /> -->\n </div>\n </div>\n <div class=\"chat-input-backdrop\"></div>\n</div>\n\n<ng-template #modelListContent>\n <div style=\"width: 200px\">\n <div class=\"select-title\">\n \u5207\u6362\u6A21\u578B\n <i nz-icon nzType=\"close\" style=\"color: #999\" (click)=\"modelVisibleChange(false)\"></i>\n </div>\n <div class=\"select-content\">\n <nz-radio-group [(ngModel)]=\"currentModel\">\n <label\n nz-radio\n [nzValue]=\"item\"\n [style.margin-top.px]=\"i === 0 ? 0 : 10\"\n *ngFor=\"let item of modelList; let i = index\"\n >\n {{ item.name }}\n </label>\n </nz-radio-group>\n </div>\n </div>\n</ng-template>\n\n<ng-template #knowledgeListContent>\n <div style=\"width: 250px\">\n <div class=\"select-title\">\n \u5173\u8054\u77E5\u8BC6\u5E93\n <i nz-icon nzType=\"close\" style=\"color: #999\" (click)=\"knowledgeVisibleChange(false)\"></i>\n </div>\n <div class=\"select-content\">\n <nz-steps [nzCurrent]=\"knowledgeStepIndex\" nzProgressDot nzDirection=\"vertical\" nzSize=\"small\">\n <nz-step nzTitle=\"\u9009\u62E9\u5206\u7C7B\" [nzDescription]=\"typeSelectTpl\">\n <ng-template #typeSelectTpl>\n <nz-select\n [(ngModel)]=\"selectedTypes\"\n nzMode=\"multiple\"\n style=\"width: 100%\"\n (ngModelChange)=\"onTypeChange($event)\"\n nzPlaceHolder=\"\u8BF7\u9009\u62E9\u5206\u7C7B\"\n >\n <nz-option [nzValue]=\"item.type\" [nzLabel]=\"item.typeC\" *ngFor=\"let item of typesData\"></nz-option>\n </nz-select>\n </ng-template>\n </nz-step>\n <nz-step nzTitle=\"\u641C\u7D22\u9009\u62E9\u76EE\u5F55\" [nzDescription]=\"categorySelectTpl\">\n <ng-template #categorySelectTpl>\n <nz-tree-select\n style=\"width: 100%\"\n [(ngModel)]=\"selectedCategories\"\n [nzNodes]=\"categoriesData\"\n (ngModelChange)=\"onCategoryChange($event)\"\n nzCheckStrictly\n nzShowSearch\n nzCheckable\n nzPlaceHolder=\"\u8BF7\u9009\u62E9\u76EE\u5F55\"\n ></nz-tree-select>\n </ng-template>\n </nz-step>\n <nz-step nzTitle=\"\u9009\u62E9\u6807\u7B7E\" [nzDescription]=\"tagSelectTpl\">\n <ng-template #tagSelectTpl>\n <nz-select\n [(ngModel)]=\"selectedTags\"\n nzMode=\"multiple\"\n nzPlaceHolder=\"\u8BF7\u9009\u62E9\u6807\u7B7E\"\n style=\"width: 100%\"\n (ngModelChange)=\"onTagChange($event)\"\n >\n <nz-option-group [nzLabel]=\"item.name\" *ngFor=\"let item of tagsData\">\n <nz-option\n [nzValue]=\"child.iCode\"\n [nzLabel]=\"child.name\"\n *ngFor=\"let child of item.children\"\n ></nz-option>\n </nz-option-group>\n </nz-select>\n </ng-template>\n </nz-step>\n </nz-steps>\n </div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{width:100%;container-type:inline-size;container-name:chat-container}.chat-input-wrapper{position:absolute;bottom:0;left:0;right:0;max-width:800px;min-width:350px;margin:0 auto;padding-bottom:40px}@container chat-container (max-width: 1000px){.chat-input-wrapper{max-width:90%}}.chat-input-wrapper.center{bottom:50%;transform:translateY(50%)}.new-chat-title{display:flex;align-items:center;justify-content:center;padding-bottom:40px;text-align:center;font-weight:500;font-size:24px;color:#000}.new-chat-title img{width:40px;height:32px;margin-right:12px;margin-top:-6px}.chat-input{position:relative;display:flex;flex-direction:column;justify-content:space-between;padding:20px 18px;margin:0 auto;background:#FFFFFF;box-shadow:0 2px 8px #0000001a;border-radius:20px;border:1px solid #D9DADB;z-index:30}.chat-input .input-creative-editor{min-height:60px;max-height:300px;overflow-y:auto;outline:none;box-shadow:none;border:none}.chat-input .input-creative-editor[data-empty=true]:before{content:attr(data-placeholder);color:#9a9b9b}.chat-input .input-bottom{padding-top:16px;display:flex;align-items:center;justify-content:space-between;-webkit-user-select:none;user-select:none}.chat-input .input-bottom .input-tools{display:flex;align-items:center;gap:10px}.chat-input .input-bottom .select-tool{display:flex;align-items:center;justify-content:center;height:36px;padding:0 12px;gap:12px;background:#FFFFFF;border-radius:12px;border:1px solid #DBDCE0;cursor:pointer}.chat-input .input-bottom .select-tool-active{border-color:#b7c8fe;color:#3964fe;background:#edf3fe}.chat-input .input-bottom .send{width:32px;height:32px}::ng-deep .params-select-popover .ant-popover-inner{border-radius:10px}::ng-deep .params-select-popover .select-title{display:flex;align-items:center;justify-content:center;position:relative}::ng-deep .params-select-popover .select-title i{position:absolute;right:0;top:3px;cursor:pointer}::ng-deep .params-select-popover .select-content{max-height:400px;padding:16px 0 16px 1px;overflow-y:auto}.chat-input-backdrop{position:absolute;bottom:0;left:0;width:100%;height:100px;z-index:10;background-image:linear-gradient(to bottom,hsl(0,0%,99%),hsla(0,0%,99%,.8))}.send-loading{min-width:34px;height:34px;border-radius:50%;margin-top:auto;display:flex;flex-shrink:0;align-items:center;flex-direction:column;justify-content:center;cursor:not-allowed;white-space:nowrap;color:#fff;background:#3964fe;transition:background .2s;opacity:.4}.send-loading-inner{width:16px;height:16px}.send-loading svg{will-change:transform;animation:.6s linear infinite send-loading}@keyframes send-loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i3.NzPopoverDirective, selector: "[nz-popover]", inputs: ["nzPopoverArrowPointAtCenter", "nzPopoverTitle", "nzPopoverContent", "nz-popover", "nzPopoverTrigger", "nzPopoverPlacement", "nzPopoverOrigin", "nzPopoverVisible", "nzPopoverMouseEnterDelay", "nzPopoverMouseLeaveDelay", "nzPopoverOverlayClassName", "nzPopoverOverlayStyle", "nzPopoverBackdrop"], outputs: ["nzPopoverVisibleChange"], exportAs: ["nzPopover"] }, { kind: "component", type: i4.NzRadioComponent, selector: "[nz-radio],[nz-radio-button]", inputs: ["nzValue", "nzDisabled", "nzAutoFocus"], exportAs: ["nzRadio"] }, { kind: "component", type: i4.NzRadioGroupComponent, selector: "nz-radio-group", inputs: ["nzDisabled", "nzButtonStyle", "nzSize", "nzName"], exportAs: ["nzRadioGroup"] }, { kind: "directive", type: i5.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i6.NzStepsComponent, selector: "nz-steps", inputs: ["nzCurrent", "nzDirection", "nzLabelPlacement", "nzType", "nzSize", "nzStartIndex", "nzStatus", "nzProgressDot"], outputs: ["nzIndexChange"], exportAs: ["nzSteps"] }, { kind: "component", type: i6.NzStepComponent, selector: "nz-step", inputs: ["nzTitle", "nzSubtitle", "nzDescription", "nzDisabled", "nzPercentage", "nzSize", "nzStatus", "nzIcon"], exportAs: ["nzStep"] }, { kind: "component", type: i7.NzOptionComponent, selector: "nz-option", inputs: ["nzLabel", "nzValue", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i7.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "component", type: i7.NzOptionGroupComponent, selector: "nz-option-group", inputs: ["nzLabel"], exportAs: ["nzOptionGroup"] }, { kind: "component", type: i8.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzPlacement", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckBoxChange"], exportAs: ["nzTreeSelect"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
201
+ ChatInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ChatInputComponent, selector: "ngx-chat-input", inputs: { messages: "messages", mode: "mode" }, outputs: { sendMessage: "sendMessage", messageChange: "messageChange", enter: "enter", paste: "paste" }, viewQueries: [{ propertyName: "editor", first: true, predicate: ["editorRef"], descendants: true }, { propertyName: "chatInputWrapper", first: true, predicate: ["chatInputWrapper"], descendants: true }], ngImport: i0, template: "<!-- \u65B0\u804A\u5929\u4F4D\u4E8E\u5C4F\u5E55\u4E2D\u95F4\uFF0C\u53D1\u9001\u6D88\u606F\u4E4B\u540E\u4F4D\u4E8E\u5E95\u90E8 -->\n<div\n class=\"chat-input-wrapper\"\n #chatInputWrapper\n [class.center]=\"!messages.length\"\n [ngStyle]=\"{ 'padding-bottom': mode === 'full' ? '40px' : '10px' }\"\n>\n <div class=\"new-chat-title\" *ngIf=\"!messages.length\">\n <img src=\"/assets/images/logo.png\" />\n <span>\u4F60\u597D\uFF0C\u6709\u4EC0\u4E48\u53EF\u4EE5\u5E2E\u5230\u4F60\uFF1F\u5F00\u59CB\u5BF9\u8BDD\u5427</span>\n </div>\n <div class=\"chat-input\">\n <div\n #editorRef\n class=\"input-creative-editor\"\n contenteditable=\"true\"\n spellcheck=\"false\"\n data-placeholder=\"\u8BF7\u8F93\u5165\u5E76\u53D1\u9001\u6D88\u606F\"\n [attr.data-empty]=\"isEmpty\"\n (input)=\"handleInput()\"\n (keydown.enter)=\"handleEnter($event)\"\n (paste)=\"handlePaste($event)\"\n ></div>\n <div class=\"input-bottom\">\n <div class=\"input-tools\">\n <div class=\"select-tool\" [ngClass]=\"{ 'select-tool-active': deepThink }\" (click)=\"toggleDeepThink()\">\n <svg\n t=\"1764131026949\"\n style=\"width: 14px; height: 14px\"\n class=\"icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"5012\"\n width=\"64\"\n height=\"64\"\n >\n <path\n d=\"M903.36 512a795.52 795.52 0 0 1 65.536 136.704c48 132.16 39.616 230.528-25.024 295.168-64.64 64.64-163.008 72.96-295.168 24.96A795.52 795.52 0 0 1 512 903.424a795.52 795.52 0 0 1-136.704 65.536c-132.096 48-230.528 39.616-295.168-25.024-64.64-64.64-72.96-163.008-24.96-295.104 16.64-46.016 38.528-91.52 65.536-136.768A795.52 795.52 0 0 1 55.04 375.232C7.04 243.2 15.36 144.768 80 80.128 144.768 15.488 243.2 7.168 375.296 55.04c46.016 16.64 91.584 38.528 136.768 65.536A795.52 795.52 0 0 1 648.768 55.104c132.096-48 230.464-39.616 295.104 25.024 64.64 64.64 72.96 163.008 25.024 295.104A795.52 795.52 0 0 1 903.36 512z m-53.12-79.424c15.168-28.736 27.968-57.536 38.464-86.4 35.584-98.112 33.92-166.656-5.12-205.696-39.04-39.04-107.648-40.768-205.696-5.12a685.44 685.44 0 0 0-86.4 38.4 1240.96 1240.96 0 0 1 138.432 120.32 1240.832 1240.832 0 0 1 120.32 138.496zM432.576 173.824a685.44 685.44 0 0 0-86.4-38.528c-98.112-35.584-166.656-33.92-205.696 5.12-39.04 39.04-40.768 107.648-5.12 205.696 10.432 28.928 23.296 57.728 38.4 86.4a1240.896 1240.896 0 0 1 120.32-138.432 1240.832 1240.832 0 0 1 138.496-120.32zM173.824 591.488a685.44 685.44 0 0 0-38.464 86.4c-35.648 98.048-33.92 166.592 5.12 205.632 39.04 39.04 107.584 40.768 205.696 5.12a685.44 685.44 0 0 0 86.4-38.4 1240.768 1240.768 0 0 1-138.496-120.32 1240.96 1240.96 0 0 1-120.256-138.432z m495.744 78.08A1112.064 1112.064 0 0 0 802.048 512a1112.064 1112.064 0 0 0-132.48-157.568A1112.128 1112.128 0 0 0 512 221.952a1112.128 1112.128 0 0 0-157.504 132.48A1112.064 1112.064 0 0 0 222.016 512a1112.192 1112.192 0 0 0 132.416 157.568A1112.064 1112.064 0 0 0 512 802.048a1112.128 1112.128 0 0 0 157.568-132.48z m-78.08 180.608c28.672 15.168 57.472 28.032 86.4 38.464 98.048 35.648 166.592 33.92 205.632-5.12 39.04-39.04 40.768-107.584 5.12-205.696a685.504 685.504 0 0 0-38.4-86.4 1240.832 1240.832 0 0 1-120.32 138.496 1240.96 1240.96 0 0 1-138.432 120.32zM585.088 512a73.152 73.152 0 1 1-146.24 0 73.152 73.152 0 0 1 146.304 0z\"\n fill=\"currentColor\"\n p-id=\"5013\"\n ></path>\n </svg>\n \u6DF1\u5EA6\u601D\u8003\n </div>\n <div\n class=\"select-tool\"\n nz-popover\n [nzPopoverContent]=\"modelListContent\"\n nzPopoverTrigger=\"click\"\n nzPopoverOverlayClassName=\"params-select-popover\"\n [nzPopoverVisible]=\"modelPopoverVisible\"\n (nzPopoverVisibleChange)=\"modelVisibleChange($event)\"\n >\n <img src=\"/assets/images/input/toggle-model.png\" style=\"width: 12px; height: 12px\" />\n {{ currentModel ? currentModel?.name : '\u9009\u62E9\u6A21\u578B' }}\n </div>\n <div\n class=\"select-tool\"\n nz-popover\n [nzPopoverContent]=\"knowledgeListContent\"\n nzPopoverTrigger=\"click\"\n nzPopoverOverlayClassName=\"params-select-popover\"\n [nzPopoverVisible]=\"knowledgePopoverVisible\"\n (nzPopoverVisibleChange)=\"knowledgeVisibleChange($event)\"\n >\n <img src=\"/assets/images/input/relate.png\" style=\"width: 14px; height: 8px\" />\n \u5173\u8054\u77E5\u8BC6\u5E93\n </div>\n </div>\n <img class=\"send\" src=\"/assets/images/input/send.png\" (click)=\"send()\" [hidden]=\"sseService.loading$ | async\" />\n <div class=\"send-loading\" *ngIf=\"sseService.loading$ | async\">\n <div class=\"send-loading-inner\">\n <svg viewBox=\"0 0 36 36\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" data-icon=\"spin\">\n <defs>\n <linearGradient x1=\"0%\" y1=\"100%\" x2=\"100%\" y2=\"100%\" id=\"linearGradient-1\">\n <stop stop-color=\"currentColor\" stop-opacity=\"0\" offset=\"0%\"></stop>\n <stop stop-color=\"currentColor\" stop-opacity=\"0.50\" offset=\"39.9430698%\"></stop>\n <stop stop-color=\"currentColor\" offset=\"100%\"></stop>\n </linearGradient>\n </defs>\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <rect fill-opacity=\"0.01\" fill=\"none\" x=\"0\" y=\"0\" width=\"36\" height=\"36\"></rect>\n <path\n d=\"M34,18 C34,9.163444 26.836556,2 18,2 C11.6597233,2 6.18078805,5.68784135 3.59122325,11.0354951\"\n stroke=\"url(#linearGradient-1)\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n ></path>\n </g>\n </svg>\n </div>\n </div>\n <!-- <img class=\"send\" src=\"/assets/images/input/send-gray.png\" /> -->\n </div>\n </div>\n <div class=\"chat-input-backdrop\"></div>\n</div>\n\n<ng-template #modelListContent>\n <div style=\"width: 200px\">\n <div class=\"select-title\">\n \u5207\u6362\u6A21\u578B\n <i nz-icon nzType=\"close\" style=\"color: #999\" (click)=\"modelVisibleChange(false)\"></i>\n </div>\n <div class=\"select-content\">\n <nz-radio-group [(ngModel)]=\"currentModel\">\n <label\n nz-radio\n [nzValue]=\"item\"\n [style.margin-top.px]=\"i === 0 ? 0 : 10\"\n *ngFor=\"let item of modelList; let i = index\"\n >\n {{ item.name }}\n </label>\n </nz-radio-group>\n </div>\n </div>\n</ng-template>\n\n<ng-template #knowledgeListContent>\n <div style=\"width: 250px\">\n <div class=\"select-title\">\n \u5173\u8054\u77E5\u8BC6\u5E93\n <i nz-icon nzType=\"close\" style=\"color: #999\" (click)=\"knowledgeVisibleChange(false)\"></i>\n </div>\n <div class=\"select-content\">\n <nz-steps [nzCurrent]=\"knowledgeStepIndex\" nzProgressDot nzDirection=\"vertical\" nzSize=\"small\">\n <nz-step nzTitle=\"\u9009\u62E9\u5206\u7C7B\" [nzDescription]=\"typeSelectTpl\">\n <ng-template #typeSelectTpl>\n <nz-select\n [(ngModel)]=\"selectedTypes\"\n nzMode=\"multiple\"\n style=\"width: 100%\"\n (ngModelChange)=\"onTypeChange($event)\"\n nzPlaceHolder=\"\u8BF7\u9009\u62E9\u5206\u7C7B\"\n >\n <nz-option [nzValue]=\"item.type\" [nzLabel]=\"item.typeC\" *ngFor=\"let item of typesData\"></nz-option>\n </nz-select>\n </ng-template>\n </nz-step>\n <nz-step nzTitle=\"\u641C\u7D22\u9009\u62E9\u76EE\u5F55\" [nzDescription]=\"categorySelectTpl\">\n <ng-template #categorySelectTpl>\n <nz-tree-select\n style=\"width: 100%\"\n [(ngModel)]=\"selectedCategories\"\n [nzNodes]=\"categoriesData\"\n (ngModelChange)=\"onCategoryChange($event)\"\n nzCheckStrictly\n nzHideUnMatched\n nzShowSearch\n nzCheckable\n nzPlaceHolder=\"\u8BF7\u9009\u62E9\u76EE\u5F55\"\n ></nz-tree-select>\n </ng-template>\n </nz-step>\n <nz-step nzTitle=\"\u9009\u62E9\u6807\u7B7E\" [nzDescription]=\"tagSelectTpl\">\n <ng-template #tagSelectTpl>\n <nz-select\n [(ngModel)]=\"selectedTags\"\n nzMode=\"multiple\"\n nzPlaceHolder=\"\u8BF7\u9009\u62E9\u6807\u7B7E\"\n style=\"width: 100%\"\n (ngModelChange)=\"onTagChange($event)\"\n >\n <nz-option-group [nzLabel]=\"item.name\" *ngFor=\"let item of tagsData\">\n <nz-option\n [nzValue]=\"child.iCode\"\n [nzLabel]=\"child.name\"\n *ngFor=\"let child of item.children\"\n ></nz-option>\n </nz-option-group>\n </nz-select>\n </ng-template>\n </nz-step>\n </nz-steps>\n </div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{width:100%;container-type:inline-size;container-name:chat-container}.chat-input-wrapper{position:absolute;bottom:0;left:0;right:0;max-width:800px;min-width:350px;margin:0 auto;padding-bottom:40px}@container chat-container (max-width: 1000px){.chat-input-wrapper{max-width:90%}}.chat-input-wrapper.center{bottom:50%;transform:translateY(50%)}.new-chat-title{display:flex;align-items:center;justify-content:center;padding-bottom:40px;text-align:center;font-weight:500;font-size:24px;color:#000}.new-chat-title img{width:40px;height:32px;margin-right:12px;margin-top:-6px}.chat-input{position:relative;display:flex;flex-direction:column;justify-content:space-between;padding:20px 18px;margin:0 auto;background:#FFFFFF;box-shadow:0 2px 8px #0000001a;border-radius:20px;border:1px solid #D9DADB;z-index:30}.chat-input .input-creative-editor{min-height:60px;max-height:300px;overflow-y:auto;outline:none;box-shadow:none;border:none}.chat-input .input-creative-editor[data-empty=true]:before{content:attr(data-placeholder);color:#9a9b9b}.chat-input .input-bottom{padding-top:16px;display:flex;align-items:center;justify-content:space-between;-webkit-user-select:none;user-select:none}.chat-input .input-bottom .input-tools{display:flex;align-items:center;gap:10px}.chat-input .input-bottom .select-tool{display:flex;align-items:center;justify-content:center;height:36px;padding:0 12px;gap:12px;background:#FFFFFF;border-radius:12px;border:1px solid #DBDCE0;cursor:pointer}.chat-input .input-bottom .select-tool-active{border-color:#b7c8fe;color:#3964fe;background:#edf3fe}.chat-input .input-bottom .send{width:32px;height:32px}::ng-deep .params-select-popover .ant-popover-inner{border-radius:10px}::ng-deep .params-select-popover .select-title{display:flex;align-items:center;justify-content:center;position:relative}::ng-deep .params-select-popover .select-title i{position:absolute;right:0;top:3px;cursor:pointer}::ng-deep .params-select-popover .select-content{max-height:400px;padding:16px 0 16px 1px;overflow-y:auto}.chat-input-backdrop{position:absolute;bottom:0;left:0;width:100%;height:100px;z-index:10;background-image:linear-gradient(to bottom,hsl(0,0%,99%),hsla(0,0%,99%,.8))}.send-loading{min-width:34px;height:34px;border-radius:50%;margin-top:auto;display:flex;flex-shrink:0;align-items:center;flex-direction:column;justify-content:center;cursor:not-allowed;white-space:nowrap;color:#fff;background:#3964fe;transition:background .2s;opacity:.4}.send-loading-inner{width:16px;height:16px}.send-loading svg{will-change:transform;animation:.6s linear infinite send-loading}@keyframes send-loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i3.NzPopoverDirective, selector: "[nz-popover]", inputs: ["nzPopoverArrowPointAtCenter", "nzPopoverTitle", "nzPopoverContent", "nz-popover", "nzPopoverTrigger", "nzPopoverPlacement", "nzPopoverOrigin", "nzPopoverVisible", "nzPopoverMouseEnterDelay", "nzPopoverMouseLeaveDelay", "nzPopoverOverlayClassName", "nzPopoverOverlayStyle", "nzPopoverBackdrop"], outputs: ["nzPopoverVisibleChange"], exportAs: ["nzPopover"] }, { kind: "component", type: i4.NzRadioComponent, selector: "[nz-radio],[nz-radio-button]", inputs: ["nzValue", "nzDisabled", "nzAutoFocus"], exportAs: ["nzRadio"] }, { kind: "component", type: i4.NzRadioGroupComponent, selector: "nz-radio-group", inputs: ["nzDisabled", "nzButtonStyle", "nzSize", "nzName"], exportAs: ["nzRadioGroup"] }, { kind: "directive", type: i5.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i6.NzStepsComponent, selector: "nz-steps", inputs: ["nzCurrent", "nzDirection", "nzLabelPlacement", "nzType", "nzSize", "nzStartIndex", "nzStatus", "nzProgressDot"], outputs: ["nzIndexChange"], exportAs: ["nzSteps"] }, { kind: "component", type: i6.NzStepComponent, selector: "nz-step", inputs: ["nzTitle", "nzSubtitle", "nzDescription", "nzDisabled", "nzPercentage", "nzSize", "nzStatus", "nzIcon"], exportAs: ["nzStep"] }, { kind: "component", type: i7.NzOptionComponent, selector: "nz-option", inputs: ["nzLabel", "nzValue", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i7.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "component", type: i7.NzOptionGroupComponent, selector: "nz-option-group", inputs: ["nzLabel"], exportAs: ["nzOptionGroup"] }, { kind: "component", type: i8.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzPlacement", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckBoxChange"], exportAs: ["nzTreeSelect"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
202
202
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChatInputComponent, decorators: [{
203
203
  type: Component,
204
- args: [{ selector: 'ngx-chat-input', template: "<!-- \u65B0\u804A\u5929\u4F4D\u4E8E\u5C4F\u5E55\u4E2D\u95F4\uFF0C\u53D1\u9001\u6D88\u606F\u4E4B\u540E\u4F4D\u4E8E\u5E95\u90E8 -->\n<div\n class=\"chat-input-wrapper\"\n #chatInputWrapper\n [class.center]=\"!messages.length\"\n [ngStyle]=\"{ 'padding-bottom': mode === 'full' ? '40px' : '10px' }\"\n>\n <div class=\"new-chat-title\" *ngIf=\"!messages.length\">\n <img src=\"/assets/images/logo.png\" />\n <span>\u4F60\u597D\uFF0C\u6709\u4EC0\u4E48\u53EF\u4EE5\u5E2E\u5230\u4F60\uFF1F\u5F00\u59CB\u5BF9\u8BDD\u5427</span>\n </div>\n <div class=\"chat-input\">\n <div\n #editorRef\n class=\"input-creative-editor\"\n contenteditable=\"true\"\n spellcheck=\"false\"\n data-placeholder=\"\u8BF7\u8F93\u5165\u5E76\u53D1\u9001\u6D88\u606F\"\n [attr.data-empty]=\"isEmpty\"\n (input)=\"handleInput()\"\n (keydown.enter)=\"handleEnter($event)\"\n (paste)=\"handlePaste($event)\"\n ></div>\n <div class=\"input-bottom\">\n <div class=\"input-tools\">\n <div class=\"select-tool\" [ngClass]=\"{ 'select-tool-active': deepThink }\" (click)=\"toggleDeepThink()\">\n <svg\n t=\"1764131026949\"\n style=\"width: 14px; height: 14px\"\n class=\"icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"5012\"\n width=\"64\"\n height=\"64\"\n >\n <path\n d=\"M903.36 512a795.52 795.52 0 0 1 65.536 136.704c48 132.16 39.616 230.528-25.024 295.168-64.64 64.64-163.008 72.96-295.168 24.96A795.52 795.52 0 0 1 512 903.424a795.52 795.52 0 0 1-136.704 65.536c-132.096 48-230.528 39.616-295.168-25.024-64.64-64.64-72.96-163.008-24.96-295.104 16.64-46.016 38.528-91.52 65.536-136.768A795.52 795.52 0 0 1 55.04 375.232C7.04 243.2 15.36 144.768 80 80.128 144.768 15.488 243.2 7.168 375.296 55.04c46.016 16.64 91.584 38.528 136.768 65.536A795.52 795.52 0 0 1 648.768 55.104c132.096-48 230.464-39.616 295.104 25.024 64.64 64.64 72.96 163.008 25.024 295.104A795.52 795.52 0 0 1 903.36 512z m-53.12-79.424c15.168-28.736 27.968-57.536 38.464-86.4 35.584-98.112 33.92-166.656-5.12-205.696-39.04-39.04-107.648-40.768-205.696-5.12a685.44 685.44 0 0 0-86.4 38.4 1240.96 1240.96 0 0 1 138.432 120.32 1240.832 1240.832 0 0 1 120.32 138.496zM432.576 173.824a685.44 685.44 0 0 0-86.4-38.528c-98.112-35.584-166.656-33.92-205.696 5.12-39.04 39.04-40.768 107.648-5.12 205.696 10.432 28.928 23.296 57.728 38.4 86.4a1240.896 1240.896 0 0 1 120.32-138.432 1240.832 1240.832 0 0 1 138.496-120.32zM173.824 591.488a685.44 685.44 0 0 0-38.464 86.4c-35.648 98.048-33.92 166.592 5.12 205.632 39.04 39.04 107.584 40.768 205.696 5.12a685.44 685.44 0 0 0 86.4-38.4 1240.768 1240.768 0 0 1-138.496-120.32 1240.96 1240.96 0 0 1-120.256-138.432z m495.744 78.08A1112.064 1112.064 0 0 0 802.048 512a1112.064 1112.064 0 0 0-132.48-157.568A1112.128 1112.128 0 0 0 512 221.952a1112.128 1112.128 0 0 0-157.504 132.48A1112.064 1112.064 0 0 0 222.016 512a1112.192 1112.192 0 0 0 132.416 157.568A1112.064 1112.064 0 0 0 512 802.048a1112.128 1112.128 0 0 0 157.568-132.48z m-78.08 180.608c28.672 15.168 57.472 28.032 86.4 38.464 98.048 35.648 166.592 33.92 205.632-5.12 39.04-39.04 40.768-107.584 5.12-205.696a685.504 685.504 0 0 0-38.4-86.4 1240.832 1240.832 0 0 1-120.32 138.496 1240.96 1240.96 0 0 1-138.432 120.32zM585.088 512a73.152 73.152 0 1 1-146.24 0 73.152 73.152 0 0 1 146.304 0z\"\n fill=\"currentColor\"\n p-id=\"5013\"\n ></path>\n </svg>\n \u6DF1\u5EA6\u601D\u8003\n </div>\n <div\n class=\"select-tool\"\n nz-popover\n [nzPopoverContent]=\"modelListContent\"\n nzPopoverTrigger=\"click\"\n nzPopoverOverlayClassName=\"params-select-popover\"\n [nzPopoverVisible]=\"modelPopoverVisible\"\n (nzPopoverVisibleChange)=\"modelVisibleChange($event)\"\n >\n <img src=\"/assets/images/input/toggle-model.png\" style=\"width: 12px; height: 12px\" />\n {{ currentModel ? currentModel?.name : '\u9009\u62E9\u6A21\u578B' }}\n </div>\n <div\n class=\"select-tool\"\n nz-popover\n [nzPopoverContent]=\"knowledgeListContent\"\n nzPopoverTrigger=\"click\"\n nzPopoverOverlayClassName=\"params-select-popover\"\n [nzPopoverVisible]=\"knowledgePopoverVisible\"\n (nzPopoverVisibleChange)=\"knowledgeVisibleChange($event)\"\n >\n <img src=\"/assets/images/input/relate.png\" style=\"width: 14px; height: 8px\" />\n \u5173\u8054\u77E5\u8BC6\u5E93\n </div>\n </div>\n <img class=\"send\" src=\"/assets/images/input/send.png\" (click)=\"send()\" [hidden]=\"sseService.loading$ | async\" />\n <div class=\"send-loading\" *ngIf=\"sseService.loading$ | async\">\n <div class=\"send-loading-inner\">\n <svg viewBox=\"0 0 36 36\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" data-icon=\"spin\">\n <defs>\n <linearGradient x1=\"0%\" y1=\"100%\" x2=\"100%\" y2=\"100%\" id=\"linearGradient-1\">\n <stop stop-color=\"currentColor\" stop-opacity=\"0\" offset=\"0%\"></stop>\n <stop stop-color=\"currentColor\" stop-opacity=\"0.50\" offset=\"39.9430698%\"></stop>\n <stop stop-color=\"currentColor\" offset=\"100%\"></stop>\n </linearGradient>\n </defs>\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <rect fill-opacity=\"0.01\" fill=\"none\" x=\"0\" y=\"0\" width=\"36\" height=\"36\"></rect>\n <path\n d=\"M34,18 C34,9.163444 26.836556,2 18,2 C11.6597233,2 6.18078805,5.68784135 3.59122325,11.0354951\"\n stroke=\"url(#linearGradient-1)\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n ></path>\n </g>\n </svg>\n </div>\n </div>\n <!-- <img class=\"send\" src=\"/assets/images/input/send-gray.png\" /> -->\n </div>\n </div>\n <div class=\"chat-input-backdrop\"></div>\n</div>\n\n<ng-template #modelListContent>\n <div style=\"width: 200px\">\n <div class=\"select-title\">\n \u5207\u6362\u6A21\u578B\n <i nz-icon nzType=\"close\" style=\"color: #999\" (click)=\"modelVisibleChange(false)\"></i>\n </div>\n <div class=\"select-content\">\n <nz-radio-group [(ngModel)]=\"currentModel\">\n <label\n nz-radio\n [nzValue]=\"item\"\n [style.margin-top.px]=\"i === 0 ? 0 : 10\"\n *ngFor=\"let item of modelList; let i = index\"\n >\n {{ item.name }}\n </label>\n </nz-radio-group>\n </div>\n </div>\n</ng-template>\n\n<ng-template #knowledgeListContent>\n <div style=\"width: 250px\">\n <div class=\"select-title\">\n \u5173\u8054\u77E5\u8BC6\u5E93\n <i nz-icon nzType=\"close\" style=\"color: #999\" (click)=\"knowledgeVisibleChange(false)\"></i>\n </div>\n <div class=\"select-content\">\n <nz-steps [nzCurrent]=\"knowledgeStepIndex\" nzProgressDot nzDirection=\"vertical\" nzSize=\"small\">\n <nz-step nzTitle=\"\u9009\u62E9\u5206\u7C7B\" [nzDescription]=\"typeSelectTpl\">\n <ng-template #typeSelectTpl>\n <nz-select\n [(ngModel)]=\"selectedTypes\"\n nzMode=\"multiple\"\n style=\"width: 100%\"\n (ngModelChange)=\"onTypeChange($event)\"\n nzPlaceHolder=\"\u8BF7\u9009\u62E9\u5206\u7C7B\"\n >\n <nz-option [nzValue]=\"item.type\" [nzLabel]=\"item.typeC\" *ngFor=\"let item of typesData\"></nz-option>\n </nz-select>\n </ng-template>\n </nz-step>\n <nz-step nzTitle=\"\u641C\u7D22\u9009\u62E9\u76EE\u5F55\" [nzDescription]=\"categorySelectTpl\">\n <ng-template #categorySelectTpl>\n <nz-tree-select\n style=\"width: 100%\"\n [(ngModel)]=\"selectedCategories\"\n [nzNodes]=\"categoriesData\"\n (ngModelChange)=\"onCategoryChange($event)\"\n nzCheckStrictly\n nzShowSearch\n nzCheckable\n nzPlaceHolder=\"\u8BF7\u9009\u62E9\u76EE\u5F55\"\n ></nz-tree-select>\n </ng-template>\n </nz-step>\n <nz-step nzTitle=\"\u9009\u62E9\u6807\u7B7E\" [nzDescription]=\"tagSelectTpl\">\n <ng-template #tagSelectTpl>\n <nz-select\n [(ngModel)]=\"selectedTags\"\n nzMode=\"multiple\"\n nzPlaceHolder=\"\u8BF7\u9009\u62E9\u6807\u7B7E\"\n style=\"width: 100%\"\n (ngModelChange)=\"onTagChange($event)\"\n >\n <nz-option-group [nzLabel]=\"item.name\" *ngFor=\"let item of tagsData\">\n <nz-option\n [nzValue]=\"child.iCode\"\n [nzLabel]=\"child.name\"\n *ngFor=\"let child of item.children\"\n ></nz-option>\n </nz-option-group>\n </nz-select>\n </ng-template>\n </nz-step>\n </nz-steps>\n </div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{width:100%;container-type:inline-size;container-name:chat-container}.chat-input-wrapper{position:absolute;bottom:0;left:0;right:0;max-width:800px;min-width:350px;margin:0 auto;padding-bottom:40px}@container chat-container (max-width: 1000px){.chat-input-wrapper{max-width:90%}}.chat-input-wrapper.center{bottom:50%;transform:translateY(50%)}.new-chat-title{display:flex;align-items:center;justify-content:center;padding-bottom:40px;text-align:center;font-weight:500;font-size:24px;color:#000}.new-chat-title img{width:40px;height:32px;margin-right:12px;margin-top:-6px}.chat-input{position:relative;display:flex;flex-direction:column;justify-content:space-between;padding:20px 18px;margin:0 auto;background:#FFFFFF;box-shadow:0 2px 8px #0000001a;border-radius:20px;border:1px solid #D9DADB;z-index:30}.chat-input .input-creative-editor{min-height:60px;max-height:300px;overflow-y:auto;outline:none;box-shadow:none;border:none}.chat-input .input-creative-editor[data-empty=true]:before{content:attr(data-placeholder);color:#9a9b9b}.chat-input .input-bottom{padding-top:16px;display:flex;align-items:center;justify-content:space-between;-webkit-user-select:none;user-select:none}.chat-input .input-bottom .input-tools{display:flex;align-items:center;gap:10px}.chat-input .input-bottom .select-tool{display:flex;align-items:center;justify-content:center;height:36px;padding:0 12px;gap:12px;background:#FFFFFF;border-radius:12px;border:1px solid #DBDCE0;cursor:pointer}.chat-input .input-bottom .select-tool-active{border-color:#b7c8fe;color:#3964fe;background:#edf3fe}.chat-input .input-bottom .send{width:32px;height:32px}::ng-deep .params-select-popover .ant-popover-inner{border-radius:10px}::ng-deep .params-select-popover .select-title{display:flex;align-items:center;justify-content:center;position:relative}::ng-deep .params-select-popover .select-title i{position:absolute;right:0;top:3px;cursor:pointer}::ng-deep .params-select-popover .select-content{max-height:400px;padding:16px 0 16px 1px;overflow-y:auto}.chat-input-backdrop{position:absolute;bottom:0;left:0;width:100%;height:100px;z-index:10;background-image:linear-gradient(to bottom,hsl(0,0%,99%),hsla(0,0%,99%,.8))}.send-loading{min-width:34px;height:34px;border-radius:50%;margin-top:auto;display:flex;flex-shrink:0;align-items:center;flex-direction:column;justify-content:center;cursor:not-allowed;white-space:nowrap;color:#fff;background:#3964fe;transition:background .2s;opacity:.4}.send-loading-inner{width:16px;height:16px}.send-loading svg{will-change:transform;animation:.6s linear infinite send-loading}@keyframes send-loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
204
+ args: [{ selector: 'ngx-chat-input', template: "<!-- \u65B0\u804A\u5929\u4F4D\u4E8E\u5C4F\u5E55\u4E2D\u95F4\uFF0C\u53D1\u9001\u6D88\u606F\u4E4B\u540E\u4F4D\u4E8E\u5E95\u90E8 -->\n<div\n class=\"chat-input-wrapper\"\n #chatInputWrapper\n [class.center]=\"!messages.length\"\n [ngStyle]=\"{ 'padding-bottom': mode === 'full' ? '40px' : '10px' }\"\n>\n <div class=\"new-chat-title\" *ngIf=\"!messages.length\">\n <img src=\"/assets/images/logo.png\" />\n <span>\u4F60\u597D\uFF0C\u6709\u4EC0\u4E48\u53EF\u4EE5\u5E2E\u5230\u4F60\uFF1F\u5F00\u59CB\u5BF9\u8BDD\u5427</span>\n </div>\n <div class=\"chat-input\">\n <div\n #editorRef\n class=\"input-creative-editor\"\n contenteditable=\"true\"\n spellcheck=\"false\"\n data-placeholder=\"\u8BF7\u8F93\u5165\u5E76\u53D1\u9001\u6D88\u606F\"\n [attr.data-empty]=\"isEmpty\"\n (input)=\"handleInput()\"\n (keydown.enter)=\"handleEnter($event)\"\n (paste)=\"handlePaste($event)\"\n ></div>\n <div class=\"input-bottom\">\n <div class=\"input-tools\">\n <div class=\"select-tool\" [ngClass]=\"{ 'select-tool-active': deepThink }\" (click)=\"toggleDeepThink()\">\n <svg\n t=\"1764131026949\"\n style=\"width: 14px; height: 14px\"\n class=\"icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"5012\"\n width=\"64\"\n height=\"64\"\n >\n <path\n d=\"M903.36 512a795.52 795.52 0 0 1 65.536 136.704c48 132.16 39.616 230.528-25.024 295.168-64.64 64.64-163.008 72.96-295.168 24.96A795.52 795.52 0 0 1 512 903.424a795.52 795.52 0 0 1-136.704 65.536c-132.096 48-230.528 39.616-295.168-25.024-64.64-64.64-72.96-163.008-24.96-295.104 16.64-46.016 38.528-91.52 65.536-136.768A795.52 795.52 0 0 1 55.04 375.232C7.04 243.2 15.36 144.768 80 80.128 144.768 15.488 243.2 7.168 375.296 55.04c46.016 16.64 91.584 38.528 136.768 65.536A795.52 795.52 0 0 1 648.768 55.104c132.096-48 230.464-39.616 295.104 25.024 64.64 64.64 72.96 163.008 25.024 295.104A795.52 795.52 0 0 1 903.36 512z m-53.12-79.424c15.168-28.736 27.968-57.536 38.464-86.4 35.584-98.112 33.92-166.656-5.12-205.696-39.04-39.04-107.648-40.768-205.696-5.12a685.44 685.44 0 0 0-86.4 38.4 1240.96 1240.96 0 0 1 138.432 120.32 1240.832 1240.832 0 0 1 120.32 138.496zM432.576 173.824a685.44 685.44 0 0 0-86.4-38.528c-98.112-35.584-166.656-33.92-205.696 5.12-39.04 39.04-40.768 107.648-5.12 205.696 10.432 28.928 23.296 57.728 38.4 86.4a1240.896 1240.896 0 0 1 120.32-138.432 1240.832 1240.832 0 0 1 138.496-120.32zM173.824 591.488a685.44 685.44 0 0 0-38.464 86.4c-35.648 98.048-33.92 166.592 5.12 205.632 39.04 39.04 107.584 40.768 205.696 5.12a685.44 685.44 0 0 0 86.4-38.4 1240.768 1240.768 0 0 1-138.496-120.32 1240.96 1240.96 0 0 1-120.256-138.432z m495.744 78.08A1112.064 1112.064 0 0 0 802.048 512a1112.064 1112.064 0 0 0-132.48-157.568A1112.128 1112.128 0 0 0 512 221.952a1112.128 1112.128 0 0 0-157.504 132.48A1112.064 1112.064 0 0 0 222.016 512a1112.192 1112.192 0 0 0 132.416 157.568A1112.064 1112.064 0 0 0 512 802.048a1112.128 1112.128 0 0 0 157.568-132.48z m-78.08 180.608c28.672 15.168 57.472 28.032 86.4 38.464 98.048 35.648 166.592 33.92 205.632-5.12 39.04-39.04 40.768-107.584 5.12-205.696a685.504 685.504 0 0 0-38.4-86.4 1240.832 1240.832 0 0 1-120.32 138.496 1240.96 1240.96 0 0 1-138.432 120.32zM585.088 512a73.152 73.152 0 1 1-146.24 0 73.152 73.152 0 0 1 146.304 0z\"\n fill=\"currentColor\"\n p-id=\"5013\"\n ></path>\n </svg>\n \u6DF1\u5EA6\u601D\u8003\n </div>\n <div\n class=\"select-tool\"\n nz-popover\n [nzPopoverContent]=\"modelListContent\"\n nzPopoverTrigger=\"click\"\n nzPopoverOverlayClassName=\"params-select-popover\"\n [nzPopoverVisible]=\"modelPopoverVisible\"\n (nzPopoverVisibleChange)=\"modelVisibleChange($event)\"\n >\n <img src=\"/assets/images/input/toggle-model.png\" style=\"width: 12px; height: 12px\" />\n {{ currentModel ? currentModel?.name : '\u9009\u62E9\u6A21\u578B' }}\n </div>\n <div\n class=\"select-tool\"\n nz-popover\n [nzPopoverContent]=\"knowledgeListContent\"\n nzPopoverTrigger=\"click\"\n nzPopoverOverlayClassName=\"params-select-popover\"\n [nzPopoverVisible]=\"knowledgePopoverVisible\"\n (nzPopoverVisibleChange)=\"knowledgeVisibleChange($event)\"\n >\n <img src=\"/assets/images/input/relate.png\" style=\"width: 14px; height: 8px\" />\n \u5173\u8054\u77E5\u8BC6\u5E93\n </div>\n </div>\n <img class=\"send\" src=\"/assets/images/input/send.png\" (click)=\"send()\" [hidden]=\"sseService.loading$ | async\" />\n <div class=\"send-loading\" *ngIf=\"sseService.loading$ | async\">\n <div class=\"send-loading-inner\">\n <svg viewBox=\"0 0 36 36\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" data-icon=\"spin\">\n <defs>\n <linearGradient x1=\"0%\" y1=\"100%\" x2=\"100%\" y2=\"100%\" id=\"linearGradient-1\">\n <stop stop-color=\"currentColor\" stop-opacity=\"0\" offset=\"0%\"></stop>\n <stop stop-color=\"currentColor\" stop-opacity=\"0.50\" offset=\"39.9430698%\"></stop>\n <stop stop-color=\"currentColor\" offset=\"100%\"></stop>\n </linearGradient>\n </defs>\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <rect fill-opacity=\"0.01\" fill=\"none\" x=\"0\" y=\"0\" width=\"36\" height=\"36\"></rect>\n <path\n d=\"M34,18 C34,9.163444 26.836556,2 18,2 C11.6597233,2 6.18078805,5.68784135 3.59122325,11.0354951\"\n stroke=\"url(#linearGradient-1)\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n ></path>\n </g>\n </svg>\n </div>\n </div>\n <!-- <img class=\"send\" src=\"/assets/images/input/send-gray.png\" /> -->\n </div>\n </div>\n <div class=\"chat-input-backdrop\"></div>\n</div>\n\n<ng-template #modelListContent>\n <div style=\"width: 200px\">\n <div class=\"select-title\">\n \u5207\u6362\u6A21\u578B\n <i nz-icon nzType=\"close\" style=\"color: #999\" (click)=\"modelVisibleChange(false)\"></i>\n </div>\n <div class=\"select-content\">\n <nz-radio-group [(ngModel)]=\"currentModel\">\n <label\n nz-radio\n [nzValue]=\"item\"\n [style.margin-top.px]=\"i === 0 ? 0 : 10\"\n *ngFor=\"let item of modelList; let i = index\"\n >\n {{ item.name }}\n </label>\n </nz-radio-group>\n </div>\n </div>\n</ng-template>\n\n<ng-template #knowledgeListContent>\n <div style=\"width: 250px\">\n <div class=\"select-title\">\n \u5173\u8054\u77E5\u8BC6\u5E93\n <i nz-icon nzType=\"close\" style=\"color: #999\" (click)=\"knowledgeVisibleChange(false)\"></i>\n </div>\n <div class=\"select-content\">\n <nz-steps [nzCurrent]=\"knowledgeStepIndex\" nzProgressDot nzDirection=\"vertical\" nzSize=\"small\">\n <nz-step nzTitle=\"\u9009\u62E9\u5206\u7C7B\" [nzDescription]=\"typeSelectTpl\">\n <ng-template #typeSelectTpl>\n <nz-select\n [(ngModel)]=\"selectedTypes\"\n nzMode=\"multiple\"\n style=\"width: 100%\"\n (ngModelChange)=\"onTypeChange($event)\"\n nzPlaceHolder=\"\u8BF7\u9009\u62E9\u5206\u7C7B\"\n >\n <nz-option [nzValue]=\"item.type\" [nzLabel]=\"item.typeC\" *ngFor=\"let item of typesData\"></nz-option>\n </nz-select>\n </ng-template>\n </nz-step>\n <nz-step nzTitle=\"\u641C\u7D22\u9009\u62E9\u76EE\u5F55\" [nzDescription]=\"categorySelectTpl\">\n <ng-template #categorySelectTpl>\n <nz-tree-select\n style=\"width: 100%\"\n [(ngModel)]=\"selectedCategories\"\n [nzNodes]=\"categoriesData\"\n (ngModelChange)=\"onCategoryChange($event)\"\n nzCheckStrictly\n nzHideUnMatched\n nzShowSearch\n nzCheckable\n nzPlaceHolder=\"\u8BF7\u9009\u62E9\u76EE\u5F55\"\n ></nz-tree-select>\n </ng-template>\n </nz-step>\n <nz-step nzTitle=\"\u9009\u62E9\u6807\u7B7E\" [nzDescription]=\"tagSelectTpl\">\n <ng-template #tagSelectTpl>\n <nz-select\n [(ngModel)]=\"selectedTags\"\n nzMode=\"multiple\"\n nzPlaceHolder=\"\u8BF7\u9009\u62E9\u6807\u7B7E\"\n style=\"width: 100%\"\n (ngModelChange)=\"onTagChange($event)\"\n >\n <nz-option-group [nzLabel]=\"item.name\" *ngFor=\"let item of tagsData\">\n <nz-option\n [nzValue]=\"child.iCode\"\n [nzLabel]=\"child.name\"\n *ngFor=\"let child of item.children\"\n ></nz-option>\n </nz-option-group>\n </nz-select>\n </ng-template>\n </nz-step>\n </nz-steps>\n </div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{width:100%;container-type:inline-size;container-name:chat-container}.chat-input-wrapper{position:absolute;bottom:0;left:0;right:0;max-width:800px;min-width:350px;margin:0 auto;padding-bottom:40px}@container chat-container (max-width: 1000px){.chat-input-wrapper{max-width:90%}}.chat-input-wrapper.center{bottom:50%;transform:translateY(50%)}.new-chat-title{display:flex;align-items:center;justify-content:center;padding-bottom:40px;text-align:center;font-weight:500;font-size:24px;color:#000}.new-chat-title img{width:40px;height:32px;margin-right:12px;margin-top:-6px}.chat-input{position:relative;display:flex;flex-direction:column;justify-content:space-between;padding:20px 18px;margin:0 auto;background:#FFFFFF;box-shadow:0 2px 8px #0000001a;border-radius:20px;border:1px solid #D9DADB;z-index:30}.chat-input .input-creative-editor{min-height:60px;max-height:300px;overflow-y:auto;outline:none;box-shadow:none;border:none}.chat-input .input-creative-editor[data-empty=true]:before{content:attr(data-placeholder);color:#9a9b9b}.chat-input .input-bottom{padding-top:16px;display:flex;align-items:center;justify-content:space-between;-webkit-user-select:none;user-select:none}.chat-input .input-bottom .input-tools{display:flex;align-items:center;gap:10px}.chat-input .input-bottom .select-tool{display:flex;align-items:center;justify-content:center;height:36px;padding:0 12px;gap:12px;background:#FFFFFF;border-radius:12px;border:1px solid #DBDCE0;cursor:pointer}.chat-input .input-bottom .select-tool-active{border-color:#b7c8fe;color:#3964fe;background:#edf3fe}.chat-input .input-bottom .send{width:32px;height:32px}::ng-deep .params-select-popover .ant-popover-inner{border-radius:10px}::ng-deep .params-select-popover .select-title{display:flex;align-items:center;justify-content:center;position:relative}::ng-deep .params-select-popover .select-title i{position:absolute;right:0;top:3px;cursor:pointer}::ng-deep .params-select-popover .select-content{max-height:400px;padding:16px 0 16px 1px;overflow-y:auto}.chat-input-backdrop{position:absolute;bottom:0;left:0;width:100%;height:100px;z-index:10;background-image:linear-gradient(to bottom,hsl(0,0%,99%),hsla(0,0%,99%,.8))}.send-loading{min-width:34px;height:34px;border-radius:50%;margin-top:auto;display:flex;flex-shrink:0;align-items:center;flex-direction:column;justify-content:center;cursor:not-allowed;white-space:nowrap;color:#fff;background:#3964fe;transition:background .2s;opacity:.4}.send-loading-inner{width:16px;height:16px}.send-loading svg{will-change:transform;animation:.6s linear infinite send-loading}@keyframes send-loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
205
205
  }], propDecorators: { editor: [{
206
206
  type: ViewChild,
207
207
  args: ['editorRef']
@@ -221,4 +221,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
221
221
  }], paste: [{
222
222
  type: Output
223
223
  }] } });
224
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZ2VudC9jaGF0L2NoYXQtaW5wdXQvY2hhdC1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZ2VudC9jaGF0L2NoYXQtaW5wdXQvY2hhdC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFjLFNBQVMsRUFBRSxNQUFNLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7OztBQVFyRCxNQUFNLE9BQU8sa0JBQWtCO0lBTC9CO1FBUVcsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQUN6QixTQUFJLEdBQW9CLE1BQU0sQ0FBQztRQUM5QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFvRCxDQUFDO1FBQ25GLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMzQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNuQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUVwQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXZDLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFDbkMscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBQ2hDLGNBQVMsR0FBZSxFQUFFLENBQUM7UUFDM0Isd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNoQyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRWpCLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUN2QixjQUFTLEdBQXFCLEVBQUUsQ0FBQztRQUNqQyxtQkFBYyxHQUF3QixFQUFFLENBQUM7UUFDekMsYUFBUSxHQUFvQixFQUFFLENBQUM7UUFDL0Isa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDN0IsdUJBQWtCLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLGlCQUFZLEdBQWEsRUFBRSxDQUFDO0tBdUw3QjtJQXJMQyxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsVUFBVTtJQUNWLFlBQVk7UUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHVCQUF1QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pHLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFlO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQWlCO1FBQ2hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFXO1FBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsT0FBTztJQUNDLFNBQVM7UUFDZixJQUFJLENBQUMsV0FBVzthQUNiLEdBQUcsQ0FBbUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSwrQkFBK0IsQ0FBQzthQUN2RixTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPO0lBQ0MsY0FBYyxDQUFDLEtBQWU7UUFDcEMsSUFBSSxDQUFDLFdBQVc7YUFDYixJQUFJLENBQXVCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsbUNBQW1DLEVBQUU7WUFDaEcsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQzFCLENBQUM7YUFDRCxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sUUFBUSxDQUFDLFVBQWlCO1FBQ2hDLElBQUksQ0FBQyxXQUFXO2FBQ2IsSUFBSSxDQUFrQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLCtCQUErQixFQUFFO1lBQ3ZGLE9BQU8sRUFBRSxVQUFVO1NBQ3BCLENBQUM7YUFDRCxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxhQUFhLENBQUMsSUFBUztRQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDNUM7UUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFTO1lBQzVCLElBQUksTUFBTSxHQUFRO2dCQUNoQixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSzthQUNoQixDQUFDO1lBRUYsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDN0MsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDekU7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7YUFDdEI7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVO0lBQ3RDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFjO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQWM7UUFDbkMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBZTtRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDbkMsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsU0FBUyxLQUFLLEVBQUUsQ0FBQztRQUVqRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksS0FBSyxFQUFFLElBQUksU0FBUyxDQUFDO0lBQzFDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQ2pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDekQsaUNBQWlDO0lBQ25DLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBWTtRQUN0QixJQUFJLENBQUUsS0FBdUIsQ0FBQyxRQUFRLEVBQUU7WUFDdEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLGtGQUFrRjtZQUNsRixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBcUI7UUFDL0IsMEJBQTBCO1FBQzFCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBWTtRQUN6QixRQUFRO1FBQ1IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUU7WUFDdkMsT0FBTztTQUNSO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlELE1BQU0sT0FBTyxHQUFpQjtZQUM1QixZQUFZO1lBQ1osYUFBYSxFQUFFLEdBQUcsQ0FBQyxLQUFLO1lBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUztZQUNyQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7WUFDdEIsU0FBUyxFQUFFO2dCQUNULElBQUksRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDeEIsUUFBUSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7Z0JBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWTthQUN4QjtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsSUFBSTtRQUNGLFFBQVE7UUFDUixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtZQUN2QyxPQUFPO1NBQ1I7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQ3pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5RCxNQUFNLE9BQU8sR0FBaUI7WUFDNUIsWUFBWTtZQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUztZQUNyQixRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRTtnQkFDVCxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWE7Z0JBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsa0JBQWtCO2dCQUNqQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVk7YUFDeEI7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7O2dIQWxOVSxrQkFBa0I7b0dBQWxCLGtCQUFrQiwyWkNoQi9CLDhvU0FrTEE7NEZEbEthLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0I7OEJBS0YsTUFBTTtzQkFBN0IsU0FBUzt1QkFBQyxXQUFXO2dCQUNTLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBQ3BCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gY2hhdC1pbnB1dC5jb21wb25lbnQudHNcbmltcG9ydCB7IENvbXBvbmVudCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgaW5qZWN0LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2h0dHAyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSU1vZGVsLCBJTW9kZWxMaXN0IH0gZnJvbSAnLi4vbW9kZWxzL21vZGVsLWxpc3QubW9kZWwnO1xuaW1wb3J0IHsgU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vc3RvcmUvc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBJS25vd2xlZGdlQ2F0ZWdvcnksIElLbm93bGVkZ2VMaXN0LCBJS25vd2xlZGdlVGFnLCBJS25vd2xlZGdlVHlwZSB9IGZyb20gJy4uL21vZGVscy9rbm93bGVkZ2UtbGlzdC5tb2RlbCc7XG5pbXBvcnQgeyBJU2VuZE1lc3NhZ2UgfSBmcm9tICcuLi9tb2RlbHMvc2VuZC1tZXNzYWdlLm1vZGVsJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuLi9tb2RlbHMvbWVzc2FnZS5tb2RlbCc7XG5pbXBvcnQgeyBTc2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3NlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTnpUcmVlTm9kZU9wdGlvbnMgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHJlZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1jaGF0LWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGF0LWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENoYXRJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ2VkaXRvclJlZicpIGVkaXRvciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdjaGF0SW5wdXRXcmFwcGVyJykgY2hhdElucHV0V3JhcHBlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBASW5wdXQoKSBtZXNzYWdlczogTWVzc2FnZVtdID0gW107XG4gIEBJbnB1dCgpIG1vZGU6ICdmdWxsJyB8ICdjYXJkJyA9ICdmdWxsJztcbiAgQE91dHB1dCgpIHNlbmRNZXNzYWdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1lc3NhZ2U6IElTZW5kTWVzc2FnZTsgaXNSZWdlbmVyYXRlOiBib29sZWFuIH0+KCk7XG4gIEBPdXRwdXQoKSBtZXNzYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBlbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcGFzdGUgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gIHByaXZhdGUgaHR0cFNlcnZpY2UgPSBpbmplY3QoSHR0cFNlcnZpY2UpO1xuICBwcml2YXRlIHN0b3JlU2VydmljZSA9IGluamVjdChTdG9yZVNlcnZpY2UpO1xuICBwdWJsaWMgc3NlU2VydmljZSA9IGluamVjdChTc2VTZXJ2aWNlKTtcblxuICBpc0VtcHR5ID0gdHJ1ZTtcbiAgY3VycmVudE1vZGVsOiBJTW9kZWwgfCBudWxsID0gbnVsbDtcbiAgY3VycmVudEtub3dsZWRnZTogc3RyaW5nW10gPSBbXTtcbiAgbW9kZWxMaXN0OiBJTW9kZWxMaXN0ID0gW107XG4gIG1vZGVsUG9wb3ZlclZpc2libGUgPSBmYWxzZTtcbiAga25vd2xlZGdlUG9wb3ZlclZpc2libGUgPSBmYWxzZTtcbiAgZGVlcFRoaW5rID0gdHJ1ZTtcblxuICBrbm93bGVkZ2VTdGVwSW5kZXggPSAwO1xuICB0eXBlc0RhdGE6IElLbm93bGVkZ2VUeXBlW10gPSBbXTtcbiAgY2F0ZWdvcmllc0RhdGE6IE56VHJlZU5vZGVPcHRpb25zW10gPSBbXTtcbiAgdGFnc0RhdGE6IElLbm93bGVkZ2VUYWdbXSA9IFtdO1xuICBzZWxlY3RlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuICBzZWxlY3RlZENhdGVnb3JpZXM6IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkVGFnczogc3RyaW5nW10gPSBbXTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldE1vZGVsTGlzdCgpO1xuICAgIHRoaXMubG9hZFR5cGVzKCk7XG4gIH1cblxuICAvLyDlj6/kvpvkuqTkupLnmoTmqKHlnotcbiAgZ2V0TW9kZWxMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMuaHR0cFNlcnZpY2UuZ2V0PElNb2RlbExpc3Q+KGAke3RoaXMuc3RvcmVTZXJ2aWNlLmdldEJhc2VVcmwoKX0vYXBpL0NoYXRNb2RlbC9tb2RlbHNgKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIHRoaXMubW9kZWxMaXN0ID0gcmVzO1xuICAgICAgaWYgKHJlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TW9kZWwgPSByZXNbMF07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblR5cGVDaGFuZ2UodHlwZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5sb2FkQ2F0ZWdvcmllcyh0eXBlcyk7XG5cbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRUYWdzID0gW107XG4gICAgdGhpcy50YWdzRGF0YSA9IFtdO1xuICAgIHRoaXMua25vd2xlZGdlU3RlcEluZGV4ID0gdHlwZXMubGVuZ3RoID8gMSA6IDA7XG4gIH1cblxuICBvbkNhdGVnb3J5Q2hhbmdlKGNhdGVnb3JpZXM6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMgPSBjYXRlZ29yaWVzO1xuICAgIHRoaXMubG9hZFRhZ3MoY2F0ZWdvcmllcyk7XG4gICAgdGhpcy5zZWxlY3RlZFRhZ3MgPSBbXTtcbiAgICB0aGlzLmtub3dsZWRnZVN0ZXBJbmRleCA9IGNhdGVnb3JpZXMubGVuZ3RoID8gMiA6IDE7XG4gIH1cblxuICBvblRhZ0NoYW5nZSh0YWdzOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMua25vd2xlZGdlU3RlcEluZGV4ID0gdGFncy5sZW5ndGggPyAyIDogMTtcbiAgfVxuXG4gIC8vIOiOt+WPluWIhuexu1xuICBwcml2YXRlIGxvYWRUeXBlcygpOiB2b2lkIHtcbiAgICB0aGlzLmh0dHBTZXJ2aWNlXG4gICAgICAuZ2V0PElLbm93bGVkZ2VUeXBlW10+KGAke3RoaXMuc3RvcmVTZXJ2aWNlLmdldEJhc2VVcmwoKX0vYXBpL0NoYXRNb2RlbC9rbm93bGVkZ2VUeXBlc2ApXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMudHlwZXNEYXRhID0gcmVzO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyDojrflj5bnm67lvZVcbiAgcHJpdmF0ZSBsb2FkQ2F0ZWdvcmllcyh0eXBlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLmh0dHBTZXJ2aWNlXG4gICAgICAucG9zdDxJS25vd2xlZGdlQ2F0ZWdvcnlbXT4oYCR7dGhpcy5zdG9yZVNlcnZpY2UuZ2V0QmFzZVVybCgpfS9hcGkvQ2hhdE1vZGVsL2tub3dsZWRnZS9jYXRhbG9nc2AsIHtcbiAgICAgICAgdHlwZXM6IHRoaXMuc2VsZWN0ZWRUeXBlcyxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0RhdGEgPSB0aGlzLmNvbnZlcnRUb1RyZWUocmVzKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkVGFncyhjYXRlZ29yaWVzOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuaHR0cFNlcnZpY2VcbiAgICAgIC5wb3N0PElLbm93bGVkZ2VUYWdbXT4oYCR7dGhpcy5zdG9yZVNlcnZpY2UuZ2V0QmFzZVVybCgpfS9hcGkvQ2hhdE1vZGVsL2tub3dsZWRnZS90YWdzYCwge1xuICAgICAgICBjYXRhbG9nOiBjYXRlZ29yaWVzLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy50YWdzRGF0YSA9IHJlcztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9UcmVlKGRhdGE6IGFueSk6IGFueSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLm1hcChpdGVtID0+IGNvbnZlcnROb2RlKGl0ZW0pKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0Tm9kZShub2RlOiBhbnkpIHtcbiAgICAgIGxldCByZXN1bHQ6IGFueSA9IHtcbiAgICAgICAgdGl0bGU6IG5vZGUubmFtZSB8fCAnJyxcbiAgICAgICAgdmFsdWU6IG5vZGUuaUNvZGUsXG4gICAgICAgIGtleTogbm9kZS5pQ29kZSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQuY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLm1hcCgoY2hpbGQ6IGFueSkgPT4gY29udmVydE5vZGUoY2hpbGQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IFtdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0Tm9kZShkYXRhKTsgLy8g5aaC5p6c5piv5Y2V5Liq5a+56LGhXG4gIH1cblxuICBtb2RlbFZpc2libGVDaGFuZ2UodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsUG9wb3ZlclZpc2libGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGtub3dsZWRnZVZpc2libGVDaGFuZ2UodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmtub3dsZWRnZVBvcG92ZXJWaXNpYmxlID0gdmFsdWU7XG4gIH1cblxuICBrbm93bGVkZ2VTZWxlY3RDaGFuZ2UodmFsdWU6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50S25vd2xlZGdlID0gdmFsdWU7XG4gIH1cblxuICB0b2dnbGVEZWVwVGhpbmsoKTogdm9pZCB7XG4gICAgdGhpcy5kZWVwVGhpbmsgPSAhdGhpcy5kZWVwVGhpbms7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVtcHR5U3RhdGUoKSB7XG4gICAgY29uc3QgZWwgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHRleHQgPSBlbC50ZXh0Q29udGVudD8udHJpbSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc09ubHlCciA9IGVsLmlubmVySFRNTCA9PT0gJzxicj4nIHx8IGVsLmlubmVySFRNTCA9PT0gJyc7XG5cbiAgICB0aGlzLmlzRW1wdHkgPSB0ZXh0ID09PSAnJyAmJiBoYXNPbmx5QnI7XG4gIH1cblxuICBoYW5kbGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUVtcHR5U3RhdGUoKTtcbiAgICBjb25zdCBodG1sID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQgfHwgJyc7XG4gICAgLy8gdGhpcy5tZXNzYWdlQ2hhbmdlLmVtaXQodGV4dCk7XG4gIH1cblxuICBoYW5kbGVFbnRlcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIShldmVudCBhcyBLZXlib2FyZEV2ZW50KS5zaGlmdEtleSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8vIHRoaXMuZW50ZXIuZW1pdCgoZXZlbnQgYXMgYW55KS50YXJnZXQhLmlubmVyVGV4dCEucmVwbGFjZSgvXFxzKy9nLCBcIiBcIikudHJpbSgpKTtcbiAgICAgIHRoaXMuc2VuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIC8vIHRoaXMucGFzdGUuZW1pdChldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZUVtcHR5U3RhdGUoKSwgMCk7XG4gIH1cblxuICBjbGVhcklucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgdGhpcy5oYW5kbGVJbnB1dCgpO1xuICB9XG5cbiAgcmVnZW5lcmF0ZVNlbmQobXNnOiBNZXNzYWdlKTogdm9pZCB7XG4gICAgLy8g5q2j5Zyo5Zue562U5LitXG4gICAgaWYgKHRoaXMuc3NlU2VydmljZS5sb2FkaW5nU291cmNlLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IHRoaXMuc3RvcmVTZXJ2aWNlLmdldENvbnZlcnNhdGlvbklDb2RlKCk7XG4gICAgY29uc3QgbWVzc2FnZTogSVNlbmRNZXNzYWdlID0ge1xuICAgICAgY29udmVyc2F0aW9uLFxuICAgICAgcXVlc3Rpb25JQ29kZTogbXNnLmlDb2RlLFxuICAgICAgbW9kZWw6IHRoaXMuY3VycmVudE1vZGVsPy5pQ29kZSA/PyAnJyxcbiAgICAgIHRoaW5rOiB0aGlzLmRlZXBUaGluayxcbiAgICAgIHF1ZXN0aW9uOiBtc2cucXVlc3Rpb24sXG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdHlwZTogdGhpcy5zZWxlY3RlZFR5cGVzLFxuICAgICAgICBjYXRhbG9nczogdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMsXG4gICAgICAgIHRhZ3M6IHRoaXMuc2VsZWN0ZWRUYWdzLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuc2VuZE1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2UsIGlzUmVnZW5lcmF0ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHNlbmQoKTogdm9pZCB7XG4gICAgLy8g5q2j5Zyo5Zue562U5LitXG4gICAgaWYgKHRoaXMuc3NlU2VydmljZS5sb2FkaW5nU291cmNlLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRleHQgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50IHx8ICcnO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IHRoaXMuc3RvcmVTZXJ2aWNlLmdldENvbnZlcnNhdGlvbklDb2RlKCk7XG4gICAgY29uc3QgbWVzc2FnZTogSVNlbmRNZXNzYWdlID0ge1xuICAgICAgY29udmVyc2F0aW9uLFxuICAgICAgbW9kZWw6IHRoaXMuY3VycmVudE1vZGVsPy5pQ29kZSA/PyAnJyxcbiAgICAgIHRoaW5rOiB0aGlzLmRlZXBUaGluayxcbiAgICAgIHF1ZXN0aW9uOiB0ZXh0LFxuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHR5cGU6IHRoaXMuc2VsZWN0ZWRUeXBlcyxcbiAgICAgICAgY2F0YWxvZ3M6IHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzLFxuICAgICAgICB0YWdzOiB0aGlzLnNlbGVjdGVkVGFncyxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICB0aGlzLnNlbmRNZXNzYWdlLmVtaXQoeyBtZXNzYWdlLCBpc1JlZ2VuZXJhdGU6IGZhbHNlIH0pO1xuICB9XG59XG4iLCI8IS0tIOaWsOiBiuWkqeS9jeS6juWxj+W5leS4remXtO+8jOWPkemAgea2iOaBr+S5i+WQjuS9jeS6juW6lemDqCAtLT5cbjxkaXZcbiAgY2xhc3M9XCJjaGF0LWlucHV0LXdyYXBwZXJcIlxuICAjY2hhdElucHV0V3JhcHBlclxuICBbY2xhc3MuY2VudGVyXT1cIiFtZXNzYWdlcy5sZW5ndGhcIlxuICBbbmdTdHlsZV09XCJ7ICdwYWRkaW5nLWJvdHRvbSc6IG1vZGUgPT09ICdmdWxsJyA/ICc0MHB4JyA6ICcxMHB4JyB9XCJcbj5cbiAgPGRpdiBjbGFzcz1cIm5ldy1jaGF0LXRpdGxlXCIgKm5nSWY9XCIhbWVzc2FnZXMubGVuZ3RoXCI+XG4gICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltYWdlcy9sb2dvLnBuZ1wiIC8+XG4gICAgPHNwYW4+5L2g5aW977yM5pyJ5LuA5LmI5Y+v5Lul5biu5Yiw5L2g77yf5byA5aeL5a+56K+d5ZCnPC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNoYXQtaW5wdXRcIj5cbiAgICA8ZGl2XG4gICAgICAjZWRpdG9yUmVmXG4gICAgICBjbGFzcz1cImlucHV0LWNyZWF0aXZlLWVkaXRvclwiXG4gICAgICBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJcbiAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICBkYXRhLXBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5bm25Y+R6YCB5raI5oGvXCJcbiAgICAgIFthdHRyLmRhdGEtZW1wdHldPVwiaXNFbXB0eVwiXG4gICAgICAoaW5wdXQpPVwiaGFuZGxlSW5wdXQoKVwiXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVFbnRlcigkZXZlbnQpXCJcbiAgICAgIChwYXN0ZSk9XCJoYW5kbGVQYXN0ZSgkZXZlbnQpXCJcbiAgICA+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWJvdHRvbVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRvb2xzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtdG9vbFwiIFtuZ0NsYXNzXT1cInsgJ3NlbGVjdC10b29sLWFjdGl2ZSc6IGRlZXBUaGluayB9XCIgKGNsaWNrKT1cInRvZ2dsZURlZXBUaGluaygpXCI+XG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgdD1cIjE3NjQxMzEwMjY5NDlcIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTRweDsgaGVpZ2h0OiAxNHB4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWNvblwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiXG4gICAgICAgICAgICB2ZXJzaW9uPVwiMS4xXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgcC1pZD1cIjUwMTJcIlxuICAgICAgICAgICAgd2lkdGg9XCI2NFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCI2NFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk05MDMuMzYgNTEyYTc5NS41MiA3OTUuNTIgMCAwIDEgNjUuNTM2IDEzNi43MDRjNDggMTMyLjE2IDM5LjYxNiAyMzAuNTI4LTI1LjAyNCAyOTUuMTY4LTY0LjY0IDY0LjY0LTE2My4wMDggNzIuOTYtMjk1LjE2OCAyNC45NkE3OTUuNTIgNzk1LjUyIDAgMCAxIDUxMiA5MDMuNDI0YTc5NS41MiA3OTUuNTIgMCAwIDEtMTM2LjcwNCA2NS41MzZjLTEzMi4wOTYgNDgtMjMwLjUyOCAzOS42MTYtMjk1LjE2OC0yNS4wMjQtNjQuNjQtNjQuNjQtNzIuOTYtMTYzLjAwOC0yNC45Ni0yOTUuMTA0IDE2LjY0LTQ2LjAxNiAzOC41MjgtOTEuNTIgNjUuNTM2LTEzNi43NjhBNzk1LjUyIDc5NS41MiAwIDAgMSA1NS4wNCAzNzUuMjMyQzcuMDQgMjQzLjIgMTUuMzYgMTQ0Ljc2OCA4MCA4MC4xMjggMTQ0Ljc2OCAxNS40ODggMjQzLjIgNy4xNjggMzc1LjI5NiA1NS4wNGM0Ni4wMTYgMTYuNjQgOTEuNTg0IDM4LjUyOCAxMzYuNzY4IDY1LjUzNkE3OTUuNTIgNzk1LjUyIDAgMCAxIDY0OC43NjggNTUuMTA0YzEzMi4wOTYtNDggMjMwLjQ2NC0zOS42MTYgMjk1LjEwNCAyNS4wMjQgNjQuNjQgNjQuNjQgNzIuOTYgMTYzLjAwOCAyNS4wMjQgMjk1LjEwNEE3OTUuNTIgNzk1LjUyIDAgMCAxIDkwMy4zNiA1MTJ6IG0tNTMuMTItNzkuNDI0YzE1LjE2OC0yOC43MzYgMjcuOTY4LTU3LjUzNiAzOC40NjQtODYuNCAzNS41ODQtOTguMTEyIDMzLjkyLTE2Ni42NTYtNS4xMi0yMDUuNjk2LTM5LjA0LTM5LjA0LTEwNy42NDgtNDAuNzY4LTIwNS42OTYtNS4xMmE2ODUuNDQgNjg1LjQ0IDAgMCAwLTg2LjQgMzguNCAxMjQwLjk2IDEyNDAuOTYgMCAwIDEgMTM4LjQzMiAxMjAuMzIgMTI0MC44MzIgMTI0MC44MzIgMCAwIDEgMTIwLjMyIDEzOC40OTZ6TTQzMi41NzYgMTczLjgyNGE2ODUuNDQgNjg1LjQ0IDAgMCAwLTg2LjQtMzguNTI4Yy05OC4xMTItMzUuNTg0LTE2Ni42NTYtMzMuOTItMjA1LjY5NiA1LjEyLTM5LjA0IDM5LjA0LTQwLjc2OCAxMDcuNjQ4LTUuMTIgMjA1LjY5NiAxMC40MzIgMjguOTI4IDIzLjI5NiA1Ny43MjggMzguNCA4Ni40YTEyNDAuODk2IDEyNDAuODk2IDAgMCAxIDEyMC4zMi0xMzguNDMyIDEyNDAuODMyIDEyNDAuODMyIDAgMCAxIDEzOC40OTYtMTIwLjMyek0xNzMuODI0IDU5MS40ODhhNjg1LjQ0IDY4NS40NCAwIDAgMC0zOC40NjQgODYuNGMtMzUuNjQ4IDk4LjA0OC0zMy45MiAxNjYuNTkyIDUuMTIgMjA1LjYzMiAzOS4wNCAzOS4wNCAxMDcuNTg0IDQwLjc2OCAyMDUuNjk2IDUuMTJhNjg1LjQ0IDY4NS40NCAwIDAgMCA4Ni40LTM4LjQgMTI0MC43NjggMTI0MC43NjggMCAwIDEtMTM4LjQ5Ni0xMjAuMzIgMTI0MC45NiAxMjQwLjk2IDAgMCAxLTEyMC4yNTYtMTM4LjQzMnogbTQ5NS43NDQgNzguMDhBMTExMi4wNjQgMTExMi4wNjQgMCAwIDAgODAyLjA0OCA1MTJhMTExMi4wNjQgMTExMi4wNjQgMCAwIDAtMTMyLjQ4LTE1Ny41NjhBMTExMi4xMjggMTExMi4xMjggMCAwIDAgNTEyIDIyMS45NTJhMTExMi4xMjggMTExMi4xMjggMCAwIDAtMTU3LjUwNCAxMzIuNDhBMTExMi4wNjQgMTExMi4wNjQgMCAwIDAgMjIyLjAxNiA1MTJhMTExMi4xOTIgMTExMi4xOTIgMCAwIDAgMTMyLjQxNiAxNTcuNTY4QTExMTIuMDY0IDExMTIuMDY0IDAgMCAwIDUxMiA4MDIuMDQ4YTExMTIuMTI4IDExMTIuMTI4IDAgMCAwIDE1Ny41NjgtMTMyLjQ4eiBtLTc4LjA4IDE4MC42MDhjMjguNjcyIDE1LjE2OCA1Ny40NzIgMjguMDMyIDg2LjQgMzguNDY0IDk4LjA0OCAzNS42NDggMTY2LjU5MiAzMy45MiAyMDUuNjMyLTUuMTIgMzkuMDQtMzkuMDQgNDAuNzY4LTEwNy41ODQgNS4xMi0yMDUuNjk2YTY4NS41MDQgNjg1LjUwNCAwIDAgMC0zOC40LTg2LjQgMTI0MC44MzIgMTI0MC44MzIgMCAwIDEtMTIwLjMyIDEzOC40OTYgMTI0MC45NiAxMjQwLjk2IDAgMCAxLTEzOC40MzIgMTIwLjMyek01ODUuMDg4IDUxMmE3My4xNTIgNzMuMTUyIDAgMSAxLTE0Ni4yNCAwIDczLjE1MiA3My4xNTIgMCAwIDEgMTQ2LjMwNCAwelwiXG4gICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICBwLWlkPVwiNTAxM1wiXG4gICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIOa3seW6puaAneiAg1xuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0LXRvb2xcIlxuICAgICAgICAgIG56LXBvcG92ZXJcbiAgICAgICAgICBbbnpQb3BvdmVyQ29udGVudF09XCJtb2RlbExpc3RDb250ZW50XCJcbiAgICAgICAgICBuelBvcG92ZXJUcmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgICAgIG56UG9wb3Zlck92ZXJsYXlDbGFzc05hbWU9XCJwYXJhbXMtc2VsZWN0LXBvcG92ZXJcIlxuICAgICAgICAgIFtuelBvcG92ZXJWaXNpYmxlXT1cIm1vZGVsUG9wb3ZlclZpc2libGVcIlxuICAgICAgICAgIChuelBvcG92ZXJWaXNpYmxlQ2hhbmdlKT1cIm1vZGVsVmlzaWJsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbWFnZXMvaW5wdXQvdG9nZ2xlLW1vZGVsLnBuZ1wiIHN0eWxlPVwid2lkdGg6IDEycHg7IGhlaWdodDogMTJweFwiIC8+XG4gICAgICAgICAge3sgY3VycmVudE1vZGVsID8gY3VycmVudE1vZGVsPy5uYW1lIDogJ+mAieaLqeaooeWeiycgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInNlbGVjdC10b29sXCJcbiAgICAgICAgICBuei1wb3BvdmVyXG4gICAgICAgICAgW256UG9wb3ZlckNvbnRlbnRdPVwia25vd2xlZGdlTGlzdENvbnRlbnRcIlxuICAgICAgICAgIG56UG9wb3ZlclRyaWdnZXI9XCJjbGlja1wiXG4gICAgICAgICAgbnpQb3BvdmVyT3ZlcmxheUNsYXNzTmFtZT1cInBhcmFtcy1zZWxlY3QtcG9wb3ZlclwiXG4gICAgICAgICAgW256UG9wb3ZlclZpc2libGVdPVwia25vd2xlZGdlUG9wb3ZlclZpc2libGVcIlxuICAgICAgICAgIChuelBvcG92ZXJWaXNpYmxlQ2hhbmdlKT1cImtub3dsZWRnZVZpc2libGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaW1hZ2VzL2lucHV0L3JlbGF0ZS5wbmdcIiBzdHlsZT1cIndpZHRoOiAxNHB4OyBoZWlnaHQ6IDhweFwiIC8+XG4gICAgICAgICAg5YWz6IGU55+l6K+G5bqTXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8aW1nIGNsYXNzPVwic2VuZFwiIHNyYz1cIi9hc3NldHMvaW1hZ2VzL2lucHV0L3NlbmQucG5nXCIgKGNsaWNrKT1cInNlbmQoKVwiIFtoaWRkZW5dPVwic3NlU2VydmljZS5sb2FkaW5nJCB8IGFzeW5jXCIgLz5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZW5kLWxvYWRpbmdcIiAqbmdJZj1cInNzZVNlcnZpY2UubG9hZGluZyQgfCBhc3luY1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VuZC1sb2FkaW5nLWlubmVyXCI+XG4gICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWljb249XCJzcGluXCI+XG4gICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IHgxPVwiMCVcIiB5MT1cIjEwMCVcIiB4Mj1cIjEwMCVcIiB5Mj1cIjEwMCVcIiBpZD1cImxpbmVhckdyYWRpZW50LTFcIj5cbiAgICAgICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPVwiY3VycmVudENvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMFwiIG9mZnNldD1cIjAlXCI+PC9zdG9wPlxuICAgICAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9XCJjdXJyZW50Q29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjUwXCIgb2Zmc2V0PVwiMzkuOTQzMDY5OCVcIj48L3N0b3A+XG4gICAgICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj1cImN1cnJlbnRDb2xvclwiIG9mZnNldD1cIjEwMCVcIj48L3N0b3A+XG4gICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XG4gICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICA8ZyBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgICAgICAgICA8cmVjdCBmaWxsLW9wYWNpdHk9XCIwLjAxXCIgZmlsbD1cIm5vbmVcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIzNlwiIGhlaWdodD1cIjM2XCI+PC9yZWN0PlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNMzQsMTggQzM0LDkuMTYzNDQ0IDI2LjgzNjU1NiwyIDE4LDIgQzExLjY1OTcyMzMsMiA2LjE4MDc4ODA1LDUuNjg3ODQxMzUgMy41OTEyMjMyNSwxMS4wMzU0OTUxXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCJ1cmwoI2xpbmVhckdyYWRpZW50LTEpXCJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCI0XCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gPGltZyBjbGFzcz1cInNlbmRcIiBzcmM9XCIvYXNzZXRzL2ltYWdlcy9pbnB1dC9zZW5kLWdyYXkucG5nXCIgLz4gLS0+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2hhdC1pbnB1dC1iYWNrZHJvcFwiPjwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kZWxMaXN0Q29udGVudD5cbiAgPGRpdiBzdHlsZT1cIndpZHRoOiAyMDBweFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtdGl0bGVcIj5cbiAgICAgIOWIh+aNouaooeWei1xuICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJjbG9zZVwiIHN0eWxlPVwiY29sb3I6ICM5OTlcIiAoY2xpY2spPVwibW9kZWxWaXNpYmxlQ2hhbmdlKGZhbHNlKVwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWNvbnRlbnRcIj5cbiAgICAgIDxuei1yYWRpby1ncm91cCBbKG5nTW9kZWwpXT1cImN1cnJlbnRNb2RlbFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBuei1yYWRpb1xuICAgICAgICAgIFtuelZhbHVlXT1cIml0ZW1cIlxuICAgICAgICAgIFtzdHlsZS5tYXJnaW4tdG9wLnB4XT1cImkgPT09IDAgPyAwIDogMTBcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1vZGVsTGlzdDsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvbnotcmFkaW8tZ3JvdXA+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNrbm93bGVkZ2VMaXN0Q29udGVudD5cbiAgPGRpdiBzdHlsZT1cIndpZHRoOiAyNTBweFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtdGl0bGVcIj5cbiAgICAgIOWFs+iBlOefpeivhuW6k1xuICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJjbG9zZVwiIHN0eWxlPVwiY29sb3I6ICM5OTlcIiAoY2xpY2spPVwia25vd2xlZGdlVmlzaWJsZUNoYW5nZShmYWxzZSlcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdC1jb250ZW50XCI+XG4gICAgICA8bnotc3RlcHMgW256Q3VycmVudF09XCJrbm93bGVkZ2VTdGVwSW5kZXhcIiBuelByb2dyZXNzRG90IG56RGlyZWN0aW9uPVwidmVydGljYWxcIiBuelNpemU9XCJzbWFsbFwiPlxuICAgICAgICA8bnotc3RlcCBuelRpdGxlPVwi6YCJ5oup5YiG57G7XCIgW256RGVzY3JpcHRpb25dPVwidHlwZVNlbGVjdFRwbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdHlwZVNlbGVjdFRwbD5cbiAgICAgICAgICAgIDxuei1zZWxlY3RcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFR5cGVzXCJcbiAgICAgICAgICAgICAgbnpNb2RlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25UeXBlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBuelBsYWNlSG9sZGVyPVwi6K+36YCJ5oup5YiG57G7XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG56LW9wdGlvbiBbbnpWYWx1ZV09XCJpdGVtLnR5cGVcIiBbbnpMYWJlbF09XCJpdGVtLnR5cGVDXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdHlwZXNEYXRhXCI+PC9uei1vcHRpb24+XG4gICAgICAgICAgICA8L256LXNlbGVjdD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L256LXN0ZXA+XG4gICAgICAgIDxuei1zdGVwIG56VGl0bGU9XCLmkJzntKLpgInmi6nnm67lvZVcIiBbbnpEZXNjcmlwdGlvbl09XCJjYXRlZ29yeVNlbGVjdFRwbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2F0ZWdvcnlTZWxlY3RUcGw+XG4gICAgICAgICAgICA8bnotdHJlZS1zZWxlY3RcbiAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDYXRlZ29yaWVzXCJcbiAgICAgICAgICAgICAgW256Tm9kZXNdPVwiY2F0ZWdvcmllc0RhdGFcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNhdGVnb3J5Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBuekNoZWNrU3RyaWN0bHlcbiAgICAgICAgICAgICAgbnpTaG93U2VhcmNoXG4gICAgICAgICAgICAgIG56Q2hlY2thYmxlXG4gICAgICAgICAgICAgIG56UGxhY2VIb2xkZXI9XCLor7fpgInmi6nnm67lvZVcIlxuICAgICAgICAgICAgPjwvbnotdHJlZS1zZWxlY3Q+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uei1zdGVwPlxuICAgICAgICA8bnotc3RlcCBuelRpdGxlPVwi6YCJ5oup5qCH562+XCIgW256RGVzY3JpcHRpb25dPVwidGFnU2VsZWN0VHBsXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0YWdTZWxlY3RUcGw+XG4gICAgICAgICAgICA8bnotc2VsZWN0XG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRUYWdzXCJcbiAgICAgICAgICAgICAgbnpNb2RlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICBuelBsYWNlSG9sZGVyPVwi6K+36YCJ5oup5qCH562+XCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVGFnQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bnotb3B0aW9uLWdyb3VwIFtuekxhYmVsXT1cIml0ZW0ubmFtZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRhZ3NEYXRhXCI+XG4gICAgICAgICAgICAgICAgPG56LW9wdGlvblxuICAgICAgICAgICAgICAgICAgW256VmFsdWVdPVwiY2hpbGQuaUNvZGVcIlxuICAgICAgICAgICAgICAgICAgW256TGFiZWxdPVwiY2hpbGQubmFtZVwiXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgaXRlbS5jaGlsZHJlblwiXG4gICAgICAgICAgICAgICAgPjwvbnotb3B0aW9uPlxuICAgICAgICAgICAgICA8L256LW9wdGlvbi1ncm91cD5cbiAgICAgICAgICAgIDwvbnotc2VsZWN0PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbnotc3RlcD5cbiAgICAgIDwvbnotc3RlcHM+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZ2VudC9jaGF0L2NoYXQtaW5wdXQvY2hhdC1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZ2VudC9jaGF0L2NoYXQtaW5wdXQvY2hhdC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFjLFNBQVMsRUFBRSxNQUFNLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7OztBQVFyRCxNQUFNLE9BQU8sa0JBQWtCO0lBTC9CO1FBUVcsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQUN6QixTQUFJLEdBQW9CLE1BQU0sQ0FBQztRQUM5QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFvRCxDQUFDO1FBQ25GLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMzQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNuQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUVwQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXZDLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFDbkMscUJB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QUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQ3pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5RCxNQUFNLE9BQU8sR0FBaUI7WUFDNUIsWUFBWTtZQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUztZQUNyQixRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRTtnQkFDVCxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWE7Z0JBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsa0JBQWtCO2dCQUNqQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVk7YUFDeEI7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7O2dIQWxOVSxrQkFBa0I7b0dBQWxCLGtCQUFrQiwyWkNoQi9CLDZxU0FtTEE7NEZEbkthLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0I7OEJBS0YsTUFBTTtzQkFBN0IsU0FBUzt1QkFBQyxXQUFXO2dCQUNTLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBQ3BCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gY2hhdC1pbnB1dC5jb21wb25lbnQudHNcbmltcG9ydCB7IENvbXBvbmVudCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgaW5qZWN0LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2h0dHAyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSU1vZGVsLCBJTW9kZWxMaXN0IH0gZnJvbSAnLi4vbW9kZWxzL21vZGVsLWxpc3QubW9kZWwnO1xuaW1wb3J0IHsgU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vc3RvcmUvc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBJS25vd2xlZGdlQ2F0ZWdvcnksIElLbm93bGVkZ2VMaXN0LCBJS25vd2xlZGdlVGFnLCBJS25vd2xlZGdlVHlwZSB9IGZyb20gJy4uL21vZGVscy9rbm93bGVkZ2UtbGlzdC5tb2RlbCc7XG5pbXBvcnQgeyBJU2VuZE1lc3NhZ2UgfSBmcm9tICcuLi9tb2RlbHMvc2VuZC1tZXNzYWdlLm1vZGVsJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuLi9tb2RlbHMvbWVzc2FnZS5tb2RlbCc7XG5pbXBvcnQgeyBTc2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3NlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTnpUcmVlTm9kZU9wdGlvbnMgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHJlZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1jaGF0LWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGF0LWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENoYXRJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ2VkaXRvclJlZicpIGVkaXRvciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdjaGF0SW5wdXRXcmFwcGVyJykgY2hhdElucHV0V3JhcHBlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBASW5wdXQoKSBtZXNzYWdlczogTWVzc2FnZVtdID0gW107XG4gIEBJbnB1dCgpIG1vZGU6ICdmdWxsJyB8ICdjYXJkJyA9ICdmdWxsJztcbiAgQE91dHB1dCgpIHNlbmRNZXNzYWdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1lc3NhZ2U6IElTZW5kTWVzc2FnZTsgaXNSZWdlbmVyYXRlOiBib29sZWFuIH0+KCk7XG4gIEBPdXRwdXQoKSBtZXNzYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBlbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcGFzdGUgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gIHByaXZhdGUgaHR0cFNlcnZpY2UgPSBpbmplY3QoSHR0cFNlcnZpY2UpO1xuICBwcml2YXRlIHN0b3JlU2VydmljZSA9IGluamVjdChTdG9yZVNlcnZpY2UpO1xuICBwdWJsaWMgc3NlU2VydmljZSA9IGluamVjdChTc2VTZXJ2aWNlKTtcblxuICBpc0VtcHR5ID0gdHJ1ZTtcbiAgY3VycmVudE1vZGVsOiBJTW9kZWwgfCBudWxsID0gbnVsbDtcbiAgY3VycmVudEtub3dsZWRnZTogc3RyaW5nW10gPSBbXTtcbiAgbW9kZWxMaXN0OiBJTW9kZWxMaXN0ID0gW107XG4gIG1vZGVsUG9wb3ZlclZpc2libGUgPSBmYWxzZTtcbiAga25vd2xlZGdlUG9wb3ZlclZpc2libGUgPSBmYWxzZTtcbiAgZGVlcFRoaW5rID0gdHJ1ZTtcblxuICBrbm93bGVkZ2VTdGVwSW5kZXggPSAwO1xuICB0eXBlc0RhdGE6IElLbm93bGVkZ2VUeXBlW10gPSBbXTtcbiAgY2F0ZWdvcmllc0RhdGE6IE56VHJlZU5vZGVPcHRpb25zW10gPSBbXTtcbiAgdGFnc0RhdGE6IElLbm93bGVkZ2VUYWdbXSA9IFtdO1xuICBzZWxlY3RlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuICBzZWxlY3RlZENhdGVnb3JpZXM6IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkVGFnczogc3RyaW5nW10gPSBbXTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldE1vZGVsTGlzdCgpO1xuICAgIHRoaXMubG9hZFR5cGVzKCk7XG4gIH1cblxuICAvLyDlj6/kvpvkuqTkupLnmoTmqKHlnotcbiAgZ2V0TW9kZWxMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMuaHR0cFNlcnZpY2UuZ2V0PElNb2RlbExpc3Q+KGAke3RoaXMuc3RvcmVTZXJ2aWNlLmdldEJhc2VVcmwoKX0vYXBpL0NoYXRNb2RlbC9tb2RlbHNgKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIHRoaXMubW9kZWxMaXN0ID0gcmVzO1xuICAgICAgaWYgKHJlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TW9kZWwgPSByZXNbMF07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblR5cGVDaGFuZ2UodHlwZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5sb2FkQ2F0ZWdvcmllcyh0eXBlcyk7XG5cbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRUYWdzID0gW107XG4gICAgdGhpcy50YWdzRGF0YSA9IFtdO1xuICAgIHRoaXMua25vd2xlZGdlU3RlcEluZGV4ID0gdHlwZXMubGVuZ3RoID8gMSA6IDA7XG4gIH1cblxuICBvbkNhdGVnb3J5Q2hhbmdlKGNhdGVnb3JpZXM6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMgPSBjYXRlZ29yaWVzO1xuICAgIHRoaXMubG9hZFRhZ3MoY2F0ZWdvcmllcyk7XG4gICAgdGhpcy5zZWxlY3RlZFRhZ3MgPSBbXTtcbiAgICB0aGlzLmtub3dsZWRnZVN0ZXBJbmRleCA9IGNhdGVnb3JpZXMubGVuZ3RoID8gMiA6IDE7XG4gIH1cblxuICBvblRhZ0NoYW5nZSh0YWdzOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMua25vd2xlZGdlU3RlcEluZGV4ID0gdGFncy5sZW5ndGggPyAyIDogMTtcbiAgfVxuXG4gIC8vIOiOt+WPluWIhuexu1xuICBwcml2YXRlIGxvYWRUeXBlcygpOiB2b2lkIHtcbiAgICB0aGlzLmh0dHBTZXJ2aWNlXG4gICAgICAuZ2V0PElLbm93bGVkZ2VUeXBlW10+KGAke3RoaXMuc3RvcmVTZXJ2aWNlLmdldEJhc2VVcmwoKX0vYXBpL0NoYXRNb2RlbC9rbm93bGVkZ2VUeXBlc2ApXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMudHlwZXNEYXRhID0gcmVzO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyDojrflj5bnm67lvZVcbiAgcHJpdmF0ZSBsb2FkQ2F0ZWdvcmllcyh0eXBlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLmh0dHBTZXJ2aWNlXG4gICAgICAucG9zdDxJS25vd2xlZGdlQ2F0ZWdvcnlbXT4oYCR7dGhpcy5zdG9yZVNlcnZpY2UuZ2V0QmFzZVVybCgpfS9hcGkvQ2hhdE1vZGVsL2tub3dsZWRnZS9jYXRhbG9nc2AsIHtcbiAgICAgICAgdHlwZXM6IHRoaXMuc2VsZWN0ZWRUeXBlcyxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0RhdGEgPSB0aGlzLmNvbnZlcnRUb1RyZWUocmVzKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkVGFncyhjYXRlZ29yaWVzOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuaHR0cFNlcnZpY2VcbiAgICAgIC5wb3N0PElLbm93bGVkZ2VUYWdbXT4oYCR7dGhpcy5zdG9yZVNlcnZpY2UuZ2V0QmFzZVVybCgpfS9hcGkvQ2hhdE1vZGVsL2tub3dsZWRnZS90YWdzYCwge1xuICAgICAgICBjYXRhbG9nOiBjYXRlZ29yaWVzLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy50YWdzRGF0YSA9IHJlcztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9UcmVlKGRhdGE6IGFueSk6IGFueSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLm1hcChpdGVtID0+IGNvbnZlcnROb2RlKGl0ZW0pKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0Tm9kZShub2RlOiBhbnkpIHtcbiAgICAgIGxldCByZXN1bHQ6IGFueSA9IHtcbiAgICAgICAgdGl0bGU6IG5vZGUubmFtZSB8fCAnJyxcbiAgICAgICAgdmFsdWU6IG5vZGUuaUNvZGUsXG4gICAgICAgIGtleTogbm9kZS5pQ29kZSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQuY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLm1hcCgoY2hpbGQ6IGFueSkgPT4gY29udmVydE5vZGUoY2hpbGQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IFtdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0Tm9kZShkYXRhKTsgLy8g5aaC5p6c5piv5Y2V5Liq5a+56LGhXG4gIH1cblxuICBtb2RlbFZpc2libGVDaGFuZ2UodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsUG9wb3ZlclZpc2libGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGtub3dsZWRnZVZpc2libGVDaGFuZ2UodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmtub3dsZWRnZVBvcG92ZXJWaXNpYmxlID0gdmFsdWU7XG4gIH1cblxuICBrbm93bGVkZ2VTZWxlY3RDaGFuZ2UodmFsdWU6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50S25vd2xlZGdlID0gdmFsdWU7XG4gIH1cblxuICB0b2dnbGVEZWVwVGhpbmsoKTogdm9pZCB7XG4gICAgdGhpcy5kZWVwVGhpbmsgPSAhdGhpcy5kZWVwVGhpbms7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVtcHR5U3RhdGUoKSB7XG4gICAgY29uc3QgZWwgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHRleHQgPSBlbC50ZXh0Q29udGVudD8udHJpbSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc09ubHlCciA9IGVsLmlubmVySFRNTCA9PT0gJzxicj4nIHx8IGVsLmlubmVySFRNTCA9PT0gJyc7XG5cbiAgICB0aGlzLmlzRW1wdHkgPSB0ZXh0ID09PSAnJyAmJiBoYXNPbmx5QnI7XG4gIH1cblxuICBoYW5kbGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUVtcHR5U3RhdGUoKTtcbiAgICBjb25zdCBodG1sID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQgfHwgJyc7XG4gICAgLy8gdGhpcy5tZXNzYWdlQ2hhbmdlLmVtaXQodGV4dCk7XG4gIH1cblxuICBoYW5kbGVFbnRlcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIShldmVudCBhcyBLZXlib2FyZEV2ZW50KS5zaGlmdEtleSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8vIHRoaXMuZW50ZXIuZW1pdCgoZXZlbnQgYXMgYW55KS50YXJnZXQhLmlubmVyVGV4dCEucmVwbGFjZSgvXFxzKy9nLCBcIiBcIikudHJpbSgpKTtcbiAgICAgIHRoaXMuc2VuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIC8vIHRoaXMucGFzdGUuZW1pdChldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZUVtcHR5U3RhdGUoKSwgMCk7XG4gIH1cblxuICBjbGVhcklucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgdGhpcy5oYW5kbGVJbnB1dCgpO1xuICB9XG5cbiAgcmVnZW5lcmF0ZVNlbmQobXNnOiBNZXNzYWdlKTogdm9pZCB7XG4gICAgLy8g5q2j5Zyo5Zue562U5LitXG4gICAgaWYgKHRoaXMuc3NlU2VydmljZS5sb2FkaW5nU291cmNlLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IHRoaXMuc3RvcmVTZXJ2aWNlLmdldENvbnZlcnNhdGlvbklDb2RlKCk7XG4gICAgY29uc3QgbWVzc2FnZTogSVNlbmRNZXNzYWdlID0ge1xuICAgICAgY29udmVyc2F0aW9uLFxuICAgICAgcXVlc3Rpb25JQ29kZTogbXNnLmlDb2RlLFxuICAgICAgbW9kZWw6IHRoaXMuY3VycmVudE1vZGVsPy5pQ29kZSA/PyAnJyxcbiAgICAgIHRoaW5rOiB0aGlzLmRlZXBUaGluayxcbiAgICAgIHF1ZXN0aW9uOiBtc2cucXVlc3Rpb24sXG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdHlwZTogdGhpcy5zZWxlY3RlZFR5cGVzLFxuICAgICAgICBjYXRhbG9nczogdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMsXG4gICAgICAgIHRhZ3M6IHRoaXMuc2VsZWN0ZWRUYWdzLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuc2VuZE1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2UsIGlzUmVnZW5lcmF0ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHNlbmQoKTogdm9pZCB7XG4gICAgLy8g5q2j5Zyo5Zue562U5LitXG4gICAgaWYgKHRoaXMuc3NlU2VydmljZS5sb2FkaW5nU291cmNlLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRleHQgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50IHx8ICcnO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IHRoaXMuc3RvcmVTZXJ2aWNlLmdldENvbnZlcnNhdGlvbklDb2RlKCk7XG4gICAgY29uc3QgbWVzc2FnZTogSVNlbmRNZXNzYWdlID0ge1xuICAgICAgY29udmVyc2F0aW9uLFxuICAgICAgbW9kZWw6IHRoaXMuY3VycmVudE1vZGVsPy5pQ29kZSA/PyAnJyxcbiAgICAgIHRoaW5rOiB0aGlzLmRlZXBUaGluayxcbiAgICAgIHF1ZXN0aW9uOiB0ZXh0LFxuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHR5cGU6IHRoaXMuc2VsZWN0ZWRUeXBlcyxcbiAgICAgICAgY2F0YWxvZ3M6IHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzLFxuICAgICAgICB0YWdzOiB0aGlzLnNlbGVjdGVkVGFncyxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICB0aGlzLnNlbmRNZXNzYWdlLmVtaXQoeyBtZXNzYWdlLCBpc1JlZ2VuZXJhdGU6IGZhbHNlIH0pO1xuICB9XG59XG4iLCI8IS0tIOaWsOiBiuWkqeS9jeS6juWxj+W5leS4remXtO+8jOWPkemAgea2iOaBr+S5i+WQjuS9jeS6juW6lemDqCAtLT5cbjxkaXZcbiAgY2xhc3M9XCJjaGF0LWlucHV0LXdyYXBwZXJcIlxuICAjY2hhdElucHV0V3JhcHBlclxuICBbY2xhc3MuY2VudGVyXT1cIiFtZXNzYWdlcy5sZW5ndGhcIlxuICBbbmdTdHlsZV09XCJ7ICdwYWRkaW5nLWJvdHRvbSc6IG1vZGUgPT09ICdmdWxsJyA/ICc0MHB4JyA6ICcxMHB4JyB9XCJcbj5cbiAgPGRpdiBjbGFzcz1cIm5ldy1jaGF0LXRpdGxlXCIgKm5nSWY9XCIhbWVzc2FnZXMubGVuZ3RoXCI+XG4gICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltYWdlcy9sb2dvLnBuZ1wiIC8+XG4gICAgPHNwYW4+5L2g5aW977yM5pyJ5LuA5LmI5Y+v5Lul5biu5Yiw5L2g77yf5byA5aeL5a+56K+d5ZCnPC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNoYXQtaW5wdXRcIj5cbiAgICA8ZGl2XG4gICAgICAjZWRpdG9yUmVmXG4gICAgICBjbGFzcz1cImlucHV0LWNyZWF0aXZlLWVkaXRvclwiXG4gICAgICBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJcbiAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICBkYXRhLXBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5bm25Y+R6YCB5raI5oGvXCJcbiAgICAgIFthdHRyLmRhdGEtZW1wdHldPVwiaXNFbXB0eVwiXG4gICAgICAoaW5wdXQpPVwiaGFuZGxlSW5wdXQoKVwiXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVFbnRlcigkZXZlbnQpXCJcbiAgICAgIChwYXN0ZSk9XCJoYW5kbGVQYXN0ZSgkZXZlbnQpXCJcbiAgICA+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWJvdHRvbVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRvb2xzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtdG9vbFwiIFtuZ0NsYXNzXT1cInsgJ3NlbGVjdC10b29sLWFjdGl2ZSc6IGRlZXBUaGluayB9XCIgKGNsaWNrKT1cInRvZ2dsZURlZXBUaGluaygpXCI+XG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgdD1cIjE3NjQxMzEwMjY5NDlcIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTRweDsgaGVpZ2h0OiAxNHB4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWNvblwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiXG4gICAgICAgICAgICB2ZXJzaW9uPVwiMS4xXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgcC1pZD1cIjUwMTJcIlxuICAgICAgICAgICAgd2lkdGg9XCI2NFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCI2NFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk05MDMuMzYgNTEyYTc5NS41MiA3OTUuNTIgMCAwIDEgNjUuNTM2IDEzNi43MDRjNDggMTMyLjE2IDM5LjYxNiAyMzAuNTI4LTI1LjAyNCAyOTUuMTY4LTY0LjY0IDY0LjY0LTE2My4wMDggNzIuOTYtMjk1LjE2OCAyNC45NkE3OTUuNTIgNzk1LjUyIDAgMCAxIDUxMiA5MDMuNDI0YTc5NS41MiA3OTUuNTIgMCAwIDEtMTM2LjcwNCA2NS41MzZjLTEzMi4wOTYgNDgtMjMwLjUyOCAzOS42MTYtMjk1LjE2OC0yNS4wMjQtNjQuNjQtNjQuNjQtNzIuOTYtMTYzLjAwOC0yNC45Ni0yOTUuMTA0IDE2LjY0LTQ2LjAxNiAzOC41MjgtOTEuNTIgNjUuNTM2LTEzNi43NjhBNzk1LjUyIDc5NS41MiAwIDAgMSA1NS4wNCAzNzUuMjMyQzcuMDQgMjQzLjIgMTUuMzYgMTQ0Ljc2OCA4MCA4MC4xMjggMTQ0Ljc2OCAxNS40ODggMjQzLjIgNy4xNjggMzc1LjI5NiA1NS4wNGM0Ni4wMTYgMTYuNjQgOTEuNTg0IDM4LjUyOCAxMzYuNzY4IDY1LjUzNkE3OTUuNTIgNzk1LjUyIDAgMCAxIDY0OC43NjggNTUuMTA0YzEzMi4wOTYtNDggMjMwLjQ2NC0zOS42MTYgMjk1LjEwNCAyNS4wMjQgNjQuNjQgNjQuNjQgNzIuOTYgMTYzLjAwOCAyNS4wMjQgMjk1LjEwNEE3OTUuNTIgNzk1LjUyIDAgMCAxIDkwMy4zNiA1MTJ6IG0tNTMuMTItNzkuNDI0YzE1LjE2OC0yOC43MzYgMjcuOTY4LTU3LjUzNiAzOC40NjQtODYuNCAzNS41ODQtOTguMTEyIDMzLjkyLTE2Ni42NTYtNS4xMi0yMDUuNjk2LTM5LjA0LTM5LjA0LTEwNy42NDgtNDAuNzY4LTIwNS42OTYtNS4xMmE2ODUuNDQgNjg1LjQ0IDAgMCAwLTg2LjQgMzguNCAxMjQwLjk2IDEyNDAuOTYgMCAwIDEgMTM4LjQzMiAxMjAuMzIgMTI0MC44MzIgMTI0MC44MzIgMCAwIDEgMTIwLjMyIDEzOC40OTZ6TTQzMi41NzYgMTczLjgyNGE2ODUuNDQgNjg1LjQ0IDAgMCAwLTg2LjQtMzguNTI4Yy05OC4xMTItMzUuNTg0LTE2Ni42NTYtMzMuOTItMjA1LjY5NiA1LjEyLTM5LjA0IDM5LjA0LTQwLjc2OCAxMDcuNjQ4LTUuMTIgMjA1LjY5NiAxMC40MzIgMjguOTI4IDIzLjI5NiA1Ny43MjggMzguNCA4Ni40YTEyNDAuODk2IDEyNDAuODk2IDAgMCAxIDEyMC4zMi0xMzguNDMyIDEyNDAuODMyIDEyNDAuODMyIDAgMCAxIDEzOC40OTYtMTIwLjMyek0xNzMuODI0IDU5MS40ODhhNjg1LjQ0IDY4NS40NCAwIDAgMC0zOC40NjQgODYuNGMtMzUuNjQ4IDk4LjA0OC0zMy45MiAxNjYuNTkyIDUuMTIgMjA1LjYzMiAzOS4wNCAzOS4wNCAxMDcuNTg0IDQwLjc2OCAyMDUuNjk2IDUuMTJhNjg1LjQ0IDY4NS40NCAwIDAgMCA4Ni40LTM4LjQgMTI0MC43NjggMTI0MC43NjggMCAwIDEtMTM4LjQ5Ni0xMjAuMzIgMTI0MC45NiAxMjQwLjk2IDAgMCAxLTEyMC4yNTYtMTM4LjQzMnogbTQ5NS43NDQgNzguMDhBMTExMi4wNjQgMTExMi4wNjQgMCAwIDAgODAyLjA0OCA1MTJhMTExMi4wNjQgMTExMi4wNjQgMCAwIDAtMTMyLjQ4LTE1Ny41NjhBMTExMi4xMjggMTExMi4xMjggMCAwIDAgNTEyIDIyMS45NTJhMTExMi4xMjggMTExMi4xMjggMCAwIDAtMTU3LjUwNCAxMzIuNDhBMTExMi4wNjQgMTExMi4wNjQgMCAwIDAgMjIyLjAxNiA1MTJhMTExMi4xOTIgMTExMi4xOTIgMCAwIDAgMTMyLjQxNiAxNTcuNTY4QTExMTIuMDY0IDExMTIuMDY0IDAgMCAwIDUxMiA4MDIuMDQ4YTExMTIuMTI4IDExMTIuMTI4IDAgMCAwIDE1Ny41NjgtMTMyLjQ4eiBtLTc4LjA4IDE4MC42MDhjMjguNjcyIDE1LjE2OCA1Ny40NzIgMjguMDMyIDg2LjQgMzguNDY0IDk4LjA0OCAzNS42NDggMTY2LjU5MiAzMy45MiAyMDUuNjMyLTUuMTIgMzkuMDQtMzkuMDQgNDAuNzY4LTEwNy41ODQgNS4xMi0yMDUuNjk2YTY4NS41MDQgNjg1LjUwNCAwIDAgMC0zOC40LTg2LjQgMTI0MC44MzIgMTI0MC44MzIgMCAwIDEtMTIwLjMyIDEzOC40OTYgMTI0MC45NiAxMjQwLjk2IDAgMCAxLTEzOC40MzIgMTIwLjMyek01ODUuMDg4IDUxMmE3My4xNTIgNzMuMTUyIDAgMSAxLTE0Ni4yNCAwIDczLjE1MiA3My4xNTIgMCAwIDEgMTQ2LjMwNCAwelwiXG4gICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICBwLWlkPVwiNTAxM1wiXG4gICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIOa3seW6puaAneiAg1xuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0LXRvb2xcIlxuICAgICAgICAgIG56LXBvcG92ZXJcbiAgICAgICAgICBbbnpQb3BvdmVyQ29udGVudF09XCJtb2RlbExpc3RDb250ZW50XCJcbiAgICAgICAgICBuelBvcG92ZXJUcmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgICAgIG56UG9wb3Zlck92ZXJsYXlDbGFzc05hbWU9XCJwYXJhbXMtc2VsZWN0LXBvcG92ZXJcIlxuICAgICAgICAgIFtuelBvcG92ZXJWaXNpYmxlXT1cIm1vZGVsUG9wb3ZlclZpc2libGVcIlxuICAgICAgICAgIChuelBvcG92ZXJWaXNpYmxlQ2hhbmdlKT1cIm1vZGVsVmlzaWJsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbWFnZXMvaW5wdXQvdG9nZ2xlLW1vZGVsLnBuZ1wiIHN0eWxlPVwid2lkdGg6IDEycHg7IGhlaWdodDogMTJweFwiIC8+XG4gICAgICAgICAge3sgY3VycmVudE1vZGVsID8gY3VycmVudE1vZGVsPy5uYW1lIDogJ+mAieaLqeaooeWeiycgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInNlbGVjdC10b29sXCJcbiAgICAgICAgICBuei1wb3BvdmVyXG4gICAgICAgICAgW256UG9wb3ZlckNvbnRlbnRdPVwia25vd2xlZGdlTGlzdENvbnRlbnRcIlxuICAgICAgICAgIG56UG9wb3ZlclRyaWdnZXI9XCJjbGlja1wiXG4gICAgICAgICAgbnpQb3BvdmVyT3ZlcmxheUNsYXNzTmFtZT1cInBhcmFtcy1zZWxlY3QtcG9wb3ZlclwiXG4gICAgICAgICAgW256UG9wb3ZlclZpc2libGVdPVwia25vd2xlZGdlUG9wb3ZlclZpc2libGVcIlxuICAgICAgICAgIChuelBvcG92ZXJWaXNpYmxlQ2hhbmdlKT1cImtub3dsZWRnZVZpc2libGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaW1hZ2VzL2lucHV0L3JlbGF0ZS5wbmdcIiBzdHlsZT1cIndpZHRoOiAxNHB4OyBoZWlnaHQ6IDhweFwiIC8+XG4gICAgICAgICAg5YWz6IGU55+l6K+G5bqTXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8aW1nIGNsYXNzPVwic2VuZFwiIHNyYz1cIi9hc3NldHMvaW1hZ2VzL2lucHV0L3NlbmQucG5nXCIgKGNsaWNrKT1cInNlbmQoKVwiIFtoaWRkZW5dPVwic3NlU2VydmljZS5sb2FkaW5nJCB8IGFzeW5jXCIgLz5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZW5kLWxvYWRpbmdcIiAqbmdJZj1cInNzZVNlcnZpY2UubG9hZGluZyQgfCBhc3luY1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VuZC1sb2FkaW5nLWlubmVyXCI+XG4gICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWljb249XCJzcGluXCI+XG4gICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IHgxPVwiMCVcIiB5MT1cIjEwMCVcIiB4Mj1cIjEwMCVcIiB5Mj1cIjEwMCVcIiBpZD1cImxpbmVhckdyYWRpZW50LTFcIj5cbiAgICAgICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPVwiY3VycmVudENvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMFwiIG9mZnNldD1cIjAlXCI+PC9zdG9wPlxuICAgICAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9XCJjdXJyZW50Q29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjUwXCIgb2Zmc2V0PVwiMzkuOTQzMDY5OCVcIj48L3N0b3A+XG4gICAgICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj1cImN1cnJlbnRDb2xvclwiIG9mZnNldD1cIjEwMCVcIj48L3N0b3A+XG4gICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XG4gICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICA8ZyBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgICAgICAgICA8cmVjdCBmaWxsLW9wYWNpdHk9XCIwLjAxXCIgZmlsbD1cIm5vbmVcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIzNlwiIGhlaWdodD1cIjM2XCI+PC9yZWN0PlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNMzQsMTggQzM0LDkuMTYzNDQ0IDI2LjgzNjU1NiwyIDE4LDIgQzExLjY1OTcyMzMsMiA2LjE4MDc4ODA1LDUuNjg3ODQxMzUgMy41OTEyMjMyNSwxMS4wMzU0OTUxXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCJ1cmwoI2xpbmVhckdyYWRpZW50LTEpXCJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCI0XCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gPGltZyBjbGFzcz1cInNlbmRcIiBzcmM9XCIvYXNzZXRzL2ltYWdlcy9pbnB1dC9zZW5kLWdyYXkucG5nXCIgLz4gLS0+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2hhdC1pbnB1dC1iYWNrZHJvcFwiPjwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kZWxMaXN0Q29udGVudD5cbiAgPGRpdiBzdHlsZT1cIndpZHRoOiAyMDBweFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtdGl0bGVcIj5cbiAgICAgIOWIh+aNouaooeWei1xuICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJjbG9zZVwiIHN0eWxlPVwiY29sb3I6ICM5OTlcIiAoY2xpY2spPVwibW9kZWxWaXNpYmxlQ2hhbmdlKGZhbHNlKVwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWNvbnRlbnRcIj5cbiAgICAgIDxuei1yYWRpby1ncm91cCBbKG5nTW9kZWwpXT1cImN1cnJlbnRNb2RlbFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBuei1yYWRpb1xuICAgICAgICAgIFtuelZhbHVlXT1cIml0ZW1cIlxuICAgICAgICAgIFtzdHlsZS5tYXJnaW4tdG9wLnB4XT1cImkgPT09IDAgPyAwIDogMTBcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1vZGVsTGlzdDsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvbnotcmFkaW8tZ3JvdXA+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNrbm93bGVkZ2VMaXN0Q29udGVudD5cbiAgPGRpdiBzdHlsZT1cIndpZHRoOiAyNTBweFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtdGl0bGVcIj5cbiAgICAgIOWFs+iBlOefpeivhuW6k1xuICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJjbG9zZVwiIHN0eWxlPVwiY29sb3I6ICM5OTlcIiAoY2xpY2spPVwia25vd2xlZGdlVmlzaWJsZUNoYW5nZShmYWxzZSlcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdC1jb250ZW50XCI+XG4gICAgICA8bnotc3RlcHMgW256Q3VycmVudF09XCJrbm93bGVkZ2VTdGVwSW5kZXhcIiBuelByb2dyZXNzRG90IG56RGlyZWN0aW9uPVwidmVydGljYWxcIiBuelNpemU9XCJzbWFsbFwiPlxuICAgICAgICA8bnotc3RlcCBuelRpdGxlPVwi6YCJ5oup5YiG57G7XCIgW256RGVzY3JpcHRpb25dPVwidHlwZVNlbGVjdFRwbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdHlwZVNlbGVjdFRwbD5cbiAgICAgICAgICAgIDxuei1zZWxlY3RcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFR5cGVzXCJcbiAgICAgICAgICAgICAgbnpNb2RlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25UeXBlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBuelBsYWNlSG9sZGVyPVwi6K+36YCJ5oup5YiG57G7XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG56LW9wdGlvbiBbbnpWYWx1ZV09XCJpdGVtLnR5cGVcIiBbbnpMYWJlbF09XCJpdGVtLnR5cGVDXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdHlwZXNEYXRhXCI+PC9uei1vcHRpb24+XG4gICAgICAgICAgICA8L256LXNlbGVjdD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L256LXN0ZXA+XG4gICAgICAgIDxuei1zdGVwIG56VGl0bGU9XCLmkJzntKLpgInmi6nnm67lvZVcIiBbbnpEZXNjcmlwdGlvbl09XCJjYXRlZ29yeVNlbGVjdFRwbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2F0ZWdvcnlTZWxlY3RUcGw+XG4gICAgICAgICAgICA8bnotdHJlZS1zZWxlY3RcbiAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDYXRlZ29yaWVzXCJcbiAgICAgICAgICAgICAgW256Tm9kZXNdPVwiY2F0ZWdvcmllc0RhdGFcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNhdGVnb3J5Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBuekNoZWNrU3RyaWN0bHlcbiAgICAgICAgICAgICAgbnpIaWRlVW5NYXRjaGVkXG4gICAgICAgICAgICAgIG56U2hvd1NlYXJjaFxuICAgICAgICAgICAgICBuekNoZWNrYWJsZVxuICAgICAgICAgICAgICBuelBsYWNlSG9sZGVyPVwi6K+36YCJ5oup55uu5b2VXCJcbiAgICAgICAgICAgID48L256LXRyZWUtc2VsZWN0PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbnotc3RlcD5cbiAgICAgICAgPG56LXN0ZXAgbnpUaXRsZT1cIumAieaLqeagh+etvlwiIFtuekRlc2NyaXB0aW9uXT1cInRhZ1NlbGVjdFRwbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGFnU2VsZWN0VHBsPlxuICAgICAgICAgICAgPG56LXNlbGVjdFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVGFnc1wiXG4gICAgICAgICAgICAgIG56TW9kZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgbnpQbGFjZUhvbGRlcj1cIuivt+mAieaLqeagh+etvlwiXG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCVcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblRhZ0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG56LW9wdGlvbi1ncm91cCBbbnpMYWJlbF09XCJpdGVtLm5hbWVcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiB0YWdzRGF0YVwiPlxuICAgICAgICAgICAgICAgIDxuei1vcHRpb25cbiAgICAgICAgICAgICAgICAgIFtuelZhbHVlXT1cImNoaWxkLmlDb2RlXCJcbiAgICAgICAgICAgICAgICAgIFtuekxhYmVsXT1cImNoaWxkLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGl0ZW0uY2hpbGRyZW5cIlxuICAgICAgICAgICAgICAgID48L256LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9uei1vcHRpb24tZ3JvdXA+XG4gICAgICAgICAgICA8L256LXNlbGVjdD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L256LXN0ZXA+XG4gICAgICA8L256LXN0ZXBzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -54,7 +54,7 @@ AgentChatModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version
54
54
  NzSelectModule,
55
55
  NzTreeSelectModule,
56
56
  FormsModule,
57
- MarkdownPipe], exports: [NgxAgentChatComponent, FloatingChatComponent, FloatingChatComponent] });
57
+ MarkdownPipe], exports: [NgxAgentChatComponent, FloatingChatComponent] });
58
58
  AgentChatModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AgentChatModule, providers: [NzMessageService], imports: [CommonModule,
59
59
  NzAvatarModule,
60
60
  NzSpinModule,
@@ -107,7 +107,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
107
107
  MarkdownPipe,
108
108
  ],
109
109
  providers: [NzMessageService],
110
- exports: [NgxAgentChatComponent, FloatingChatComponent, FloatingChatComponent],
110
+ exports: [NgxAgentChatComponent, FloatingChatComponent],
111
111
  }]
112
112
  }] });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hZ2VudC9jaGF0L2NoYXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQW9DaEYsTUFBTSxPQUFPLGVBQWU7OzZHQUFmLGVBQWU7OEdBQWYsZUFBZSxpQkFoQ3hCLHFCQUFxQjtRQUNyQixrQkFBa0I7UUFDbEIscUJBQXFCO1FBQ3JCLG9CQUFvQjtRQUNwQix5QkFBeUI7UUFDekIscUJBQXFCO1FBQ3JCLHFCQUFxQixhQUdyQixZQUFZO1FBQ1osY0FBYztRQUNkLFlBQVk7UUFDWixXQUFXO1FBQ1gsYUFBYTtRQUNiLGNBQWM7UUFDZCxZQUFZO1FBQ1osY0FBYztRQUNkLGNBQWM7UUFDZCxlQUFlO1FBQ2YsYUFBYTtRQUNiLGdCQUFnQjtRQUNoQixZQUFZO1FBQ1osa0JBQWtCO1FBQ2xCLGFBQWE7UUFDYixjQUFjO1FBQ2Qsa0JBQWtCO1FBQ2xCLFdBQVc7UUFDWCxZQUFZLGFBR0oscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCOzhHQUVsRSxlQUFlLGFBSGYsQ0FBQyxnQkFBZ0IsQ0FBQyxZQXBCM0IsWUFBWTtRQUNaLGNBQWM7UUFDZCxZQUFZO1FBQ1osV0FBVztRQUNYLGFBQWE7UUFDYixjQUFjO1FBQ2QsWUFBWTtRQUNaLGNBQWM7UUFDZCxjQUFjO1FBQ2QsZUFBZTtRQUNmLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsWUFBWTtRQUNaLGtCQUFrQjtRQUNsQixhQUFhO1FBQ2IsY0FBYztRQUNkLGtCQUFrQjtRQUNsQixXQUFXOzRGQU1GLGVBQWU7a0JBbEMzQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixxQkFBcUI7d0JBQ3JCLGtCQUFrQjt3QkFDbEIscUJBQXFCO3dCQUNyQixvQkFBb0I7d0JBQ3BCLHlCQUF5Qjt3QkFDekIscUJBQXFCO3dCQUNyQixxQkFBcUI7cUJBQ3RCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsV0FBVzt3QkFDWCxZQUFZO3FCQUNiO29CQUNELFNBQVMsRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUM3QixPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQztpQkFDL0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5neEFnZW50Q2hhdENvbXBvbmVudCB9IGZyb20gJy4vY2hhdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hhdElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9jaGF0LWlucHV0L2NoYXQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENoYXRNZXNzYWdlc0NvbXBvbmVudCB9IGZyb20gJy4vY2hhdC1tZXNzYWdlcy9jaGF0LW1lc3NhZ2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOekF2YXRhck1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvYXZhdGFyJztcbmltcG9ydCB7IE56U3Bpbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvc3Bpbic7XG5pbXBvcnQgeyBDaGF0U2lkZWJhckNvbXBvbmVudCB9IGZyb20gJy4vY2hhdC1zaWRlYmFyL2NoYXQtc2lkZWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnpUYWdNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL3RhZyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE56SW5wdXRNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2lucHV0JztcbmltcG9ydCB7IE56QnV0dG9uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9idXR0b24nO1xuaW1wb3J0IHsgTnpMaXN0TW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9saXN0JztcbmltcG9ydCB7IE56U2xpZGVyTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9zbGlkZXInO1xuaW1wb3J0IHsgTnpMYXlvdXRNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2xheW91dCc7XG5pbXBvcnQgeyBOelBvcG92ZXJNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL3BvcG92ZXInO1xuaW1wb3J0IHsgTnpSYWRpb01vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvcmFkaW8nO1xuaW1wb3J0IHsgTnpDaGVja2JveE1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY2hlY2tib3gnO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcbmltcG9ydCB7IE1hcmtkb3duUGlwZSB9IGZyb20gJy4vcGlwZXMvbWFya2Rvd24ucGlwZSc7XG5pbXBvcnQgeyBOek1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9tZXNzYWdlJztcbmltcG9ydCB7IE56UGFnaW5hdGlvbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBTaW1wbGVQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGlzdG9yeUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9jaGF0LXNpZGViYXIvaGlzdG9yeS1ncm91cC9oaXN0b3J5LWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOelN0ZXBzTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9zdGVwcyc7XG5pbXBvcnQgeyBOelNlbGVjdE1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvc2VsZWN0JztcbmltcG9ydCB7IE56VHJlZVNlbGVjdE1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvdHJlZS1zZWxlY3QnO1xuaW1wb3J0IHsgRmxvYXRpbmdDaGF0Q29tcG9uZW50IH0gZnJvbSAnLi9mbG9hdGluZy1jaGF0L2Zsb2F0aW5nLWNoYXQuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgTmd4QWdlbnRDaGF0Q29tcG9uZW50LFxuICAgIENoYXRJbnB1dENvbXBvbmVudCxcbiAgICBDaGF0TWVzc2FnZXNDb21wb25lbnQsXG4gICAgQ2hhdFNpZGViYXJDb21wb25lbnQsXG4gICAgU2ltcGxlUGFnaW5hdGlvbkNvbXBvbmVudCxcbiAgICBIaXN0b3J5R3JvdXBDb21wb25lbnQsXG4gICAgRmxvYXRpbmdDaGF0Q29tcG9uZW50LFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE56QXZhdGFyTW9kdWxlLFxuICAgIE56U3Bpbk1vZHVsZSxcbiAgICBOelRhZ01vZHVsZSxcbiAgICBOeklucHV0TW9kdWxlLFxuICAgIE56QnV0dG9uTW9kdWxlLFxuICAgIE56TGlzdE1vZHVsZSxcbiAgICBOelNsaWRlck1vZHVsZSxcbiAgICBOekxheW91dE1vZHVsZSxcbiAgICBOelBvcG92ZXJNb2R1bGUsXG4gICAgTnpSYWRpb01vZHVsZSxcbiAgICBOekNoZWNrYm94TW9kdWxlLFxuICAgIE56SWNvbk1vZHVsZSxcbiAgICBOelBhZ2luYXRpb25Nb2R1bGUsXG4gICAgTnpTdGVwc01vZHVsZSxcbiAgICBOelNlbGVjdE1vZHVsZSxcbiAgICBOelRyZWVTZWxlY3RNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWFya2Rvd25QaXBlLFxuICBdLFxuICBwcm92aWRlcnM6IFtOek1lc3NhZ2VTZXJ2aWNlXSxcbiAgZXhwb3J0czogW05neEFnZW50Q2hhdENvbXBvbmVudCwgRmxvYXRpbmdDaGF0Q29tcG9uZW50LCBGbG9hdGluZ0NoYXRDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBBZ2VudENoYXRNb2R1bGUge31cbiJdfQ==
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hZ2VudC9jaGF0L2NoYXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQW9DaEYsTUFBTSxPQUFPLGVBQWU7OzZHQUFmLGVBQWU7OEdBQWYsZUFBZSxpQkFoQ3hCLHFCQUFxQjtRQUNyQixrQkFBa0I7UUFDbEIscUJBQXFCO1FBQ3JCLG9CQUFvQjtRQUNwQix5QkFBeUI7UUFDekIscUJBQXFCO1FBQ3JCLHFCQUFxQixhQUdyQixZQUFZO1FBQ1osY0FBYztRQUNkLFlBQVk7UUFDWixXQUFXO1FBQ1gsYUFBYTtRQUNiLGNBQWM7UUFDZCxZQUFZO1FBQ1osY0FBYztRQUNkLGNBQWM7UUFDZCxlQUFlO1FBQ2YsYUFBYTtRQUNiLGdCQUFnQjtRQUNoQixZQUFZO1FBQ1osa0JBQWtCO1FBQ2xCLGFBQWE7UUFDYixjQUFjO1FBQ2Qsa0JBQWtCO1FBQ2xCLFdBQVc7UUFDWCxZQUFZLGFBR0oscUJBQXFCLEVBQUUscUJBQXFCOzhHQUUzQyxlQUFlLGFBSGYsQ0FBQyxnQkFBZ0IsQ0FBQyxZQXBCM0IsWUFBWTtRQUNaLGNBQWM7UUFDZCxZQUFZO1FBQ1osV0FBVztRQUNYLGFBQWE7UUFDYixjQUFjO1FBQ2QsWUFBWTtRQUNaLGNBQWM7UUFDZCxjQUFjO1FBQ2QsZUFBZTtRQUNmLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsWUFBWTtRQUNaLGtCQUFrQjtRQUNsQixhQUFhO1FBQ2IsY0FBYztRQUNkLGtCQUFrQjtRQUNsQixXQUFXOzRGQU1GLGVBQWU7a0JBbEMzQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixxQkFBcUI7d0JBQ3JCLGtCQUFrQjt3QkFDbEIscUJBQXFCO3dCQUNyQixvQkFBb0I7d0JBQ3BCLHlCQUF5Qjt3QkFDekIscUJBQXFCO3dCQUNyQixxQkFBcUI7cUJBQ3RCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsV0FBVzt3QkFDWCxZQUFZO3FCQUNiO29CQUNELFNBQVMsRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUM3QixPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQztpQkFDeEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5neEFnZW50Q2hhdENvbXBvbmVudCB9IGZyb20gJy4vY2hhdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hhdElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9jaGF0LWlucHV0L2NoYXQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENoYXRNZXNzYWdlc0NvbXBvbmVudCB9IGZyb20gJy4vY2hhdC1tZXNzYWdlcy9jaGF0LW1lc3NhZ2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOekF2YXRhck1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvYXZhdGFyJztcbmltcG9ydCB7IE56U3Bpbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvc3Bpbic7XG5pbXBvcnQgeyBDaGF0U2lkZWJhckNvbXBvbmVudCB9IGZyb20gJy4vY2hhdC1zaWRlYmFyL2NoYXQtc2lkZWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnpUYWdNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL3RhZyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE56SW5wdXRNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2lucHV0JztcbmltcG9ydCB7IE56QnV0dG9uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9idXR0b24nO1xuaW1wb3J0IHsgTnpMaXN0TW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9saXN0JztcbmltcG9ydCB7IE56U2xpZGVyTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9zbGlkZXInO1xuaW1wb3J0IHsgTnpMYXlvdXRNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2xheW91dCc7XG5pbXBvcnQgeyBOelBvcG92ZXJNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL3BvcG92ZXInO1xuaW1wb3J0IHsgTnpSYWRpb01vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvcmFkaW8nO1xuaW1wb3J0IHsgTnpDaGVja2JveE1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY2hlY2tib3gnO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcbmltcG9ydCB7IE1hcmtkb3duUGlwZSB9IGZyb20gJy4vcGlwZXMvbWFya2Rvd24ucGlwZSc7XG5pbXBvcnQgeyBOek1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9tZXNzYWdlJztcbmltcG9ydCB7IE56UGFnaW5hdGlvbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBTaW1wbGVQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGlzdG9yeUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9jaGF0LXNpZGViYXIvaGlzdG9yeS1ncm91cC9oaXN0b3J5LWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOelN0ZXBzTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9zdGVwcyc7XG5pbXBvcnQgeyBOelNlbGVjdE1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvc2VsZWN0JztcbmltcG9ydCB7IE56VHJlZVNlbGVjdE1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvdHJlZS1zZWxlY3QnO1xuaW1wb3J0IHsgRmxvYXRpbmdDaGF0Q29tcG9uZW50IH0gZnJvbSAnLi9mbG9hdGluZy1jaGF0L2Zsb2F0aW5nLWNoYXQuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgTmd4QWdlbnRDaGF0Q29tcG9uZW50LFxuICAgIENoYXRJbnB1dENvbXBvbmVudCxcbiAgICBDaGF0TWVzc2FnZXNDb21wb25lbnQsXG4gICAgQ2hhdFNpZGViYXJDb21wb25lbnQsXG4gICAgU2ltcGxlUGFnaW5hdGlvbkNvbXBvbmVudCxcbiAgICBIaXN0b3J5R3JvdXBDb21wb25lbnQsXG4gICAgRmxvYXRpbmdDaGF0Q29tcG9uZW50LFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE56QXZhdGFyTW9kdWxlLFxuICAgIE56U3Bpbk1vZHVsZSxcbiAgICBOelRhZ01vZHVsZSxcbiAgICBOeklucHV0TW9kdWxlLFxuICAgIE56QnV0dG9uTW9kdWxlLFxuICAgIE56TGlzdE1vZHVsZSxcbiAgICBOelNsaWRlck1vZHVsZSxcbiAgICBOekxheW91dE1vZHVsZSxcbiAgICBOelBvcG92ZXJNb2R1bGUsXG4gICAgTnpSYWRpb01vZHVsZSxcbiAgICBOekNoZWNrYm94TW9kdWxlLFxuICAgIE56SWNvbk1vZHVsZSxcbiAgICBOelBhZ2luYXRpb25Nb2R1bGUsXG4gICAgTnpTdGVwc01vZHVsZSxcbiAgICBOelNlbGVjdE1vZHVsZSxcbiAgICBOelRyZWVTZWxlY3RNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWFya2Rvd25QaXBlLFxuICBdLFxuICBwcm92aWRlcnM6IFtOek1lc3NhZ2VTZXJ2aWNlXSxcbiAgZXhwb3J0czogW05neEFnZW50Q2hhdENvbXBvbmVudCwgRmxvYXRpbmdDaGF0Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgQWdlbnRDaGF0TW9kdWxlIHt9XG4iXX0=
@@ -139,7 +139,7 @@ export class FloatingChatComponent {
139
139
  }
140
140
  }
141
141
  FloatingChatComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FloatingChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
142
- FloatingChatComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FloatingChatComponent, selector: "ngx-agent-floating-chat", inputs: { title: "title", baseUrl: "baseUrl", token: "token" }, viewQueries: [{ propertyName: "chatSidebarRef", first: true, predicate: ["chatSidebarRef"], descendants: true }, { propertyName: "chatMessagesRef", first: true, predicate: ["chatMessagesRef"], descendants: true }, { propertyName: "chatInputRef", first: true, predicate: ["chatInputRef"], descendants: true }], ngImport: i0, template: "<div class=\"floating-chat-container\">\n <div class=\"chat-box\" [@chatBoxState]=\"isExpanded ? 'expanded' : 'collapsed'\">\n <header class=\"chat-header\">\n <div class=\"header-content\">\n <span\n class=\"icon menu-icon\"\n nz-popover\n [nzPopoverContent]=\"historyTpl\"\n nzPopoverTrigger=\"click\"\n nzPopoverOverlayClassName=\"params-select-popover\"\n nzPopoverPlacement=\"rightTop\"\n [nzPopoverVisible]=\"modelPopoverVisible\"\n (nzPopoverVisibleChange)=\"modelVisibleChange($event)\"\n >\n <img src=\"/assets/images/floating/history-menu.png\" style=\"width: 16px\" />\n </span>\n <h3 class=\"chat-title\">{{ title }}</h3>\n <img src=\"/assets/images/floating/new-chat.png\" style=\"width: 20px; cursor: pointer\" (click)=\"openNewChat()\" />\n </div>\n </header>\n\n <div class=\"chat-main\">\n <ngx-chat-messages\n #chatMessagesRef\n [messages]=\"messages\"\n (regenerateAnswer)=\"regenerateAnswer($event)\"\n ></ngx-chat-messages>\n <ngx-chat-input\n #chatInputRef\n [messages]=\"messages\"\n mode=\"card\"\n (sendMessage)=\"onSendMessage($event)\"\n ></ngx-chat-input>\n </div>\n </div>\n\n <button class=\"toggle-button\" (click)=\"toggleChatBox()\">\n <span class=\"button-icon\" [@buttonIconState]=\"isExpanded ? 'expanded' : 'collapsed'\">\n <img src=\"/assets/images/logo.png\" style=\"width: 36px\" *ngIf=\"!isExpanded\" />\n <img src=\"/assets/images/floating/arrow-down.png\" style=\"width: 24px\" *ngIf=\"isExpanded\" />\n </span>\n </button>\n</div>\n\n<!-- \u5386\u53F2\u5BF9\u8BDD -->\n<ng-template #historyTpl>\n <div style=\"width: 100%; max-height: 600px\">\n <!-- <div class=\"select-title\"> -->\n <!-- <div class=\"section-title\"> -->\n <!-- <img src=\"assets/images/sidebar/history-chat.png\" /> -->\n <!-- <span>\u5386\u53F2\u5BF9\u8BDD</span> -->\n <!-- </div> -->\n <!-- <i nz-icon nzType=\"close\" style=\"color: #999\" (click)=\"modelVisibleChange(false)\"></i> -->\n <!-- </div> -->\n <ngx-chat-sidebar #chatSidebarRef mode=\"card\"></ngx-chat-sidebar>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host ::ng-deep ::-webkit-scrollbar{width:6px}:host ::ng-deep ::-webkit-scrollbar-track{background:transparent}:host ::ng-deep ::-webkit-scrollbar-thumb{background:#d1d1d1;border-radius:8px}:host ::ng-deep ::-webkit-scrollbar-thumb:hover{background:#b0b0b0}.floating-chat-container{position:fixed;bottom:20px;right:20px;z-index:1000;display:flex;flex-direction:column;align-items:flex-end}.chat-box{width:660px;height:820px;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;margin-bottom:10px;overflow:hidden;display:flex;flex-direction:column}.chat-header{background-color:#fff;color:#fff;padding:12px 15px;border-top-left-radius:8px;border-top-right-radius:8px}.header-content{display:flex;justify-content:space-between;align-items:center}.chat-title{margin:0;font-size:16px;font-weight:500;flex-grow:1;text-align:center}.icon{font-size:18px;cursor:pointer}.chat-main{flex-grow:1;display:flex;flex-direction:column;overflow-y:auto;background-color:#fff}.welcome-message{text-align:center;padding-top:50px}.chat-icon{color:#409eff;margin-bottom:10px}.chat-icon svg{fill:#409eff}.welcome-text{color:#333;font-size:14px}.chat-footer{border-top:1px solid #eee;padding:10px 15px;background-color:#fff}.input-area-placeholder{display:flex;align-items:center;border:1px solid #ddd;border-radius:20px;margin-bottom:8px;overflow:hidden}.input-area-placeholder input{flex-grow:1;border:none;padding:8px 12px;outline:none;background-color:#fff;cursor:default}.input-area-placeholder .send-btn{background:none;border:none;padding:6px 10px;cursor:default;color:#bbb}.input-area-placeholder .send-btn svg{fill:#bbb}.bottom-controls{display:flex;justify-content:space-between;font-size:12px;color:#888}.control-item{cursor:default}.send-btn-placeholder{color:#409eff;font-weight:700;font-size:14px}.toggle-button{width:50px;height:50px;border-radius:50%;background-color:#fff;border:none;box-shadow:0 4px 8px #00000026;cursor:pointer;display:flex;justify-content:center;align-items:center;outline:none;color:#2157ff;order:2}.button-icon{display:block}.button-icon svg{fill:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NzPopoverDirective, selector: "[nz-popover]", inputs: ["nzPopoverArrowPointAtCenter", "nzPopoverTitle", "nzPopoverContent", "nz-popover", "nzPopoverTrigger", "nzPopoverPlacement", "nzPopoverOrigin", "nzPopoverVisible", "nzPopoverMouseEnterDelay", "nzPopoverMouseLeaveDelay", "nzPopoverOverlayClassName", "nzPopoverOverlayStyle", "nzPopoverBackdrop"], outputs: ["nzPopoverVisibleChange"], exportAs: ["nzPopover"] }, { kind: "component", type: i3.ChatInputComponent, selector: "ngx-chat-input", inputs: ["messages", "mode"], outputs: ["sendMessage", "messageChange", "enter", "paste"] }, { kind: "component", type: i4.ChatMessagesComponent, selector: "ngx-chat-messages", inputs: ["messages"], outputs: ["regenerateAnswer"] }, { kind: "component", type: i5.ChatSidebarComponent, selector: "ngx-chat-sidebar", inputs: ["mode"] }], animations: [
142
+ FloatingChatComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FloatingChatComponent, selector: "ngx-agent-floating-chat", inputs: { title: "title", baseUrl: "baseUrl", token: "token" }, viewQueries: [{ propertyName: "chatSidebarRef", first: true, predicate: ["chatSidebarRef"], descendants: true }, { propertyName: "chatMessagesRef", first: true, predicate: ["chatMessagesRef"], descendants: true }, { propertyName: "chatInputRef", first: true, predicate: ["chatInputRef"], descendants: true }], ngImport: i0, template: "<div class=\"floating-chat-container\">\n <div class=\"chat-box\" [@chatBoxState]=\"isExpanded ? 'expanded' : 'collapsed'\">\n <header class=\"chat-header\">\n <div class=\"header-content\">\n <span\n class=\"icon menu-icon\"\n nz-popover\n [nzPopoverContent]=\"historyTpl\"\n nzPopoverTrigger=\"click\"\n nzPopoverOverlayClassName=\"params-select-popover\"\n nzPopoverPlacement=\"rightTop\"\n [nzPopoverVisible]=\"modelPopoverVisible\"\n (nzPopoverVisibleChange)=\"modelVisibleChange($event)\"\n >\n <img src=\"/assets/images/floating/history-menu.png\" style=\"width: 16px\" />\n </span>\n <h3 class=\"chat-title\">{{ title }}</h3>\n <img src=\"/assets/images/floating/new-chat.png\" style=\"width: 20px; cursor: pointer\" (click)=\"openNewChat()\" />\n </div>\n </header>\n\n <div class=\"chat-main\">\n <ngx-chat-messages\n #chatMessagesRef\n [messages]=\"messages\"\n (regenerateAnswer)=\"regenerateAnswer($event)\"\n ></ngx-chat-messages>\n <ngx-chat-input\n #chatInputRef\n [messages]=\"messages\"\n mode=\"card\"\n (sendMessage)=\"onSendMessage($event)\"\n ></ngx-chat-input>\n </div>\n </div>\n\n <button class=\"toggle-button\" (click)=\"toggleChatBox()\">\n <span class=\"button-icon\" [@buttonIconState]=\"isExpanded ? 'expanded' : 'collapsed'\">\n <img src=\"/assets/images/logo.png\" style=\"width: 36px\" *ngIf=\"!isExpanded\" />\n <img src=\"/assets/images/floating/arrow-down.png\" style=\"width: 24px\" *ngIf=\"isExpanded\" />\n </span>\n </button>\n</div>\n\n<!-- \u5386\u53F2\u5BF9\u8BDD -->\n<ng-template #historyTpl>\n <div style=\"width: 100%; max-height: 600px\">\n <!-- <div class=\"select-title\"> -->\n <!-- <div class=\"section-title\"> -->\n <!-- <img src=\"assets/images/sidebar/history-chat.png\" /> -->\n <!-- <span>\u5386\u53F2\u5BF9\u8BDD</span> -->\n <!-- </div> -->\n <!-- <i nz-icon nzType=\"close\" style=\"color: #999\" (click)=\"modelVisibleChange(false)\"></i> -->\n <!-- </div> -->\n <ngx-chat-sidebar #chatSidebarRef mode=\"card\"></ngx-chat-sidebar>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host ::ng-deep ::-webkit-scrollbar{width:6px}:host ::ng-deep ::-webkit-scrollbar-track{background:transparent}:host ::ng-deep ::-webkit-scrollbar-thumb{background:#d1d1d1;border-radius:8px}:host ::ng-deep ::-webkit-scrollbar-thumb:hover{background:#b0b0b0}.floating-chat-container{position:fixed;bottom:20px;right:20px;z-index:1000;display:flex;flex-direction:column;align-items:flex-end}.chat-box{width:660px;height:82vh;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;margin-bottom:10px;overflow:hidden;display:flex;flex-direction:column}.chat-header{background-color:#fff;color:#fff;padding:12px 15px;border-top-left-radius:8px;border-top-right-radius:8px}.header-content{display:flex;justify-content:space-between;align-items:center}.chat-title{margin:0;font-size:16px;font-weight:500;flex-grow:1;text-align:center}.icon{font-size:18px;cursor:pointer}.chat-main{flex-grow:1;display:flex;flex-direction:column;overflow-y:auto;background-color:#fff}.welcome-message{text-align:center;padding-top:50px}.chat-icon{color:#409eff;margin-bottom:10px}.chat-icon svg{fill:#409eff}.welcome-text{color:#333;font-size:14px}.chat-footer{border-top:1px solid #eee;padding:10px 15px;background-color:#fff}.input-area-placeholder{display:flex;align-items:center;border:1px solid #ddd;border-radius:20px;margin-bottom:8px;overflow:hidden}.input-area-placeholder input{flex-grow:1;border:none;padding:8px 12px;outline:none;background-color:#fff;cursor:default}.input-area-placeholder .send-btn{background:none;border:none;padding:6px 10px;cursor:default;color:#bbb}.input-area-placeholder .send-btn svg{fill:#bbb}.bottom-controls{display:flex;justify-content:space-between;font-size:12px;color:#888}.control-item{cursor:default}.send-btn-placeholder{color:#409eff;font-weight:700;font-size:14px}.toggle-button{width:50px;height:50px;border-radius:50%;background-color:#fff;border:none;box-shadow:0 4px 8px #00000026;cursor:pointer;display:flex;justify-content:center;align-items:center;outline:none;color:#2157ff;order:2}.button-icon{display:block}.button-icon svg{fill:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NzPopoverDirective, selector: "[nz-popover]", inputs: ["nzPopoverArrowPointAtCenter", "nzPopoverTitle", "nzPopoverContent", "nz-popover", "nzPopoverTrigger", "nzPopoverPlacement", "nzPopoverOrigin", "nzPopoverVisible", "nzPopoverMouseEnterDelay", "nzPopoverMouseLeaveDelay", "nzPopoverOverlayClassName", "nzPopoverOverlayStyle", "nzPopoverBackdrop"], outputs: ["nzPopoverVisibleChange"], exportAs: ["nzPopover"] }, { kind: "component", type: i3.ChatInputComponent, selector: "ngx-chat-input", inputs: ["messages", "mode"], outputs: ["sendMessage", "messageChange", "enter", "paste"] }, { kind: "component", type: i4.ChatMessagesComponent, selector: "ngx-chat-messages", inputs: ["messages"], outputs: ["regenerateAnswer"] }, { kind: "component", type: i5.ChatSidebarComponent, selector: "ngx-chat-sidebar", inputs: ["mode"] }], animations: [
143
143
  // 定义容器的展开/收起动画
144
144
  trigger('chatBoxState', [
145
145
  state('collapsed', style({
@@ -148,7 +148,7 @@ FloatingChatComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
148
148
  display: 'none',
149
149
  // visibility: 'hidden',
150
150
  width: '660px',
151
- height: '820px', // 保持高度一致,但不可见
151
+ height: '82vh', // 保持高度一致,但不可见
152
152
  })),
153
153
  state('expanded', style({
154
154
  opacity: 1,
@@ -156,7 +156,7 @@ FloatingChatComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
156
156
  display: 'flex',
157
157
  // visibility: 'visible',
158
158
  width: '660px',
159
- height: '820px',
159
+ height: '82vh',
160
160
  })),
161
161
  transition('collapsed <=> expanded', [
162
162
  animate('300ms cubic-bezier(0.4, 0.0, 0.2, 1)'), // 贝塞尔曲线提供更自然的动画
@@ -184,7 +184,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
184
184
  display: 'none',
185
185
  // visibility: 'hidden',
186
186
  width: '660px',
187
- height: '820px', // 保持高度一致,但不可见
187
+ height: '82vh', // 保持高度一致,但不可见
188
188
  })),
189
189
  state('expanded', style({
190
190
  opacity: 1,
@@ -192,7 +192,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
192
192
  display: 'flex',
193
193
  // visibility: 'visible',
194
194
  width: '660px',
195
- height: '820px',
195
+ height: '82vh',
196
196
  })),
197
197
  transition('collapsed <=> expanded', [
198
198
  animate('300ms cubic-bezier(0.4, 0.0, 0.2, 1)'), // 贝塞尔曲线提供更自然的动画
@@ -208,7 +208,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
208
208
  })),
209
209
  transition('collapsed <=> expanded', [animate('300ms cubic-bezier(0.4, 0.0, 0.2, 1)')]),
210
210
  ]),
211
- ], template: "<div class=\"floating-chat-container\">\n <div class=\"chat-box\" [@chatBoxState]=\"isExpanded ? 'expanded' : 'collapsed'\">\n <header class=\"chat-header\">\n <div class=\"header-content\">\n <span\n class=\"icon menu-icon\"\n nz-popover\n [nzPopoverContent]=\"historyTpl\"\n nzPopoverTrigger=\"click\"\n nzPopoverOverlayClassName=\"params-select-popover\"\n nzPopoverPlacement=\"rightTop\"\n [nzPopoverVisible]=\"modelPopoverVisible\"\n (nzPopoverVisibleChange)=\"modelVisibleChange($event)\"\n >\n <img src=\"/assets/images/floating/history-menu.png\" style=\"width: 16px\" />\n </span>\n <h3 class=\"chat-title\">{{ title }}</h3>\n <img src=\"/assets/images/floating/new-chat.png\" style=\"width: 20px; cursor: pointer\" (click)=\"openNewChat()\" />\n </div>\n </header>\n\n <div class=\"chat-main\">\n <ngx-chat-messages\n #chatMessagesRef\n [messages]=\"messages\"\n (regenerateAnswer)=\"regenerateAnswer($event)\"\n ></ngx-chat-messages>\n <ngx-chat-input\n #chatInputRef\n [messages]=\"messages\"\n mode=\"card\"\n (sendMessage)=\"onSendMessage($event)\"\n ></ngx-chat-input>\n </div>\n </div>\n\n <button class=\"toggle-button\" (click)=\"toggleChatBox()\">\n <span class=\"button-icon\" [@buttonIconState]=\"isExpanded ? 'expanded' : 'collapsed'\">\n <img src=\"/assets/images/logo.png\" style=\"width: 36px\" *ngIf=\"!isExpanded\" />\n <img src=\"/assets/images/floating/arrow-down.png\" style=\"width: 24px\" *ngIf=\"isExpanded\" />\n </span>\n </button>\n</div>\n\n<!-- \u5386\u53F2\u5BF9\u8BDD -->\n<ng-template #historyTpl>\n <div style=\"width: 100%; max-height: 600px\">\n <!-- <div class=\"select-title\"> -->\n <!-- <div class=\"section-title\"> -->\n <!-- <img src=\"assets/images/sidebar/history-chat.png\" /> -->\n <!-- <span>\u5386\u53F2\u5BF9\u8BDD</span> -->\n <!-- </div> -->\n <!-- <i nz-icon nzType=\"close\" style=\"color: #999\" (click)=\"modelVisibleChange(false)\"></i> -->\n <!-- </div> -->\n <ngx-chat-sidebar #chatSidebarRef mode=\"card\"></ngx-chat-sidebar>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host ::ng-deep ::-webkit-scrollbar{width:6px}:host ::ng-deep ::-webkit-scrollbar-track{background:transparent}:host ::ng-deep ::-webkit-scrollbar-thumb{background:#d1d1d1;border-radius:8px}:host ::ng-deep ::-webkit-scrollbar-thumb:hover{background:#b0b0b0}.floating-chat-container{position:fixed;bottom:20px;right:20px;z-index:1000;display:flex;flex-direction:column;align-items:flex-end}.chat-box{width:660px;height:820px;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;margin-bottom:10px;overflow:hidden;display:flex;flex-direction:column}.chat-header{background-color:#fff;color:#fff;padding:12px 15px;border-top-left-radius:8px;border-top-right-radius:8px}.header-content{display:flex;justify-content:space-between;align-items:center}.chat-title{margin:0;font-size:16px;font-weight:500;flex-grow:1;text-align:center}.icon{font-size:18px;cursor:pointer}.chat-main{flex-grow:1;display:flex;flex-direction:column;overflow-y:auto;background-color:#fff}.welcome-message{text-align:center;padding-top:50px}.chat-icon{color:#409eff;margin-bottom:10px}.chat-icon svg{fill:#409eff}.welcome-text{color:#333;font-size:14px}.chat-footer{border-top:1px solid #eee;padding:10px 15px;background-color:#fff}.input-area-placeholder{display:flex;align-items:center;border:1px solid #ddd;border-radius:20px;margin-bottom:8px;overflow:hidden}.input-area-placeholder input{flex-grow:1;border:none;padding:8px 12px;outline:none;background-color:#fff;cursor:default}.input-area-placeholder .send-btn{background:none;border:none;padding:6px 10px;cursor:default;color:#bbb}.input-area-placeholder .send-btn svg{fill:#bbb}.bottom-controls{display:flex;justify-content:space-between;font-size:12px;color:#888}.control-item{cursor:default}.send-btn-placeholder{color:#409eff;font-weight:700;font-size:14px}.toggle-button{width:50px;height:50px;border-radius:50%;background-color:#fff;border:none;box-shadow:0 4px 8px #00000026;cursor:pointer;display:flex;justify-content:center;align-items:center;outline:none;color:#2157ff;order:2}.button-icon{display:block}.button-icon svg{fill:#fff}\n"] }]
211
+ ], template: "<div class=\"floating-chat-container\">\n <div class=\"chat-box\" [@chatBoxState]=\"isExpanded ? 'expanded' : 'collapsed'\">\n <header class=\"chat-header\">\n <div class=\"header-content\">\n <span\n class=\"icon menu-icon\"\n nz-popover\n [nzPopoverContent]=\"historyTpl\"\n nzPopoverTrigger=\"click\"\n nzPopoverOverlayClassName=\"params-select-popover\"\n nzPopoverPlacement=\"rightTop\"\n [nzPopoverVisible]=\"modelPopoverVisible\"\n (nzPopoverVisibleChange)=\"modelVisibleChange($event)\"\n >\n <img src=\"/assets/images/floating/history-menu.png\" style=\"width: 16px\" />\n </span>\n <h3 class=\"chat-title\">{{ title }}</h3>\n <img src=\"/assets/images/floating/new-chat.png\" style=\"width: 20px; cursor: pointer\" (click)=\"openNewChat()\" />\n </div>\n </header>\n\n <div class=\"chat-main\">\n <ngx-chat-messages\n #chatMessagesRef\n [messages]=\"messages\"\n (regenerateAnswer)=\"regenerateAnswer($event)\"\n ></ngx-chat-messages>\n <ngx-chat-input\n #chatInputRef\n [messages]=\"messages\"\n mode=\"card\"\n (sendMessage)=\"onSendMessage($event)\"\n ></ngx-chat-input>\n </div>\n </div>\n\n <button class=\"toggle-button\" (click)=\"toggleChatBox()\">\n <span class=\"button-icon\" [@buttonIconState]=\"isExpanded ? 'expanded' : 'collapsed'\">\n <img src=\"/assets/images/logo.png\" style=\"width: 36px\" *ngIf=\"!isExpanded\" />\n <img src=\"/assets/images/floating/arrow-down.png\" style=\"width: 24px\" *ngIf=\"isExpanded\" />\n </span>\n </button>\n</div>\n\n<!-- \u5386\u53F2\u5BF9\u8BDD -->\n<ng-template #historyTpl>\n <div style=\"width: 100%; max-height: 600px\">\n <!-- <div class=\"select-title\"> -->\n <!-- <div class=\"section-title\"> -->\n <!-- <img src=\"assets/images/sidebar/history-chat.png\" /> -->\n <!-- <span>\u5386\u53F2\u5BF9\u8BDD</span> -->\n <!-- </div> -->\n <!-- <i nz-icon nzType=\"close\" style=\"color: #999\" (click)=\"modelVisibleChange(false)\"></i> -->\n <!-- </div> -->\n <ngx-chat-sidebar #chatSidebarRef mode=\"card\"></ngx-chat-sidebar>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host ::ng-deep ::-webkit-scrollbar{width:6px}:host ::ng-deep ::-webkit-scrollbar-track{background:transparent}:host ::ng-deep ::-webkit-scrollbar-thumb{background:#d1d1d1;border-radius:8px}:host ::ng-deep ::-webkit-scrollbar-thumb:hover{background:#b0b0b0}.floating-chat-container{position:fixed;bottom:20px;right:20px;z-index:1000;display:flex;flex-direction:column;align-items:flex-end}.chat-box{width:660px;height:82vh;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;margin-bottom:10px;overflow:hidden;display:flex;flex-direction:column}.chat-header{background-color:#fff;color:#fff;padding:12px 15px;border-top-left-radius:8px;border-top-right-radius:8px}.header-content{display:flex;justify-content:space-between;align-items:center}.chat-title{margin:0;font-size:16px;font-weight:500;flex-grow:1;text-align:center}.icon{font-size:18px;cursor:pointer}.chat-main{flex-grow:1;display:flex;flex-direction:column;overflow-y:auto;background-color:#fff}.welcome-message{text-align:center;padding-top:50px}.chat-icon{color:#409eff;margin-bottom:10px}.chat-icon svg{fill:#409eff}.welcome-text{color:#333;font-size:14px}.chat-footer{border-top:1px solid #eee;padding:10px 15px;background-color:#fff}.input-area-placeholder{display:flex;align-items:center;border:1px solid #ddd;border-radius:20px;margin-bottom:8px;overflow:hidden}.input-area-placeholder input{flex-grow:1;border:none;padding:8px 12px;outline:none;background-color:#fff;cursor:default}.input-area-placeholder .send-btn{background:none;border:none;padding:6px 10px;cursor:default;color:#bbb}.input-area-placeholder .send-btn svg{fill:#bbb}.bottom-controls{display:flex;justify-content:space-between;font-size:12px;color:#888}.control-item{cursor:default}.send-btn-placeholder{color:#409eff;font-weight:700;font-size:14px}.toggle-button{width:50px;height:50px;border-radius:50%;background-color:#fff;border:none;box-shadow:0 4px 8px #00000026;cursor:pointer;display:flex;justify-content:center;align-items:center;outline:none;color:#2157ff;order:2}.button-icon{display:block}.button-icon svg{fill:#fff}\n"] }]
212
212
  }], propDecorators: { title: [{
213
213
  type: Input
214
214
  }], baseUrl: [{
@@ -225,4 +225,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
225
225
  type: ViewChild,
226
226
  args: ['chatInputRef']
227
227
  }] } });
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXRpbmctY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZ2VudC9jaGF0L2Zsb2F0aW5nLWNoYXQvZmxvYXRpbmctY2hhdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZ2VudC9jaGF0L2Zsb2F0aW5nLWNoYXQvZmxvYXRpbmctY2hhdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFJL0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBd0R6RCxNQUFNLE9BQU8scUJBQXFCO0lBcERsQztRQXFERSxvQkFBb0I7UUFDcEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixLQUFLO1FBQ0ksVUFBSyxHQUFHLFNBQVMsQ0FBQztRQVEzQjs7V0FFRztRQUNNLFlBQU8sR0FBRywyQkFBMkIsQ0FBQztRQUN0QyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBS1osT0FBRSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFD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SW5wdXQsIE5nWm9uZSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRyaWdnZXIsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgYW5pbWF0ZSwgZ3JvdXAsIHF1ZXJ5IH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDaGF0U2lkZWJhckNvbXBvbmVudCB9IGZyb20gJy4uL2NoYXQtc2lkZWJhci9jaGF0LXNpZGViYXIuY29tcG9uZW50JztcbmltcG9ydCB7IENoYXRNZXNzYWdlc0NvbXBvbmVudCB9IGZyb20gJy4uL2NoYXQtbWVzc2FnZXMvY2hhdC1tZXNzYWdlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hhdElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hhdC1pbnB1dC9jaGF0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXJrZG93blN0cmVhbVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYXJrZG93bi1zdHJlYW0uc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2h0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBTc2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3NlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vc3RvcmUvc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuLi9tb2RlbHMvbWVzc2FnZS5tb2RlbCc7XG5pbXBvcnQgeyBJU2VuZE1lc3NhZ2UgfSBmcm9tICcuLi9tb2RlbHMvc2VuZC1tZXNzYWdlLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWFnZW50LWZsb2F0aW5nLWNoYXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmxvYXRpbmctY2hhdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zsb2F0aW5nLWNoYXQuY29tcG9uZW50LnNjc3MnXSxcbiAgLy8g5a6a5LmJ5Yqo55S7XG4gIGFuaW1hdGlvbnM6IFtcbiAgICAvLyDlrprkuYnlrrnlmajnmoTlsZXlvIAv5pS26LW35Yqo55S7XG4gICAgdHJpZ2dlcignY2hhdEJveFN0YXRlJywgW1xuICAgICAgc3RhdGUoXG4gICAgICAgICdjb2xsYXBzZWQnLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwLjgpIHRyYW5zbGF0ZVkoMjBweCknLFxuICAgICAgICAgIGRpc3BsYXk6ICdub25lJyxcbiAgICAgICAgICAvLyB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgICAgICB3aWR0aDogJzY2MHB4JywgLy8g56Gu5L+d5Zyo5pS26LW354q25oCB5LiL77yM5a695bqm5LiN5Lya5b2x5ZON5oyJ6ZKuXG4gICAgICAgICAgaGVpZ2h0OiAnODIwcHgnLCAvLyDkv53mjIHpq5jluqbkuIDoh7TvvIzkvYbkuI3lj6/op4FcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAgc3RhdGUoXG4gICAgICAgICdleHBhbmRlZCcsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpIHRyYW5zbGF0ZVkoMCknLFxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAvLyB2aXNpYmlsaXR5OiAndmlzaWJsZScsXG4gICAgICAgICAgd2lkdGg6ICc2NjBweCcsXG4gICAgICAgICAgaGVpZ2h0OiAnODIwcHgnLFxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICB0cmFuc2l0aW9uKCdjb2xsYXBzZWQgPD0+IGV4cGFuZGVkJywgW1xuICAgICAgICBhbmltYXRlKCczMDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKSwgLy8g6LSd5aGe5bCU5puy57q/5o+Q5L6b5pu06Ieq54S255qE5Yqo55S7XG4gICAgICBdKSxcbiAgICBdKSxcbiAgICAvLyDlrprkuYnmgqzmta7mjInpkq7nmoTml4vovazliqjnlLtcbiAgICB0cmlnZ2VyKCdidXR0b25JY29uU3RhdGUnLCBbXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICdyb3RhdGUoMGRlZyknLFxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ2V4cGFuZGVkJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZSgwZGVnKScsIC8vIOWxleW8gOaXtu+8jFjlm77moIfml4vovaw0NeW6plxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICB0cmFuc2l0aW9uKCdjb2xsYXBzZWQgPD0+IGV4cGFuZGVkJywgW2FuaW1hdGUoJzMwMG1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpXSksXG4gICAgXSksXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZsb2F0aW5nQ2hhdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8vIOeKtuaAgeWPmOmHj++8jOeUqOS6juaOp+WItue7hOS7tueahOaYvuekuuWSjOWKqOeUu1xuICBpc0V4cGFuZGVkID0gZmFsc2U7XG5cbiAgLy8g5qCH6aKYXG4gIEBJbnB1dCgpIHRpdGxlID0gJ0FJLemdkua4heawtOWIqSc7XG4gIC8qKlxuICAgKiDliIfmjaLogYrlpKnmoYbnmoTlsZXlvIAv5pS26LW354q25oCBXG4gICAqL1xuICB0b2dnbGVDaGF0Qm94KCkge1xuICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XG4gIH1cblxuICAvKipcbiAgICog5o6l5Y+jYmFzZVVybOmFjee9rlxuICAgKi9cbiAgQElucHV0KCkgYmFzZVVybCA9ICdodHRwOi8vMzkuMTAyLjU2LjI1NDo4MDgyJztcbiAgQElucHV0KCkgdG9rZW4gPSAnJztcbiAgQFZpZXdDaGlsZCgnY2hhdFNpZGViYXJSZWYnKSBjaGF0U2lkZWJhclJlZiE6IENoYXRTaWRlYmFyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdjaGF0TWVzc2FnZXNSZWYnKSBjaGF0TWVzc2FnZXNSZWYhOiBDaGF0TWVzc2FnZXNDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2NoYXRJbnB1dFJlZicpIGNoYXRJbnB1dFJlZiE6IENoYXRJbnB1dENvbXBvbmVudDtcblxuICBwcml2YXRlIG1kID0gaW5qZWN0KE1hcmtkb3duU3RyZWFtU2VydmljZSk7XG4gIHByaXZhdGUgaHR0cFNlcnZpY2UgPSBpbmplY3QoSHR0cFNlcnZpY2UpO1xuICBwcml2YXRlIHNzZVNlcnZpY2UgPSBpbmplY3QoU3NlU2VydmljZSk7XG4gIHByaXZhdGUgc3RvcmVTZXJ2aWNlID0gaW5qZWN0KFN0b3JlU2VydmljZSk7XG4gIHByaXZhdGUgc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gIHByaXZhdGUgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXIhOiBSZXNpemVPYnNlcnZlcjtcblxuICBtZXNzYWdlczogTWVzc2FnZVtdID0gW107IC8vIOa2iOaBr+aVsOe7hFxuICAvLyDljoblj7Llr7nor51cbiAgbW9kZWxQb3BvdmVyVmlzaWJsZSA9IGZhbHNlO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmVTZXJ2aWNlLnNldFRva2VuKHRoaXMudG9rZW4pO1xuICAgIHRoaXMuc3RvcmVTZXJ2aWNlLnNldEJhc2VVcmwodGhpcy5iYXNlVXJsKTtcbiAgICB0aGlzLnNzZVNlcnZpY2UuY29udmVyc2F0aW9uSUNvZGUkLnN1YnNjcmliZShpQ29kZU9iaiA9PiB7XG4gICAgICBpZiAoaUNvZGVPYmopIHtcbiAgICAgICAgY29uc3QgY3VycmVudE1zZyA9IHRoaXMubWVzc2FnZXNbdGhpcy5tZXNzYWdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgY3VycmVudE1zZy5pQ29kZSA9IGlDb2RlT2JqLnF1ZXN0aW9uO1xuICAgICAgICBjdXJyZW50TXNnLmFuc3dlcnNbY3VycmVudE1zZy5hbnN3ZXJJbmRleF0uaUNvZGUgPSBpQ29kZU9iai5hbnN3ZXI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zc2VTZXJ2aWNlLnRoaW5raW5nJC5zdWJzY3JpYmUodGV4dCA9PiB7XG4gICAgICBpZiAodGhpcy5tZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNc2cgPSB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGN1cnJlbnRNc2cuYW5zd2Vyc1tjdXJyZW50TXNnLmFuc3dlckluZGV4XS50aGluayA9IHRleHQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zc2VTZXJ2aWNlLmN1cnJlbnRNZXNzYWdlJC5zdWJzY3JpYmUodGV4dCA9PiB7XG4gICAgICBpZiAodGhpcy5tZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNc2cgPSB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGN1cnJlbnRNc2cuYW5zd2Vyc1tjdXJyZW50TXNnLmFuc3dlckluZGV4XS5jb250ZW50ID0gdGV4dDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcmVTZXJ2aWNlLmN1cnJlbnRDb252ZXJzYXRpb24kLnN1YnNjcmliZShjb252ZXJzYXRpb24gPT4ge1xuICAgICAgaWYgKCFjb252ZXJzYXRpb24pIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IFtdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmh0dHBTZXJ2aWNlXG4gICAgICAgIC5nZXQoYCR7dGhpcy5zdG9yZVNlcnZpY2UuZ2V0QmFzZVVybCgpfS9hcGkvQ2hhdE1vZGVsL2NvbnZlcnNhdGlvbi9xdWVzdGlvbnNgLCB7IGlDb2RlOiBjb252ZXJzYXRpb24/LmlDb2RlIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlczogTWVzc2FnZVtdKSA9PiB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlcyA9IHJlcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLmFuc3dlckluZGV4ID0gMDtcbiAgICAgICAgICAgIGl0ZW0uYW5zd2Vycy5mb3JFYWNoKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgIGFuc3dlci50aGlua0V4cGFuZCA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgZm9yIChsZXQgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSBlbnRyeS5jb250ZW50UmVjdC5oZWlnaHQ7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jaGF0TWVzc2FnZXNSZWYuaW5wdXRIZWlnaHQgPSBuZXdIZWlnaHQgKyA2MDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8g5byA5aeL55uR5ZCs6L6T5YWl5qGG5YWD57SgXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuY2hhdElucHV0UmVmLmNoYXRJbnB1dFdyYXBwZXIubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBtb2RlbFZpc2libGVDaGFuZ2UodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsUG9wb3ZlclZpc2libGUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8vIOaJk+W8gOaWsOWvueivnVxuICBvcGVuTmV3Q2hhdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlU2VydmljZS5zZXRDdXJyZW50Q29udmVyc2F0aW9uKG51bGwpO1xuICB9XG5cbiAgLy8g6YeN5paw55Sf5oiQ5Zue562UKOS7heacgOaWsOeahOWbnuetlOWFgeiuuOmHjeaWsOeUn+aIkClcbiAgcmVnZW5lcmF0ZUFuc3dlcihtc2c6IE1lc3NhZ2UpOiB2b2lkIHtcbiAgICB0aGlzLmNoYXRJbnB1dFJlZi5yZWdlbmVyYXRlU2VuZChtc2cpO1xuICB9XG5cbiAgLy8g5Y+R6LW35o+Q6Zeu6K+35rGCXG4gIG9uU2VuZE1lc3NhZ2UoZXZlbnQ6IHsgbWVzc2FnZTogSVNlbmRNZXNzYWdlOyBpc1JlZ2VuZXJhdGU6IGJvb2xlYW4gfSkge1xuICAgIGlmICghZXZlbnQuaXNSZWdlbmVyYXRlKSB7XG4gICAgICAvLyDmjqjlhaXkuIDkuKrmlrDpl67nrZQsaUNvZGXlnKjmtYHmjqXmlLbliLDooaXkuIpcbiAgICAgIGNvbnN0IHFhOiBNZXNzYWdlID0ge1xuICAgICAgICBpQ29kZTogJycsXG4gICAgICAgIHF1ZXN0aW9uOiBldmVudC5tZXNzYWdlLnF1ZXN0aW9uLFxuICAgICAgICBhbnN3ZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaUNvZGU6ICcnLFxuICAgICAgICAgICAgdGhpbms6ICcnLFxuICAgICAgICAgICAgY29udGVudDogJycsXG4gICAgICAgICAgICB0aGlua0V4cGFuZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBhbnN3ZXJJbmRleDogMCxcbiAgICAgIH07XG4gICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gocWEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXRlc3RNZXNzYWdlID0gdGhpcy5tZXNzYWdlc1t0aGlzLm1lc3NhZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgbGF0ZXN0TWVzc2FnZS5hbnN3ZXJzLnB1c2goe1xuICAgICAgICBpQ29kZTogJycsXG4gICAgICAgIHRoaW5rOiAnJyxcbiAgICAgICAgY29udGVudDogJycsXG4gICAgICAgIHRoaW5rRXhwYW5kOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBsYXRlc3RNZXNzYWdlLmFuc3dlckluZGV4ID0gbGF0ZXN0TWVzc2FnZS5hbnN3ZXJzLmxlbmd0aCAtIDE7XG4gICAgfVxuICAgIHRoaXMuc3NlU2VydmljZS5zdHJlYW1DaGF0KGV2ZW50Lm1lc3NhZ2UpLnRoZW4ocmVzID0+IHtcbiAgICAgIC8vIOW8gOWQr+aWsOWvueivne+8jOWIt+aWsOW3puS+p+WOhuWPsuWvueivnVxuICAgICAgaWYgKCFldmVudC5tZXNzYWdlLmNvbnZlcnNhdGlvbikge1xuICAgICAgICB0aGlzLmNoYXRTaWRlYmFyUmVmLmdldEhpc3RvcnkodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbG9hdGluZy1jaGF0LWNvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwiY2hhdC1ib3hcIiBbQGNoYXRCb3hTdGF0ZV09XCJpc0V4cGFuZGVkID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cImNoYXQtaGVhZGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNvbnRlbnRcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImljb24gbWVudS1pY29uXCJcbiAgICAgICAgICBuei1wb3BvdmVyXG4gICAgICAgICAgW256UG9wb3ZlckNvbnRlbnRdPVwiaGlzdG9yeVRwbFwiXG4gICAgICAgICAgbnpQb3BvdmVyVHJpZ2dlcj1cImNsaWNrXCJcbiAgICAgICAgICBuelBvcG92ZXJPdmVybGF5Q2xhc3NOYW1lPVwicGFyYW1zLXNlbGVjdC1wb3BvdmVyXCJcbiAgICAgICAgICBuelBvcG92ZXJQbGFjZW1lbnQ9XCJyaWdodFRvcFwiXG4gICAgICAgICAgW256UG9wb3ZlclZpc2libGVdPVwibW9kZWxQb3BvdmVyVmlzaWJsZVwiXG4gICAgICAgICAgKG56UG9wb3ZlclZpc2libGVDaGFuZ2UpPVwibW9kZWxWaXNpYmxlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltYWdlcy9mbG9hdGluZy9oaXN0b3J5LW1lbnUucG5nXCIgc3R5bGU9XCJ3aWR0aDogMTZweFwiIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGgzIGNsYXNzPVwiY2hhdC10aXRsZVwiPnt7IHRpdGxlIH19PC9oMz5cbiAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltYWdlcy9mbG9hdGluZy9uZXctY2hhdC5wbmdcIiBzdHlsZT1cIndpZHRoOiAyMHB4OyBjdXJzb3I6IHBvaW50ZXJcIiAoY2xpY2spPVwib3Blbk5ld0NoYXQoKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2hlYWRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJjaGF0LW1haW5cIj5cbiAgICAgIDxuZ3gtY2hhdC1tZXNzYWdlc1xuICAgICAgICAjY2hhdE1lc3NhZ2VzUmVmXG4gICAgICAgIFttZXNzYWdlc109XCJtZXNzYWdlc1wiXG4gICAgICAgIChyZWdlbmVyYXRlQW5zd2VyKT1cInJlZ2VuZXJhdGVBbnN3ZXIoJGV2ZW50KVwiXG4gICAgICA+PC9uZ3gtY2hhdC1tZXNzYWdlcz5cbiAgICAgIDxuZ3gtY2hhdC1pbnB1dFxuICAgICAgICAjY2hhdElucHV0UmVmXG4gICAgICAgIFttZXNzYWdlc109XCJtZXNzYWdlc1wiXG4gICAgICAgIG1vZGU9XCJjYXJkXCJcbiAgICAgICAgKHNlbmRNZXNzYWdlKT1cIm9uU2VuZE1lc3NhZ2UoJGV2ZW50KVwiXG4gICAgICA+PC9uZ3gtY2hhdC1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGJ1dHRvbiBjbGFzcz1cInRvZ2dsZS1idXR0b25cIiAoY2xpY2spPVwidG9nZ2xlQ2hhdEJveCgpXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJidXR0b24taWNvblwiIFtAYnV0dG9uSWNvblN0YXRlXT1cImlzRXhwYW5kZWQgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIj5cbiAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbWFnZXMvbG9nby5wbmdcIiBzdHlsZT1cIndpZHRoOiAzNnB4XCIgKm5nSWY9XCIhaXNFeHBhbmRlZFwiIC8+XG4gICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaW1hZ2VzL2Zsb2F0aW5nL2Fycm93LWRvd24ucG5nXCIgc3R5bGU9XCJ3aWR0aDogMjRweFwiICpuZ0lmPVwiaXNFeHBhbmRlZFwiIC8+XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48IS0tIOWOhuWPsuWvueivnSAtLT5cbjxuZy10ZW1wbGF0ZSAjaGlzdG9yeVRwbD5cbiAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlOyBtYXgtaGVpZ2h0OiA2MDBweFwiPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cInNlbGVjdC10aXRsZVwiPiAtLT5cbiAgICA8IS0tICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj4gLS0+XG4gICAgPCEtLSAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL3NpZGViYXIvaGlzdG9yeS1jaGF0LnBuZ1wiIC8+IC0tPlxuICAgIDwhLS0gICAgIDxzcGFuPuWOhuWPsuWvueivnTwvc3Bhbj4gLS0+XG4gICAgPCEtLSAgIDwvZGl2PiAtLT5cbiAgICA8IS0tICAgPGkgbnotaWNvbiBuelR5cGU9XCJjbG9zZVwiIHN0eWxlPVwiY29sb3I6ICM5OTlcIiAoY2xpY2spPVwibW9kZWxWaXNpYmxlQ2hhbmdlKGZhbHNlKVwiPjwvaT4gLS0+XG4gICAgPCEtLSA8L2Rpdj4gLS0+XG4gICAgPG5neC1jaGF0LXNpZGViYXIgI2NoYXRTaWRlYmFyUmVmIG1vZGU9XCJjYXJkXCI+PC9uZ3gtY2hhdC1zaWRlYmFyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXRpbmctY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZ2VudC9jaGF0L2Zsb2F0aW5nLWNoYXQvZmxvYXRpbmctY2hhdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZ2VudC9jaGF0L2Zsb2F0aW5nLWNoYXQvZmxvYXRpbmctY2hhdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFJL0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBd0R6RCxNQUFNLE9BQU8scUJBQXFCO0lBcERsQztRQXFERSxvQkFBb0I7UUFDcEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixLQUFLO1FBQ0ksVUFBSyxHQUFHLFNBQVMsQ0FBQztRQVEzQjs7V0FFRztRQUNNLFlBQU8sR0FBRywyQkFBMkIsQ0FBQztRQUN0QyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBS1osT0FBRSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFD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cHV0LCBOZ1pvbmUsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIGFuaW1hdGUsIGdyb3VwLCBxdWVyeSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ2hhdFNpZGViYXJDb21wb25lbnQgfSBmcm9tICcuLi9jaGF0LXNpZGViYXIvY2hhdC1zaWRlYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZXNDb21wb25lbnQgfSBmcm9tICcuLi9jaGF0LW1lc3NhZ2VzL2NoYXQtbWVzc2FnZXMuY29tcG9uZW50JztcbmltcG9ydCB7IENoYXRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2NoYXQtaW5wdXQvY2hhdC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWFya2Rvd25TdHJlYW1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWFya2Rvd24tc3RyZWFtLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3NlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NzZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JlU2VydmljZSB9IGZyb20gJy4uL3N0b3JlL3N0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi4vbW9kZWxzL21lc3NhZ2UubW9kZWwnO1xuaW1wb3J0IHsgSVNlbmRNZXNzYWdlIH0gZnJvbSAnLi4vbW9kZWxzL3NlbmQtbWVzc2FnZS5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1hZ2VudC1mbG9hdGluZy1jaGF0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zsb2F0aW5nLWNoYXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mbG9hdGluZy1jaGF0LmNvbXBvbmVudC5zY3NzJ10sXG4gIC8vIOWumuS5ieWKqOeUu1xuICBhbmltYXRpb25zOiBbXG4gICAgLy8g5a6a5LmJ5a655Zmo55qE5bGV5byAL+aUtui1t+WKqOeUu1xuICAgIHRyaWdnZXIoJ2NoYXRCb3hTdGF0ZScsIFtcbiAgICAgIHN0YXRlKFxuICAgICAgICAnY29sbGFwc2VkJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMC44KSB0cmFuc2xhdGVZKDIwcHgpJyxcbiAgICAgICAgICBkaXNwbGF5OiAnbm9uZScsXG4gICAgICAgICAgLy8gdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICAgICAgd2lkdGg6ICc2NjBweCcsIC8vIOehruS/neWcqOaUtui1t+eKtuaAgeS4i++8jOWuveW6puS4jeS8muW9seWTjeaMiemSrlxuICAgICAgICAgIGhlaWdodDogJzgydmgnLCAvLyDkv53mjIHpq5jluqbkuIDoh7TvvIzkvYbkuI3lj6/op4FcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAgc3RhdGUoXG4gICAgICAgICdleHBhbmRlZCcsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpIHRyYW5zbGF0ZVkoMCknLFxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAvLyB2aXNpYmlsaXR5OiAndmlzaWJsZScsXG4gICAgICAgICAgd2lkdGg6ICc2NjBweCcsXG4gICAgICAgICAgaGVpZ2h0OiAnODJ2aCcsXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICAgIHRyYW5zaXRpb24oJ2NvbGxhcHNlZCA8PT4gZXhwYW5kZWQnLCBbXG4gICAgICAgIGFuaW1hdGUoJzMwMG1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpLCAvLyDotJ3loZ7lsJTmm7Lnur/mj5Dkvpvmm7Toh6rnhLbnmoTliqjnlLtcbiAgICAgIF0pLFxuICAgIF0pLFxuICAgIC8vIOWumuS5ieaCrOa1ruaMiemSrueahOaXi+i9rOWKqOeUu1xuICAgIHRyaWdnZXIoJ2J1dHRvbkljb25TdGF0ZScsIFtcbiAgICAgIHN0YXRlKFxuICAgICAgICAnY29sbGFwc2VkJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZSgwZGVnKScsXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICAgIHN0YXRlKFxuICAgICAgICAnZXhwYW5kZWQnLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgdHJhbnNmb3JtOiAncm90YXRlKDBkZWcpJywgLy8g5bGV5byA5pe277yMWOWbvuagh+aXi+i9rDQ15bqmXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICAgIHRyYW5zaXRpb24oJ2NvbGxhcHNlZCA8PT4gZXhwYW5kZWQnLCBbYW5pbWF0ZSgnMzAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJyldKSxcbiAgICBdKSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmxvYXRpbmdDaGF0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgLy8g54q25oCB5Y+Y6YeP77yM55So5LqO5o6n5Yi257uE5Lu255qE5pi+56S65ZKM5Yqo55S7XG4gIGlzRXhwYW5kZWQgPSBmYWxzZTtcblxuICAvLyDmoIfpophcbiAgQElucHV0KCkgdGl0bGUgPSAnQUkt6Z2S5riF5rC05YipJztcbiAgLyoqXG4gICAqIOWIh+aNouiBiuWkqeahhueahOWxleW8gC/mlLbotbfnirbmgIFcbiAgICovXG4gIHRvZ2dsZUNoYXRCb3goKSB7XG4gICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiDmjqXlj6NiYXNlVXJs6YWN572uXG4gICAqL1xuICBASW5wdXQoKSBiYXNlVXJsID0gJ2h0dHA6Ly8zOS4xMDIuNTYuMjU0OjgwODInO1xuICBASW5wdXQoKSB0b2tlbiA9ICcnO1xuICBAVmlld0NoaWxkKCdjaGF0U2lkZWJhclJlZicpIGNoYXRTaWRlYmFyUmVmITogQ2hhdFNpZGViYXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2NoYXRNZXNzYWdlc1JlZicpIGNoYXRNZXNzYWdlc1JlZiE6IENoYXRNZXNzYWdlc0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY2hhdElucHV0UmVmJykgY2hhdElucHV0UmVmITogQ2hhdElucHV0Q29tcG9uZW50O1xuXG4gIHByaXZhdGUgbWQgPSBpbmplY3QoTWFya2Rvd25TdHJlYW1TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBodHRwU2VydmljZSA9IGluamVjdChIdHRwU2VydmljZSk7XG4gIHByaXZhdGUgc3NlU2VydmljZSA9IGluamVjdChTc2VTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzdG9yZVNlcnZpY2UgPSBpbmplY3QoU3RvcmVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcbiAgcHJpdmF0ZSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlciE6IFJlc2l6ZU9ic2VydmVyO1xuXG4gIG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTsgLy8g5raI5oGv5pWw57uEXG4gIC8vIOWOhuWPsuWvueivnVxuICBtb2RlbFBvcG92ZXJWaXNpYmxlID0gZmFsc2U7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZVNlcnZpY2Uuc2V0VG9rZW4odGhpcy50b2tlbik7XG4gICAgdGhpcy5zdG9yZVNlcnZpY2Uuc2V0QmFzZVVybCh0aGlzLmJhc2VVcmwpO1xuICAgIHRoaXMuc3NlU2VydmljZS5jb252ZXJzYXRpb25JQ29kZSQuc3Vic2NyaWJlKGlDb2RlT2JqID0+IHtcbiAgICAgIGlmIChpQ29kZU9iaikge1xuICAgICAgICBjb25zdCBjdXJyZW50TXNnID0gdGhpcy5tZXNzYWdlc1t0aGlzLm1lc3NhZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjdXJyZW50TXNnLmlDb2RlID0gaUNvZGVPYmoucXVlc3Rpb247XG4gICAgICAgIGN1cnJlbnRNc2cuYW5zd2Vyc1tjdXJyZW50TXNnLmFuc3dlckluZGV4XS5pQ29kZSA9IGlDb2RlT2JqLmFuc3dlcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNzZVNlcnZpY2UudGhpbmtpbmckLnN1YnNjcmliZSh0ZXh0ID0+IHtcbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgY3VycmVudE1zZyA9IHRoaXMubWVzc2FnZXNbdGhpcy5tZXNzYWdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgY3VycmVudE1zZy5hbnN3ZXJzW2N1cnJlbnRNc2cuYW5zd2VySW5kZXhdLnRoaW5rID0gdGV4dDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNzZVNlcnZpY2UuY3VycmVudE1lc3NhZ2UkLnN1YnNjcmliZSh0ZXh0ID0+IHtcbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgY3VycmVudE1zZyA9IHRoaXMubWVzc2FnZXNbdGhpcy5tZXNzYWdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgY3VycmVudE1zZy5hbnN3ZXJzW2N1cnJlbnRNc2cuYW5zd2VySW5kZXhdLmNvbnRlbnQgPSB0ZXh0O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5zdG9yZVNlcnZpY2UuY3VycmVudENvbnZlcnNhdGlvbiQuc3Vic2NyaWJlKGNvbnZlcnNhdGlvbiA9PiB7XG4gICAgICBpZiAoIWNvbnZlcnNhdGlvbikge1xuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gW107XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaHR0cFNlcnZpY2VcbiAgICAgICAgLmdldChgJHt0aGlzLnN0b3JlU2VydmljZS5nZXRCYXNlVXJsKCl9L2FwaS9DaGF0TW9kZWwvY29udmVyc2F0aW9uL3F1ZXN0aW9uc2AsIHsgaUNvZGU6IGNvbnZlcnNhdGlvbj8uaUNvZGUgfSlcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBNZXNzYWdlW10pID0+IHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gcmVzLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0uYW5zd2VySW5kZXggPSAwO1xuICAgICAgICAgICAgaXRlbS5hbnN3ZXJzLmZvckVhY2goYW5zd2VyID0+IHtcbiAgICAgICAgICAgICAgYW5zd2VyLnRoaW5rRXhwYW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgICBmb3IgKGxldCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IGVudHJ5LmNvbnRlbnRSZWN0LmhlaWdodDtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNoYXRNZXNzYWdlc1JlZi5pbnB1dEhlaWdodCA9IG5ld0hlaWdodCArIDYwO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyDlvIDlp4vnm5HlkKzovpPlhaXmoYblhYPntKBcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jaGF0SW5wdXRSZWYuY2hhdElucHV0V3JhcHBlci5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIG1vZGVsVmlzaWJsZUNoYW5nZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMubW9kZWxQb3BvdmVyVmlzaWJsZSA9IHZhbHVlO1xuICB9XG5cbiAgLy8g5omT5byA5paw5a+56K+dXG4gIG9wZW5OZXdDaGF0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmVTZXJ2aWNlLnNldEN1cnJlbnRDb252ZXJzYXRpb24obnVsbCk7XG4gIH1cblxuICAvLyDph43mlrDnlJ/miJDlm57nrZQo5LuF5pyA5paw55qE5Zue562U5YWB6K646YeN5paw55Sf5oiQKVxuICByZWdlbmVyYXRlQW5zd2VyKG1zZzogTWVzc2FnZSk6IHZvaWQge1xuICAgIHRoaXMuY2hhdElucHV0UmVmLnJlZ2VuZXJhdGVTZW5kKG1zZyk7XG4gIH1cblxuICAvLyDlj5Hotbfmj5Dpl67or7fmsYJcbiAgb25TZW5kTWVzc2FnZShldmVudDogeyBtZXNzYWdlOiBJU2VuZE1lc3NhZ2U7IGlzUmVnZW5lcmF0ZTogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCFldmVudC5pc1JlZ2VuZXJhdGUpIHtcbiAgICAgIC8vIOaOqOWFpeS4gOS4quaWsOmXruetlCxpQ29kZeWcqOa1geaOpeaUtuWIsOihpeS4ilxuICAgICAgY29uc3QgcWE6IE1lc3NhZ2UgPSB7XG4gICAgICAgIGlDb2RlOiAnJyxcbiAgICAgICAgcXVlc3Rpb246IGV2ZW50Lm1lc3NhZ2UucXVlc3Rpb24sXG4gICAgICAgIGFuc3dlcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpQ29kZTogJycsXG4gICAgICAgICAgICB0aGluazogJycsXG4gICAgICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgICAgIHRoaW5rRXhwYW5kOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGFuc3dlckluZGV4OiAwLFxuICAgICAgfTtcbiAgICAgIHRoaXMubWVzc2FnZXMucHVzaChxYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxhdGVzdE1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoIC0gMV07XG4gICAgICBsYXRlc3RNZXNzYWdlLmFuc3dlcnMucHVzaCh7XG4gICAgICAgIGlDb2RlOiAnJyxcbiAgICAgICAgdGhpbms6ICcnLFxuICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgdGhpbmtFeHBhbmQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGxhdGVzdE1lc3NhZ2UuYW5zd2VySW5kZXggPSBsYXRlc3RNZXNzYWdlLmFuc3dlcnMubGVuZ3RoIC0gMTtcbiAgICB9XG4gICAgdGhpcy5zc2VTZXJ2aWNlLnN0cmVhbUNoYXQoZXZlbnQubWVzc2FnZSkudGhlbihyZXMgPT4ge1xuICAgICAgLy8g5byA5ZCv5paw5a+56K+d77yM5Yi35paw5bem5L6n5Y6G5Y+y5a+56K+dXG4gICAgICBpZiAoIWV2ZW50Lm1lc3NhZ2UuY29udmVyc2F0aW9uKSB7XG4gICAgICAgIHRoaXMuY2hhdFNpZGViYXJSZWYuZ2V0SGlzdG9yeSh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsb2F0aW5nLWNoYXQtY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJjaGF0LWJveFwiIFtAY2hhdEJveFN0YXRlXT1cImlzRXhwYW5kZWQgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIj5cbiAgICA8aGVhZGVyIGNsYXNzPVwiY2hhdC1oZWFkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGVudFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiaWNvbiBtZW51LWljb25cIlxuICAgICAgICAgIG56LXBvcG92ZXJcbiAgICAgICAgICBbbnpQb3BvdmVyQ29udGVudF09XCJoaXN0b3J5VHBsXCJcbiAgICAgICAgICBuelBvcG92ZXJUcmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgICAgIG56UG9wb3Zlck92ZXJsYXlDbGFzc05hbWU9XCJwYXJhbXMtc2VsZWN0LXBvcG92ZXJcIlxuICAgICAgICAgIG56UG9wb3ZlclBsYWNlbWVudD1cInJpZ2h0VG9wXCJcbiAgICAgICAgICBbbnpQb3BvdmVyVmlzaWJsZV09XCJtb2RlbFBvcG92ZXJWaXNpYmxlXCJcbiAgICAgICAgICAobnpQb3BvdmVyVmlzaWJsZUNoYW5nZSk9XCJtb2RlbFZpc2libGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaW1hZ2VzL2Zsb2F0aW5nL2hpc3RvcnktbWVudS5wbmdcIiBzdHlsZT1cIndpZHRoOiAxNnB4XCIgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aDMgY2xhc3M9XCJjaGF0LXRpdGxlXCI+e3sgdGl0bGUgfX08L2gzPlxuICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaW1hZ2VzL2Zsb2F0aW5nL25ldy1jaGF0LnBuZ1wiIHN0eWxlPVwid2lkdGg6IDIwcHg7IGN1cnNvcjogcG9pbnRlclwiIChjbGljayk9XCJvcGVuTmV3Q2hhdCgpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvaGVhZGVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImNoYXQtbWFpblwiPlxuICAgICAgPG5neC1jaGF0LW1lc3NhZ2VzXG4gICAgICAgICNjaGF0TWVzc2FnZXNSZWZcbiAgICAgICAgW21lc3NhZ2VzXT1cIm1lc3NhZ2VzXCJcbiAgICAgICAgKHJlZ2VuZXJhdGVBbnN3ZXIpPVwicmVnZW5lcmF0ZUFuc3dlcigkZXZlbnQpXCJcbiAgICAgID48L25neC1jaGF0LW1lc3NhZ2VzPlxuICAgICAgPG5neC1jaGF0LWlucHV0XG4gICAgICAgICNjaGF0SW5wdXRSZWZcbiAgICAgICAgW21lc3NhZ2VzXT1cIm1lc3NhZ2VzXCJcbiAgICAgICAgbW9kZT1cImNhcmRcIlxuICAgICAgICAoc2VuZE1lc3NhZ2UpPVwib25TZW5kTWVzc2FnZSgkZXZlbnQpXCJcbiAgICAgID48L25neC1jaGF0LWlucHV0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8YnV0dG9uIGNsYXNzPVwidG9nZ2xlLWJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVDaGF0Qm94KClcIj5cbiAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1pY29uXCIgW0BidXR0b25JY29uU3RhdGVdPVwiaXNFeHBhbmRlZCA/ICdleHBhbmRlZCcgOiAnY29sbGFwc2VkJ1wiPlxuICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltYWdlcy9sb2dvLnBuZ1wiIHN0eWxlPVwid2lkdGg6IDM2cHhcIiAqbmdJZj1cIiFpc0V4cGFuZGVkXCIgLz5cbiAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbWFnZXMvZmxvYXRpbmcvYXJyb3ctZG93bi5wbmdcIiBzdHlsZT1cIndpZHRoOiAyNHB4XCIgKm5nSWY9XCJpc0V4cGFuZGVkXCIgLz5cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjwhLS0g5Y6G5Y+y5a+56K+dIC0tPlxuPG5nLXRlbXBsYXRlICNoaXN0b3J5VHBsPlxuICA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMCU7IG1heC1oZWlnaHQ6IDYwMHB4XCI+XG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwic2VsZWN0LXRpdGxlXCI+IC0tPlxuICAgIDwhLS0gICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPiAtLT5cbiAgICA8IS0tICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvc2lkZWJhci9oaXN0b3J5LWNoYXQucG5nXCIgLz4gLS0+XG4gICAgPCEtLSAgICAgPHNwYW4+5Y6G5Y+y5a+56K+dPC9zcGFuPiAtLT5cbiAgICA8IS0tICAgPC9kaXY+IC0tPlxuICAgIDwhLS0gICA8aSBuei1pY29uIG56VHlwZT1cImNsb3NlXCIgc3R5bGU9XCJjb2xvcjogIzk5OVwiIChjbGljayk9XCJtb2RlbFZpc2libGVDaGFuZ2UoZmFsc2UpXCI+PC9pPiAtLT5cbiAgICA8IS0tIDwvZGl2PiAtLT5cbiAgICA8bmd4LWNoYXQtc2lkZWJhciAjY2hhdFNpZGViYXJSZWYgbW9kZT1cImNhcmRcIj48L25neC1jaGF0LXNpZGViYXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==