@sinequa/assistant 3.9.11 → 3.10.2

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.
Files changed (110) hide show
  1. package/chat/chat-message/chat-message.component.d.ts +2 -4
  2. package/chat/chat.component.d.ts +4 -3
  3. package/chat/chat.service.d.ts +16 -1
  4. package/chat/custom-elements/components/code-block.component.d.ts +11 -0
  5. package/chat/custom-elements/components/document-reference.component.d.ts +13 -0
  6. package/chat/custom-elements/components/i18n/de.json +5 -0
  7. package/chat/custom-elements/components/i18n/en.json +5 -0
  8. package/chat/custom-elements/components/i18n/fr.json +5 -0
  9. package/chat/custom-elements/components/image-reference.component.d.ts +14 -0
  10. package/chat/custom-elements/components/page-reference.component.d.ts +14 -0
  11. package/chat/custom-elements/components/table-tools.component.d.ts +11 -0
  12. package/chat/custom-elements/custom-elements.config.d.ts +2 -0
  13. package/chat/{services → custom-elements}/custom-elements.service.d.ts +1 -0
  14. package/chat/documents-upload/documents-upload.service.d.ts +2 -2
  15. package/chat/fetch-patcher/app-injector.d.ts +9 -0
  16. package/chat/fetch-patcher/fetch-patcher.d.ts +31 -0
  17. package/chat/fetch-patcher/global-error-handler.service.d.ts +36 -0
  18. package/chat/fetch-patcher/handle-unauthorized-logic.d.ts +13 -0
  19. package/chat/markdown-it/markdown-it.config.d.ts +4 -0
  20. package/chat/markdown-it/plugins/document-reference.plugin.d.ts +8 -0
  21. package/chat/markdown-it/plugins/image-reference.plugin.d.ts +9 -0
  22. package/chat/markdown-it/plugins/page-reference.plugin.d.ts +9 -0
  23. package/chat/markdown-it/plugins/table-tools.plugin.d.ts +2 -0
  24. package/chat/public-api.d.ts +21 -2
  25. package/chat/{chat-reference → references/chat-reference}/chat-reference.component.d.ts +1 -1
  26. package/chat/references/chat-reference-image/chat-reference-image.component.d.ts +20 -0
  27. package/chat/references/chat-reference-page/chat-reference-page.component.d.ts +20 -0
  28. package/chat/references/i18n/de.json +4 -4
  29. package/chat/references/i18n/en.json +1 -1
  30. package/chat/references/i18n/fr.json +1 -1
  31. package/chat/saved-chats/i18n/de.json +3 -1
  32. package/chat/saved-chats/i18n/en.json +3 -1
  33. package/chat/saved-chats/i18n/fr.json +3 -1
  34. package/chat/saved-chats/saved-chats.component.d.ts +6 -0
  35. package/chat/saved-chats/saved-chats.service.d.ts +4 -2
  36. package/chat/services/assistant-metadata.service.d.ts +5 -1
  37. package/chat/services/signalR.web.service.d.ts +0 -11
  38. package/chat/smart-renderer/smart-renderer.d.ts +2 -0
  39. package/chat/token-progress-bar/i18n/en.json +1 -1
  40. package/chat/types/message-reference.types.d.ts +3 -0
  41. package/chat/types.d.ts +55 -35
  42. package/chat/version.d.ts +1 -0
  43. package/esm2022/chat/chat-message/chat-message.component.mjs +15 -12
  44. package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +7 -4
  45. package/esm2022/chat/chat.component.mjs +39 -26
  46. package/esm2022/chat/chat.service.mjs +39 -5
  47. package/esm2022/chat/custom-elements/components/code-block.component.mjs +97 -0
  48. package/esm2022/chat/custom-elements/components/document-reference.component.mjs +85 -0
  49. package/esm2022/chat/custom-elements/components/image-reference.component.mjs +79 -0
  50. package/esm2022/chat/custom-elements/components/page-reference.component.mjs +79 -0
  51. package/esm2022/chat/custom-elements/components/table-tools.component.mjs +111 -0
  52. package/esm2022/chat/custom-elements/custom-elements.config.mjs +6 -0
  53. package/esm2022/chat/custom-elements/custom-elements.service.mjs +35 -0
  54. package/esm2022/chat/debug-message/debug-message.service.mjs +3 -3
  55. package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +3 -3
  56. package/esm2022/chat/documents-upload/documents-upload.service.mjs +4 -4
  57. package/esm2022/chat/fetch-patcher/app-injector.mjs +19 -0
  58. package/esm2022/chat/fetch-patcher/fetch-patcher.mjs +62 -0
  59. package/esm2022/chat/fetch-patcher/global-error-handler.service.mjs +92 -0
  60. package/esm2022/chat/fetch-patcher/handle-unauthorized-logic.mjs +19 -0
  61. package/esm2022/chat/markdown-it/markdown-it.config.mjs +6 -0
  62. package/esm2022/chat/markdown-it/plugins/code-block.plugin.mjs +14 -0
  63. package/esm2022/chat/markdown-it/plugins/document-reference.plugin.mjs +66 -0
  64. package/esm2022/chat/markdown-it/plugins/image-reference.plugin.mjs +67 -0
  65. package/esm2022/chat/markdown-it/plugins/link.plugin.mjs +15 -0
  66. package/esm2022/chat/markdown-it/plugins/page-reference.plugin.mjs +67 -0
  67. package/esm2022/chat/markdown-it/plugins/table-tools.plugin.mjs +12 -0
  68. package/esm2022/chat/public-api.mjs +23 -3
  69. package/esm2022/chat/references/chat-reference/chat-reference.component.mjs +72 -0
  70. package/esm2022/chat/references/chat-reference-image/chat-reference-image.component.mjs +42 -0
  71. package/esm2022/chat/references/chat-reference-page/chat-reference-page.component.mjs +42 -0
  72. package/esm2022/chat/saved-chats/saved-chats.component.mjs +38 -7
  73. package/esm2022/chat/saved-chats/saved-chats.service.mjs +25 -13
  74. package/esm2022/chat/services/app.service.mjs +7 -2
  75. package/esm2022/chat/services/assistant-metadata.service.mjs +40 -9
  76. package/esm2022/chat/services/assistant-ws-frames.service.mjs +7 -4
  77. package/esm2022/chat/services/signalR-connection.service.mjs +3 -6
  78. package/esm2022/chat/services/signalR.web.service.mjs +3 -13
  79. package/esm2022/chat/services/user-settings.service.mjs +6 -3
  80. package/esm2022/chat/smart-renderer/smart-renderer.mjs +19 -18
  81. package/esm2022/chat/types/message-reference.types.mjs +1 -1
  82. package/esm2022/chat/types.mjs +10 -8
  83. package/esm2022/chat/utils/utils.service.mjs +11 -11
  84. package/esm2022/chat/version.mjs +3 -0
  85. package/fesm2022/sinequa-assistant-chat.mjs +2344 -2048
  86. package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
  87. package/package.json +6 -6
  88. package/chat/chat-reference/i18n/de.json +0 -4
  89. package/chat/chat-reference/i18n/en.json +0 -4
  90. package/chat/chat-reference/i18n/fr.json +0 -4
  91. package/chat/directives/copy-to-clipboard.directive.d.ts +0 -8
  92. package/chat/markdown-it-plugins/image-reference.plugin.d.ts +0 -3
  93. package/chat/markdown-it-plugins/page-reference.plugin.d.ts +0 -3
  94. package/chat/markdown-it-plugins/reference.plugin.d.ts +0 -7
  95. package/chat/references/inline-image-reference.d.ts +0 -21
  96. package/chat/references/inline-page-reference.d.ts +0 -21
  97. package/chat/references/references.component.d.ts +0 -43
  98. package/esm2022/chat/chat-reference/chat-reference.component.mjs +0 -74
  99. package/esm2022/chat/directives/copy-to-clipboard.directive.mjs +0 -68
  100. package/esm2022/chat/markdown-it-plugins/code-block.plugin.mjs +0 -14
  101. package/esm2022/chat/markdown-it-plugins/image-reference.plugin.mjs +0 -58
  102. package/esm2022/chat/markdown-it-plugins/link.plugin.mjs +0 -15
  103. package/esm2022/chat/markdown-it-plugins/page-reference.plugin.mjs +0 -60
  104. package/esm2022/chat/markdown-it-plugins/reference.plugin.mjs +0 -68
  105. package/esm2022/chat/references/inline-image-reference.mjs +0 -110
  106. package/esm2022/chat/references/inline-page-reference.mjs +0 -110
  107. package/esm2022/chat/references/references.component.mjs +0 -290
  108. package/esm2022/chat/services/custom-elements.service.mjs +0 -43
  109. /package/chat/{markdown-it-plugins → markdown-it/plugins}/code-block.plugin.d.ts +0 -0
  110. /package/chat/{markdown-it-plugins → markdown-it/plugins}/link.plugin.d.ts +0 -0
@@ -1,10 +1,10 @@
1
1
  import { CommonModule } from "@angular/common";
2
2
  import { Component, EventEmitter, Input, Output, inject } from "@angular/core";
3
3
  import { FormsModule } from '@angular/forms';
4
- import { BehaviorSubject, Subscription, combineLatest, filter, of, switchMap, tap } from "rxjs";
4
+ import { BehaviorSubject, Subject, Subscription, catchError, combineLatest, debounceTime, distinctUntilChanged, filter, from, map, of, switchMap, tap } from "rxjs";
5
5
  import { provideTranslocoScope, TranslocoPipe, TranslocoService } from '@jsverse/transloco';
6
6
  import { parseISO, toDate } from "date-fns";
7
- import { isAuthenticated } from "@sinequa/atomic";
7
+ import { fetchQuery, isAuthenticated } from "@sinequa/atomic";
8
8
  import { AssistantUtils } from "../utils/utils.service";
9
9
  import { DialogDeleteSavedChatComponent } from "../dialogs/delete-saved-chat.component";
10
10
  import { DialogRenameSavedChatComponent } from "../dialogs/rename-saved-chat.component";
@@ -20,6 +20,7 @@ export class SavedChatsComponent {
20
20
  this.delete = new EventEmitter();
21
21
  this.subscription = new Subscription();
22
22
  this.groupedSavedChats$ = new BehaviorSubject([]);
23
+ this.searchText$ = new Subject();
23
24
  this.instanceManagerService = inject(InstanceManagerService);
24
25
  this.notificationsService = inject(NotificationsService);
25
26
  this.transloco = inject(TranslocoService);
@@ -30,12 +31,29 @@ export class SavedChatsComponent {
30
31
  this.onListSavedChat();
31
32
  if (!!this.chatService.assistantConfig$.value.savedChatSettings?.enabled) {
32
33
  this.chatService.listSavedChat();
34
+ this.queryWebserviceForSearch = this.chatService.assistantConfig$.value.savedChatSettings?.queryWebserviceForSearch;
35
+ }
36
+ if (!!this.queryWebserviceForSearch) {
37
+ this.searchQuery = { name: this.queryWebserviceForSearch };
33
38
  }
34
39
  })).subscribe());
40
+ this.subscription.add(this.searchText$
41
+ .pipe(debounceTime(2000), distinctUntilChanged(), switchMap(searchText => {
42
+ this.searchText = searchText;
43
+ if (!searchText) {
44
+ return of(this.chatService.savedChats$.value || []);
45
+ }
46
+ this.searchQuery.text = searchText;
47
+ return this.searchSavedChats();
48
+ }), tap(savedChats => this.groupedSavedChats$.next(this._groupSavedChatsByDate(savedChats))))
49
+ .subscribe());
35
50
  }
36
51
  ngOnDestroy() {
37
52
  this.subscription.unsubscribe();
38
53
  }
54
+ onSearch(event) {
55
+ this.searchText$.next(event.target.value);
56
+ }
39
57
  instantiateChatService() {
40
58
  this.chatService = this.instanceManagerService.getInstance(this.instanceId);
41
59
  }
@@ -43,7 +61,14 @@ export class SavedChatsComponent {
43
61
  this.subscription.add(combineLatest([
44
62
  this.chatService.savedChats$,
45
63
  this.transloco.langChanges$
46
- ]).pipe(filter(([savedChats]) => !!savedChats)).subscribe(([savedChats]) => this.groupedSavedChats$.next(this._groupSavedChatsByDate(savedChats))));
64
+ ]).pipe(filter(([savedChats]) => !!savedChats)).subscribe(([savedChats]) => {
65
+ if (!this.queryWebserviceForSearch || !this.searchText) {
66
+ this.groupedSavedChats$.next(this._groupSavedChatsByDate(savedChats));
67
+ }
68
+ else {
69
+ this.searchSavedChats().subscribe(savedChats => this.groupedSavedChats$.next(this._groupSavedChatsByDate(savedChats)));
70
+ }
71
+ }));
47
72
  }
48
73
  onLoad(savedChat) {
49
74
  if (!!this.chatService.streaming$.value || !!this.chatService.stoppingGeneration$.value) {
@@ -66,14 +91,20 @@ export class SavedChatsComponent {
66
91
  groupedSavedChats.get(groupKey).push(savedChat);
67
92
  });
68
93
  return Array.from(groupedSavedChats, ([key, value]) => ({ key, value }));
69
- ;
94
+ }
95
+ searchSavedChats() {
96
+ return from(fetchQuery(this.searchQuery)).pipe(map(res => res.records.map((a) => ({
97
+ id: a.id.split('|')[1], // removing the app name in front of the ID causing issues to fetch the saved chat
98
+ title: a.title,
99
+ modifiedUTC: a.modified
100
+ }))), catchError(() => of(this.chatService.savedChats$.value || [])));
70
101
  }
71
102
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedChatsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
72
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SavedChatsComponent, isStandalone: true, selector: "sq-saved-chats-v3", inputs: { instanceId: "instanceId" }, outputs: { load: "load", delete: "delete" }, providers: [SavedChatsService, provideTranslocoScope('saved-chats', 'chat')], ngImport: i0, template: "<ng-container *ngIf=\"(chatService.assistantConfig$ | async)?.savedChatSettings.display\">\n <div *ngIf=\"chatService.savedChatsError$ | async\" class=\"alert alert-danger\">\n {{ 'savedChats.listError' | transloco }}\n </div>\n <div *ngFor=\"let group of (groupedSavedChats$ | async)\" class=\"saved-chats\">\n <div class=\"saved-chat-date\">{{group.key}}</div>\n <div *ngFor=\"let savedChat of group.value\"\n (click)=\"onLoad(savedChat)\"\n class=\"saved-chat p-2\"\n [class.forbidden]=\"(chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\"\n [class.active]=\"chatService.chatId === savedChat.id\">\n <span class=\"title me-1\" [sqTooltip]=\"savedChat.title\">{{savedChat.title}}</span>\n <button\n type=\"button\"\n (click)=\"renameDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.rename' | transloco\"\n class=\"mx-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-pen saved-chat-actions\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"deleteDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.delete' | transloco\"\n class=\"ms-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash saved-chat-actions\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<sq-dialog-delete-saved-chat [chatService]=\"chatService\" (delete)=\"delete.emit($event)\" #deleteDialog />\n<sq-dialog-rename-saved-chat [chatService]=\"chatService\" #renameDialog />\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.saved-chats .saved-chat-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.saved-chats .saved-chat{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.saved-chats .saved-chat span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.saved-chats .saved-chat .saved-chat-actions{display:none}.saved-chats .saved-chat:hover,.saved-chats .saved-chat.active,.saved-chats .saved-chat:hover button,.saved-chats .saved-chat.active button{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-saved-chat-hover-background, #FFF8F1)}.saved-chats .saved-chat:hover .saved-chat-actions{display:block}.saved-chats .saved-chat.forbidden{cursor:not-allowed}.saved-chats .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: DialogRenameSavedChatComponent, selector: "sq-dialog-rename-saved-chat", inputs: ["chatService"] }, { kind: "component", type: DialogDeleteSavedChatComponent, selector: "sq-dialog-delete-saved-chat", inputs: ["chatService"], outputs: ["delete"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
103
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SavedChatsComponent, isStandalone: true, selector: "sq-saved-chats-v3", inputs: { instanceId: "instanceId" }, outputs: { load: "load", delete: "delete" }, providers: [SavedChatsService, provideTranslocoScope('saved-chats', 'chat')], ngImport: i0, template: "<ng-container *ngIf=\"(chatService.assistantConfig$ | async)?.savedChatSettings.display\">\n <div *ngIf=\"!!queryWebserviceForSearch\" class=\"sticky-top\">\n <input type=\"search\" class=\"form-control\" [placeholder]=\"'savedChats.searchPlaceholder' | transloco\" (keyup)=\"onSearch($event)\" (search)=\"onSearch($event)\" />\n </div>\n <div *ngIf=\"chatService.savedChatsError$ | async\" class=\"alert alert-danger\">\n {{ 'savedChats.listError' | transloco }}\n </div>\n <div *ngFor=\"let group of (groupedSavedChats$ | async)\" class=\"saved-chats\">\n <div class=\"saved-chat-date\">{{group.key | transloco}}</div>\n <div *ngFor=\"let savedChat of group.value\"\n (click)=\"onLoad(savedChat)\"\n class=\"saved-chat p-2\"\n [class.forbidden]=\"(chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\"\n [class.active]=\"chatService.chatId === savedChat.id\">\n <span class=\"title me-1\" [sqTooltip]=\"savedChat.title\">{{savedChat.title}}</span>\n <button\n type=\"button\"\n (click)=\"renameDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.rename' | transloco\"\n class=\"mx-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-pen saved-chat-actions\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"deleteDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.delete' | transloco\"\n class=\"ms-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash saved-chat-actions\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<sq-dialog-delete-saved-chat [chatService]=\"chatService\" (delete)=\"delete.emit($event)\" #deleteDialog />\n<sq-dialog-rename-saved-chat [chatService]=\"chatService\" #renameDialog />\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.saved-chats .saved-chat-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.saved-chats .saved-chat{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.saved-chats .saved-chat span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.saved-chats .saved-chat .saved-chat-actions{display:none}.saved-chats .saved-chat:hover,.saved-chats .saved-chat.active,.saved-chats .saved-chat:hover button,.saved-chats .saved-chat.active button{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-saved-chat-hover-background, #FFF8F1)}.saved-chats .saved-chat:hover .saved-chat-actions{display:block}.saved-chats .saved-chat.forbidden{cursor:not-allowed}.saved-chats .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: DialogRenameSavedChatComponent, selector: "sq-dialog-rename-saved-chat", inputs: ["chatService"] }, { kind: "component", type: DialogDeleteSavedChatComponent, selector: "sq-dialog-delete-saved-chat", inputs: ["chatService"], outputs: ["delete"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
73
104
  }
74
105
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedChatsComponent, decorators: [{
75
106
  type: Component,
76
- args: [{ selector: 'sq-saved-chats-v3', standalone: true, providers: [SavedChatsService, provideTranslocoScope('saved-chats', 'chat')], imports: [CommonModule, FormsModule, TooltipDirective, DialogRenameSavedChatComponent, DialogDeleteSavedChatComponent, TranslocoPipe], template: "<ng-container *ngIf=\"(chatService.assistantConfig$ | async)?.savedChatSettings.display\">\n <div *ngIf=\"chatService.savedChatsError$ | async\" class=\"alert alert-danger\">\n {{ 'savedChats.listError' | transloco }}\n </div>\n <div *ngFor=\"let group of (groupedSavedChats$ | async)\" class=\"saved-chats\">\n <div class=\"saved-chat-date\">{{group.key}}</div>\n <div *ngFor=\"let savedChat of group.value\"\n (click)=\"onLoad(savedChat)\"\n class=\"saved-chat p-2\"\n [class.forbidden]=\"(chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\"\n [class.active]=\"chatService.chatId === savedChat.id\">\n <span class=\"title me-1\" [sqTooltip]=\"savedChat.title\">{{savedChat.title}}</span>\n <button\n type=\"button\"\n (click)=\"renameDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.rename' | transloco\"\n class=\"mx-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-pen saved-chat-actions\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"deleteDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.delete' | transloco\"\n class=\"ms-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash saved-chat-actions\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<sq-dialog-delete-saved-chat [chatService]=\"chatService\" (delete)=\"delete.emit($event)\" #deleteDialog />\n<sq-dialog-rename-saved-chat [chatService]=\"chatService\" #renameDialog />\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.saved-chats .saved-chat-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.saved-chats .saved-chat{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.saved-chats .saved-chat span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.saved-chats .saved-chat .saved-chat-actions{display:none}.saved-chats .saved-chat:hover,.saved-chats .saved-chat.active,.saved-chats .saved-chat:hover button,.saved-chats .saved-chat.active button{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-saved-chat-hover-background, #FFF8F1)}.saved-chats .saved-chat:hover .saved-chat-actions{display:block}.saved-chats .saved-chat.forbidden{cursor:not-allowed}.saved-chats .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
107
+ args: [{ selector: 'sq-saved-chats-v3', standalone: true, providers: [SavedChatsService, provideTranslocoScope('saved-chats', 'chat')], imports: [CommonModule, FormsModule, TooltipDirective, DialogRenameSavedChatComponent, DialogDeleteSavedChatComponent, TranslocoPipe], template: "<ng-container *ngIf=\"(chatService.assistantConfig$ | async)?.savedChatSettings.display\">\n <div *ngIf=\"!!queryWebserviceForSearch\" class=\"sticky-top\">\n <input type=\"search\" class=\"form-control\" [placeholder]=\"'savedChats.searchPlaceholder' | transloco\" (keyup)=\"onSearch($event)\" (search)=\"onSearch($event)\" />\n </div>\n <div *ngIf=\"chatService.savedChatsError$ | async\" class=\"alert alert-danger\">\n {{ 'savedChats.listError' | transloco }}\n </div>\n <div *ngFor=\"let group of (groupedSavedChats$ | async)\" class=\"saved-chats\">\n <div class=\"saved-chat-date\">{{group.key | transloco}}</div>\n <div *ngFor=\"let savedChat of group.value\"\n (click)=\"onLoad(savedChat)\"\n class=\"saved-chat p-2\"\n [class.forbidden]=\"(chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\"\n [class.active]=\"chatService.chatId === savedChat.id\">\n <span class=\"title me-1\" [sqTooltip]=\"savedChat.title\">{{savedChat.title}}</span>\n <button\n type=\"button\"\n (click)=\"renameDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.rename' | transloco\"\n class=\"mx-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-pen saved-chat-actions\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"deleteDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.delete' | transloco\"\n class=\"ms-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash saved-chat-actions\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<sq-dialog-delete-saved-chat [chatService]=\"chatService\" (delete)=\"delete.emit($event)\" #deleteDialog />\n<sq-dialog-rename-saved-chat [chatService]=\"chatService\" #renameDialog />\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.saved-chats .saved-chat-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.saved-chats .saved-chat{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.saved-chats .saved-chat span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.saved-chats .saved-chat .saved-chat-actions{display:none}.saved-chats .saved-chat:hover,.saved-chats .saved-chat.active,.saved-chats .saved-chat:hover button,.saved-chats .saved-chat.active button{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-saved-chat-hover-background, #FFF8F1)}.saved-chats .saved-chat:hover .saved-chat-actions{display:block}.saved-chats .saved-chat.forbidden{cursor:not-allowed}.saved-chats .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
77
108
  }], propDecorators: { instanceId: [{
78
109
  type: Input
79
110
  }], load: [{
@@ -81,4 +112,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
81
112
  }], delete: [{
82
113
  type: Output
83
114
  }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtY2hhdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvc2F2ZWQtY2hhdHMvc2F2ZWQtY2hhdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvc2F2ZWQtY2hhdHMvc2F2ZWQtY2hhdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FB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QztRQUFBLENBQUM7SUFDNUUsQ0FBQzsrR0E5RVUsbUJBQW1CO21HQUFuQixtQkFBbUIsbUpBSG5CLENBQUMsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLDBCQ3pCOUUsbXREQWtDQSxrckVEUlksWUFBWSxvVEFBRSxXQUFXLCtCQUFFLGdCQUFnQixxTUFBRSw4QkFBOEIsaUdBQUUsOEJBQThCLGlIQUFFLGFBQWE7OzRGQUV6SCxtQkFBbUI7a0JBUi9CLFNBQVM7K0JBQ0UsbUJBQW1CLGNBR2pCLElBQUksYUFDTCxDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxXQUNuRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsOEJBQThCLEVBQUUsOEJBQThCLEVBQUUsYUFBYSxDQUFDOzhCQUk1SCxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIG9mLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBwcm92aWRlVHJhbnNsb2NvU2NvcGUsIFRyYW5zbG9jb1BpcGUsIFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28nO1xuaW1wb3J0IHsgcGFyc2VJU08sIHRvRGF0ZSB9IGZyb20gXCJkYXRlLWZuc1wiO1xuXG5pbXBvcnQgeyBpc0F1dGhlbnRpY2F0ZWQgfSBmcm9tIFwiQHNpbmVxdWEvYXRvbWljXCI7XG5cbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSBcIi4uL2NoYXQuc2VydmljZVwiO1xuaW1wb3J0IHsgQXNzaXN0YW50VXRpbHMgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHMuc2VydmljZVwiO1xuaW1wb3J0IHsgRGlhbG9nRGVsZXRlU2F2ZWRDaGF0Q29tcG9uZW50IH0gZnJvbSBcIi4uL2RpYWxvZ3MvZGVsZXRlLXNhdmVkLWNoYXQuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEaWFsb2dSZW5hbWVTYXZlZENoYXRDb21wb25lbnQgfSBmcm9tIFwiLi4vZGlhbG9ncy9yZW5hbWUtc2F2ZWQtY2hhdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IEluc3RhbmNlTWFuYWdlclNlcnZpY2UgfSBmcm9tIFwiLi4vaW5zdGFuY2UtbWFuYWdlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gXCIuLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBTYXZlZENoYXQgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IFNhdmVkQ2hhdHNTZXJ2aWNlIH0gZnJvbSBcIi4vc2F2ZWQtY2hhdHMuc2VydmljZVwiO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NxLXNhdmVkLWNoYXRzLXYzJyxcbiAgdGVtcGxhdGVVcmw6ICdzYXZlZC1jaGF0cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydzYXZlZC1jaGF0cy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtTYXZlZENoYXRzU2VydmljZSwgcHJvdmlkZVRyYW5zbG9jb1Njb3BlKCdzYXZlZC1jaGF0cycsICdjaGF0JyldLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgVG9vbHRpcERpcmVjdGl2ZSwgRGlhbG9nUmVuYW1lU2F2ZWRDaGF0Q29tcG9uZW50LCBEaWFsb2dEZWxldGVTYXZlZENoYXRDb21wb25lbnQsIFRyYW5zbG9jb1BpcGVdXG59KVxuZXhwb3J0IGNsYXNzIFNhdmVkQ2hhdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBEZWZpbmUgdGhlIGtleSBiYXNlZCBvbiBpdCwgdGhlIGFwcHJvcHJpYXRlIGNoYXRTZXJ2aWNlIGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlICovXG4gIEBJbnB1dCgpIGluc3RhbmNlSWQ6IHN0cmluZztcblxuICBAT3V0cHV0KCkgbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8U2F2ZWRDaGF0PigpO1xuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxTYXZlZENoYXQ+KCk7XG5cbiAgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlO1xuICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIGdyb3VwZWRTYXZlZENoYXRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBrZXk6IHN0cmluZywgdmFsdWU6IFNhdmVkQ2hhdFtdIH1bXT4oW10pO1xuXG4gIHB1YmxpYyBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlID0gaW5qZWN0KEluc3RhbmNlTWFuYWdlclNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbG9jbyA9IGluamVjdChUcmFuc2xvY29TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhc3Npc3RhbnRVdGlscyA9IGluamVjdChBc3Npc3RhbnRVdGlscyk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgb2YoaXNBdXRoZW50aWNhdGVkKCkpLnBpcGUoXG4gICAgICAgIHRhcChfID0+IHRoaXMuaW5zdGFudGlhdGVDaGF0U2VydmljZSgpKSxcbiAgICAgICAgc3dpdGNoTWFwKF8gPT4gdGhpcy5jaGF0U2VydmljZS51c2VyT3ZlcnJpZGUkKSxcbiAgICAgICAgc3dpdGNoTWFwKF8gPT4gdGhpcy5jaGF0U2VydmljZS5pbml0UHJvY2VzcyQpLFxuICAgICAgICBmaWx0ZXIoc3VjY2VzcyA9PiAhIXN1Y2Nlc3MpLFxuICAgICAgICB0YXAoXyA9PiB7XG4gICAgICAgICAgdGhpcy5vbkxpc3RTYXZlZENoYXQoKTtcbiAgICAgICAgICBpZiAoISF0aGlzLmNoYXRTZXJ2aWNlLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLnNhdmVkQ2hhdFNldHRpbmdzPy5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLmxpc3RTYXZlZENoYXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBpbnN0YW50aWF0ZUNoYXRTZXJ2aWNlKCk6IHZvaWQge1xuICAgIHRoaXMuY2hhdFNlcnZpY2UgPSB0aGlzLmluc3RhbmNlTWFuYWdlclNlcnZpY2UuZ2V0SW5zdGFuY2UodGhpcy5pbnN0YW5jZUlkKTtcbiAgfVxuXG4gIG9uTGlzdFNhdmVkQ2hhdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZS5zYXZlZENoYXRzJCxcbiAgICAgICAgdGhpcy50cmFuc2xvY28ubGFuZ0NoYW5nZXMkXG4gICAgICBdKS5waXBlKFxuICAgICAgICBmaWx0ZXIoKFtzYXZlZENoYXRzXSkgPT4gISFzYXZlZENoYXRzKVxuICAgICAgKS5zdWJzY3JpYmUoKFtzYXZlZENoYXRzXSkgPT4gdGhpcy5ncm91cGVkU2F2ZWRDaGF0cyQubmV4dCh0aGlzLl9ncm91cFNhdmVkQ2hhdHNCeURhdGUoc2F2ZWRDaGF0cykpKVxuICAgICk7XG4gIH1cblxuICBvbkxvYWQoc2F2ZWRDaGF0OiBTYXZlZENoYXQpIHtcbiAgICBpZiAoISF0aGlzLmNoYXRTZXJ2aWNlLnN0cmVhbWluZyQudmFsdWUgfHwgISF0aGlzLmNoYXRTZXJ2aWNlLnN0b3BwaW5nR2VuZXJhdGlvbiQudmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jaGF0U2VydmljZS5nZW5lcmF0ZUNoYXRJZChzYXZlZENoYXQuaWQpO1xuICAgIHRoaXMuY2hhdFNlcnZpY2UubG9hZFNhdmVkQ2hhdCQubmV4dChzYXZlZENoYXQpO1xuICAgIHRoaXMuY2hhdFNlcnZpY2UubGlzdFNhdmVkQ2hhdCgpOyAvLyBhc3N1bWluZyBzYXZlZCBjaGF0cyBvcGVyYXRpb25zIGFyZSBjZXJ0YWlubHkgZW5hYmxlZCBhdCB0aGlzIGxldmVsXG4gICAgdGhpcy5sb2FkLmVtaXQoc2F2ZWRDaGF0KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dyb3VwU2F2ZWRDaGF0c0J5RGF0ZShzYXZlZENoYXRzOiBTYXZlZENoYXRbXSk6IHsga2V5OiBzdHJpbmcsIHZhbHVlOiBTYXZlZENoYXRbXSB9W10ge1xuICAgIGNvbnN0IGdyb3VwZWRTYXZlZENoYXRzID0gbmV3IE1hcDxzdHJpbmcsIFNhdmVkQ2hhdFtdPigpO1xuXG4gICAgc2F2ZWRDaGF0c1xuICAgICAgLnNvcnQoKGEsIGIpID0+IHBhcnNlSVNPKGIubW9kaWZpZWRVVEMpLmdldFRpbWUoKSAtIHBhcnNlSVNPKGEubW9kaWZpZWRVVEMpLmdldFRpbWUoKSlcbiAgICAgIC5mb3JFYWNoKHNhdmVkQ2hhdCA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwS2V5ID0gdGhpcy5hc3Npc3RhbnRVdGlscy5nZXRUaW1lS2V5KHRvRGF0ZShwYXJzZUlTTyhzYXZlZENoYXQubW9kaWZpZWRVVEMpKSk7IC8vIE11c3QgY29udmVydCB0aGUgVVRDIGRhdGUgdG8gbG9jYWwgZGF0ZSBiZWZvcmUgcGFzc2luZyB0byBfZ2V0VGltZUtleVxuXG4gICAgICAgIGlmICghZ3JvdXBlZFNhdmVkQ2hhdHMuaGFzKGdyb3VwS2V5KSkge1xuICAgICAgICAgIGdyb3VwZWRTYXZlZENoYXRzLnNldChncm91cEtleSwgW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXBlZFNhdmVkQ2hhdHMuZ2V0KGdyb3VwS2V5KSEucHVzaChzYXZlZENoYXQpO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cGVkU2F2ZWRDaGF0cywgKFtrZXksIHZhbHVlXSkgPT4gKHsga2V5LCB2YWx1ZSB9KSk7O1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiKGNoYXRTZXJ2aWNlLmFzc2lzdGFudENvbmZpZyQgfCBhc3luYyk/LnNhdmVkQ2hhdFNldHRpbmdzLmRpc3BsYXlcIj5cbiAgPGRpdiAqbmdJZj1cImNoYXRTZXJ2aWNlLnNhdmVkQ2hhdHNFcnJvciQgfCBhc3luY1wiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCI+XG4gICAge3sgJ3NhdmVkQ2hhdHMubGlzdEVycm9yJyB8IHRyYW5zbG9jbyB9fVxuICA8L2Rpdj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgKGdyb3VwZWRTYXZlZENoYXRzJCB8IGFzeW5jKVwiIGNsYXNzPVwic2F2ZWQtY2hhdHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtY2hhdC1kYXRlXCI+e3tncm91cC5rZXl9fTwvZGl2PlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHNhdmVkQ2hhdCBvZiBncm91cC52YWx1ZVwiXG4gICAgICAoY2xpY2spPVwib25Mb2FkKHNhdmVkQ2hhdClcIlxuICAgICAgY2xhc3M9XCJzYXZlZC1jaGF0IHAtMlwiXG4gICAgICBbY2xhc3MuZm9yYmlkZGVuXT1cIihjaGF0U2VydmljZS5zdHJlYW1pbmckIHwgYXN5bmMpIHx8IChjaGF0U2VydmljZS5zdG9wcGluZ0dlbmVyYXRpb24kIHwgYXN5bmMpXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY2hhdFNlcnZpY2UuY2hhdElkID09PSBzYXZlZENoYXQuaWRcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGUgbWUtMVwiIFtzcVRvb2x0aXBdPVwic2F2ZWRDaGF0LnRpdGxlXCI+e3tzYXZlZENoYXQudGl0bGV9fTwvc3Bhbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJyZW5hbWVEaWFsb2cuc2hvd01vZGFsKCRldmVudCwgc2F2ZWRDaGF0KVwiXG4gICAgICAgIFtzcVRvb2x0aXBdPVwiJ3NhdmVkQ2hhdHMucmVuYW1lJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgIGNsYXNzPVwibXgtMSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBwLTAgbS0wIGN1cnNvci1wb2ludGVyIHRleHQtaW5oZXJpdCBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGVuIHNhdmVkLWNoYXQtYWN0aW9uc1wiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURpYWxvZy5zaG93TW9kYWwoJGV2ZW50LCBzYXZlZENoYXQpXCJcbiAgICAgICAgW3NxVG9vbHRpcF09XCInc2F2ZWRDaGF0cy5kZWxldGUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgY2xhc3M9XCJtcy0xIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIHAtMCBtLTAgY3Vyc29yLXBvaW50ZXIgdGV4dC1pbmhlcml0IGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaCBzYXZlZC1jaGF0LWFjdGlvbnNcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPHNxLWRpYWxvZy1kZWxldGUtc2F2ZWQtY2hhdCBbY2hhdFNlcnZpY2VdPVwiY2hhdFNlcnZpY2VcIiAoZGVsZXRlKT1cImRlbGV0ZS5lbWl0KCRldmVudClcIiAjZGVsZXRlRGlhbG9nIC8+XG48c3EtZGlhbG9nLXJlbmFtZS1zYXZlZC1jaGF0IFtjaGF0U2VydmljZV09XCJjaGF0U2VydmljZVwiICNyZW5hbWVEaWFsb2cgLz5cbiJdfQ==
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtY2hhdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvc2F2ZWQtY2hhdHMvc2F2ZWQtY2hhdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvc2F2ZWQtY2hhdHMvc2F2ZWQtY2hhdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hMLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUU1QyxPQUFPLEVBQVcsVUFBVSxFQUFFLGVBQWUsRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBRzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RixPQUFP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WSxZQUFZLG9UQUFFLFdBQVcsK0JBQUUsZ0JBQWdCLHFNQUFFLDhCQUE4QixpR0FBRSw4QkFBOEIsaUhBQUUsYUFBYTs7NEZBRXpILG1CQUFtQjtrQkFSL0IsU0FBUzsrQkFDRSxtQkFBbUIsY0FHakIsSUFBSSxhQUNMLENBQUMsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFdBQ25FLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSw4QkFBOEIsRUFBRSw4QkFBOEIsRUFBRSxhQUFhLENBQUM7OEJBSTVILFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksSUFBSTtzQkFBYixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNhdGNoRXJyb3IsIGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZnJvbSwgbWFwLCBvZiwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgcHJvdmlkZVRyYW5zbG9jb1Njb3BlLCBUcmFuc2xvY29QaXBlLCBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcbmltcG9ydCB7IHBhcnNlSVNPLCB0b0RhdGUgfSBmcm9tIFwiZGF0ZS1mbnNcIjtcblxuaW1wb3J0IHsgQXJ0aWNsZSwgZmV0Y2hRdWVyeSwgaXNBdXRoZW50aWNhdGVkLCBRdWVyeSB9IGZyb20gXCJAc2luZXF1YS9hdG9taWNcIjtcblxuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tIFwiLi4vY2hhdC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRVdGlscyB9IGZyb20gXCIuLi91dGlscy91dGlscy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEaWFsb2dEZWxldGVTYXZlZENoYXRDb21wb25lbnQgfSBmcm9tIFwiLi4vZGlhbG9ncy9kZWxldGUtc2F2ZWQtY2hhdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IERpYWxvZ1JlbmFtZVNhdmVkQ2hhdENvbXBvbmVudCB9IGZyb20gXCIuLi9kaWFsb2dzL3JlbmFtZS1zYXZlZC1jaGF0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgSW5zdGFuY2VNYW5hZ2VyU2VydmljZSB9IGZyb20gXCIuLi9pbnN0YW5jZS1tYW5hZ2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSBcIi4uL3Rvb2x0aXAvdG9vbHRpcC5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IFNhdmVkQ2hhdCB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgU2F2ZWRDaGF0c1NlcnZpY2UgfSBmcm9tIFwiLi9zYXZlZC1jaGF0cy5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NxLXNhdmVkLWNoYXRzLXYzJyxcbiAgdGVtcGxhdGVVcmw6ICdzYXZlZC1jaGF0cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydzYXZlZC1jaGF0cy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtTYXZlZENoYXRzU2VydmljZSwgcHJvdmlkZVRyYW5zbG9jb1Njb3BlKCdzYXZlZC1jaGF0cycsICdjaGF0JyldLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgVG9vbHRpcERpcmVjdGl2ZSwgRGlhbG9nUmVuYW1lU2F2ZWRDaGF0Q29tcG9uZW50LCBEaWFsb2dEZWxldGVTYXZlZENoYXRDb21wb25lbnQsIFRyYW5zbG9jb1BpcGVdXG59KVxuZXhwb3J0IGNsYXNzIFNhdmVkQ2hhdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBEZWZpbmUgdGhlIGtleSBiYXNlZCBvbiBpdCwgdGhlIGFwcHJvcHJpYXRlIGNoYXRTZXJ2aWNlIGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlICovXG4gIEBJbnB1dCgpIGluc3RhbmNlSWQ6IHN0cmluZztcblxuICBAT3V0cHV0KCkgbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8U2F2ZWRDaGF0PigpO1xuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxTYXZlZENoYXQ+KCk7XG5cbiAgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlO1xuICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIGdyb3VwZWRTYXZlZENoYXRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBrZXk6IHN0cmluZywgdmFsdWU6IFNhdmVkQ2hhdFtdIH1bXT4oW10pO1xuXG4gIHF1ZXJ5V2Vic2VydmljZUZvclNlYXJjaD86IHN0cmluZztcbiAgcHJpdmF0ZSBzZWFyY2hRdWVyeTogUXVlcnk7XG4gIHByaXZhdGUgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBwcml2YXRlIHNlYXJjaFRleHQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlID0gaW5qZWN0KEluc3RhbmNlTWFuYWdlclNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbG9jbyA9IGluamVjdChUcmFuc2xvY29TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhc3Npc3RhbnRVdGlscyA9IGluamVjdChBc3Npc3RhbnRVdGlscyk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgb2YoaXNBdXRoZW50aWNhdGVkKCkpLnBpcGUoXG4gICAgICAgIHRhcChfID0+IHRoaXMuaW5zdGFudGlhdGVDaGF0U2VydmljZSgpKSxcbiAgICAgICAgc3dpdGNoTWFwKF8gPT4gdGhpcy5jaGF0U2VydmljZS51c2VyT3ZlcnJpZGUkKSxcbiAgICAgICAgc3dpdGNoTWFwKF8gPT4gdGhpcy5jaGF0U2VydmljZS5pbml0UHJvY2VzcyQpLFxuICAgICAgICBmaWx0ZXIoc3VjY2VzcyA9PiAhIXN1Y2Nlc3MpLFxuICAgICAgICB0YXAoXyA9PiB7XG4gICAgICAgICAgdGhpcy5vbkxpc3RTYXZlZENoYXQoKTtcbiAgICAgICAgICBpZiAoISF0aGlzLmNoYXRTZXJ2aWNlLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLnNhdmVkQ2hhdFNldHRpbmdzPy5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLmxpc3RTYXZlZENoYXQoKTtcbiAgICAgICAgICAgIHRoaXMucXVlcnlXZWJzZXJ2aWNlRm9yU2VhcmNoID0gdGhpcy5jaGF0U2VydmljZS5hc3Npc3RhbnRDb25maWckLnZhbHVlIS5zYXZlZENoYXRTZXR0aW5ncz8ucXVlcnlXZWJzZXJ2aWNlRm9yU2VhcmNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoISF0aGlzLnF1ZXJ5V2Vic2VydmljZUZvclNlYXJjaCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IHsgbmFtZTogdGhpcy5xdWVyeVdlYnNlcnZpY2VGb3JTZWFyY2ggfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSgpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDIwMDApLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgc3dpdGNoTWFwKHNlYXJjaFRleHQgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICAgICAgICAgIGlmICghc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICByZXR1cm4gb2YodGhpcy5jaGF0U2VydmljZS5zYXZlZENoYXRzJC52YWx1ZSB8fCBbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFF1ZXJ5LnRleHQgPSBzZWFyY2hUZXh0O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2F2ZWRDaGF0cygpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRhcChzYXZlZENoYXRzID0+XG4gICAgICAgICAgICB0aGlzLmdyb3VwZWRTYXZlZENoYXRzJC5uZXh0KHRoaXMuX2dyb3VwU2F2ZWRDaGF0c0J5RGF0ZShzYXZlZENoYXRzKSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcblxuXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb25TZWFyY2goZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXh0JC5uZXh0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICB9XG5cbiAgaW5zdGFudGlhdGVDaGF0U2VydmljZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNoYXRTZXJ2aWNlID0gdGhpcy5pbnN0YW5jZU1hbmFnZXJTZXJ2aWNlLmdldEluc3RhbmNlKHRoaXMuaW5zdGFuY2VJZCk7XG4gIH1cblxuICBvbkxpc3RTYXZlZENoYXQoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2Uuc2F2ZWRDaGF0cyQsXG4gICAgICAgIHRoaXMudHJhbnNsb2NvLmxhbmdDaGFuZ2VzJFxuICAgICAgXSkucGlwZShcbiAgICAgICAgZmlsdGVyKChbc2F2ZWRDaGF0c10pID0+ICEhc2F2ZWRDaGF0cylcbiAgICAgICkuc3Vic2NyaWJlKChbc2F2ZWRDaGF0c10pID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXJ5V2Vic2VydmljZUZvclNlYXJjaCB8fCAhdGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICAgICAgdGhpcy5ncm91cGVkU2F2ZWRDaGF0cyQubmV4dCh0aGlzLl9ncm91cFNhdmVkQ2hhdHNCeURhdGUoc2F2ZWRDaGF0cykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWFyY2hTYXZlZENoYXRzKCkuc3Vic2NyaWJlKHNhdmVkQ2hhdHMgPT4gdGhpcy5ncm91cGVkU2F2ZWRDaGF0cyQubmV4dCh0aGlzLl9ncm91cFNhdmVkQ2hhdHNCeURhdGUoc2F2ZWRDaGF0cykpKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgb25Mb2FkKHNhdmVkQ2hhdDogU2F2ZWRDaGF0KSB7XG4gICAgaWYgKCEhdGhpcy5jaGF0U2VydmljZS5zdHJlYW1pbmckLnZhbHVlIHx8ICEhdGhpcy5jaGF0U2VydmljZS5zdG9wcGluZ0dlbmVyYXRpb24kLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hhdFNlcnZpY2UuZ2VuZXJhdGVDaGF0SWQoc2F2ZWRDaGF0LmlkKTtcbiAgICB0aGlzLmNoYXRTZXJ2aWNlLmxvYWRTYXZlZENoYXQkLm5leHQoc2F2ZWRDaGF0KTtcbiAgICB0aGlzLmNoYXRTZXJ2aWNlLmxpc3RTYXZlZENoYXQoKTsgLy8gYXNzdW1pbmcgc2F2ZWQgY2hhdHMgb3BlcmF0aW9ucyBhcmUgY2VydGFpbmx5IGVuYWJsZWQgYXQgdGhpcyBsZXZlbFxuICAgIHRoaXMubG9hZC5lbWl0KHNhdmVkQ2hhdCk7XG4gIH1cblxuICBwcml2YXRlIF9ncm91cFNhdmVkQ2hhdHNCeURhdGUoc2F2ZWRDaGF0czogU2F2ZWRDaGF0W10pOiB7IGtleTogc3RyaW5nLCB2YWx1ZTogU2F2ZWRDaGF0W10gfVtdIHtcbiAgICBjb25zdCBncm91cGVkU2F2ZWRDaGF0cyA9IG5ldyBNYXA8c3RyaW5nLCBTYXZlZENoYXRbXT4oKTtcblxuICAgIHNhdmVkQ2hhdHNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBwYXJzZUlTTyhiLm1vZGlmaWVkVVRDKS5nZXRUaW1lKCkgLSBwYXJzZUlTTyhhLm1vZGlmaWVkVVRDKS5nZXRUaW1lKCkpXG4gICAgICAuZm9yRWFjaChzYXZlZENoYXQgPT4ge1xuICAgICAgICBjb25zdCBncm91cEtleSA9IHRoaXMuYXNzaXN0YW50VXRpbHMuZ2V0VGltZUtleSh0b0RhdGUocGFyc2VJU08oc2F2ZWRDaGF0Lm1vZGlmaWVkVVRDKSkpOyAvLyBNdXN0IGNvbnZlcnQgdGhlIFVUQyBkYXRlIHRvIGxvY2FsIGRhdGUgYmVmb3JlIHBhc3NpbmcgdG8gX2dldFRpbWVLZXlcblxuICAgICAgICBpZiAoIWdyb3VwZWRTYXZlZENoYXRzLmhhcyhncm91cEtleSkpIHtcbiAgICAgICAgICBncm91cGVkU2F2ZWRDaGF0cy5zZXQoZ3JvdXBLZXksIFtdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdyb3VwZWRTYXZlZENoYXRzLmdldChncm91cEtleSkhLnB1c2goc2F2ZWRDaGF0KTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBlZFNhdmVkQ2hhdHMsIChba2V5LCB2YWx1ZV0pID0+ICh7IGtleSwgdmFsdWUgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWFyY2hTYXZlZENoYXRzKCk6IE9ic2VydmFibGU8U2F2ZWRDaGF0W10+IHtcbiAgICByZXR1cm4gZnJvbShmZXRjaFF1ZXJ5KHRoaXMuc2VhcmNoUXVlcnkpKS5waXBlKFxuICAgICAgbWFwKHJlcyA9PiByZXMucmVjb3Jkcy5tYXAoKGE6IEFydGljbGUpID0+ICh7XG4gICAgICAgIGlkOiBhLmlkLnNwbGl0KCd8JylbMV0sIC8vIHJlbW92aW5nIHRoZSBhcHAgbmFtZSBpbiBmcm9udCBvZiB0aGUgSUQgY2F1c2luZyBpc3N1ZXMgdG8gZmV0Y2ggdGhlIHNhdmVkIGNoYXRcbiAgICAgICAgdGl0bGU6IGEudGl0bGUsXG4gICAgICAgIG1vZGlmaWVkVVRDOiBhLm1vZGlmaWVkXG4gICAgICB9KSkpLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih0aGlzLmNoYXRTZXJ2aWNlLnNhdmVkQ2hhdHMkLnZhbHVlIHx8IFtdKSlcbiAgICApXG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIoY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJCB8IGFzeW5jKT8uc2F2ZWRDaGF0U2V0dGluZ3MuZGlzcGxheVwiPlxuICA8ZGl2ICpuZ0lmPVwiISFxdWVyeVdlYnNlcnZpY2VGb3JTZWFyY2hcIiBjbGFzcz1cInN0aWNreS10b3BcIj5cbiAgICA8aW5wdXQgdHlwZT1cInNlYXJjaFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW3BsYWNlaG9sZGVyXT1cIidzYXZlZENoYXRzLnNlYXJjaFBsYWNlaG9sZGVyJyB8IHRyYW5zbG9jb1wiIChrZXl1cCk9XCJvblNlYXJjaCgkZXZlbnQpXCIgKHNlYXJjaCk9XCJvblNlYXJjaCgkZXZlbnQpXCIgLz5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJjaGF0U2VydmljZS5zYXZlZENoYXRzRXJyb3IkIHwgYXN5bmNcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiPlxuICAgIHt7ICdzYXZlZENoYXRzLmxpc3RFcnJvcicgfCB0cmFuc2xvY28gfX1cbiAgPC9kaXY+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGdyb3VwIG9mIChncm91cGVkU2F2ZWRDaGF0cyQgfCBhc3luYylcIiBjbGFzcz1cInNhdmVkLWNoYXRzXCI+XG4gICAgPGRpdiBjbGFzcz1cInNhdmVkLWNoYXQtZGF0ZVwiPnt7Z3JvdXAua2V5IHwgdHJhbnNsb2NvfX08L2Rpdj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzYXZlZENoYXQgb2YgZ3JvdXAudmFsdWVcIlxuICAgICAgKGNsaWNrKT1cIm9uTG9hZChzYXZlZENoYXQpXCJcbiAgICAgIGNsYXNzPVwic2F2ZWQtY2hhdCBwLTJcIlxuICAgICAgW2NsYXNzLmZvcmJpZGRlbl09XCIoY2hhdFNlcnZpY2Uuc3RyZWFtaW5nJCB8IGFzeW5jKSB8fCAoY2hhdFNlcnZpY2Uuc3RvcHBpbmdHZW5lcmF0aW9uJCB8IGFzeW5jKVwiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImNoYXRTZXJ2aWNlLmNoYXRJZCA9PT0gc2F2ZWRDaGF0LmlkXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInRpdGxlIG1lLTFcIiBbc3FUb29sdGlwXT1cInNhdmVkQ2hhdC50aXRsZVwiPnt7c2F2ZWRDaGF0LnRpdGxlfX08L3NwYW4+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwicmVuYW1lRGlhbG9nLnNob3dNb2RhbCgkZXZlbnQsIHNhdmVkQ2hhdClcIlxuICAgICAgICBbc3FUb29sdGlwXT1cIidzYXZlZENoYXRzLnJlbmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICBjbGFzcz1cIm14LTEgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgcC0wIG0tMCBjdXJzb3ItcG9pbnRlciB0ZXh0LWluaGVyaXQgbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBlbiBzYXZlZC1jaGF0LWFjdGlvbnNcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJkZWxldGVEaWFsb2cuc2hvd01vZGFsKCRldmVudCwgc2F2ZWRDaGF0KVwiXG4gICAgICAgIFtzcVRvb2x0aXBdPVwiJ3NhdmVkQ2hhdHMuZGVsZXRlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgIGNsYXNzPVwibXMtMSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBwLTAgbS0wIGN1cnNvci1wb2ludGVyIHRleHQtaW5oZXJpdCBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2ggc2F2ZWQtY2hhdC1hY3Rpb25zXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxzcS1kaWFsb2ctZGVsZXRlLXNhdmVkLWNoYXQgW2NoYXRTZXJ2aWNlXT1cImNoYXRTZXJ2aWNlXCIgKGRlbGV0ZSk9XCJkZWxldGUuZW1pdCgkZXZlbnQpXCIgI2RlbGV0ZURpYWxvZyAvPlxuPHNxLWRpYWxvZy1yZW5hbWUtc2F2ZWQtY2hhdCBbY2hhdFNlcnZpY2VdPVwiY2hhdFNlcnZpY2VcIiAjcmVuYW1lRGlhbG9nIC8+XG4iXX0=
@@ -1,10 +1,15 @@
1
- import { Injectable } from '@angular/core';
2
- import { from, throwError } from 'rxjs';
3
- import { tap, catchError, map } from 'rxjs/operators';
1
+ import { inject, Injectable } from '@angular/core';
4
2
  import { get, post } from '@sinequa/atomic';
3
+ import { from, throwError } from 'rxjs';
4
+ import { catchError, map, tap } from 'rxjs/operators';
5
+ import { NotificationsService } from '../services/notification.service';
6
+ import { TranslocoService } from '@jsverse/transloco';
5
7
  import * as i0 from "@angular/core";
6
8
  export class SavedChatsService {
7
- constructor() { }
9
+ constructor() {
10
+ this.notificationsService = inject(NotificationsService);
11
+ this.transloco = inject(TranslocoService);
12
+ }
8
13
  init(config) {
9
14
  this.operationConfig = config;
10
15
  }
@@ -13,7 +18,7 @@ export class SavedChatsService {
13
18
  throw new Error('SavedChatsService not initialized. Call init() first.');
14
19
  }
15
20
  }
16
- listChats() {
21
+ async listChats() {
17
22
  this.ensureInitialized();
18
23
  const config = this.operationConfig;
19
24
  if (!config.isSavedChatsEnabled()) {
@@ -29,15 +34,17 @@ export class SavedChatsService {
29
34
  acc[key] = String(value);
30
35
  return acc;
31
36
  }, {}));
32
- from(get(`api/v1/plugin/${config.getRestUrl()}`, searchParams)).pipe(tap(res => {
37
+ try {
38
+ const res = await get(`api/v1/plugin/${config.getRestUrl()}`, searchParams);
33
39
  config.updateSavedChatsList(res.savedChats);
34
40
  config.setSavedChatsErrorStatus(false);
35
- }), catchError((error) => {
41
+ }
42
+ catch (error) {
36
43
  const errorMsg = 'Error occurred while calling the SavedChatList API: ' + error.error?.errorMessage;
37
44
  console.error('SavedChatsService: ' + errorMsg);
38
45
  config.setSavedChatsErrorStatus(true);
39
- return throwError(() => error);
40
- })).subscribe();
46
+ throw error;
47
+ }
41
48
  }
42
49
  getChatById(id) {
43
50
  this.ensureInitialized();
@@ -57,7 +64,10 @@ export class SavedChatsService {
57
64
  return acc;
58
65
  }, {}));
59
66
  return from(get(`api/v1/plugin/${config.getRestUrl()}`, searchParams)).pipe(tap(res => {
60
- config.generateAuditEvent('ast-saved-chat.load', { duration: res.executionTimeMilliseconds }, res.savedChat.id);
67
+ config.generateAuditEvent('ast-saved-chat.load', { duration: res.executionTimeMilliseconds }, id);
68
+ if (!res.savedChat) {
69
+ this.notificationsService.error(this.transloco.translate('savedChats.loadFail'));
70
+ }
61
71
  }), map(res => res.savedChat), catchError((error) => {
62
72
  const errorMsg = 'Error occurred while calling the SavedChatGet API: ' + error.error?.errorMessage;
63
73
  console.error('SavedChatsService: ' + errorMsg);
@@ -143,10 +153,12 @@ export class SavedChatsService {
143
153
  acc[key] = String(value);
144
154
  return acc;
145
155
  }, {}));
146
- return from(get(`api/v1/plugin/${config.getRestUrl()}`, searchParams)).pipe(map(res => res.exists), catchError((error) => {
156
+ return from(get(`api/v1/plugin/${config.getRestUrl()}`, searchParams)
157
+ .then(res => res.exists)
158
+ .catch((error) => {
147
159
  const errorMsg = 'Error occurred while calling the SavedChatExist API: ' + error.error?.errorMessage;
148
160
  console.error('SavedChatsService: ' + errorMsg);
149
- return throwError(() => error);
161
+ throw error;
150
162
  }));
151
163
  }
152
164
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedChatsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -155,4 +167,4 @@ export class SavedChatsService {
155
167
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedChatsService, decorators: [{
156
168
  type: Injectable
157
169
  }], ctorParameters: () => [] });
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtY2hhdHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L3NhdmVkLWNoYXRzL3NhdmVkLWNoYXRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQXVCNUMsTUFBTSxPQUFPLGlCQUFpQjtJQUc1QixnQkFBZSxDQUFDO0lBRVQsSUFBSSxDQUFDLE1BQWlDO1FBQzNDLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7SUFFTSxTQUFTO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWdCLENBQUM7UUFFckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7WUFDbEMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUc7WUFDWCxNQUFNLEVBQUUsZUFBZTtZQUN2QixPQUFPLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUM1QixV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QUMscUJBQXFCLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDaEQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7K0dBN0xVLGlCQUFpQjttSEFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwLCBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBnZXQsIHBvc3QgfSBmcm9tICdAc2luZXF1YS9hdG9taWMnO1xuXG5pbXBvcnQge1xuICBDaGF0TWVzc2FnZSxcbiAgU2F2ZWRDaGF0LFxuICBTYXZlZENoYXRIaXN0b3J5LFxuICBTYXZlZENoYXRSZXNwb25zZSxcbiAgRGVsZXRlU2F2ZWRDaGF0UmVzcG9uc2Vcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNhdmVkQ2hhdHNPcGVyYXRpb25Db25maWcge1xuICBnZXRBcHBOYW1lOiAoKSA9PiBzdHJpbmc7XG4gIGdldEluc3RhbmNlSWQ6ICgpID0+IHN0cmluZztcbiAgZ2V0UmVzdFVybDogKCkgPT4gc3RyaW5nO1xuICBnZXREZWJ1Z0ZsYWc6ICgpID0+IGJvb2xlYW47XG4gIGlzU2F2ZWRDaGF0c0VuYWJsZWQ6ICgpID0+IGJvb2xlYW47XG5cbiAgc2V0U2F2ZWRDaGF0c0Vycm9yU3RhdHVzOiAoaGFzRXJyb3I6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHVwZGF0ZVNhdmVkQ2hhdHNMaXN0OiAoY2hhdHM6IFNhdmVkQ2hhdFtdKSA9PiB2b2lkO1xuICBnZW5lcmF0ZUF1ZGl0RXZlbnQ6ICh0eXBlOiBzdHJpbmcsIGRldGFpbHM6IFJlY29yZDxzdHJpbmcsIGFueT4sIGlkPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2F2ZWRDaGF0c1NlcnZpY2Uge1xuICBwcml2YXRlIG9wZXJhdGlvbkNvbmZpZzogU2F2ZWRDaGF0c09wZXJhdGlvbkNvbmZpZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHVibGljIGluaXQoY29uZmlnOiBTYXZlZENoYXRzT3BlcmF0aW9uQ29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy5vcGVyYXRpb25Db25maWcgPSBjb25maWc7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZUluaXRpYWxpemVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcGVyYXRpb25Db25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2F2ZWRDaGF0c1NlcnZpY2Ugbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC4nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbGlzdENoYXRzKCk6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLm9wZXJhdGlvbkNvbmZpZyE7XG5cbiAgICBpZiAoIWNvbmZpZy5pc1NhdmVkQ2hhdHNFbmFibGVkKCkpIHtcbiAgICAgIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKFwiT3BlcmF0aW9ucyBvbiBzYXZlZCBjaGF0cyBhcmUgZGlzYWJsZWRcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwiU2F2ZWRDaGF0TGlzdFwiLFxuICAgICAgYXBwTmFtZTogY29uZmlnLmdldEFwcE5hbWUoKSxcbiAgICAgIGluc3RhbmNlSWQ6IGNvbmZpZy5nZXRJbnN0YW5jZUlkKCksXG4gICAgICBkZWJ1ZzogY29uZmlnLmdldERlYnVnRmxhZygpXG4gICAgfTtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKE9iamVjdC5lbnRyaWVzKGRhdGEpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPikpO1xuXG4gICAgZnJvbShnZXQ8eyBzYXZlZENoYXRzOiBTYXZlZENoYXRbXSB9PihgYXBpL3YxL3BsdWdpbi8ke2NvbmZpZy5nZXRSZXN0VXJsKCl9YCwgc2VhcmNoUGFyYW1zKSkucGlwZShcbiAgICAgIHRhcChyZXMgPT4ge1xuICAgICAgICBjb25maWcudXBkYXRlU2F2ZWRDaGF0c0xpc3QocmVzLnNhdmVkQ2hhdHMpO1xuICAgICAgICBjb25maWcuc2V0U2F2ZWRDaGF0c0Vycm9yU3RhdHVzKGZhbHNlKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JNc2cgPSAnRXJyb3Igb2NjdXJyZWQgd2hpbGUgY2FsbGluZyB0aGUgU2F2ZWRDaGF0TGlzdCBBUEk6ICcgKyBlcnJvci5lcnJvcj8uZXJyb3JNZXNzYWdlO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTYXZlZENoYXRzU2VydmljZTogJyArIGVycm9yTXNnKTtcbiAgICAgICAgY29uZmlnLnNldFNhdmVkQ2hhdHNFcnJvclN0YXR1cyh0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSlcbiAgICApLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGdldENoYXRCeUlkKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNhdmVkQ2hhdEhpc3RvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5vcGVyYXRpb25Db25maWchO1xuXG4gICAgaWYgKCFjb25maWcuaXNTYXZlZENoYXRzRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoXCJPcGVyYXRpb25zIG9uIHNhdmVkIGNoYXRzIGFyZSBkaXNhYmxlZFwiKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJTYXZlZENoYXRHZXRcIixcbiAgICAgIGFwcE5hbWU6IGNvbmZpZy5nZXRBcHBOYW1lKCksXG4gICAgICBpbnN0YW5jZUlkOiBjb25maWcuZ2V0SW5zdGFuY2VJZCgpLFxuICAgICAgY2hhdElkOiBpZCxcbiAgICAgIGRlYnVnOiBjb25maWcuZ2V0RGVidWdGbGFnKClcbiAgICB9O1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSk7XG5cbiAgICByZXR1cm4gZnJvbShnZXQ8eyBzYXZlZENoYXQ6IFNhdmVkQ2hhdEhpc3RvcnksIGV4ZWN1dGlvblRpbWVNaWxsaXNlY29uZHM6IG51bWJlciB9PihgYXBpL3YxL3BsdWdpbi8ke2NvbmZpZy5nZXRSZXN0VXJsKCl9YCwgc2VhcmNoUGFyYW1zKSkucGlwZShcbiAgICAgIHRhcChyZXMgPT4ge1xuICAgICAgICBjb25maWcuZ2VuZXJhdGVBdWRpdEV2ZW50KCdhc3Qtc2F2ZWQtY2hhdC5sb2FkJywgeyBkdXJhdGlvbjogcmVzLmV4ZWN1dGlvblRpbWVNaWxsaXNlY29uZHMgfSwgcmVzLnNhdmVkQ2hhdC5pZCk7XG4gICAgICB9KSxcbiAgICAgIG1hcChyZXMgPT4gcmVzLnNhdmVkQ2hhdCksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBlcnJvck1zZyA9ICdFcnJvciBvY2N1cnJlZCB3aGlsZSBjYWxsaW5nIHRoZSBTYXZlZENoYXRHZXQgQVBJOiAnICsgZXJyb3IuZXJyb3I/LmVycm9yTWVzc2FnZTtcbiAgICAgICAgY29uc29sZS5lcnJvcignU2F2ZWRDaGF0c1NlcnZpY2U6ICcgKyBlcnJvck1zZyk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRDaGF0KGlkOiBzdHJpbmcsIG1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdKTogT2JzZXJ2YWJsZTxTYXZlZENoYXRSZXNwb25zZT4ge1xuICAgIHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLm9wZXJhdGlvbkNvbmZpZyE7XG5cbiAgICBpZiAoIWNvbmZpZy5pc1NhdmVkQ2hhdHNFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihcIk9wZXJhdGlvbnMgb24gc2F2ZWQgY2hhdHMgYXJlIGRpc2FibGVkXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcIlNhdmVkQ2hhdEFkZFwiLFxuICAgICAgYXBwTmFtZTogY29uZmlnLmdldEFwcE5hbWUoKSxcbiAgICAgIGluc3RhbmNlSWQ6IGNvbmZpZy5nZXRJbnN0YW5jZUlkKCksXG4gICAgICBjaGF0SWQ6IGlkLFxuICAgICAgaGlzdG9yeTogbWVzc2FnZXMsXG4gICAgICBkZWJ1ZzogY29uZmlnLmdldERlYnVnRmxhZygpXG4gICAgfTtcblxuICAgIHJldHVybiBmcm9tKHBvc3Q8U2F2ZWRDaGF0UmVzcG9uc2U+KGBhcGkvdjEvcGx1Z2luLyR7Y29uZmlnLmdldFJlc3RVcmwoKX1gLCBkYXRhKSkucGlwZShcbiAgICAgIHRhcChyZXMgPT4ge1xuICAgICAgICBjb25maWcuZ2VuZXJhdGVBdWRpdEV2ZW50KCdhc3Qtc2F2ZWQtY2hhdC5hZGQnLCB7IGR1cmF0aW9uOiByZXMuZXhlY3V0aW9uVGltZU1pbGxpc2Vjb25kcyB9LCByZXMuc2F2ZWRDaGF0LmlkKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JNc2cgPSAnRXJyb3Igb2NjdXJyZWQgd2hpbGUgY2FsbGluZyB0aGUgU2F2ZWRDaGF0QWRkIEFQSTogJyArIGVycm9yLmVycm9yPy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NhdmVkQ2hhdHNTZXJ2aWNlOiAnICsgZXJyb3JNc2cpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQ2hhdChpZDogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBtZXNzYWdlcz86IENoYXRNZXNzYWdlW10pOiBPYnNlcnZhYmxlPFNhdmVkQ2hhdFJlc3BvbnNlPiB7XG4gICAgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMub3BlcmF0aW9uQ29uZmlnITtcblxuICAgIGlmICghY29uZmlnLmlzU2F2ZWRDaGF0c0VuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKFwiT3BlcmF0aW9ucyBvbiBzYXZlZCBjaGF0cyBhcmUgZGlzYWJsZWRcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGE6IGFueSA9IHtcbiAgICAgIGFjdGlvbjogXCJTYXZlZENoYXRVcGRhdGVcIixcbiAgICAgIGFwcE5hbWU6IGNvbmZpZy5nZXRBcHBOYW1lKCksXG4gICAgICBpbnN0YW5jZUlkOiBjb25maWcuZ2V0SW5zdGFuY2VJZCgpLFxuICAgICAgY2hhdElkOiBpZCxcbiAgICAgIGRlYnVnOiBjb25maWcuZ2V0RGVidWdGbGFnKClcbiAgICB9O1xuXG4gICAgaWYgKG5hbWUpIGRhdGFbXCJ0aXRsZVwiXSA9IG5hbWU7XG4gICAgaWYgKG1lc3NhZ2VzKSBkYXRhW1wiaGlzdG9yeVwiXSA9IG1lc3NhZ2VzO1xuXG4gICAgcmV0dXJuIGZyb20ocG9zdDxTYXZlZENoYXRSZXNwb25zZT4oYGFwaS92MS9wbHVnaW4vJHtjb25maWcuZ2V0UmVzdFVybCgpfWAsIGRhdGEpKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JNc2cgPSAnRXJyb3Igb2NjdXJyZWQgd2hpbGUgY2FsbGluZyB0aGUgU2F2ZWRDaGF0VXBkYXRlIEFQSTogJyArIGVycm9yLmVycm9yPy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NhdmVkQ2hhdHNTZXJ2aWNlOiAnICsgZXJyb3JNc2cpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlQ2hhdChpZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxEZWxldGVTYXZlZENoYXRSZXNwb25zZT4ge1xuICAgIHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLm9wZXJhdGlvbkNvbmZpZyE7XG5cbiAgICBpZiAoIWNvbmZpZy5pc1NhdmVkQ2hhdHNFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihcIk9wZXJhdGlvbnMgb24gc2F2ZWQgY2hhdHMgYXJlIGRpc2FibGVkXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcIlNhdmVkQ2hhdERlbGV0ZVwiLFxuICAgICAgYXBwTmFtZTogY29uZmlnLmdldEFwcE5hbWUoKSxcbiAgICAgIGluc3RhbmNlSWQ6IGNvbmZpZy5nZXRJbnN0YW5jZUlkKCksXG4gICAgICBjaGF0SWRzOiBpZHMsXG4gICAgICBkZWJ1ZzogY29uZmlnLmdldERlYnVnRmxhZygpXG4gICAgfTtcblxuICAgIHJldHVybiBmcm9tKHBvc3Q8RGVsZXRlU2F2ZWRDaGF0UmVzcG9uc2U+KGBhcGkvdjEvcGx1Z2luLyR7Y29uZmlnLmdldFJlc3RVcmwoKX1gLCBkYXRhKSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0V4aXN0aW5nQ2hhdChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMub3BlcmF0aW9uQ29uZmlnITtcblxuICAgIGlmICghY29uZmlnLmlzU2F2ZWRDaGF0c0VuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKFwiT3BlcmF0aW9ucyBvbiBzYXZlZCBjaGF0cyBhcmUgZGlzYWJsZWRcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwiU2F2ZWRDaGF0RXhpc3RcIixcbiAgICAgIGFwcE5hbWU6IGNvbmZpZy5nZXRBcHBOYW1lKCksXG4gICAgICBpbnN0YW5jZUlkOiBjb25maWcuZ2V0SW5zdGFuY2VJZCgpLFxuICAgICAgY2hhdElkOiBpZCxcbiAgICAgIGRlYnVnOiBjb25maWcuZ2V0RGVidWdGbGFnKClcbiAgICB9O1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSk7XG5cbiAgICByZXR1cm4gZnJvbShnZXQ8eyBleGlzdHM6IGJvb2xlYW4sIGV4ZWN1dGlvblRpbWU6IHN0cmluZywgZXhlY3V0aW9uVGltZU1pbGxpc2Vjb25kczogbnVtYmVyIH0+KGBhcGkvdjEvcGx1Z2luLyR7Y29uZmlnLmdldFJlc3RVcmwoKX1gLCBzZWFyY2hQYXJhbXMpKS5waXBlKFxuICAgICAgbWFwKHJlcyA9PiByZXMuZXhpc3RzKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yTXNnID0gJ0Vycm9yIG9jY3VycmVkIHdoaWxlIGNhbGxpbmcgdGhlIFNhdmVkQ2hhdEV4aXN0IEFQSTogJyArIGVycm9yLmVycm9yPy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NhdmVkQ2hhdHNTZXJ2aWNlOiAnICsgZXJyb3JNc2cpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtY2hhdHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L3NhdmVkLWNoYXRzL3NhdmVkLWNoYXRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQWMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFldEQsTUFBTSxPQUFPLGlCQUFpQjtJQU01QjtRQUhpQix5QkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNwRCxjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFdkMsQ0FBQztJQUVULElBQUksQ0FBQyxNQUFpQztRQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQVM7UUFDcEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWdCLENBQUM7UUFFckMsSUFBSSxD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QUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDO2FBQ3JJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7YUFDdkIsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDZixNQUFNLFFBQVEsR0FBRyx1REFBdUQsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQztZQUNyRyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7K0dBbk1VLGlCQUFpQjttSEFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXQsIHBvc3QgfSBmcm9tICdAc2luZXF1YS9hdG9taWMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIENoYXRNZXNzYWdlLFxuICBEZWxldGVTYXZlZENoYXRSZXNwb25zZSxcbiAgU2F2ZWRDaGF0LFxuICBTYXZlZENoYXRIaXN0b3J5LFxuICBTYXZlZENoYXRSZXNwb25zZVxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNhdmVkQ2hhdHNPcGVyYXRpb25Db25maWcge1xuICBnZXRBcHBOYW1lOiAoKSA9PiBzdHJpbmc7XG4gIGdldEluc3RhbmNlSWQ6ICgpID0+IHN0cmluZztcbiAgZ2V0UmVzdFVybDogKCkgPT4gc3RyaW5nO1xuICBnZXREZWJ1Z0ZsYWc6ICgpID0+IGJvb2xlYW47XG4gIGlzU2F2ZWRDaGF0c0VuYWJsZWQ6ICgpID0+IGJvb2xlYW47XG5cbiAgc2V0U2F2ZWRDaGF0c0Vycm9yU3RhdHVzOiAoaGFzRXJyb3I6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHVwZGF0ZVNhdmVkQ2hhdHNMaXN0OiAoY2hhdHM6IFNhdmVkQ2hhdFtdKSA9PiB2b2lkO1xuICBnZW5lcmF0ZUF1ZGl0RXZlbnQ6ICh0eXBlOiBzdHJpbmcsIGRldGFpbHM6IFJlY29yZDxzdHJpbmcsIGFueT4sIGlkPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2F2ZWRDaGF0c1NlcnZpY2Uge1xuICBwcml2YXRlIG9wZXJhdGlvbkNvbmZpZzogU2F2ZWRDaGF0c09wZXJhdGlvbkNvbmZpZyB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWNhdGlvbnNTZXJ2aWNlID0gaW5qZWN0KE5vdGlmaWNhdGlvbnNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xvY28gPSBpbmplY3QoVHJhbnNsb2NvU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHB1YmxpYyBpbml0KGNvbmZpZzogU2F2ZWRDaGF0c09wZXJhdGlvbkNvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMub3BlcmF0aW9uQ29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVJbml0aWFsaXplZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3BlcmF0aW9uQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhdmVkQ2hhdHNTZXJ2aWNlIG5vdCBpbml0aWFsaXplZC4gQ2FsbCBpbml0KCkgZmlyc3QuJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RDaGF0cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5vcGVyYXRpb25Db25maWchO1xuXG4gICAgaWYgKCFjb25maWcuaXNTYXZlZENoYXRzRW5hYmxlZCgpKSB7XG4gICAgICB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihcIk9wZXJhdGlvbnMgb24gc2F2ZWQgY2hhdHMgYXJlIGRpc2FibGVkXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcIlNhdmVkQ2hhdExpc3RcIixcbiAgICAgIGFwcE5hbWU6IGNvbmZpZy5nZXRBcHBOYW1lKCksXG4gICAgICBpbnN0YW5jZUlkOiBjb25maWcuZ2V0SW5zdGFuY2VJZCgpLFxuICAgICAgZGVidWc6IGNvbmZpZy5nZXREZWJ1Z0ZsYWcoKVxuICAgIH07XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhPYmplY3QuZW50cmllcyhkYXRhKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBnZXQ8eyBzYXZlZENoYXRzOiBTYXZlZENoYXRbXSB9PihgYXBpL3YxL3BsdWdpbi8ke2NvbmZpZy5nZXRSZXN0VXJsKCl9YCwgc2VhcmNoUGFyYW1zKVxuICAgICAgY29uZmlnLnVwZGF0ZVNhdmVkQ2hhdHNMaXN0KHJlcy5zYXZlZENoYXRzKTtcbiAgICAgIGNvbmZpZy5zZXRTYXZlZENoYXRzRXJyb3JTdGF0dXMoZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1zZyA9ICdFcnJvciBvY2N1cnJlZCB3aGlsZSBjYWxsaW5nIHRoZSBTYXZlZENoYXRMaXN0IEFQSTogJyArIGVycm9yLmVycm9yPy5lcnJvck1lc3NhZ2U7XG4gICAgICBjb25zb2xlLmVycm9yKCdTYXZlZENoYXRzU2VydmljZTogJyArIGVycm9yTXNnKTtcbiAgICAgIGNvbmZpZy5zZXRTYXZlZENoYXRzRXJyb3JTdGF0dXModHJ1ZSk7XG5cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDaGF0QnlJZChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTYXZlZENoYXRIaXN0b3J5IHwgdW5kZWZpbmVkPiB7XG4gICAgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMub3BlcmF0aW9uQ29uZmlnITtcblxuICAgIGlmICghY29uZmlnLmlzU2F2ZWRDaGF0c0VuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKFwiT3BlcmF0aW9ucyBvbiBzYXZlZCBjaGF0cyBhcmUgZGlzYWJsZWRcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwiU2F2ZWRDaGF0R2V0XCIsXG4gICAgICBhcHBOYW1lOiBjb25maWcuZ2V0QXBwTmFtZSgpLFxuICAgICAgaW5zdGFuY2VJZDogY29uZmlnLmdldEluc3RhbmNlSWQoKSxcbiAgICAgIGNoYXRJZDogaWQsXG4gICAgICBkZWJ1ZzogY29uZmlnLmdldERlYnVnRmxhZygpXG4gICAgfTtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKE9iamVjdC5lbnRyaWVzKGRhdGEpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPikpO1xuXG4gICAgcmV0dXJuIGZyb20oZ2V0PHsgc2F2ZWRDaGF0OiBTYXZlZENoYXRIaXN0b3J5LCBleGVjdXRpb25UaW1lTWlsbGlzZWNvbmRzOiBudW1iZXIgfT4oYGFwaS92MS9wbHVnaW4vJHtjb25maWcuZ2V0UmVzdFVybCgpfWAsIHNlYXJjaFBhcmFtcykpLnBpcGUoXG4gICAgICB0YXAocmVzID0+IHtcbiAgICAgICAgY29uZmlnLmdlbmVyYXRlQXVkaXRFdmVudCgnYXN0LXNhdmVkLWNoYXQubG9hZCcsIHsgZHVyYXRpb246IHJlcy5leGVjdXRpb25UaW1lTWlsbGlzZWNvbmRzIH0sIGlkKTtcbiAgICAgICAgaWYgKCFyZXMuc2F2ZWRDaGF0KSB7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcih0aGlzLnRyYW5zbG9jby50cmFuc2xhdGUoJ3NhdmVkQ2hhdHMubG9hZEZhaWwnKSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbWFwKHJlcyA9PiByZXMuc2F2ZWRDaGF0KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yTXNnID0gJ0Vycm9yIG9jY3VycmVkIHdoaWxlIGNhbGxpbmcgdGhlIFNhdmVkQ2hhdEdldCBBUEk6ICcgKyBlcnJvci5lcnJvcj8uZXJyb3JNZXNzYWdlO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTYXZlZENoYXRzU2VydmljZTogJyArIGVycm9yTXNnKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZENoYXQoaWQ6IHN0cmluZywgbWVzc2FnZXM6IENoYXRNZXNzYWdlW10pOiBPYnNlcnZhYmxlPFNhdmVkQ2hhdFJlc3BvbnNlPiB7XG4gICAgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMub3BlcmF0aW9uQ29uZmlnITtcblxuICAgIGlmICghY29uZmlnLmlzU2F2ZWRDaGF0c0VuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKFwiT3BlcmF0aW9ucyBvbiBzYXZlZCBjaGF0cyBhcmUgZGlzYWJsZWRcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwiU2F2ZWRDaGF0QWRkXCIsXG4gICAgICBhcHBOYW1lOiBjb25maWcuZ2V0QXBwTmFtZSgpLFxuICAgICAgaW5zdGFuY2VJZDogY29uZmlnLmdldEluc3RhbmNlSWQoKSxcbiAgICAgIGNoYXRJZDogaWQsXG4gICAgICBoaXN0b3J5OiBtZXNzYWdlcyxcbiAgICAgIGRlYnVnOiBjb25maWcuZ2V0RGVidWdGbGFnKClcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZyb20ocG9zdDxTYXZlZENoYXRSZXNwb25zZT4oYGFwaS92MS9wbHVnaW4vJHtjb25maWcuZ2V0UmVzdFVybCgpfWAsIGRhdGEpKS5waXBlKFxuICAgICAgdGFwKHJlcyA9PiB7XG4gICAgICAgIGNvbmZpZy5nZW5lcmF0ZUF1ZGl0RXZlbnQoJ2FzdC1zYXZlZC1jaGF0LmFkZCcsIHsgZHVyYXRpb246IHJlcy5leGVjdXRpb25UaW1lTWlsbGlzZWNvbmRzIH0sIHJlcy5zYXZlZENoYXQuaWQpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBlcnJvck1zZyA9ICdFcnJvciBvY2N1cnJlZCB3aGlsZSBjYWxsaW5nIHRoZSBTYXZlZENoYXRBZGQgQVBJOiAnICsgZXJyb3IuZXJyb3I/LmVycm9yTWVzc2FnZTtcbiAgICAgICAgY29uc29sZS5lcnJvcignU2F2ZWRDaGF0c1NlcnZpY2U6ICcgKyBlcnJvck1zZyk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVDaGF0KGlkOiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIG1lc3NhZ2VzPzogQ2hhdE1lc3NhZ2VbXSk6IE9ic2VydmFibGU8U2F2ZWRDaGF0UmVzcG9uc2U+IHtcbiAgICB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5vcGVyYXRpb25Db25maWchO1xuXG4gICAgaWYgKCFjb25maWcuaXNTYXZlZENoYXRzRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoXCJPcGVyYXRpb25zIG9uIHNhdmVkIGNoYXRzIGFyZSBkaXNhYmxlZFwiKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YTogYW55ID0ge1xuICAgICAgYWN0aW9uOiBcIlNhdmVkQ2hhdFVwZGF0ZVwiLFxuICAgICAgYXBwTmFtZTogY29uZmlnLmdldEFwcE5hbWUoKSxcbiAgICAgIGluc3RhbmNlSWQ6IGNvbmZpZy5nZXRJbnN0YW5jZUlkKCksXG4gICAgICBjaGF0SWQ6IGlkLFxuICAgICAgZGVidWc6IGNvbmZpZy5nZXREZWJ1Z0ZsYWcoKVxuICAgIH07XG5cbiAgICBpZiAobmFtZSkgZGF0YVtcInRpdGxlXCJdID0gbmFtZTtcbiAgICBpZiAobWVzc2FnZXMpIGRhdGFbXCJoaXN0b3J5XCJdID0gbWVzc2FnZXM7XG5cbiAgICByZXR1cm4gZnJvbShwb3N0PFNhdmVkQ2hhdFJlc3BvbnNlPihgYXBpL3YxL3BsdWdpbi8ke2NvbmZpZy5nZXRSZXN0VXJsKCl9YCwgZGF0YSkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBlcnJvck1zZyA9ICdFcnJvciBvY2N1cnJlZCB3aGlsZSBjYWxsaW5nIHRoZSBTYXZlZENoYXRVcGRhdGUgQVBJOiAnICsgZXJyb3IuZXJyb3I/LmVycm9yTWVzc2FnZTtcbiAgICAgICAgY29uc29sZS5lcnJvcignU2F2ZWRDaGF0c1NlcnZpY2U6ICcgKyBlcnJvck1zZyk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVDaGF0KGlkczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPERlbGV0ZVNhdmVkQ2hhdFJlc3BvbnNlPiB7XG4gICAgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMub3BlcmF0aW9uQ29uZmlnITtcblxuICAgIGlmICghY29uZmlnLmlzU2F2ZWRDaGF0c0VuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKFwiT3BlcmF0aW9ucyBvbiBzYXZlZCBjaGF0cyBhcmUgZGlzYWJsZWRcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwiU2F2ZWRDaGF0RGVsZXRlXCIsXG4gICAgICBhcHBOYW1lOiBjb25maWcuZ2V0QXBwTmFtZSgpLFxuICAgICAgaW5zdGFuY2VJZDogY29uZmlnLmdldEluc3RhbmNlSWQoKSxcbiAgICAgIGNoYXRJZHM6IGlkcyxcbiAgICAgIGRlYnVnOiBjb25maWcuZ2V0RGVidWdGbGFnKClcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZyb20ocG9zdDxEZWxldGVTYXZlZENoYXRSZXNwb25zZT4oYGFwaS92MS9wbHVnaW4vJHtjb25maWcuZ2V0UmVzdFVybCgpfWAsIGRhdGEpKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGlzRXhpc3RpbmdDaGF0KGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5vcGVyYXRpb25Db25maWchO1xuXG4gICAgaWYgKCFjb25maWcuaXNTYXZlZENoYXRzRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoXCJPcGVyYXRpb25zIG9uIHNhdmVkIGNoYXRzIGFyZSBkaXNhYmxlZFwiKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJTYXZlZENoYXRFeGlzdFwiLFxuICAgICAgYXBwTmFtZTogY29uZmlnLmdldEFwcE5hbWUoKSxcbiAgICAgIGluc3RhbmNlSWQ6IGNvbmZpZy5nZXRJbnN0YW5jZUlkKCksXG4gICAgICBjaGF0SWQ6IGlkLFxuICAgICAgZGVidWc6IGNvbmZpZy5nZXREZWJ1Z0ZsYWcoKVxuICAgIH07XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhPYmplY3QuZW50cmllcyhkYXRhKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pKTtcblxuICAgIHJldHVybiBmcm9tKFxuICAgICAgZ2V0PHsgZXhpc3RzOiBib29sZWFuLCBleGVjdXRpb25UaW1lOiBzdHJpbmcsIGV4ZWN1dGlvblRpbWVNaWxsaXNlY29uZHM6IG51bWJlciB9PihgYXBpL3YxL3BsdWdpbi8ke2NvbmZpZy5nZXRSZXN0VXJsKCl9YCwgc2VhcmNoUGFyYW1zKVxuICAgICAgICAudGhlbihyZXMgPT4gcmVzLmV4aXN0cylcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gJ0Vycm9yIG9jY3VycmVkIHdoaWxlIGNhbGxpbmcgdGhlIFNhdmVkQ2hhdEV4aXN0IEFQSTogJyArIGVycm9yLmVycm9yPy5lcnJvck1lc3NhZ2U7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignU2F2ZWRDaGF0c1NlcnZpY2U6ICcgKyBlcnJvck1zZyk7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -7,7 +7,12 @@ export class AppService {
7
7
  }
8
8
  async init() {
9
9
  if (!this.app) {
10
- this.app = await fetchApp();
10
+ try {
11
+ this.app = await fetchApp();
12
+ }
13
+ catch (error) {
14
+ console.error('Error fetching app:', error);
15
+ }
11
16
  }
12
17
  }
13
18
  get appName() {
@@ -22,4 +27,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
22
27
  providedIn: 'root'
23
28
  }]
24
29
  }] });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9zZXJ2aWNlcy9hcHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLbEQsTUFBTSxPQUFPLFVBQVU7SUFIdkI7UUFJRSxRQUFHLEdBQXNCLFNBQVMsQ0FBQztLQVdwQztJQVRDLEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxRQUFRLEVBQUUsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO0lBQy9CLENBQUM7K0dBWFUsVUFBVTttSEFBVixVQUFVLGNBRlQsTUFBTTs7NEZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ0NBcHAsIGZldGNoQXBwIH0gZnJvbSBcIkBzaW5lcXVhL2F0b21pY1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwU2VydmljZSB7XHJcbiAgYXBwOiBDQ0FwcCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5hcHApIHtcclxuICAgICAgdGhpcy5hcHAgPSBhd2FpdCBmZXRjaEFwcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFwcE5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcz8uYXBwPy5uYW1lIHx8IFwiXCI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9zZXJ2aWNlcy9hcHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLbEQsTUFBTSxPQUFPLFVBQVU7SUFIdkI7UUFJRSxRQUFHLEdBQXNCLFNBQVMsQ0FBQztLQWVwQztJQWJDLEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sUUFBUSxFQUFFLENBQUM7WUFDOUIsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDOytHQWZVLFVBQVU7bUhBQVYsVUFBVSxjQUZULE1BQU07OzRGQUVQLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENDQXBwLCBmZXRjaEFwcCB9IGZyb20gXCJAc2luZXF1YS9hdG9taWNcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwcFNlcnZpY2Uge1xyXG4gIGFwcDogQ0NBcHAgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuYXBwKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5hcHAgPSBhd2FpdCBmZXRjaEFwcCgpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGFwcDonLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhcHBOYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXM/LmFwcD8ubmFtZSB8fCBcIlwiO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,9 +1,13 @@
1
- import { Injectable } from '@angular/core';
2
- import { throwError, from } from 'rxjs';
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { get, getToken, globalConfig } from '@sinequa/atomic';
3
+ import { from, throwError } from 'rxjs';
3
4
  import { catchError, map, tap } from 'rxjs/operators';
4
- import { get } from '@sinequa/atomic';
5
+ import { HttpClient, HttpHeaders } from '@angular/common/http';
5
6
  import * as i0 from "@angular/core";
6
7
  export class AssistantMetadataService {
8
+ constructor() {
9
+ this.http = inject(HttpClient);
10
+ }
7
11
  init(context) {
8
12
  this.context = context;
9
13
  }
@@ -51,13 +55,40 @@ export class AssistantMetadataService {
51
55
  return throwError(() => error);
52
56
  }));
53
57
  }
58
+ getPluginVersion() {
59
+ this.ensureInitialized();
60
+ const context = this.context;
61
+ const assistantConfig = context.getAssistantConfigValue();
62
+ const data = {
63
+ action: "pluginversion",
64
+ debug: assistantConfig.defaultValues.debug.toString()
65
+ };
66
+ const searchParams = new URLSearchParams(Object.entries(data).reduce((acc, [key, value]) => {
67
+ acc[key] = typeof value === 'string' ? value : JSON.stringify(value);
68
+ return acc;
69
+ }, {}));
70
+ return from(get(`api/v1/plugin/${context.getRestUrl()}`, searchParams))
71
+ .pipe(catchError((error) => {
72
+ console.error('Error invoking pluginversion:', error);
73
+ return throwError(() => error);
74
+ }));
75
+ }
76
+ getSinequaESVersion() {
77
+ const url = `${globalConfig.backendUrl}/api/v2/version`;
78
+ let headers = new HttpHeaders({ 'Accept': 'application/json' });
79
+ const token = getToken();
80
+ if (token) {
81
+ headers = headers.append('sinequa-csrf-token', token);
82
+ }
83
+ return this.http.get(url, { headers }).pipe(map(response => response?.serverVersion), catchError((error) => {
84
+ console.error('Error fetching Sinequa ES version:', error);
85
+ return throwError(() => error);
86
+ }));
87
+ }
54
88
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantMetadataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
55
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantMetadataService, providedIn: 'root' }); }
89
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantMetadataService }); }
56
90
  }
57
91
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantMetadataService, decorators: [{
58
- type: Injectable,
59
- args: [{
60
- providedIn: 'root'
61
- }]
92
+ type: Injectable
62
93
  }] });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaXN0YW50LW1ldGFkYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9zZXJ2aWNlcy9hc3Npc3RhbnQtbWV0YWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFjdEMsTUFBTSxPQUFPLHdCQUF3QjtJQUc1QixJQUFJLENBQUMsT0FBMEM7UUFDcEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztRQUNsRixDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBUSxDQUFDO1FBQzlCLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBRTFELE1BQU0sSUFBSSxHQUFHO1lBQ1gsTUFBTSxFQUFFLFlBQVk7WUFDcEIsS0FBSyxFQUFFLGVBQWdCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7U0FDdkQsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMs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VSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDOytHQWpFVSx3QkFBd0I7bUhBQXhCLHdCQUF3QixjQUZ2QixNQUFNOzs0RkFFUCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdAc2luZXF1YS9hdG9taWMnO1xuXG5pbXBvcnQgeyBDaGF0Q29uZmlnLCBHbGxtTW9kZWxEZXNjcmlwdGlvbiwgR2xsbUZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2lzdGFudE1ldGFkYXRhT3BlcmF0aW9uQ29udGV4dCB7XG4gIGdldFJlc3RVcmw6ICgpID0+IHN0cmluZztcbiAgZ2V0QXNzaXN0YW50Q29uZmlnVmFsdWU6ICgpID0+IENoYXRDb25maWcgfCB1bmRlZmluZWQ7XG4gIHNldE1vZGVsczogKG1vZGVsczogR2xsbU1vZGVsRGVzY3JpcHRpb25bXSB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbiAgc2V0RnVuY3Rpb25zOiAoZnVuY3Rpb25zOiBHbGxtRnVuY3Rpb25bXSB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb250ZXh0OiBBc3Npc3RhbnRNZXRhZGF0YU9wZXJhdGlvbkNvbnRleHQgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGluaXQoY29udGV4dDogQXNzaXN0YW50TWV0YWRhdGFPcGVyYXRpb25Db250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlSW5pdGlhbGl6ZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlIG5vdCBpbml0aWFsaXplZC4gQ2FsbCBpbml0KCkgZmlyc3QuJyk7XG4gICAgfVxuICB9XG5cbiAgbGlzdE1vZGVscygpOiBPYnNlcnZhYmxlPEdsbG1Nb2RlbERlc2NyaXB0aW9uW10gfCB1bmRlZmluZWQ+IHtcbiAgICB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dCE7XG4gICAgY29uc3QgYXNzaXN0YW50Q29uZmlnID0gY29udGV4dC5nZXRBc3Npc3RhbnRDb25maWdWYWx1ZSgpO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJsaXN0bW9kZWxzXCIsXG4gICAgICBkZWJ1ZzogYXNzaXN0YW50Q29uZmlnIS5kZWZhdWx0VmFsdWVzLmRlYnVnLnRvU3RyaW5nKClcbiAgICB9O1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pKTtcblxuICAgIHJldHVybiBmcm9tKGdldDx7IG1vZGVsczogR2xsbU1vZGVsRGVzY3JpcHRpb25bXSB8IHVuZGVmaW5lZCB9PihgYXBpL3YxL3BsdWdpbi8ke2NvbnRleHQuZ2V0UmVzdFVybCgpfWAsIHNlYXJjaFBhcmFtcykpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXM/Lm1vZGVscyksXG4gICAgICAgIHRhcChtb2RlbHMgPT4gY29udGV4dC5zZXRNb2RlbHMobW9kZWxzPy5maWx0ZXIobW9kZWwgPT4gISFtb2RlbC5lbmFibGUpKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW52b2tpbmcgbGlzdG1vZGVsczonLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGxpc3RGdW5jdGlvbnMoKTogT2JzZXJ2YWJsZTxHbGxtRnVuY3Rpb25bXSB8IHVuZGVmaW5lZD4ge1xuICAgIHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0ITtcbiAgICBjb25zdCBhc3Npc3RhbnRDb25maWcgPSBjb250ZXh0LmdldEFzc2lzdGFudENvbmZpZ1ZhbHVlKCk7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImxpc3RmdW5jdGlvbnNcIixcbiAgICAgIGRlYnVnOiBhc3Npc3RhbnRDb25maWchLmRlZmF1bHRWYWx1ZXMuZGVidWcudG9TdHJpbmcoKVxuICAgIH07XG5cbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKE9iamVjdC5lbnRyaWVzKGRhdGEpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSk7XG5cbiAgICByZXR1cm4gZnJvbShnZXQ8eyBmdW5jdGlvbnM6IEdsbG1GdW5jdGlvbltdIHwgdW5kZWZpbmVkIH0+KGBhcGkvdjEvcGx1Z2luLyR7Y29udGV4dC5nZXRSZXN0VXJsKCl9YCwgc2VhcmNoUGFyYW1zKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHJlcz8uZnVuY3Rpb25zKSxcbiAgICAgICAgdGFwKChmdW5jdGlvbnM6IEdsbG1GdW5jdGlvbltdIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbmFibGVkQ29uZmlnRnVuY3Rpb25zID0gYXNzaXN0YW50Q29uZmlnIS5kZWZhdWx0VmFsdWVzLmZ1bmN0aW9ucztcbiAgICAgICAgICAgIGNvbnRleHQuc2V0RnVuY3Rpb25zKGZ1bmN0aW9ucz8uZmlsdGVyKGZ1bmMgPT4gZnVuYy5lbmFibGVkICYmICEhZW5hYmxlZENvbmZpZ0Z1bmN0aW9ucy5maW5kKGZuID0+IGZuLm5hbWUgPT09IGZ1bmMuZnVuY3Rpb25OYW1lKSkpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbnZva2luZyBsaXN0ZnVuY3Rpb25zOicsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaXN0YW50LW1ldGFkYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9zZXJ2aWNlcy9hc3Npc3RhbnQtbWV0YWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsSUFBSSxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQVcvRCxNQUFNLE9BQU8sd0JBQXdCO0lBRHJDO1FBSVMsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQXdHbEM7SUF0R1EsSUFBSSxDQUFDLE9BQTBDO1FBQ3BELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFDbEYsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQztRQUM5QixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUUxRCxNQUFNLElBQUksR0FBRztZQUNYLE1BQU0sRUFBRSxZQUFZO1lB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Q0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsTUFBTSxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsVUFBVSxpQkFBaUIsQ0FBQztRQUN4RCxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDaEUsTUFBTSxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF3QyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDaEYsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxFQUN4QyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOytHQTFHVSx3QkFBd0I7bUhBQXhCLHdCQUF3Qjs7NEZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0LCBnZXRUb2tlbiwgZ2xvYmFsQ29uZmlnIH0gZnJvbSAnQHNpbmVxdWEvYXRvbWljJztcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENoYXRDb25maWcsIEdsbG1GdW5jdGlvbiwgR2xsbU1vZGVsRGVzY3JpcHRpb24sIFBsdWdpblZlcnNpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXNzaXN0YW50TWV0YWRhdGFPcGVyYXRpb25Db250ZXh0IHtcbiAgZ2V0UmVzdFVybDogKCkgPT4gc3RyaW5nO1xuICBnZXRBc3Npc3RhbnRDb25maWdWYWx1ZTogKCkgPT4gQ2hhdENvbmZpZyB8IHVuZGVmaW5lZDtcbiAgc2V0TW9kZWxzOiAobW9kZWxzOiBHbGxtTW9kZWxEZXNjcmlwdGlvbltdIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICBzZXRGdW5jdGlvbnM6IChmdW5jdGlvbnM6IEdsbG1GdW5jdGlvbltdIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb250ZXh0OiBBc3Npc3RhbnRNZXRhZGF0YU9wZXJhdGlvbkNvbnRleHQgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG5cbiAgcHVibGljIGluaXQoY29udGV4dDogQXNzaXN0YW50TWV0YWRhdGFPcGVyYXRpb25Db250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlSW5pdGlhbGl6ZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlIG5vdCBpbml0aWFsaXplZC4gQ2FsbCBpbml0KCkgZmlyc3QuJyk7XG4gICAgfVxuICB9XG5cbiAgbGlzdE1vZGVscygpOiBPYnNlcnZhYmxlPEdsbG1Nb2RlbERlc2NyaXB0aW9uW10gfCB1bmRlZmluZWQ+IHtcbiAgICB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dCE7XG4gICAgY29uc3QgYXNzaXN0YW50Q29uZmlnID0gY29udGV4dC5nZXRBc3Npc3RhbnRDb25maWdWYWx1ZSgpO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJsaXN0bW9kZWxzXCIsXG4gICAgICBkZWJ1ZzogYXNzaXN0YW50Q29uZmlnIS5kZWZhdWx0VmFsdWVzLmRlYnVnLnRvU3RyaW5nKClcbiAgICB9O1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pKTtcblxuICAgIHJldHVybiBmcm9tKGdldDx7IG1vZGVsczogR2xsbU1vZGVsRGVzY3JpcHRpb25bXSB8IHVuZGVmaW5lZCB9PihgYXBpL3YxL3BsdWdpbi8ke2NvbnRleHQuZ2V0UmVzdFVybCgpfWAsIHNlYXJjaFBhcmFtcykpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXM/Lm1vZGVscyksXG4gICAgICAgIHRhcChtb2RlbHMgPT4gY29udGV4dC5zZXRNb2RlbHMobW9kZWxzPy5maWx0ZXIobW9kZWwgPT4gISFtb2RlbC5lbmFibGUpKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW52b2tpbmcgbGlzdG1vZGVsczonLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGxpc3RGdW5jdGlvbnMoKTogT2JzZXJ2YWJsZTxHbGxtRnVuY3Rpb25bXSB8IHVuZGVmaW5lZD4ge1xuICAgIHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0ITtcbiAgICBjb25zdCBhc3Npc3RhbnRDb25maWcgPSBjb250ZXh0LmdldEFzc2lzdGFudENvbmZpZ1ZhbHVlKCk7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImxpc3RmdW5jdGlvbnNcIixcbiAgICAgIGRlYnVnOiBhc3Npc3RhbnRDb25maWchLmRlZmF1bHRWYWx1ZXMuZGVidWcudG9TdHJpbmcoKVxuICAgIH07XG5cbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKE9iamVjdC5lbnRyaWVzKGRhdGEpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSk7XG5cbiAgICByZXR1cm4gZnJvbShnZXQ8eyBmdW5jdGlvbnM6IEdsbG1GdW5jdGlvbltdIHwgdW5kZWZpbmVkIH0+KGBhcGkvdjEvcGx1Z2luLyR7Y29udGV4dC5nZXRSZXN0VXJsKCl9YCwgc2VhcmNoUGFyYW1zKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHJlcz8uZnVuY3Rpb25zKSxcbiAgICAgICAgdGFwKChmdW5jdGlvbnM6IEdsbG1GdW5jdGlvbltdIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZW5hYmxlZENvbmZpZ0Z1bmN0aW9ucyA9IGFzc2lzdGFudENvbmZpZyEuZGVmYXVsdFZhbHVlcy5mdW5jdGlvbnM7XG4gICAgICAgICAgY29udGV4dC5zZXRGdW5jdGlvbnMoZnVuY3Rpb25zPy5maWx0ZXIoZnVuYyA9PiBmdW5jLmVuYWJsZWQgJiYgISFlbmFibGVkQ29uZmlnRnVuY3Rpb25zLmZpbmQoZm4gPT4gZm4ubmFtZSA9PT0gZnVuYy5mdW5jdGlvbk5hbWUpKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGludm9raW5nIGxpc3RmdW5jdGlvbnM6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBnZXRQbHVnaW5WZXJzaW9uKCk6IE9ic2VydmFibGU8UGx1Z2luVmVyc2lvbiB8IHVuZGVmaW5lZD4ge1xuICAgIHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0ITtcbiAgICBjb25zdCBhc3Npc3RhbnRDb25maWcgPSBjb250ZXh0LmdldEFzc2lzdGFudENvbmZpZ1ZhbHVlKCk7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcInBsdWdpbnZlcnNpb25cIixcbiAgICAgIGRlYnVnOiBhc3Npc3RhbnRDb25maWchLmRlZmF1bHRWYWx1ZXMuZGVidWcudG9TdHJpbmcoKVxuICAgIH07XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhPYmplY3QuZW50cmllcyhkYXRhKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPikpO1xuXG4gICAgcmV0dXJuIGZyb20oZ2V0PFBsdWdpblZlcnNpb24gfCB1bmRlZmluZWQ+KGBhcGkvdjEvcGx1Z2luLyR7Y29udGV4dC5nZXRSZXN0VXJsKCl9YCwgc2VhcmNoUGFyYW1zKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGludm9raW5nIHBsdWdpbnZlcnNpb246JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBnZXRTaW5lcXVhRVNWZXJzaW9uKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgdXJsID0gYCR7Z2xvYmFsQ29uZmlnLmJhY2tlbmRVcmx9L2FwaS92Mi92ZXJzaW9uYDtcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7ICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicgfSk7XG4gICAgY29uc3QgdG9rZW4gPSBnZXRUb2tlbigpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuYXBwZW5kKCdzaW5lcXVhLWNzcmYtdG9rZW4nLCB0b2tlbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHsgc2VydmVyVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkIH0+KHVybCwgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICBtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2U/LnNlcnZlclZlcnNpb24pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgU2luZXF1YSBFUyB2ZXJzaW9uOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=