@sinequa/assistant 3.9.1 → 3.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/chat/chat.component.d.ts +35 -38
- package/chat/chat.service.d.ts +192 -84
- package/chat/debug-message/debug-message-details/debug-message-details.component.d.ts +19 -0
- package/chat/debug-message/debug-message.component.d.ts +9 -12
- package/chat/debug-message/debug-message.service.d.ts +15 -0
- package/chat/documents-upload/document-list/document-list.component.d.ts +1 -0
- package/chat/public-api.d.ts +0 -2
- package/chat/saved-chats/i18n/en.json +2 -1
- package/chat/saved-chats/i18n/fr.json +2 -1
- package/chat/saved-chats/saved-chats.component.d.ts +1 -0
- package/chat/saved-chats/saved-chats.service.d.ts +27 -0
- package/chat/services/assistant-configuration.service.d.ts +34 -0
- package/chat/services/assistant-metadata.service.d.ts +18 -0
- package/chat/services/assistant-tokens-tracking.service.d.ts +23 -0
- package/chat/services/assistant-ws-frames.service.d.ts +50 -0
- package/chat/services/signalR-connection.service.d.ts +25 -0
- package/chat/services/signalR.web.service.d.ts +1 -0
- package/chat/types.d.ts +24 -3
- package/chat/utils/utils.service.d.ts +67 -0
- package/esm2022/chat/chat-message/chat-message.component.mjs +3 -3
- package/esm2022/chat/chat.component.mjs +199 -225
- package/esm2022/chat/chat.service.mjs +452 -267
- package/esm2022/chat/debug-message/debug-message-details/debug-message-details.component.mjs +43 -0
- package/esm2022/chat/debug-message/debug-message.component.mjs +27 -30
- package/esm2022/chat/debug-message/debug-message.service.mjs +52 -0
- package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +6 -5
- package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +4 -2
- package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +3 -3
- package/esm2022/chat/pipes/message-content.pipe.mjs +5 -2
- package/esm2022/chat/public-api.mjs +1 -3
- package/esm2022/chat/saved-chats/saved-chats.component.mjs +11 -10
- package/esm2022/chat/saved-chats/saved-chats.service.mjs +165 -0
- package/esm2022/chat/services/assistant-configuration.service.mjs +171 -0
- package/esm2022/chat/services/assistant-metadata.service.mjs +67 -0
- package/esm2022/chat/services/assistant-tokens-tracking.service.mjs +57 -0
- package/esm2022/chat/services/assistant-ws-frames.service.mjs +392 -0
- package/esm2022/chat/services/signalR-connection.service.mjs +109 -0
- package/esm2022/chat/services/signalR.web.service.mjs +1 -1
- package/esm2022/chat/types.mjs +2 -1
- package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +2 -3
- package/esm2022/chat/utils/utils.service.mjs +170 -0
- package/fesm2022/sinequa-assistant-chat.mjs +2037 -1647
- package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
- package/package.json +1 -1
- package/chat/rest-chat.service.d.ts +0 -31
- package/chat/websocket-chat.service.d.ts +0 -102
- package/esm2022/chat/rest-chat.service.mjs +0 -296
- package/esm2022/chat/websocket-chat.service.mjs +0 -654
|
@@ -240,11 +240,11 @@ export class DocumentUploadComponent {
|
|
|
240
240
|
return completed / total;
|
|
241
241
|
}
|
|
242
242
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
243
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentUploadComponent, isStandalone: true, selector: "sq-document-upload", inputs: { instanceId: "instanceId", pollingInterval: "pollingInterval" }, providers: [DocumentsUploadService, provideTranslocoScope('chat-documents-upload')], viewQueries: [{ propertyName: "flow", first: true, predicate: ["flow"], descendants: true, static: true }], ngImport: i0, template: "<ng-container #flow=\"flow\" [flowConfig]=\"flowConfig\"></ng-container>\n<div class=\"file-upload-container\">\n <input\n type=\"file\"\n flowButton\n [flow]=\"flow.flowJs\"\n multiple\n hidden\n #fileInput>\n <div\n flowDrop\n [flow]=\"flow.flowJs\"\n (dragenter)=\"onDragenter()\"\n (dragleave)=\"onDragleave($event)\"\n (drop)=\"onDrop()\"\n (click)=\"fileInput.click()\"\n class=\"dropzone\"\n [ngClass]=\"{'dropzone--active': (dragging$ | async)}\"\n [hidden]=\"(uploading$ | async) || (indexing$ | async)\">\n <ng-container *ngIf=\"!(dragging$ | async); else draggingContent\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n <span>{{ 'chatDocumentsUpload.dragAndDrop' | transloco }}</span>\n <span class=\"text-orange\">{{ 'chatDocumentsUpload.clickToBrowse' | transloco }}</span>\n </ng-container>\n <ng-template #draggingContent>\n <span>{{ 'chatDocumentsUpload.dropFiles' | transloco }}</span>\n </ng-template>\n </div>\n\n <div *ngIf=\"(uploading$ | async) || (indexing$ | async)\" class=\"dropzone dropzone--active\">\n <ng-container *ngIf=\"(uploading$ | async); else indexingState\">\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <span>\n {{ 'chatDocumentsUpload.uploadingFiles' | transloco: { count: (flow.transfers$ | async)!.transfers.length } }}\n </span>\n <span *ngIf=\"(uploadingInfos$ | async) as uploadingInfos\">{{ uploadingInfos.progress | number:'1.0-0' }}%</span>\n </ng-container>\n <ng-template #indexingState>\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <ng-container *ngIf=\"indexingInfos$ | async as indexingInfo\">\n <span>\n {{ 'chatDocumentsUpload.indexingFiles' | transloco: { count: indexingInfo.docs.length } }}\n </span>\n <span>{{ getIndexingProgress(indexingInfo) * 100 | number:'1.0-0' }}%</span>\n </ng-container>\n </ng-template>\n </div>\n\n <ul *ngIf=\"errorAlerts.length > 0\" class=\"error-list mt-3\">\n <li *ngFor=\"let error of errorAlerts\">\n {{ error }}\n </li>\n </ul>\n\n <div *ngIf=\"((flow.transfers$ | async)?.transfers?.length > 0) && !(uploading$ | async)\" class=\"file-list mt-3\">\n <ul>\n <li *ngFor=\"let transfer of (flow.transfers$ | async)!.transfers; trackBy: trackTransfer\">\n <sq-format-icon [extension]=\"transfer.flowFile.getExtension()\" class=\"me-1\"></sq-format-icon>\n <span [title]=\"transfer.name\">{{ transfer.name }}</span>\n <i class=\"fas fa-trash ms-1\" (click)=\"flow.cancelFile(transfer)\" [title]=\"'chatDocumentsUpload.cancel' | transloco\"></i>\n </li>\n </ul>\n </div>\n\n <div class=\"d-flex mt-2\">\n <button\n type=\"button\"\n class=\"btn btn-light cancel-btn me-2\"\n (click)=\"flow.cancel()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.cancel' | transloco }}\n </button>\n <button\n type=\"button\"\n class=\"upload-btn\"\n (click)=\"upload()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.upload' | transloco }}\n </button>\n </div>\n</div>\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}@keyframes dash-move{0%{background-position:0 0}to{background-position:100% 0}}.file-upload-container{width:100%;position:relative;padding:20px;background-color
|
|
243
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentUploadComponent, isStandalone: true, selector: "sq-document-upload", inputs: { instanceId: "instanceId", pollingInterval: "pollingInterval" }, providers: [DocumentsUploadService, provideTranslocoScope('chat-documents-upload')], viewQueries: [{ propertyName: "flow", first: true, predicate: ["flow"], descendants: true, static: true }], ngImport: i0, template: "<ng-container #flow=\"flow\" [flowConfig]=\"flowConfig\"></ng-container>\n<div class=\"file-upload-container\">\n <input\n type=\"file\"\n flowButton\n [flow]=\"flow.flowJs\"\n multiple\n hidden\n #fileInput>\n <div\n flowDrop\n [flow]=\"flow.flowJs\"\n (dragenter)=\"onDragenter()\"\n (dragleave)=\"onDragleave($event)\"\n (drop)=\"onDrop()\"\n (click)=\"fileInput.click()\"\n class=\"dropzone\"\n [ngClass]=\"{'dropzone--active': (dragging$ | async)}\"\n [hidden]=\"(uploading$ | async) || (indexing$ | async)\">\n <ng-container *ngIf=\"!(dragging$ | async); else draggingContent\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n <span>{{ 'chatDocumentsUpload.dragAndDrop' | transloco }}</span>\n <span class=\"text-orange\">{{ 'chatDocumentsUpload.clickToBrowse' | transloco }}</span>\n </ng-container>\n <ng-template #draggingContent>\n <span>{{ 'chatDocumentsUpload.dropFiles' | transloco }}</span>\n </ng-template>\n </div>\n\n <div *ngIf=\"(uploading$ | async) || (indexing$ | async)\" class=\"dropzone dropzone--active\">\n <ng-container *ngIf=\"(uploading$ | async); else indexingState\">\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <span>\n {{ 'chatDocumentsUpload.uploadingFiles' | transloco: { count: (flow.transfers$ | async)!.transfers.length } }}\n </span>\n <span *ngIf=\"(uploadingInfos$ | async) as uploadingInfos\">{{ uploadingInfos.progress | number:'1.0-0' }}%</span>\n </ng-container>\n <ng-template #indexingState>\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <ng-container *ngIf=\"indexingInfos$ | async as indexingInfo\">\n <span>\n {{ 'chatDocumentsUpload.indexingFiles' | transloco: { count: indexingInfo.docs.length } }}\n </span>\n <span>{{ getIndexingProgress(indexingInfo) * 100 | number:'1.0-0' }}%</span>\n </ng-container>\n </ng-template>\n </div>\n\n <ul *ngIf=\"errorAlerts.length > 0\" class=\"error-list mt-3\">\n <li *ngFor=\"let error of errorAlerts\">\n {{ error }}\n </li>\n </ul>\n\n <div *ngIf=\"((flow.transfers$ | async)?.transfers?.length > 0) && !(uploading$ | async)\" class=\"file-list mt-3\">\n <ul>\n <li *ngFor=\"let transfer of (flow.transfers$ | async)!.transfers; trackBy: trackTransfer\">\n <sq-format-icon [extension]=\"transfer.flowFile.getExtension()\" class=\"me-1\"></sq-format-icon>\n <span [title]=\"transfer.name\">{{ transfer.name }}</span>\n <i class=\"fas fa-trash ms-1\" (click)=\"flow.cancelFile(transfer)\" [title]=\"'chatDocumentsUpload.cancel' | transloco\"></i>\n </li>\n </ul>\n </div>\n\n <div class=\"d-flex mt-2\">\n <button\n type=\"button\"\n class=\"btn btn-light cancel-btn me-2\"\n (click)=\"flow.cancel()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.cancel' | transloco }}\n </button>\n <button\n type=\"button\"\n class=\"upload-btn\"\n (click)=\"upload()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.upload' | transloco }}\n </button>\n </div>\n</div>\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}@keyframes dash-move{0%{background-position:0 0}to{background-position:100% 0}}.file-upload-container{width:100%;position:relative;padding:20px;background-color:var(--ast-primary-bg, #f2f8fe)}.file-upload-container .dropzone{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100px;border:2px dashed var(--ast-primary-color, #005DA7);border-color:var(--ast-secondary-color, #FF732E) var(--ast-primary-color, #005DA7) var(--ast-primary-color, #005DA7) var(--ast-secondary-color, #FF732E);border-radius:5px;padding:10px;cursor:pointer;background-color:var(--ast-primary-bg, #f2f8fe);transition:background-color .3s ease;color:var(--ast-primary-color, #005DA7)}.file-upload-container .dropzone--active{background-color:var(--ast-secondary-bg, #FFF8F1);color:var(--ast-secondary-color, #FF732E);border-color:var(--ast-secondary-color, #FF732E)}.file-upload-container .dropzone i{font-size:x-large}.file-upload-container .dropzone span{margin:0;font-size:small}.file-upload-container .dropzone span.text-orange{color:var(--ast-secondary-color, #FF732E)}.file-upload-container .file-list h6{color:#a9a9a9}.file-upload-container .file-list ul{list-style-type:none;padding:0}.file-upload-container .file-list ul li{display:flex;align-items:center;padding:10px;background-color:var(--ast-primary-bg, #f2f8fe);margin-bottom:5px;border-radius:5px;font-size:small}.file-upload-container .file-list ul li span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.file-upload-container .file-list ul li i{cursor:pointer}.file-upload-container .file-list ul li i:hover{color:var(--ast-primary-color, #005DA7)}.file-upload-container .error-list{display:flex;flex-direction:column;list-style:disc;background:var(--ast-error-color, rgba(249, 58, 55, .7));color:#fff;border-radius:5px}.file-upload-container .error-list li{padding:3px}.file-upload-container .upload-btn{background:linear-gradient(to right,#1d4ed8,#ec4899,#f97316);color:#fff;border:none;padding:8px 16px;border-radius:5px;cursor:pointer;width:100%}.file-upload-container .upload-btn:hover{background:linear-gradient(to right,#1d4ed8cc,#ec4899cc,#f97316cc)}.file-upload-container .upload-btn[disabled]{opacity:.3;cursor:not-allowed}.file-upload-container .cancel-btn{cursor:pointer;pointer-events:unset;width:100%}.file-upload-container .cancel-btn[disabled]{opacity:.3;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: NgxFlowModule }, { kind: "directive", type: i2.ButtonDirective, selector: "[flowButton]", inputs: ["flowDirectoryOnly", "flowAttributes", "flow"] }, { kind: "directive", type: i2.DropDirective, selector: "[flowDrop]", inputs: ["flow"], exportAs: ["flowDrop"] }, { kind: "directive", type: i2.FlowDirective, selector: "[flowConfig]", inputs: ["flowConfig"], exportAs: ["flow"] }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
|
|
244
244
|
}
|
|
245
245
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentUploadComponent, decorators: [{
|
|
246
246
|
type: Component,
|
|
247
|
-
args: [{ selector: "sq-document-upload", standalone: true, providers: [DocumentsUploadService, provideTranslocoScope('chat-documents-upload')], imports: [CommonModule, NgxFlowModule, FormatIconComponent, TranslocoPipe], template: "<ng-container #flow=\"flow\" [flowConfig]=\"flowConfig\"></ng-container>\n<div class=\"file-upload-container\">\n <input\n type=\"file\"\n flowButton\n [flow]=\"flow.flowJs\"\n multiple\n hidden\n #fileInput>\n <div\n flowDrop\n [flow]=\"flow.flowJs\"\n (dragenter)=\"onDragenter()\"\n (dragleave)=\"onDragleave($event)\"\n (drop)=\"onDrop()\"\n (click)=\"fileInput.click()\"\n class=\"dropzone\"\n [ngClass]=\"{'dropzone--active': (dragging$ | async)}\"\n [hidden]=\"(uploading$ | async) || (indexing$ | async)\">\n <ng-container *ngIf=\"!(dragging$ | async); else draggingContent\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n <span>{{ 'chatDocumentsUpload.dragAndDrop' | transloco }}</span>\n <span class=\"text-orange\">{{ 'chatDocumentsUpload.clickToBrowse' | transloco }}</span>\n </ng-container>\n <ng-template #draggingContent>\n <span>{{ 'chatDocumentsUpload.dropFiles' | transloco }}</span>\n </ng-template>\n </div>\n\n <div *ngIf=\"(uploading$ | async) || (indexing$ | async)\" class=\"dropzone dropzone--active\">\n <ng-container *ngIf=\"(uploading$ | async); else indexingState\">\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <span>\n {{ 'chatDocumentsUpload.uploadingFiles' | transloco: { count: (flow.transfers$ | async)!.transfers.length } }}\n </span>\n <span *ngIf=\"(uploadingInfos$ | async) as uploadingInfos\">{{ uploadingInfos.progress | number:'1.0-0' }}%</span>\n </ng-container>\n <ng-template #indexingState>\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <ng-container *ngIf=\"indexingInfos$ | async as indexingInfo\">\n <span>\n {{ 'chatDocumentsUpload.indexingFiles' | transloco: { count: indexingInfo.docs.length } }}\n </span>\n <span>{{ getIndexingProgress(indexingInfo) * 100 | number:'1.0-0' }}%</span>\n </ng-container>\n </ng-template>\n </div>\n\n <ul *ngIf=\"errorAlerts.length > 0\" class=\"error-list mt-3\">\n <li *ngFor=\"let error of errorAlerts\">\n {{ error }}\n </li>\n </ul>\n\n <div *ngIf=\"((flow.transfers$ | async)?.transfers?.length > 0) && !(uploading$ | async)\" class=\"file-list mt-3\">\n <ul>\n <li *ngFor=\"let transfer of (flow.transfers$ | async)!.transfers; trackBy: trackTransfer\">\n <sq-format-icon [extension]=\"transfer.flowFile.getExtension()\" class=\"me-1\"></sq-format-icon>\n <span [title]=\"transfer.name\">{{ transfer.name }}</span>\n <i class=\"fas fa-trash ms-1\" (click)=\"flow.cancelFile(transfer)\" [title]=\"'chatDocumentsUpload.cancel' | transloco\"></i>\n </li>\n </ul>\n </div>\n\n <div class=\"d-flex mt-2\">\n <button\n type=\"button\"\n class=\"btn btn-light cancel-btn me-2\"\n (click)=\"flow.cancel()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.cancel' | transloco }}\n </button>\n <button\n type=\"button\"\n class=\"upload-btn\"\n (click)=\"upload()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.upload' | transloco }}\n </button>\n </div>\n</div>\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}@keyframes dash-move{0%{background-position:0 0}to{background-position:100% 0}}.file-upload-container{width:100%;position:relative;padding:20px;background-color
|
|
247
|
+
args: [{ selector: "sq-document-upload", standalone: true, providers: [DocumentsUploadService, provideTranslocoScope('chat-documents-upload')], imports: [CommonModule, NgxFlowModule, FormatIconComponent, TranslocoPipe], template: "<ng-container #flow=\"flow\" [flowConfig]=\"flowConfig\"></ng-container>\n<div class=\"file-upload-container\">\n <input\n type=\"file\"\n flowButton\n [flow]=\"flow.flowJs\"\n multiple\n hidden\n #fileInput>\n <div\n flowDrop\n [flow]=\"flow.flowJs\"\n (dragenter)=\"onDragenter()\"\n (dragleave)=\"onDragleave($event)\"\n (drop)=\"onDrop()\"\n (click)=\"fileInput.click()\"\n class=\"dropzone\"\n [ngClass]=\"{'dropzone--active': (dragging$ | async)}\"\n [hidden]=\"(uploading$ | async) || (indexing$ | async)\">\n <ng-container *ngIf=\"!(dragging$ | async); else draggingContent\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n <span>{{ 'chatDocumentsUpload.dragAndDrop' | transloco }}</span>\n <span class=\"text-orange\">{{ 'chatDocumentsUpload.clickToBrowse' | transloco }}</span>\n </ng-container>\n <ng-template #draggingContent>\n <span>{{ 'chatDocumentsUpload.dropFiles' | transloco }}</span>\n </ng-template>\n </div>\n\n <div *ngIf=\"(uploading$ | async) || (indexing$ | async)\" class=\"dropzone dropzone--active\">\n <ng-container *ngIf=\"(uploading$ | async); else indexingState\">\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <span>\n {{ 'chatDocumentsUpload.uploadingFiles' | transloco: { count: (flow.transfers$ | async)!.transfers.length } }}\n </span>\n <span *ngIf=\"(uploadingInfos$ | async) as uploadingInfos\">{{ uploadingInfos.progress | number:'1.0-0' }}%</span>\n </ng-container>\n <ng-template #indexingState>\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <ng-container *ngIf=\"indexingInfos$ | async as indexingInfo\">\n <span>\n {{ 'chatDocumentsUpload.indexingFiles' | transloco: { count: indexingInfo.docs.length } }}\n </span>\n <span>{{ getIndexingProgress(indexingInfo) * 100 | number:'1.0-0' }}%</span>\n </ng-container>\n </ng-template>\n </div>\n\n <ul *ngIf=\"errorAlerts.length > 0\" class=\"error-list mt-3\">\n <li *ngFor=\"let error of errorAlerts\">\n {{ error }}\n </li>\n </ul>\n\n <div *ngIf=\"((flow.transfers$ | async)?.transfers?.length > 0) && !(uploading$ | async)\" class=\"file-list mt-3\">\n <ul>\n <li *ngFor=\"let transfer of (flow.transfers$ | async)!.transfers; trackBy: trackTransfer\">\n <sq-format-icon [extension]=\"transfer.flowFile.getExtension()\" class=\"me-1\"></sq-format-icon>\n <span [title]=\"transfer.name\">{{ transfer.name }}</span>\n <i class=\"fas fa-trash ms-1\" (click)=\"flow.cancelFile(transfer)\" [title]=\"'chatDocumentsUpload.cancel' | transloco\"></i>\n </li>\n </ul>\n </div>\n\n <div class=\"d-flex mt-2\">\n <button\n type=\"button\"\n class=\"btn btn-light cancel-btn me-2\"\n (click)=\"flow.cancel()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.cancel' | transloco }}\n </button>\n <button\n type=\"button\"\n class=\"upload-btn\"\n (click)=\"upload()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.upload' | transloco }}\n </button>\n </div>\n</div>\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}@keyframes dash-move{0%{background-position:0 0}to{background-position:100% 0}}.file-upload-container{width:100%;position:relative;padding:20px;background-color:var(--ast-primary-bg, #f2f8fe)}.file-upload-container .dropzone{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100px;border:2px dashed var(--ast-primary-color, #005DA7);border-color:var(--ast-secondary-color, #FF732E) var(--ast-primary-color, #005DA7) var(--ast-primary-color, #005DA7) var(--ast-secondary-color, #FF732E);border-radius:5px;padding:10px;cursor:pointer;background-color:var(--ast-primary-bg, #f2f8fe);transition:background-color .3s ease;color:var(--ast-primary-color, #005DA7)}.file-upload-container .dropzone--active{background-color:var(--ast-secondary-bg, #FFF8F1);color:var(--ast-secondary-color, #FF732E);border-color:var(--ast-secondary-color, #FF732E)}.file-upload-container .dropzone i{font-size:x-large}.file-upload-container .dropzone span{margin:0;font-size:small}.file-upload-container .dropzone span.text-orange{color:var(--ast-secondary-color, #FF732E)}.file-upload-container .file-list h6{color:#a9a9a9}.file-upload-container .file-list ul{list-style-type:none;padding:0}.file-upload-container .file-list ul li{display:flex;align-items:center;padding:10px;background-color:var(--ast-primary-bg, #f2f8fe);margin-bottom:5px;border-radius:5px;font-size:small}.file-upload-container .file-list ul li span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.file-upload-container .file-list ul li i{cursor:pointer}.file-upload-container .file-list ul li i:hover{color:var(--ast-primary-color, #005DA7)}.file-upload-container .error-list{display:flex;flex-direction:column;list-style:disc;background:var(--ast-error-color, rgba(249, 58, 55, .7));color:#fff;border-radius:5px}.file-upload-container .error-list li{padding:3px}.file-upload-container .upload-btn{background:linear-gradient(to right,#1d4ed8,#ec4899,#f97316);color:#fff;border:none;padding:8px 16px;border-radius:5px;cursor:pointer;width:100%}.file-upload-container .upload-btn:hover{background:linear-gradient(to right,#1d4ed8cc,#ec4899cc,#f97316cc)}.file-upload-container .upload-btn[disabled]{opacity:.3;cursor:not-allowed}.file-upload-container .cancel-btn{cursor:pointer;pointer-events:unset;width:100%}.file-upload-container .cancel-btn[disabled]{opacity:.3;cursor:not-allowed}\n"] }]
|
|
248
248
|
}], propDecorators: { instanceId: [{
|
|
249
249
|
type: Input
|
|
250
250
|
}], pollingInterval: [{
|
|
@@ -253,4 +253,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
253
253
|
type: ViewChild,
|
|
254
254
|
args: ["flow", { static: true }]
|
|
255
255
|
}] } });
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L2RvY3VtZW50cy11cGxvYWQvZG9jdW1lbnQtdXBsb2FkL2RvY3VtZW50LXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LXVwbG9hZC9kb2N1bWVudC11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFHTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBMkIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNILFNBQVMsRUFDVCxFQUFFLEdBQ0gsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWxELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFN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SUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTmd4Rmxvd01vZHVsZSwgRmxvd0RpcmVjdGl2ZSwgVHJhbnNmZXIgfSBmcm9tIFwiQGZsb3dqcy9uZ3gtZmxvd1wiO1xuaW1wb3J0IHsgRmxvd0ZpbGUgfSBmcm9tIFwiZmxvd2pzXCI7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNhdGNoRXJyb3IsXG4gIEVNUFRZLFxuICBmaWx0ZXIsXG4gIGZpbmFsaXplLFxuICBpbnRlcnZhbCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VXaGlsZSxcbiAgdGFwLFxuICBzdGFydFdpdGgsXG4gIG9mLFxufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgcHJvdmlkZVRyYW5zbG9jb1Njb3BlLCBUcmFuc2xvY29QaXBlLCBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcblxuaW1wb3J0IHsgaXNBdXRoZW50aWNhdGVkIH0gZnJvbSBcIkBzaW5lcXVhL2F0b21pY1wiO1xuXG5pbXBvcnQgeyBJbnN0YW5jZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2luc3RhbmNlLW1hbmFnZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY2hhdC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEb2N1bWVudHNVcGxvYWRTZXJ2aWNlIH0gZnJvbSBcIi4uL2RvY3VtZW50cy11cGxvYWQuc2VydmljZVwiO1xuaW1wb3J0IHsgRm9ybWF0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Zvcm1hdC1pY29uL2Zvcm1hdC1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGF0Q29uZmlnIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBJbmRleGluZ0luZm9zLCBVcGxvYWRFdmVudCwgVXBsb2FkaW5nSW5mb3MgfSBmcm9tIFwiLi4vZG9jdW1lbnRzLXVwbG9hZC5tb2RlbFwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInNxLWRvY3VtZW50LXVwbG9hZFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2RvY3VtZW50LXVwbG9hZC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZG9jdW1lbnQtdXBsb2FkLmNvbXBvbmVudC5zY3NzXCJdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtEb2N1bWVudHNVcGxvYWRTZXJ2aWNlLCBwcm92aWRlVHJhbnNsb2NvU2NvcGUoJ2NoYXQtZG9jdW1lbnRzLXVwbG9hZCcpXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTmd4Rmxvd01vZHVsZSwgRm9ybWF0SWNvbkNvbXBvbmVudCwgVHJhbnNsb2NvUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBEZWZpbmUgdGhlIGtleSBiYXNlZCBvbiBpdCwgdGhlIGFwcHJvcHJpYXRlIGNoYXRTZXJ2aWNlIGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlICovXG4gIEBJbnB1dCgpIGluc3RhbmNlSWQ6IHN0cmluZztcbiAgLyoqIFBvbGxpbmcgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIHVwZGF0ZSB0aGUgaW5kZXhpbmcgc3RhdHVzIG9mIHRoZSB1cGxvYWRlZCBkb2N1bWVudHMgKi9cbiAgQElucHV0KCkgcG9sbGluZ0ludGVydmFsIDogbnVtYmVyID0gMTAwMDtcbiAgLy8gUmVmZXJlbmNlIHRvIHRoZSBmbG93IGRpcmVjdGl2ZVxuICBAVmlld0NoaWxkKFwiZmxvd1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSBmbG93ITogRmxvd0RpcmVjdGl2ZTtcblxuICBwdWJsaWMgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlO1xuICByZWFkb25seSBmbG93Q29uZmlnOiBmbG93anMuRmxvd09wdGlvbnMgPSB7XG4gICAgLy8gRGlzYWJsZXMgY2h1bmsgdGVzdGluZyBiZWZvcmUgdXBsb2FkaW5nIGFjdHVhbCBmaWxlIGRhdGEuIFRodXMsIGF2b2lkcyB1bm5lY2Vzc2FyeSByZXF1ZXN0cyBhbmQgc3BlZWRzIHVwIHVwbG9hZHNcbiAgICB0ZXN0Q2h1bmtzOiBmYWxzZSxcbiAgICAvLyBBbGxvd3MgbXVsdGlwbGUgZmlsZSB1cGxvYWRzIHNpbXVsdGFuZW91c2x5XG4gICAgc2luZ2xlRmlsZTogZmFsc2UsXG4gICAgLy8gQWxsb3dzIHRoZSBzYW1lIGZpbGUgdG8gYmUgdXBsb2FkZWQgbXVsdGlwbGUgdGltZXNcbiAgICBhbGxvd0R1cGxpY2F0ZVVwbG9hZHM6IHRydWUsXG4gICAgcXVlcnk6ICgpID0+IHtcbiAgICAgIHJldHVybiB7fTsgLy8gRW1wdHkgb2JqZWN0IHRvIHByZXZlbnQgcXVlcnkgcGFyYW1ldGVyc1xuICAgIH0sXG4gICAgcHJlcHJvY2VzczogKGNodW5rKSA9PiBjaHVuay5hYm9ydCgpIC8vIFByZXZlbnRzIHRoZSBkZWZhdWx0IGZsb3cgdXBsb2FkIG9mIGNodW5rc1xuICB9O1xuICBwdWJsaWMgZXJyb3JBbGVydHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBkcmFnZ2luZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGluZGV4aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgaW5kZXhpbmdJbmZvcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEluZGV4aW5nSW5mb3MgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyB1cGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyB1cGxvYWRpbmdJbmZvcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVwbG9hZGluZ0luZm9zIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwdWJsaWMgaW5zdGFuY2VNYW5hZ2VyU2VydmljZSA9IGluamVjdChJbnN0YW5jZU1hbmFnZXJTZXJ2aWNlKTtcbiAgcHVibGljIGRvY3VtZW50c1VwbG9hZFNlcnZpY2UgPSBpbmplY3QoRG9jdW1lbnRzVXBsb2FkU2VydmljZSk7XG4gIHB1YmxpYyBub3RpZmljYXRpb25zU2VydmljZSA9IGluamVjdChOb3RpZmljYXRpb25zU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsb2NvID0gaW5qZWN0KFRyYW5zbG9jb1NlcnZpY2UpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBvZihpc0F1dGhlbnRpY2F0ZWQoKSkucGlwZShcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuaW5zdGFudGlhdGVDaGF0U2VydmljZSgpKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHRoaXMuY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJCksXG4gICAgICAgICAgZmlsdGVyKChjb25maWc6IENoYXRDb25maWcgfCB1bmRlZmluZWQpID0+ICEhY29uZmlnKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS5pbml0KHRoaXMuY2hhdFNlcnZpY2UpKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5mbG93LmV2ZW50cyQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBldnQgPSBldmVudCBhcyBhbnk7XG4gICAgICAgIC8vIEtlcHQgaXQganVzdCBmb3IgcmVmZXJlbmNlIHRvIHNob3cgaG93IHRvIGFjY2VzcyBkYXRhIG9mIGRpZmZlcmVudCBldmVudHNcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiZmlsZXNBZGRlZFwiKSB7XG4gICAgICAgICAgY29uc3QgYWRkZWRGaWxlcyA9IGV2dC5ldmVudFswXSBhcyBGbG93RmlsZVtdO1xuICAgICAgICAgIHRoaXMuX29uRmlsZXNBZGRlZChhZGRlZEZpbGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJmaWxlc1N1Ym1pdHRlZFwiKSB7XG4gICAgICAgICAgdGhpcy5fb25GaWxlc1N1Ym1pdHRlZCgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgdXBsb2FkIG1ldGhvZCBvZiB0aGUgZmxvdyBkaXJlY3RpdmVcbiAgICB0aGlzLmZsb3cudXBsb2FkID0gdGhpcy5zdGFydFVwbG9hZC5iaW5kKHRoaXMpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBpbnN0YW50aWF0ZUNoYXRTZXJ2aWNlKCk6IHZvaWQge1xuICAgIHRoaXMuY2hhdFNlcnZpY2UgPSB0aGlzLmluc3RhbmNlTWFuYWdlclNlcnZpY2UuZ2V0SW5zdGFuY2UodGhpcy5pbnN0YW5jZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBzdWJtaXNzaW9uIG9mIGZpbGVzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIGNoZWNrcyBvbiB0aGUgc3VibWl0dGVkIGZpbGVzOlxuICAgKlxuICAgKiAxLiBDaGVja3MgaWYgdGhlIG51bWJlciBvZiBmaWxlcyBzdWJtaXR0ZWQgZXhjZWVkcyB0aGUgcmVtYWluaW5nRmlsZUNvdW50IGRlZmluZWQgaW4gdGhlIGNvbnN0cmFpbnRzLlxuICAgKiAgICAtIElmIHRoZSBudW1iZXIgb2YgZmlsZXMgZXhjZWVkcyB0aGUgYWxsb3dlZCBjb3VudCwgYWxsIGZpbGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGZsb3cuXG4gICAqICAgIC0gQW4gZXJyb3IgbWVzc2FnZSBpcyBhZGRlZCB0byB0aGUgZXJyb3IgYWxlcnRzLlxuICAgKlxuICAgKiAyLiBDaGVja3MgaWYgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGZpbGVzIHN1Ym1pdHRlZCBleGNlZWRzIHRoZSByZW1haW5pbmdGaWxlU2l6ZSBkZWZpbmVkIGluIHRoZSBjb25zdHJhaW50cy5cbiAgICogICAgLSBJZiB0aGUgdG90YWwgc2l6ZSBleGNlZWRzIHRoZSBhbGxvd2VkIHNpemUsIGFsbCBmaWxlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBmbG93LlxuICAgKiAgICAtIEFuIGVycm9yIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGVycm9yIGFsZXJ0cy5cbiAgICpcbiAgICogMy4gQ2hlY2tzIGlmIHRoZSBmaWxlIGV4dGVuc2lvbiBvZiB0aGUgZmlsZXMgc3VibWl0dGVkIGlzIG5vdCBhbGxvd2VkLlxuICAgKiAgICAtIElmIHRoZSBmaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZCwgdGhlIGZpbGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBmbG93LlxuICAgKiAgICAtIEFuIGVycm9yIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGVycm9yIGFsZXJ0cy5cbiAgICovXG4gIHByaXZhdGUgX29uRmlsZXNTdWJtaXR0ZWQoKSB7XG4gICAgLy8gR2V0IGFsbCBmaWxlcyBmcm9tIHRoZSBmbG93XG4gICAgY29uc3QgZmlsZXMgPSBbLi4udGhpcy5mbG93LmZsb3dKcy5maWxlc107XG4gICAgLy8gQ2xlYXIgdGhlIGVycm9yIGFsZXJ0c1xuICAgIHRoaXMuZXJyb3JBbGVydHMgPSBbXTtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIG51bWJlciBvZiBmaWxlcyBzdWJtaXR0ZWQgZXhjZWVkcyB0aGUgcmVtYWluaW5nRmlsZUNvdW50IGRlZmluZWQgaW4gdGhlIGNvbnN0cmFpbnRzLlxuICAgICAqIElmIHRoZSBudW1iZXIgb2YgZmlsZXMgZXhjZWVkcyB0aGUgYWxsb3dlZCBjb3VudCwgYWxsIGZpbGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGZsb3dcbiAgICAgKiBBbiBlcnJvciBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBlcnJvciBhbGVydHMuXG4gICAgICovXG4gICAgaWYgKGZpbGVzLmxlbmd0aCA+IHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS51cGxvYWRDb25maWckLnZhbHVlIS5jb25zdHJhaW50cy5yZW1haW5pbmdGaWxlQ291bnQpIHtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICB0aGlzLmZsb3cuZmxvd0pzLnJlbW92ZUZpbGUoZmlsZSk7XG4gICAgICB9XG4gICAgICBlcnJvcnMucHVzaCh0aGlzLnRyYW5zbG9jby50cmFuc2xhdGUoJ2NoYXREb2N1bWVudHNVcGxvYWQuZmlsZXNOdW1iZXJMaW1pdEV4Y2VlZGVkJywgeyBtYXg6IHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS51cGxvYWRDb25maWckLnZhbHVlIS5jb25zdHJhaW50cy5yZW1haW5pbmdGaWxlQ291bnQgfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZmlsZXMgc3VibWl0dGVkIGV4Y2VlZHMgdGhlIHJlbWFpbmluZ0ZpbGVTaXplIGRlZmluZWQgaW4gdGhlIGNvbnN0cmFpbnRzLlxuICAgICAqIElmIHRoZSB0b3RhbCBzaXplIGV4Y2VlZHMgdGhlIGFsbG93ZWQgc2l6ZSwgYWxsIGZpbGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGZsb3dcbiAgICAgKiBBbiBlcnJvciBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBlcnJvciBhbGVydHMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGZpbGVzIHRoYXQgY2FuIGJlIHVwbG9hZGVkIGlzIHRlbXBvcmFyeSBzZXQgdG8gdGhlIG1heGltdW0gb2YgMTI4IE1CIGFuZCB0aGUgcmVtYWluaW5nRmlsZVNpemVNQiBkZWZpbmVkIGluIHRoZSBjb25zdHJhaW50cy5cbiAgICAgKiBXYWl0aW5nIGZvciB0aGUgcGx1Z2luIHRvIGhhbmRsZSB0aGlzIGtlc3RyZWwgaXNzdWVcbiAgICAgKi9cbiAgICBlbHNlIGlmICh0aGlzLmRvY3VtZW50c1VwbG9hZFNlcnZpY2UuY29udmVydEJ5dGVzVG9NQih0aGlzLmZsb3cuZmxvd0pzLmdldFNpemUoKSkgPiBNYXRoLm1pbigxMjgsIHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS51cGxvYWRDb25maWckLnZhbHVlIS5jb25zdHJhaW50cy5yZW1haW5pbmdGaWxlU2l6ZU1CKSkge1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIHRoaXMuZmxvdy5mbG93SnMucmVtb3ZlRmlsZShmaWxlKTtcbiAgICAgIH1cbiAgICAgIGVycm9ycy5wdXNoKHRoaXMudHJhbnNsb2NvLnRyYW5zbGF0ZSgnY2hhdERvY3VtZW50c1VwbG9hZC5maWxlc1NpemVMaW1pdEV4Y2VlZGVkJywgeyBtYXg6IE1hdGgubWluKDEyOCwgdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLnVwbG9hZENvbmZpZyQudmFsdWUhLmNvbnN0cmFpbnRzLnJlbWFpbmluZ0ZpbGVTaXplTUIpIH0pKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGVzIHN1Ym1pdHRlZCBpcyBub3QgYWxsb3dlZC5cbiAgICAgKiBJZiB0aGUgZmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQsIHRoZSBmaWxlIGlzIHJlbW92ZWQgZnJvbSB0aGUgZmxvd1xuICAgICAqIEFuIGVycm9yIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGVycm9yIGFsZXJ0cy5cbiAgICAgKi9cbiAgICBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBpZiAoIXRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS51cGxvYWRDb25maWckLnZhbHVlIS5jb25zdHJhaW50cy5zdXBwb3J0ZWRGaWxlRXh0ZW5zaW9ucy5pbmNsdWRlcyhgJHtmaWxlLmdldEV4dGVuc2lvbigpfWApKSB7XG4gICAgICAgICAgdGhpcy5mbG93LmZsb3dKcy5yZW1vdmVGaWxlKGZpbGUpO1xuICAgICAgICAgIGVycm9ycy5wdXNoKHRoaXMudHJhbnNsb2NvLnRyYW5zbGF0ZSgnY2hhdERvY3VtZW50c1VwbG9hZC5maWxlRXh0ZW5zaW9uVW5zdXBwb3J0ZWQnLCB7IGV4dGVuc2lvbjogZmlsZS5nZXRFeHRlbnNpb24oKSB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgdW5pcXVlIGVycm9yIG1lc3NhZ2VzIHRvIHRoZSBlcnJvciBhbGVydHNcbiAgICB0aGlzLmVycm9yQWxlcnRzID0gWy4uLm5ldyBTZXQoZXJyb3JzKV07XG4gIH1cblxuICBwcml2YXRlIF9vbkZpbGVzQWRkZWQoZmlsZXM6IEZsb3dGaWxlW10pIHt9XG5cbiAgb25EcmFnZW50ZXIoKSB7XG4gICAgdGhpcy5kcmFnZ2luZyQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIG9uRHJhZ2xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBpZiAoXG4gICAgICAhZXZlbnQucmVsYXRlZFRhcmdldCB8fFxuICAgICAgIShldmVudC5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFwiLmRyb3B6b25lXCIpXG4gICAgKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBvbkRyb3AoKSB7XG4gICAgdGhpcy5kcmFnZ2luZyQubmV4dChmYWxzZSk7XG4gIH1cblxuICB0cmFja1RyYW5zZmVyKHRyYW5zZmVyOiBUcmFuc2Zlcikge1xuICAgIHJldHVybiB0cmFuc2Zlci5pZDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyB0aGUgdXBsb2FkIHByb2Nlc3MgYnkgaW52b2tpbmcgdGhlIGB1cGxvYWRgIG1ldGhvZFxuICAgKiBvZiB0aGUgYGZsb3dgIGluc3RhbmNlLlxuICAgKiBUaGUgYHVwbG9hZGAgbWV0aG9kIGlzIG92ZXJyaWRkZW4gaW4gdGhlIGBuZ09uSW5pdGAgbWV0aG9kIHRvIG1hdGNoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIGFzc2lzdGFudCBBUEkuXG4gICAqL1xuICB1cGxvYWQoKSB7XG4gICAgdGhpcy5mbG93LnVwbG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyB0aGUgZmlsZSB1cGxvYWQgcHJvY2VzcyBieSBwcmVwYXJpbmcgdGhlIGZvcm0gZGF0YSxcbiAgICogc2V0dGluZyB0aGUgdXBsb2FkaW5nIGZsYWcsIGFuZCBtYWtpbmcgYW4gQVBJIGNhbGwgdG8gdXBsb2FkIHRoZSBmaWxlcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogLSBDb2xsZWN0cyBhbGwgZmlsZXMgZnJvbSB0aGUgYGZsb3dKc2AgaW5zdGFuY2UgYW5kIGFwcGVuZHMgdGhlbSB0byBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgKiAtIFN1YnNjcmliZXMgdG8gdGhlIHVwbG9hZCBwcm9jZXNzIHRvIGhhbmRsZSBwcm9ncmVzcyB1cGRhdGVzLCBjb21wbGV0aW9uLCBhbmQgZXJyb3JzLlxuICAgKiAtIFRyaWdnZXJzIHRyYWNraW5nIHRoZSBpbmRleGluZyBwcm9jZXNzIHVwb24gc3VjY2Vzc2Z1bCB1cGxvYWQgY29tcGxldGlvbi5cbiAgICogLSBDbGVhbnMgdXAgdGhlIGBmbG93YCBpbnN0YW5jZSBhZnRlciB0aGUgdXBsb2FkIHByb2Nlc3MgaXMgZmluYWxpemVkLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydFVwbG9hZCgpIHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgLy8gQWRkIGFsbCBmaWxlcyB3aXRoIHRoZWlyIG9yaWdpbmFsIG5hbWVzXG4gICAgdGhpcy5mbG93LmZsb3dKcy5maWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoZmlsZS5uYW1lLCBmaWxlLmZpbGUpO1xuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIGVycm9yIGFsZXJ0c1xuICAgIHRoaXMuZXJyb3JBbGVydHMgPSBbXTtcbiAgICAvLyBTZXQgdGhlIHVwbG9hZGluZyBmbGFnIHRvIHRydWVcbiAgICB0aGlzLnVwbG9hZGluZyQubmV4dCh0cnVlKTtcblxuICAgIC8vIE1ha2UgdGhlIEFQSSBjYWxsIHRvIHVwbG9hZCB0aGUgZmlsZXNcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLnVwbG9hZERvY3VtZW50cyhmb3JtRGF0YSkucGlwZShcbiAgICAgICAgdGFwKChldmVudDogVXBsb2FkRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3VwbG9hZFByb2dyZXNzJykge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRpbmdJbmZvcyQubmV4dChldmVudCBhcyBVcGxvYWRpbmdJbmZvcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChldmVudC50eXBlID09PSAncmVzcG9uc2UnKSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNrSW5kZXhpbmdQcm9jZXNzKGV2ZW50LmJvZHkuc3RhdHVzVG9rZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkaW5nJC5uZXh0KGZhbHNlKTsgLy8gU2V0IHRoZSB1cGxvYWRpbmcgZmxhZyB0byBmYWxzZSBPTkxZIGluIGNhc2Ugb2YgYW4gZXJyb3IuIE90aGVyd2lzZSwga2VlcCBpdCB0cnVlIHVudGlsIHRoZSBzdGFydCBvZiBpbmRleGluZyBwcm9jZXNzIGluIG9yZGVyIHRvIHByZXZlbnQgZmxpY2tlcmluZyBvZiB0aGUgVUlcbiAgICAgICAgICB0aGlzLnVwbG9hZGluZ0luZm9zJC5uZXh0KHVuZGVmaW5lZCk7IC8vIENsZWFyIHRoZSB1cGxvYWRpbmcgaW5mb3NcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcih0aGlzLnRyYW5zbG9jby50cmFuc2xhdGUoJ2NoYXREb2N1bWVudHNVcGxvYWQuZXJyb3JVcGxvYWRpbmdGaWxlcycpKTtcbiAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgLy8gQ2xlYXIgdGhlIGZsb3cgaW5zdGFuY2UgYWZ0ZXIgdGhlIHVwbG9hZCBpcyBjb21wbGV0ZSBvciBhbiBlcnJvciBvY2N1cnNcbiAgICAgICAgICB0aGlzLmZsb3cuY2FuY2VsKCk7XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFja3MgdGhlIGluZGV4aW5nIHByb2Nlc3MgZm9yIGEgc2luZ2xlIGRvY3VtZW50cyB1cGxvYWQgc2Vzc2lvbiBieSBwb2xsaW5nIHRoZSBBUEkgZm9yIGl0cyBzdGF0dXMuXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIEEgdW5pcXVlIHRva2VuIHJlcHJlc2VudGluZyB0aGUgc2luZ2xlIGRvY3VtZW50cyB1cGxvYWQgc2Vzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogLSBDbGVhcnMgdGhlIHVwbG9hZGluZyBmbGFncyBhbmQgc2V0cyB0aGUgaW5kZXhpbmcgZmxhZyB0byB0cnVlIGJlZm9yZSBzdGFydGluZyB0aGUgcHJvY2Vzcy5cbiAgICogLSBQb2xscyB0aGUgQVBJIGV2ZXJ5IChwb2xsaW5nSW50ZXJ2YWw6IGRlZmF1bHQgPSAxIHNlY29uZCkgdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgaW5kZXhpbmcgc3RhdHVzLlxuICAgKiAtIFVwZGF0ZXMgdGhlIGBpbmRleGluZ0luZm9zYCBwcm9wZXJ0eSB3aXRoIHRoZSBsYXRlc3Qgc3RhdHVzLlxuICAgKiAtIFN0b3BzIHBvbGxpbmcgd2hlbiB0aGUgaW5kZXhpbmcgcHJvY2VzcyBpcyBjb21wbGV0ZWQgb3IgYW4gZXJyb3Igb2NjdXJzLlxuICAgKiAtIENsZWFucyB1cCBieSByZXNldHRpbmcgdGhlIGluZGV4aW5nIGZsYWdzIGFuZCBjbGVhcmluZyB0aGUgYGluZGV4aW5nSW5mb3NgIHByb3BlcnR5IHdoZW4gdGhlIHByb2Nlc3MgaXMgZmluYWxpemVkLlxuICAgKi9cbiAgdHJhY2tJbmRleGluZ1Byb2Nlc3ModG9rZW46IHN0cmluZykge1xuICAgIC8vIENsZWFyIHRoZSB1cGxvYWRpbmcgZmxhZ3NcbiAgICB0aGlzLnVwbG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgdGhpcy51cGxvYWRpbmdJbmZvcyQubmV4dCh1bmRlZmluZWQpO1xuICAgIC8vIFNldCB0aGUgaW5kZXhpbmcgZmxhZyB0byB0cnVlXG4gICAgdGhpcy5pbmRleGluZyQubmV4dCh0cnVlKTtcblxuICAgIC8vIENvbWJpbmUgaW1tZWRpYXRlIEFQSSBjYWxsIHdpdGggaW50ZXJ2YWwtYmFzZWQgcG9sbGluZ1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBpbnRlcnZhbCh0aGlzLnBvbGxpbmdJbnRlcnZhbCkucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKDApLCAvLyBUcmlnZ2VyIHRoZSBBUEkgY2FsbCBpbW1lZGlhdGVseVxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmdldEluZGV4aW5nU3RhdHVzKHRva2VuKSksXG4gICAgICAgIHRhcCgocmVzOiBJbmRleGluZ0luZm9zKSA9PiB0aGlzLmluZGV4aW5nSW5mb3MkLm5leHQocmVzKSksXG4gICAgICAgIHRha2VXaGlsZSgocmVzcG9uc2U6IEluZGV4aW5nSW5mb3MpID0+ICFyZXNwb25zZS5pc0NvbXBsZXRlZCwgdHJ1ZSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKHRoaXMudHJhbnNsb2NvLnRyYW5zbGF0ZSgnY2hhdERvY3VtZW50c1VwbG9hZC5lcnJvckluZGV4aW5nU3RhdHVzJykpO1xuICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAvLyBDbGVhciB0aGUgaW5kZXhpbmcgZmxhZ3NcbiAgICAgICAgICB0aGlzLmluZGV4aW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmluZGV4aW5nSW5mb3MkLm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGluZGV4aW5nIHByb2dyZXNzIGFzIGEgcGVyY2VudGFnZSBvZiBjb21wbGV0ZWQgZG9jdW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaW5mb3MgLSBUaGUgaW5kZXhpbmcgaW5mb3JtYXRpb24gY29udGFpbmluZyB0aGUgbGlzdCBvZiBkb2N1bWVudHMgYW5kIHRoZWlyIHN0YXR1c2VzLlxuICAgKiBAcmV0dXJucyBUaGUgcHJvZ3Jlc3MgYXMgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLCB3aGVyZSAwIGluZGljYXRlcyBubyBwcm9ncmVzcyBhbmQgMSBpbmRpY2F0ZXMgYWxsIGRvY3VtZW50cyBhcmUgcHJvY2Vzc2VkIChwcm9jZXNzZWQgbWVhbnMgZWl0aGVyIGluZGV4ZWQgb3IgZXJyb3JlZCkuXG4gICAqICAgICAgICAgIFJldHVybnMgMCBpZiB0aGUgaW5wdXQgaXMgaW52YWxpZCBvciB0aGVyZSBhcmUgbm8gZG9jdW1lbnRzLlxuICAgKi9cbiAgZ2V0SW5kZXhpbmdQcm9ncmVzcyhpbmZvczogSW5kZXhpbmdJbmZvcyB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gICAgaWYgKCFpbmZvcyB8fCAhaW5mb3MuZG9jcykgcmV0dXJuIDA7XG4gICAgY29uc3QgY29tcGxldGVkID0gaW5mb3MuZG9jcy5maWx0ZXIoZG9jID0+IGRvYy5zdGF0dXMgPT09IFwiSW5kZXhlZFwiIHx8IGRvYy5zdGF0dXMgPT09IFwiRXJyb3JcIikubGVuZ3RoO1xuICAgIGNvbnN0IHRvdGFsID0gaW5mb3MuZG9jcy5sZW5ndGg7XG4gICAgcmV0dXJuIGNvbXBsZXRlZC90b3RhbDtcbiAgfVxuXG59XG4iLCI8bmctY29udGFpbmVyICNmbG93PVwiZmxvd1wiIFtmbG93Q29uZmlnXT1cImZsb3dDb25maWdcIj48L25nLWNvbnRhaW5lcj5cbjxkaXYgY2xhc3M9XCJmaWxlLXVwbG9hZC1jb250YWluZXJcIj5cbiAgPGlucHV0XG4gICAgdHlwZT1cImZpbGVcIlxuICAgIGZsb3dCdXR0b25cbiAgICBbZmxvd109XCJmbG93LmZsb3dKc1wiXG4gICAgbXVsdGlwbGVcbiAgICBoaWRkZW5cbiAgICAjZmlsZUlucHV0PlxuICA8ZGl2XG4gICAgZmxvd0Ryb3BcbiAgICBbZmxvd109XCJmbG93LmZsb3dKc1wiXG4gICAgKGRyYWdlbnRlcik9XCJvbkRyYWdlbnRlcigpXCJcbiAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ2xlYXZlKCRldmVudClcIlxuICAgIChkcm9wKT1cIm9uRHJvcCgpXCJcbiAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIlxuICAgIGNsYXNzPVwiZHJvcHpvbmVcIlxuICAgIFtuZ0NsYXNzXT1cInsnZHJvcHpvbmUtLWFjdGl2ZSc6IChkcmFnZ2luZyQgfCBhc3luYyl9XCJcbiAgICBbaGlkZGVuXT1cIih1cGxvYWRpbmckIHwgYXN5bmMpIHx8IChpbmRleGluZyQgfCBhc3luYylcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGRyYWdnaW5nJCB8IGFzeW5jKTsgZWxzZSBkcmFnZ2luZ0NvbnRlbnRcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2xvdWQtdXBsb2FkLWFsdFwiPjwvaT5cbiAgICAgICAgPHNwYW4+e3sgJ2NoYXREb2N1bWVudHNVcGxvYWQuZHJhZ0FuZERyb3AnIHwgdHJhbnNsb2NvIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtb3JhbmdlXCI+e3sgJ2NoYXREb2N1bWVudHNVcGxvYWQuY2xpY2tUb0Jyb3dzZScgfCB0cmFuc2xvY28gfX08L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZHJhZ2dpbmdDb250ZW50PlxuICAgICAgICA8c3Bhbj57eyAnY2hhdERvY3VtZW50c1VwbG9hZC5kcm9wRmlsZXMnIHwgdHJhbnNsb2NvIH19PC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cIih1cGxvYWRpbmckIHwgYXN5bmMpIHx8IChpbmRleGluZyQgfCBhc3luYylcIiBjbGFzcz1cImRyb3B6b25lIGRyb3B6b25lLS1hY3RpdmVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHVwbG9hZGluZyQgfCBhc3luYyk7IGVsc2UgaW5kZXhpbmdTdGF0ZVwiPlxuICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc3Bpbm5lciBmYS1wdWxzZVwiPjwvaT5cbiAgICAgIDxzcGFuPlxuICAgICAgICB7eyAnY2hhdERvY3VtZW50c1VwbG9hZC51cGxvYWRpbmdGaWxlcycgfCB0cmFuc2xvY286IHsgY291bnQ6IChmbG93LnRyYW5zZmVycyQgfCBhc3luYykhLnRyYW5zZmVycy5sZW5ndGggfSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCIodXBsb2FkaW5nSW5mb3MkIHwgYXN5bmMpIGFzIHVwbG9hZGluZ0luZm9zXCI+e3sgdXBsb2FkaW5nSW5mb3MucHJvZ3Jlc3MgfCBudW1iZXI6JzEuMC0wJyB9fSU8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNpbmRleGluZ1N0YXRlPlxuICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc3Bpbm5lciBmYS1wdWxzZVwiPjwvaT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmRleGluZ0luZm9zJCB8IGFzeW5jIGFzIGluZGV4aW5nSW5mb1wiPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7eyAnY2hhdERvY3VtZW50c1VwbG9hZC5pbmRleGluZ0ZpbGVzJyB8IHRyYW5zbG9jbzogeyBjb3VudDogaW5kZXhpbmdJbmZvLmRvY3MubGVuZ3RoIH0gfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBnZXRJbmRleGluZ1Byb2dyZXNzKGluZGV4aW5nSW5mbykgKiAxMDAgfCBudW1iZXI6JzEuMC0wJyB9fSU8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8dWwgKm5nSWY9XCJlcnJvckFsZXJ0cy5sZW5ndGggPiAwXCIgY2xhc3M9XCJlcnJvci1saXN0IG10LTNcIj5cbiAgICA8bGkgKm5nRm9yPVwibGV0IGVycm9yIG9mIGVycm9yQWxlcnRzXCI+XG4gICAgICB7eyBlcnJvciB9fVxuICAgIDwvbGk+XG4gIDwvdWw+XG5cbiAgPGRpdiAqbmdJZj1cIigoZmxvdy50cmFuc2ZlcnMkIHwgYXN5bmMpPy50cmFuc2ZlcnM/Lmxlbmd0aCA+IDApICYmICEodXBsb2FkaW5nJCB8IGFzeW5jKVwiIGNsYXNzPVwiZmlsZS1saXN0IG10LTNcIj5cbiAgICA8dWw+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IHRyYW5zZmVyIG9mIChmbG93LnRyYW5zZmVycyQgfCBhc3luYykhLnRyYW5zZmVyczsgdHJhY2tCeTogdHJhY2tUcmFuc2ZlclwiPlxuICAgICAgICA8c3EtZm9ybWF0LWljb24gW2V4dGVuc2lvbl09XCJ0cmFuc2Zlci5mbG93RmlsZS5nZXRFeHRlbnNpb24oKVwiIGNsYXNzPVwibWUtMVwiPjwvc3EtZm9ybWF0LWljb24+XG4gICAgICAgIDxzcGFuIFt0aXRsZV09XCJ0cmFuc2Zlci5uYW1lXCI+e3sgdHJhbnNmZXIubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2ggbXMtMVwiIChjbGljayk9XCJmbG93LmNhbmNlbEZpbGUodHJhbnNmZXIpXCIgW3RpdGxlXT1cIidjaGF0RG9jdW1lbnRzVXBsb2FkLmNhbmNlbCcgfCB0cmFuc2xvY29cIj48L2k+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggbXQtMlwiPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGNhbmNlbC1idG4gbWUtMlwiXG4gICAgICAoY2xpY2spPVwiZmxvdy5jYW5jZWwoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiISgoZmxvdy50cmFuc2ZlcnMkIHwgYXN5bmMpPy50cmFuc2ZlcnM/Lmxlbmd0aCA+IDApIHx8ICh1cGxvYWRpbmckIHwgYXN5bmMpIHx8IChpbmRleGluZyQgfCBhc3luYylcIj5cbiAgICAgIHt7ICdjaGF0RG9jdW1lbnRzVXBsb2FkLmNhbmNlbCcgfCB0cmFuc2xvY28gfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwidXBsb2FkLWJ0blwiXG4gICAgICAoY2xpY2spPVwidXBsb2FkKClcIlxuICAgICAgW2Rpc2FibGVkXT1cIiEoKGZsb3cudHJhbnNmZXJzJCB8IGFzeW5jKT8udHJhbnNmZXJzPy5sZW5ndGggPiAwKSB8fCAodXBsb2FkaW5nJCB8IGFzeW5jKSB8fCAoaW5kZXhpbmckIHwgYXN5bmMpXCI+XG4gICAgICB7eyAnY2hhdERvY3VtZW50c1VwbG9hZC51cGxvYWQnIHwgdHJhbnNsb2NvIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
256
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L2RvY3VtZW50cy11cGxvYWQvZG9jdW1lbnQtdXBsb2FkL2RvY3VtZW50LXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LXVwbG9hZC9kb2N1bWVudC11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFHTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBMkIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNILFNBQVMsRUFDVCxFQUFFLEdBQ0gsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWxELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7O0FBVTNFLE1BQU0sT0FBTyx1QkFBdUI7SUFScEM7UUFXRSwrRkFBK0Y7UUFDdEYsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFLaEMsZUFBVSxHQUF1QjtZQUN4QyxvSEFBb0g7WUFDcEgsVUFBVSxFQUFFLEtBQUs7WUFDakIsOENBQThDO1lBQzlDLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLHFEQUFxRDtZQUNyRCxxQkFBcUIsRUFBRSxJQUFJO1lBQzNCLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFLENBQUMsQ0FBQywyQ0FBMkM7WUFDeEQsQ0FBQztZQUNELFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLDZDQUE2QztTQUNuRixDQUFDO1FBQ0ssZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFDM0IsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2hELGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNoRCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUE0QixTQUFTLENBQUMsQ0FBQztRQUMzRSxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakQsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBNkIsU0FBUyxDQUFDLENBQUM7UUFFNUUsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXBDLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hELDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hELHlCQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFDLGNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQTJQdkQ7SUF6UEMsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsRUFDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEVBQ25ELE1BQU0sQ0FBQyxDQUFDLE1BQThCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFDcEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUM5RCxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUNmLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxHQUFHLEdBQUcsS0FBWSxDQUFDO1lBQ3pCLDRFQUE0RTtZQUM1RSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFlLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSyxpQkFBaUI7UUFDdkIsOEJBQThCO1FBQzlCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBRTVCOzs7O1dBSUc7UUFDSCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxLQUFNLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDbkcsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLDhDQUE4QyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsS0FBTSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsTCxDQUFDO1FBRUQ7Ozs7Ozs7O1dBUUc7YUFDRSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsS0FBTSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDcEwsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLDRDQUE0QyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsS0FBTSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQy9MLENBQUM7UUFFRDs7OztXQUlHO2FBQ0UsQ0FBQztZQUNKLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLEtBQU0sQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUM3SCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsOENBQThDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM1SCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQWlCLElBQUcsQ0FBQztJQUUzQyxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFnQjtRQUMxQixJQUNFLENBQUMsS0FBSyxDQUFDLGFBQWE7WUFDcEIsQ0FBRSxLQUFLLENBQUMsYUFBNkIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQzFELENBQUM7WUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQWtCO1FBQzlCLE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBR0Q7Ozs7T0FJRztJQUNILE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSyxXQUFXO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFFaEMsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN0QyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLGlDQUFpQztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQix3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUN4RCxHQUFHLENBQUMsQ0FBQyxLQUFrQixFQUFFLEVBQUU7WUFDekIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQXVCLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxpS0FBaUs7WUFDOUwsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7WUFDbEUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLHlDQUF5QyxDQUFDLENBQUMsQ0FBQztZQUNyRyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDWiwwRUFBMEU7WUFDMUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUNkLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxvQkFBb0IsQ0FBQyxLQUFhO1FBQ2hDLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIseURBQXlEO1FBQ3pELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FDakMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLG1DQUFtQztRQUNqRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3JFLEdBQUcsQ0FBQyxDQUFDLEdBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQzFELFNBQVMsQ0FBQyxDQUFDLFFBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFDbkUsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLHlDQUF5QyxDQUFDLENBQUMsQ0FBQztZQUNyRyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDWiwyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG1CQUFtQixDQUFDLEtBQWdDO1FBQ2xELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDdEcsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEMsT0FBTyxTQUFTLEdBQUMsS0FBSyxDQUFDO0lBQ3pCLENBQUM7K0dBMVJVLHVCQUF1QjttR0FBdkIsdUJBQXVCLDJJQUh2QixDQUFDLHNCQUFzQixFQUFFLHFCQUFxQixDQUFDLHVCQUF1QixDQUFDLENBQUMsc0lDMUNyRiw2d0dBaUZBLHN1SER0Q1ksWUFBWSwwY0FBRSxhQUFhLHlZQUFFLG1CQUFtQiw2RUFBRSxhQUFhOzs0RkFFOUQsdUJBQXVCO2tCQVJuQyxTQUFTOytCQUNFLG9CQUFvQixjQUdsQixJQUFJLGFBQ0wsQ0FBQyxzQkFBc0IsRUFBRSxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFdBQzFFLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLENBQUM7OEJBSWpFLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFK0IsSUFBSTtzQkFBeEMsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTmd4Rmxvd01vZHVsZSwgRmxvd0RpcmVjdGl2ZSwgVHJhbnNmZXIgfSBmcm9tIFwiQGZsb3dqcy9uZ3gtZmxvd1wiO1xuaW1wb3J0IHsgRmxvd0ZpbGUgfSBmcm9tIFwiZmxvd2pzXCI7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNhdGNoRXJyb3IsXG4gIEVNUFRZLFxuICBmaWx0ZXIsXG4gIGZpbmFsaXplLFxuICBpbnRlcnZhbCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VXaGlsZSxcbiAgdGFwLFxuICBzdGFydFdpdGgsXG4gIG9mLFxufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgcHJvdmlkZVRyYW5zbG9jb1Njb3BlLCBUcmFuc2xvY29QaXBlLCBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcblxuaW1wb3J0IHsgaXNBdXRoZW50aWNhdGVkIH0gZnJvbSBcIkBzaW5lcXVhL2F0b21pY1wiO1xuXG5pbXBvcnQgeyBJbnN0YW5jZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2luc3RhbmNlLW1hbmFnZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY2hhdC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEb2N1bWVudHNVcGxvYWRTZXJ2aWNlIH0gZnJvbSBcIi4uL2RvY3VtZW50cy11cGxvYWQuc2VydmljZVwiO1xuaW1wb3J0IHsgRm9ybWF0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Zvcm1hdC1pY29uL2Zvcm1hdC1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGF0Q29uZmlnIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBJbmRleGluZ0luZm9zLCBVcGxvYWRFdmVudCwgVXBsb2FkaW5nSW5mb3MgfSBmcm9tIFwiLi4vZG9jdW1lbnRzLXVwbG9hZC5tb2RlbFwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInNxLWRvY3VtZW50LXVwbG9hZFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2RvY3VtZW50LXVwbG9hZC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZG9jdW1lbnQtdXBsb2FkLmNvbXBvbmVudC5zY3NzXCJdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtEb2N1bWVudHNVcGxvYWRTZXJ2aWNlLCBwcm92aWRlVHJhbnNsb2NvU2NvcGUoJ2NoYXQtZG9jdW1lbnRzLXVwbG9hZCcpXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTmd4Rmxvd01vZHVsZSwgRm9ybWF0SWNvbkNvbXBvbmVudCwgVHJhbnNsb2NvUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBEZWZpbmUgdGhlIGtleSBiYXNlZCBvbiBpdCwgdGhlIGFwcHJvcHJpYXRlIGNoYXRTZXJ2aWNlIGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlICovXG4gIEBJbnB1dCgpIGluc3RhbmNlSWQ6IHN0cmluZztcbiAgLyoqIFBvbGxpbmcgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIHVwZGF0ZSB0aGUgaW5kZXhpbmcgc3RhdHVzIG9mIHRoZSB1cGxvYWRlZCBkb2N1bWVudHMgKi9cbiAgQElucHV0KCkgcG9sbGluZ0ludGVydmFsIDogbnVtYmVyID0gMTAwMDtcbiAgLy8gUmVmZXJlbmNlIHRvIHRoZSBmbG93IGRpcmVjdGl2ZVxuICBAVmlld0NoaWxkKFwiZmxvd1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSBmbG93ITogRmxvd0RpcmVjdGl2ZTtcblxuICBwdWJsaWMgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlO1xuICByZWFkb25seSBmbG93Q29uZmlnOiBmbG93anMuRmxvd09wdGlvbnMgPSB7XG4gICAgLy8gRGlzYWJsZXMgY2h1bmsgdGVzdGluZyBiZWZvcmUgdXBsb2FkaW5nIGFjdHVhbCBmaWxlIGRhdGEuIFRodXMsIGF2b2lkcyB1bm5lY2Vzc2FyeSByZXF1ZXN0cyBhbmQgc3BlZWRzIHVwIHVwbG9hZHNcbiAgICB0ZXN0Q2h1bmtzOiBmYWxzZSxcbiAgICAvLyBBbGxvd3MgbXVsdGlwbGUgZmlsZSB1cGxvYWRzIHNpbXVsdGFuZW91c2x5XG4gICAgc2luZ2xlRmlsZTogZmFsc2UsXG4gICAgLy8gQWxsb3dzIHRoZSBzYW1lIGZpbGUgdG8gYmUgdXBsb2FkZWQgbXVsdGlwbGUgdGltZXNcbiAgICBhbGxvd0R1cGxpY2F0ZVVwbG9hZHM6IHRydWUsXG4gICAgcXVlcnk6ICgpID0+IHtcbiAgICAgIHJldHVybiB7fTsgLy8gRW1wdHkgb2JqZWN0IHRvIHByZXZlbnQgcXVlcnkgcGFyYW1ldGVyc1xuICAgIH0sXG4gICAgcHJlcHJvY2VzczogKGNodW5rKSA9PiBjaHVuay5hYm9ydCgpIC8vIFByZXZlbnRzIHRoZSBkZWZhdWx0IGZsb3cgdXBsb2FkIG9mIGNodW5rc1xuICB9O1xuICBwdWJsaWMgZXJyb3JBbGVydHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBkcmFnZ2luZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGluZGV4aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgaW5kZXhpbmdJbmZvcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEluZGV4aW5nSW5mb3MgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyB1cGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyB1cGxvYWRpbmdJbmZvcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVwbG9hZGluZ0luZm9zIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwdWJsaWMgaW5zdGFuY2VNYW5hZ2VyU2VydmljZSA9IGluamVjdChJbnN0YW5jZU1hbmFnZXJTZXJ2aWNlKTtcbiAgcHVibGljIGRvY3VtZW50c1VwbG9hZFNlcnZpY2UgPSBpbmplY3QoRG9jdW1lbnRzVXBsb2FkU2VydmljZSk7XG4gIHB1YmxpYyBub3RpZmljYXRpb25zU2VydmljZSA9IGluamVjdChOb3RpZmljYXRpb25zU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsb2NvID0gaW5qZWN0KFRyYW5zbG9jb1NlcnZpY2UpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBvZihpc0F1dGhlbnRpY2F0ZWQoKSkucGlwZShcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuaW5zdGFudGlhdGVDaGF0U2VydmljZSgpKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHRoaXMuY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJCksXG4gICAgICAgICAgZmlsdGVyKChjb25maWc6IENoYXRDb25maWcgfCB1bmRlZmluZWQpID0+ICEhY29uZmlnKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS5pbml0KHRoaXMuY2hhdFNlcnZpY2UpKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5mbG93LmV2ZW50cyQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBldnQgPSBldmVudCBhcyBhbnk7XG4gICAgICAgIC8vIEtlcHQgaXQganVzdCBmb3IgcmVmZXJlbmNlIHRvIHNob3cgaG93IHRvIGFjY2VzcyBkYXRhIG9mIGRpZmZlcmVudCBldmVudHNcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiZmlsZXNBZGRlZFwiKSB7XG4gICAgICAgICAgY29uc3QgYWRkZWRGaWxlcyA9IGV2dC5ldmVudFswXSBhcyBGbG93RmlsZVtdO1xuICAgICAgICAgIHRoaXMuX29uRmlsZXNBZGRlZChhZGRlZEZpbGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJmaWxlc1N1Ym1pdHRlZFwiKSB7XG4gICAgICAgICAgdGhpcy5fb25GaWxlc1N1Ym1pdHRlZCgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgdXBsb2FkIG1ldGhvZCBvZiB0aGUgZmxvdyBkaXJlY3RpdmVcbiAgICB0aGlzLmZsb3cudXBsb2FkID0gdGhpcy5zdGFydFVwbG9hZC5iaW5kKHRoaXMpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBpbnN0YW50aWF0ZUNoYXRTZXJ2aWNlKCk6IHZvaWQge1xuICAgIHRoaXMuY2hhdFNlcnZpY2UgPSB0aGlzLmluc3RhbmNlTWFuYWdlclNlcnZpY2UuZ2V0SW5zdGFuY2UodGhpcy5pbnN0YW5jZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBzdWJtaXNzaW9uIG9mIGZpbGVzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIGNoZWNrcyBvbiB0aGUgc3VibWl0dGVkIGZpbGVzOlxuICAgKlxuICAgKiAxLiBDaGVja3MgaWYgdGhlIG51bWJlciBvZiBmaWxlcyBzdWJtaXR0ZWQgZXhjZWVkcyB0aGUgcmVtYWluaW5nRmlsZUNvdW50IGRlZmluZWQgaW4gdGhlIGNvbnN0cmFpbnRzLlxuICAgKiAgICAtIElmIHRoZSBudW1iZXIgb2YgZmlsZXMgZXhjZWVkcyB0aGUgYWxsb3dlZCBjb3VudCwgYWxsIGZpbGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGZsb3cuXG4gICAqICAgIC0gQW4gZXJyb3IgbWVzc2FnZSBpcyBhZGRlZCB0byB0aGUgZXJyb3IgYWxlcnRzLlxuICAgKlxuICAgKiAyLiBDaGVja3MgaWYgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGZpbGVzIHN1Ym1pdHRlZCBleGNlZWRzIHRoZSByZW1haW5pbmdGaWxlU2l6ZSBkZWZpbmVkIGluIHRoZSBjb25zdHJhaW50cy5cbiAgICogICAgLSBJZiB0aGUgdG90YWwgc2l6ZSBleGNlZWRzIHRoZSBhbGxvd2VkIHNpemUsIGFsbCBmaWxlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBmbG93LlxuICAgKiAgICAtIEFuIGVycm9yIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGVycm9yIGFsZXJ0cy5cbiAgICpcbiAgICogMy4gQ2hlY2tzIGlmIHRoZSBmaWxlIGV4dGVuc2lvbiBvZiB0aGUgZmlsZXMgc3VibWl0dGVkIGlzIG5vdCBhbGxvd2VkLlxuICAgKiAgICAtIElmIHRoZSBmaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZCwgdGhlIGZpbGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBmbG93LlxuICAgKiAgICAtIEFuIGVycm9yIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGVycm9yIGFsZXJ0cy5cbiAgICovXG4gIHByaXZhdGUgX29uRmlsZXNTdWJtaXR0ZWQoKSB7XG4gICAgLy8gR2V0IGFsbCBmaWxlcyBmcm9tIHRoZSBmbG93XG4gICAgY29uc3QgZmlsZXMgPSBbLi4udGhpcy5mbG93LmZsb3dKcy5maWxlc107XG4gICAgLy8gQ2xlYXIgdGhlIGVycm9yIGFsZXJ0c1xuICAgIHRoaXMuZXJyb3JBbGVydHMgPSBbXTtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIG51bWJlciBvZiBmaWxlcyBzdWJtaXR0ZWQgZXhjZWVkcyB0aGUgcmVtYWluaW5nRmlsZUNvdW50IGRlZmluZWQgaW4gdGhlIGNvbnN0cmFpbnRzLlxuICAgICAqIElmIHRoZSBudW1iZXIgb2YgZmlsZXMgZXhjZWVkcyB0aGUgYWxsb3dlZCBjb3VudCwgYWxsIGZpbGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGZsb3dcbiAgICAgKiBBbiBlcnJvciBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBlcnJvciBhbGVydHMuXG4gICAgICovXG4gICAgaWYgKGZpbGVzLmxlbmd0aCA+IHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS51cGxvYWRDb25maWckLnZhbHVlIS5jb25zdHJhaW50cy5yZW1haW5pbmdGaWxlQ291bnQpIHtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICB0aGlzLmZsb3cuZmxvd0pzLnJlbW92ZUZpbGUoZmlsZSk7XG4gICAgICB9XG4gICAgICBlcnJvcnMucHVzaCh0aGlzLnRyYW5zbG9jby50cmFuc2xhdGUoJ2NoYXREb2N1bWVudHNVcGxvYWQuZmlsZXNOdW1iZXJMaW1pdEV4Y2VlZGVkJywgeyBtYXg6IHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS51cGxvYWRDb25maWckLnZhbHVlIS5jb25zdHJhaW50cy5yZW1haW5pbmdGaWxlQ291bnQgfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZmlsZXMgc3VibWl0dGVkIGV4Y2VlZHMgdGhlIHJlbWFpbmluZ0ZpbGVTaXplIGRlZmluZWQgaW4gdGhlIGNvbnN0cmFpbnRzLlxuICAgICAqIElmIHRoZSB0b3RhbCBzaXplIGV4Y2VlZHMgdGhlIGFsbG93ZWQgc2l6ZSwgYWxsIGZpbGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGZsb3dcbiAgICAgKiBBbiBlcnJvciBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBlcnJvciBhbGVydHMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGZpbGVzIHRoYXQgY2FuIGJlIHVwbG9hZGVkIGlzIHRlbXBvcmFyeSBzZXQgdG8gdGhlIG1heGltdW0gb2YgMTI4IE1CIGFuZCB0aGUgcmVtYWluaW5nRmlsZVNpemVNQiBkZWZpbmVkIGluIHRoZSBjb25zdHJhaW50cy5cbiAgICAgKiBXYWl0aW5nIGZvciB0aGUgcGx1Z2luIHRvIGhhbmRsZSB0aGlzIGtlc3RyZWwgaXNzdWVcbiAgICAgKi9cbiAgICBlbHNlIGlmICh0aGlzLmRvY3VtZW50c1VwbG9hZFNlcnZpY2UuY29udmVydEJ5dGVzVG9NQih0aGlzLmZsb3cuZmxvd0pzLmdldFNpemUoKSkgPiBNYXRoLm1pbigxMjgsIHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS51cGxvYWRDb25maWckLnZhbHVlIS5jb25zdHJhaW50cy5yZW1haW5pbmdGaWxlU2l6ZU1CKSkge1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIHRoaXMuZmxvdy5mbG93SnMucmVtb3ZlRmlsZShmaWxlKTtcbiAgICAgIH1cbiAgICAgIGVycm9ycy5wdXNoKHRoaXMudHJhbnNsb2NvLnRyYW5zbGF0ZSgnY2hhdERvY3VtZW50c1VwbG9hZC5maWxlc1NpemVMaW1pdEV4Y2VlZGVkJywgeyBtYXg6IE1hdGgubWluKDEyOCwgdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLnVwbG9hZENvbmZpZyQudmFsdWUhLmNvbnN0cmFpbnRzLnJlbWFpbmluZ0ZpbGVTaXplTUIpIH0pKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGVzIHN1Ym1pdHRlZCBpcyBub3QgYWxsb3dlZC5cbiAgICAgKiBJZiB0aGUgZmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQsIHRoZSBmaWxlIGlzIHJlbW92ZWQgZnJvbSB0aGUgZmxvd1xuICAgICAqIEFuIGVycm9yIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGVycm9yIGFsZXJ0cy5cbiAgICAgKi9cbiAgICBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBpZiAoIXRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS51cGxvYWRDb25maWckLnZhbHVlIS5jb25zdHJhaW50cy5zdXBwb3J0ZWRGaWxlRXh0ZW5zaW9ucy5pbmNsdWRlcyhgJHtmaWxlLmdldEV4dGVuc2lvbigpfWApKSB7XG4gICAgICAgICAgdGhpcy5mbG93LmZsb3dKcy5yZW1vdmVGaWxlKGZpbGUpO1xuICAgICAgICAgIGVycm9ycy5wdXNoKHRoaXMudHJhbnNsb2NvLnRyYW5zbGF0ZSgnY2hhdERvY3VtZW50c1VwbG9hZC5maWxlRXh0ZW5zaW9uVW5zdXBwb3J0ZWQnLCB7IGV4dGVuc2lvbjogZmlsZS5nZXRFeHRlbnNpb24oKSB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgdW5pcXVlIGVycm9yIG1lc3NhZ2VzIHRvIHRoZSBlcnJvciBhbGVydHNcbiAgICB0aGlzLmVycm9yQWxlcnRzID0gWy4uLm5ldyBTZXQoZXJyb3JzKV07XG4gIH1cblxuICBwcml2YXRlIF9vbkZpbGVzQWRkZWQoZmlsZXM6IEZsb3dGaWxlW10pIHt9XG5cbiAgb25EcmFnZW50ZXIoKSB7XG4gICAgdGhpcy5kcmFnZ2luZyQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIG9uRHJhZ2xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBpZiAoXG4gICAgICAhZXZlbnQucmVsYXRlZFRhcmdldCB8fFxuICAgICAgIShldmVudC5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFwiLmRyb3B6b25lXCIpXG4gICAgKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBvbkRyb3AoKSB7XG4gICAgdGhpcy5kcmFnZ2luZyQubmV4dChmYWxzZSk7XG4gIH1cblxuICB0cmFja1RyYW5zZmVyKHRyYW5zZmVyOiBUcmFuc2Zlcikge1xuICAgIHJldHVybiB0cmFuc2Zlci5pZDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyB0aGUgdXBsb2FkIHByb2Nlc3MgYnkgaW52b2tpbmcgdGhlIGB1cGxvYWRgIG1ldGhvZFxuICAgKiBvZiB0aGUgYGZsb3dgIGluc3RhbmNlLlxuICAgKiBUaGUgYHVwbG9hZGAgbWV0aG9kIGlzIG92ZXJyaWRkZW4gaW4gdGhlIGBuZ09uSW5pdGAgbWV0aG9kIHRvIG1hdGNoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIGFzc2lzdGFudCBBUEkuXG4gICAqL1xuICB1cGxvYWQoKSB7XG4gICAgdGhpcy5mbG93LnVwbG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyB0aGUgZmlsZSB1cGxvYWQgcHJvY2VzcyBieSBwcmVwYXJpbmcgdGhlIGZvcm0gZGF0YSxcbiAgICogc2V0dGluZyB0aGUgdXBsb2FkaW5nIGZsYWcsIGFuZCBtYWtpbmcgYW4gQVBJIGNhbGwgdG8gdXBsb2FkIHRoZSBmaWxlcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogLSBDb2xsZWN0cyBhbGwgZmlsZXMgZnJvbSB0aGUgYGZsb3dKc2AgaW5zdGFuY2UgYW5kIGFwcGVuZHMgdGhlbSB0byBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgKiAtIFN1YnNjcmliZXMgdG8gdGhlIHVwbG9hZCBwcm9jZXNzIHRvIGhhbmRsZSBwcm9ncmVzcyB1cGRhdGVzLCBjb21wbGV0aW9uLCBhbmQgZXJyb3JzLlxuICAgKiAtIFRyaWdnZXJzIHRyYWNraW5nIHRoZSBpbmRleGluZyBwcm9jZXNzIHVwb24gc3VjY2Vzc2Z1bCB1cGxvYWQgY29tcGxldGlvbi5cbiAgICogLSBDbGVhbnMgdXAgdGhlIGBmbG93YCBpbnN0YW5jZSBhZnRlciB0aGUgdXBsb2FkIHByb2Nlc3MgaXMgZmluYWxpemVkLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydFVwbG9hZCgpIHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgLy8gQWRkIGFsbCBmaWxlcyB3aXRoIHRoZWlyIG9yaWdpbmFsIG5hbWVzXG4gICAgdGhpcy5mbG93LmZsb3dKcy5maWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoZmlsZS5uYW1lLCBmaWxlLmZpbGUpO1xuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIGVycm9yIGFsZXJ0c1xuICAgIHRoaXMuZXJyb3JBbGVydHMgPSBbXTtcbiAgICAvLyBTZXQgdGhlIHVwbG9hZGluZyBmbGFnIHRvIHRydWVcbiAgICB0aGlzLnVwbG9hZGluZyQubmV4dCh0cnVlKTtcblxuICAgIC8vIE1ha2UgdGhlIEFQSSBjYWxsIHRvIHVwbG9hZCB0aGUgZmlsZXNcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLnVwbG9hZERvY3VtZW50cyhmb3JtRGF0YSkucGlwZShcbiAgICAgICAgdGFwKChldmVudDogVXBsb2FkRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3VwbG9hZFByb2dyZXNzJykge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRpbmdJbmZvcyQubmV4dChldmVudCBhcyBVcGxvYWRpbmdJbmZvcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChldmVudC50eXBlID09PSAncmVzcG9uc2UnKSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNrSW5kZXhpbmdQcm9jZXNzKGV2ZW50LmJvZHkuc3RhdHVzVG9rZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkaW5nJC5uZXh0KGZhbHNlKTsgLy8gU2V0IHRoZSB1cGxvYWRpbmcgZmxhZyB0byBmYWxzZSBPTkxZIGluIGNhc2Ugb2YgYW4gZXJyb3IuIE90aGVyd2lzZSwga2VlcCBpdCB0cnVlIHVudGlsIHRoZSBzdGFydCBvZiBpbmRleGluZyBwcm9jZXNzIGluIG9yZGVyIHRvIHByZXZlbnQgZmxpY2tlcmluZyBvZiB0aGUgVUlcbiAgICAgICAgICB0aGlzLnVwbG9hZGluZ0luZm9zJC5uZXh0KHVuZGVmaW5lZCk7IC8vIENsZWFyIHRoZSB1cGxvYWRpbmcgaW5mb3NcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcih0aGlzLnRyYW5zbG9jby50cmFuc2xhdGUoJ2NoYXREb2N1bWVudHNVcGxvYWQuZXJyb3JVcGxvYWRpbmdGaWxlcycpKTtcbiAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgLy8gQ2xlYXIgdGhlIGZsb3cgaW5zdGFuY2UgYWZ0ZXIgdGhlIHVwbG9hZCBpcyBjb21wbGV0ZSBvciBhbiBlcnJvciBvY2N1cnNcbiAgICAgICAgICB0aGlzLmZsb3cuY2FuY2VsKCk7XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFja3MgdGhlIGluZGV4aW5nIHByb2Nlc3MgZm9yIGEgc2luZ2xlIGRvY3VtZW50cyB1cGxvYWQgc2Vzc2lvbiBieSBwb2xsaW5nIHRoZSBBUEkgZm9yIGl0cyBzdGF0dXMuXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIEEgdW5pcXVlIHRva2VuIHJlcHJlc2VudGluZyB0aGUgc2luZ2xlIGRvY3VtZW50cyB1cGxvYWQgc2Vzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogLSBDbGVhcnMgdGhlIHVwbG9hZGluZyBmbGFncyBhbmQgc2V0cyB0aGUgaW5kZXhpbmcgZmxhZyB0byB0cnVlIGJlZm9yZSBzdGFydGluZyB0aGUgcHJvY2Vzcy5cbiAgICogLSBQb2xscyB0aGUgQVBJIGV2ZXJ5IChwb2xsaW5nSW50ZXJ2YWw6IGRlZmF1bHQgPSAxIHNlY29uZCkgdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgaW5kZXhpbmcgc3RhdHVzLlxuICAgKiAtIFVwZGF0ZXMgdGhlIGBpbmRleGluZ0luZm9zYCBwcm9wZXJ0eSB3aXRoIHRoZSBsYXRlc3Qgc3RhdHVzLlxuICAgKiAtIFN0b3BzIHBvbGxpbmcgd2hlbiB0aGUgaW5kZXhpbmcgcHJvY2VzcyBpcyBjb21wbGV0ZWQgb3IgYW4gZXJyb3Igb2NjdXJzLlxuICAgKiAtIENsZWFucyB1cCBieSByZXNldHRpbmcgdGhlIGluZGV4aW5nIGZsYWdzIGFuZCBjbGVhcmluZyB0aGUgYGluZGV4aW5nSW5mb3NgIHByb3BlcnR5IHdoZW4gdGhlIHByb2Nlc3MgaXMgZmluYWxpemVkLlxuICAgKi9cbiAgdHJhY2tJbmRleGluZ1Byb2Nlc3ModG9rZW46IHN0cmluZykge1xuICAgIC8vIENsZWFyIHRoZSB1cGxvYWRpbmcgZmxhZ3NcbiAgICB0aGlzLnVwbG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgdGhpcy51cGxvYWRpbmdJbmZvcyQubmV4dCh1bmRlZmluZWQpO1xuICAgIC8vIFNldCB0aGUgaW5kZXhpbmcgZmxhZyB0byB0cnVlXG4gICAgdGhpcy5pbmRleGluZyQubmV4dCh0cnVlKTtcblxuICAgIC8vIENvbWJpbmUgaW1tZWRpYXRlIEFQSSBjYWxsIHdpdGggaW50ZXJ2YWwtYmFzZWQgcG9sbGluZ1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBpbnRlcnZhbCh0aGlzLnBvbGxpbmdJbnRlcnZhbCkucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKDApLCAvLyBUcmlnZ2VyIHRoZSBBUEkgY2FsbCBpbW1lZGlhdGVseVxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmdldEluZGV4aW5nU3RhdHVzKHRva2VuKSksXG4gICAgICAgIHRhcCgocmVzOiBJbmRleGluZ0luZm9zKSA9PiB0aGlzLmluZGV4aW5nSW5mb3MkLm5leHQocmVzKSksXG4gICAgICAgIHRha2VXaGlsZSgocmVzcG9uc2U6IEluZGV4aW5nSW5mb3MpID0+ICFyZXNwb25zZS5pc0NvbXBsZXRlZCwgdHJ1ZSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKHRoaXMudHJhbnNsb2NvLnRyYW5zbGF0ZSgnY2hhdERvY3VtZW50c1VwbG9hZC5lcnJvckluZGV4aW5nU3RhdHVzJykpO1xuICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAvLyBDbGVhciB0aGUgaW5kZXhpbmcgZmxhZ3NcbiAgICAgICAgICB0aGlzLmluZGV4aW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmluZGV4aW5nSW5mb3MkLm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGluZGV4aW5nIHByb2dyZXNzIGFzIGEgcGVyY2VudGFnZSBvZiBjb21wbGV0ZWQgZG9jdW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaW5mb3MgLSBUaGUgaW5kZXhpbmcgaW5mb3JtYXRpb24gY29udGFpbmluZyB0aGUgbGlzdCBvZiBkb2N1bWVudHMgYW5kIHRoZWlyIHN0YXR1c2VzLlxuICAgKiBAcmV0dXJucyBUaGUgcHJvZ3Jlc3MgYXMgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLCB3aGVyZSAwIGluZGljYXRlcyBubyBwcm9ncmVzcyBhbmQgMSBpbmRpY2F0ZXMgYWxsIGRvY3VtZW50cyBhcmUgcHJvY2Vzc2VkIChwcm9jZXNzZWQgbWVhbnMgZWl0aGVyIGluZGV4ZWQgb3IgZXJyb3JlZCkuXG4gICAqICAgICAgICAgIFJldHVybnMgMCBpZiB0aGUgaW5wdXQgaXMgaW52YWxpZCBvciB0aGVyZSBhcmUgbm8gZG9jdW1lbnRzLlxuICAgKi9cbiAgZ2V0SW5kZXhpbmdQcm9ncmVzcyhpbmZvczogSW5kZXhpbmdJbmZvcyB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gICAgaWYgKCFpbmZvcyB8fCAhaW5mb3MuZG9jcykgcmV0dXJuIDA7XG4gICAgY29uc3QgY29tcGxldGVkID0gaW5mb3MuZG9jcy5maWx0ZXIoZG9jID0+IGRvYy5zdGF0dXMgPT09IFwiSW5kZXhlZFwiIHx8IGRvYy5zdGF0dXMgPT09IFwiRXJyb3JcIikubGVuZ3RoO1xuICAgIGNvbnN0IHRvdGFsID0gaW5mb3MuZG9jcy5sZW5ndGg7XG4gICAgcmV0dXJuIGNvbXBsZXRlZC90b3RhbDtcbiAgfVxuXG59XG4iLCI8bmctY29udGFpbmVyICNmbG93PVwiZmxvd1wiIFtmbG93Q29uZmlnXT1cImZsb3dDb25maWdcIj48L25nLWNvbnRhaW5lcj5cbjxkaXYgY2xhc3M9XCJmaWxlLXVwbG9hZC1jb250YWluZXJcIj5cbiAgPGlucHV0XG4gICAgdHlwZT1cImZpbGVcIlxuICAgIGZsb3dCdXR0b25cbiAgICBbZmxvd109XCJmbG93LmZsb3dKc1wiXG4gICAgbXVsdGlwbGVcbiAgICBoaWRkZW5cbiAgICAjZmlsZUlucHV0PlxuICA8ZGl2XG4gICAgZmxvd0Ryb3BcbiAgICBbZmxvd109XCJmbG93LmZsb3dKc1wiXG4gICAgKGRyYWdlbnRlcik9XCJvbkRyYWdlbnRlcigpXCJcbiAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ2xlYXZlKCRldmVudClcIlxuICAgIChkcm9wKT1cIm9uRHJvcCgpXCJcbiAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIlxuICAgIGNsYXNzPVwiZHJvcHpvbmVcIlxuICAgIFtuZ0NsYXNzXT1cInsnZHJvcHpvbmUtLWFjdGl2ZSc6IChkcmFnZ2luZyQgfCBhc3luYyl9XCJcbiAgICBbaGlkZGVuXT1cIih1cGxvYWRpbmckIHwgYXN5bmMpIHx8IChpbmRleGluZyQgfCBhc3luYylcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGRyYWdnaW5nJCB8IGFzeW5jKTsgZWxzZSBkcmFnZ2luZ0NvbnRlbnRcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2xvdWQtdXBsb2FkLWFsdFwiPjwvaT5cbiAgICAgICAgPHNwYW4+e3sgJ2NoYXREb2N1bWVudHNVcGxvYWQuZHJhZ0FuZERyb3AnIHwgdHJhbnNsb2NvIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtb3JhbmdlXCI+e3sgJ2NoYXREb2N1bWVudHNVcGxvYWQuY2xpY2tUb0Jyb3dzZScgfCB0cmFuc2xvY28gfX08L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZHJhZ2dpbmdDb250ZW50PlxuICAgICAgICA8c3Bhbj57eyAnY2hhdERvY3VtZW50c1VwbG9hZC5kcm9wRmlsZXMnIHwgdHJhbnNsb2NvIH19PC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cIih1cGxvYWRpbmckIHwgYXN5bmMpIHx8IChpbmRleGluZyQgfCBhc3luYylcIiBjbGFzcz1cImRyb3B6b25lIGRyb3B6b25lLS1hY3RpdmVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHVwbG9hZGluZyQgfCBhc3luYyk7IGVsc2UgaW5kZXhpbmdTdGF0ZVwiPlxuICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc3Bpbm5lciBmYS1wdWxzZVwiPjwvaT5cbiAgICAgIDxzcGFuPlxuICAgICAgICB7eyAnY2hhdERvY3VtZW50c1VwbG9hZC51cGxvYWRpbmdGaWxlcycgfCB0cmFuc2xvY286IHsgY291bnQ6IChmbG93LnRyYW5zZmVycyQgfCBhc3luYykhLnRyYW5zZmVycy5sZW5ndGggfSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCIodXBsb2FkaW5nSW5mb3MkIHwgYXN5bmMpIGFzIHVwbG9hZGluZ0luZm9zXCI+e3sgdXBsb2FkaW5nSW5mb3MucHJvZ3Jlc3MgfCBudW1iZXI6JzEuMC0wJyB9fSU8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNpbmRleGluZ1N0YXRlPlxuICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc3Bpbm5lciBmYS1wdWxzZVwiPjwvaT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmRleGluZ0luZm9zJCB8IGFzeW5jIGFzIGluZGV4aW5nSW5mb1wiPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7eyAnY2hhdERvY3VtZW50c1VwbG9hZC5pbmRleGluZ0ZpbGVzJyB8IHRyYW5zbG9jbzogeyBjb3VudDogaW5kZXhpbmdJbmZvLmRvY3MubGVuZ3RoIH0gfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBnZXRJbmRleGluZ1Byb2dyZXNzKGluZGV4aW5nSW5mbykgKiAxMDAgfCBudW1iZXI6JzEuMC0wJyB9fSU8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8dWwgKm5nSWY9XCJlcnJvckFsZXJ0cy5sZW5ndGggPiAwXCIgY2xhc3M9XCJlcnJvci1saXN0IG10LTNcIj5cbiAgICA8bGkgKm5nRm9yPVwibGV0IGVycm9yIG9mIGVycm9yQWxlcnRzXCI+XG4gICAgICB7eyBlcnJvciB9fVxuICAgIDwvbGk+XG4gIDwvdWw+XG5cbiAgPGRpdiAqbmdJZj1cIigoZmxvdy50cmFuc2ZlcnMkIHwgYXN5bmMpPy50cmFuc2ZlcnM/Lmxlbmd0aCA+IDApICYmICEodXBsb2FkaW5nJCB8IGFzeW5jKVwiIGNsYXNzPVwiZmlsZS1saXN0IG10LTNcIj5cbiAgICA8dWw+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IHRyYW5zZmVyIG9mIChmbG93LnRyYW5zZmVycyQgfCBhc3luYykhLnRyYW5zZmVyczsgdHJhY2tCeTogdHJhY2tUcmFuc2ZlclwiPlxuICAgICAgICA8c3EtZm9ybWF0LWljb24gW2V4dGVuc2lvbl09XCJ0cmFuc2Zlci5mbG93RmlsZS5nZXRFeHRlbnNpb24oKVwiIGNsYXNzPVwibWUtMVwiPjwvc3EtZm9ybWF0LWljb24+XG4gICAgICAgIDxzcGFuIFt0aXRsZV09XCJ0cmFuc2Zlci5uYW1lXCI+e3sgdHJhbnNmZXIubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2ggbXMtMVwiIChjbGljayk9XCJmbG93LmNhbmNlbEZpbGUodHJhbnNmZXIpXCIgW3RpdGxlXT1cIidjaGF0RG9jdW1lbnRzVXBsb2FkLmNhbmNlbCcgfCB0cmFuc2xvY29cIj48L2k+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggbXQtMlwiPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGNhbmNlbC1idG4gbWUtMlwiXG4gICAgICAoY2xpY2spPVwiZmxvdy5jYW5jZWwoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiISgoZmxvdy50cmFuc2ZlcnMkIHwgYXN5bmMpPy50cmFuc2ZlcnM/Lmxlbmd0aCA+IDApIHx8ICh1cGxvYWRpbmckIHwgYXN5bmMpIHx8IChpbmRleGluZyQgfCBhc3luYylcIj5cbiAgICAgIHt7ICdjaGF0RG9jdW1lbnRzVXBsb2FkLmNhbmNlbCcgfCB0cmFuc2xvY28gfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwidXBsb2FkLWJ0blwiXG4gICAgICAoY2xpY2spPVwidXBsb2FkKClcIlxuICAgICAgW2Rpc2FibGVkXT1cIiEoKGZsb3cudHJhbnNmZXJzJCB8IGFzeW5jKT8udHJhbnNmZXJzPy5sZW5ndGggPiAwKSB8fCAodXBsb2FkaW5nJCB8IGFzeW5jKSB8fCAoaW5kZXhpbmckIHwgYXN5bmMpXCI+XG4gICAgICB7eyAnY2hhdERvY3VtZW50c1VwbG9hZC51cGxvYWQnIHwgdHJhbnNsb2NvIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -12,9 +12,12 @@ export class MessageContentPipe {
|
|
|
12
12
|
transform(messageContent) {
|
|
13
13
|
if (typeof messageContent === "string")
|
|
14
14
|
return messageContent;
|
|
15
|
-
if (!Array.isArray(messageContent))
|
|
15
|
+
if (!Array.isArray(messageContent)) {
|
|
16
|
+
if (!!messageContent['type'] && messageContent['type'] === "text")
|
|
17
|
+
return messageContent.text;
|
|
16
18
|
throw new Error("Invalid message format, should be an Array of element, got content as" +
|
|
17
19
|
typeof messageContent);
|
|
20
|
+
}
|
|
18
21
|
const content = messageContent[0];
|
|
19
22
|
if (content.type === "text")
|
|
20
23
|
return content.text;
|
|
@@ -31,4 +34,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
31
34
|
standalone: true,
|
|
32
35
|
}]
|
|
33
36
|
}] });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1jb250ZW50LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9waXBlcy9tZXNzYWdlLWNvbnRlbnQucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFHcEQ7Ozs7Ozs7R0FPRztBQUtILE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsU0FBUyxDQUFDLGNBQWlDO1FBQ3pDLElBQUksT0FBTyxjQUFjLEtBQUssUUFBUTtZQUFFLE9BQU8sY0FBYyxDQUFDO1FBRTlELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxNQUFNO2dCQUFFLE9BQVEsY0FBcUMsQ0FBQyxJQUFJLENBQUM7WUFFdEgsTUFBTSxJQUFJLEtBQUssQ0FDYix1RUFBdUU7Z0JBQ3JFLE9BQU8sY0FBYyxDQUN4QixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQW1CLENBQUM7UUFFcEQsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU07WUFBRSxPQUFRLE9BQThCLENBQUMsSUFBSSxDQUFDO1FBRXpFLE9BQU8sQ0FBQyxLQUFLLENBQUMsdURBQXVELEdBQUcsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0YsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOytHQXBCVSxrQkFBa0I7NkdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFKOUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE1lc3NhZ2VDb250ZW50LCBSYXdNZXNzYWdlQ29udGVudCwgVGV4dE1lc3NhZ2VDb250ZW50IH0gZnJvbSBcIi4uL3R5cGVzL21lc3NhZ2UtY29udGVudC50eXBlc1wiO1xuXG4vKipcbiAqIFBpcGUgdG8gZXh0cmFjdCB0aGUgY29udGVudCBvZiBhIG1lc3NhZ2VcbiAqIE1haW4gcm9sZSBpcyB0byBzdXBwb3J0IGhvdyB0byByZW5kZXIgZWFjaCB0eXBlIG9mIG1lc3NhZ2UgZGlyZWN0bHkgZnJvbSB0aGUgdGVtcGxhdGVcbiAqIFxuICogQHBhcmFtIG1lc3NhZ2VDb250ZW50IFRoZSBtZXNzYWdlIGNvbnRlbnQgdG8gZXh0cmFjdFxuICogXG4gKiBAcmV0dXJucyBUaGUgY29udGVudCBvZiB0aGUgbWVzc2FnZVxuICovXG5AUGlwZSh7XG4gIG5hbWU6IFwibWVzc2FnZUNvbnRlbnRcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZUNvbnRlbnRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShtZXNzYWdlQ29udGVudDogUmF3TWVzc2FnZUNvbnRlbnQpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZUNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHJldHVybiBtZXNzYWdlQ29udGVudDtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlQ29udGVudCkpIHtcbiAgICAgIGlmICghIW1lc3NhZ2VDb250ZW50Wyd0eXBlJ10gJiYgbWVzc2FnZUNvbnRlbnRbJ3R5cGUnXSA9PT0gXCJ0ZXh0XCIpIHJldHVybiAobWVzc2FnZUNvbnRlbnQgYXMgVGV4dE1lc3NhZ2VDb250ZW50KS50ZXh0O1xuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiSW52YWxpZCBtZXNzYWdlIGZvcm1hdCwgc2hvdWxkIGJlIGFuIEFycmF5IG9mIGVsZW1lbnQsIGdvdCBjb250ZW50IGFzXCIgK1xuICAgICAgICAgIHR5cGVvZiBtZXNzYWdlQ29udGVudFxuICAgICAgKTtcbiAgICB9XG4gICAgICBcbiAgICBjb25zdCBjb250ZW50ID0gbWVzc2FnZUNvbnRlbnRbMF0gYXMgTWVzc2FnZUNvbnRlbnQ7XG5cbiAgICBpZiAoY29udGVudC50eXBlID09PSBcInRleHRcIikgcmV0dXJuIChjb250ZW50IGFzIFRleHRNZXNzYWdlQ29udGVudCkudGV4dDtcblxuICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LCB0eXBlIG9mIG1lc3NhZ2Ugbm90IHN1cHBvcnRlZFwiICsgdHlwZW9mIGNvbnRlbnQudHlwZSk7XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -5,8 +5,6 @@ export * from './saved-chats/saved-chats.component';
|
|
|
5
5
|
export * from './initials-avatar/initials-avatar.component';
|
|
6
6
|
export * from './format-icon/format-icon.component';
|
|
7
7
|
export * from './types';
|
|
8
|
-
export * from './websocket-chat.service';
|
|
9
|
-
export * from './rest-chat.service';
|
|
10
8
|
export * from './instance-manager.service';
|
|
11
9
|
export * from './prompt.component';
|
|
12
10
|
export * from './documents-upload/document-upload/document-upload.component';
|
|
@@ -15,4 +13,4 @@ export * from './documents-upload/documents-upload.service';
|
|
|
15
13
|
export * from './documents-upload/documents-upload.model';
|
|
16
14
|
export * from './documents-upload/document-overview/document-overview.component';
|
|
17
15
|
export * from './services/notification.service';
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYywwREFBMEQsQ0FBQztBQUN6RSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxrRUFBa0UsQ0FBQztBQUNqRixjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jaGF0LXNldHRpbmdzLXYzL2NoYXQtc2V0dGluZ3MtdjMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY2hhdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jaGF0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zYXZlZC1jaGF0cy9zYXZlZC1jaGF0cy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbml0aWFscy1hdmF0YXIvaW5pdGlhbHMtYXZhdGFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm1hdC1pY29uL2Zvcm1hdC1pY29uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vaW5zdGFuY2UtbWFuYWdlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvbXB0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2RvY3VtZW50cy11cGxvYWQvZG9jdW1lbnQtdXBsb2FkL2RvY3VtZW50LXVwbG9hZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LWxpc3QvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50cy11cGxvYWQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2RvY3VtZW50cy11cGxvYWQvZG9jdW1lbnRzLXVwbG9hZC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2RvY3VtZW50cy11cGxvYWQvZG9jdW1lbnQtb3ZlcnZpZXcvZG9jdW1lbnQtb3ZlcnZpZXcuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuIl19
|
|
@@ -5,6 +5,7 @@ import { BehaviorSubject, Subscription, combineLatest, filter, of, switchMap, ta
|
|
|
5
5
|
import { provideTranslocoScope, TranslocoPipe, TranslocoService } from '@jsverse/transloco';
|
|
6
6
|
import { parseISO, toDate } from "date-fns";
|
|
7
7
|
import { isAuthenticated } from "@sinequa/atomic";
|
|
8
|
+
import { AssistantUtils } from "../utils/utils.service";
|
|
8
9
|
import { DialogDeleteSavedChatComponent } from "../dialogs/delete-saved-chat.component";
|
|
9
10
|
import { DialogRenameSavedChatComponent } from "../dialogs/rename-saved-chat.component";
|
|
10
11
|
import { InstanceManagerService } from "../instance-manager.service";
|
|
@@ -21,11 +22,14 @@ export class SavedChatsComponent {
|
|
|
21
22
|
this.instanceManagerService = inject(InstanceManagerService);
|
|
22
23
|
this.notificationsService = inject(NotificationsService);
|
|
23
24
|
this.transloco = inject(TranslocoService);
|
|
25
|
+
this.assistantUtils = inject(AssistantUtils);
|
|
24
26
|
}
|
|
25
27
|
ngOnInit() {
|
|
26
28
|
this.subscription.add(of(isAuthenticated()).pipe(tap(_ => this.instantiateChatService()), switchMap(_ => this.chatService.userOverride$), switchMap(_ => this.chatService.initProcess$), filter(success => !!success), tap(_ => {
|
|
27
29
|
this.onListSavedChat();
|
|
28
|
-
this.chatService.
|
|
30
|
+
if (!!this.chatService.assistantConfig$.value.savedChatSettings?.enabled) {
|
|
31
|
+
this.chatService.listSavedChat();
|
|
32
|
+
}
|
|
29
33
|
})).subscribe());
|
|
30
34
|
}
|
|
31
35
|
ngOnDestroy() {
|
|
@@ -38,18 +42,15 @@ export class SavedChatsComponent {
|
|
|
38
42
|
this.subscription.add(combineLatest([
|
|
39
43
|
this.chatService.savedChats$,
|
|
40
44
|
this.transloco.langChanges$
|
|
41
|
-
]).subscribe(([savedChats]) =>
|
|
42
|
-
this.groupedSavedChats$.next(this._groupSavedChatsByDate(savedChats));
|
|
43
|
-
}));
|
|
45
|
+
]).pipe(filter(([savedChats]) => !!savedChats)).subscribe(([savedChats]) => this.groupedSavedChats$.next(this._groupSavedChatsByDate(savedChats))));
|
|
44
46
|
}
|
|
45
47
|
onLoad(savedChat) {
|
|
46
48
|
if (!!this.chatService.streaming$.value || !!this.chatService.stoppingGeneration$.value) {
|
|
47
49
|
return;
|
|
48
50
|
}
|
|
49
|
-
this.chatService.setSavedChatId(savedChat.id);
|
|
50
51
|
this.chatService.generateChatId(savedChat.id);
|
|
51
52
|
this.chatService.loadSavedChat$.next(savedChat);
|
|
52
|
-
this.chatService.listSavedChat();
|
|
53
|
+
this.chatService.listSavedChat(); // assuming saved chats operations are certainly enabled at this level
|
|
53
54
|
this.load.emit(savedChat);
|
|
54
55
|
}
|
|
55
56
|
_groupSavedChatsByDate(savedChats) {
|
|
@@ -57,7 +58,7 @@ export class SavedChatsComponent {
|
|
|
57
58
|
savedChats
|
|
58
59
|
.sort((a, b) => parseISO(b.modifiedUTC).getTime() - parseISO(a.modifiedUTC).getTime())
|
|
59
60
|
.forEach(savedChat => {
|
|
60
|
-
const groupKey = this.
|
|
61
|
+
const groupKey = this.assistantUtils.getTimeKey(toDate(parseISO(savedChat.modifiedUTC))); // Must convert the UTC date to local date before passing to _getTimeKey
|
|
61
62
|
if (!groupedSavedChats.has(groupKey)) {
|
|
62
63
|
groupedSavedChats.set(groupKey, []);
|
|
63
64
|
}
|
|
@@ -67,11 +68,11 @@ export class SavedChatsComponent {
|
|
|
67
68
|
;
|
|
68
69
|
}
|
|
69
70
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedChatsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
70
|
-
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: [provideTranslocoScope('saved-chats', 'chat')], ngImport: i0, template: "<ng-container *ngIf=\"(chatService.assistantConfig$ | async)?.savedChatSettings.display\">\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.
|
|
71
|
+
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: [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 <i class=\"saved-chat-actions fas fa-pen mx-1\" [sqTooltip]=\"'savedChats.rename' | transloco\" (click)=\"renameDialog.showModal($event, savedChat)\"></i>\n <i class=\"saved-chat-actions fas fa-trash ms-1\" [sqTooltip]=\"'savedChats.delete' | transloco\" (click)=\"deleteDialog.showModal($event, savedChat)\"></i>\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{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" }] }); }
|
|
71
72
|
}
|
|
72
73
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedChatsComponent, decorators: [{
|
|
73
74
|
type: Component,
|
|
74
|
-
args: [{ selector: 'sq-saved-chats-v3', standalone: true, providers: [provideTranslocoScope('saved-chats', 'chat')], imports: [CommonModule, FormsModule, TooltipDirective, DialogRenameSavedChatComponent, DialogDeleteSavedChatComponent, TranslocoPipe], template: "<ng-container *ngIf=\"(chatService.assistantConfig$ | async)?.savedChatSettings.display\">\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.
|
|
75
|
+
args: [{ selector: 'sq-saved-chats-v3', standalone: true, providers: [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 <i class=\"saved-chat-actions fas fa-pen mx-1\" [sqTooltip]=\"'savedChats.rename' | transloco\" (click)=\"renameDialog.showModal($event, savedChat)\"></i>\n <i class=\"saved-chat-actions fas fa-trash ms-1\" [sqTooltip]=\"'savedChats.delete' | transloco\" (click)=\"deleteDialog.showModal($event, savedChat)\"></i>\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{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"] }]
|
|
75
76
|
}], propDecorators: { instanceId: [{
|
|
76
77
|
type: Input
|
|
77
78
|
}], load: [{
|
|
@@ -79,4 +80,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
79
80
|
}], delete: [{
|
|
80
81
|
type: Output
|
|
81
82
|
}] } });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtY2hhdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvc2F2ZWQtY2hhdHMvc2F2ZWQtY2hhdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvc2F2ZWQtY2hhdHMvc2F2ZWQtY2hhdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2xELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhC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QUFxQixDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxXQUNoRCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsOEJBQThCLEVBQUUsOEJBQThCLEVBQUUsYUFBYSxDQUFDOzhCQUk1SCxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIG9mLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBwcm92aWRlVHJhbnNsb2NvU2NvcGUsIFRyYW5zbG9jb1BpcGUsIFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28nO1xuaW1wb3J0IHsgcGFyc2VJU08sIHRvRGF0ZSB9IGZyb20gXCJkYXRlLWZuc1wiO1xuXG5pbXBvcnQgeyBpc0F1dGhlbnRpY2F0ZWQgfSBmcm9tIFwiQHNpbmVxdWEvYXRvbWljXCI7XG5cbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSBcIi4uL2NoYXQuc2VydmljZVwiO1xuaW1wb3J0IHsgRGlhbG9nRGVsZXRlU2F2ZWRDaGF0Q29tcG9uZW50IH0gZnJvbSBcIi4uL2RpYWxvZ3MvZGVsZXRlLXNhdmVkLWNoYXQuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEaWFsb2dSZW5hbWVTYXZlZENoYXRDb21wb25lbnQgfSBmcm9tIFwiLi4vZGlhbG9ncy9yZW5hbWUtc2F2ZWQtY2hhdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IEluc3RhbmNlTWFuYWdlclNlcnZpY2UgfSBmcm9tIFwiLi4vaW5zdGFuY2UtbWFuYWdlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gXCIuLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBTYXZlZENoYXQgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzcS1zYXZlZC1jaGF0cy12MycsXG4gIHRlbXBsYXRlVXJsOiAnc2F2ZWQtY2hhdHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc2F2ZWQtY2hhdHMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbcHJvdmlkZVRyYW5zbG9jb1Njb3BlKCdzYXZlZC1jaGF0cycsICdjaGF0JyldLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgVG9vbHRpcERpcmVjdGl2ZSwgRGlhbG9nUmVuYW1lU2F2ZWRDaGF0Q29tcG9uZW50LCBEaWFsb2dEZWxldGVTYXZlZENoYXRDb21wb25lbnQsIFRyYW5zbG9jb1BpcGVdXG59KVxuZXhwb3J0IGNsYXNzIFNhdmVkQ2hhdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBEZWZpbmUgdGhlIGtleSBiYXNlZCBvbiBpdCwgdGhlIGFwcHJvcHJpYXRlIGNoYXRTZXJ2aWNlIGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlICovXG4gIEBJbnB1dCgpIGluc3RhbmNlSWQ6IHN0cmluZztcblxuICBAT3V0cHV0KCkgbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8U2F2ZWRDaGF0PigpO1xuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxTYXZlZENoYXQ+KCk7XG5cbiAgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlO1xuICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIGdyb3VwZWRTYXZlZENoYXRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBrZXk6IHN0cmluZywgdmFsdWU6IFNhdmVkQ2hhdFtdIH1bXT4oW10pO1xuXG4gIHB1YmxpYyBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlID0gaW5qZWN0KEluc3RhbmNlTWFuYWdlclNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbG9jbyA9IGluamVjdChUcmFuc2xvY29TZXJ2aWNlKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBvZihpc0F1dGhlbnRpY2F0ZWQoKSkucGlwZShcbiAgICAgICAgdGFwKF8gPT4gdGhpcy5pbnN0YW50aWF0ZUNoYXRTZXJ2aWNlKCkpLFxuICAgICAgICBzd2l0Y2hNYXAoXyA9PiB0aGlzLmNoYXRTZXJ2aWNlLnVzZXJPdmVycmlkZSQpLFxuICAgICAgICBzd2l0Y2hNYXAoXyA9PiB0aGlzLmNoYXRTZXJ2aWNlLmluaXRQcm9jZXNzJCksXG4gICAgICAgIGZpbHRlcihzdWNjZXNzID0+ICEhc3VjY2VzcyksXG4gICAgICAgIHRhcChfID0+IHtcbiAgICAgICAgICB0aGlzLm9uTGlzdFNhdmVkQ2hhdCgpO1xuICAgICAgICAgIHRoaXMuY2hhdFNlcnZpY2UubGlzdFNhdmVkQ2hhdCgpO1xuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgaW5zdGFudGlhdGVDaGF0U2VydmljZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNoYXRTZXJ2aWNlID0gdGhpcy5pbnN0YW5jZU1hbmFnZXJTZXJ2aWNlLmdldEluc3RhbmNlKHRoaXMuaW5zdGFuY2VJZCk7XG4gIH1cblxuICBvbkxpc3RTYXZlZENoYXQoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2Uuc2F2ZWRDaGF0cyQsXG4gICAgICAgIHRoaXMudHJhbnNsb2NvLmxhbmdDaGFuZ2VzJFxuICAgICAgXSkuc3Vic2NyaWJlKChbc2F2ZWRDaGF0c10pID0+IHtcbiAgICAgICAgdGhpcy5ncm91cGVkU2F2ZWRDaGF0cyQubmV4dCh0aGlzLl9ncm91cFNhdmVkQ2hhdHNCeURhdGUoc2F2ZWRDaGF0cykpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgb25Mb2FkKHNhdmVkQ2hhdDogU2F2ZWRDaGF0KSB7XG4gICAgaWYgKCEhdGhpcy5jaGF0U2VydmljZS5zdHJlYW1pbmckLnZhbHVlIHx8ICEhdGhpcy5jaGF0U2VydmljZS5zdG9wcGluZ0dlbmVyYXRpb24kLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hhdFNlcnZpY2Uuc2V0U2F2ZWRDaGF0SWQoc2F2ZWRDaGF0LmlkKTtcbiAgICB0aGlzLmNoYXRTZXJ2aWNlLmdlbmVyYXRlQ2hhdElkKHNhdmVkQ2hhdC5pZCk7XG4gICAgdGhpcy5jaGF0U2VydmljZS5sb2FkU2F2ZWRDaGF0JC5uZXh0KHNhdmVkQ2hhdCk7XG4gICAgdGhpcy5jaGF0U2VydmljZS5saXN0U2F2ZWRDaGF0KCk7XG4gICAgdGhpcy5sb2FkLmVtaXQoc2F2ZWRDaGF0KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dyb3VwU2F2ZWRDaGF0c0J5RGF0ZShzYXZlZENoYXRzOiBTYXZlZENoYXRbXSk6IHsga2V5OiBzdHJpbmcsIHZhbHVlOiBTYXZlZENoYXRbXSB9W10ge1xuICAgIGNvbnN0IGdyb3VwZWRTYXZlZENoYXRzID0gbmV3IE1hcDxzdHJpbmcsIFNhdmVkQ2hhdFtdPigpO1xuXG4gICAgc2F2ZWRDaGF0c1xuICAgICAgLnNvcnQoKGEsIGIpID0+IHBhcnNlSVNPKGIubW9kaWZpZWRVVEMpLmdldFRpbWUoKSAtIHBhcnNlSVNPKGEubW9kaWZpZWRVVEMpLmdldFRpbWUoKSlcbiAgICAgIC5mb3JFYWNoKHNhdmVkQ2hhdCA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwS2V5ID0gdGhpcy5jaGF0U2VydmljZS5nZXRUaW1lS2V5KHRvRGF0ZShwYXJzZUlTTyhzYXZlZENoYXQubW9kaWZpZWRVVEMpKSk7IC8vIE11c3QgY29udmVydCB0aGUgVVRDIGRhdGUgdG8gbG9jYWwgZGF0ZSBiZWZvcmUgcGFzc2luZyB0byBfZ2V0VGltZUtleVxuXG4gICAgICAgIGlmICghZ3JvdXBlZFNhdmVkQ2hhdHMuaGFzKGdyb3VwS2V5KSkge1xuICAgICAgICAgIGdyb3VwZWRTYXZlZENoYXRzLnNldChncm91cEtleSwgW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXBlZFNhdmVkQ2hhdHMuZ2V0KGdyb3VwS2V5KSEucHVzaChzYXZlZENoYXQpO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cGVkU2F2ZWRDaGF0cywgKFtrZXksIHZhbHVlXSkgPT4gKHsga2V5LCB2YWx1ZSB9KSk7O1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiKGNoYXRTZXJ2aWNlLmFzc2lzdGFudENvbmZpZyQgfCBhc3luYyk/LnNhdmVkQ2hhdFNldHRpbmdzLmRpc3BsYXlcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgKGdyb3VwZWRTYXZlZENoYXRzJCB8IGFzeW5jKVwiIGNsYXNzPVwic2F2ZWQtY2hhdHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtY2hhdC1kYXRlXCI+e3tncm91cC5rZXl9fTwvZGl2PlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHNhdmVkQ2hhdCBvZiBncm91cC52YWx1ZVwiXG4gICAgICAoY2xpY2spPVwib25Mb2FkKHNhdmVkQ2hhdClcIlxuICAgICAgY2xhc3M9XCJzYXZlZC1jaGF0IHAtMlwiXG4gICAgICBbY2xhc3MuZm9yYmlkZGVuXT1cIihjaGF0U2VydmljZS5zdHJlYW1pbmckIHwgYXN5bmMpIHx8IChjaGF0U2VydmljZS5zdG9wcGluZ0dlbmVyYXRpb24kIHwgYXN5bmMpXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY2hhdFNlcnZpY2Uuc2F2ZWRDaGF0SWQgPT09IHNhdmVkQ2hhdC5pZFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZSBtZS0xXCIgW3NxVG9vbHRpcF09XCJzYXZlZENoYXQudGl0bGVcIj57e3NhdmVkQ2hhdC50aXRsZX19PC9zcGFuPlxuICAgICAgPGkgY2xhc3M9XCJzYXZlZC1jaGF0LWFjdGlvbnMgZmFzIGZhLXBlbiBteC0xXCIgW3NxVG9vbHRpcF09XCInc2F2ZWRDaGF0cy5yZW5hbWUnIHwgdHJhbnNsb2NvXCIgKGNsaWNrKT1cInJlbmFtZURpYWxvZy5zaG93TW9kYWwoJGV2ZW50LCBzYXZlZENoYXQpXCI+PC9pPlxuICAgICAgPGkgY2xhc3M9XCJzYXZlZC1jaGF0LWFjdGlvbnMgZmFzIGZhLXRyYXNoIG1zLTFcIiBbc3FUb29sdGlwXT1cIidzYXZlZENoYXRzLmRlbGV0ZScgfCB0cmFuc2xvY29cIiAoY2xpY2spPVwiZGVsZXRlRGlhbG9nLnNob3dNb2RhbCgkZXZlbnQsIHNhdmVkQ2hhdClcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxzcS1kaWFsb2ctZGVsZXRlLXNhdmVkLWNoYXQgW2NoYXRTZXJ2aWNlXT1cImNoYXRTZXJ2aWNlXCIgKGRlbGV0ZSk9XCJkZWxldGUuZW1pdCgkZXZlbnQpXCIgI2RlbGV0ZURpYWxvZyAvPlxuPHNxLWRpYWxvZy1yZW5hbWUtc2F2ZWQtY2hhdCBbY2hhdFNlcnZpY2VdPVwiY2hhdFNlcnZpY2VcIiAjcmVuYW1lRGlhbG9nIC8+XG4iXX0=
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtY2hhdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvc2F2ZWQtY2hhdHMvc2F2ZWQtY2hhdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvc2F2ZWQtY2hhdHMvc2F2ZWQtY2hhdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FB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QkFBbUIsbUpBSG5CLENBQUMscUJBQXFCLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLDBCQ3hCM0QsK3hDQW9CQSxxbUVES1ksWUFBWSxvVEFBRSxXQUFXLCtCQUFFLGdCQUFnQixxTUFBRSw4QkFBOEIsaUdBQUUsOEJBQThCLGlIQUFFLGFBQWE7OzRGQUV6SCxtQkFBbUI7a0JBUi9CLFNBQVM7K0JBQ0UsbUJBQW1CLGNBR2pCLElBQUksYUFDTCxDQUFDLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxXQUNoRCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsOEJBQThCLEVBQUUsOEJBQThCLEVBQUUsYUFBYSxDQUFDOzhCQUk1SCxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIG9mLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBwcm92aWRlVHJhbnNsb2NvU2NvcGUsIFRyYW5zbG9jb1BpcGUsIFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28nO1xuaW1wb3J0IHsgcGFyc2VJU08sIHRvRGF0ZSB9IGZyb20gXCJkYXRlLWZuc1wiO1xuXG5pbXBvcnQgeyBpc0F1dGhlbnRpY2F0ZWQgfSBmcm9tIFwiQHNpbmVxdWEvYXRvbWljXCI7XG5cbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSBcIi4uL2NoYXQuc2VydmljZVwiO1xuaW1wb3J0IHsgQXNzaXN0YW50VXRpbHMgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHMuc2VydmljZVwiO1xuaW1wb3J0IHsgRGlhbG9nRGVsZXRlU2F2ZWRDaGF0Q29tcG9uZW50IH0gZnJvbSBcIi4uL2RpYWxvZ3MvZGVsZXRlLXNhdmVkLWNoYXQuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEaWFsb2dSZW5hbWVTYXZlZENoYXRDb21wb25lbnQgfSBmcm9tIFwiLi4vZGlhbG9ncy9yZW5hbWUtc2F2ZWQtY2hhdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IEluc3RhbmNlTWFuYWdlclNlcnZpY2UgfSBmcm9tIFwiLi4vaW5zdGFuY2UtbWFuYWdlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gXCIuLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBTYXZlZENoYXQgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzcS1zYXZlZC1jaGF0cy12MycsXG4gIHRlbXBsYXRlVXJsOiAnc2F2ZWQtY2hhdHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc2F2ZWQtY2hhdHMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbcHJvdmlkZVRyYW5zbG9jb1Njb3BlKCdzYXZlZC1jaGF0cycsICdjaGF0JyldLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgVG9vbHRpcERpcmVjdGl2ZSwgRGlhbG9nUmVuYW1lU2F2ZWRDaGF0Q29tcG9uZW50LCBEaWFsb2dEZWxldGVTYXZlZENoYXRDb21wb25lbnQsIFRyYW5zbG9jb1BpcGVdXG59KVxuZXhwb3J0IGNsYXNzIFNhdmVkQ2hhdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBEZWZpbmUgdGhlIGtleSBiYXNlZCBvbiBpdCwgdGhlIGFwcHJvcHJpYXRlIGNoYXRTZXJ2aWNlIGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlICovXG4gIEBJbnB1dCgpIGluc3RhbmNlSWQ6IHN0cmluZztcblxuICBAT3V0cHV0KCkgbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8U2F2ZWRDaGF0PigpO1xuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxTYXZlZENoYXQ+KCk7XG5cbiAgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlO1xuICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIGdyb3VwZWRTYXZlZENoYXRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBrZXk6IHN0cmluZywgdmFsdWU6IFNhdmVkQ2hhdFtdIH1bXT4oW10pO1xuXG4gIHB1YmxpYyBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlID0gaW5qZWN0KEluc3RhbmNlTWFuYWdlclNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbG9jbyA9IGluamVjdChUcmFuc2xvY29TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhc3Npc3RhbnRVdGlscyA9IGluamVjdChBc3Npc3RhbnRVdGlscyk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgb2YoaXNBdXRoZW50aWNhdGVkKCkpLnBpcGUoXG4gICAgICAgIHRhcChfID0+IHRoaXMuaW5zdGFudGlhdGVDaGF0U2VydmljZSgpKSxcbiAgICAgICAgc3dpdGNoTWFwKF8gPT4gdGhpcy5jaGF0U2VydmljZS51c2VyT3ZlcnJpZGUkKSxcbiAgICAgICAgc3dpdGNoTWFwKF8gPT4gdGhpcy5jaGF0U2VydmljZS5pbml0UHJvY2VzcyQpLFxuICAgICAgICBmaWx0ZXIoc3VjY2VzcyA9PiAhIXN1Y2Nlc3MpLFxuICAgICAgICB0YXAoXyA9PiB7XG4gICAgICAgICAgdGhpcy5vbkxpc3RTYXZlZENoYXQoKTtcbiAgICAgICAgICBpZiAoISF0aGlzLmNoYXRTZXJ2aWNlLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLnNhdmVkQ2hhdFNldHRpbmdzPy5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLmxpc3RTYXZlZENoYXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBpbnN0YW50aWF0ZUNoYXRTZXJ2aWNlKCk6IHZvaWQge1xuICAgIHRoaXMuY2hhdFNlcnZpY2UgPSB0aGlzLmluc3RhbmNlTWFuYWdlclNlcnZpY2UuZ2V0SW5zdGFuY2UodGhpcy5pbnN0YW5jZUlkKTtcbiAgfVxuXG4gIG9uTGlzdFNhdmVkQ2hhdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZS5zYXZlZENoYXRzJCxcbiAgICAgICAgdGhpcy50cmFuc2xvY28ubGFuZ0NoYW5nZXMkXG4gICAgICBdKS5waXBlKFxuICAgICAgICBmaWx0ZXIoKFtzYXZlZENoYXRzXSkgPT4gISFzYXZlZENoYXRzKVxuICAgICAgKS5zdWJzY3JpYmUoKFtzYXZlZENoYXRzXSkgPT4gdGhpcy5ncm91cGVkU2F2ZWRDaGF0cyQubmV4dCh0aGlzLl9ncm91cFNhdmVkQ2hhdHNCeURhdGUoc2F2ZWRDaGF0cykpKVxuICAgICk7XG4gIH1cblxuICBvbkxvYWQoc2F2ZWRDaGF0OiBTYXZlZENoYXQpIHtcbiAgICBpZiAoISF0aGlzLmNoYXRTZXJ2aWNlLnN0cmVhbWluZyQudmFsdWUgfHwgISF0aGlzLmNoYXRTZXJ2aWNlLnN0b3BwaW5nR2VuZXJhdGlvbiQudmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jaGF0U2VydmljZS5nZW5lcmF0ZUNoYXRJZChzYXZlZENoYXQuaWQpO1xuICAgIHRoaXMuY2hhdFNlcnZpY2UubG9hZFNhdmVkQ2hhdCQubmV4dChzYXZlZENoYXQpO1xuICAgIHRoaXMuY2hhdFNlcnZpY2UubGlzdFNhdmVkQ2hhdCgpOyAvLyBhc3N1bWluZyBzYXZlZCBjaGF0cyBvcGVyYXRpb25zIGFyZSBjZXJ0YWlubHkgZW5hYmxlZCBhdCB0aGlzIGxldmVsXG4gICAgdGhpcy5sb2FkLmVtaXQoc2F2ZWRDaGF0KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dyb3VwU2F2ZWRDaGF0c0J5RGF0ZShzYXZlZENoYXRzOiBTYXZlZENoYXRbXSk6IHsga2V5OiBzdHJpbmcsIHZhbHVlOiBTYXZlZENoYXRbXSB9W10ge1xuICAgIGNvbnN0IGdyb3VwZWRTYXZlZENoYXRzID0gbmV3IE1hcDxzdHJpbmcsIFNhdmVkQ2hhdFtdPigpO1xuXG4gICAgc2F2ZWRDaGF0c1xuICAgICAgLnNvcnQoKGEsIGIpID0+IHBhcnNlSVNPKGIubW9kaWZpZWRVVEMpLmdldFRpbWUoKSAtIHBhcnNlSVNPKGEubW9kaWZpZWRVVEMpLmdldFRpbWUoKSlcbiAgICAgIC5mb3JFYWNoKHNhdmVkQ2hhdCA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwS2V5ID0gdGhpcy5hc3Npc3RhbnRVdGlscy5nZXRUaW1lS2V5KHRvRGF0ZShwYXJzZUlTTyhzYXZlZENoYXQubW9kaWZpZWRVVEMpKSk7IC8vIE11c3QgY29udmVydCB0aGUgVVRDIGRhdGUgdG8gbG9jYWwgZGF0ZSBiZWZvcmUgcGFzc2luZyB0byBfZ2V0VGltZUtleVxuXG4gICAgICAgIGlmICghZ3JvdXBlZFNhdmVkQ2hhdHMuaGFzKGdyb3VwS2V5KSkge1xuICAgICAgICAgIGdyb3VwZWRTYXZlZENoYXRzLnNldChncm91cEtleSwgW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXBlZFNhdmVkQ2hhdHMuZ2V0KGdyb3VwS2V5KSEucHVzaChzYXZlZENoYXQpO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cGVkU2F2ZWRDaGF0cywgKFtrZXksIHZhbHVlXSkgPT4gKHsga2V5LCB2YWx1ZSB9KSk7O1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiKGNoYXRTZXJ2aWNlLmFzc2lzdGFudENvbmZpZyQgfCBhc3luYyk/LnNhdmVkQ2hhdFNldHRpbmdzLmRpc3BsYXlcIj5cbiAgPGRpdiAqbmdJZj1cImNoYXRTZXJ2aWNlLnNhdmVkQ2hhdHNFcnJvciQgfCBhc3luY1wiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCI+XG4gICAge3sgJ3NhdmVkQ2hhdHMubGlzdEVycm9yJyB8IHRyYW5zbG9jbyB9fVxuICA8L2Rpdj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgKGdyb3VwZWRTYXZlZENoYXRzJCB8IGFzeW5jKVwiIGNsYXNzPVwic2F2ZWQtY2hhdHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtY2hhdC1kYXRlXCI+e3tncm91cC5rZXl9fTwvZGl2PlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHNhdmVkQ2hhdCBvZiBncm91cC52YWx1ZVwiXG4gICAgICAoY2xpY2spPVwib25Mb2FkKHNhdmVkQ2hhdClcIlxuICAgICAgY2xhc3M9XCJzYXZlZC1jaGF0IHAtMlwiXG4gICAgICBbY2xhc3MuZm9yYmlkZGVuXT1cIihjaGF0U2VydmljZS5zdHJlYW1pbmckIHwgYXN5bmMpIHx8IChjaGF0U2VydmljZS5zdG9wcGluZ0dlbmVyYXRpb24kIHwgYXN5bmMpXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY2hhdFNlcnZpY2UuY2hhdElkID09PSBzYXZlZENoYXQuaWRcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGUgbWUtMVwiIFtzcVRvb2x0aXBdPVwic2F2ZWRDaGF0LnRpdGxlXCI+e3tzYXZlZENoYXQudGl0bGV9fTwvc3Bhbj5cbiAgICAgIDxpIGNsYXNzPVwic2F2ZWQtY2hhdC1hY3Rpb25zIGZhcyBmYS1wZW4gbXgtMVwiIFtzcVRvb2x0aXBdPVwiJ3NhdmVkQ2hhdHMucmVuYW1lJyB8IHRyYW5zbG9jb1wiIChjbGljayk9XCJyZW5hbWVEaWFsb2cuc2hvd01vZGFsKCRldmVudCwgc2F2ZWRDaGF0KVwiPjwvaT5cbiAgICAgIDxpIGNsYXNzPVwic2F2ZWQtY2hhdC1hY3Rpb25zIGZhcyBmYS10cmFzaCBtcy0xXCIgW3NxVG9vbHRpcF09XCInc2F2ZWRDaGF0cy5kZWxldGUnIHwgdHJhbnNsb2NvXCIgKGNsaWNrKT1cImRlbGV0ZURpYWxvZy5zaG93TW9kYWwoJGV2ZW50LCBzYXZlZENoYXQpXCI+PC9pPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48c3EtZGlhbG9nLWRlbGV0ZS1zYXZlZC1jaGF0IFtjaGF0U2VydmljZV09XCJjaGF0U2VydmljZVwiIChkZWxldGUpPVwiZGVsZXRlLmVtaXQoJGV2ZW50KVwiICNkZWxldGVEaWFsb2cgLz5cbjxzcS1kaWFsb2ctcmVuYW1lLXNhdmVkLWNoYXQgW2NoYXRTZXJ2aWNlXT1cImNoYXRTZXJ2aWNlXCIgI3JlbmFtZURpYWxvZyAvPlxuIl19
|